00001
00010 #include "sigsafe_internal.h"
00011 #include <ucontext.h>
00012 #include <unistd.h>
00013
00014 PRIVATE_DEF(void sigsafe_handler_for_platform_(ucontext_t *ctx)) {
00015 struct sigsafe_syscall_ *s;
00016 void *srr0;
00017 srr0 = (void*) ctx->uc_mcontext->ss.srr0;
00018 for (s = sigsafe_syscalls_; s->minjmp != NULL; s++) {
00019 if (s->minjmp <= srr0 && srr0 <= s->maxjmp) {
00020 #ifdef SIGSAFE_DEBUG_JUMP
00021 write(2, "[J]", 3);
00022 #endif
00023 ctx->uc_mcontext->ss.srr0 = (long) s->jmpto;
00024 return;
00025 }
00026 }
00027 }