[9] RFR(S): 8156659: assert(CodeCache::find_blob_unsafe(_pc) == _cb) failed: inconsistent

Nils Eliasson nils.eliasson at oracle.com
Mon Aug 15 15:28:00 UTC 2016


Hi,

After further investigation here is a new patch that needs your review. 
This code was suggested by Dean Long.

Background:
This bug (JDK-8156659) was caused by the fix (JDK-8150821) which fixed a 
bug introduced by "JEP 270: Reserved Stack Areas for Critical Sections".

JDK-8150821 changed the get_frame_at_stack_banging_point to create a 
fully initialized frame with both an SP and a FP. This frame constructor 
fetches the PC from the wrong stack position. The programs traps at the 
stack bang before the SAVE so the calling PC is still in O7. The frame 
tries to fetch the PC from I7 where it would have ended up after the SAVE.

The original code that was fixed works, but has two problems. It first 
creates a frame with the wrong PC (the PC of the stack bang, but the SP 
of the caller), then gets the parent frame and iterates from there. The 
top most frame will be ignored and not checked properly.

This patch uses the SP from the trap context and the contents of O7 for 
PC. That is the SP and the PC for the caller of the method that traps on 
the stack bang.

Testing:
Reproducer
Nightly on sparc (will be completed before push)

Bug: https://bugs.openjdk.java.net/browse/JDK-8156659
Webrev: http://cr.openjdk.java.net/~neliasso/8156659/webrev.04/

Regards,
Nils Eliasson







On 2016-06-17 14:26, Vladimir Ivanov wrote:
> Why aren't other platforms affected?
>
> hotspot/src/cpu/x86/vm/frame_x86.cpp:
>
> frame frame::sender(RegisterMap* map) const {
> ...
>   assert(_cb == CodeCache::find_blob(pc()),"Must be the same");
>
> Best regards,
> Vladimir Ivanov
>
> On 6/17/16 1:52 PM, Nils Eliasson wrote:
>> Hi,
>>
>> Please review,
>>
>> Summary:
>> Test is provoking stack overflow errors and is running with
>> deoptimzeALot. The recently added method
>> "look_for_reserved_stack_annotated_method(...)" will traverse the stack
>> and encounter an deoptimized frame that triggers
>> "assert(CodeCache::find_blob_unsafe(_pc) == _cb, "inconsistent");". It
>> fails on deoptimzed frames where the pc is patched and need to be
>> changed to use raw_pc() to work correctly.
>>
>> Testing:
>> Running hotspot_all
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8156659
>> Webrev: http://cr.openjdk.java.net/~neliasso/8156659/webrev.02/
>>
>> Regards,
>> Nils Eliasson



More information about the hotspot-compiler-dev mailing list