RFR: AArch64: 8203699 java/lang/invoke/SpecialInterfaceCall fails with SIGILL on aarch64

Andrew Dinn adinn at redhat.com
Wed May 23 16:54:03 UTC 2018


Patch:
The patch below against the latest jdk dev tree fixes an AArch64-only
problem that currently only manifests in debug builds, specifically for
jdk test java/lang/invoke/SpecialInterfaceCall. It corrects a
long-standing error in the (generated) subclass check slow path code
where a super presented in a register other than r0 fails to get copied
into r0 after pushing the current value.

n.b. the slight difference to x86 code is because of the need to collect
registers for pushing to stack as pairs (the AArch64 stack must remain
16-byte aligned so an auxiliary slot storing zr may be pushed and
popped). The need to cater for that requirement probably accounts for
why the register-register copy got overlooked (despite it being pointed
out as necessary in the immediately preceding comment :-).

JIRA:     http://bugs.openjdk.java.net/browse/JDK-8203699

webrev:   http://cr.openjdk.java.net/~adinn/8203699/webrev.00/

Reviews would be welcome.

n.b.b. I am on holiday from noon tomorrow. So, if this does not get
reviewed in time to commit perhaps someone else from Red Hat could pick
it up and see it through review to commit (yes, Aleksey, I guess that
means you :-).

Testing:

Run test/java/lang/invoke/SpecialInterfaceCall before the patch and it
fails. Run it after the patch and it works.

This is an AArch64-only change so it cannot and need not be tested via
the submit repo.

regards,


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