diff options
author | aiju <aiju@phicode.de> | 2011-06-26 13:37:14 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2011-06-26 13:37:14 +0200 |
commit | cebce1be70fbc8a5afd94909504e937be5b59b9d (patch) | |
tree | 6869b4952c7e9e126e3fd24dffaed2503bf3c84f /sys/src/cmd/5e | |
parent | 5f7342a46178e8e2250f60ddd52a780671f045ea (diff) |
5e: fix _tos->pid / libthread bug
Diffstat (limited to 'sys/src/cmd/5e')
-rw-r--r-- | sys/src/cmd/5e/fns.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/5e/proc.c | 10 | ||||
-rw-r--r-- | sys/src/cmd/5e/sys.c | 1 |
3 files changed, 11 insertions, 1 deletions
diff --git a/sys/src/cmd/5e/fns.h b/sys/src/cmd/5e/fns.h index 2d28c522e..68d60f785 100644 --- a/sys/src/cmd/5e/fns.h +++ b/sys/src/cmd/5e/fns.h @@ -35,3 +35,4 @@ void invalid(u32int); void fpatransfer(u32int); void fpaoperation(u32int); void fparegtransfer(u32int); +void inittos(void); diff --git a/sys/src/cmd/5e/proc.c b/sys/src/cmd/5e/proc.c index 85768df56..9ef5280ef 100644 --- a/sys/src/cmd/5e/proc.c +++ b/sys/src/cmd/5e/proc.c @@ -108,8 +108,16 @@ initstack(int argc, char **argv) ap += len; } *(ulong *) vaddrnol(sp, 4) = 0; + inittos(); +} - ((Tos *) vaddrnol(tos, sizeof(Tos)))->pid = getpid(); +void +inittos(void) +{ + ulong tos; + + tos = mach->utop - sizeof(Tos) * 2; + ((Tos *) vaddrnol(tos, sizeof(Tos)))->pid = P->pid; } static int diff --git a/sys/src/cmd/5e/sys.c b/sys/src/cmd/5e/sys.c index 0f9fb1c03..38fd0c076 100644 --- a/sys/src/cmd/5e/sys.c +++ b/sys/src/cmd/5e/sys.c @@ -401,6 +401,7 @@ sysrfork(void) P = p; atexit(cleanup); P->pid = getpid(); + inittos(); addproc(P); } P->R[0] = rc; |