13e12c5d1SDavid du Colombier #include <u.h> 23e12c5d1SDavid du Colombier #include <libc.h> 33e12c5d1SDavid du Colombier #include <ureg.h> 43e12c5d1SDavid du Colombier 5*219b2ee8SDavid du Colombier int __noterestore(void); 6*219b2ee8SDavid du Colombier 73e12c5d1SDavid du Colombier void notejmp(void * vr,jmp_buf j,int ret)83e12c5d1SDavid du Colombiernotejmp(void *vr, jmp_buf j, int ret) 93e12c5d1SDavid du Colombier { 103e12c5d1SDavid du Colombier struct Ureg *r = vr; 113e12c5d1SDavid du Colombier 12*219b2ee8SDavid du Colombier /* 13*219b2ee8SDavid du Colombier * song and dance to get around the kernel smashing r7 in noted 14*219b2ee8SDavid du Colombier */ 15*219b2ee8SDavid du Colombier r->r8 = ret; 163e12c5d1SDavid du Colombier if(ret == 0) 17*219b2ee8SDavid du Colombier r->r8 = 1; 18*219b2ee8SDavid du Colombier r->r9 = j[JMPBUFPC] - JMPBUFDPC; 19*219b2ee8SDavid du Colombier r->pc = (ulong)__noterestore; 20*219b2ee8SDavid du Colombier r->npc = (ulong)__noterestore + 4; 21*219b2ee8SDavid du Colombier r->sp = j[JMPBUFSP]; 223e12c5d1SDavid du Colombier noted(NCONT); 233e12c5d1SDavid du Colombier } 24