< prev index next >

src/hotspot/share/code/nmethod.cpp

Print this page


 609     _consts_offset           = data_offset();
 610     _stub_offset             = data_offset();
 611     _oops_offset             = data_offset();
 612     _metadata_offset         = _oops_offset         + align_up(code_buffer->total_oop_size(), oopSize);
 613     scopes_data_offset       = _metadata_offset     + align_up(code_buffer->total_metadata_size(), wordSize);
 614     _scopes_pcs_offset       = scopes_data_offset;
 615     _dependencies_offset     = _scopes_pcs_offset;
 616     _handler_table_offset    = _dependencies_offset;
 617     _nul_chk_table_offset    = _handler_table_offset;
 618 #if INCLUDE_JVMCI
 619     _speculations_offset     = _nul_chk_table_offset;
 620     _jvmci_data_offset       = _speculations_offset;
 621     _nmethod_end_offset      = _jvmci_data_offset;
 622 #else
 623     _nmethod_end_offset      = _nul_chk_table_offset;
 624 #endif
 625     _compile_id              = compile_id;
 626     _comp_level              = CompLevel_none;
 627     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
 628     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);



 629     _verified_value_entry_point = _verified_entry_point;
 630     _verified_value_ro_entry_point = _verified_entry_point;

 631     _osr_entry_point         = NULL;
 632     _exception_cache         = NULL;
 633     _pc_desc_container.reset_to(NULL);
 634     _hotness_counter         = NMethodSweeper::hotness_counter_reset_val();
 635 
 636     _scopes_data_begin = (address) this + scopes_data_offset;
 637     _deopt_handler_begin = (address) this + deoptimize_offset;
 638     _deopt_mh_handler_begin = (address) this + deoptimize_mh_offset;
 639 
 640     code_buffer->copy_code_and_locs_to(this);
 641     code_buffer->copy_values_to(this);
 642 
 643     clear_unloading_state();
 644 
 645     Universe::heap()->register_nmethod(this);
 646     debug_only(Universe::heap()->verify_nmethod(this));
 647 
 648     CodeCache::commit(this);
 649   }
 650 


 769       _unwind_handler_offset = -1;
 770     }
 771 
 772     _oops_offset             = data_offset();
 773     _metadata_offset         = _oops_offset          + align_up(code_buffer->total_oop_size(), oopSize);
 774     int scopes_data_offset   = _metadata_offset      + align_up(code_buffer->total_metadata_size(), wordSize);
 775 
 776     _scopes_pcs_offset       = scopes_data_offset    + align_up(debug_info->data_size       (), oopSize);
 777     _dependencies_offset     = _scopes_pcs_offset    + adjust_pcs_size(debug_info->pcs_size());
 778     _handler_table_offset    = _dependencies_offset  + align_up((int)dependencies->size_in_bytes (), oopSize);
 779     _nul_chk_table_offset    = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize);
 780 #if INCLUDE_JVMCI
 781     _speculations_offset     = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize);
 782     _jvmci_data_offset       = _speculations_offset  + align_up(speculations_len, oopSize);
 783     _nmethod_end_offset      = _jvmci_data_offset    + align_up(jvmci_data_size, oopSize);
 784 #else
 785     _nmethod_end_offset      = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize);
 786 #endif
 787     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
 788     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);

 789     _verified_value_entry_point = code_begin()       + offsets->value(CodeOffsets::Verified_Value_Entry);
 790     _verified_value_ro_entry_point = code_begin()    + offsets->value(CodeOffsets::Verified_Value_Entry_RO);
 791     _osr_entry_point         = code_begin()          + offsets->value(CodeOffsets::OSR_Entry);
 792     _exception_cache         = NULL;
 793 
 794     _scopes_data_begin = (address) this + scopes_data_offset;
 795 
 796     _pc_desc_container.reset_to(scopes_pcs_begin());
 797 
 798     code_buffer->copy_code_and_locs_to(this);
 799     // Copy contents of ScopeDescRecorder to nmethod
 800     code_buffer->copy_values_to(this);
 801     debug_info->copy_to(this);
 802     dependencies->copy_to(this);
 803     clear_unloading_state();
 804 
 805     Universe::heap()->register_nmethod(this);
 806     debug_only(Universe::heap()->verify_nmethod(this));
 807 
 808     CodeCache::commit(this);


