Lines Matching refs:cp

140 	cstatus_t *cp;  in ptrace()  local
214 if ((cp = GrabProc(pid)) == NULLCP) in ptrace()
217 ps = &cp->pstatus; in ptrace()
219 if (ProcUpdate(cp) != 0) { in ptrace()
220 ReleaseProc(cp); in ptrace()
236 if (pread(cp->asfd, (char *)&data, sizeof (data), (off_t)addr) in ptrace()
250 GetPsargs(cp); in ptrace()
252 GetSignal(cp); in ptrace()
255 data = *((int *)((caddr_t)(&cp->user) + xaddr)); in ptrace()
265 if (pwrite(cp->asfd, (char *)&data, sizeof (data), (off_t)addr) in ptrace()
281 data = (cp->user.u_reg[EFL] & ~PSL_USERMASK) | in ptrace()
283 cp->user.u_reg[rx] = data; in ptrace()
284 cp->flags |= CS_SETREGS; in ptrace()
295 if (cp->flags & CS_SETREGS) { in ptrace()
299 ps->pr_lwp.pr_reg[GS] = cp->user.u_reg[GS]; in ptrace()
300 ps->pr_lwp.pr_reg[FS] = cp->user.u_reg[FS]; in ptrace()
301 ps->pr_lwp.pr_reg[ES] = cp->user.u_reg[ES]; in ptrace()
302 ps->pr_lwp.pr_reg[DS] = cp->user.u_reg[DS]; in ptrace()
303 ps->pr_lwp.pr_reg[EDI] = cp->user.u_reg[EDI]; in ptrace()
304 ps->pr_lwp.pr_reg[ESI] = cp->user.u_reg[ESI]; in ptrace()
305 ps->pr_lwp.pr_reg[EBP] = cp->user.u_reg[EBP]; in ptrace()
306 ps->pr_lwp.pr_reg[ESP] = cp->user.u_reg[ESP]; in ptrace()
307 ps->pr_lwp.pr_reg[EBX] = cp->user.u_reg[EBX]; in ptrace()
308 ps->pr_lwp.pr_reg[EDX] = cp->user.u_reg[EDX]; in ptrace()
309 ps->pr_lwp.pr_reg[ECX] = cp->user.u_reg[ECX]; in ptrace()
310 ps->pr_lwp.pr_reg[EAX] = cp->user.u_reg[EAX]; in ptrace()
311 ps->pr_lwp.pr_reg[TRAPNO] = cp->user.u_reg[TRAPNO]; in ptrace()
312 ps->pr_lwp.pr_reg[ERR] = cp->user.u_reg[ERR]; in ptrace()
313 ps->pr_lwp.pr_reg[EIP] = cp->user.u_reg[EIP]; in ptrace()
314 ps->pr_lwp.pr_reg[CS] = cp->user.u_reg[CS]; in ptrace()
315 ps->pr_lwp.pr_reg[EFL] = cp->user.u_reg[EFL]; in ptrace()
316 ps->pr_lwp.pr_reg[UESP] = cp->user.u_reg[UESP]; in ptrace()
317 ps->pr_lwp.pr_reg[SS] = cp->user.u_reg[SS]; in ptrace()
323 if (writev(cp->ctlfd, iov, 2) < 0) in ptrace()
327 addr != cp->user.u_reg[EIP]) { in ptrace()
330 if (write(cp->ctlfd, (char *)runctl, 2*sizeof (long)) in ptrace()
340 if (write(cp->ctlfd, (char *)&ctl, in ptrace()
351 if (write(cp->ctlfd, (char *)runctl, 3*sizeof (long)) in ptrace()
355 ReleaseProc(cp); in ptrace()
362 cp->flags = 0; in ptrace()
372 (void) write(cp->ctlfd, (char *)&ctl, in ptrace()
375 ReleaseProc(cp); in ptrace()
385 if (OpenProc(cp) == 0) in ptrace()
387 ReleaseProc(cp); in ptrace()
405 cstatus_t *cp; in FindProc() local
407 for (cp = childp; cp != NULLCP; cp = cp->next) in FindProc()
408 if (cp->pid == pid) in FindProc()
411 return (cp); in FindProc()
421 cstatus_t *cp = childp; in CheckAllProcs() local
423 while (cp != NULLCP) { in CheckAllProcs()
424 cstatus_t *next = cp->next; in CheckAllProcs()
426 if (ProcUpdate(cp) != 0) in CheckAllProcs()
427 ReleaseProc(cp); in CheckAllProcs()
428 cp = next; in CheckAllProcs()
475 OpenProc(cstatus_t *cp) in OpenProc() argument
482 MakeProcName(procname, cp->pid); in OpenProc()
488 omode = (cp->asfd > 0)? O_RDWR : (O_RDWR|O_EXCL); in OpenProc()
491 (cp->asfd = Dupfd(fd, cp->asfd)) < 0) in OpenProc()
496 (cp->ctlfd = Dupfd(fd, cp->ctlfd)) < 0) in OpenProc()
501 (cp->statusfd = Dupfd(fd, cp->statusfd)) < 0) in OpenProc()
507 CloseProc(cp); in OpenProc()
515 CloseProc(cstatus_t *cp) in CloseProc() argument
517 if (cp->asfd > 0) in CloseProc()
518 (void) close(cp->asfd); in CloseProc()
519 if (cp->ctlfd > 0) in CloseProc()
520 (void) close(cp->ctlfd); in CloseProc()
521 if (cp->statusfd > 0) in CloseProc()
522 (void) close(cp->statusfd); in CloseProc()
523 cp->asfd = 0; in CloseProc()
524 cp->ctlfd = 0; in CloseProc()
525 cp->statusfd = 0; in CloseProc()
534 cstatus_t *cp; in GrabProc() local
541 if ((cp = FindProc(pid)) != NULLCP) /* already grabbed */ in GrabProc()
542 return (cp); in GrabProc()
546 cp = (cstatus_t *)malloc(sizeof (cstatus_t)); in GrabProc()
547 if (cp == NULLCP) in GrabProc()
549 (void) memset((char *)cp, 0, sizeof (cstatus_t)); in GrabProc()
550 cp->pid = pid; in GrabProc()
553 while (OpenProc(cp) == 0) { in GrabProc()
558 if (pread(cp->statusfd, (char *)&cp->pstatus, in GrabProc()
559 sizeof (cp->pstatus), (off_t)0) == sizeof (cp->pstatus) && in GrabProc()
560 cp->pstatus.pr_ppid == ppid && in GrabProc()
561 (cp->pstatus.pr_flags & PR_PTRACE) && in GrabProc()
562 write(cp->ctlfd, (char *)ctl, 2*sizeof (long)) in GrabProc()
564 cp->next = childp; in GrabProc()
565 childp = cp; in GrabProc()
566 MakeUser(cp); in GrabProc()
567 return (cp); in GrabProc()
574 free((char *)cp); in GrabProc()
583 ReleaseProc(cstatus_t *cp) in ReleaseProc() argument
585 CloseProc(cp); in ReleaseProc()
587 if (childp == cp) in ReleaseProc()
588 childp = cp->next; in ReleaseProc()
593 if (pcp->next == cp) { in ReleaseProc()
594 pcp->next = cp->next; in ReleaseProc()
600 free((char *)cp); in ReleaseProc()
608 ProcUpdate(cstatus_t *cp) in ProcUpdate() argument
610 pstatus_t *ps = &cp->pstatus; in ProcUpdate()
612 if (cp->flags & CS_SETREGS) { in ProcUpdate()
616 ps->pr_lwp.pr_reg[GS] = cp->user.u_reg[GS]; in ProcUpdate()
617 ps->pr_lwp.pr_reg[FS] = cp->user.u_reg[FS]; in ProcUpdate()
618 ps->pr_lwp.pr_reg[ES] = cp->user.u_reg[ES]; in ProcUpdate()
619 ps->pr_lwp.pr_reg[DS] = cp->user.u_reg[DS]; in ProcUpdate()
620 ps->pr_lwp.pr_reg[EDI] = cp->user.u_reg[EDI]; in ProcUpdate()
621 ps->pr_lwp.pr_reg[ESI] = cp->user.u_reg[ESI]; in ProcUpdate()
622 ps->pr_lwp.pr_reg[EBP] = cp->user.u_reg[EBP]; in ProcUpdate()
623 ps->pr_lwp.pr_reg[ESP] = cp->user.u_reg[ESP]; in ProcUpdate()
624 ps->pr_lwp.pr_reg[EBX] = cp->user.u_reg[EBX]; in ProcUpdate()
625 ps->pr_lwp.pr_reg[EDX] = cp->user.u_reg[EDX]; in ProcUpdate()
626 ps->pr_lwp.pr_reg[ECX] = cp->user.u_reg[ECX]; in ProcUpdate()
627 ps->pr_lwp.pr_reg[EAX] = cp->user.u_reg[EAX]; in ProcUpdate()
628 ps->pr_lwp.pr_reg[TRAPNO] = cp->user.u_reg[TRAPNO]; in ProcUpdate()
629 ps->pr_lwp.pr_reg[ERR] = cp->user.u_reg[ERR]; in ProcUpdate()
630 ps->pr_lwp.pr_reg[EIP] = cp->user.u_reg[EIP]; in ProcUpdate()
631 ps->pr_lwp.pr_reg[CS] = cp->user.u_reg[CS]; in ProcUpdate()
632 ps->pr_lwp.pr_reg[EFL] = cp->user.u_reg[EFL]; in ProcUpdate()
633 ps->pr_lwp.pr_reg[UESP] = cp->user.u_reg[UESP]; in ProcUpdate()
634 ps->pr_lwp.pr_reg[SS] = cp->user.u_reg[SS]; in ProcUpdate()
640 (void) writev(cp->ctlfd, iov, 2); in ProcUpdate()
641 cp->flags &= ~CS_SETREGS; in ProcUpdate()
644 while (pread(cp->statusfd, (char *)ps, sizeof (*ps), (off_t)0) < 0) { in ProcUpdate()
647 !(errno == EAGAIN && OpenProc(cp) == 0)) in ProcUpdate()
652 MakeUser(cp); in ProcUpdate()
663 MakeUser(cstatus_t *cp) in MakeUser() argument
665 pstatus_t *ps = &cp->pstatus; in MakeUser()
667 cp->user.u_reg[GS] = ps->pr_lwp.pr_reg[GS]; in MakeUser()
668 cp->user.u_reg[FS] = ps->pr_lwp.pr_reg[FS]; in MakeUser()
669 cp->user.u_reg[ES] = ps->pr_lwp.pr_reg[ES]; in MakeUser()
670 cp->user.u_reg[DS] = ps->pr_lwp.pr_reg[DS]; in MakeUser()
671 cp->user.u_reg[EDI] = ps->pr_lwp.pr_reg[EDI]; in MakeUser()
672 cp->user.u_reg[ESI] = ps->pr_lwp.pr_reg[ESI]; in MakeUser()
673 cp->user.u_reg[EBP] = ps->pr_lwp.pr_reg[EBP]; in MakeUser()
674 cp->user.u_reg[ESP] = ps->pr_lwp.pr_reg[ESP]; in MakeUser()
675 cp->user.u_reg[EBX] = ps->pr_lwp.pr_reg[EBX]; in MakeUser()
676 cp->user.u_reg[EDX] = ps->pr_lwp.pr_reg[EDX]; in MakeUser()
677 cp->user.u_reg[ECX] = ps->pr_lwp.pr_reg[ECX]; in MakeUser()
678 cp->user.u_reg[EAX] = ps->pr_lwp.pr_reg[EAX]; in MakeUser()
679 cp->user.u_reg[TRAPNO] = ps->pr_lwp.pr_reg[TRAPNO]; in MakeUser()
680 cp->user.u_reg[ERR] = ps->pr_lwp.pr_reg[ERR]; in MakeUser()
681 cp->user.u_reg[EIP] = ps->pr_lwp.pr_reg[EIP]; in MakeUser()
682 cp->user.u_reg[CS] = ps->pr_lwp.pr_reg[CS]; in MakeUser()
683 cp->user.u_reg[EFL] = ps->pr_lwp.pr_reg[EFL]; in MakeUser()
684 cp->user.u_reg[UESP] = ps->pr_lwp.pr_reg[UESP]; in MakeUser()
685 cp->user.u_reg[SS] = ps->pr_lwp.pr_reg[SS]; in MakeUser()
686 cp->user.u_ar0 = (greg_t *)REGADDR; in MakeUser()
687 cp->user.u_code = ps->pr_lwp.pr_info.si_code; in MakeUser()
688 cp->user.u_addr = ps->pr_lwp.pr_info.si_addr; in MakeUser()
689 cp->flags &= ~(CS_PSARGS|CS_SIGNAL); in MakeUser()
696 GetPsargs(cstatus_t *cp) in GetPsargs() argument
701 MakeProcName(procname, cp->pid); in GetPsargs()
704 (void) memset(cp->user.u_psargs, 0, PSARGSZ); in GetPsargs()
707 (void) pread(fd, cp->user.u_psargs, PSARGSZ, in GetPsargs()
711 cp->flags |= CS_PSARGS; in GetPsargs()
718 GetSignal(cstatus_t *cp) in GetSignal() argument
725 MakeProcName(procname, cp->pid); in GetSignal()
733 cp->user.u_signal[i] = action[i].sa_handler; in GetSignal()
734 cp->flags |= CS_SIGNAL; in GetSignal()