On 11/27/13 2:32 AM, Markus Gronlund wrote:
Hi Sergei,
I have already worked with Nik on this issue and got his confirmation
on the fix.
Cool!
Thanks,
Serguei
Thanks
Markus
*From:*Serguei Spitsyn
*Sent:* den 27 november 2013 11:31
*To:* Markus Gronlund; [email protected];
[email protected]; serviceability-dev
*Cc:* Oleg Mazurov; Nikolay Molchanov
*Subject:* Re: RFR(S): 8028412 - AsyncGetCallTrace() is broken on x86
in JDK7u40
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