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

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Nov 27 10:03:50 PST 2013


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
>


More information about the hotspot-runtime-dev mailing list