Skip to content

Commit aea2837

Browse files
author
Boris Ulasevich
committed
8355896: Lossy narrowing cast of JVMCINMethodData::size
Reviewed-by: kvn, dnsimon
1 parent 606f201 commit aea2837

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/hotspot/share/code/nmethod.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,8 +1323,9 @@ nmethod::nmethod(
13231323
_unwind_handler_offset = 0;
13241324

13251325
CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize));
1326-
int metadata_size = align_up(code_buffer->total_metadata_size(), wordSize);
1327-
JVMCI_ONLY( _jvmci_data_size = 0; )
1326+
uint16_t metadata_size;
1327+
CHECKED_CAST(metadata_size, uint16_t, align_up(code_buffer->total_metadata_size(), wordSize));
1328+
JVMCI_ONLY( _metadata_size = metadata_size; )
13281329
assert(_mutable_data_size == _relocation_size + metadata_size,
13291330
"wrong mutable data size: %d != %d + %d",
13301331
_mutable_data_size, _relocation_size, metadata_size);
@@ -1497,9 +1498,10 @@ nmethod::nmethod(
14971498
}
14981499

14991500
CHECKED_CAST(_oops_size, uint16_t, align_up(code_buffer->total_oop_size(), oopSize));
1500-
uint16_t metadata_size = (uint16_t)align_up(code_buffer->total_metadata_size(), wordSize);
1501-
JVMCI_ONLY(CHECKED_CAST(_jvmci_data_size, uint16_t, align_up(compiler->is_jvmci() ? jvmci_data->size() : 0, oopSize)));
1502-
int jvmci_data_size = 0 JVMCI_ONLY(+ _jvmci_data_size);
1501+
uint16_t metadata_size;
1502+
CHECKED_CAST(metadata_size, uint16_t, align_up(code_buffer->total_metadata_size(), wordSize));
1503+
JVMCI_ONLY( _metadata_size = metadata_size; )
1504+
int jvmci_data_size = 0 JVMCI_ONLY( + align_up(compiler->is_jvmci() ? jvmci_data->size() : 0, oopSize));
15031505
assert(_mutable_data_size == _relocation_size + metadata_size + jvmci_data_size,
15041506
"wrong mutable data size: %d != %d + %d + %d",
15051507
_mutable_data_size, _relocation_size, metadata_size, jvmci_data_size);

src/hotspot/share/code/nmethod.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,9 @@ class nmethod : public CodeBlob {
237237

238238
uint16_t _oops_size;
239239
#if INCLUDE_JVMCI
240-
uint16_t _jvmci_data_size;
240+
// _metadata_size is not specific to JVMCI. In the non-JVMCI case, it can be derived as:
241+
// _metadata_size = mutable_data_size - relocation_size
242+
uint16_t _metadata_size;
241243
#endif
242244

243245
// Offset in immutable data section
@@ -537,8 +539,8 @@ class nmethod : public CodeBlob {
537539
// mutable data
538540
Metadata** metadata_begin () const { return (Metadata**) (mutable_data_begin() + _relocation_size); }
539541
#if INCLUDE_JVMCI
540-
Metadata** metadata_end () const { return (Metadata**) (mutable_data_end() - _jvmci_data_size); }
541-
address jvmci_data_begin () const { return mutable_data_end() - _jvmci_data_size; }
542+
Metadata** metadata_end () const { return (Metadata**) (mutable_data_begin() + _relocation_size + _metadata_size); }
543+
address jvmci_data_begin () const { return mutable_data_begin() + _relocation_size + _metadata_size; }
542544
address jvmci_data_end () const { return mutable_data_end(); }
543545
#else
544546
Metadata** metadata_end () const { return (Metadata**) mutable_data_end(); }

0 commit comments

Comments
 (0)