1*fbadb1c4SDavid du Colombier #include <u.h> 2*fbadb1c4SDavid du Colombier #include <libc.h> 3*fbadb1c4SDavid du Colombier #include <ureg.h> 4*fbadb1c4SDavid du Colombier 5*fbadb1c4SDavid du Colombier int __noterestore(void); 6*fbadb1c4SDavid du Colombier 7*fbadb1c4SDavid du Colombier void notejmp(void * vr,jmp_buf j,int ret)8*fbadb1c4SDavid du Colombiernotejmp(void *vr, jmp_buf j, int ret) 9*fbadb1c4SDavid du Colombier { 10*fbadb1c4SDavid du Colombier struct Ureg *r = vr; 11*fbadb1c4SDavid du Colombier 12*fbadb1c4SDavid du Colombier /* 13*fbadb1c4SDavid du Colombier * song and dance to get around the kernel smashing r3 in noted 14*fbadb1c4SDavid du Colombier */ 15*fbadb1c4SDavid du Colombier r->r4 = ret; 16*fbadb1c4SDavid du Colombier if(ret == 0) 17*fbadb1c4SDavid du Colombier r->r4 = 1; 18*fbadb1c4SDavid du Colombier r->r5 = j[JMPBUFPC] - JMPBUFDPC; 19*fbadb1c4SDavid du Colombier r->pc = (uintptr)__noterestore; 20*fbadb1c4SDavid du Colombier r->sp = j[JMPBUFSP]; 21*fbadb1c4SDavid du Colombier noted(NCONT); 22*fbadb1c4SDavid du Colombier } 23