Mercurial > hg > release > icedtea6-1.3
changeset 1013:a469b20018d9
2008-08-13 Gary Benson <gbenson@redhat.com>
* ports/hotspot/src/cpu/zero/vm/stackPrinter_zero.hpp
(print_word): Recognise non-header parts of Shark frames.
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Wed, 13 Aug 2008 15:46:18 +0100 |
parents | c7c621c16a15 |
children | 288bdc0696ff cd5c0ea5fe82 |
files | ChangeLog ports/hotspot/src/cpu/zero/vm/stackPrinter_zero.hpp |
diffstat | 2 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Wed Aug 13 08:53:38 2008 +0100 +++ b/ChangeLog Wed Aug 13 15:46:18 2008 +0100 @@ -1,3 +1,8 @@ +2008-08-13 Gary Benson <gbenson@redhat.com> + + * ports/hotspot/src/cpu/zero/vm/stackPrinter_zero.hpp + (print_word): Recognise non-header parts of Shark frames. + 2008-08-13 Gary Benson <gbenson@redhat.com> PR icedtea/184:
--- a/ports/hotspot/src/cpu/zero/vm/stackPrinter_zero.hpp Wed Aug 13 08:53:38 2008 +0100 +++ b/ports/hotspot/src/cpu/zero/vm/stackPrinter_zero.hpp Wed Aug 13 15:46:18 2008 +0100 @@ -195,6 +195,37 @@ if (method->is_oop()) value = method->name_and_sig_as_C_string(_buf, _buflen); } + else { + SharkFrame *sf = (SharkFrame *) frame; + intptr_t *monitor_base = + (intptr_t *) frame - SharkFrame::header_words + 1; + intptr_t *stack_base = + sf->unextended_sp() + sf->method()->max_stack(); + + if (addr >= stack_base && addr < monitor_base) { + int monitor_size = frame::interpreter_frame_monitor_size(); + int last_index = (monitor_base - stack_base) / monitor_size - 1; + int index = last_index - (addr - stack_base) / monitor_size; + intptr_t monitor = + (intptr_t) ((BasicObjectLock *) monitor_base - 1 - index); + intptr_t offset = (intptr_t) addr - monitor; + + if (offset == BasicObjectLock::obj_offset_in_bytes()) { + snprintf(_buf, _buflen, "monitor[%d]->_obj", index); + field = _buf; + } + else if (offset == BasicObjectLock::lock_offset_in_bytes()) { + snprintf(_buf, _buflen, "monitor[%d]->_lock", index); + field = _buf; + } + } + else { + snprintf(_buf, _buflen, "%s[%d]", + top_frame ? "stack_word" : "local", + stack_base - addr - 1); + field = _buf; + } + } } }