RFR: 8340212: -Xshare:off -XX:CompressedClassSpaceBaseAddress=0x40001000000 crashes on macos-aarch64 [v10]
Ioi Lam
iklam at openjdk.org
Mon Dec 9 17:32:42 UTC 2024
On Thu, 5 Dec 2024 16:51:21 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
>> Added checks to verify that the given compressed class base or shared base address and shift given will be decodable for aarch64. This code is moved in PR https://github.com/openjdk/jdk/pull/20677 so this would be moved to the new place once that's integrated.
>>
>> Tested with tier1-7.
>
> Coleen Phillimore has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 10 commits:
>
> - Merge branch 'master' into decode-mode
> - Recalculate decode mode if OS picks a different encoding.
> - Only calculate klass-decode-mode in one place.
> - Missed one. Another good reason to not copy code.
> - Rename ceil_log2 to log2i_ceil
> - Merge branch 'master' into decode-mode
> - Merge with incoming change for PR https://github.com/openjdk/jdk/pull/21932
> - Merge branch 'master' into decode-mode
> - include formatBuffer.hpp
> - 8340212: -Xshare:off -XX:CompressedClassSpaceBaseAddress=0x40001000000 crashes on macos-aarch64
Changes requested by iklam (Reviewer).
src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp line 5328:
> 5326:
> 5327: // Check if one of the above decoding modes will work for given base, shift and range.
> 5328: bool MacroAssembler::check_klass_decode_mode(address base, int shift, const size_t range) {
Can we refactor the code so that `check_klass_decode_mode()` only does the checking and have no side effects?
This code is called from CDS, which sometimes will unmap the archive and retry at an os-assigned random address, so updating the actual base/shift here will be problematic.
src/hotspot/share/cds/metaspaceShared.cpp line 1496:
> 1494: p2i(base_address), precomputed_narrow_klass_shift);
> 1495: use_archive_base_addr = false;
> 1496: }
It seems there's no easy way of testing this code, as the `base_address` need to come from a CDS archive, but the CDS archive cannot contain invalid base addresses.
Maybe we should change this to `log_error()`, or even `fatal()`
test/hotspot/jtreg/runtime/CompressedOops/CompressedClassPointersEncodingScheme.java line 87:
> 85:
> 86: // We ignore cases where we were not able to map at the force address
> 87: if (!output.contains("Successfully forced class space address to " + forceAddressString)) {
"Successfully forced class space address" seems misleading. Can we change the code in metaspace.cpp to say something like "reserved class space at ...."?
-------------
PR Review: https://git.openjdk.org/jdk/pull/21695#pullrequestreview-2489481553
PR Review Comment: https://git.openjdk.org/jdk/pull/21695#discussion_r1876384125
PR Review Comment: https://git.openjdk.org/jdk/pull/21695#discussion_r1876392335
PR Review Comment: https://git.openjdk.org/jdk/pull/21695#discussion_r1876389280
More information about the hotspot-dev
mailing list