< prev index next >
src/hotspot/share/asm/codeBuffer.hpp
Print this page
rev 54542 : 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 >