RFR: 8308151: [JVMCI] capture JVMCI exceptions in hs-err

Doug Simon dnsimon at openjdk.org
Tue May 16 09:09:12 UTC 2023


When there is a pending exception after a JVMCI upcall into libjvmci, the VM calls the ExceptionDescribe JNI function to print the exception. Unfortunately, this output goes to "a system error-reporting channel" [1] which may not be tty. It also means the output is not in a hs-err log should the VM then exit with a fatal error. This has historically made it harder to triage libgraal bugs (i.e. the console output is usually required in addition to the hs-err crash log).

This PR addresses these shortcomings by printing the exception info to a string which is added to the JVMCI event log (for hs-err):

JVMCI Events (11 events):
...
Event: 0.274 Thread 0x0000000146819210 compiler.jvmci.TestUncaughtErrorInCompileMethod$CompilerCreationError
Event: 0.274 Thread 0x0000000146819210  at compiler.jvmci.TestUncaughtErrorInCompileMethod$1.createCompiler(TestUncaughtErrorInCompileMethod.java:147)
Event: 0.274 Thread 0x0000000146819210  at jdk.internal.vm.ci/jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.getCompiler(HotSpotJVMCIRuntime.java:829)
Event: 0.274 Thread 0x0000000146819210  at jdk.internal.vm.ci/jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.compileMethod(HotSpotJVMCIRuntime.java:943)


It is also be used to enhance the `-XX:+PrintCompilation` message issued for a failed compilation:

COMPILE SKIPPED: uncaught exception in call_HotSpotJVMCIRuntime_compileMethod [compiler.jvmci.TestUncaughtErrorInCompileMethod$CompilerCreationError]


[1] https://docs.oracle.com/en/java/javase/17/docs/specs/jni/functions.html#exceptiondescribe

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

Depends on: https://git.openjdk.org/jdk/pull/13905

Commit messages:
 - send JVMCI exception info to hs-err log and/or tty
 - remove unused callToString method

Changes: https://git.openjdk.org/jdk/pull/14000/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14000&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8308151
  Stats: 398 lines in 13 files changed: 335 ins; 31 del; 32 mod
  Patch: https://git.openjdk.org/jdk/pull/14000.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14000/head:pull/14000

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


More information about the graal-dev mailing list