summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;