Revision f711df67

b/linux-user/signal.c
3071 3071
};
3072 3072

  
3073 3073
struct target_ucontext {
3074
    abi_ulong uc_flags;
3075
    abi_ulong uc_link;
3076
    struct target_stack_t uc_stack;
3077
    struct target_sigcontext sc;
3078
    uint32_t extramask[TARGET_NSIG_WORDS - 1];
3074
    abi_ulong tuc_flags;
3075
    abi_ulong tuc_link;
3076
    struct target_stack_t tuc_stack;
3077
    struct target_sigcontext tuc_mcontext;
3078
    uint32_t tuc_extramask[TARGET_NSIG_WORDS - 1];
3079 3079
};
3080 3080

  
3081 3081
/* Signal frames. */
......
3189 3189
        goto badframe;
3190 3190

  
3191 3191
    /* Save the mask.  */
3192
    err |= __put_user(set->sig[0], &frame->uc.sc.oldmask);
3192
    err |= __put_user(set->sig[0], &frame->uc.tuc_mcontext.oldmask);
3193 3193
    if (err)
3194 3194
        goto badframe;
3195 3195

  
......
3198 3198
            goto badframe;
3199 3199
    }
3200 3200

  
3201
    setup_sigcontext(&frame->uc.sc, env);
3201
    setup_sigcontext(&frame->uc.tuc_mcontext, env);
3202 3202

  
3203 3203
    /* Set up to return from userspace. If provided, use a stub
3204 3204
       already in userspace. */
......
3261 3261
        goto badframe;
3262 3262

  
3263 3263
    /* Restore blocked signals */
3264
    if (__get_user(target_set.sig[0], &frame->uc.sc.oldmask))
3264
    if (__get_user(target_set.sig[0], &frame->uc.tuc_mcontext.oldmask))
3265 3265
        goto badframe;
3266 3266
    for(i = 1; i < TARGET_NSIG_WORDS; i++) {
3267 3267
        if (__get_user(target_set.sig[i], &frame->extramask[i - 1]))
......
3270 3270
    target_to_host_sigset_internal(&set, &target_set);
3271 3271
    sigprocmask(SIG_SETMASK, &set, NULL);
3272 3272

  
3273
    restore_sigcontext(&frame->uc.sc, env);
3273
    restore_sigcontext(&frame->uc.tuc_mcontext, env);
3274 3274
    /* We got here through a sigreturn syscall, our path back is via an
3275 3275
       rtb insn so setup r14 for that.  */
3276 3276
    env->regs[14] = env->sregs[SR_PC];

Also available in: Unified diff