diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/cacao/files/cacao-arm-race.patch | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/cacao/files/cacao-arm-race.patch')
-rw-r--r-- | packages/cacao/files/cacao-arm-race.patch | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/packages/cacao/files/cacao-arm-race.patch b/packages/cacao/files/cacao-arm-race.patch deleted file mode 100644 index a4b730df18..0000000000 --- a/packages/cacao/files/cacao-arm-race.patch +++ /dev/null @@ -1,241 +0,0 @@ -Index: cacao-0.99.3/src/vm/jit/arm/linux/md-os.c -=================================================================== ---- cacao-0.99.3.orig/src/vm/jit/arm/linux/md-os.c 2008-07-07 13:36:19.000000000 +0200 -+++ cacao-0.99.3/src/vm/jit/arm/linux/md-os.c 2008-09-24 17:15:23.191805889 +0200 -@@ -2,6 +2,7 @@ - - Copyright (C) 1996-2005, 2006, 2007, 2008 - CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO -+ Copyright (C) 2008 Theobroma Systems Ltd. - - This file is part of CACAO. - -@@ -60,7 +61,7 @@ - #include "vm/jit/executionstate.h" - #include "vm/jit/stacktrace.h" - #include "vm/jit/trap.h" -- -+#include "vm/jit/patcher-common.h" - - /* md_signal_handler_sigsegv *************************************************** - -@@ -126,56 +127,52 @@ - - void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p) - { -- ucontext_t *_uc; -- scontext_t *_sc; -- u1 *pv; -- u1 *sp; -- u1 *ra; -- u1 *xpc; -- u4 mcode; -- int type; -- intptr_t val; -- void *p; -- -- _uc = (ucontext_t*) _p; -- _sc = &_uc->uc_mcontext; -- -- /* ATTENTION: glibc included messed up kernel headers we needed a -- workaround for the ucontext structure. */ -- -- pv = (u1 *) _sc->arm_ip; -- sp = (u1 *) _sc->arm_sp; -- ra = (u1 *) _sc->arm_lr; /* this is correct for leafs */ -- xpc = (u1 *) _sc->arm_pc; -- -- /* get exception-throwing instruction */ -- -- mcode = *((u4 *) xpc); -- -- /* check for undefined instruction we use */ -- -- if ((mcode & 0x0ff000f0) != 0x07f000f0) { -- log_println("md_signal_handler_sigill: unknown illegal instruction: inst=%x", mcode); --#if defined(ENABLE_DISASSEMBLER) -- DISASSINSTR(xpc); --#endif -- vm_abort("Aborting..."); -- } -- -- type = (mcode >> 8) & 0x0fff; -- val = *((s4 *) _sc + OFFSET(scontext_t, arm_r0)/4 + (mcode & 0x0f)); -- -- /* Handle the trap. */ -- -- p = trap_handle(type, val, pv, sp, ra, xpc, _p); -- -- /* set registers if we have an exception, continue execution -- otherwise (this is needed for patchers to work) */ -- -- if (p != NULL) { -- _sc->arm_r10 = (uintptr_t) p; -- _sc->arm_fp = (uintptr_t) xpc; -- _sc->arm_pc = (uintptr_t) asm_handle_exception; -+ int type; -+ intptr_t val; -+ void *p; -+ ucontext_t* _uc = (ucontext_t*) _p; -+ scontext_t* _sc = &_uc->uc_mcontext; -+ -+ /* ATTENTION: glibc included messed up kernel headers we needed a -+ workaround for the ucontext structure. */ -+ -+ void* pv = (void*) _sc->arm_ip; -+ void* sp = (void*) _sc->arm_sp; -+ void* ra = (void*) _sc->arm_lr; // The RA is correct for leaf methods. -+ void* xpc = (void*) _sc->arm_pc; -+ -+ // Get the exception-throwing instruction. -+ uint32_t mcode = *((uint32_t*) xpc); -+ -+ // Check if the trap instruction is valid. -+ // TODO Move this into patcher_handler. -+ if (patcher_is_valid_trap_instruction_at(xpc) == false) { -+ // Check if the PC has been patched during our way to this -+ // signal handler (see PR85). -+ // NOTE: ARM uses SIGILL for other traps too, but it's OK to -+ // do this check anyway because it will fail. -+ if (patcher_is_patched_at(xpc) == true) -+ return; -+ -+ // We have a problem... -+ log_println("md_signal_handler_sigill: Unknown illegal instruction 0x%x at 0x%x", mcode, xpc); -+ #if defined(ENABLE_DISASSEMBLER) -+ (void) disassinstr(xpc); -+ #endif -+ vm_abort("Aborting..."); -+ } -+ -+ type = (mcode >> 8) & 0x0fff; -+ val = *((int32_t*) _sc + OFFSET(scontext_t, arm_r0)/4 + (mcode & 0x0f)); -+ -+ // Handle the trap. -+ p = trap_handle(type, val, pv, sp, ra, xpc, _p); -+ -+ // Set registers if we have an exception, continue execution -+ // otherwise. -+ if (p != NULL) { -+ _sc->arm_r10 = (uintptr_t) p; -+ _sc->arm_fp = (uintptr_t) xpc; - } - } - -Index: cacao-0.99.3/src/vm/jit/arm/patcher.c -=================================================================== ---- cacao-0.99.3.orig/src/vm/jit/arm/patcher.c 2008-04-27 23:44:08.000000000 +0200 -+++ cacao-0.99.3/src/vm/jit/arm/patcher.c 2008-09-24 17:05:17.003795314 +0200 -@@ -2,6 +2,7 @@ - - Copyright (C) 1996-2005, 2006, 2007, 2008 - CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO -+ Copyright (C) 2008 Theobroma Systems Ltd. - - This file is part of CACAO. - -@@ -76,6 +77,25 @@ - PATCH_BACK_ORIGINAL_MCODE; - } - -+ -+/** -+ * Check if the trap instruction at the given PC is valid. -+ * -+ * @param pc Program counter. -+ * -+ * @return true if valid, false otherwise. -+ */ -+bool patcher_is_valid_trap_instruction_at(void* pc) -+{ -+ uint32_t mcode = *((uint32_t*) pc); -+ -+ // Check for the undefined instruction we use. -+ if ((mcode & 0x0ff000f0) != 0x07f000f0) { -+ return false; -+ } -+ -+ return true; -+} - - /* patcher_get_putstatic ******************************************************* - -Index: cacao-0.99.3/src/vm/jit/patcher-common.c -=================================================================== ---- cacao-0.99.3.orig/src/vm/jit/patcher-common.c 2008-04-28 21:52:41.000000000 +0200 -+++ cacao-0.99.3/src/vm/jit/patcher-common.c 2008-09-24 17:05:17.047796037 +0200 -@@ -2,6 +2,7 @@ - - Copyright (C) 2007, 2008 - CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO -+ Copyright (C) 2008 Theobroma Systems Ltd. - - This file is part of CACAO. - -@@ -254,6 +255,49 @@ - } - - -+/** -+ * Check if the patcher is already patched. This is done by comparing -+ * the machine instruction. -+ * -+ * @param pr Patcher structure. -+ * -+ * @return true if patched, false otherwise. -+ */ -+bool patcher_is_patched(patchref_t* pr) -+{ -+ // Validate the instruction at the patching position is the same -+ // instruction as the patcher structure contains. -+ uint32_t mcode = *((uint32_t*) pr->mpc); -+ -+ if (mcode != pr->mcode) { -+ // The code differs. -+ return false; -+ } -+ -+ return true; -+} -+ -+ -+/** -+ * -+ */ -+bool patcher_is_patched_at(void* pc) -+{ -+ codeinfo* code = code_find_codeinfo_for_pc(pc); -+ -+ // Get the patcher for the given PC. -+ patchref_t* pr = patcher_list_find(code, pc); -+ -+ if (pr == NULL) { -+ // The given PC is not a patcher position. -+ return false; -+ } -+ -+ // Validate the instruction. -+ return patcher_is_patched(pr); -+} -+ -+ - /* patcher_handler ************************************************************* - - Handles the request to patch JIT code at the given patching -Index: cacao-0.99.3/src/vm/jit/patcher-common.h -=================================================================== ---- cacao-0.99.3.orig/src/vm/jit/patcher-common.h 2008-04-27 23:44:08.000000000 +0200 -+++ cacao-0.99.3/src/vm/jit/patcher-common.h 2008-09-24 17:05:17.115800331 +0200 -@@ -73,6 +73,12 @@ - - void patcher_resolve(jitdata* jd); - -+bool patcher_is_patched(patchref_t* pr); -+bool patcher_is_patched_at(void* pc); -+ -+// MD function. -+bool patcher_is_valid_trap_instruction_at(void* pc); -+ - java_handle_t *patcher_handler(u1 *pc); - - |