hotspot/src/share/vm/code/nmethod.cpp
changeset 46620 750c6edff33b
parent 46560 388aa8d67c80
child 46625 edefffab74e2
equal deleted inserted replaced
46619:a3919f5e8d2b 46620:750c6edff33b
   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