< prev index next >
src/share/vm/jvmci/jvmciCodeInstaller.cpp
Print this page
*** 965,975 ****
}
_debug_recorder->dump_object_pool(objects);
return objects;
}
! void CodeInstaller::record_scope(jint pc_offset, Handle debug_info, ScopeMode scope_mode, TRAPS) {
Handle position = DebugInfo::bytecodePosition(debug_info);
if (position.is_null()) {
// Stubs do not record scope info, just oop maps
return;
}
--- 965,975 ----
}
_debug_recorder->dump_object_pool(objects);
return objects;
}
! 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
return;
}
*** 978,1001 ****
if (scope_mode == CodeInstaller::FullFrame) {
objectMapping = record_virtual_objects(debug_info, CHECK);
} else {
objectMapping = NULL;
}
! record_scope(pc_offset, position, scope_mode, objectMapping, CHECK);
}
! void CodeInstaller::record_scope(jint pc_offset, Handle position, ScopeMode scope_mode, GrowableArray<ScopeValue*>* objects, TRAPS) {
Handle frame;
if (scope_mode == CodeInstaller::FullFrame) {
if (!position->is_a(BytecodeFrame::klass())) {
JVMCI_ERROR("Full frame expected for debug info at %i", pc_offset);
}
frame = position;
}
Handle caller_frame = BytecodePosition::caller(position);
if (caller_frame.not_null()) {
! record_scope(pc_offset, caller_frame, scope_mode, objects, CHECK);
}
Handle hotspot_method = BytecodePosition::method(position);
Method* method = getMethodFromHotSpotMethod(hotspot_method());
jint bci = BytecodePosition::bci(position);
--- 978,1001 ----
if (scope_mode == CodeInstaller::FullFrame) {
objectMapping = record_virtual_objects(debug_info, CHECK);
} else {
objectMapping = NULL;
}
! 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, bool return_oop, TRAPS) {
Handle frame;
if (scope_mode == CodeInstaller::FullFrame) {
if (!position->is_a(BytecodeFrame::klass())) {
JVMCI_ERROR("Full frame expected for debug info at %i", pc_offset);
}
frame = position;
}
Handle caller_frame = BytecodePosition::caller(position);
if (caller_frame.not_null()) {
! record_scope(pc_offset, caller_frame, scope_mode, objects, return_oop, CHECK);
}
Handle hotspot_method = BytecodePosition::method(position);
Method* method = getMethodFromHotSpotMethod(hotspot_method());
jint bci = BytecodePosition::bci(position);
*** 1081,1091 ****
monitors_token = _debug_recorder->create_monitor_values(monitors);
throw_exception = BytecodeFrame::rethrowException(frame) == JNI_TRUE;
}
! _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, false,
locals_token, expressions_token, monitors_token);
}
void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
Handle debug_info = site_Infopoint::debugInfo(site);
--- 1081,1091 ----
monitors_token = _debug_recorder->create_monitor_values(monitors);
throw_exception = BytecodeFrame::rethrowException(frame) == JNI_TRUE;
}
! _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, return_oop,
locals_token, expressions_token, monitors_token);
}
void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, Handle site, TRAPS) {
Handle debug_info = site_Infopoint::debugInfo(site);
*** 1137,1147 ****
jint next_pc_offset = CodeInstaller::pd_next_offset(inst, pc_offset, hotspot_method, CHECK);
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);
}
if (foreign_call.not_null()) {
jlong foreign_call_destination = HotSpotForeignCallTarget::address(foreign_call);
if (_immutable_pic_compilation) {
--- 1137,1150 ----
jint next_pc_offset = CodeInstaller::pd_next_offset(inst, pc_offset, hotspot_method, CHECK);
if (debug_info.not_null()) {
OopMap *map = create_oop_map(debug_info, CHECK);
_debug_recorder->add_safepoint(next_pc_offset, map);
!
! 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()) {
jlong foreign_call_destination = HotSpotForeignCallTarget::address(foreign_call);
if (_immutable_pic_compilation) {
< prev index next >