RFR(S): 8028412 - AsyncGetCallTrace() is broken on x86 in JDK7u40

Markus Gronlund markus.gronlund at oracle.com
Wed Nov 27 01:47:09 PST 2013


Greetings,

 

Kindly asking for reviews for the following change:

 

Bug: https://bugs.openjdk.java.net/browse/JDK-8028412 

Webrev: http://cr.openjdk.java.net/~mgronlun/8028412/webrev01/ 

 

Description:

 

AsynchGetCallTrace() uses platform specific code for stack frame traversals.

 

On x86, there currently exist a defensive construct that practically disallows stack traversal over entry_frame code stubs, such as StubRoutine(1) frames:

 

src/cpu/x86/vm/frame_x86.cpp b/src/cpu/x86/vm/frame_x86.cpp:

 

bool frame::safe_for_sender(JavaThread* thread)  {

.

 

if (!Interpreter::contains(_pc) && _cb->frame_size() <= 0) {
  //assert(0, "Invalid frame_size");

 return false;
}

.

 

Since entry frames (such as StubRoutine(1)) have a frame size of 0, the code returns prematurely.

 

Fix is to move this frame size check post handling of is_entry_frame(),  where the code_stubs are processed.

 

Testing completed:

Sun Studio Profiler reproducer testcase

SpecJBB2005

Kitchensink

 

 

Thanks
Markus

 

 

 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20131127/0399508b/attachment.html 


More information about the hotspot-compiler-dev mailing list