src/share/vm/compiler/disassembler.cpp
Print this page
rev 4202 : 8008555: Debugging code in compiled method sometimes leaks memory
Summary: support for strings that have same life-time as code that uses them.
Reviewed-by:
@@ -156,11 +156,11 @@
class decode_env {
private:
nmethod* _nm;
CodeBlob* _code;
- CodeComments _comments;
+ CodeStrings _strings;
outputStream* _output;
address _start, _end;
char _option_buf[512];
char _print_raw;
@@ -196,11 +196,11 @@
void print_insn_labels();
void print_insn_bytes(address pc0, address pc);
void print_address(address value);
public:
- decode_env(CodeBlob* code, outputStream* output, CodeComments c = CodeComments());
+ decode_env(CodeBlob* code, outputStream* output, CodeStrings c = CodeStrings());
address decode_instructions(address start, address end);
void start_insn(address pc) {
_cur_insn = pc;
@@ -240,17 +240,17 @@
int total_ticks() { return _total_ticks; }
void set_total_ticks(int n) { _total_ticks = n; }
const char* options() { return _option_buf; }
};
-decode_env::decode_env(CodeBlob* code, outputStream* output, CodeComments c) {
+decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c) {
memset(this, 0, sizeof(*this));
_output = output ? output : tty;
_code = code;
if (code != NULL && code->is_nmethod())
_nm = (nmethod*) code;
- _comments.assign(c);
+ _strings.assign(c);
// by default, output pc but not bytes:
_print_pc = true;
_print_bytes = false;
_bytes_per_line = Disassembler::pd_instruction_alignment();
@@ -368,11 +368,11 @@
outputStream* st = output();
CodeBlob* cb = _code;
if (cb != NULL) {
cb->print_block_comment(st, p);
}
- _comments.print_block_comment(st, (intptr_t)(p - _start));
+ _strings.print_block_comment(st, (intptr_t)(p - _start));
if (_print_pc) {
st->print(" " PTR_FORMAT ": ", p);
}
}
@@ -496,11 +496,11 @@
decode_env env(cb, st);
env.output()->print_cr("Decoding CodeBlob " PTR_FORMAT, cb);
env.decode_instructions(cb->code_begin(), cb->code_end());
}
-void Disassembler::decode(address start, address end, outputStream* st, CodeComments c) {
+void Disassembler::decode(address start, address end, outputStream* st, CodeStrings c) {
if (!load_library()) return;
decode_env env(CodeCache::find_blob_unsafe(start), st, c);
env.decode_instructions(start, end);
}