< prev index next >

src/hotspot/share/jvmci/jvmciCodeInstaller.cpp

Print this page

1146       DebugToken* monitors_token = nullptr;
1147 
1148       if (full_info) {
1149         u1 frame_flags = stream->read_u1("flags");
1150         rethrow_exception = is_set(frame_flags, DIF_RETHROW_EXCEPTION);
1151 
1152         if (bci >= 0) {
1153           reexecute = !is_set(frame_flags, DIF_DURING_CALL);
1154         }
1155 
1156         GrowableArray<ScopeValue*>* locals = read_local_or_stack_values(stream, frame_flags, true, JVMCI_CHECK);
1157         GrowableArray<ScopeValue*>* stack = read_local_or_stack_values(stream, frame_flags, false, JVMCI_CHECK);
1158         GrowableArray<MonitorValue*>* monitors = read_monitor_values(stream, frame_flags, JVMCI_CHECK);
1159 
1160         locals_token = _debug_recorder->create_scope_values(locals);
1161         stack_token = _debug_recorder->create_scope_values(stack);
1162         monitors_token = _debug_recorder->create_monitor_values(monitors);
1163       }
1164 
1165       // has_ea_local_in_scope and arg_escape should be added to JVMCI

1166       const bool has_ea_local_in_scope = false;
1167       const bool arg_escape            = false;
1168       _debug_recorder->describe_scope(pc_offset, method, nullptr, bci, reexecute, rethrow_exception, is_mh_invoke, return_oop,
1169                                       has_ea_local_in_scope, arg_escape,
1170                                       locals_token, stack_token, monitors_token);
1171     }
1172   }
1173   if (full_info) {
1174     // Clear the virtual objects as they are specific to one DebugInfo
1175     stream->set_virtual_objects(nullptr);
1176   }
1177 }
1178 
1179 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, HotSpotCompiledCodeStream* stream, u1 tag, JVMCI_TRAPS) {
1180   u1 flags = stream->read_u1("debugInfo:flags");
1181   OopMap *map = create_oop_map(stream, flags, JVMCI_CHECK);
1182   _debug_recorder->add_safepoint(pc_offset, map);
1183   record_scope(pc_offset, stream, flags, true, JVMCI_CHECK);
1184   _debug_recorder->end_safepoint(pc_offset);
1185   if (_orig_pc_offset < 0) {
1186     JVMCI_ERROR("method contains safepoint, but has no deopt rescue slot");
1187   }
1188   if (tag == SITE_IMPLICIT_EXCEPTION_DISPATCH) {
1189     jint dispatch_offset = stream->read_s4("dispatchOffset");

1288         JVMCI_ERROR("data offset 0x%x points outside data section (size 0x%x)%s", data_offset, _constants_size, stream->context());
1289       }
1290       break;
1291     }
1292     default: {
1293       JVMCI_ERROR("unknown data patch tag: %d%s", tag, stream->context());
1294     }
1295   }
1296 }
1297 
1298 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, HotSpotCompiledCodeStream* stream, JVMCI_TRAPS) {
1299   u1 id = stream->read_u1("mark:id");
1300   address pc = _instructions->start() + pc_offset;
1301 
1302   switch (id) {
1303     case UNVERIFIED_ENTRY:
1304       _offsets.set_value(CodeOffsets::Entry, pc_offset);
1305       break;
1306     case VERIFIED_ENTRY:
1307       _offsets.set_value(CodeOffsets::Verified_Entry, pc_offset);


1308       break;
1309     case OSR_ENTRY:
1310       _offsets.set_value(CodeOffsets::OSR_Entry, pc_offset);
1311       break;
1312     case EXCEPTION_HANDLER_ENTRY:
1313       _offsets.set_value(CodeOffsets::Exceptions, pc_offset);
1314       break;
1315     case DEOPT_HANDLER_ENTRY:
1316       _offsets.set_value(CodeOffsets::Deopt, pc_offset);
1317       break;
1318     case DEOPT_MH_HANDLER_ENTRY:
1319       _offsets.set_value(CodeOffsets::DeoptMH, pc_offset);
1320       break;
1321     case FRAME_COMPLETE:
1322       _offsets.set_value(CodeOffsets::Frame_Complete, pc_offset);
1323       break;
1324     case ENTRY_BARRIER_PATCH:
1325       _nmethod_entry_patch_offset = pc_offset;
1326       break;
1327     case INVOKEVIRTUAL:

1146       DebugToken* monitors_token = nullptr;
1147 
1148       if (full_info) {
1149         u1 frame_flags = stream->read_u1("flags");
1150         rethrow_exception = is_set(frame_flags, DIF_RETHROW_EXCEPTION);
1151 
1152         if (bci >= 0) {
1153           reexecute = !is_set(frame_flags, DIF_DURING_CALL);
1154         }
1155 
1156         GrowableArray<ScopeValue*>* locals = read_local_or_stack_values(stream, frame_flags, true, JVMCI_CHECK);
1157         GrowableArray<ScopeValue*>* stack = read_local_or_stack_values(stream, frame_flags, false, JVMCI_CHECK);
1158         GrowableArray<MonitorValue*>* monitors = read_monitor_values(stream, frame_flags, JVMCI_CHECK);
1159 
1160         locals_token = _debug_recorder->create_scope_values(locals);
1161         stack_token = _debug_recorder->create_scope_values(stack);
1162         monitors_token = _debug_recorder->create_monitor_values(monitors);
1163       }
1164 
1165       // has_ea_local_in_scope and arg_escape should be added to JVMCI
1166       const bool return_scalarized     = false;
1167       const bool has_ea_local_in_scope = false;
1168       const bool arg_escape            = false;
1169       _debug_recorder->describe_scope(pc_offset, method, nullptr, bci, reexecute, rethrow_exception, is_mh_invoke, return_oop,
1170                                       return_scalarized, has_ea_local_in_scope, arg_escape,
1171                                       locals_token, stack_token, monitors_token);
1172     }
1173   }
1174   if (full_info) {
1175     // Clear the virtual objects as they are specific to one DebugInfo
1176     stream->set_virtual_objects(nullptr);
1177   }
1178 }
1179 
1180 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, HotSpotCompiledCodeStream* stream, u1 tag, JVMCI_TRAPS) {
1181   u1 flags = stream->read_u1("debugInfo:flags");
1182   OopMap *map = create_oop_map(stream, flags, JVMCI_CHECK);
1183   _debug_recorder->add_safepoint(pc_offset, map);
1184   record_scope(pc_offset, stream, flags, true, JVMCI_CHECK);
1185   _debug_recorder->end_safepoint(pc_offset);
1186   if (_orig_pc_offset < 0) {
1187     JVMCI_ERROR("method contains safepoint, but has no deopt rescue slot");
1188   }
1189   if (tag == SITE_IMPLICIT_EXCEPTION_DISPATCH) {
1190     jint dispatch_offset = stream->read_s4("dispatchOffset");

1289         JVMCI_ERROR("data offset 0x%x points outside data section (size 0x%x)%s", data_offset, _constants_size, stream->context());
1290       }
1291       break;
1292     }
1293     default: {
1294       JVMCI_ERROR("unknown data patch tag: %d%s", tag, stream->context());
1295     }
1296   }
1297 }
1298 
1299 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, HotSpotCompiledCodeStream* stream, JVMCI_TRAPS) {
1300   u1 id = stream->read_u1("mark:id");
1301   address pc = _instructions->start() + pc_offset;
1302 
1303   switch (id) {
1304     case UNVERIFIED_ENTRY:
1305       _offsets.set_value(CodeOffsets::Entry, pc_offset);
1306       break;
1307     case VERIFIED_ENTRY:
1308       _offsets.set_value(CodeOffsets::Verified_Entry, pc_offset);
1309       _offsets.set_value(CodeOffsets::Verified_Inline_Entry, pc_offset);
1310       _offsets.set_value(CodeOffsets::Verified_Inline_Entry_RO, pc_offset);
1311       break;
1312     case OSR_ENTRY:
1313       _offsets.set_value(CodeOffsets::OSR_Entry, pc_offset);
1314       break;
1315     case EXCEPTION_HANDLER_ENTRY:
1316       _offsets.set_value(CodeOffsets::Exceptions, pc_offset);
1317       break;
1318     case DEOPT_HANDLER_ENTRY:
1319       _offsets.set_value(CodeOffsets::Deopt, pc_offset);
1320       break;
1321     case DEOPT_MH_HANDLER_ENTRY:
1322       _offsets.set_value(CodeOffsets::DeoptMH, pc_offset);
1323       break;
1324     case FRAME_COMPLETE:
1325       _offsets.set_value(CodeOffsets::Frame_Complete, pc_offset);
1326       break;
1327     case ENTRY_BARRIER_PATCH:
1328       _nmethod_entry_patch_offset = pc_offset;
1329       break;
1330     case INVOKEVIRTUAL:
< prev index next >