JDK-8196136 : AArch64: Correct register use in patch for JDK-8195685
Type:Bug
Component:hotspot
Sub-Component:runtime
Affected Version:9.0.4,10
Priority:P1
Status:Closed
Resolution:Fixed
OS:linux
CPU:aarch64
Submitted:2018-01-25
Updated:2021-02-01
Resolved:2018-01-25
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
itable stubs must not use java argument registers as scratch registers
Comments
Thanks Vladimir I will now push to jdk10 and also jdkdev/jdk.
But not to jdkdev/hs :-)
25-01-2018
Fix request approved for JDK 10 by group lead.
25-01-2018
The patch for JDK-8195685 uses aarch64 register r0 as a scratch register in generated itable stubs. This causes a potentially fatal error in the rare, special case where the stub is used to invoke an interface with 7 arguments. The 7th argument register r_jarg7 is an alias for r0. The generated stub needs to use a free non java argument register e.g. r19.
25-01-2018
Fix Request:
Why?
Fixing this bug is critical because without it the AArch64 build can crash if Java code calls an interface method with 7 or more arguments via an itable stub. For example, this happens in one of the the maven plugins used to run jcstress tests.
What?
The fix tweaks the patch to JDK-8195685 to avoid argument register corruption
Risk?
The risk is low because it has been tested by successfully rerunning the maven build for jcstress correctly and also a variety of Java programs on Aarch64.
Reviewers?
It has been reviewed by Andrew Haley.
webrev (for jdk10 and jdkdev) is here:
http://cr.openjdk.java.net/~adinn/8196136/webrev.02