--- old/hotspot/src/share/vm/asm/codeBuffer.hpp 2015-05-28 16:28:36.451150782 +0200 +++ new/hotspot/src/share/vm/asm/codeBuffer.hpp 2015-05-28 16:28:35.139150891 +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; @@ -263,6 +264,21 @@ #endif } + void set_null() { +#ifndef PRODUCT + _strings = NULL; +#endif + } + + void invalidate() { +#ifndef PRODUCT + assert(is_null(), "Should not invalidate non-empty CodeStrings"); +#ifdef ASSERT + _defunct = true; +#endif +#endif + } + public: CodeStrings() { #ifndef PRODUCT @@ -289,13 +305,21 @@ void assign(CodeStrings& other) PRODUCT_RETURN; // COPY strings from other to this; leave other valid. void copy(CodeStrings& other) PRODUCT_RETURN; + // FREE strings; invalidate if contains non comment strings. void free() PRODUCT_RETURN; // Guarantee that _strings are used at most once; assign invalidates a buffer. + // Also used to help detect CodeBuffers that reference freed strings. 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 +403,7 @@ _oop_recorder = NULL; _decode_begin = NULL; _overflow_arena = NULL; + _code_strings = CodeStrings(); } void initialize(address code_start, csize_t code_size) {