diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index e3bd3131b45..00f884c67e8 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -1323,8 +1323,9 @@ nmethod::nmethod( _unwind_handler_offset = 0; CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize)); - int metadata_size = align_up(code_buffer->total_metadata_size(), wordSize); - JVMCI_ONLY( _jvmci_data_size = 0; ) + uint16_t metadata_size; + CHECKED_CAST(metadata_size, uint16_t, align_up(code_buffer->total_metadata_size(), wordSize)); + JVMCI_ONLY( _metadata_size = metadata_size; ) assert(_mutable_data_size == _relocation_size + metadata_size, "wrong mutable data size: %d != %d + %d", _mutable_data_size, _relocation_size, metadata_size); @@ -1497,9 +1498,10 @@ nmethod::nmethod( } CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize)); - uint16_t metadata_size = (uint16_t)align_up(code_buffer->total_metadata_size(), wordSize); - JVMCI_ONLY(CHECKED_CAST(_jvmci_data_size, uint16_t, align_up(compiler->is_jvmci() ? jvmci_data->size() : 0, oopSize))); - int jvmci_data_size = 0 JVMCI_ONLY(+ _jvmci_data_size); + uint16_t metadata_size; + CHECKED_CAST(metadata_size, uint16_t, align_up(code_buffer->total_metadata_size(), wordSize)); + JVMCI_ONLY( _metadata_size = metadata_size; ) + int jvmci_data_size = 0 JVMCI_ONLY( + align_up(compiler->is_jvmci() ? jvmci_data->size() : 0, oopSize)); assert(_mutable_data_size == _relocation_size + metadata_size + jvmci_data_size, "wrong mutable data size: %d != %d + %d + %d", _mutable_data_size, _relocation_size, metadata_size, jvmci_data_size); diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index 1c536a5d7e1..2ce6e5cd361 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -237,7 +237,9 @@ class nmethod : public CodeBlob { uint16_t _oops_size; #if INCLUDE_JVMCI - uint16_t _jvmci_data_size; + // _metadata_size is not specific to JVMCI. In the non-JVMCI case, it can be derived as: + // _metadata_size = mutable_data_size - relocation_size + uint16_t _metadata_size; #endif // Offset in immutable data section @@ -537,8 +539,8 @@ public: // mutable data Metadata** metadata_begin () const { return (Metadata**) (mutable_data_begin() + _relocation_size); } #if INCLUDE_JVMCI - Metadata** metadata_end () const { return (Metadata**) (mutable_data_end() - _jvmci_data_size); } - address jvmci_data_begin () const { return mutable_data_end() - _jvmci_data_size; } + Metadata** metadata_end () const { return (Metadata**) (mutable_data_begin() + _relocation_size + _metadata_size); } + address jvmci_data_begin () const { return mutable_data_begin() + _relocation_size + _metadata_size; } address jvmci_data_end () const { return mutable_data_end(); } #else Metadata** metadata_end () const { return (Metadata**) mutable_data_end(); }