< prev index next >

src/hotspot/share/asm/codeBuffer.hpp

Print this page
rev 54883 : 8213084: Rework and enhance Print[Opto]Assembly output
Reviewed-by:

*** 287,303 **** --- 287,305 ---- } const char* add_string(const char * string) PRODUCT_RETURN_(return NULL;); void add_comment(intptr_t offset, const char * comment) PRODUCT_RETURN; + bool has_block_comment(intptr_t offset) const; void print_block_comment(outputStream* stream, intptr_t offset) const PRODUCT_RETURN; // MOVE strings from other to this; invalidate other. void assign(CodeStrings& other) PRODUCT_RETURN; // COPY strings from other to this; leave other valid. void copy(CodeStrings& other) PRODUCT_RETURN; // FREE strings; invalidate this. void free() PRODUCT_RETURN; + // Guarantee that _strings are used at most once; assign and free invalidate a buffer. inline void check_valid() const { #ifdef ASSERT assert(!_defunct, "Use of invalid CodeStrings"); #endif
*** 375,384 **** --- 377,387 ---- address _total_start; // first address of combined memory buffer csize_t _total_size; // size in bytes of combined memory buffer OopRecorder* _oop_recorder; CodeStrings _code_strings; + bool _collect_comments; // Indicate if we need to collect block comments at all. OopRecorder _default_oop_recorder; // override with initialize_oop_recorder Arena* _overflow_arena; address _last_insn; // used to merge consecutive memory barriers, loads or stores.
*** 401,410 **** --- 404,421 ---- _code_strings = CodeStrings(); _last_insn = NULL; #if INCLUDE_AOT _immutable_PIC = false; #endif + + // Collect block comments, but restrict collection to cases where a disassembly is output. + _collect_comments = ( PrintAssembly + || PrintStubCode + || PrintMethodHandleStubs + || PrintInterpreter + || PrintSignatureHandlers + ); } void initialize(address code_start, csize_t code_size) { _consts.initialize_outer(this, SECT_CONSTS); _insts.initialize_outer(this, SECT_INSTS);
*** 602,611 **** --- 613,639 ---- if (!_code_strings.is_null()) { _code_strings.free(); // sets _strings Null as a side-effect. } } + // Directly disassemble code buffer. + // Print the comment associated with offset on stream, if there is one. + virtual void print_block_comment(outputStream* stream, address block_begin) { + #ifndef PRODUCT + intptr_t offset = (intptr_t)(block_begin - _total_start); // I assume total_start is not correct for all code sections. + _code_strings.print_block_comment(stream, offset); + #endif + } + bool has_block_comment(address block_begin) { + #ifndef PRODUCT + intptr_t offset = (intptr_t)(block_begin - _total_start); // I assume total_start is not correct for all code sections. + return _code_strings.has_block_comment(offset); + #else + return false; + #endif + } + // Code generation void relocate(address at, RelocationHolder const& rspec, int format = 0) { _insts.relocate(at, rspec, format); } void relocate(address at, relocInfo::relocType rtype, int format = 0) {
*** 648,658 **** // Printing / Decoding // decodes from decode_begin() to code_end() and sets decode_begin to end void decode(); void print(); #endif ! // The following header contains architecture-specific implementations #include CPU_HEADER(codeBuffer) }; --- 676,687 ---- // Printing / Decoding // decodes from decode_begin() to code_end() and sets decode_begin to end void decode(); void print(); #endif ! // Directly disassemble code buffer. ! void decode(address start, address end); // The following header contains architecture-specific implementations #include CPU_HEADER(codeBuffer) };
< prev index next >