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

Reply via email to