3 #include "../port/lib.h"
4 #include "../port/error.h"
12 void (*proctrace)(Proc *, int, vlong);
32 setkernur(Ureg *ureg, Proc *p)
34 ureg->pc = p->sched.pc;
35 ureg->sp = p->sched.sp+4;
36 ureg->r14 = (ulong) sched;
40 setregisters(Ureg *, char *, char *, int)
78 pexit("kproc exiting", 0);
82 kprocchild(Proc *p, void (*func)(void *), void *arg)
84 p->sched.pc = (ulong) linkproc;
85 p->sched.sp = (ulong) p->kstack + KSTACK;
91 forkchild(Proc *p, Ureg *ureg)
95 p->sched.sp = (ulong) p->kstack + KSTACK - (sizeof(Ureg) + 8);
96 p->sched.pc = (ulong) forkret;
97 cureg = (Ureg*) (p->sched.sp + 8);
98 memmove(cureg, ureg, sizeof(Ureg));
105 execregs(ulong entry, ulong ssize, ulong nargs)
110 sp = (ulong *) (USTKTOP - ssize);
114 memset(ureg, 0, sizeof *ureg);
116 ureg->sp = (ulong) sp;
118 return USTKTOP - sizeof(Tos);
122 evenaddr(uintptr addr)
125 postnote(up, 1, "sys: odd address", NDebug);
131 _dumpstack(ulong sp, ulong pc)
134 uintptr l, v, i, estack;
137 x += iprint("ktrace /arm/s9panda %#.8lux %#.8lux <<EOF\n",
141 && (uintptr)&l >= (uintptr)up->kstack
142 && (uintptr)&l <= (uintptr)up->kstack+KSTACK)
143 estack = (uintptr)up->kstack+KSTACK;
144 else if((uintptr)&l >= (uintptr)(KTZERO - BY2PG)
145 && (uintptr)&l <= (uintptr)KTZERO)
146 estack = (uintptr)KTZERO;
149 x += iprint("estackx %p\n", estack);
151 for(l = (uintptr)&l; l < estack; l += sizeof(uintptr)){
153 if((KTZERO < v && v < (uintptr)etext) || estack-l < 32){
154 x += iprint("%.8p=%.8p ", l, v);
168 printureg(Ureg *ureg)
170 print("R0 %.8ulx R1 %.8ulx R2 %.8ulx R3 %.8ulx\n", ureg->r0, ureg->r1, ureg->r2, ureg->r3);
171 print("R4 %.8ulx R5 %.8ulx R6 %.8ulx R7 %.8ulx\n", ureg->r4, ureg->r5, ureg->r6, ureg->r7);
172 print("R8 %.8ulx R9 %.8ulx R10 %.8ulx R11 %.8ulx\n", ureg->r8, ureg->r9, ureg->r10, ureg->r11);
173 print("R12 %.8ulx R13 %.8ulx R14 %.8ulx R15 %.8ulx\n", ureg->r12, ureg->r13, ureg->r14, ureg->pc);
174 print("PSR %.8ulx exception %ld\n", ureg->psr, ureg->type);