[aarch64-port-dev ] RFR: 8209414: AArch64: method handle invocation does not respect JVMTI interp_only mode

Andrew Dinn adinn at redhat.com
Wed Dec 19 09:25:37 UTC 2018

Hi Nick,

On 19/12/2018 07:31, Nick Gasson (Arm Technology China) wrote:
> Hi,
> This is a small patch to fix failures of the following jtreg tests on 
> AArch64:
>    vmTestbase/vm/mlvm/indy/stress/jdi/breakpointInCompiledCode/Test.java
>    vmTestbase/vm/mlvm/meth/func/jdi/breakpoint/Test.java
> Webrev: http://cr.openjdk.java.net/~njian/8209414/webrev.0/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8209414
> In MethodHandles::jump_from_method_handle the test on the value of the 
> _interp_only_mode thread field is wrong: if this is non-zero we are 
> tracing or single stepping with JVMTI and should always branch to the 
> interpreted entry, to ensure the JVMTI method entry/exit hooks are 
> called. But in the AArch64 version we branch to the interpreted entry if 
> this value is *zero*, which is backwards. The result of this is 
> mismatched entry/exit callbacks when invoking a method through a 
> MethodHandle while tracing, which triggers an assertion failure in debug 
> builds and strange behaviour in release builds.
> The ldrb -> ldrw change isn't strictly necessary necessary, but I think 
> it's good for consistency to make the instructions identical to 
> InterpreterMacroAssembler::jump_from_interpreted, and as 
> _interp_only_mode is an int we don't have to worry about endianness, 
> etc. if we load a word.
Yes, nice catch and I agree about the use of ldrw over ldrb. Reviewed.


Andrew Dinn
Senior Principal Software Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander

More information about the hotspot-dev mailing list