changeset 20816:6f8d03da5d08

[SPARC] Ignore SIGILL instruction when the trap is 0x10 (breakpoint op, used for GRAAL debugging)
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Wed, 08 Apr 2015 19:13:41 +0200
parents 17caeb034a63
children 874eac8b4d7f
files src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp	Wed Apr 08 19:08:09 2015 +0200
+++ b/src/os_cpu/solaris_sparc/vm/os_solaris_sparc.cpp	Wed Apr 08 19:13:41 2015 +0200
@@ -24,6 +24,7 @@
 
 // no precompiled headers
 #include "asm/macroAssembler.hpp"
+#include "macroAssembler_sparc.hpp"
 #include "classfile/classLoader.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "classfile/vmSymbols.hpp"
@@ -483,6 +484,15 @@
       }
 #endif  // COMPILER2
 
+#ifdef GRAAL
+      else if (sig == SIGILL && info->si_trapno == 0x100 + ST_RESERVED_FOR_USER_0) {
+	printf("SIGILL 0x%x 0x%x\n", info->si_trapno, ST_RESERVED_FOR_USER_0);
+	uc->uc_mcontext.gregs[REG_PC] = (greg_t)pc+4;
+	uc->uc_mcontext.gregs[REG_nPC] = (greg_t)npc + 4;
+	return true;
+      }
+#endif // GRAAL
+
       else if (sig == SIGSEGV && info->si_code > 0 && !MacroAssembler::needs_explicit_null_check((intptr_t)info->si_addr)) {
         // Determination of interpreter/vtable stub/compiled code null exception
         stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL);