# HG changeset patch # User Thomas Wuerthinger # Date 1304691656 -7200 # Node ID 98fa88528319a5e3ece598e9341b76a9d4c38cf5 # Parent c9b17ac5c06bc07d181e20ac5b05a1637052659d Deopt on implicit null pointer exception. diff -r c9b17ac5c06b -r 98fa88528319 doc/design/graal_compiler.pdf Binary file doc/design/graal_compiler.pdf has changed diff -r c9b17ac5c06b -r 98fa88528319 src/cpu/x86/vm/sharedRuntime_x86_64.cpp --- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu May 05 17:03:43 2011 +0200 +++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Fri May 06 16:20:56 2011 +0200 @@ -2653,6 +2653,9 @@ // (tw) Start of C1X uncommon trap code. __ jmp(cont); + int jmp_uncommon_trap_offset = __ pc() - start; + __ pushptr(Address(r15_thread, in_bytes(JavaThread::ScratchA_offset()))); + int uncommon_trap_offset = __ pc() - start; // Warning: Duplicate code @@ -2877,6 +2880,7 @@ _deopt_blob = DeoptimizationBlob::create(&buffer, oop_maps, 0, exception_offset, reexecute_offset, frame_size_in_words); _deopt_blob->set_unpack_with_exception_in_tls_offset(exception_in_tls_offset); _deopt_blob->set_uncommon_trap_offset(uncommon_trap_offset); + _deopt_blob->set_jmp_uncommon_trap_offset(jmp_uncommon_trap_offset); } #ifdef COMPILER2 diff -r c9b17ac5c06b -r 98fa88528319 src/share/vm/code/codeBlob.hpp --- a/src/share/vm/code/codeBlob.hpp Thu May 05 17:03:43 2011 +0200 +++ b/src/share/vm/code/codeBlob.hpp Fri May 06 16:20:56 2011 +0200 @@ -354,6 +354,7 @@ // (tw) Offset when C1X calls uncommon_trap. int _uncommon_trap_offset; + int _jmp_uncommon_trap_offset; // Creation support @@ -418,6 +419,11 @@ assert(contains(code_begin() + _uncommon_trap_offset), "must be PC inside codeblob"); } address uncommon_trap() const { return code_begin() + _uncommon_trap_offset; } + void set_jmp_uncommon_trap_offset(int offset) { + _jmp_uncommon_trap_offset = offset; + assert(contains(code_begin() + _jmp_uncommon_trap_offset), "must be PC inside codeblob"); + } + address jmp_uncommon_trap() const { return code_begin() + _jmp_uncommon_trap_offset; } }; diff -r c9b17ac5c06b -r 98fa88528319 src/share/vm/runtime/sharedRuntime.cpp --- a/src/share/vm/runtime/sharedRuntime.cpp Thu May 05 17:03:43 2011 +0200 +++ b/src/share/vm/runtime/sharedRuntime.cpp Fri May 06 16:20:56 2011 +0200 @@ -699,7 +699,7 @@ address target_pc = NULL; if (TraceSignals) { - tty->print_cr("Searching for continuation for implicit exception at %d", pc); + tty->print_cr("Searching for continuation for implicit exception at %d!", pc); } if (Interpreter::contains(pc)) { @@ -780,7 +780,8 @@ if (TraceSignals) { tty->print_cr(err_msg("calling implicit call stub relative pc=%d method name = %s", pc - nm->entry_point(), nm->method()->name()->as_C_string())); } - target_pc = Runtime1::entry_for(Runtime1::c1x_global_implicit_null_id); + thread->_ScratchA = (intptr_t)pc; + target_pc = (SharedRuntime::deopt_blob()->jmp_uncommon_trap());//Runtime1::entry_for(Runtime1::c1x_global_implicit_null_id); } else { target_pc = nm->continuation_for_implicit_exception(pc); }