RFR[S] 8241158 SA TestHeapDumpForInvokeDynamic.java fails when CDS archive is relocated
calvin.cheung at oracle.com
Thu Apr 16 17:08:23 UTC 2020
Regarding the changes in javaClasses.cpp, I saw that in your new code in
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
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
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
>>> 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
>>> - Ioi
More information about the hotspot-runtime-dev