From 4e02e9acc8700d30df20b9f47bb738342f43c803 Mon Sep 17 00:00:00 2001 From: Stefan Ring Date: Sun, 13 Sep 2009 14:00:29 +0200 Subject: [PATCH] * src/vm/jit/trap.cpp (trap_handle) [__MIPS__]: Use executionstate for trap handling. * src/vm/jit/mips/linux/md-os.c: Simplified signal handlers. (like 1d0460714bf6) --- src/vm/jit/mips/linux/md-os.c | 55 ++--------------------------------- src/vm/jit/trap.cpp | 4 +-- 2 files changed, 5 insertions(+), 54 deletions(-) diff --git a/src/vm/jit/mips/linux/md-os.c b/src/vm/jit/mips/linux/md-os.c index eef2a2dc6..e96052f30 100644 --- a/src/vm/jit/mips/linux/md-os.c +++ b/src/vm/jit/mips/linux/md-os.c @@ -101,7 +101,6 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p) intptr_t val; intptr_t addr; int type; - void *p; _uc = (struct ucontext *) _p; _mc = &_uc->uc_mcontext; @@ -185,45 +184,7 @@ void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p) /* Handle the trap. */ - p = trap_handle(type, val, pv, sp, ra, xpc, _p); - - /* Set registers. */ - - switch (type) { - case TRAP_COMPILER: - if (p != NULL) { - _gregs[REG_PV] = (uintptr_t) p; -#if defined(__UCLIBC__) - _gregs[CTX_EPC] = (uintptr_t) p; -#else - _mc->pc = (uintptr_t) p; -#endif - break; - } - - /* Get and set the PV from the parent Java method. */ - - pv = md_codegen_get_pv_from_pc(ra); - - _gregs[REG_PV] = (uintptr_t) pv; - - /* Get the exception object. */ - - p = builtin_retrieve_exception(); - - assert(p != NULL); - - /* fall-through */ - - default: - _gregs[REG_ITMP1_XPTR] = (uintptr_t) p; - _gregs[REG_ITMP2_XPC] = (uintptr_t) xpc; -#if defined(__UCLIBC__) - _gregs[CTX_EPC] = (uintptr_t) asm_handle_exception; -#else - _mc->pc = (uintptr_t) asm_handle_exception; -#endif - } + trap_handle(type, val, pv, sp, ra, xpc, _p); } @@ -262,18 +223,8 @@ void md_signal_handler_sigill(int sig, siginfo_t* siginfo, void* _p) // Handle the trap. void* p = trap_handle(type, val, pv, sp, ra, xpc, _p); - // Set registers if we have an exception, continue execution - // otherwise. - if (p != NULL) { - _gregs[REG_ITMP1_XPTR] = (uintptr_t) p; - _gregs[REG_ITMP2_XPC] = (uintptr_t) xpc; -#if defined(__UCLIBC__) - _gregs[CTX_EPC] = (uintptr_t) asm_handle_exception; -#else - _mc->pc = (uintptr_t) asm_handle_exception; -#endif - } - else { + // Set registers + if (p == NULL) { // We set the PC again because the cause may have changed the // XPC. #if defined(__UCLIBC__) diff --git a/src/vm/jit/trap.cpp b/src/vm/jit/trap.cpp index 0e2ce164e..f43b1e7d0 100644 --- a/src/vm/jit/trap.cpp +++ b/src/vm/jit/trap.cpp @@ -119,7 +119,7 @@ void trap_handle(int sig, void *xpc, void *context) vm_abort("trap_handle: The program counter is NULL!"); #endif -#if defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__X86_64__) +#if defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__MIPS__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__X86_64__) # if !defined(NDEBUG) /* Perform a sanity check on our execution state functions. */ @@ -295,7 +295,7 @@ void trap_handle(int sig, void *xpc, void *context) stacktrace_stackframeinfo_remove(&sfi); -#if defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__X86_64__) +#if defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__MIPS__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__X86_64__) /* Update execution state and set registers. */ /* AFTER: removing stackframeinfo */ -- 2.25.1