Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/frame.cpp @ 4137:04b9a2566eec
Merge with hsx23/hotspot.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sat, 17 Dec 2011 21:40:27 +0100 |
parents | b20d64f83668 |
children | 3dbcd1013cc8 eaa9557116a2 |
comparison
equal
deleted
inserted
replaced
3737:9dc19b7d89a3 | 4137:04b9a2566eec |
---|---|
1336 void frame::describe(FrameValues& values, int frame_no) { | 1336 void frame::describe(FrameValues& values, int frame_no) { |
1337 if (is_entry_frame() || is_compiled_frame() || is_interpreted_frame() || is_native_frame()) { | 1337 if (is_entry_frame() || is_compiled_frame() || is_interpreted_frame() || is_native_frame()) { |
1338 // Label values common to most frames | 1338 // Label values common to most frames |
1339 values.describe(-1, unextended_sp(), err_msg("unextended_sp for #%d", frame_no)); | 1339 values.describe(-1, unextended_sp(), err_msg("unextended_sp for #%d", frame_no)); |
1340 values.describe(-1, sp(), err_msg("sp for #%d", frame_no)); | 1340 values.describe(-1, sp(), err_msg("sp for #%d", frame_no)); |
1341 values.describe(-1, fp(), err_msg("fp for #%d", frame_no)); | 1341 if (is_compiled_frame()) { |
1342 values.describe(-1, sp() + _cb->frame_size(), err_msg("computed fp for #%d", frame_no)); | |
1343 } else { | |
1344 values.describe(-1, fp(), err_msg("fp for #%d", frame_no)); | |
1345 } | |
1342 } | 1346 } |
1343 if (is_interpreted_frame()) { | 1347 if (is_interpreted_frame()) { |
1344 methodOop m = interpreter_frame_method(); | 1348 methodOop m = interpreter_frame_method(); |
1345 int bci = interpreter_frame_bci(); | 1349 int bci = interpreter_frame_bci(); |
1346 | 1350 |
1448 } | 1452 } |
1449 assert(!error, "invalid layout"); | 1453 assert(!error, "invalid layout"); |
1450 } | 1454 } |
1451 | 1455 |
1452 | 1456 |
1453 void FrameValues::print() { | 1457 void FrameValues::print(JavaThread* thread) { |
1454 _values.sort(compare); | 1458 _values.sort(compare); |
1455 JavaThread* thread = JavaThread::current(); | |
1456 | 1459 |
1457 // Sometimes values like the fp can be invalid values if the | 1460 // Sometimes values like the fp can be invalid values if the |
1458 // register map wasn't updated during the walk. Trim out values | 1461 // register map wasn't updated during the walk. Trim out values |
1459 // that aren't actually in the stack of the thread. | 1462 // that aren't actually in the stack of the thread. |
1460 int min_index = 0; | 1463 int min_index = 0; |
1461 int max_index = _values.length() - 1; | 1464 int max_index = _values.length() - 1; |
1462 intptr_t* v0 = _values.at(min_index).location; | 1465 intptr_t* v0 = _values.at(min_index).location; |
1463 while (!thread->is_in_stack((address)v0)) { | |
1464 v0 = _values.at(++min_index).location; | |
1465 } | |
1466 intptr_t* v1 = _values.at(max_index).location; | 1466 intptr_t* v1 = _values.at(max_index).location; |
1467 while (!thread->is_in_stack((address)v1)) { | 1467 |
1468 v1 = _values.at(--max_index).location; | 1468 if (thread == Thread::current()) { |
1469 while (!thread->is_in_stack((address)v0)) { | |
1470 v0 = _values.at(++min_index).location; | |
1471 } | |
1472 while (!thread->is_in_stack((address)v1)) { | |
1473 v1 = _values.at(--max_index).location; | |
1474 } | |
1475 } else { | |
1476 while (!thread->on_local_stack((address)v0)) { | |
1477 v0 = _values.at(++min_index).location; | |
1478 } | |
1479 while (!thread->on_local_stack((address)v1)) { | |
1480 v1 = _values.at(--max_index).location; | |
1481 } | |
1469 } | 1482 } |
1470 intptr_t* min = MIN2(v0, v1); | 1483 intptr_t* min = MIN2(v0, v1); |
1471 intptr_t* max = MAX2(v0, v1); | 1484 intptr_t* max = MAX2(v0, v1); |
1472 intptr_t* cur = max; | 1485 intptr_t* cur = max; |
1473 intptr_t* last = NULL; | 1486 intptr_t* last = NULL; |