Lines Matching +full:- +full:j

21 #include "user-internals.h"
22 #include "signal-common.h"
23 #include "linux-user/trace.h"
24 #include "target/arm/cpu-features.h"
42 /* glibc uses a 1024-bit sigset_t */
43 char __unused[1024 / 8 - sizeof(target_sigset_t)];
51 * and be 16-byte aligned. The last structure must be a dummy one with the
72 uint64_t datap; /* 16-byte aligned pointer to extra space cast to __u64 */
139 __put_user(0, &sf->uc.tuc_flags); in target_setup_general_frame()
140 __put_user(0, &sf->uc.tuc_link); in target_setup_general_frame()
142 target_save_altstack(&sf->uc.tuc_stack, env); in target_setup_general_frame()
145 __put_user(env->xregs[i], &sf->uc.tuc_mcontext.regs[i]); in target_setup_general_frame()
147 __put_user(env->xregs[31], &sf->uc.tuc_mcontext.sp); in target_setup_general_frame()
148 __put_user(env->pc, &sf->uc.tuc_mcontext.pc); in target_setup_general_frame()
149 __put_user(pstate_read(env), &sf->uc.tuc_mcontext.pstate); in target_setup_general_frame()
151 __put_user(env->exception.vaddress, &sf->uc.tuc_mcontext.fault_address); in target_setup_general_frame()
154 __put_user(set->sig[i], &sf->uc.tuc_sigmask.sig[i]); in target_setup_general_frame()
163 __put_user(TARGET_FPSIMD_MAGIC, &fpsimd->head.magic); in target_setup_fpsimd_record()
164 __put_user(sizeof(struct target_fpsimd_context), &fpsimd->head.size); in target_setup_fpsimd_record()
165 __put_user(vfp_get_fpsr(env), &fpsimd->fpsr); in target_setup_fpsimd_record()
166 __put_user(vfp_get_fpcr(env), &fpsimd->fpcr); in target_setup_fpsimd_record()
171 __put_user(q[0], &fpsimd->vregs[i * 2 + 1]); in target_setup_fpsimd_record()
172 __put_user(q[1], &fpsimd->vregs[i * 2]); in target_setup_fpsimd_record()
174 __put_user(q[0], &fpsimd->vregs[i * 2]); in target_setup_fpsimd_record()
175 __put_user(q[1], &fpsimd->vregs[i * 2 + 1]); in target_setup_fpsimd_record()
183 __put_user(TARGET_EXTRA_MAGIC, &extra->head.magic); in target_setup_extra_record()
184 __put_user(sizeof(struct target_extra_context), &extra->head.size); in target_setup_extra_record()
185 __put_user(datap, &extra->datap); in target_setup_extra_record()
186 __put_user(extra_size, &extra->size); in target_setup_extra_record()
191 __put_user(0, &end->magic); in target_setup_end_record()
192 __put_user(0, &end->size); in target_setup_end_record()
198 int i, j, vq = sve_vq(env); in target_setup_sve_record() local
201 __put_user(TARGET_SVE_MAGIC, &sve->head.magic); in target_setup_sve_record()
202 __put_user(size, &sve->head.size); in target_setup_sve_record()
203 __put_user(vq * TARGET_SVE_VQ_BYTES, &sve->vl); in target_setup_sve_record()
204 if (FIELD_EX64(env->svcr, SVCR, SM)) { in target_setup_sve_record()
205 __put_user(TARGET_SVE_SIG_FLAG_SM, &sve->flags); in target_setup_sve_record()
209 * at a subsequent address. This corresponds to a little-endian store in target_setup_sve_record()
210 * of our 64-bit hunks. in target_setup_sve_record()
214 for (j = 0; j < vq * 2; ++j) { in target_setup_sve_record()
215 __put_user_e(env->vfp.zregs[i].d[j], z + j, le); in target_setup_sve_record()
220 for (j = 0; j < vq; ++j) { in target_setup_sve_record()
221 uint64_t r = env->vfp.pregs[i].p[j >> 2]; in target_setup_sve_record()
222 __put_user_e(r >> ((j & 3) * 16), p + j, le); in target_setup_sve_record()
232 int i, j; in target_setup_za_record() local
235 __put_user(TARGET_ZA_MAGIC, &za->head.magic); in target_setup_za_record()
236 __put_user(size, &za->head.size); in target_setup_za_record()
237 __put_user(vl, &za->vl); in target_setup_za_record()
250 for (j = 0; j < vq * 2; ++j) { in target_setup_za_record()
251 __put_user_e(env->zarray[i].d[j], z + j, le); in target_setup_za_record()
263 target_to_host_sigset(&set, &sf->uc.tuc_sigmask); in target_restore_general_frame()
267 __get_user(env->xregs[i], &sf->uc.tuc_mcontext.regs[i]); in target_restore_general_frame()
270 __get_user(env->xregs[31], &sf->uc.tuc_mcontext.sp); in target_restore_general_frame()
271 __get_user(env->pc, &sf->uc.tuc_mcontext.pc); in target_restore_general_frame()
272 __get_user(pstate, &sf->uc.tuc_mcontext.pstate); in target_restore_general_frame()
282 __get_user(fpsr, &fpsimd->fpsr); in target_restore_fpsimd_record()
284 __get_user(fpcr, &fpsimd->fpcr); in target_restore_fpsimd_record()
290 __get_user(q[0], &fpsimd->vregs[i * 2 + 1]); in target_restore_fpsimd_record()
291 __get_user(q[1], &fpsimd->vregs[i * 2]); in target_restore_fpsimd_record()
293 __get_user(q[0], &fpsimd->vregs[i * 2]); in target_restore_fpsimd_record()
294 __get_user(q[1], &fpsimd->vregs[i * 2 + 1]); in target_restore_fpsimd_record()
303 int i, j, vl, vq, flags; in target_restore_sve_record() local
306 __get_user(vl, &sve->vl); in target_restore_sve_record()
307 __get_user(flags, &sve->flags); in target_restore_sve_record()
311 /* The cpu must support Streaming or Non-streaming SVE. */ in target_restore_sve_record()
329 /* Accept empty record -- used to clear PSTATE.SM. */ in target_restore_sve_record()
334 /* Reject non-empty but incomplete record. */ in target_restore_sve_record()
343 * at a subsequent address. This corresponds to a little-endian load in target_restore_sve_record()
344 * of our 64-bit hunks. in target_restore_sve_record()
348 for (j = 0; j < vq * 2; ++j) { in target_restore_sve_record()
349 __get_user_e(env->vfp.zregs[i].d[j], z + j, le); in target_restore_sve_record()
354 for (j = 0; j < vq; ++j) { in target_restore_sve_record()
356 __get_user_e(r, p + j, le); in target_restore_sve_record()
357 if (j & 3) { in target_restore_sve_record()
358 env->vfp.pregs[i].p[j >> 2] |= (uint64_t)r << ((j & 3) * 16); in target_restore_sve_record()
360 env->vfp.pregs[i].p[j >> 2] = r; in target_restore_sve_record()
371 int i, j, vl, vq; in target_restore_za_record() local
377 __get_user(vl, &za->vl); in target_restore_za_record()
385 /* Accept empty record -- used to clear PSTATE.ZA. */ in target_restore_za_record()
390 /* Reject non-empty but incomplete record. */ in target_restore_za_record()
399 for (j = 0; j < vq * 2; ++j) { in target_restore_za_record()
400 __get_user_e(env->zarray[i].d[j], z + j, le); in target_restore_za_record()
421 ctx = (struct target_aarch64_ctx *)sf->uc.tuc_mcontext.__reserved; in target_restore_sigframe()
425 __get_user(magic, &ctx->magic); in target_restore_sigframe()
426 __get_user(size, &ctx->size); in target_restore_sigframe()
468 &((struct target_extra_context *)ctx)->datap); in target_restore_sigframe()
470 &((struct target_extra_context *)ctx)->size); in target_restore_sigframe()
478 /* Unknown record -- we certainly didn't generate it. in target_restore_sigframe()
500 if (env->svcr != svcr) { in target_restore_sigframe()
501 env->svcr = svcr; in target_restore_sigframe()
519 sp = (sp - size) & ~15; in get_sigframe()
537 - sizeof(struct target_aarch64_ctx); in alloc_sigframe_space()
538 int this_loc = l->total_size; in alloc_sigframe_space()
540 if (l->extra_base) { in alloc_sigframe_space()
542 l->extra_size += this_size; in alloc_sigframe_space()
546 l->extra_ofs = this_loc; in alloc_sigframe_space()
547 l->total_size += sizeof(struct target_extra_context); in alloc_sigframe_space()
550 l->std_end_ofs = l->total_size; in alloc_sigframe_space()
551 l->total_size += sizeof(struct target_aarch64_ctx); in alloc_sigframe_space()
554 l->extra_base = this_loc = l->total_size; in alloc_sigframe_space()
555 l->extra_size = this_size; in alloc_sigframe_space()
557 l->total_size += this_size; in alloc_sigframe_space()
589 if (FIELD_EX64(env->svcr, SVCR, ZA)) { in target_setup_frame()
650 __put_user(env->xregs[29], &fr->fp); in target_setup_frame()
651 __put_user(env->xregs[30], &fr->lr); in target_setup_frame()
653 if (ka->sa_flags & TARGET_SA_RESTORER) { in target_setup_frame()
654 return_addr = ka->sa_restorer; in target_setup_frame()
658 env->xregs[0] = usig; in target_setup_frame()
659 env->xregs[29] = frame_addr + fr_ofs; in target_setup_frame()
660 env->xregs[30] = return_addr; in target_setup_frame()
661 env->xregs[31] = frame_addr; in target_setup_frame()
662 env->pc = ka->_sa_handler; in target_setup_frame()
666 env->btype = 2; in target_setup_frame()
673 frame->info = *info; in target_setup_frame()
674 env->xregs[1] = frame_addr + offsetof(struct target_rt_sigframe, info); in target_setup_frame()
675 env->xregs[2] = frame_addr + offsetof(struct target_rt_sigframe, uc); in target_setup_frame()
702 abi_ulong frame_addr = env->xregs[31]; in do_rt_sigreturn()
717 target_restore_altstack(&frame->uc.tuc_stack, env); in do_rt_sigreturn()
720 return -QEMU_ESIGRETURN; in do_rt_sigreturn()
725 return -QEMU_ESIGRETURN; in do_rt_sigreturn()
740 * Since these are instructions they need to be put as little-endian in setup_sigtramp()