diff options
-rw-r--r-- | src/cmd/acid/builtin.c | 31 | ||||
-rw-r--r-- | src/cmd/acid/proc.c | 18 | ||||
-rw-r--r-- | src/cmd/acid/util.c | 2 |
3 files changed, 28 insertions, 23 deletions
diff --git a/src/cmd/acid/builtin.c b/src/cmd/acid/builtin.c index 195834d3..d6601d0e 100644 --- a/src/cmd/acid/builtin.c +++ b/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]; diff --git a/src/cmd/acid/proc.c b/src/cmd/acid/proc.c index 0ae5a5bb..298e4351 100644 --- a/src/cmd/acid/proc.c +++ b/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"; } diff --git a/src/cmd/acid/util.c b/src/cmd/acid/util.c index 3e6a313d..15859dbb 100644 --- a/src/cmd/acid/util.c +++ b/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) |