2533                          p->return_oop(), p->return_vt());
2534   }
2535   return NULL;
2536 }
2537 
2538 void nmethod::print_nmethod_labels(outputStream* stream, address block_begin) const {
2539   address low = MIN4(entry_point(), verified_entry_point(), verified_value_entry_point(), verified_value_ro_entry_point());
2540   assert(low != 0, "sanity");
2541   if (block_begin == low) {
2542     // Print method arguments before the method entry
2543     methodHandle m = method();
2544     if (m.not_null()) {
2545       stream->print("  # ");
2546       m->print_value_on(stream);
2547       stream->cr();
2548     }
2549   }
2550 
2551   bool print_params = false;
2552   if (block_begin == entry_point())             stream->print_cr("[Entry Point]");

2553   if (block_begin == verified_entry_point())          { print_params = true; stream->print_cr("[Verified Entry Point]"); }
2554   if (block_begin == verified_value_entry_point())    { print_params = true; stream->print_cr("[Verified Value Entry Point]"); }
2555   if (block_begin == verified_value_ro_entry_point()) { print_params = true; stream->print_cr("[Verified Value Entry Point (RO)]"); }
2556   if (print_params) {
2557     print_entry_parameters(stream, block_begin);
2558   }
2559   if (JVMCI_ONLY(_exception_offset >= 0 &&) block_begin == exception_begin())         stream->print_cr("[Exception Handler]");
2560   if (block_begin == stub_begin())              stream->print_cr("[Stub Code]");
2561   if (JVMCI_ONLY(_deopt_handler_begin != NULL &&) block_begin == deopt_handler_begin())     stream->print_cr("[Deopt Handler Code]");
2562 
2563   if (has_method_handle_invokes())
2564     if (block_begin == deopt_mh_handler_begin())  stream->print_cr("[Deopt MH Handler Code]");
2565 
2566   if (block_begin == consts_begin() && consts_begin() != low) stream->print_cr("[Constants]");
2567 }
2568 
2569 void nmethod::print_entry_parameters(outputStream* stream, address block_begin) const {
2570   methodHandle m = method();
2571   if (m.is_null() || is_osr_method()) {
2572     return;




 609     _consts_offset           = data_offset();
 610     _stub_offset             = data_offset();
 611     _oops_offset             = data_offset();
 612     _metadata_offset         = _oops_offset         + align_up(code_buffer->total_oop_size(), oopSize);
 613     scopes_data_offset       = _metadata_offset     + align_up(code_buffer->total_metadata_size(), wordSize);
 614     _scopes_pcs_offset       = scopes_data_offset;
 615     _dependencies_offset     = _scopes_pcs_offset;
 616     _handler_table_offset    = _dependencies_offset;
 617     _nul_chk_table_offset    = _handler_table_offset;
 618 #if INCLUDE_JVMCI
 619     _speculations_offset     = _nul_chk_table_offset;
 620     _jvmci_data_offset       = _speculations_offset;
 621     _nmethod_end_offset      = _jvmci_data_offset;
 622 #else
 623     _nmethod_end_offset      = _nul_chk_table_offset;
 624 #endif
 625     _compile_id              = compile_id;
 626     _comp_level              = CompLevel_none;
 627     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
 628     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);
 629 
 630     assert(!method->has_scalarized_args(), "scalarized native wrappers not supported yet"); // for the next 3 fields
 631     _value_entry_point       = _entry_point;
 632     _verified_value_entry_point = _verified_entry_point;
 633     _verified_value_ro_entry_point = _verified_entry_point;
 634 
 635     _osr_entry_point         = NULL;
 636     _exception_cache         = NULL;
 637     _pc_desc_container.reset_to(NULL);
 638     _hotness_counter         = NMethodSweeper::hotness_counter_reset_val();
 639 
 640     _scopes_data_begin = (address) this + scopes_data_offset;
 641     _deopt_handler_begin = (address) this + deoptimize_offset;
 642     _deopt_mh_handler_begin = (address) this + deoptimize_mh_offset;
 643 
 644     code_buffer->copy_code_and_locs_to(this);
 645     code_buffer->copy_values_to(this);
 646 
 647     clear_unloading_state();
 648 
 649     Universe::heap()->register_nmethod(this);
 650     debug_only(Universe::heap()->verify_nmethod(this));
 651 
 652     CodeCache::commit(this);
 653   }
 654 


 773       _unwind_handler_offset = -1;
 774     }
 775 
 776     _oops_offset             = data_offset();
 777     _metadata_offset         = _oops_offset          + align_up(code_buffer->total_oop_size(), oopSize);
 778     int scopes_data_offset   = _metadata_offset      + align_up(code_buffer->total_metadata_size(), wordSize);
 779 
 780     _scopes_pcs_offset       = scopes_data_offset    + align_up(debug_info->data_size       (), oopSize);
 781     _dependencies_offset     = _scopes_pcs_offset    + adjust_pcs_size(debug_info->pcs_size());
 782     _handler_table_offset    = _dependencies_offset  + align_up((int)dependencies->size_in_bytes (), oopSize);
 783     _nul_chk_table_offset    = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize);
 784 #if INCLUDE_JVMCI
 785     _speculations_offset     = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize);
 786     _jvmci_data_offset       = _speculations_offset  + align_up(speculations_len, oopSize);
 787     _nmethod_end_offset      = _jvmci_data_offset    + align_up(jvmci_data_size, oopSize);
 788 #else
 789     _nmethod_end_offset      = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize);
 790 #endif
 791     _entry_point             = code_begin()          + offsets->value(CodeOffsets::Entry);
 792     _verified_entry_point    = code_begin()          + offsets->value(CodeOffsets::Verified_Entry);
 793     _value_entry_point       = code_begin()          + offsets->value(CodeOffsets::Value_Entry);
 794     _verified_value_entry_point = code_begin()       + offsets->value(CodeOffsets::Verified_Value_Entry);
 795     _verified_value_ro_entry_point = code_begin()    + offsets->value(CodeOffsets::Verified_Value_Entry_RO);
 796     _osr_entry_point         = code_begin()          + offsets->value(CodeOffsets::OSR_Entry);
 797     _exception_cache         = NULL;
 798 
 799     _scopes_data_begin = (address) this + scopes_data_offset;
 800 
 801     _pc_desc_container.reset_to(scopes_pcs_begin());
 802 
 803     code_buffer->copy_code_and_locs_to(this);
 804     // Copy contents of ScopeDescRecorder to nmethod
 805     code_buffer->copy_values_to(this);
 806     debug_info->copy_to(this);
 807     dependencies->copy_to(this);
 808     clear_unloading_state();
 809 
 810     Universe::heap()->register_nmethod(this);
 811     debug_only(Universe::heap()->verify_nmethod(this));
 812 
 813     CodeCache::commit(this);


