OpenJDK / bsd-port / jdk9 / hotspot
changeset 8645:34c9093f9618
8081406: cleanup and minor extensions of the debugging facilities in CodeStrings
Summary: avoid issues around _defunct CodeStrings
Reviewed-by: dholmes, coleenp
author | bdelsart |
---|---|
date | Thu, 25 Jun 2015 08:17:52 +0200 |
parents | 4ffba31b9baa |
children | 2f8eba9d2f69 |
files | src/share/vm/asm/codeBuffer.cpp src/share/vm/asm/codeBuffer.hpp src/share/vm/code/codeBlob.cpp |
diffstat | 3 files changed, 20 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/asm/codeBuffer.cpp Wed Jun 24 13:38:01 2015 +0200 +++ b/src/share/vm/asm/codeBuffer.cpp Thu Jun 25 08:17:52 2015 +0200 @@ -1093,9 +1093,11 @@ void CodeStrings::assign(CodeStrings& other) { other.check_valid(); - // Cannot do following because CodeStrings constructor is not alway run! assert(is_null(), "Cannot assign onto non-empty CodeStrings"); _strings = other._strings; +#ifdef ASSERT + _defunct = false; +#endif other.set_null_and_invalidate(); } @@ -1115,13 +1117,15 @@ } } +const char* CodeStrings::_prefix = " ;; "; // default: can be changed via set_prefix + void CodeStrings::print_block_comment(outputStream* stream, intptr_t offset) const { check_valid(); if (_strings != NULL) { CodeString* c = find(offset); while (c && c->offset() == offset) { stream->bol(); - stream->print(" ;; "); + stream->print("%s", _prefix); stream->print_cr("%s", c->string()); c = c->next_comment(); }
--- a/src/share/vm/asm/codeBuffer.hpp Wed Jun 24 13:38:01 2015 +0200 +++ b/src/share/vm/asm/codeBuffer.hpp Thu Jun 25 08:17:52 2015 +0200 @@ -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. * * This code is free software; you can redistribute it and/or modify it @@ -249,6 +249,7 @@ // Becomes true after copy-out, forbids further use. bool _defunct; // Zero bit pattern is "valid", see memset call in decode_env::decode_env #endif + static const char* _prefix; // defaults to " ;; " #endif CodeString* find(intptr_t offset) const; @@ -289,13 +290,20 @@ 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 invalidates a buffer. + // 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 } + + static void set_prefix(const char *prefix) { +#ifndef PRODUCT + _prefix = prefix; +#endif + } }; // A CodeBuffer describes a memory space into which assembly @@ -379,6 +387,7 @@ _oop_recorder = NULL; _decode_begin = NULL; _overflow_arena = NULL; + _code_strings = CodeStrings(); } void initialize(address code_start, csize_t code_size) {
--- a/src/share/vm/code/codeBlob.cpp Wed Jun 24 13:38:01 2015 +0200 +++ b/src/share/vm/code/codeBlob.cpp Thu Jun 25 08:17:52 2015 +0200 @@ -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. * * This code is free software; you can redistribute it and/or modify it @@ -88,6 +88,7 @@ _data_offset = size; _frame_size = 0; set_oop_maps(NULL); + _strings = CodeStrings(); } @@ -114,6 +115,7 @@ _code_offset = _content_offset + cb->total_offset_of(cb->insts()); _data_offset = _content_offset + round_to(cb->total_content_size(), oopSize); assert(_data_offset <= size, "codeBlob is too small"); + _strings = CodeStrings(); cb->copy_code_and_locs_to(this); set_oop_maps(oop_maps);