Lines Matching refs:cp

142 	cstatus_t *cp;  in ptrace()  local
216 if ((cp = GrabProc(pid)) == NULLCP) in ptrace()
219 ps = &cp->pstatus; in ptrace()
221 if (ProcUpdate(cp) != 0) { in ptrace()
222 ReleaseProc(cp); in ptrace()
238 if (pread(cp->asfd, (char *)&data, sizeof (data), (off_t)addr) in ptrace()
252 GetPsargs(cp); in ptrace()
254 GetSignal(cp); in ptrace()
257 data = *((int *)((caddr_t)(&cp->user) + xaddr)); in ptrace()
267 if (pwrite(cp->asfd, (char *)&data, sizeof (data), (off_t)addr) in ptrace()
283 data = (cp->user.u_reg[EFL] & ~PSL_USERMASK) | in ptrace()
285 cp->user.u_reg[rx] = data; in ptrace()
286 cp->flags |= CS_SETREGS; in ptrace()
297 if (cp->flags & CS_SETREGS) { in ptrace()
301 ps->pr_lwp.pr_reg[GS] = cp->user.u_reg[GS]; in ptrace()
302 ps->pr_lwp.pr_reg[FS] = cp->user.u_reg[FS]; in ptrace()
303 ps->pr_lwp.pr_reg[ES] = cp->user.u_reg[ES]; in ptrace()
304 ps->pr_lwp.pr_reg[DS] = cp->user.u_reg[DS]; in ptrace()
305 ps->pr_lwp.pr_reg[EDI] = cp->user.u_reg[EDI]; in ptrace()
306 ps->pr_lwp.pr_reg[ESI] = cp->user.u_reg[ESI]; in ptrace()
307 ps->pr_lwp.pr_reg[EBP] = cp->user.u_reg[EBP]; in ptrace()
308 ps->pr_lwp.pr_reg[ESP] = cp->user.u_reg[ESP]; in ptrace()
309 ps->pr_lwp.pr_reg[EBX] = cp->user.u_reg[EBX]; in ptrace()
310 ps->pr_lwp.pr_reg[EDX] = cp->user.u_reg[EDX]; in ptrace()
311 ps->pr_lwp.pr_reg[ECX] = cp->user.u_reg[ECX]; in ptrace()
312 ps->pr_lwp.pr_reg[EAX] = cp->user.u_reg[EAX]; in ptrace()
313 ps->pr_lwp.pr_reg[TRAPNO] = cp->user.u_reg[TRAPNO]; in ptrace()
314 ps->pr_lwp.pr_reg[ERR] = cp->user.u_reg[ERR]; in ptrace()
315 ps->pr_lwp.pr_reg[EIP] = cp->user.u_reg[EIP]; in ptrace()
316 ps->pr_lwp.pr_reg[CS] = cp->user.u_reg[CS]; in ptrace()
317 ps->pr_lwp.pr_reg[EFL] = cp->user.u_reg[EFL]; in ptrace()
318 ps->pr_lwp.pr_reg[UESP] = cp->user.u_reg[UESP]; in ptrace()
319 ps->pr_lwp.pr_reg[SS] = cp->user.u_reg[SS]; in ptrace()
325 if (writev(cp->ctlfd, iov, 2) < 0) in ptrace()
329 addr != cp->user.u_reg[EIP]) { in ptrace()
332 if (write(cp->ctlfd, (char *)runctl, 2*sizeof (long)) in ptrace()
342 if (write(cp->ctlfd, (char *)&ctl, in ptrace()
353 if (write(cp->ctlfd, (char *)runctl, 3*sizeof (long)) in ptrace()
357 ReleaseProc(cp); in ptrace()
364 cp->flags = 0; in ptrace()
374 (void) write(cp->ctlfd, (char *)&ctl, in ptrace()
377 ReleaseProc(cp); in ptrace()
387 if (OpenProc(cp) == 0) in ptrace()
389 ReleaseProc(cp); in ptrace()
407 cstatus_t *cp; in FindProc() local
409 for (cp = childp; cp != NULLCP; cp = cp->next) in FindProc()
410 if (cp->pid == pid) in FindProc()
413 return (cp); in FindProc()
423 cstatus_t *cp = childp; in CheckAllProcs() local
425 while (cp != NULLCP) { in CheckAllProcs()
426 cstatus_t *next = cp->next; in CheckAllProcs()
428 if (ProcUpdate(cp) != 0) in CheckAllProcs()
429 ReleaseProc(cp); in CheckAllProcs()
430 cp = next; in CheckAllProcs()
477 OpenProc(cstatus_t *cp) in OpenProc() argument
484 MakeProcName(procname, cp->pid); in OpenProc()
490 omode = (cp->asfd > 0)? O_RDWR : (O_RDWR|O_EXCL); in OpenProc()
493 (cp->asfd = Dupfd(fd, cp->asfd)) < 0) in OpenProc()
498 (cp->ctlfd = Dupfd(fd, cp->ctlfd)) < 0) in OpenProc()
503 (cp->statusfd = Dupfd(fd, cp->statusfd)) < 0) in OpenProc()
509 CloseProc(cp); in OpenProc()
517 CloseProc(cstatus_t *cp) in CloseProc() argument
519 if (cp->asfd > 0) in CloseProc()
520 (void) close(cp->asfd); in CloseProc()
521 if (cp->ctlfd > 0) in CloseProc()
522 (void) close(cp->ctlfd); in CloseProc()
523 if (cp->statusfd > 0) in CloseProc()
524 (void) close(cp->statusfd); in CloseProc()
525 cp->asfd = 0; in CloseProc()
526 cp->ctlfd = 0; in CloseProc()
527 cp->statusfd = 0; in CloseProc()
536 cstatus_t *cp; in GrabProc() local
543 if ((cp = FindProc(pid)) != NULLCP) /* already grabbed */ in GrabProc()
544 return (cp); in GrabProc()
548 cp = (cstatus_t *)malloc(sizeof (cstatus_t)); in GrabProc()
549 if (cp == NULLCP) in GrabProc()
551 (void) memset((char *)cp, 0, sizeof (cstatus_t)); in GrabProc()
552 cp->pid = pid; in GrabProc()
555 while (OpenProc(cp) == 0) { in GrabProc()
560 if (pread(cp->statusfd, (char *)&cp->pstatus, in GrabProc()
561 sizeof (cp->pstatus), (off_t)0) == sizeof (cp->pstatus) && in GrabProc()
562 cp->pstatus.pr_ppid == ppid && in GrabProc()
563 (cp->pstatus.pr_flags & PR_PTRACE) && in GrabProc()
564 write(cp->ctlfd, (char *)ctl, 2*sizeof (long)) in GrabProc()
566 cp->next = childp; in GrabProc()
567 childp = cp; in GrabProc()
568 MakeUser(cp); in GrabProc()
569 return (cp); in GrabProc()
576 free((char *)cp); in GrabProc()
585 ReleaseProc(cstatus_t *cp) in ReleaseProc() argument
587 CloseProc(cp); in ReleaseProc()
589 if (childp == cp) in ReleaseProc()
590 childp = cp->next; in ReleaseProc()
595 if (pcp->next == cp) { in ReleaseProc()
596 pcp->next = cp->next; in ReleaseProc()
602 free((char *)cp); in ReleaseProc()
610 ProcUpdate(cstatus_t *cp) in ProcUpdate() argument
612 pstatus_t *ps = &cp->pstatus; in ProcUpdate()
614 if (cp->flags & CS_SETREGS) { in ProcUpdate()
618 ps->pr_lwp.pr_reg[GS] = cp->user.u_reg[GS]; in ProcUpdate()
619 ps->pr_lwp.pr_reg[FS] = cp->user.u_reg[FS]; in ProcUpdate()
620 ps->pr_lwp.pr_reg[ES] = cp->user.u_reg[ES]; in ProcUpdate()
621 ps->pr_lwp.pr_reg[DS] = cp->user.u_reg[DS]; in ProcUpdate()
622 ps->pr_lwp.pr_reg[EDI] = cp->user.u_reg[EDI]; in ProcUpdate()
623 ps->pr_lwp.pr_reg[ESI] = cp->user.u_reg[ESI]; in ProcUpdate()
624 ps->pr_lwp.pr_reg[EBP] = cp->user.u_reg[EBP]; in ProcUpdate()
625 ps->pr_lwp.pr_reg[ESP] = cp->user.u_reg[ESP]; in ProcUpdate()
626 ps->pr_lwp.pr_reg[EBX] = cp->user.u_reg[EBX]; in ProcUpdate()
627 ps->pr_lwp.pr_reg[EDX] = cp->user.u_reg[EDX]; in ProcUpdate()
628 ps->pr_lwp.pr_reg[ECX] = cp->user.u_reg[ECX]; in ProcUpdate()
629 ps->pr_lwp.pr_reg[EAX] = cp->user.u_reg[EAX]; in ProcUpdate()
630 ps->pr_lwp.pr_reg[TRAPNO] = cp->user.u_reg[TRAPNO]; in ProcUpdate()
631 ps->pr_lwp.pr_reg[ERR] = cp->user.u_reg[ERR]; in ProcUpdate()
632 ps->pr_lwp.pr_reg[EIP] = cp->user.u_reg[EIP]; in ProcUpdate()
633 ps->pr_lwp.pr_reg[CS] = cp->user.u_reg[CS]; in ProcUpdate()
634 ps->pr_lwp.pr_reg[EFL] = cp->user.u_reg[EFL]; in ProcUpdate()
635 ps->pr_lwp.pr_reg[UESP] = cp->user.u_reg[UESP]; in ProcUpdate()
636 ps->pr_lwp.pr_reg[SS] = cp->user.u_reg[SS]; in ProcUpdate()
642 (void) writev(cp->ctlfd, iov, 2); in ProcUpdate()
643 cp->flags &= ~CS_SETREGS; in ProcUpdate()
646 while (pread(cp->statusfd, (char *)ps, sizeof (*ps), (off_t)0) < 0) { in ProcUpdate()
649 !(errno == EAGAIN && OpenProc(cp) == 0)) in ProcUpdate()
654 MakeUser(cp); in ProcUpdate()
665 MakeUser(cstatus_t *cp) in MakeUser() argument
667 pstatus_t *ps = &cp->pstatus; in MakeUser()
669 cp->user.u_reg[GS] = ps->pr_lwp.pr_reg[GS]; in MakeUser()
670 cp->user.u_reg[FS] = ps->pr_lwp.pr_reg[FS]; in MakeUser()
671 cp->user.u_reg[ES] = ps->pr_lwp.pr_reg[ES]; in MakeUser()
672 cp->user.u_reg[DS] = ps->pr_lwp.pr_reg[DS]; in MakeUser()
673 cp->user.u_reg[EDI] = ps->pr_lwp.pr_reg[EDI]; in MakeUser()
674 cp->user.u_reg[ESI] = ps->pr_lwp.pr_reg[ESI]; in MakeUser()
675 cp->user.u_reg[EBP] = ps->pr_lwp.pr_reg[EBP]; in MakeUser()
676 cp->user.u_reg[ESP] = ps->pr_lwp.pr_reg[ESP]; in MakeUser()
677 cp->user.u_reg[EBX] = ps->pr_lwp.pr_reg[EBX]; in MakeUser()
678 cp->user.u_reg[EDX] = ps->pr_lwp.pr_reg[EDX]; in MakeUser()
679 cp->user.u_reg[ECX] = ps->pr_lwp.pr_reg[ECX]; in MakeUser()
680 cp->user.u_reg[EAX] = ps->pr_lwp.pr_reg[EAX]; in MakeUser()
681 cp->user.u_reg[TRAPNO] = ps->pr_lwp.pr_reg[TRAPNO]; in MakeUser()
682 cp->user.u_reg[ERR] = ps->pr_lwp.pr_reg[ERR]; in MakeUser()
683 cp->user.u_reg[EIP] = ps->pr_lwp.pr_reg[EIP]; in MakeUser()
684 cp->user.u_reg[CS] = ps->pr_lwp.pr_reg[CS]; in MakeUser()
685 cp->user.u_reg[EFL] = ps->pr_lwp.pr_reg[EFL]; in MakeUser()
686 cp->user.u_reg[UESP] = ps->pr_lwp.pr_reg[UESP]; in MakeUser()
687 cp->user.u_reg[SS] = ps->pr_lwp.pr_reg[SS]; in MakeUser()
688 cp->user.u_ar0 = (greg_t *)REGADDR; in MakeUser()
689 cp->user.u_code = ps->pr_lwp.pr_info.si_code; in MakeUser()
690 cp->user.u_addr = ps->pr_lwp.pr_info.si_addr; in MakeUser()
691 cp->flags &= ~(CS_PSARGS|CS_SIGNAL); in MakeUser()
698 GetPsargs(cstatus_t *cp) in GetPsargs() argument
703 MakeProcName(procname, cp->pid); in GetPsargs()
706 (void) memset(cp->user.u_psargs, 0, PSARGSZ); in GetPsargs()
709 (void) pread(fd, cp->user.u_psargs, PSARGSZ, in GetPsargs()
713 cp->flags |= CS_PSARGS; in GetPsargs()
720 GetSignal(cstatus_t *cp) in GetSignal() argument
727 MakeProcName(procname, cp->pid); in GetSignal()
735 cp->user.u_signal[i] = action[i].sa_handler; in GetSignal()
736 cp->flags |= CS_SIGNAL; in GetSignal()