2 * db - main command loop and error/interrupt handling
13 int xargc; /* bullshit */
15 extern BOOL executing;
21 void fault(void*, char*);
28 main(int argc, char **argv)
43 wtflag = ORDWR; /* suitable for open() */
48 dprint("missing -I argument\n");
55 dprint("missing -m argument\n");
60 if (argc > 0 && !alldigs(argv[0])) {
65 if(argc==1 && alldigs(argv[0])){
72 cpu = getenv("cputype");
75 dprint("$cputype not set; assuming %s\n", cpu);
77 p = getenv("terminal");
78 if(p==0 || (p=strchr(p, ' '))==0 || p[1]==' ' || p[1]==0){
79 strcpy(b1, "/386/9pc");
80 dprint("missing or bad $terminal; assuming %s\n", b1);
86 sprint(b1, "/%s/9%s", cpu, p);
90 sprint(b1, "/proc/%s/text", argv[0]);
93 sprint(b2, "/proc/%s/mem", argv[0]);
95 } else if (argc > 0) {
96 fprint(2, "Usage: db [-kw] [-m machine] [-I dir] [symfile] [pid]\n");
104 dotmap = dumbmap(-1);
105 if (name && machbyname(name) == 0)
106 dprint ("unknown machine %s", name);
107 dprint("%s binary\n", mach->name);
108 if(setjmp(env) == 0){
110 setcor(); /* could get error */
111 dprint("%s\n", machdata->excep(cormap, rget));
147 error("newline expected");
167 exits(exitflg? "error": 0);
171 * An error occurred; save the message for later printing,
172 * close open files, and reset to main command loop.
187 errors(char *m, char *n)
189 static char buf[128];
191 sprint(buf, "%s: %s", m, n);
196 * An interrupt occurred;
197 * seek to the end of the current file
198 * and remember that there was a fault.
201 fault(void *a, char *s)
204 if(strncmp(s, "interrupt", 9) == 0){