Commit | Line | Data |
---|---|---|
780dc7a7 HK |
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 | } |