src/share/vm/classfile/classFileStream.cpp

changeset 9858
b985cbb00e68
parent 7090
bb239308be67
child 9931
fd44df5e3bc3
     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

mercurial