diff options
author | glenda <glenda@9front.local> | 2025-05-14 01:33:55 +0000 |
---|---|---|
committer | glenda <glenda@9front.local> | 2025-05-14 01:33:55 +0000 |
commit | a7081490dbeda19788e6374a080ee38606aa3cd3 (patch) | |
tree | 8c440e3611573ee60322e7e84e5204e3e326028a /sys/src/9/kw | |
parent | 635cb9e7425577dae44eb415ad42e8d3892850b5 (diff) |
kernel: get rid of Proc.kstack
The kernel stack is now above the Proc structure,
so the explicit kstack pointer can be eliminated.
Diffstat (limited to 'sys/src/9/kw')
-rw-r--r-- | sys/src/9/kw/arch.c | 2 | ||||
-rw-r--r-- | sys/src/9/kw/syscall.c | 2 | ||||
-rw-r--r-- | sys/src/9/kw/trap.c | 13 |
3 files changed, 8 insertions, 9 deletions
diff --git a/sys/src/9/kw/arch.c b/sys/src/9/kw/arch.c index 8f73da606..2395c74ea 100644 --- a/sys/src/9/kw/arch.c +++ b/sys/src/9/kw/arch.c @@ -68,7 +68,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr)entry; - p->sched.sp = (uintptr)p->kstack+KSTACK; + p->sched.sp = (uintptr)p; } /* diff --git a/sys/src/9/kw/syscall.c b/sys/src/9/kw/syscall.c index 067c4a48b..521f519c1 100644 --- a/sys/src/9/kw/syscall.c +++ b/sys/src/9/kw/syscall.c @@ -314,7 +314,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; //print("%lud setting up for forking child %lud\n", up->pid, p->pid); - p->sched.sp = (ulong)p->kstack+KSTACK-sizeof(Ureg); + p->sched.sp = (ulong)p-sizeof(Ureg); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp); diff --git a/sys/src/9/kw/trap.c b/sys/src/9/kw/trap.c index 1b0705b05..dafc8fc42 100644 --- a/sys/src/9/kw/trap.c +++ b/sys/src/9/kw/trap.c @@ -367,7 +367,7 @@ trap(Ureg *ureg) char buf[ERRMAX]; if(up != nil) - rem = (char*)ureg - up->kstack; + rem = (char*)ureg - ((char*)up - KSTACK); else rem = (char*)ureg - ((char*)m + sizeof(Mach)); if(rem < 256) { @@ -540,14 +540,14 @@ dumpstackwithureg(Ureg *ureg) ureg->pc, ureg->sp, ureg->r14); delay(2000); i = 0; - if(up != nil && (uintptr)&l <= (uintptr)up->kstack+KSTACK) - estack = (uintptr)up->kstack+KSTACK; + if(up != nil && (uintptr)&l <= (uintptr)up) + estack = (uintptr)up; else if((uintptr)&l >= (uintptr)m->stack && (uintptr)&l <= (uintptr)m+MACHSIZE) estack = (uintptr)m+MACHSIZE; else{ if(up != nil) - iprint("&up->kstack %#p &l %#p\n", up->kstack, &l); + iprint("&up %#p &l %#p\n", up, &l); else iprint("&m %#p &l %#p\n", m, &l); return; @@ -617,10 +617,9 @@ dumpregs(Ureg* ureg) iprint("pc %#lux link %#lux\n", ureg->pc, ureg->link); if(up) - iprint("user stack: %#p-%#p\n", up->kstack, up->kstack+KSTACK-4); + iprint("user stack: %#p-%#p\n", (char*)up - KSTACK, up); else - iprint("kernel stack: %8.8lux-%8.8lux\n", - (ulong)(m+1), (ulong)m+BY2PG-4); + iprint("kernel stack: %8.8lux-%8.8lux\n", (ulong)(m+1), (ulong)m+BY2PG); dumplongs("stack", (ulong *)(ureg + 1), 16); delay(2000); dumpstack(); |