RFR: 8041934 com/sun/jdi/RepStep.java fails on all platforms with assert(_cur_stack_depth == count_frames()) failed: cur_stack_depth out of sync

Staffan Larsen staffan.larsen at oracle.com
Fri May 9 10:47:23 UTC 2014


On 8 maj 2014, at 19:05, Daniel D. Daugherty <daniel.daugherty at oracle.com> wrote:

> > webrev: http://cr.openjdk.java.net/~sla/8041934/webrev.00/
> 
> src/share/vm/runtime/sharedRuntime.hpp
>    No comments.
> 
> src/share/vm/runtime/sharedRuntime.cpp
>    line 994: JRT_LEAF(int, SharedRuntime::jvmti_method_exit(
>        I'm not sure that JRT_LEAF is right. I would think that
>        JvmtiExport::post_method_exit() would have to grab one or
>        more locks with all the state checks it has to make...
> 
>        For reference, InterpreterRuntime::post_method_exit()
>        is a wrapper around JvmtiExport::post_method_exit()
>        and it is IRT_ENTRY instead of IRT_LEAF.

Good catch!

> 
> src/cpu/sparc/vm/sharedRuntime_sparc.cpp
>    No comments.
> 
> src/cpu/x86/vm/sharedRuntime_x86_32.cpp
>    No comments.
> 
> src/cpu/x86/vm/sharedRuntime_x86_64.cpp
>    No comments.
> 
> I'm guessing that PPC has the same issue, but I'm presuming
> that someone else (Vladimir?) will handle that…

Yes, I was hoping that I could file a follow-up bug for the platforms I didn’t know how to fix.

Updated review: http://cr.openjdk.java.net/~sla/8041934/webrev.01/

Thanks,
/Staffan

> 
> Dan
> 
> 
> On 5/8/14 12:06 AM, Staffan Larsen wrote:
>> All,
>> 
>> This is a fix for an assert in JVMTI that verifies that JVMTI’s internal notion of the number of frames on the stack is correct.
>> 
>> When running in -Xcomp mode and enable single-stepping (or method_entry/exit) we will revert all frames on the stack to be run by the interpreter. Only the interpreter can send single-step and method_entry/exit. However, if one of the frames is a native wrapper, that frame will not be reverted (presumably because we don't know how to do that). This will cause us to miss a method_exit event when that native frame is popped. This in turn will mess up the logic in JVMTI that keeps track of the number of frames currently on the stack (see JvmtiThreadState::_cur_stack_depth) and will trigger the assert.
>> 
>> The proposed solution is to include a method_exit event in the native wrapper frame if interpreted mode has been enabled. This needs updates to SharedRuntime::generate_native_wrapper() for all platforms.
>> 
>> Kudos to Rickard for helping me write the code.
>> 
>> webrev: http://cr.openjdk.java.net/~sla/8041934/webrev.00/
>> bug: https://bugs.openjdk.java.net/browse/JDK-8041934
>> 
>> The fix has been verified by running the failing test in JPRT with -Xcomp.
>> 
>> Thanks,
>> /Staffan
> 



More information about the hotspot-compiler-dev mailing list