summaryrefslogtreecommitdiff
path: root/sys/src/cmd/ki/ki.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-07-30 19:11:16 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-07-30 19:11:16 +0200
commit4f33c88a51587681b7be1ae57cfbc43b627c6bc4 (patch)
tree25560404dc80007e5dc268811242c9071f6a1017 /sys/src/cmd/ki/ki.c
parentfcc5e75d07e5bc6cb3ddac6d9a437e7ec62d0d95 (diff)
import updated compilers from sources
Diffstat (limited to 'sys/src/cmd/ki/ki.c')
-rw-r--r--sys/src/cmd/ki/ki.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/src/cmd/ki/ki.c b/sys/src/cmd/ki/ki.c
index 6a07e7be5..38427584a 100644
--- a/sys/src/cmd/ki/ki.c
+++ b/sys/src/cmd/ki/ki.c
@@ -2,6 +2,7 @@
#include <libc.h>
#include <bio.h>
#include <mach.h>
+#include <tos.h>
#define Extern
#include "sparc.h"
@@ -277,12 +278,22 @@ reset(void)
void
initstk(int argc, char *argv[])
{
- ulong size, sp, ap;
+ ulong size, sp, ap, tos;
int i;
char *p;
initmap();
- sp = STACKTOP - 4;
+ tos = STACKTOP - sizeof(Tos)*2; /* we'll assume twice the host's is big enough */
+ sp = tos;
+ for (i = 0; i < sizeof(Tos)*2; i++)
+ putmem_b(tos + i, 0);
+
+ /*
+ * pid is second word from end of tos and needs to be set for nsec().
+ * we know sparc is a 32-bit cpu, so we'll assume knowledge of the Tos
+ * struct for now, and use our pid.
+ */
+ putmem_w(tos + 4*4 + 2*sizeof(ulong) + 3*sizeof(uvlong), getpid());
/* Build exec stack */
size = strlen(file)+1+BY2WD+BY2WD+(BY2WD*2);
@@ -292,7 +303,7 @@ initstk(int argc, char *argv[])
sp -= size;
sp &= ~7;
reg.r[1] = sp;
- reg.r[7] = STACKTOP-4; /* Plan 9 profiling clock */
+ reg.r[7] = tos; /* Plan 9 profiling clock, etc. */
/* Push argc */
putmem_w(sp, argc+1);