void attachprocess(void) { char buf[100]; Dir *sym, *mem; int fd; if (!adrflg) { dprint("used pid$a\n"); return; } sym = dirfstat(fsym); sprint(buf, "/proc/%lu/mem", adrval); corfil = buf; setcor(); sprint(buf, "/proc/%lu/text", adrval); fd = open(buf, OREAD); mem = nil; if (sym==nil || fd < 0 || (mem=dirfstat(fd))==nil || sym->qid.path != mem->qid.path) dprint("warning: text images may be inconsistent\n"); free(sym); free(mem); if (fd >= 0) close(fd); }
void main(int argc, char **argv) { int omode; volatile int quiet; char *s; char *name; quiet = 0; name = 0; outputinit(); maxoff = MAXOFF; omode = OREAD; ARGBEGIN{ default: usage(); case 'A': abort(); case 'k': kflag = 1; break; case 'w': omode = ORDWR; break; case 'I': s = ARGF(); if(s == 0) dprint("missing -I argument\n"); else Ipath = s; break; case 'm': name = ARGF(); if(name == 0) dprint("missing -m argument\n"); break; case 'q': quiet = 1; break; }ARGEND attachargs(argc, argv, omode, !quiet); dotmap = dumbmap(-1); /* * show initial state and drop into the execution loop. */ notify(fault); setsym(); if(setjmp(env) == 0){ if (pid || corhdr) setcor(); /* could get error */ if (correg && !quiet) { dprint("%s\n", mach->exc(cormap, correg)); printpc(); } } setjmp(env); if (executing) delbp(); executing = FALSE; for (;;) { flushbuf(); if (errmsg) { dprint(errmsg); printc('\n'); errmsg = 0; exitflg = 0; } if (mkfault) { mkfault=0; printc('\n'); prints(DBNAME); } clrinp(); rdc(); reread(); if (eof) { if (infile == STDIN) done(); iclose(-1, 0); eof = 0; longjmp(env, 1); } exitflg = 0; command(0, 0); reread(); if (rdc() != '\n') error("newline expected"); } }
void bpwait(void) { setcor(); unloadnote(); }