RFR[S] 8241158 SA TestHeapDumpForInvokeDynamic.java fails when CDS archive is relocated
ioi.lam at oracle.com
Thu Apr 16 18:12:00 UTC 2020
On 4/16/20 10:08 AM, Calvin Cheung wrote:
> 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
> 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 for taking a look at this.
As part of this patch, the call path that you mentioned above has been
removed. Now we always call update_archived_mirror_native_pointers on
all archived classes at VM start-up, so there's no need to patch
individual mirrors during class loading.
See the change on line 1294.
> 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:
>> I'll rerun tiers 1-4 as two of the affected tests
>> (ClhsdbDumpheap.java, TestHeapDumpForInvokeDynamic.java) will now be
>> executed on macos by mach5.
>> - 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.
>>> On 4/14/20 3:01 PM, Ioi Lam wrote:
>>>> 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
>>>> 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
>>>> We already patch a lot of stuff at start-up when the CDS archive is
>>>> so doing a little patching more doesn't hurt.
>>>> Passed mach5 tiers 1-4. Ran the failed test manually on macos and
>>>> it passed.
>>>> - Ioi
More information about the hotspot-runtime-dev