366 |
366 |
367 // adjust pcs_size so that it is a multiple of both oopSize and |
367 // adjust pcs_size so that it is a multiple of both oopSize and |
368 // sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple |
368 // sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple |
369 // of oopSize, then 2*sizeof(PcDesc) is) |
369 // of oopSize, then 2*sizeof(PcDesc) is) |
370 static int adjust_pcs_size(int pcs_size) { |
370 static int adjust_pcs_size(int pcs_size) { |
371 int nsize = round_to(pcs_size, oopSize); |
371 int nsize = align_up(pcs_size, oopSize); |
372 if ((nsize % sizeof(PcDesc)) != 0) { |
372 if ((nsize % sizeof(PcDesc)) != 0) { |
373 nsize = pcs_size + sizeof(PcDesc); |
373 nsize = pcs_size + sizeof(PcDesc); |
374 } |
374 } |
375 assert((nsize % oopSize) == 0, "correct alignment"); |
375 assert((nsize % oopSize) == 0, "correct alignment"); |
376 return nsize; |
376 return nsize; |
485 nmethod* nm = NULL; |
485 nmethod* nm = NULL; |
486 { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
486 { MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
487 int nmethod_size = |
487 int nmethod_size = |
488 CodeBlob::allocation_size(code_buffer, sizeof(nmethod)) |
488 CodeBlob::allocation_size(code_buffer, sizeof(nmethod)) |
489 + adjust_pcs_size(debug_info->pcs_size()) |
489 + adjust_pcs_size(debug_info->pcs_size()) |
490 + round_to(dependencies->size_in_bytes() , oopSize) |
490 + align_up((int)dependencies->size_in_bytes(), oopSize) |
491 + round_to(handler_table->size_in_bytes(), oopSize) |
491 + align_up(handler_table->size_in_bytes() , oopSize) |
492 + round_to(nul_chk_table->size_in_bytes(), oopSize) |
492 + align_up(nul_chk_table->size_in_bytes() , oopSize) |
493 + round_to(debug_info->data_size() , oopSize); |
493 + align_up(debug_info->data_size() , oopSize); |
494 |
494 |
495 nm = new (nmethod_size, comp_level) |
495 nm = new (nmethod_size, comp_level) |
496 nmethod(method(), compiler->type(), nmethod_size, compile_id, entry_bci, offsets, |
496 nmethod(method(), compiler->type(), nmethod_size, compile_id, entry_bci, offsets, |
497 orig_pc_offset, debug_info, dependencies, code_buffer, frame_size, |
497 orig_pc_offset, debug_info, dependencies, code_buffer, frame_size, |
498 oop_maps, |
498 oop_maps, |
573 _orig_pc_offset = 0; |
573 _orig_pc_offset = 0; |
574 |
574 |
575 _consts_offset = data_offset(); |
575 _consts_offset = data_offset(); |
576 _stub_offset = data_offset(); |
576 _stub_offset = data_offset(); |
577 _oops_offset = data_offset(); |
577 _oops_offset = data_offset(); |
578 _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); |
578 _metadata_offset = _oops_offset + align_up(code_buffer->total_oop_size(), oopSize); |
579 scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); |
579 scopes_data_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); |
580 _scopes_pcs_offset = scopes_data_offset; |
580 _scopes_pcs_offset = scopes_data_offset; |
581 _dependencies_offset = _scopes_pcs_offset; |
581 _dependencies_offset = _scopes_pcs_offset; |
582 _handler_table_offset = _dependencies_offset; |
582 _handler_table_offset = _dependencies_offset; |
583 _nul_chk_table_offset = _handler_table_offset; |
583 _nul_chk_table_offset = _handler_table_offset; |
584 _nmethod_end_offset = _nul_chk_table_offset; |
584 _nmethod_end_offset = _nul_chk_table_offset; |
728 } else { |
728 } else { |
729 _unwind_handler_offset = -1; |
729 _unwind_handler_offset = -1; |
730 } |
730 } |
731 |
731 |
732 _oops_offset = data_offset(); |
732 _oops_offset = data_offset(); |
733 _metadata_offset = _oops_offset + round_to(code_buffer->total_oop_size(), oopSize); |
733 _metadata_offset = _oops_offset + align_up(code_buffer->total_oop_size(), oopSize); |
734 int scopes_data_offset = _metadata_offset + round_to(code_buffer->total_metadata_size(), wordSize); |
734 int scopes_data_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); |
735 |
735 |
736 _scopes_pcs_offset = scopes_data_offset + round_to(debug_info->data_size (), oopSize); |
736 _scopes_pcs_offset = scopes_data_offset + align_up(debug_info->data_size (), oopSize); |
737 _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); |
737 _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); |
738 _handler_table_offset = _dependencies_offset + round_to(dependencies->size_in_bytes (), oopSize); |
738 _handler_table_offset = _dependencies_offset + align_up((int)dependencies->size_in_bytes (), oopSize); |
739 _nul_chk_table_offset = _handler_table_offset + round_to(handler_table->size_in_bytes(), oopSize); |
739 _nul_chk_table_offset = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize); |
740 _nmethod_end_offset = _nul_chk_table_offset + round_to(nul_chk_table->size_in_bytes(), oopSize); |
740 _nmethod_end_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); |
741 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); |
741 _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); |
742 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); |
742 _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); |
743 _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); |
743 _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); |
744 _exception_cache = NULL; |
744 _exception_cache = NULL; |
745 |
745 |