RFR: 8331201: UBSAN enabled build reports on Linux x86_64 runtime error shift exponent 65 is too large for 64-bit type 'long unsigned int'
Afshin Zafari
azafari at openjdk.org
Wed Dec 18 09:47:46 UTC 2024
The issue existed in making Fingerprints of method names. Each parameter in the methods' arguments is decoded as a 4-bits value. The 64-bits `fingertprint_t` can hold up to 14 parameters plus return type and static bit. To make the Fingerprint, the signature is iterated one parameter at a time and the corresponding code is accumulated after shifting the bits up.
Some compilers do not mask the shift value to the base size and UBSAN catches the case.
In this PR, the number of parameters (`_param_count`) is used and compared with the max (14) to do the shift operation safely. The pre-existing `_param_size` is not reflecting the number of parameters, since it is incremented by 2 for `T_DOUBLE` and `T_LONG` types.
-------------
Commit messages:
- 8331201: UBSAN enabled build reports on Linux x86_64 runtime error: shift exponent 65 is too large for 64-bit type 'long unsigned int'
Changes: https://git.openjdk.org/jdk/pull/22807/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22807&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8331201
Stats: 9 lines in 2 files changed: 5 ins; 0 del; 4 mod
Patch: https://git.openjdk.org/jdk/pull/22807.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22807/head:pull/22807
PR: https://git.openjdk.org/jdk/pull/22807
More information about the hotspot-runtime-dev
mailing list