RFR[S] 8241158 SA TestHeapDumpForInvokeDynamic.java fails when CDS archive is relocated

Calvin Cheung calvin.cheung at oracle.com
Thu Apr 16 17:08:23 UTC 2020


Hi Ioi,

Regarding the changes in javaClasses.cpp, I saw that in your new code in 
systemDictionaryShared.cpp, the 
java_lang_Class::update_archived_mirror_native_pointers(m) won't be 
called if MetaspaceShared::relocation_delta() is 0. But I noticed 
there's another code path to 
java_lang_Class::update_archived_mirror_native_pointers() after 
HeapShared::fixup_mapped_heap_regions() is called in 
SystemDictionary::resolve_well_known_classes():

java_lang_Class::update_archived_mirror_native_pointers(oop) : void
     java_lang_Class::restore_archived_mirror(Klass *, Handle, Handle, 
Handle, Thread *) : bool
         java_lang_Class::fixup_mirror(Klass *, Thread *) : void
             Universe::fixup_mirrors(Thread *) : void
SystemDictionary::resolve_well_known_classes(Thread *) : void
                     SystemDictionary::initialize(Thread *) : void
                         Universe::genesis(Thread *) : void
                             universe2_init() : void
                                 init_globals() : ?

Will MetaspaceShared::relocation_delta() always be non-zero in the above 
case?

thanks,

Calvin

On 4/14/20 10:07 PM, Ioi Lam wrote:
> Hi Chris,
>
> Thanks for the info. I've synced with the latest repo and updated the 
> webrev in-place:
>
> http://cr.openjdk.java.net/~iklam/jdk15/8241158-sa-heap-dump-fails.v01/
>
> I'll rerun tiers 1-4 as two of the affected tests 
> (ClhsdbDumpheap.java, TestHeapDumpForInvokeDynamic.java) will now be 
> executed on macos by mach5.
>
> Thanks
> - Ioi
>
> On 4/14/20 3:34 PM, Chris Plummer wrote:
>> [Not a review]
>>
>> Hi Ioi,
>>
>> Your ProblemList.txt is out of date. All those Solaris entries for 
>> 8193639 are now gone.
>>
>> thanks,
>>
>> Chris
>>
>> On 4/14/20 3:01 PM, Ioi Lam wrote:
>>> https://bugs.openjdk.java.net/browse/JDK-8241158
>>> http://cr.openjdk.java.net/~iklam/jdk15/8241158-sa-heap-dump-fails.v01/
>>>
>>> This is a bug in the CDS relocation code. When 
>>> -XX:ArchiveRelocationMode=1 is
>>> specified, the CDS archive is mapped to an address picked by the OS
>>> (instead of the default address 0x800000000). As a result, we need 
>>> to patch
>>> the native Klass* pointers inside java.lang.Class instances that are
>>> stored in the CDS archived heap region.
>>>
>>> Before this fix, the patching is done incrementally, when a class is 
>>> resolved.
>>> However, when SA tries to do a heap dump, it may see a 
>>> java.lang.Class instance
>>> that is not yet resolved, whose Klass* pointer has not been patched.
>>> Dereferencing the unpatched pointer causes SA to fail.
>>>
>>> (The failure happens on macos only, probably because the invalid 
>>> dereference
>>> causes different exceptions on other platforms due to specific 
>>> memory layout,
>>> and SA is able to handle such exceptions and limp on).
>>>
>>> The fix is to unconditionally patch all the Klass* pointers during VM
>>> initialization.
>>>
>>> We already patch a lot of stuff at start-up when the CDS archive is 
>>> relocated,
>>> so doing a little patching more doesn't hurt.
>>>
>>> ----
>>>
>>> Passed mach5 tiers 1-4. Ran the failed test manually on macos and it 
>>> passed.
>>>
>>> Thanks
>>> - Ioi
>>
>


More information about the hotspot-runtime-dev mailing list