RFR: 8359120: Improve warning message when fail to load hsdis library

Taizo Kurashige tkurashige at openjdk.org
Tue Jun 10 13:44:05 UTC 2025


This PR is improvement of warning message when fail to load hsdis library.

[JDK-8287001](https://bugs.openjdk.org/browse/JDK-8287001) introduced a warning on hsdis library load failure. This is useful when the user executes -XX:+PrintAssembly, etc.

However, I think that when hs_err occurs, users might be confused by this warning printed by Xlog. Because users are not likely to know that hsdis is loaded for the [MachCode] section of the hs_err report, they may wonder, for example, "Why do I get warnings about hsdis load errors when -XX:+PrintAssembly is not specified?."

To clear up this confusion, I suggest printing a warning just before [MachCode].

<details>

<summary>sample output</summary>

If hs_err occurs and hsdis load fails without the option to specify where the hs_err report should be output, the following is output to the hs_err_pir log file:

.
.
native method entry point (kind = native)  [0x000001ae8753cec0, 0x000001ae8753dac0]  3072 bytes

Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
[MachCode]
  0x000001ae8753cec0: 488b 4b08 | 0fb7 492e | 584c 8d74 | ccf8 6800 | 0000 0068 | 0000 0000 | 5055 488b | ec41 5548
  0x000001ae8753cee0: 8b43 084c | 8d68 3848 | 8b40 0868 | 0000 0000 | 5348 8b50 | 18
.
.


If -XX:+PrintAssembly is specified and hsdis load fails, the following is output to the stdout

$ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
OpenJDK 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output

============================= C1-compiled nmethod ==============================
----------------------------------- Assembly -----------------------------------

Compiled method (c1) 57    2       3       java.lang.Object::<init> (1 bytes)
 total in heap  [0x0000024a08a00008,0x0000024a08a00208] = 512
.
.

[Constant Pool (empty)]


Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
[MachCode]
[Instructions begin]
  0x0000024a08a00100: 6666 660f | 1f84 0000 | 0000 0066 | 6666 9066 | 6690 448b | 5208 443b
.
.
[Constant Pool (empty)]


Loading hsdis library failed, so undisassembled code is printed in the below [MachCode] section
[MachCode]
[Verified Entry Point]
  # {method} {0x00000000251a1898} 'toUnsignedInt' '(B)I' in 'java/lang/Byte
.
.


</details>

Since the warning added in this fix cover the role of warning introduced in [JDK-8287001](https://bugs.openjdk.org/browse/JDK-8287001), I removed lines added in [JDK-8287001](https://bugs.openjdk.org/browse/JDK-8287001) and [JDK-8289421](https://bugs.openjdk.org/browse/JDK-8289421).

Testing:
・test/hotspot/jtreg/runtime/ErrorHandling on Windows Server 2019 (Some tests use fatdebug version, so I ran with fatdebug version)
・tested on Windows Server 2019 that each print_cr() in 3 routes prints warning just before [MachCode] and that JDK-8287001's warning isn't printed 
・GHA testing

-------------

Commit messages:
 - Remove include of log.hpp
 - Merge branch 'openjdk:master' into hsdis_load_err_msg
 - Improve hsdis load error message

Changes: https://git.openjdk.org/jdk/pull/25726/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25726&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8359120
  Stats: 12 lines in 3 files changed: 9 ins; 3 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/25726.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25726/head:pull/25726

PR: https://git.openjdk.org/jdk/pull/25726


More information about the hotspot-compiler-dev mailing list