< prev index next >

src/hotspot/share/jvmci/jvmciCodeInstaller.cpp

Print this page

1164         expressions->append(first);
1165       } else {
1166         MonitorValue *monitor = get_monitor_value(value, objects, JVMCI_CHECK);
1167         monitors->append(monitor);
1168       }
1169       if (second != NULL) {
1170         i++;
1171         if (i >= JVMCIENV->get_length(values) || !JVMCIENV->equals(JVMCIENV->get_object_at(values, i), jvmci_env()->get_Value_ILLEGAL())) {
1172           JVMCI_ERROR("double-slot value not followed by Value.ILLEGAL");
1173         }
1174       }
1175     }
1176 
1177     locals_token = _debug_recorder->create_scope_values(locals);
1178     expressions_token = _debug_recorder->create_scope_values(expressions);
1179     monitors_token = _debug_recorder->create_monitor_values(monitors);
1180 
1181     throw_exception = jvmci_env()->get_BytecodeFrame_rethrowException(frame) == JNI_TRUE;
1182   }
1183 
1184   _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, return_oop,
1185                                   locals_token, expressions_token, monitors_token);
1186 }
1187 
1188 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1189   JVMCIObject debug_info = jvmci_env()->get_site_Infopoint_debugInfo(site);
1190   if (debug_info.is_null()) {
1191     JVMCI_ERROR("debug info expected at safepoint at %i", pc_offset);
1192   }
1193 
1194   // address instruction = _instructions->start() + pc_offset;
1195   // jint next_pc_offset = Assembler::locate_next_instruction(instruction) - _instructions->start();
1196   OopMap *map = create_oop_map(debug_info, JVMCI_CHECK);
1197   _debug_recorder->add_safepoint(pc_offset, map);
1198   record_scope(pc_offset, debug_info, CodeInstaller::FullFrame, JVMCI_CHECK);
1199   _debug_recorder->end_safepoint(pc_offset);
1200 }
1201 
1202 void CodeInstaller::site_Infopoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1203   JVMCIObject debug_info = jvmci_env()->get_site_Infopoint_debugInfo(site);
1204   if (debug_info.is_null()) {

1320   }
1321 }
1322 
1323 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1324   JVMCIObject id_obj = jvmci_env()->get_site_Mark_id(site);
1325 
1326   if (id_obj.is_non_null()) {
1327     if (!jvmci_env()->is_boxing_object(T_INT, id_obj)) {
1328       JVMCI_ERROR("expected Integer id, got %s", jvmci_env()->klass_name(id_obj));
1329     }
1330     jint id = jvmci_env()->get_boxed_value(T_INT, id_obj).i;
1331 
1332     address pc = _instructions->start() + pc_offset;
1333 
1334     switch (id) {
1335       case UNVERIFIED_ENTRY:
1336         _offsets.set_value(CodeOffsets::Entry, pc_offset);
1337         break;
1338       case VERIFIED_ENTRY:
1339         _offsets.set_value(CodeOffsets::Verified_Entry, pc_offset);


1340         break;
1341       case OSR_ENTRY:
1342         _offsets.set_value(CodeOffsets::OSR_Entry, pc_offset);
1343         break;
1344       case EXCEPTION_HANDLER_ENTRY:
1345         _offsets.set_value(CodeOffsets::Exceptions, pc_offset);
1346         break;
1347       case DEOPT_HANDLER_ENTRY:
1348         _offsets.set_value(CodeOffsets::Deopt, pc_offset);
1349         break;
1350       case FRAME_COMPLETE:
1351         _offsets.set_value(CodeOffsets::Frame_Complete, pc_offset);
1352         break;
1353       case INVOKEVIRTUAL:
1354       case INVOKEINTERFACE:
1355       case INLINE_INVOKE:
1356       case INVOKESTATIC:
1357       case INVOKESPECIAL:
1358         _next_call_type = (MarkId) id;
1359         _invoke_mark_pc = pc;

1164         expressions->append(first);
1165       } else {
1166         MonitorValue *monitor = get_monitor_value(value, objects, JVMCI_CHECK);
1167         monitors->append(monitor);
1168       }
1169       if (second != NULL) {
1170         i++;
1171         if (i >= JVMCIENV->get_length(values) || !JVMCIENV->equals(JVMCIENV->get_object_at(values, i), jvmci_env()->get_Value_ILLEGAL())) {
1172           JVMCI_ERROR("double-slot value not followed by Value.ILLEGAL");
1173         }
1174       }
1175     }
1176 
1177     locals_token = _debug_recorder->create_scope_values(locals);
1178     expressions_token = _debug_recorder->create_scope_values(expressions);
1179     monitors_token = _debug_recorder->create_monitor_values(monitors);
1180 
1181     throw_exception = jvmci_env()->get_BytecodeFrame_rethrowException(frame) == JNI_TRUE;
1182   }
1183 
1184   _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, return_oop, false,
1185                                   locals_token, expressions_token, monitors_token);
1186 }
1187 
1188 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1189   JVMCIObject debug_info = jvmci_env()->get_site_Infopoint_debugInfo(site);
1190   if (debug_info.is_null()) {
1191     JVMCI_ERROR("debug info expected at safepoint at %i", pc_offset);
1192   }
1193 
1194   // address instruction = _instructions->start() + pc_offset;
1195   // jint next_pc_offset = Assembler::locate_next_instruction(instruction) - _instructions->start();
1196   OopMap *map = create_oop_map(debug_info, JVMCI_CHECK);
1197   _debug_recorder->add_safepoint(pc_offset, map);
1198   record_scope(pc_offset, debug_info, CodeInstaller::FullFrame, JVMCI_CHECK);
1199   _debug_recorder->end_safepoint(pc_offset);
1200 }
1201 
1202 void CodeInstaller::site_Infopoint(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1203   JVMCIObject debug_info = jvmci_env()->get_site_Infopoint_debugInfo(site);
1204   if (debug_info.is_null()) {

1320   }
1321 }
1322 
1323 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, JVMCIObject site, JVMCI_TRAPS) {
1324   JVMCIObject id_obj = jvmci_env()->get_site_Mark_id(site);
1325 
1326   if (id_obj.is_non_null()) {
1327     if (!jvmci_env()->is_boxing_object(T_INT, id_obj)) {
1328       JVMCI_ERROR("expected Integer id, got %s", jvmci_env()->klass_name(id_obj));
1329     }
1330     jint id = jvmci_env()->get_boxed_value(T_INT, id_obj).i;
1331 
1332     address pc = _instructions->start() + pc_offset;
1333 
1334     switch (id) {
1335       case UNVERIFIED_ENTRY:
1336         _offsets.set_value(CodeOffsets::Entry, pc_offset);
1337         break;
1338       case VERIFIED_ENTRY:
1339         _offsets.set_value(CodeOffsets::Verified_Entry, pc_offset);
1340         _offsets.set_value(CodeOffsets::Verified_Inline_Entry, pc_offset);
1341         _offsets.set_value(CodeOffsets::Verified_Inline_Entry_RO, pc_offset);
1342         break;
1343       case OSR_ENTRY:
1344         _offsets.set_value(CodeOffsets::OSR_Entry, pc_offset);
1345         break;
1346       case EXCEPTION_HANDLER_ENTRY:
1347         _offsets.set_value(CodeOffsets::Exceptions, pc_offset);
1348         break;
1349       case DEOPT_HANDLER_ENTRY:
1350         _offsets.set_value(CodeOffsets::Deopt, pc_offset);
1351         break;
1352       case FRAME_COMPLETE:
1353         _offsets.set_value(CodeOffsets::Frame_Complete, pc_offset);
1354         break;
1355       case INVOKEVIRTUAL:
1356       case INVOKEINTERFACE:
1357       case INLINE_INVOKE:
1358       case INVOKESTATIC:
1359       case INVOKESPECIAL:
1360         _next_call_type = (MarkId) id;
1361         _invoke_mark_pc = pc;
< prev index next >