1.1 --- a/src/share/vm/classfile/classFileStream.cpp Thu Aug 01 03:44:03 2019 +0100 1.2 +++ b/src/share/vm/classfile/classFileStream.cpp Mon Aug 12 18:30:40 2019 +0300 1.3 @@ -30,12 +30,12 @@ 1.4 THROW_MSG(vmSymbols::java_lang_ClassFormatError(), "Truncated class file"); 1.5 } 1.6 1.7 -ClassFileStream::ClassFileStream(u1* buffer, int length, const char* source) { 1.8 +ClassFileStream::ClassFileStream(u1* buffer, int length, const char* source, bool need_verify) { 1.9 _buffer_start = buffer; 1.10 _buffer_end = buffer + length; 1.11 _current = buffer; 1.12 _source = source; 1.13 - _need_verify = false; 1.14 + _need_verify = need_verify; 1.15 } 1.16 1.17 u1 ClassFileStream::get_u1(TRAPS) { 1.18 @@ -100,3 +100,31 @@ 1.19 } 1.20 _current += length * 4; 1.21 } 1.22 + 1.23 +#if INCLUDE_JFR 1.24 + 1.25 +u1* ClassFileStream::clone_buffer() const { 1.26 + u1* const new_buffer_start = NEW_RESOURCE_ARRAY(u1, length()); 1.27 + memcpy(new_buffer_start, _buffer_start, length()); 1.28 + return new_buffer_start; 1.29 +} 1.30 + 1.31 +const char* const ClassFileStream::clone_source() const { 1.32 + const char* const src = source(); 1.33 + char* source_copy = NULL; 1.34 + if (src != NULL) { 1.35 + size_t source_len = strlen(src); 1.36 + source_copy = NEW_RESOURCE_ARRAY(char, source_len + 1); 1.37 + strncpy(source_copy, src, source_len + 1); 1.38 + } 1.39 + return source_copy; 1.40 +} 1.41 + 1.42 +ClassFileStream* ClassFileStream::clone() const { 1.43 + u1* const new_buffer_start = clone_buffer(); 1.44 + return new ClassFileStream(new_buffer_start, 1.45 + length(), 1.46 + clone_source(), 1.47 + need_verify()); 1.48 +} 1.49 +#endif // INCLUDE_JFR