2538                          p->return_oop(), p->return_vt());
2539   }
2540   return NULL;
2541 }
2542 
2543 void nmethod::print_nmethod_labels(outputStream* stream, address block_begin) const {
2544   address low = MIN4(entry_point(), verified_entry_point(), verified_value_entry_point(), verified_value_ro_entry_point());
2545   assert(low != 0, "sanity");
2546   if (block_begin == low) {
2547     // Print method arguments before the method entry
2548     methodHandle m = method();
2549     if (m.not_null()) {
2550       stream->print("  # ");
2551       m->print_value_on(stream);
2552       stream->cr();
2553     }
2554   }
2555 
2556   bool print_params = false;
2557   if (block_begin == entry_point())             stream->print_cr("[Entry Point]");
2558   if (block_begin == value_entry_point())       stream->print_cr("[Value Entry Point]");
2559   if (block_begin == verified_entry_point())          { print_params = true; stream->print_cr("[Verified Entry Point]"); }
2560   if (block_begin == verified_value_entry_point())    { print_params = true; stream->print_cr("[Verified Value Entry Point]"); }
2561   if (block_begin == verified_value_ro_entry_point()) { print_params = true; stream->print_cr("[Verified Value Entry Point (RO)]"); }
2562   if (print_params) {
2563     print_entry_parameters(stream, block_begin);
2564   }
2565   if (JVMCI_ONLY(_exception_offset >= 0 &&) block_begin == exception_begin())         stream->print_cr("[Exception Handler]");
2566   if (block_begin == stub_begin())              stream->print_cr("[Stub Code]");
2567   if (JVMCI_ONLY(_deopt_handler_begin != NULL &&) block_begin == deopt_handler_begin())     stream->print_cr("[Deopt Handler Code]");
2568 
2569   if (has_method_handle_invokes())
2570     if (block_begin == deopt_mh_handler_begin())  stream->print_cr("[Deopt MH Handler Code]");
2571 
2572   if (block_begin == consts_begin() && consts_begin() != low) stream->print_cr("[Constants]");
2573 }
2574 
2575 void nmethod::print_entry_parameters(outputStream* stream, address block_begin) const {
2576   methodHandle m = method();
2577   if (m.is_null() || is_osr_method()) {
2578     return;


< prev index next >