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