RFR: 8277204: Implement PAC-RET branch protection on Linux/AArch64 [v25]

Hao Sun haosun at openjdk.org
Mon Feb 6 07:09:15 UTC 2023


On Tue, 31 Jan 2023 14:59:31 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

>> Alan Hayward has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 34 commits:
>> 
>>  - Merge master
>>  - Merge master
>>  - Merge master
>>  - Error on -XX:-PreserveFramePointer -XX:UseBranchProtection=pac-ret
>>  - Add comments to enter calls
>>  - Set PreserveFramePointer if use_rop_protection is set
>>  - Merge enter_subframe into enter
>>  - Review fixups
>>  - Documentation updates
>>  - Update copyrights to 2022
>>  - ... and 24 more: https://git.openjdk.org/jdk/compare/022d8070...c4e0ee31
>
> src/hotspot/cpu/aarch64/vm_version_aarch64.cpp line 413:
> 
>> 411:   }
>> 412: 
>> 413:   if (UseBranchProtection == nullptr || strcmp(UseBranchProtection, "none") == 0) {
> 
> My understanding is that `UseBranchProtection` requires JIT compiler integration. This is currently missing in Graal. The logic that decides if it should be enabled by default needs to take JVMCI into consideration, much like the call to `JVMCIGlobals::check_jvmci_supported_gc` determines if JVMCI supports the configured GC.
> 
> Thanks to @gilles-duboscq for alerting me to this change.

Thanks for reporting this. @dougxc 

Yes. I encountered several jtreg failures with Graal, which is built with PAC-RET enabled JDK.

As I see it, the straightforward fix is to disable JVMCI if `_rop_protection` is parsed as "true" finally, since Graal doesn't supports PAC-RET currently. 
That is similar to the way `JVMCIGlobals::check_jvmci_supported_gc` does, i.e. if one GC except `G1/Serial/Parallel` is configured, we disable JVMCI.
WDYT

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

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



More information about the build-dev mailing list