RFR: 8181093 arm64 crash when relocating address

Bob Vandette bob.vandette at oracle.com
Thu Jun 1 15:12:33 UTC 2017


Please review this fix which avoids a crash when attempting to update the address
of a metadata_Relocation in the arm64 port.

http://cr.openjdk.java.net/~bobv/8181093/webrev

The problem is that the nativeInst NativeMovContReg logic does not handle the case
where NativeMovContReg::set_data is processing an optimized “or” instruction that
was generated by MacroAssembler::mov_metadata -> MacroAssembler::mov_slow_helper.

The crash trace shows that this occurred during metadata processing.

The fix avoids the updating of the address since the metadata pointers do not move and
the references are not PC relative.  Note that metadata_Relocation::pd_fix_value is
a noop on all other implementations.


Current CompileTask:
C1:   2052  303   !   3       java.lang.invoke.MemberName::getMethodType (202 bytes)

Stack: [0x0000007f7efa9000,0x0000007f7f0a9000],  sp=0x0000007f7f0a64e0,  free space=1013k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xff8838]  VMError::report_and_die(int, char const*, char const*, std::__va_list, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x140;;  VMError::report_and_die(int, char const*, char const*, std::__va_list, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x140
V  [libjvm.so+0xff9448]  VMError::report_and_die(Thread*, char const*, int, char const*, char const*, std::__va_list)+0x54;;  VMError::report_and_die(Thread*, char const*, int, char const*, char const*, std::__va_list)+0x54
V  [libjvm.so+0x6a62b0]  report_vm_error(char const*, int, char const*, char const*, ...)+0xe0;;  report_vm_error(char const*, int, char const*, char const*, ...)+0xe0
V  [libjvm.so+0xcdaa34]  NativeMovConstReg::set_data(long)+0x158;;  NativeMovConstReg::set_data(long)+0x158
V  [libjvm.so+0xe470ec]  Relocation::pd_set_data_value(unsigned char*, long, bool)+0x188;;  Relocation::pd_set_data_value(unsigned char*, long, bool)+0x188
V  [libjvm.so+0xe48768]  metadata_Relocation::pd_fix_value(unsigned char*)+0xe4;;  metadata_Relocation::pd_fix_value(unsigned char*)+0xe4
V  [libjvm.so+0xce337c]  nmethod::fix_oop_relocations(unsigned char*, unsigned char*, bool)+0xe0;;  nmethod::fix_oop_relocations(unsigned char*, unsigned char*, bool)+0xe0
V  [libjvm.so+0xceb014]  nmethod::copy_values(GrowableArray<_jobject*>*)+0x154;;  nmethod::copy_values(GrowableArray<_jobject*>*)+0x154
V  [libjvm.so+0xce1b44]  nmethod::nmethod(Method*, CompilerType, int, int, int, CodeOffsets*, int, DebugInformationRecorder*, Dependencies*, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, int)+0x3a0;;  nmethod::nmethod(Method*, CompilerType, int, int, int, CodeOffsets*, int, DebugInformationRecorder*, Dependencies*, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, int)+0x3a0
V  [libjvm.so+0xce245c]  nmethod::new_nmethod(methodHandle const&, int, int, CodeOffsets*, int, DebugInformationRecorder*, Dependencies*, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, int)+0x208;;  nmethod::new_nmethod(methodHandle const&, int, int, CodeOffsets*, int, DebugInformationRecorder*, Dependencies*, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, int)+0x208
V  [libjvm.so+0x4efae0]  ciEnv::register_method(ciMethod*, int, CodeOffsets*, int, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, bool, bool, RTMState)+0x330;;  ciEnv::register_method(ciMethod*, int, CodeOffsets*, int, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, bool, bool, RTMState)+0x330
V  [libjvm.so+0x3b319c]  Compilation::install_code(int)+0x128;;  Compilation::install_code(int)+0x128
V  [libjvm.so+0x3b5e50]  Compilation::compile_method()+0x280;;  Compilation::compile_method()+0x280
V  [libjvm.so+0x3b6054]  Compilation::Compilation(AbstractCompiler*, ciEnv*, ciMethod*, int, BufferBlob*, DirectiveSet*)+0x1b8;;  Compilation::Compilation(AbstractCompiler*, ciEnv*, ciMethod*, int, BufferBlob*, DirectiveSet*)+0x1b8
V  [libjvm.so+0x3b7814]  Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0x118;;  Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0x118
V  [libjvm.so+0x6324e4]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x354;;  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x354
V  [libjvm.so+0x632ea4]  CompileBroker::compiler_thread_loop()+0x2b8;;  CompileBroker::compiler_thread_loop()+0x2b8
V  [libjvm.so+0xf72964]  JavaThread::thread_main_inner()+0x1fc;;  JavaThread::thread_main_inner()+0x1fc
V  [libjvm.so+0xf72bb0]  JavaThread::run()+0x1c0;;  JavaThread::run()+0x1c0
V  [libjvm.so+0xd3ba64]  thread_native_entry(Thread*)+0x118;;  thread_native_entry(Thread*)+0x118
C  [libpthread.so.0+0x7e2c]  start_thread+0xb0
C  [libc.so.6+0xc8430]  clone+0x70

Bob.



More information about the hotspot-dev mailing list