8081406: cleanup and minor extensions of the debugging facilities in CodeStrings
Avoid issues around _defunct CodeStrings Reviewed-by: dholmes, coleenp
This commit is contained in:
parent
d60d6fdf40
commit
2a01bb6dda
@ -1093,9 +1093,11 @@ void CodeStrings::add_comment(intptr_t offset, const char * comment) {
|
|||||||
|
|
||||||
void CodeStrings::assign(CodeStrings& other) {
|
void CodeStrings::assign(CodeStrings& other) {
|
||||||
other.check_valid();
|
other.check_valid();
|
||||||
// Cannot do following because CodeStrings constructor is not alway run!
|
|
||||||
assert(is_null(), "Cannot assign onto non-empty CodeStrings");
|
assert(is_null(), "Cannot assign onto non-empty CodeStrings");
|
||||||
_strings = other._strings;
|
_strings = other._strings;
|
||||||
|
#ifdef ASSERT
|
||||||
|
_defunct = false;
|
||||||
|
#endif
|
||||||
other.set_null_and_invalidate();
|
other.set_null_and_invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1115,13 +1117,15 @@ void CodeStrings::copy(CodeStrings& other) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* CodeStrings::_prefix = " ;; "; // default: can be changed via set_prefix
|
||||||
|
|
||||||
void CodeStrings::print_block_comment(outputStream* stream, intptr_t offset) const {
|
void CodeStrings::print_block_comment(outputStream* stream, intptr_t offset) const {
|
||||||
check_valid();
|
check_valid();
|
||||||
if (_strings != NULL) {
|
if (_strings != NULL) {
|
||||||
CodeString* c = find(offset);
|
CodeString* c = find(offset);
|
||||||
while (c && c->offset() == offset) {
|
while (c && c->offset() == offset) {
|
||||||
stream->bol();
|
stream->bol();
|
||||||
stream->print(" ;; ");
|
stream->print("%s", _prefix);
|
||||||
stream->print_cr("%s", c->string());
|
stream->print_cr("%s", c->string());
|
||||||
c = c->next_comment();
|
c = c->next_comment();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -249,6 +249,7 @@ private:
|
|||||||
// Becomes true after copy-out, forbids further use.
|
// Becomes true after copy-out, forbids further use.
|
||||||
bool _defunct; // Zero bit pattern is "valid", see memset call in decode_env::decode_env
|
bool _defunct; // Zero bit pattern is "valid", see memset call in decode_env::decode_env
|
||||||
#endif
|
#endif
|
||||||
|
static const char* _prefix; // defaults to " ;; "
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CodeString* find(intptr_t offset) const;
|
CodeString* find(intptr_t offset) const;
|
||||||
@ -289,11 +290,18 @@ public:
|
|||||||
void assign(CodeStrings& other) PRODUCT_RETURN;
|
void assign(CodeStrings& other) PRODUCT_RETURN;
|
||||||
// COPY strings from other to this; leave other valid.
|
// COPY strings from other to this; leave other valid.
|
||||||
void copy(CodeStrings& other) PRODUCT_RETURN;
|
void copy(CodeStrings& other) PRODUCT_RETURN;
|
||||||
|
// FREE strings; invalidate this.
|
||||||
void free() PRODUCT_RETURN;
|
void free() PRODUCT_RETURN;
|
||||||
// Guarantee that _strings are used at most once; assign invalidates a buffer.
|
// Guarantee that _strings are used at most once; assign and free invalidate a buffer.
|
||||||
inline void check_valid() const {
|
inline void check_valid() const {
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
assert(!_defunct, "Use of invalid CodeStrings");
|
assert(!_defunct, "Use of invalid CodeStrings");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void set_prefix(const char *prefix) {
|
||||||
|
#ifndef PRODUCT
|
||||||
|
_prefix = prefix;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -379,6 +387,7 @@ class CodeBuffer: public StackObj {
|
|||||||
_oop_recorder = NULL;
|
_oop_recorder = NULL;
|
||||||
_decode_begin = NULL;
|
_decode_begin = NULL;
|
||||||
_overflow_arena = NULL;
|
_overflow_arena = NULL;
|
||||||
|
_code_strings = CodeStrings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize(address code_start, csize_t code_size) {
|
void initialize(address code_start, csize_t code_size) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -88,6 +88,7 @@ CodeBlob::CodeBlob(const char* name, int header_size, int size, int frame_comple
|
|||||||
_data_offset = size;
|
_data_offset = size;
|
||||||
_frame_size = 0;
|
_frame_size = 0;
|
||||||
set_oop_maps(NULL);
|
set_oop_maps(NULL);
|
||||||
|
_strings = CodeStrings();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -114,6 +115,7 @@ CodeBlob::CodeBlob(
|
|||||||
_code_offset = _content_offset + cb->total_offset_of(cb->insts());
|
_code_offset = _content_offset + cb->total_offset_of(cb->insts());
|
||||||
_data_offset = _content_offset + round_to(cb->total_content_size(), oopSize);
|
_data_offset = _content_offset + round_to(cb->total_content_size(), oopSize);
|
||||||
assert(_data_offset <= size, "codeBlob is too small");
|
assert(_data_offset <= size, "codeBlob is too small");
|
||||||
|
_strings = CodeStrings();
|
||||||
|
|
||||||
cb->copy_code_and_locs_to(this);
|
cb->copy_code_and_locs_to(this);
|
||||||
set_oop_maps(oop_maps);
|
set_oop_maps(oop_maps);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user