|
|
1.1 root 1: #
2: /*
3: *
4: * UNIX debugger
5: *
6: */
7:
8: #include "head.h"
9: #include <signal.h>
10: #include <stdio.h>
11: #include <sys/stat.h>
12:
13: INT mkfault;
14: INT executing;
15: CHAR *lp;
16: L_INT maxoff;
17: L_INT maxpos;
18: ADDR sigint;
19: ADDR sigqit;
20: INT wtflag;
21: L_INT maxfile;
22: L_INT maxstor;
23: L_INT txtsiz;
24: L_INT datsiz;
25: L_INT datbas;
26: L_INT stksiz;
27: STRING errflg;
28: INT magic;
29: L_INT entrypt;
30:
31: CHAR lastc;
32:
33: STRING symfil;
34: STRING corfil;
35: INT argcount;
36: int fpe();
37:
38:
39:
40: #ifndef STD
41: char *mktemp(), *tfn;
42: int tfd;
43: #endif
44:
45: main(argc, argv)
46: REG STRING *argv;
47: REG INT argc;
48: {
49: register char *p;
50: struct stat stbuf;
51:
52: maxfile=1L<<24; maxstor=1L<<31;
53:
54: setbuf(stdout, NULL);
55: setbuf(stderr, NULL);
56:
57: WHILE argc>1
58: DO IF eqstr("-w",argv[1])
59: THEN wtflag=2; argc--; argv++;
60: ELSE break;
61: FI
62: OD
63:
64: IF argc>1 THEN symfil = argv[1]; FI
65: IF argc>2 THEN corfil = argv[2]; FI
66: fp = filework;
67: if (argc > 3) {
68: for (p = argv[3]; *p; *fp++ = *p++) ;
69: *fp++ = '/';
70: }
71: argcount=argc;
72:
73: if (stat(symfil, &stbuf) == -1) {
74: printf("`%s' does not exist\n", symfil);
75: exit(4);
76: }
77: symtime = stbuf.st_mtime;
78: if (stat(corfil, &stbuf) != -1) {
79: if (symtime > stbuf.st_mtime)
80: printf("Warning: `%s' newer than `%s'\n",
81: symfil, corfil);
82: }
83:
84: setsym(); setcor();
85: initfp();
86:
87: /* set up variables for user */
88: maxoff=MAXOFF; maxpos=MAXPOS;
89: gtty(2, &sdbttym);
90: IF (sigint= (ADDR) signal(SIGINT,01))!=01
91: THEN sigint= (ADDR) fault; signal(SIGINT,fault);
92: FI
93: sigqit= (ADDR) signal(SIGQUIT,1);
94: signal(SIGILL, fpe);
95: #ifdef VAX135
96: tfn = "/usr/hpk/sdblog/XXXXXX";
97: #endif
98: #ifdef UCBVAX
99: tfn = "/usr/staff/hpk/sdblog/XXXXXX";
100: #endif
101: #ifndef STD
102: tfn = mktemp(tfn);
103: tfd = open(tfn);
104: if (tfd < 0)
105: tfd = creat(tfn, 0666);
106: lseek(tfd, 0l, 2);
107: #endif
108:
109: setjmp(env);
110: if (debug) printf("Sdb restarted\n");
111: gtty(2, &userttym);
112: if (sdbttym.sg_flags != userttym.sg_flags)
113: stty(2, &sdbttym);
114: IF executing THEN delbp(); FI
115: executing=FALSE;
116:
117: for (;;) {
118: mkfault = 0;
119: printf("*");
120: if (decode(readline(stdin)) == 1) {
121: printf("Error; try again\n");
122: continue;
123: }
124:
125: if (debug) {
126: printf("cmd %c:\n", cmd);
127: printf("%s:%s\n", proc, var);
128: printf("args-%s;re-%s;integ-%d\n", args, re, integ);
129: printf("scallf-%d;reflg-%d\n\n", scallf, reflag);
130: }
131:
132: #ifndef STD
133: write(tfd, &cmd, 1);
134: #endif
135:
136: docommand();
137: }
138: }
139:
140:
141: fault(a)
142: {
143: signal(a,fault);
144: mkfault++;
145: printf("\n");
146: longjmp(env, 0);
147: }
148:
149: fpe() {
150: signal(SIGILL, fpe);
151: error("Illegal floating constant");
152: longjmp(env, 0);
153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.