/* src/vm/jit/trap.cpp - hardware traps
- Copyright (C) 2008
+ Copyright (C) 2008, 2009
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
Copyright (C) 2009 Theobroma Systems Ltd.
*/
void trap_init(void)
{
-#if !(defined(__ARM__) && defined(__LINUX__))
- /* On arm-linux the first memory page can't be mmap'ed, as it
- contains the exception vectors. */
-
- int pagesize;
-
- /* mmap a memory page at address 0x0, so our hardware-exceptions
- work. */
+ TRACESUBSYSTEMINITIALIZATION("trap_init");
- pagesize = os::getpagesize();
+ /* If requested we mmap a memory page at address 0x0,
+ so our hardware-exceptions work. */
- (void) os::mmap_anonymous(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
-#endif
-
- TRACESUBSYSTEMINITIALIZATION("trap_init");
+ if (opt_AlwaysMmapFirstPage) {
+ int pagesize = os::getpagesize();
+ (void) os::mmap_anonymous(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED);
+ }
#if !defined(TRAP_INSTRUCTION_IS_LOAD)
# error TRAP_INSTRUCTION_IS_LOAD is not defined in your md-trap.h
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. */
// NOTE: Some archs use 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) {
- // XXX remove this debug output!
- log_println("trap_handle: Detected patcher race condition (PR85) at %p", xpc);
+ if (opt_PrintWarnings)
+ log_println("trap_handle: Detected patcher race condition (PR85) at %p", xpc);
return;
}
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 */
* c-basic-offset: 4
* tab-width: 4
* End:
+ * vim:noexpandtab:sw=4:ts=4:
*/