summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5e
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2011-06-26 13:37:14 +0200
committeraiju <aiju@phicode.de>2011-06-26 13:37:14 +0200
commitcebce1be70fbc8a5afd94909504e937be5b59b9d (patch)
tree6869b4952c7e9e126e3fd24dffaed2503bf3c84f /sys/src/cmd/5e
parent5f7342a46178e8e2250f60ddd52a780671f045ea (diff)
5e: fix _tos->pid / libthread bug
Diffstat (limited to 'sys/src/cmd/5e')
-rw-r--r--sys/src/cmd/5e/fns.h1
-rw-r--r--sys/src/cmd/5e/proc.c10
-rw-r--r--sys/src/cmd/5e/sys.c1
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;