<<>> /* * C support for Signals in Mesa/Cedar. * Copyright Ó 1989 by Xerox Corporation. All rights reserved. */ #include "SignalSupport.h" #include #include unsigned XR_UnnamedSignal; unsigned XR_UnnamedError; unsigned XR_Unwind; unsigned XR_Aborted; unsigned XR_Uncaught; unsigned XR_NarrowFault; unsigned XR_NarrowRefFault; unsigned XR_InvalidProcess; SignalEnvironment XR_SigEnv; void XR_SetSignalEnvironment(env) SignalEnvironment env; { XR_SigEnv = env; XR_UnnamedError = env-> unnamedError; XR_UnnamedSignal = env->unnamedSignal; XR_Unwind = env->Unwind; XR_Aborted = env->aborted; XR_Uncaught = env->uncaught; XR_NarrowFault = env->narrowFault; XR_NarrowRefFault = env->narrowRefFault; XR_InvalidProcess = env->invalidProcess; /* XR_RegisterHandler(ThreadHandler); */ }; /* * Replacement for _setjmp used in PushHandler; the idea is that later * we'll want to go back to PushHandler's caller, not to PushHandler. * * This must remain consistent with XR_setjmp in PCR (Threads.h), * preferably by using it. * */ #if defined(sparc) asm(" .text"); asm(" .globl _XR_UplevelSetjmp"); asm("_XR_UplevelSetjmp:"); asm(" mov %o0,%g1"); /* save arg */ asm(" restore"); /* up 1 level */ asm(" mov %g1,%o0"); /* restore arg */ asm(" sethi %hi(_XR_setjmp),%g1"); /* prepare for jump */ asm(" jmpl %g1+%lo(_XR_setjmp),%g0"); asm(" nop"); #endif