3 #include "../port/lib.h"
4 #include "../port/error.h"
12 void (*proctrace)(Proc *, int, vlong);
57 pexit("kproc exiting", 0);
61 kprocchild(Proc *p, void (*func)(void *), void *arg)
63 p->sched.pc = (ulong) linkproc;
64 p->sched.sp = (ulong) p->kstack + KSTACK;
70 forkchild(Proc *p, Ureg *ureg)
74 p->sched.sp = (ulong) p->kstack + KSTACK - (sizeof(Ureg) + 8);
75 p->sched.pc = (ulong) forkret;
76 cureg = (Ureg*) (p->sched.sp + 8);
77 memmove(cureg, ureg, sizeof(Ureg));
84 execregs(ulong entry, ulong ssize, ulong nargs)
90 sp = (ulong *) (USTKTOP - ssize);
94 memset(ureg, 0, sizeof *ureg);
96 ureg->sp = (ulong) sp;
98 return USTKTOP - sizeof(Tos);
102 evenaddr(uintptr addr)
105 postnote(up, 1, "sys: odd address", NDebug);
117 _dumpstack(ulong sp, ulong pc)
120 uintptr l, v, i, estack;
123 x += iprint("ktrace /arm/s9panda %#.8lux %#.8lux <<EOF\n",
127 && (uintptr)&l >= (uintptr)up->kstack
128 && (uintptr)&l <= (uintptr)up->kstack+KSTACK)
129 estack = (uintptr)up->kstack+KSTACK;
130 else if((uintptr)&l >= (uintptr)(KTZERO - BY2PG)
131 && (uintptr)&l <= (uintptr)KTZERO)
132 estack = (uintptr)KTZERO;
135 x += iprint("estackx %p\n", estack);
137 for(l = (uintptr)&l; l < estack; l += sizeof(uintptr)){
139 if((KTZERO < v && v < (uintptr)etext) || estack-l < 32){
140 x += iprint("%.8p=%.8p ", l, v);
154 printureg(Ureg *ureg)
156 print("R0 %.8ulx R1 %.8ulx R2 %.8ulx R3 %.8ulx\n", ureg->r0, ureg->r1, ureg->r2, ureg->r3);
157 print("R4 %.8ulx R5 %.8ulx R6 %.8ulx R7 %.8ulx\n", ureg->r4, ureg->r5, ureg->r6, ureg->r7);
158 print("R8 %.8ulx R9 %.8ulx R10 %.8ulx R11 %.8ulx\n", ureg->r8, ureg->r9, ureg->r10, ureg->r11);
159 print("R12 %.8ulx R13 %.8ulx R14 %.8ulx R15 %.8ulx\n", ureg->r12, ureg->r13, ureg->r14, ureg->pc);
160 print("PSR %.8ulx exception %ld\n", ureg->psr, ureg->type);