Tue, 14 Jan 2014 09:44:45 +0100
8028764: dtrace/hotspot_jni/ALL/ALL001 crashes the vm on Solaris-amd64, SIGSEGV in MarkSweep::follow_stack()+0x8a
Summary: C1 generates code to encode compressed oop into tmp register before runtime call for patching where GC may happen
Reviewed-by: iveresov, twisti, kvn
Contributed-by: mgerdin <mikael.gerdin@oracle.com>
src/cpu/x86/vm/c1_LIRAssembler_x86.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Mon Jan 13 16:00:46 2014 -0800 1.2 +++ b/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Jan 14 09:44:45 2014 +0100 1.3 @@ -38,6 +38,7 @@ 1.4 #include "nativeInst_x86.hpp" 1.5 #include "oops/objArrayKlass.hpp" 1.6 #include "runtime/sharedRuntime.hpp" 1.7 +#include "vmreg_x86.inline.hpp" 1.8 1.9 1.10 // These masks are used to provide 128-bit aligned bitmasks to the XMM 1.11 @@ -1006,6 +1007,9 @@ 1.12 if (UseCompressedOops && !wide) { 1.13 __ movptr(compressed_src, src->as_register()); 1.14 __ encode_heap_oop(compressed_src); 1.15 + if (patch_code != lir_patch_none) { 1.16 + info->oop_map()->set_narrowoop(compressed_src->as_VMReg()); 1.17 + } 1.18 } 1.19 #endif 1.20 }