commit 689be541258e9e701a600d6bd2fc3e5241726867 from: rsc date: Mon Nov 28 00:39:42 2005 UTC various fixes commit - 77fd60a177e50b398f1f235bcc47cbfc92e0fa80 commit + 689be541258e9e701a600d6bd2fc3e5241726867 blob - 195834d3894b921ca4d0fc0a3e3a191bf5cf741a blob + d6601d0e737320149290185da471b55f74841d86 --- src/cmd/acid/builtin.c +++ src/cmd/acid/builtin.c @@ -28,7 +28,7 @@ void match(Node*, Node*); void status(Node*, Node*); void xkill(Node*,Node*); void waitstop(Node*, Node*); -void sysstop(Node*, Node*); +void waitsyscall(Node*, Node*); void stop(Node*, Node*); void start(Node*, Node*); void filepc(Node*, Node*); @@ -47,6 +47,7 @@ void stringn(Node*, Node*); void xregister(Node*, Node*); void refconst(Node*, Node*); void dolook(Node*, Node*); +void step1(Node*, Node*); typedef struct Btab Btab; struct Btab @@ -87,13 +88,14 @@ struct Btab "start", start, "startstop", startstop, "status", status, + "step1", step1, "stop", stop, "strace", strace, "stringn", stringn, - "sysstop", sysstop, "textfile", textfile, "var", dolook, "waitstop", waitstop, + "waitsyscall", waitsyscall, 0 }; @@ -221,6 +223,23 @@ newproc(Node *r, Node *args) } void +step1(Node *r, Node *args) +{ + Node res; + + USED(r); + if(args == 0) + error("step1(pid): no pid"); + expr(args, &res); + if(res.type != TINT) + error("step1(pid): arg type"); + + msg(res.store.u.ival, "step"); + notes(res.store.u.ival); + dostop(res.store.u.ival); +} + +void startstop(Node *r, Node *args) { Node res; @@ -256,16 +275,16 @@ waitstop(Node *r, Node *args) } void -sysstop(Node *r, Node *args) +waitsyscall(Node *r, Node *args) { Node res; USED(r); if(args == 0) - error("waitstop(pid): no pid"); + error("waitsyscall(pid): no pid"); expr(args, &res); if(res.type != TINT) - error("waitstop(pid): arg type"); + error("waitsycall(pid): arg type"); Bflush(bout); msg(res.store.u.ival, "sysstop"); @@ -471,7 +490,7 @@ funcbound(Node *r, Node *args) error("fnbound(addr): arg type"); n = fnbound(res.store.u.ival, bounds); - if (n != 0) { + if (n >= 0) { r->store.u.l = al(TINT); l = r->store.u.l; l->store.u.ival = bounds[0]; blob - 0ae5a5bb2d14eb1bf23e87d1bc4f6dc7a54922f9 blob + 298e4351305b5b087c4bacd84bba40bc0a9473ab --- src/cmd/acid/proc.c +++ src/cmd/acid/proc.c @@ -88,6 +88,7 @@ nproc(char **argv) fatal("new: exec %s: %r"); default: install(pid); + msg(pid, "attached"); msg(pid, "waitstop"); notes(pid); sproc(pid); @@ -242,21 +243,6 @@ msg(int pid, char *msg) char * getstatus(int pid) { - int fd; - char *p; - - static char buf[128]; - - sprint(buf, "/proc/%d/status", pid); - fd = open(buf, OREAD); - if(fd < 0) - error("open %s: %r", buf); - read(fd, buf, sizeof(buf)); - close(fd); - p = buf+56+12; /* Do better! */ - while(*p == ' ') - p--; - p[1] = '\0'; - return buf+56; /* ditto */ + return "unknown"; } blob - 3e6a313dd7fc0fa076c91ea71d10dcd6dd98f05a blob + 15859dbb538eb139c61e5880a78fba8dfa7d35da --- src/cmd/acid/util.c +++ src/cmd/acid/util.c @@ -73,7 +73,7 @@ addvarsym(Fhdr *fp) Lsym *l; String *file; ulong v; - char buf[1024]; + char buf[65536]; /* Some of those C++ names are really big */ List *list, **tail, *tl; if(fp == nil)