Bug when walking entry frame...?

Peter Helfer peter.helfer.java at gmail.com
Wed Oct 17 08:43:27 PDT 2007


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20071017/6c4c10a6/attachment.html 


More information about the hotspot-runtime-dev mailing list