|
|
1.1 root 1: #
2: /*
3: *
4: * UNIX debugger
5: *
6: */
7:
8: #include "defs.h"
9: SCCSID(@(#)pcs.c 2.3);
10:
11:
12: MSG NOBKPT;
13: MSG SZBKPT;
14: MSG EXBKPT;
15: MSG NOPCS;
16: MSG BADMOD;
17:
18: /* breakpoints */
19: BKPTR bkpthead;
20:
21: CHAR *lp;
22: CHAR lastc;
23: struct user u;
24:
25: INT signo;
26: L_INT dot;
27: INT pid;
28: L_INT cntval;
29: L_INT loopcnt;
30:
31:
32:
33: /* sub process control */
34:
35: subpcs(modif)
36: {
37: REG INT check;
38: INT execsig,runmode;
39: REG BKPTR bkptr;
40: STRING comptr;
41: execsig=0; loopcnt=cntval;
42:
43: switch (modif) {
44:
45: /* delete breakpoint */
46: case 'd': case 'D':
47: IF (bkptr=scanbkpt(dot))
48: THEN bkptr->flag=0; return;
49: ELSE error(NOBKPT);
50: FI
51:
52: /* set breakpoint */
53: case 'b': case 'B':
54: IF (bkptr=scanbkpt(dot))
55: THEN bkptr->flag=0;
56: FI
57: FOR bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt
58: DO IF bkptr->flag == 0
59: THEN break;
60: FI
61: OD
62: IF bkptr==0
63: THEN IF (bkptr=sbrk(sizeof *bkptr)) == -1
64: THEN error(SZBKPT);
65: ELSE bkptr->nxtbkpt=bkpthead;
66: bkpthead=bkptr;
67: FI
68: FI
69: bkptr->loc = dot;
70: bkptr->initcnt = bkptr->count = cntval;
71: bkptr->flag = BKPTSET;
72: check=MAXCOM-1; comptr=bkptr->comm; rdc(); lp--;
73: REP *comptr++ = readchar();
74: PER check-- ANDF lastc!=EOR DONE
75: *comptr=0; lp--;
76: IF check
77: THEN return;
78: ELSE error(EXBKPT);
79: FI
80:
81: /* exit */
82: case 'k' :case 'K':
83: IF pid
84: THEN printf("%d: killed", pid); endpcs(); return;
85: FI
86: error(NOPCS);
87:
88: /* run program */
89: case 'r': case 'R':
90: endpcs();
91: setup(); runmode=CONTIN;
92: break;
93:
94: /* single step */
95: case 's': case 'S':
96: IF pid
97: THEN
98: runmode=SINGLE; execsig=getsig(signo);
99: ELSE setup(); loopcnt--;
100: FI
101: break;
102:
103: /* continue with optional signal */
104: case 'c': case 'C': case 0:
105: IF pid==0 THEN error(NOPCS); FI
106: runmode=CONTIN; execsig=getsig(signo);
107: break;
108:
109: default: error(BADMOD);
110: }
111:
112: IF loopcnt>0 ANDF runpcs(runmode,execsig)
113: THEN printf("breakpoint%16t");
114: ELSE printf("stopped at%16t");
115: FI
116: delbp();
117: printpc();
118: }
119:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.