xref: /plan9/sys/src/libc/sparc/notejmp.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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 Colombier notejmp(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