Hi, Markus
I think the bug report should link to 8005849 which introduced this
additional check and regression.
Is it possible to prepare a jtreg test which will use AsynchGetCallTrace
and catch such situations in a future?
The fix itself looks good.
Thanks,
Vladimir
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/
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