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

Doug Simon dnsimon at openjdk.org
Mon May 22 12:26:54 UTC 2023

On Tue, 16 May 2023 22:04:54 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

>> 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
> Doug Simon has updated the pull request incrementally with one additional commit since the last revision:
>   replace JVMCICompileMethodExceptionIsFatal VM flag with test.jvmci.compileMethodExceptionIsFatal system property

src/hotspot/share/jvmci/jvmciRuntime.cpp line 2048:

> 2046:                                                                      (jlong) compile_state, compile_state->task()->compile_id());
> 2047:   if (JVMCIENV->has_pending_exception()) {
> 2048:     const char* val = Arguments::PropertyList_get_value(Arguments::system_properties(), "test.jvmci.compileMethodExceptionIsFatal");

Note that this view on system properties is restricted to properties set at VM startup (e.g. on the command line) and will not see the result of calls to `System.setProperty()` made by an application.


PR Review Comment: https://git.openjdk.org/jdk/pull/14000#discussion_r1200441783

More information about the graal-dev mailing list