diff --git a/src/hotspot/share/asm/codeBuffer.cpp b/src/hotspot/share/asm/codeBuffer.cpp index ca25cf56be085..3d2d97d1e45c6 100644 --- a/src/hotspot/share/asm/codeBuffer.cpp +++ b/src/hotspot/share/asm/codeBuffer.cpp @@ -1099,7 +1099,8 @@ CHeapString::~CHeapString() { // offset is a byte offset into an instruction stream (CodeBuffer, CodeBlob or // other memory buffer) and remark is a string (comment). // -AsmRemarks::AsmRemarks() : _remarks(new AsmRemarkCollection()) { +AsmRemarks::AsmRemarks() { + init(); assert(_remarks != nullptr, "Allocation failure!"); } @@ -1107,6 +1108,10 @@ AsmRemarks::~AsmRemarks() { assert(_remarks == nullptr, "Must 'clear()' before deleting!"); } +void AsmRemarks::init() { + _remarks = new AsmRemarkCollection(); +} + const char* AsmRemarks::insert(uint offset, const char* remstr) { precond(remstr != nullptr); return _remarks->insert(offset, remstr); @@ -1151,7 +1156,8 @@ uint AsmRemarks::print(uint offset, outputStream* strm) const { // Acting as interface to reference counted collection of (debug) strings used // in the code generated, and thus requiring a fixed address. // -DbgStrings::DbgStrings() : _strings(new DbgStringCollection()) { +DbgStrings::DbgStrings() { + init(); assert(_strings != nullptr, "Allocation failure!"); } @@ -1159,6 +1165,10 @@ DbgStrings::~DbgStrings() { assert(_strings == nullptr, "Must 'clear()' before deleting!"); } +void DbgStrings::init() { + _strings = new DbgStringCollection(); +} + const char* DbgStrings::insert(const char* dbgstr) { const char* str = _strings->lookup(dbgstr); return str != nullptr ? str : _strings->insert(dbgstr); diff --git a/src/hotspot/share/asm/codeBuffer.hpp b/src/hotspot/share/asm/codeBuffer.hpp index e6dac484649e6..96e9a77a92372 100644 --- a/src/hotspot/share/asm/codeBuffer.hpp +++ b/src/hotspot/share/asm/codeBuffer.hpp @@ -426,6 +426,8 @@ class AsmRemarks { AsmRemarks(); ~AsmRemarks(); + void init(); + const char* insert(uint offset, const char* remstr); bool is_empty() const; @@ -452,6 +454,8 @@ class DbgStrings { DbgStrings(); ~DbgStrings(); + void init(); + const char* insert(const char* dbgstr); bool is_empty() const; diff --git a/src/hotspot/share/code/aotCodeCache.cpp b/src/hotspot/share/code/aotCodeCache.cpp index 674d71d1bfc84..6d8faa10a38bc 100644 --- a/src/hotspot/share/code/aotCodeCache.cpp +++ b/src/hotspot/share/code/aotCodeCache.cpp @@ -915,26 +915,22 @@ CodeBlob* AOTCodeReader::compile_code_blob(const char* name, int entry_offset_co oop_maps = read_oop_map_set(); } -#ifndef PRODUCT - AsmRemarks asm_remarks; - read_asm_remarks(asm_remarks); - DbgStrings dbg_strings; - read_dbg_strings(dbg_strings); -#endif // PRODUCT - CodeBlob* code_blob = CodeBlob::create(archived_blob, stored_name, reloc_data, oop_maps -#ifndef PRODUCT - , asm_remarks - , dbg_strings -#endif ); if (code_blob == nullptr) { // no space left in CodeCache return nullptr; } +#ifndef PRODUCT + code_blob->asm_remarks().init(); + read_asm_remarks(code_blob->asm_remarks()); + code_blob->dbg_strings().init(); + read_dbg_strings(code_blob->dbg_strings()); +#endif // PRODUCT + fix_relocations(code_blob); // Read entries offsets diff --git a/src/hotspot/share/code/codeBlob.cpp b/src/hotspot/share/code/codeBlob.cpp index 185b6c06598d7..5bb37c198d038 100644 --- a/src/hotspot/share/code/codeBlob.cpp +++ b/src/hotspot/share/code/codeBlob.cpp @@ -281,10 +281,6 @@ CodeBlob* CodeBlob::create(CodeBlob* archived_blob, const char* name, address archived_reloc_data, ImmutableOopMapSet* archived_oop_maps -#ifndef PRODUCT - , AsmRemarks& archived_asm_remarks - , DbgStrings& archived_dbg_strings -#endif // PRODUCT ) { ThreadInVMfromUnknown __tiv; // get to VM state in case we block on CodeCache_lock @@ -303,13 +299,6 @@ CodeBlob* CodeBlob::create(CodeBlob* archived_blob, archived_oop_maps); assert(blob != nullptr, "sanity check"); -#ifndef PRODUCT - blob->use_remarks(archived_asm_remarks); - archived_asm_remarks.clear(); - blob->use_strings(archived_dbg_strings); - archived_dbg_strings.clear(); -#endif // PRODUCT - // Flush the code block ICache::invalidate_range(blob->code_begin(), blob->code_size()); CodeCache::commit(blob); // Count adapters diff --git a/src/hotspot/share/code/codeBlob.hpp b/src/hotspot/share/code/codeBlob.hpp index f813752e01e8a..f1920a829fc85 100644 --- a/src/hotspot/share/code/codeBlob.hpp +++ b/src/hotspot/share/code/codeBlob.hpp @@ -318,12 +318,7 @@ class CodeBlob { static CodeBlob* create(CodeBlob* archived_blob, const char* name, address archived_reloc_data, - ImmutableOopMapSet* archived_oop_maps -#ifndef PRODUCT - , AsmRemarks& archived_asm_remarks - , DbgStrings& archived_dbg_strings -#endif // PRODUCT - ); + ImmutableOopMapSet* archived_oop_maps); }; //----------------------------------------------------------------------------------------------------