Lines Matching defs:lwp

93 prgetprregs(klwp_t *lwp, prgregset_t prp)
97 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
99 getgregs(lwp, gr);
123 if (lwp->lwp_pcb.pcb_xregstat != XREGNONE) {
124 prp[R_L0] = lwp->lwp_pcb.pcb_xregs.rw_local[0];
125 prp[R_L1] = lwp->lwp_pcb.pcb_xregs.rw_local[1];
126 prp[R_L2] = lwp->lwp_pcb.pcb_xregs.rw_local[2];
127 prp[R_L3] = lwp->lwp_pcb.pcb_xregs.rw_local[3];
128 prp[R_L4] = lwp->lwp_pcb.pcb_xregs.rw_local[4];
129 prp[R_L5] = lwp->lwp_pcb.pcb_xregs.rw_local[5];
130 prp[R_L6] = lwp->lwp_pcb.pcb_xregs.rw_local[6];
131 prp[R_L7] = lwp->lwp_pcb.pcb_xregs.rw_local[7];
133 prp[R_I0] = lwp->lwp_pcb.pcb_xregs.rw_in[0];
134 prp[R_I1] = lwp->lwp_pcb.pcb_xregs.rw_in[1];
135 prp[R_I2] = lwp->lwp_pcb.pcb_xregs.rw_in[2];
136 prp[R_I3] = lwp->lwp_pcb.pcb_xregs.rw_in[3];
137 prp[R_I4] = lwp->lwp_pcb.pcb_xregs.rw_in[4];
138 prp[R_I5] = lwp->lwp_pcb.pcb_xregs.rw_in[5];
139 prp[R_I6] = lwp->lwp_pcb.pcb_xregs.rw_in[6];
140 prp[R_I7] = lwp->lwp_pcb.pcb_xregs.rw_in[7];
155 prsetprregs(klwp_t *lwp, prgregset_t prp, int initial)
176 lwp->lwp_pcb.pcb_xregs.rw_local[0] = prp[R_L0];
177 lwp->lwp_pcb.pcb_xregs.rw_local[1] = prp[R_L1];
178 lwp->lwp_pcb.pcb_xregs.rw_local[2] = prp[R_L2];
179 lwp->lwp_pcb.pcb_xregs.rw_local[3] = prp[R_L3];
180 lwp->lwp_pcb.pcb_xregs.rw_local[4] = prp[R_L4];
181 lwp->lwp_pcb.pcb_xregs.rw_local[5] = prp[R_L5];
182 lwp->lwp_pcb.pcb_xregs.rw_local[6] = prp[R_L6];
183 lwp->lwp_pcb.pcb_xregs.rw_local[7] = prp[R_L7];
185 lwp->lwp_pcb.pcb_xregs.rw_in[0] = prp[R_I0];
186 lwp->lwp_pcb.pcb_xregs.rw_in[1] = prp[R_I1];
187 lwp->lwp_pcb.pcb_xregs.rw_in[2] = prp[R_I2];
188 lwp->lwp_pcb.pcb_xregs.rw_in[3] = prp[R_I3];
189 lwp->lwp_pcb.pcb_xregs.rw_in[4] = prp[R_I4];
190 lwp->lwp_pcb.pcb_xregs.rw_in[5] = prp[R_I5];
191 lwp->lwp_pcb.pcb_xregs.rw_in[6] = prp[R_I6];
192 lwp->lwp_pcb.pcb_xregs.rw_in[7] = prp[R_I7];
194 lwp->lwp_pcb.pcb_xregstat = XREGMODIFIED;
195 lwptot(lwp)->t_post_sys = 1;
208 if (lwptoproc(lwp)->p_model == DATAMODEL_LP64)
209 lwptoregs(lwp)->r_tstate = TSTATE_USER64|TSTATE_MM_TSO;
211 lwptoregs(lwp)->r_tstate = TSTATE_USER32|TSTATE_MM_TSO;
213 lwptoregs(lwp)->r_tstate &= ~TSTATE_PEF;
216 setgregs(lwp, gr);
231 prgregset_32ton(klwp_t *lwp, prgregset32_t src, prgregset_t dest)
233 struct regs *r = lwptoregs(lwp);
253 if (lwp->lwp_pcb.pcb_xregstat != XREGNONE) {
254 struct rwindow *rw = &lwp->lwp_pcb.pcb_xregs;
301 dest[R_FPRS] = lwptofpu(lwp)->fpu_fprs;
312 prgetprregs32(klwp_t *lwp, prgregset32_t prp)
318 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
320 getgregs32(lwp, gr);
344 if (lwp->lwp_pcb.pcb_xregstat != XREGNONE) {
345 prp[R_L0] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[0]);
346 prp[R_L1] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[1]);
347 prp[R_L2] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[2]);
348 prp[R_L3] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[3]);
349 prp[R_L4] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[4]);
350 prp[R_L5] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[5]);
351 prp[R_L6] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[6]);
352 prp[R_L7] = R32(lwp->lwp_pcb.pcb_xregs.rw_local[7]);
354 prp[R_I0] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[0]);
355 prp[R_I1] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[1]);
356 prp[R_I2] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[2]);
357 prp[R_I3] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[3]);
358 prp[R_I4] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[4]);
359 prp[R_I5] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[5]);
360 prp[R_I6] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[6]);
361 prp[R_I7] = R32(lwp->lwp_pcb.pcb_xregs.rw_in[7]);
373 * Get the syscall return values for the lwp.
376 prgetrvals(klwp_t *lwp, long *rval1, long *rval2)
378 struct regs *r = lwptoregs(lwp);
382 if (lwp->lwp_eosys == JUSTRETURN) {
385 } else if (lwptoproc(lwp)->p_model == DATAMODEL_ILP32) {
412 prgetprfpregs(klwp_t *lwp, prfpregset_t *pfp)
420 getfpregs(lwp, (fpregset_t *)pfp);
433 prgetprfpregs32(klwp_t *lwp, prfpregset32_t *pfp)
441 getfpregs32(lwp, (fpregset32_t *)pfp);
457 prsetprfpregs(klwp_t *lwp, prfpregset_t *pfp)
479 setfpregs(lwp, (fpregset_t *)pfp);
484 prsetprfpregs32(klwp_t *lwp, prfpregset32_t *pfp)
506 setfpregs32(lwp, (fpregset32_t *)pfp);
540 prgetprxregs(klwp_t *lwp, caddr_t prx)
544 (void) xregs_get(lwp, prx);
551 prsetprxregs(klwp_t *lwp, caddr_t prx)
555 (void) xregs_set(lwp, prx);
562 prgetasregs(klwp_t *lwp, asrset_t asrset)
565 getasrs(lwp, asrset);
566 getfpasrs(lwp, asrset);
573 prsetasregs(klwp_t *lwp, asrset_t asrset)
575 setasrs(lwp, asrset);
576 setfpasrs(lwp, asrset);
599 * Arrange to single-step the lwp.
602 prstep(klwp_t *lwp, int watchstep)
604 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
606 lwp->lwp_pcb.pcb_step = STEP_REQUESTED;
607 lwp->lwp_pcb.pcb_tracepc = NULL;
609 lwp->lwp_pcb.pcb_flags |= WATCH_STEP;
611 lwp->lwp_pcb.pcb_flags |= NORMAL_STEP;
618 prnostep(klwp_t *lwp)
620 ASSERT(ttolwp(curthread) == lwp ||
621 MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
623 lwp->lwp_pcb.pcb_step = STEP_NONE;
624 lwp->lwp_pcb.pcb_tracepc = NULL;
625 lwp->lwp_pcb.pcb_flags &= ~(NORMAL_STEP|WATCH_STEP);
632 prisstep(klwp_t *lwp)
634 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
636 return (lwp->lwp_pcb.pcb_step != STEP_NONE);
643 prsvaddr(klwp_t *lwp, caddr_t vaddr)
645 struct regs *r = lwptoregs(lwp);
647 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
725 * Prepare to single-step the lwp if requested.
726 * This is called by the lwp itself just before returning to user level.
731 klwp_t *lwp = ttolwp(curthread);
732 struct regs *r = lwptoregs(lwp);
733 proc_t *p = lwptoproc(lwp);
738 ASSERT(lwp != NULL);
741 if (lwp->lwp_pcb.pcb_step == STEP_NONE ||
742 lwp->lwp_pcb.pcb_step == STEP_ACTIVE)
753 if (lwp->lwp_pcb.pcb_step == STEP_WASACTIVE) {
754 if (npc == (caddr_t)lwp->lwp_pcb.pcb_tracepc)
757 lwp->lwp_pcb.pcb_tracepc = (void *)pc;
785 lwp->lwp_pcb.pcb_tracepc = (void *)(pc + i);
794 lwp->lwp_pcb.pcb_tracepc = (void *)(pc + i);
798 lwp->lwp_pcb.pcb_tracepc = (void *)npc;
803 lwp->lwp_pcb.pcb_step = STEP_ACTIVE;
807 * Wrap up single stepping of the lwp.
808 * This is called by the lwp itself just after it has taken
819 klwp_t *lwp = ttolwp(curthread);
826 ASSERT(lwp != NULL);
828 if (lwp->lwp_pcb.pcb_step == STEP_ACTIVE) {
829 struct regs *r = lwptoregs(lwp);
844 r->r_pc = (greg_t)lwp->lwp_pcb.pcb_tracepc;
848 r->r_pc = (greg_t)lwp->lwp_pcb.pcb_tracepc + 4;
853 r->r_npc = (greg_t)lwp->lwp_pcb.pcb_tracepc;
855 lwp->lwp_pcb.pcb_step = STEP_WASACTIVE;
862 * Make sure the lwp is in an orderly state
877 klwp_t *lwp = ttolwp(curthread);
878 proc_t *p = lwptoproc(lwp);
879 struct regs *r = lwptoregs(lwp);
880 kfpu_t *pfp = lwptofpu(lwp);
886 if (lwp->lwp_pcb.pcb_flags & PRSTOP_CALLED)
893 ASSERT(lwp->lwp_nostop == 0);
894 lwp->lwp_nostop = 1;
896 if (lwp->lwp_pcb.pcb_step != STEP_NONE)
899 if (lwp->lwp_pcb.pcb_xregstat == XREGNONE) {
905 struct machpcb *mpcb = lwptompcb(lwp);
925 copyin(rwp, &lwp->lwp_pcb.pcb_xregs, rw_size) == 0)
926 lwp->lwp_pcb.pcb_xregstat = XREGPRESENT;
929 rwindow_32ton(&rwindow32, &lwp->lwp_pcb.pcb_xregs);
930 lwp->lwp_pcb.pcb_xregstat = XREGPRESENT;
939 &lwp->lwp_pcb.pcb_xregs,
947 &lwp->lwp_pcb.pcb_xregs);
949 lwp->lwp_pcb.pcb_xregstat = XREGPRESENT;
968 if (copyin_nowatch(pc, &lwp->lwp_pcb.pcb_instr,
969 sizeof (lwp->lwp_pcb.pcb_instr)) == 0)
970 lwp->lwp_pcb.pcb_flags |= INSTR_VALID;
972 lwp->lwp_pcb.pcb_flags &= ~INSTR_VALID;
973 lwp->lwp_pcb.pcb_instr = 0;
977 ASSERT(lwp->lwp_nostop == 1);
978 lwp->lwp_nostop = 0;
980 lwp->lwp_pcb.pcb_flags |= PRSTOP_CALLED;
995 * Fetch the user-level instruction on which the lwp is stopped.
996 * It was saved by the lwp itself, in prstop().
1000 prfetchinstr(klwp_t *lwp, ulong_t *ip)
1002 *ip = (ulong_t)(instr_t)lwp->lwp_pcb.pcb_instr;
1003 return (lwp->lwp_pcb.pcb_flags & INSTR_VALID);
1007 prnwindows(klwp_t *lwp)
1009 struct machpcb *mpcb = lwptompcb(lwp);
1015 prgetwindows(klwp_t *lwp, gwindows_t *gwp)
1017 getgwins(lwp, gwp);
1022 prgetwindows32(klwp_t *lwp, gwindows32_t *gwp)
1024 getgwins32(lwp, gwp);