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