Bug when walking entry frame...?

Tom Rodriguez Thomas.Rodriguez at Sun.COM
Wed Oct 17 09:40:51 PDT 2007


I think you're asking for the sender of the oldest frame which doesn't have a 
sender.  It only safe to call sender if !is_first_frame() which is basically 
what the assert is complaining about.  By the way it also may be not safe to 
call is_interpreted_frame_valid() on something that isn't an interpreter frame.

tom

Peter Helfer wrote:
> Hi all
> 
> I'm seeing this error.. I can make a workaround, but is this the 
> intended behavior ?
> 
> #>cd openjdk/control/build/linux-i586-debug/bin
> #>./java
> -------------------
> Frame ID:               b7db7c04
> Testers:
>  is_interpreted_frame():        true
>  is_java_frame():               true
>  is_entry_frame():              false
>  is_native_frame():             false
>  is_runtime_frame():            false
>  is_compiled_frame():           false
>  is_safepoint_blob_frame():     false
>  is_deoptimized():              false
>  is_first_frame():                      false
>  is_first_java_frame():         true
>  is_interpreted_frame_valid():  true
>  should_be_deoptimized():       false
>  can_be_deoptimized():          false
> frame size:             11
> sender frame:           b7db7c30
> real sender frame:      b7db7c30
> -------------------
> Frame ID:               b7db7c30
> Testers:
>  is_interpreted_frame():        false
>  is_java_frame():               false
>  is_entry_frame():              true
>  is_native_frame():             false
>  is_runtime_frame():            false
>  is_compiled_frame():           false
>  is_safepoint_blob_frame():     false
>  is_deoptimized():              false
>  is_first_frame():                      true
> # To suppress the following error report, specify this argument
> # after -XX: or in .hotspotrc:  SuppressErrorAt=/frame_i486.cpp:148
> #
> # An unexpected error has been detected by Java Runtime Environment:
> #
> #  Internal Error 
> (/home/phelfer/workspace/openjdk/hotspot/src/cpu/i486/vm/frame_i486.cpp:148), 
> pid=29739, tid=3084618640
> #  Error: assert(!entry_frame_is_first(),"next Java fp must be non zero")
> #
> 
> The code that leads to it:
> 
> print_custom(){
>  [...]
>  RegisterMap(thread, false); // happens as well with 'true'
>  tty->print_cr(" is_first_java_frame():\t\t%s", is_first_java_frame() ? 
> "true" : "false");
>  tty->print_cr(" is_interpreted_frame_valid():\t%s", 
> is_interpreted_frame_valid() ? "true" : "false");
>  tty->print_cr(" should_be_deoptimized():\t%s", should_be_deoptimized() 
> ? "true" : "false");
>  tty->print_cr(" can_be_deoptimized():\t\t%s", can_be_deoptimized() ? 
> "true" : "false");
>  tty->print_cr("frame size:\t\t%d", frame_size());
>  tty->print_cr("sender frame:\t\t%x", sender(&map).id());
>  tty->print_cr("real sender frame:\t%x", real_sender(&map).id());
> 
> }
> 
> frame frame::sender(RegisterMap* map) const {
>   // Default is we done have to follow them. The sender_for_xxx will
>   // update it accordingly
>   map->set_include_argument_oops(false);
> 
>   if (is_entry_frame())       return sender_for_entry_frame(map);
>   if (is_interpreted_frame()) return sender_for_interpreter_frame(map);
>   assert(_cb == CodeCache::find_blob(pc()),"Must be the same");
> 
>   if (_cb != NULL) {
>     return sender_for_compiled_frame(map);
>   }
>   // Must be native-compiled frame, i.e. the marshaling code for native
>   // methods that exists in the core system.
>   return frame(sender_sp(), link(), sender_pc());
> }
> 
> frame frame::sender_for_entry_frame(RegisterMap* map) const {
>   assert(map != NULL, "map must be set");
>   // Java frame called from C; skip all C frames and return top C
>   // frame of that chunk as the sender
>   JavaFrameAnchor* jfa = entry_frame_call_wrapper()->anchor();
>   assert(!entry_frame_is_first(), "next Java fp must be non zero");
>   assert(jfa->last_Java_sp() > _sp, "must be above this frame on stack");
>   map->clear();
>  
> 
> 
> Regards, Peter
> 
> 
> 
> 
> 
> 



More information about the hotspot-runtime-dev mailing list