--- a/src/hotspot/share/asm/codeBuffer.cpp Tue May 21 11:45:37 2019 +0200
+++ b/src/hotspot/share/asm/codeBuffer.cpp Tue May 21 15:51:35 2019 +0200
@@ -86,7 +86,8 @@
// External buffer, in a predefined CodeBlob.
// Important: The code_start must be taken exactly, and not realigned.
CodeBuffer::CodeBuffer(CodeBlob* blob) {
- initialize_misc("static buffer");
+ // Provide code buffer with meaningful name
+ initialize_misc(blob->name());
initialize(blob->content_begin(), blob->content_size());
verify_section_allocation();
}
@@ -1035,7 +1036,9 @@
}
void CodeBuffer::block_comment(intptr_t offset, const char * comment) {
- _code_strings.add_comment(offset, comment);
+ if (_collect_comments) {
+ _code_strings.add_comment(offset, comment);
+ }
}
const char* CodeBuffer::code_string(const char* str) {
@@ -1148,15 +1151,23 @@
const char* CodeStrings::_prefix = " ;; "; // default: can be changed via set_prefix
+// Check if any block comments are pending for the given offset.
+bool CodeStrings::has_block_comment(intptr_t offset) const {
+ if (_strings == NULL) return false;
+ CodeString* c = find(offset);
+ return c != NULL;
+}
+
void CodeStrings::print_block_comment(outputStream* stream, intptr_t offset) const {
- check_valid();
- if (_strings != NULL) {
+ check_valid();
+ if (_strings != NULL) {
CodeString* c = find(offset);
while (c && c->offset() == offset) {
stream->bol();
stream->print("%s", _prefix);
// Don't interpret as format strings since it could contain %
- stream->print_raw_cr(c->string());
+ stream->print_raw(c->string());
+ stream->bol(); // advance to next line only if string didn't contain a cr() at the end.
c = c->next_comment();
}
}
@@ -1186,7 +1197,7 @@
void CodeBuffer::decode() {
ttyLocker ttyl;
- Disassembler::decode(decode_begin(), insts_end());
+ Disassembler::decode(decode_begin(), insts_end(), tty);
_decode_begin = insts_end();
}
@@ -1217,4 +1228,10 @@
}
}
+// Directly disassemble code buffer.
+void CodeBuffer::decode(address start, address end) {
+ ttyLocker ttyl;
+ Disassembler::decode(this, start, end, tty);
+}
+
#endif // PRODUCT