remove \n from panics, and use rdtsc() directly to avoid unnecessary indirection. need to submit additional patch to make perfticks return uvlong. Reference: /n/patches.lsub.org/patch/trapnits Date: Mon Nov 5 15:31:18 CET 2012 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/trap.c Thu Jul 12 10:53:55 2012 +++ /sys/src/nix/k10/trap.c Sun Oct 28 17:40:56 2012 @@ -158,7 +158,7 @@ Vctl *v; if(vno < 0 || vno >= 256) - panic("trapenable: vno %d\n", vno); + panic("trapenable: vno %d", vno); v = malloc(sizeof(Vctl)); v->type = "trap"; v->tbdf = BUSUNKNOWN; @@ -250,9 +250,9 @@ void intrtime(int vno) { - ulong diff, x; /* should be uvlong */ + uvlong diff, x; - x = perfticks(); + x = rdtsc(); diff = x - m->perf.intrts; m->perf.intrts = x; @@ -334,7 +334,7 @@ vno = ureg->type; - m->perf.intrts = perfticks(); + m->perf.intrts = rdtsc(); user = userureg(ureg); if(user && (m->nixrole == NIXTC)){ up->dbgreg = ureg; @@ -412,7 +412,7 @@ } if(vno < nelem(excname)) panic("%s", excname[vno]); - panic("unknown trap/intr: %d\n", vno); + panic("unknown trap/intr: %d", vno); } splhi(); @@ -468,7 +468,7 @@ iprint("r15\t%#16.16llux\n", ureg->r15); iprint("ds %#4.4ux es %#4.4ux fs %#4.4ux gs %#4.4ux\n", ureg->ds, ureg->es, ureg->fs, ureg->gs); - iprint("ureg fs\t%#ux\n", *(unsigned int *)&ureg->ds); + iprint("ureg fs\t%#ux\n", *(u32int*)&ureg->ds); iprint("type\t%#llux\n", ureg->type); iprint("error\t%#llux\n", ureg->error); iprint("pc\t%#llux\n", ureg->ip); @@ -599,7 +599,7 @@ { coherence(); if(isbooting(m) && m->proc == nil){ - tcquiesce(); + tcquiesce(); } } @@ -621,7 +621,7 @@ * initialisation before the system is fully up. */ if(up == nil){ - panic("fault with up == nil; pc %#llux addr %#llux\n", + panic("fault with up == nil; pc %#llux addr %#llux", ureg->ip, addr); } read = !(ureg->error & 2); @@ -642,7 +642,7 @@ * the game's a bogey. */ if(!user && (!insyscall || up->nerrlab == 0)) - panic("fault: %#llux\n", addr); + panic("fault: %#llux", addr); sprint(buf, "sys: trap: fault %s addr=%#llux", read? "read": "write", addr); postnote(up, 1, buf, NDebug); @@ -698,6 +698,8 @@ { ureg->ip = p->sched.pc; ureg->sp = p->sched.sp+BY2SE; + ureg->r14 = (uvlong)p; + ureg->r15 = (uvlong)m; /* well, better than nothing */ } uintptr