src/hotspot/share/jvmci/jvmciCodeInstaller.cpp
changeset 55293 d19dc5b10fbb
parent 55159 a38132298eda
child 58084 cddef3bde924
equal deleted inserted replaced
55292:f4b2d5b83ebf 55293:d19dc5b10fbb
   560   assert(_debug_recorder->pcs_length() >= 2, "must be at least 2");
   560   assert(_debug_recorder->pcs_length() >= 2, "must be at least 2");
   561 
   561 
   562   metadata.set_pc_desc(_debug_recorder->pcs(), _debug_recorder->pcs_length());
   562   metadata.set_pc_desc(_debug_recorder->pcs(), _debug_recorder->pcs_length());
   563   metadata.set_scopes(_debug_recorder->stream()->buffer(), _debug_recorder->data_size());
   563   metadata.set_scopes(_debug_recorder->stream()->buffer(), _debug_recorder->data_size());
   564   metadata.set_exception_table(&_exception_handler_table);
   564   metadata.set_exception_table(&_exception_handler_table);
       
   565   metadata.set_implicit_exception_table(&_implicit_exception_table);
   565 
   566 
   566   RelocBuffer* reloc_buffer = metadata.get_reloc_buffer();
   567   RelocBuffer* reloc_buffer = metadata.get_reloc_buffer();
   567 
   568 
   568   reloc_buffer->ensure_size(buffer.total_relocation_size());
   569   reloc_buffer->ensure_size(buffer.total_relocation_size());
   569   size_t size = (size_t) buffer.copy_relocations_to(reloc_buffer->begin(), (CodeBuffer::csize_t) reloc_buffer->size(), true);
   570   size_t size = (size_t) buffer.copy_relocations_to(reloc_buffer->begin(), (CodeBuffer::csize_t) reloc_buffer->size(), true);
   635     }
   636     }
   636 
   637 
   637     JVMCIObject mirror = installed_code;
   638     JVMCIObject mirror = installed_code;
   638     nmethod* nm = NULL;
   639     nmethod* nm = NULL;
   639     result = runtime()->register_method(jvmci_env(), method, nm, entry_bci, &_offsets, _orig_pc_offset, &buffer,
   640     result = runtime()->register_method(jvmci_env(), method, nm, entry_bci, &_offsets, _orig_pc_offset, &buffer,
   640                                         stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table,
   641                                         stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, &_implicit_exception_table,
   641                                         compiler, _debug_recorder, _dependencies, id,
   642                                         compiler, _debug_recorder, _dependencies, id,
   642                                         has_unsafe_access, _has_wide_vector, compiled_code, mirror,
   643                                         has_unsafe_access, _has_wide_vector, compiled_code, mirror,
   643                                         failed_speculations, speculations, speculations_len);
   644                                         failed_speculations, speculations, speculations_len);
   644     cb = nm->as_codeblob_or_null();
   645     cb = nm->as_codeblob_or_null();
   645     if (nm != NULL && compile_state == NULL) {
   646     if (nm != NULL && compile_state == NULL) {
   867           JVMCIENV->equals(reason, jvmci_env()->get_site_InfopointReason_IMPLICIT_EXCEPTION())) {
   868           JVMCIENV->equals(reason, jvmci_env()->get_site_InfopointReason_IMPLICIT_EXCEPTION())) {
   868         TRACE_jvmci_4("safepoint at %i", pc_offset);
   869         TRACE_jvmci_4("safepoint at %i", pc_offset);
   869         site_Safepoint(buffer, pc_offset, site, JVMCI_CHECK_OK);
   870         site_Safepoint(buffer, pc_offset, site, JVMCI_CHECK_OK);
   870         if (_orig_pc_offset < 0) {
   871         if (_orig_pc_offset < 0) {
   871           JVMCI_ERROR_OK("method contains safepoint, but has no deopt rescue slot");
   872           JVMCI_ERROR_OK("method contains safepoint, but has no deopt rescue slot");
       
   873         }
       
   874         if (JVMCIENV->equals(reason, jvmci_env()->get_site_InfopointReason_IMPLICIT_EXCEPTION())) {
       
   875           TRACE_jvmci_4("implicit exception at %i", pc_offset);
       
   876           _implicit_exception_table.add_deoptimize(pc_offset);
   872         }
   877         }
   873       } else {
   878       } else {
   874         TRACE_jvmci_4("infopoint at %i", pc_offset);
   879         TRACE_jvmci_4("infopoint at %i", pc_offset);
   875         site_Infopoint(buffer, pc_offset, site, JVMCI_CHECK_OK);
   880         site_Infopoint(buffer, pc_offset, site, JVMCI_CHECK_OK);
   876       }
   881       }