RFR: 8181093 arm64 crash when relocating address

Bob Vandette bob.vandette at oracle.com
Thu Jun 1 19:37:50 UTC 2017


Ooops.  I fixed the bug comment.

Bob.


> On Jun 1, 2017, at 3:35 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
> 
> On 6/1/17 12:12 PM, Bob Vandette wrote:
>>> On Jun 1, 2017, at 2:14 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
>>> 
>>> I agree that it should be fixed in JDK 9.
>>> Problem evaluation and fix seems reasonable to me.
>>> What performance regression you see? Fix is more critical than a small regression I think.
>> No regression since the generated code doesn’t even change.
>> A specJVM98 run shows no significant difference.
> 
> Typo in the bug report?:
> 
> "tested this fix using specJVM98 on release and fastdebug binaries and confirmed that there is are performance regressions."
> 
> Vladimir
> 
>> Bob.
>>> 
>>> Thanks,
>>> Vladimir
>>> 
>>> On 6/1/17 8:12 AM, Bob Vandette wrote:
>>>> 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