On Fri, 10 Mar 2023 14:14:55 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

>> The issue is that the size of the code buffer is not large enough to hold 
>> the whole stub.
>> 
>> Proposed solution is to scale the size of the stub with the number of 
>> arguments. I've adjusted sizes for both downcall and upcall stubs. I've also 
>> dropped the number of relocations, since we're not really using any for 
>> downcalls, and for upcalls we only have 1 AFAICS. (the size of the 
>> relocations can not be zero however, as that leads to the relocation section 
>> [not being initialized][1], and triggering [an assert][2] later when the 
>> code blob is copied).
>> 
>> The way I've determined the new base size and per-argument size for stubs, 
>> is by first linking a stub without any arguments to get the required base 
>> size, and by then adding 20 `double` arguments to get a rough per-argument 
>> size. Both values have wiggle room as well. The sizes can be printed using 
>> e.g. `-XX:+LogCompilation`, and then looking for `nep_invoker_blob` and 
>> `upcall_stub*` in the log file. This experiment was done on a fastdebug 
>> build to account for additional debug code being generated. The included 
>> test is designed to try and maximize the size of the generated stub.
>> 
>> I've also updated `CodeBuffer::log_section_sizes` to print the in-use size, 
>> rather than just the capacity and free space.
>> 
>> [1]: 
>> https://github.com/openjdk/jdk/blob/56512cfe1f0682c98ba3488af3d03ccef632c016/src/hotspot/share/asm/codeBuffer.cpp#L119-L121
>> [2]: 
>> https://github.com/openjdk/jdk/blob/56512cfe1f0682c98ba3488af3d03ccef632c016/src/hotspot/share/asm/codeBuffer.cpp#L675
>
> Jorn Vernee has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   RISCV changes

Thanks for the reviews. I'm running one more round of tests before integrating.

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

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

Reply via email to