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