On Tue, 7 Feb 2023 06:14:24 GMT, Hao Sun <hao...@openjdk.org> wrote:

>> The problem with `JVMCIGlobals::check_jvmci_supported_gc` is that it does 
>> not give the compiler a chance to specify whether it supports a given GC.
>> Instead, we want a JVMCI upcall like 
>> `jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.isGCSupported(int)`.
>
> Thanks for your reply. But I'm afraid I'm still a bit confused.
> 
> 1) flag `_rop_protection` is set inside function `VM_Version::initialize()`. 
> The execution flow is `create_vm -> init_globals -> VM_Version_init -> 
> VM_Version::initialize()`.
> 2) I suppose compilers (including JVMCI compiler) are initialized after 
> `init_global()` function. See 
> https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/threads.cpp#L685~L707.
>  Hence I suppose we cannot call JVMCI methods before this site, right?
> 
> If so, I'm afraid it's a bit late for VM to ask the compiler whether it 
> supports PAC-RET after the compiler initialization, and to disable PAC-RET if 
> the JVMCI compiler doesn't support it, mainly because some stubs are 
> generated already between `init_global()` and compiler initialization, and in 
> these stubs, flag `_rop_protection` is used to generate PAC-related code, 
> e.g., `SharedRuntime::generate_stubs() -> generate_deopt_blob() -> 
> protect_return_address()`.
> 
> Please correct me if there is something I misunderstood. Thanks.

Ah ok, I did not pay attention to the VM lifecycle constraints in setting this 
flag. We could do the JVMCI check in `CompileBroker::compilation_init_phase2` 
but that would mean forcing eager initialization of JVMCI which, in turn, would 
impact VM startup.
For now, we will just add a check into Graal that `UseBranchProtection` is not 
set, exiting the VM if it is. At the same time, we will work on adding support 
for this.

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

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

Reply via email to