RFR: 8299570: [JVMCI] Insufficient error handling when CodeBuffer is exhausted [v4]

Doug Simon dnsimon at openjdk.org
Wed Mar 8 14:00:59 UTC 2023


On Wed, 8 Mar 2023 13:12:28 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> Something like this?
>> 
>> diff --git a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp
>> index 88dc59f80d0..83ec182d2c7 100644
>> --- a/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp
>> +++ b/src/hotspot/cpu/aarch64/nativeInst_aarch64.cpp
>> @@ -532,21 +532,22 @@ void NativeCallTrampolineStub::set_destination(address new_destination) {
>>  void NativeCall::trampoline_jump(CodeBuffer &cbuf, address dest, JVMCI_TRAPS) {
>>    MacroAssembler a(&cbuf);
>>  
>> -  if (a.far_branches()) {
>> -    if (!is_NativeCallTrampolineStub_at(instruction_address() + displacement())) {
>> -      address stub = a.emit_trampoline_stub(instruction_address() - cbuf.insts()->start(), dest);
>> -      if (stub == nullptr) {
>> -        JVMCI_ERROR("could not emit trampoline stub - code cache is full");
>> -      }
>> -      // The relocation is created while emitting the stub will ensure this
>> -      // call instruction is subsequently patched to call the stub.
>> -    } else {
>> -      // Not sure how this can be happen but be defensive
>> -      JVMCI_ERROR("single-use stub should not exist");
>> -    }
>> -  } else {
>> +  if (!a.far_branches()) {
>>      // If not using far branches, patch this call directly to dest.
>>      set_destination(dest);
>> +    return;
>> +  }
>> +
>> +  if (!is_NativeCallTrampolineStub_at(instruction_address() + displacement())) {
>> +    address stub = a.emit_trampoline_stub(instruction_address() - cbuf.insts()->start(), dest);
>> +    if (stub == nullptr) {
>> +      JVMCI_ERROR("could not emit trampoline stub - code cache is full");
>> +    }
>> +    // The relocation is created while emitting the stub will ensure this
>> +    // call instruction is subsequently patched to call the stub.
>> +  } else {
>> +    // Not sure how this can be happen but be defensive
>> +    JVMCI_ERROR("single-use stub should not exist");
>>    }
>>  }
>>  #endif
>
> Yes. Or maybe
> 
> 
> // Generate a trampoline for a branch to dest.  If there's no need for a                                                                                                                              
> // trampoline, simply patch the call directly to dest.                                                                                                                                                
> void NativeCall::trampoline_jump(CodeBuffer &cbuf, address dest, JVMCI_TRAPS) {
>   MacroAssembler a(&cbuf);
> 
>   if (! a.far_branches()) {
>     // If not using far branches, patch this call directly to dest.                                                                                                                                   
>     set_destination(dest);
>   } else if (!is_NativeCallTrampolineStub_at(instruction_address() + displacement())) {
>     // If we want far branches and there isn't a trampoline stub, emit one.                                                                                                                           
>     address stub = a.emit_trampoline_stub(instruction_address() - cbuf.insts()->start(), dest);
>     if (stub == nullptr) {
>       JVMCI_ERROR("could not emit trampoline stub - code cache is full");
>     }
>     // The relocation is created while emitting the stub will ensure this                                                                                                                             
>     // call instruction is subsequently patched to call the stub.                                                                                                                                     
>   } else {
>     // Not sure how this can be happen but be defensive                                                                                                                                               
>     JVMCI_ERROR("single-use stub should not exist");
>   }
> }

Done.

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

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


More information about the hotspot-compiler-dev mailing list