On Wed, 26 May 2021 16:42:20 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:
>> Volker Simonis has updated the pull request incrementally with one >> additional commit since the last revision: >> >> 8267555: Fix class file version during redefinition after 8238048 > > src/hotspot/share/prims/jvmtiRedefineClasses.cpp line 1861: > >> 1859: // Save fields from the old_cp. >> 1860: merge_cp->copy_fields(old_cp(), true /* skip_version */); >> 1861: scratch_cp->copy_fields(old_cp(), true /* skip_version */); > > Rather than calling copy_fields, maybe this should revert this: > - if (old_cp->has_dynamic_constant()) { > - merge_cp->set_has_dynamic_constant(); > - scratch_cp->set_has_dynamic_constant(); > - } > > And then the merge_cp->copy_fields(scratch_cp); ? > > The merged_cp should look like the scratch_cp (with version number and > generic signature, etc) until after verification and then I guess it should > look like the old_cp at the end in redefine_single_class(). Yes, that works as well. Updated as suggested. > test/hotspot/jtreg/runtime/ConstantPool/ClassVersion/ClassVersionAfterRedefine.java > line 1: > >> 1: /* > > Can you put this test in > test/hotspot/jtreg/serviceability/jvmti/RedefineClasses directory? > All the tests do redefinition differently. There is a library > RedefineClassHelper that you might be able to use and not have to deal with > starting the agent. > > @ compile TestClassXXX.jasm // this is the old one > then in the test read all of TestClassNew.jasm bytecodes, and s/New/XXX/ and > use > RedefineClassHelper.redefine(TestClassXXX.class, newBytes); > > See RedefineRunningMethods.java in that directory for an example. Moved the test to `test/hotspot/jtreg/serviceability/jvmti/RedefineClasses` and use `RedefineClassHelper` as suggested. ------------- PR: https://git.openjdk.java.net/jdk/pull/4149