Lines Matching defs:lwp
94 prgetprregs(klwp_t *lwp, prgregset_t prp)
96 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
98 getgregs(lwp, prp);
106 prsetprregs(klwp_t *lwp, prgregset_t prp, int initial)
109 lwptoregs(lwp)->r_ps = PSL_USER;
110 (void) setgregs(lwp, prp);
119 prgregset_32ton(klwp_t *lwp, prgregset32_t src, prgregset_t dst)
121 struct regs *rp = lwptoregs(lwp);
123 dst[REG_GSBASE] = lwp->lwp_pcb.pcb_gsbase;
124 dst[REG_FSBASE] = lwp->lwp_pcb.pcb_fsbase;
154 prgetprregs32(klwp_t *lwp, prgregset32_t prp)
156 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
157 getgregs32(lwp, prp);
163 * Get the syscall return values for the lwp.
166 prgetrvals(klwp_t *lwp, long *rval1, long *rval2)
168 struct regs *r = lwptoregs(lwp);
172 if (lwp->lwp_eosys == JUSTRETURN) {
175 } else if (lwp_getdatamodel(lwp) != DATAMODEL_NATIVE) {
205 prgetprfpregs(klwp_t *lwp, prfpregset_t *pfp)
208 getfpregs(lwp, pfp);
213 prgetprfpregs32(klwp_t *lwp, prfpregset32_t *pfp)
216 getfpregs32(lwp, pfp);
225 prsetprfpregs(klwp_t *lwp, prfpregset_t *pfp)
227 setfpregs(lwp, pfp);
232 prsetprfpregs32(klwp_t *lwp, prfpregset32_t *pfp)
234 setfpregs32(lwp, pfp);
263 prgetprxregs(klwp_t *lwp, caddr_t prx)
273 prsetprxregs(klwp_t *lwp, caddr_t prx)
298 * Arrange to single-step the lwp.
301 prstep(klwp_t *lwp, int watchstep)
303 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
309 lwp->lwp_pcb.pcb_flags |= REQUEST_STEP;
310 lwp->lwp_pcb.pcb_flags &= ~REQUEST_NOSTEP;
313 lwp->lwp_pcb.pcb_flags |= WATCH_STEP;
315 lwp->lwp_pcb.pcb_flags |= NORMAL_STEP;
317 aston(lwptot(lwp)); /* let trap() set PS_T in rp->r_efl */
324 prnostep(klwp_t *lwp)
326 ASSERT(ttolwp(curthread) == lwp ||
327 MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
333 lwp->lwp_pcb.pcb_flags |= REQUEST_NOSTEP;
335 lwp->lwp_pcb.pcb_flags &=
338 aston(lwptot(lwp)); /* let trap() clear PS_T in rp->r_efl */
345 prisstep(klwp_t *lwp)
347 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
349 return ((lwp->lwp_pcb.pcb_flags &
357 prsvaddr(klwp_t *lwp, caddr_t vaddr)
359 struct regs *r = lwptoregs(lwp);
361 ASSERT(MUTEX_NOT_HELD(&lwptoproc(lwp)->p_lock));
422 * Make sure the lwp is in an orderly state
437 klwp_t *lwp = ttolwp(curthread);
438 struct regs *r = lwptoregs(lwp);
440 if (lwp->lwp_pcb.pcb_flags & PRSTOP_CALLED)
447 ASSERT(lwp->lwp_nostop == 0);
448 lwp->lwp_nostop = 1;
450 if (copyin_nowatch((caddr_t)r->r_pc, &lwp->lwp_pcb.pcb_instr,
451 sizeof (lwp->lwp_pcb.pcb_instr)) == 0)
452 lwp->lwp_pcb.pcb_flags |= INSTR_VALID;
454 lwp->lwp_pcb.pcb_flags &= ~INSTR_VALID;
455 lwp->lwp_pcb.pcb_instr = 0;
459 ASSERT(lwp->lwp_nostop == 1);
460 lwp->lwp_nostop = 0;
462 lwp->lwp_pcb.pcb_flags |= PRSTOP_CALLED;
477 * Fetch the user-level instruction on which the lwp is stopped.
478 * It was saved by the lwp itself, in prstop().
482 prfetchinstr(klwp_t *lwp, ulong_t *ip)
484 *ip = (ulong_t)(instr_t)lwp->lwp_pcb.pcb_instr;
485 return (lwp->lwp_pcb.pcb_flags & INSTR_VALID);