JDK-6859338 : amd64 native unverified entry point pushes values before implicit null check
Type:Bug
Component:hotspot
Sub-Component:compiler
Affected Version:hs16
Priority:P3
Status:Resolved
Resolution:Fixed
OS:solaris_9
CPU:sparc
Submitted:2009-07-10
Updated:2010-04-02
Resolved:2009-07-29
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.
This a version of the report for 6789226 which was found with 64-bit client. Server is exposed to the same problem but it's harder to trigger because of other optimizations.
EVALUATION
From the evaluation of 6789226:
The crash with javasoft.sqe.tests.api.java.awt.Image.ComponentSampleModel.ConstructorTest2 is a hotspot 64 bit x86 c1 bug.
A compiled method calls a native method that uses a compiled entry point. The call is an IC call. First thing on method entry: do the IC check. The code allocates a new tmp register with a push/pop sequence for this check. When the receiver is NULL the IC check acts as an implicit null check (triggers a SEGV that the runtime will catch and convert to a null pointer exception). But the tmp register allocation changes the stack layout and that's not expected by the runtime when it throws the exception.
Will report the failure to HS.
The fix is to use rscratch1 as a tmp instead.