Lines Matching refs:cp

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