Integrated: JDK-8264899: C1: -XX:AbortVMOnException does not work if all methods in the call stack are compiled with C1 and there are no exception handlers
Damon Fenacci
dfenacci at openjdk.org
Wed Jun 21 12:30:24 UTC 2023
On Wed, 31 May 2023 07:06:27 GMT, Damon Fenacci <dfenacci at openjdk.org> wrote:
> # Problem
> The `AbortVMOnException` flag prints the stack trace instead of aborting when the code gets compiled with C1.
> This only happens when the exception gets unwound, all methods in the call stack are compiled with C1 and there are no exception handlers for that exception.
> This happens here (for x86. Other platform's implementations are similar):
>
> https://github.com/openjdk/jdk/blob/4d4706967d44b6908406818bb135f94130f373a0/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp#L1209-L1215
>
> # Solution
> To catch this situation, if `AbortVMOnException` is set, a call to check if there is a match is added when unwinding the exception. This is done in the `void Runtime1::generate_unwind_exception` which is the sole call of the `unwind_exception_id` case.
>
> On a few architectures a *move* instruction is needed (e.g. `__ mov(rscratch1, exception_oop)`) to copy the exception oop into a different register that doesn't conflict with the argument of the C calling convention. This is checked with asserts in most architectures but not for *aarch64* (new enhancement issue: [JDK-8310020](https://bugs.openjdk.org/browse/JDK-8310020)).
>
> A regression test is added as well.
>
> # Testing
> This fix includes changes for x86_32/64 and aarch64, which I could test thoroughly but also for **arm**, **ppc**, **riscv**, and **s390** for which I would **need some help with testing**.
This pull request has now been integrated.
Changeset: 826dcb54
Author: Damon Fenacci <dfenacci at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/826dcb5424a931953ac1964e7893aec7ec839862
Stats: 149 lines in 9 files changed: 148 ins; 0 del; 1 mod
8264899: C1: -XX:AbortVMOnException does not work if all methods in the call stack are compiled with C1 and there are no exception handlers
Reviewed-by: thartmann, amitkumar, fyang, mdoerr
-------------
PR: https://git.openjdk.org/jdk/pull/14240
More information about the hotspot-dev
mailing list