RFR: 8365047: Remove exception handler stub code in C2 [v2]

Ruben duke at openjdk.org
Thu Aug 28 12:53:51 UTC 2025


On Thu, 14 Aug 2025 08:56:19 GMT, Ruben <duke at openjdk.org> wrote:

>> The C2 exception handler stub code is only a trampoline to the generated exception handler blob. This change removes the extra step on the way to the generated blob.
>> 
>> According to some comments in the source code, the exception handler stub code used to be patched upon deoptimization, however presumably these comments are outdated as the patching upon deoptimization happens for post-call NOPs only.
>
> Ruben has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Address review comments

I've discovered an issue caused by the current version of the patch - at least for AArch32.

Once the exception handler stub code is removed, the deoptimization handler stub code can become adjacent to the main code. Occasionally the main code ends with a `BL` which is never meant to return. That `BL` - if adjacent to the stub code - writes the address of the deoptimization stub code into `LR`, causing an issue for subsequent frame processing, as the design assumption is: if a return address points to the deoptimization stub code, then deoptimization is in progress.
For this to apply, there should be no call instructions right before the deoptimization stub code.

Presumably, the most straightforward fix could be to emit a `NOP` at the end of the main code if otherwise a `BL`/`BLR` would be the last instruction there. I'd appreciate feedback on whether this approach is acceptable.

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

PR Comment: https://git.openjdk.org/jdk/pull/26678#issuecomment-3233380061


More information about the hotspot-dev mailing list