Lines Matching +full:ext +full:- +full:regs

21 #include "user-internals.h"
22 #include "signal-common.h"
23 #include "linux-user/trace.h"
24 #include "vdso-asmoffset.h"
31 #define _SIGCONTEXT_NSIG_BPW 64 /* FIXME: 31-bit mode -> 32 */
49 target_s390_regs_common regs; member
80 uint8_t reserved[128 - sizeof(target_sigset_t)];
104 if (ka->sa_flags & TARGET_SA_ONSTACK) { in get_sigframe()
109 else if (/* FIXME !user_mode(regs) */ 0 && in get_sigframe()
110 !(ka->sa_flags & TARGET_SA_RESTORER) && in get_sigframe()
111 ka->sa_restorer) { in get_sigframe()
112 sp = (abi_ulong) ka->sa_restorer; in get_sigframe()
115 return (sp - frame_size) & -8ul; in get_sigframe()
134 __put_user(psw_mask, &sregs->regs.psw.mask); in save_sigregs()
135 __put_user(env->psw.addr, &sregs->regs.psw.addr); in save_sigregs()
138 __put_user(env->regs[i], &sregs->regs.gprs[i]); in save_sigregs()
141 __put_user(env->aregs[i], &sregs->regs.acrs[i]); in save_sigregs()
145 * We have to store the fp registers to current->thread.fp_regs in save_sigregs()
148 __put_user(env->fpc, &sregs->fpregs.fpc); in save_sigregs()
150 __put_user(*get_freg(env, i), &sregs->fpregs.fprs[i]); in save_sigregs()
154 static void save_sigregs_ext(CPUS390XState *env, target_sigregs_ext *ext) in save_sigregs_ext() argument
164 __put_user(env->vregs[i][1], &ext->vxrs_low[i]); in save_sigregs_ext()
167 __put_user(env->vregs[i + 16][0], &ext->vxrs_high[i][0]); in save_sigregs_ext()
168 __put_user(env->vregs[i + 16][1], &ext->vxrs_high[i][1]); in save_sigregs_ext()
187 __put_user(env->regs[15], (abi_ulong *) frame); in setup_frame()
191 QEMU_BUILD_BUG_ON(ARRAY_SIZE(frame->sc.oldmask) != 1); in setup_frame()
192 __put_user(set->sig[0], &frame->sc.oldmask[0]); in setup_frame()
193 __put_user(frame_addr + offsetof(sigframe, sregs), &frame->sc.sregs); in setup_frame()
196 save_sigregs(env, &frame->sregs); in setup_frame()
199 * ??? The kernel uses regs->gprs[2] here, which is not yet the signo. in setup_frame()
203 __put_user(sig, &frame->signo); in setup_frame()
206 save_sigregs_ext(env, &frame->sregs_ext); in setup_frame()
212 if (ka->sa_flags & TARGET_SA_RESTORER) { in setup_frame()
213 restorer = ka->sa_restorer; in setup_frame()
219 env->regs[14] = restorer; in setup_frame()
220 env->regs[15] = frame_addr; in setup_frame()
222 env->psw.mask = PSW_MASK_64 | PSW_MASK_32 | PSW_ASC_PRIMARY in setup_frame()
223 | (env->psw.mask & ~PSW_MASK_ASC); in setup_frame()
224 env->psw.addr = ka->_sa_handler; in setup_frame()
226 env->regs[2] = sig; in setup_frame()
227 env->regs[3] = frame_addr + offsetof(typeof(*frame), sc); in setup_frame()
233 env->regs[4] = 0; /* FIXME: regs->int_code & 127 */ in setup_frame()
234 env->regs[5] = 0; /* FIXME: regs->int_parm_long */ in setup_frame()
235 env->regs[6] = 0; /* FIXME: current->thread.last_break */ in setup_frame()
257 __put_user(env->regs[15], (abi_ulong *) frame); in setup_rt_frame()
263 if (ka->sa_flags & TARGET_SA_RESTORER) { in setup_rt_frame()
264 restorer = ka->sa_restorer; in setup_rt_frame()
270 frame->info = *info; in setup_rt_frame()
277 __put_user(uc_flags, &frame->uc.tuc_flags); in setup_rt_frame()
278 __put_user(0, &frame->uc.tuc_link); in setup_rt_frame()
279 target_save_altstack(&frame->uc.tuc_stack, env); in setup_rt_frame()
280 save_sigregs(env, &frame->uc.tuc_mcontext); in setup_rt_frame()
281 save_sigregs_ext(env, &frame->uc.tuc_mcontext_ext); in setup_rt_frame()
282 tswap_sigset(&frame->uc.tuc_sigmask, set); in setup_rt_frame()
285 env->regs[14] = restorer; in setup_rt_frame()
286 env->regs[15] = frame_addr; in setup_rt_frame()
288 env->psw.mask = PSW_MASK_64 | PSW_MASK_32 | PSW_ASC_PRIMARY in setup_rt_frame()
289 | (env->psw.mask & ~PSW_MASK_ASC); in setup_rt_frame()
290 env->psw.addr = ka->_sa_handler; in setup_rt_frame()
292 env->regs[2] = sig; in setup_rt_frame()
293 env->regs[3] = frame_addr + offsetof(typeof(*frame), info); in setup_rt_frame()
294 env->regs[4] = frame_addr + offsetof(typeof(*frame), uc); in setup_rt_frame()
295 env->regs[5] = 0; /* FIXME: current->thread.last_break */ in setup_rt_frame()
304 __get_user(env->regs[i], &sc->regs.gprs[i]); in restore_sigregs()
307 prev_addr = env->psw.addr; in restore_sigregs()
308 __get_user(mask, &sc->regs.psw.mask); in restore_sigregs()
309 __get_user(addr, &sc->regs.psw.addr); in restore_sigregs()
315 * if (!is_ri_task(current) && (user_sregs.regs.psw.mask & PSW_MASK_RI)) in restore_sigregs()
316 * return -EINVAL; in restore_sigregs()
332 __get_user(env->aregs[i], &sc->regs.acrs[i]); in restore_sigregs()
334 __get_user(env->fpc, &sc->fpregs.fpc); in restore_sigregs()
336 __get_user(*get_freg(env, i), &sc->fpregs.fprs[i]); in restore_sigregs()
340 static void restore_sigregs_ext(CPUS390XState *env, target_sigregs_ext *ext) in restore_sigregs_ext() argument
350 __get_user(env->vregs[i][1], &ext->vxrs_low[i]); in restore_sigregs_ext()
353 __get_user(env->vregs[i + 16][0], &ext->vxrs_high[i][0]); in restore_sigregs_ext()
354 __get_user(env->vregs[i + 16][1], &ext->vxrs_high[i][1]); in restore_sigregs_ext()
361 abi_ulong frame_addr = env->regs[15]; in do_sigreturn()
368 return -QEMU_ESIGRETURN; in do_sigreturn()
373 __get_user(target_set.sig[0], &frame->sc.oldmask[0]); in do_sigreturn()
378 restore_sigregs(env, &frame->sregs); in do_sigreturn()
379 restore_sigregs_ext(env, &frame->sregs_ext); in do_sigreturn()
382 return -QEMU_ESIGRETURN; in do_sigreturn()
388 abi_ulong frame_addr = env->regs[15]; in do_rt_sigreturn()
394 return -QEMU_ESIGRETURN; in do_rt_sigreturn()
396 target_to_host_sigset(&set, &frame->uc.tuc_sigmask); in do_rt_sigreturn()
400 restore_sigregs(env, &frame->uc.tuc_mcontext); in do_rt_sigreturn()
401 restore_sigregs_ext(env, &frame->uc.tuc_mcontext_ext); in do_rt_sigreturn()
403 target_restore_altstack(&frame->uc.tuc_stack, env); in do_rt_sigreturn()
406 return -QEMU_ESIGRETURN; in do_rt_sigreturn()