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>
--- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Mon Jan 13 16:16:25 2014 -0800
+++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Jan 14 09:44:45 2014 +0100
@@ -38,6 +38,7 @@
#include "nativeInst_x86.hpp"
#include "oops/objArrayKlass.hpp"
#include "runtime/sharedRuntime.hpp"
+#include "vmreg_x86.inline.hpp"
// These masks are used to provide 128-bit aligned bitmasks to the XMM
@@ -1006,6 +1007,9 @@
if (UseCompressedOops && !wide) {
__ movptr(compressed_src, src->as_register());
__ encode_heap_oop(compressed_src);
+ if (patch_code != lir_patch_none) {
+ info->oop_map()->set_narrowoop(compressed_src->as_VMReg());
+ }
}
#endif
}