various fixes

This commit is contained in:
rsc 2005-11-28 00:39:42 +00:00
parent 77fd60a177
commit 689be54125
3 changed files with 28 additions and 23 deletions

View file

@ -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
};
@ -220,6 +222,23 @@ newproc(Node *r, Node *args)
r->store.u.ival = nproc(argv);
}
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)
{
@ -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];

View file

@ -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";
}

View file

@ -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)