Integrated: 8303022: "assert(allocates2(pc)) failed: not in CodeBuffer memory" When linking downcall handle
Jorn Vernee
jvernee at openjdk.org
Wed Mar 15 23:46:31 UTC 2023
On Tue, 7 Mar 2023 18:02:41 GMT, Jorn Vernee <jvernee at 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
This pull request has now been integrated.
Changeset: 2b81faeb
Author: Jorn Vernee <jvernee at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/2b81faeb3514060e6c8c950ef4e39e299c43199d
Stats: 102 lines in 8 files changed: 81 ins; 0 del; 21 mod
8303022: "assert(allocates2(pc)) failed: not in CodeBuffer memory" When linking downcall handle
Reviewed-by: kvn, vlivanov
-------------
PR: https://git.openjdk.org/jdk/pull/12908
More information about the hotspot-compiler-dev
mailing list