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;
|