Mercurial > hg > graal-jvmci-8
changeset 23984:7139570e01c0
8169938: [AOT] SIGSEGV at ~BufferBlob::vtable chunks
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 23 Jan 2017 12:12:16 -0800 |
parents | 78bb8eb7ab76 |
children | 05922ce51c5e |
files | src/share/vm/jvmci/jvmciCodeInstaller.cpp src/share/vm/jvmci/jvmciCodeInstaller.hpp |
diffstat | 2 files changed, 14 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/jvmci/jvmciCodeInstaller.cpp Fri Dec 30 04:10:18 2016 -0500 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.cpp Mon Jan 23 12:12:16 2017 -0800 @@ -834,7 +834,7 @@ return objects; } -void CodeInstaller::record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, TRAPS) { +void CodeInstaller::record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, bool return_oop, TRAPS) { Handle position = DebugInfo::bytecodePosition(debug_info); if (position.is_null()) { // Stubs do not record scope info, just oop maps @@ -847,10 +847,10 @@ } else { objectMapping = NULL; } - record_scope(pc_offset, position, scope_mode, objectMapping, CHECK); + record_scope(pc_offset, position, scope_mode, objectMapping, return_oop, CHECK); } -void CodeInstaller::record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, TRAPS) { +void CodeInstaller::record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, bool return_oop, TRAPS) { Handle frame; if (scope_mode == CodeInstaller::FullFrame) { if (!position->is_a(BytecodeFrame::klass())) { @@ -860,7 +860,7 @@ } Handle caller_frame = BytecodePosition::caller(position); if (caller_frame.not_null()) { - record_scope(pc_offset, caller_frame, scope_mode, objects, CHECK); + record_scope(pc_offset, caller_frame, scope_mode, objects, return_oop, CHECK); } Handle hotspot_method = BytecodePosition::method(position); @@ -950,7 +950,7 @@ throw_exception = BytecodeFrame::rethrowException(frame) == JNI_TRUE; } - _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, false, + _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, return_oop, locals_token, expressions_token, monitors_token); } @@ -1006,7 +1006,10 @@ if (debug_info.not_null()) { OopMap *map = create_oop_map(debug_info, CHECK); _debug_recorder->add_safepoint(next_pc_offset, map); - record_scope(next_pc_offset, debug_info, CodeInstaller::FullFrame, CHECK); + + bool return_oop = hotspot_method.not_null() && getMethodFromHotSpotMethod(hotspot_method())->is_returning_oop(); + + record_scope(next_pc_offset, debug_info, CodeInstaller::FullFrame, return_oop, CHECK); } if (foreign_call.not_null()) {
--- a/src/share/vm/jvmci/jvmciCodeInstaller.hpp Fri Dec 30 04:10:18 2016 -0500 +++ b/src/share/vm/jvmci/jvmciCodeInstaller.hpp Mon Jan 23 12:12:16 2017 -0800 @@ -162,8 +162,11 @@ FullFrame }; - void record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, TRAPS); - void record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, TRAPS); + void record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, bool return_oop, TRAPS); + void record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, TRAPS) { + record_scope(pc_offset, debug_info, scope_mode, false /* return_oop */, THREAD); + } + void record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, bool return_oop, TRAPS); void record_object_value(ObjectValue* sv, Handle value, GrowableArray<ScopeValue*>* objects, TRAPS); GrowableArray<ScopeValue*>* record_virtual_objects(Handle debug_info, TRAPS);