Lines Matching defs:lwp
73 lwp_getsysent(klwp_t *lwp)
75 if (lwp_getdatamodel(lwp) == DATAMODEL_NATIVE)
79 #define LWP_GETSYSENT(lwp) (lwp_getsysent(lwp))
81 #define LWP_GETSYSENT(lwp) (sysent)
85 * Called to restore the lwp's register window just before
91 xregrestore(klwp_t *lwp, int shared)
97 if (lwp->lwp_pcb.pcb_xregstat == XREGMODIFIED) {
98 struct machpcb *mpcb = lwptompcb(lwp);
99 caddr_t sp = (caddr_t)lwptoregs(lwp)->r_sp;
105 if (lwp_getdatamodel(lwp) == DATAMODEL_LP64) {
117 (void) copyout_nowatch(&lwp->lwp_pcb.pcb_xregs,
124 rwindow_nto32(&lwp->lwp_pcb.pcb_xregs, &rwindow32);
133 bcopy(&lwp->lwp_pcb.pcb_xregs, &mpcb->mpcb_rwin[0],
134 sizeof (lwp->lwp_pcb.pcb_xregs));
136 lwp->lwp_pcb.pcb_xregstat = XREGNONE;
142 * lwp->lwp_ap normally points to the out regs in the reg structure.
148 get_syscall_args(klwp_t *lwp, long *argp, int *nargsp)
150 kthread_t *t = lwptot(lwp);
156 if (lwptoproc(lwp)->p_model == DATAMODEL_ILP32)
163 nargs = LWP_GETSYSENT(lwp)[code].sy_narg;
168 ap = lwp->lwp_ap;
182 get_syscall32_args(klwp_t *lwp, int *argp, int *nargsp)
187 code = get_syscall_args(lwp, args, nargsp);
196 * lwp->lwp_ap normally points to the out regs in the reg structure.
209 klwp_t *lwp = ttolwp(t);
210 struct regs *rp = lwptoregs(lwp);
217 if (lwp->lwp_argsaved || code == 0)
223 struct sysent *se = LWP_GETSYSENT(lwp);
256 if ((datamodel = lwp_getdatamodel(lwp)) == DATAMODEL_ILP32) {
260 lwp->lwp_arg[0] = (uint32_t)rp->r_o1;
261 lwp->lwp_arg[1] = (uint32_t)rp->r_o2;
262 lwp->lwp_arg[2] = (uint32_t)rp->r_o3;
263 lwp->lwp_arg[3] = (uint32_t)rp->r_o4;
264 lwp->lwp_arg[4] = (uint32_t)rp->r_o5;
272 lwp->lwp_arg[i] = a;
277 lwp->lwp_arg[0] = (uint32_t)rp->r_o0;
278 lwp->lwp_arg[1] = (uint32_t)rp->r_o1;
279 lwp->lwp_arg[2] = (uint32_t)rp->r_o2;
280 lwp->lwp_arg[3] = (uint32_t)rp->r_o3;
281 lwp->lwp_arg[4] = (uint32_t)rp->r_o4;
282 lwp->lwp_arg[5] = (uint32_t)rp->r_o5;
290 lwp->lwp_arg[i] = a;
297 lwp->lwp_arg[0] = rp->r_o0;
298 lwp->lwp_arg[1] = rp->r_o1;
299 lwp->lwp_arg[2] = rp->r_o2;
300 lwp->lwp_arg[3] = rp->r_o3;
301 lwp->lwp_arg[4] = rp->r_o4;
302 lwp->lwp_arg[5] = rp->r_o5;
309 lwp->lwp_arg[i] = a;
316 lwp->lwp_ap = lwp->lwp_arg;
317 lwp->lwp_argsaved = 1;
325 klwp_t *lwp = ttolwp(curthread);
327 lwp->lwp_ap = (long *)&lwptoregs(lwp)->r_o0;
328 lwp->lwp_argsaved = 0;
332 * nonexistent system call-- signal lwp (may want to handle it)
333 * flag error if lwp won't see signal immediately
357 klwp_t *lwp = ttolwp(t);
358 struct regs *rp = lwptoregs(lwp);
374 ASSERT(lwp->lwp_ap == (long *)&rp->r_o0);
393 * Undo special arrangements to single-step the lwp
398 if (lwp->lwp_pcb.pcb_step != STEP_NONE) {
435 lwp->lwp_argsaved = 0;
436 lwp->lwp_ap = (long *)&rp->r_o0;
443 if (lwp->lwp_sysabort) {
449 lwp->lwp_sysabort = 0;
462 0, lwp)) {
464 lwp->lwp_error = 0; /* for old drivers */
492 callp = LWP_GETSYSENT(lwp) + code;
504 for (i = 0, ap = lwp->lwp_ap; i < callp->sy_narg; i++, ap++) {
521 lwp->lwp_error = 0; /* for old drivers */
522 lwp->lwp_badpriv = PRIV_NONE; /* for privilege tracing */
539 klwp_t *lwp = ttolwp(t);
540 struct regs *rp = lwptoregs(lwp);
549 error = lwp->lwp_errno;
599 if (lwp->lwp_eosys == NORMALRETURN) {
627 (sig = lwp->lwp_cursig) != 0 &&
682 if (lwp->lwp_oweupc)
693 lwp->lwp_eosys = NORMALRETURN;
752 if (ISSIG_PENDING(t, lwp, p)) {
760 LWP_GETSYSENT(lwp)[code].sy_narg : 0;
771 if (lwp->lwp_pcb.pcb_flags & CPC_OVERFLOW)
779 if (lwp->lwp_pcb.pcb_flags & ASYNC_HWERR)
787 if (lwp->lwp_pcb.pcb_xregstat != XREGNONE)
788 xregrestore(lwp, 1);
790 lwp->lwp_errno = 0; /* clear error for next time */
814 lwp->lwp_state = LWP_USER;
829 if (lwp->lwp_pcb.pcb_step != STEP_NONE) {
837 * In case the args were copied to the lwp, reset the
840 lwp->lwp_ap = (long *)&rp->r_o0;
841 lwp->lwp_argsaved = 0;
851 * If there is a ustack registered for this lwp, and the stack rlimit
857 if (lwp->lwp_ustack != 0 && lwp->lwp_old_stk_ctl != 0) {
876 if (copyin((stack_t *)lwp->lwp_ustack, &stk,
878 (stk.ss_size == lwp->lwp_old_stk_ctl ||
886 (stack_t *)lwp->lwp_ustack,
892 if (copyin((stack32_t *)lwp->lwp_ustack, &stk32,
894 (stk32.ss_size == lwp->lwp_old_stk_ctl ||
902 (stack32_t *)lwp->lwp_ustack,
907 lwp->lwp_old_stk_ctl = 0;
924 klwp_t *lwp = ttolwp(curthread);
925 struct regs *rp = lwptoregs(lwp);
927 callp = LWP_GETSYSENT(lwp) + curthread->t_sysnum;
938 lwp->lwp_error = 0; /* for old drivers */
939 error = (*(callp->sy_call))(lwp->lwp_ap, &rval);
1057 klwp_t *lwp = ttolwp(curthread);
1063 ASSERT(lwp->lwp_ap != NULL);
1066 callp = LWP_GETSYSENT(lwp) + code;
1074 } else if (!lwp->lwp_argsaved) {
1077 ap = lwp->lwp_ap; /* args haven't been saved */
1078 lwp->lwp_ap = ap + 1; /* advance arg pointer */
1081 return ((*callp->sy_callc)(a0, a1, a2, a3, a4, lwp->lwp_arg[5]));