RFR(S) 8226645: [TESTBUG] some AppCDS tests relies on illegal reflective access
calvin.cheung at oracle.com
Sat Aug 10 03:50:38 UTC 2019
Thanks for your review!
On 8/9/19 1:07 PM, Ioi Lam wrote:
> Hi Calvin,
> This makes it hard to tell where the privateLookupIn is from.
> import static java.lang.invoke.MethodHandles.*;
> Lookup lookup = privateLookupIn(target, lookup());
> I think it's better to do this:
> import static java.lang.invoke.MethodHandles;
> Lookup lookup = MethodHandles.privateLookupIn(target,
> Also, instead of forcing every test case to carry a class called
> "Hello", I think
> it's better to do this:
> * Define the class as stored in clsFile, in the same loader as
> * with the following modification:
> * <ul>....</ul>
> public static Class<?> defineModifiedClass(Class<?> peerClass,
> File clsFile,
> String fromString, String toString)
> throws .....
> Lookup lookup = MethodHandles.privateLookupIn(peerClass,
> Class<?> cls = lookup.defineClass(buff);
This works with defineModifiedClass but not with the defineClassFromJAR.
It is because the current usage of defineClassFromJAR is that the class
is supposed to be loaded by a URLClassLoader. If we just pass the test
class as the peerClass, the loader will be AppClassLoader. Therefore, I
need to keep the Hello class for the LoaderSegregationTest but the
loading of the Hello class will be in the LoaderSegregation app class
instead of in Util.java. I also modified defineClassFromJAR so that its
signature is the same as defineModifiedClass.
> Then the caller of defineModifiedClass can be changed from:
> Class superClass =
> clsFile, from, to);
> Class superClass = Util.defineModifiedClass(RewriteBytecodes.class,
> clsFile, from, to);
> - Ioi
> On 8/9/19 11:19 AM, Calvin Cheung wrote:
>> bug: https://bugs.openjdk.java.net/browse/JDK-8226645
>> webrev: http://cr.openjdk.java.net/~ccheung/8226645/webrev.00/
>> Updating couple of AppCDS tests to use Lookup.defineClass instead of
>> ClassLoader.defineClass. A dummy class will be loaded by the
>> requested class loader and then a lookup instance is obtained using
>> the privateLookupIn API.
>> Testing: mach5 tiers1 - 3.
>> locally on linux-x64 with -vmoption:--illegal-access=deny
More information about the hotspot-runtime-dev