United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6824463 deopt blob is testing wrong register on 64-bit x86
JDK-6824463 : deopt blob is testing wrong register on 64-bit x86

Details
Type:
Bug
Submit Date:
2009-03-31
Status:
Resolved
Updated Date:
2010-04-02
Project Name:
JDK
Resolved Date:
2009-04-08
Component:
hotspot
OS:
solaris_9
Sub-Component:
compiler
CPU:
x86
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs14
Fixed Versions:
hs15 (b05)

Related Reports
Backport:
Backport:
Backport:
Backport:
Relates:

Sub Tasks

Description
The change for 5108146 added a new test in the deopt blob for x86_64 for use the by 64-bit version of C1.  During the time that it was being developed and it's final push register usage in the deopt blob was changed so that now the deopt blob is testing the wrong register.

diff --git a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp                                       
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp                                                                                        
+++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp                                                                                        
@@ -2691,7 +2691,7 @@ void SharedRuntime::generate_deopt_blob(
   __ mov(rdi, rax);                                                                                                                 
                                                                                                                                     
    Label noException;                                                                                                               
-  __ cmpl(r12, Deoptimization::Unpack_exception);   // Was exception pending?                                                       
+  __ cmpl(r14, Deoptimization::Unpack_exception);   // Was exception pending?                                                       
   __ jcc(Assembler::notEqual, noException);                                                                                         
   __ movptr(rax, Address(r15_thread, JavaThread::exception_oop_offset()));                                                          
   // QQQ this is useless it was NULL above

So far for whatever reason r12 never contains the same value as Deoptimization::Unpack_exception when using C2 but it's a bug waiting to happen.

                                    

Comments
EVALUATION

It should be testing r14.
                                     
2009-03-31
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/69aefafe69c1
                                     
2009-04-01



Hardware and Software, Engineered to Work Together