Hi Markus,

The fix looks Ok.

It'd be helpful if Oleg and the Solaris Studio guys could confirm this fix works fine for them.
I've added Oleg and Nik to the CC-list.
They might request a link to the Solaris or Linux binaries.

Thanks,
Serguei


On 11/27/13 1:47 AM, Markus Gronlund wrote:

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/ <http://cr.openjdk.java.net/%7Emgronlun/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


Reply via email to