hotspot/src/share/vm/runtime/frame.cpp
changeset 11565 713a0398ca58
parent 11486 cdc636532368
child 11571 23f825a42a85
equal deleted inserted replaced
11564:72cf4575309b 11565:713a0398ca58
  1332   guarantee( current >= low_mark                               , "Current BasicObjectLock* below than low_mark");
  1332   guarantee( current >= low_mark                               , "Current BasicObjectLock* below than low_mark");
  1333 }
  1333 }
  1334 
  1334 
  1335 
  1335 
  1336 void frame::describe(FrameValues& values, int frame_no) {
  1336 void frame::describe(FrameValues& values, int frame_no) {
  1337   intptr_t* frame_pointer = real_fp();
  1337   // boundaries: sp and the 'real' frame pointer
       
  1338   values.describe(-1, sp(), err_msg("sp for #%d", frame_no), 1);
       
  1339   intptr_t* frame_pointer = real_fp(); // Note: may differ from fp()
       
  1340 
       
  1341   // print frame info at the highest boundary
       
  1342   intptr_t* info_address = MAX2(sp(), frame_pointer);
       
  1343 
       
  1344   if (info_address != frame_pointer) {
       
  1345     // print frame_pointer explicitly if not marked by the frame info
       
  1346     values.describe(-1, frame_pointer, err_msg("frame pointer for #%d", frame_no), 1);
       
  1347   }
       
  1348 
  1338   if (is_entry_frame() || is_compiled_frame() || is_interpreted_frame() || is_native_frame()) {
  1349   if (is_entry_frame() || is_compiled_frame() || is_interpreted_frame() || is_native_frame()) {
  1339     // Label values common to most frames
  1350     // Label values common to most frames
  1340     values.describe(-1, unextended_sp(), err_msg("unextended_sp for #%d", frame_no));
  1351     values.describe(-1, unextended_sp(), err_msg("unextended_sp for #%d", frame_no));
  1341     values.describe(-1, sp(), err_msg("sp for #%d", frame_no));
  1352   }
  1342     values.describe(-1, frame_pointer, err_msg("frame pointer for #%d", frame_no));
  1353 
  1343   }
       
  1344   if (is_interpreted_frame()) {
  1354   if (is_interpreted_frame()) {
  1345     methodOop m = interpreter_frame_method();
  1355     methodOop m = interpreter_frame_method();
  1346     int bci = interpreter_frame_bci();
  1356     int bci = interpreter_frame_bci();
  1347 
  1357 
  1348     // Label the method and current bci
  1358     // Label the method and current bci
  1349     values.describe(-1, MAX2(sp(), frame_pointer),
  1359     values.describe(-1, info_address,
  1350                     FormatBuffer<1024>("#%d method %s @ %d", frame_no, m->name_and_sig_as_C_string(), bci), 2);
  1360                     FormatBuffer<1024>("#%d method %s @ %d", frame_no, m->name_and_sig_as_C_string(), bci), 2);
  1351     values.describe(-1, MAX2(sp(), frame_pointer),
  1361     values.describe(-1, info_address,
  1352                     err_msg("- %d locals %d max stack", m->max_locals(), m->max_stack()), 1);
  1362                     err_msg("- %d locals %d max stack", m->max_locals(), m->max_stack()), 1);
  1353     if (m->max_locals() > 0) {
  1363     if (m->max_locals() > 0) {
  1354       intptr_t* l0 = interpreter_frame_local_at(0);
  1364       intptr_t* l0 = interpreter_frame_local_at(0);
  1355       intptr_t* ln = interpreter_frame_local_at(m->max_locals() - 1);
  1365       intptr_t* ln = interpreter_frame_local_at(m->max_locals() - 1);
  1356       values.describe(-1, MAX2(l0, ln), err_msg("locals for #%d", frame_no), 1);
  1366       values.describe(-1, MAX2(l0, ln), err_msg("locals for #%d", frame_no), 1);
  1378       values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_begin(), "monitors begin");
  1388       values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_begin(), "monitors begin");
  1379       values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_end(), "monitors end");
  1389       values.describe(frame_no, (intptr_t*)interpreter_frame_monitor_end(), "monitors end");
  1380     }
  1390     }
  1381   } else if (is_entry_frame()) {
  1391   } else if (is_entry_frame()) {
  1382     // For now just label the frame
  1392     // For now just label the frame
  1383     values.describe(-1, MAX2(sp(), frame_pointer), err_msg("#%d entry frame", frame_no), 2);
  1393     values.describe(-1, info_address, err_msg("#%d entry frame", frame_no), 2);
  1384   } else if (is_compiled_frame()) {
  1394   } else if (is_compiled_frame()) {
  1385     // For now just label the frame
  1395     // For now just label the frame
  1386     nmethod* nm = cb()->as_nmethod_or_null();
  1396     nmethod* nm = cb()->as_nmethod_or_null();
  1387     values.describe(-1, MAX2(sp(), frame_pointer),
  1397     values.describe(-1, info_address,
  1388                     FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for method %s%s", frame_no,
  1398                     FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for method %s%s", frame_no,
  1389                                        nm, nm->method()->name_and_sig_as_C_string(),
  1399                                        nm, nm->method()->name_and_sig_as_C_string(),
  1390                                        is_deoptimized_frame() ? " (deoptimized" : ""), 2);
  1400                                        (_deopt_state == is_deoptimized) ?
       
  1401                                        " (deoptimized)" :
       
  1402                                        ((_deopt_state == unknown) ? " (state unknown)" : "")),
       
  1403                     2);
  1391   } else if (is_native_frame()) {
  1404   } else if (is_native_frame()) {
  1392     // For now just label the frame
  1405     // For now just label the frame
  1393     nmethod* nm = cb()->as_nmethod_or_null();
  1406     nmethod* nm = cb()->as_nmethod_or_null();
  1394     values.describe(-1, MAX2(sp(), frame_pointer),
  1407     values.describe(-1, info_address,
  1395                     FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for native method %s", frame_no,
  1408                     FormatBuffer<1024>("#%d nmethod " INTPTR_FORMAT " for native method %s", frame_no,
  1396                                        nm, nm->method()->name_and_sig_as_C_string()), 2);
  1409                                        nm, nm->method()->name_and_sig_as_C_string()), 2);
  1397   }
  1410   } else if (is_ricochet_frame()) {
       
  1411       values.describe(-1, info_address, err_msg("#%d ricochet frame", frame_no), 2);
       
  1412   } else {
       
  1413     // provide default info if not handled before
       
  1414     char *info = (char *) "special frame";
       
  1415     if ((_cb != NULL) &&
       
  1416         (_cb->name() != NULL)) {
       
  1417       info = (char *)_cb->name();
       
  1418     }
       
  1419     values.describe(-1, info_address, err_msg("#%d <%s>", frame_no, info), 2);
       
  1420   }
       
  1421 
       
  1422   // platform dependent additional data
  1398   describe_pd(values, frame_no);
  1423   describe_pd(values, frame_no);
  1399 }
  1424 }
  1400 
  1425 
  1401 #endif
  1426 #endif
  1402 
  1427