Mercurial > hg > truffle
changeset 14479:dcca80b5e7e7
8034867: Object references from expression stack are not visible as roots via jvmti FollowReferences and HeapDump
Summary: The heap walking is inconsistent without following references from expression stack, so need to fix it
Reviewed-by: coleenp, sspitsyn
Contributed-by: axel.siebenborn@sap.com
author | sspitsyn |
---|---|
date | Sun, 23 Feb 2014 22:36:19 -0800 |
parents | bb9356ec5967 |
children | 61ab121722b8 |
files | src/share/vm/prims/jvmtiTagMap.cpp src/share/vm/services/heapDumper.cpp |
diffstat | 2 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/prims/jvmtiTagMap.cpp Sun Feb 23 13:16:03 2014 -0500 +++ b/src/share/vm/prims/jvmtiTagMap.cpp Sun Feb 23 22:36:19 2014 -0800 @@ -3081,6 +3081,23 @@ } } } + + StackValueCollection* exprs = jvf->expressions(); + for (int index=0; index < exprs->size(); index++) { + if (exprs->at(index)->type() == T_OBJECT) { + oop o = exprs->obj_at(index)(); + if (o == NULL) { + continue; + } + + // stack reference + if (!CallbackInvoker::report_stack_ref_root(thread_tag, tid, depth, method, + bci, locals->size() + index, o)) { + return false; + } + } + } + } else { blk->set_context(thread_tag, tid, depth, method); if (is_top_frame) {
--- a/src/share/vm/services/heapDumper.cpp Sun Feb 23 13:16:03 2014 -0500 +++ b/src/share/vm/services/heapDumper.cpp Sun Feb 23 22:36:19 2014 -0800 @@ -1604,6 +1604,18 @@ } } } + StackValueCollection *exprs = jvf->expressions(); + for(int index = 0; index < exprs->size(); index++) { + if (exprs->at(index)->type() == T_OBJECT) { + oop o = exprs->obj_at(index)(); + if (o != NULL) { + writer()->write_u1(HPROF_GC_ROOT_JAVA_FRAME); + writer()->write_objectID(o); + writer()->write_u4(thread_serial_num); + writer()->write_u4((u4) (stack_depth + extra_frames)); + } + } + } } else { // native frame if (stack_depth == 0) {