RFR: 8262073: assert(allocates2(pc)) failed: not in CodeBuffer memory
Yangfei (Felix)
felix.yang at huawei.com
Sat Feb 20 12:49:32 UTC 2021
Hi,
Please review this 8u aarch64-specific fix:
Bug: https://bugs.openjdk.java.net/browse/JDK-8262073
Webrev: http://cr.openjdk.java.net/~fyang/8262073/webrev.00/
Call chain for creating itable stub: create_itable_stub -> load_klass -> decode_klass_not_null -> reinit_heapbase
As reported on the issue, we are emitting three instructions in reinit_heapbase for this case: mov, movk and movk.
Note that we also emit insns in decode_klass_not_null moving narrow_klass_base into a register.
To be safe, I think we should also assume insns for moving narrow_klass_base to be: mov, movk and movk.
Patch increases size for both kind of stubs: 16 bytes for itable stub (which calls load_klass twice) and 8 byte for vtable stub (which calls load_klass once).
Previously, we reserve extra 216 bytes when DebugVtables is on. This is enough for the itable stub creation case.
But this won't work for the vtable stub creation in which case we will exceed the code buffer limit.
The reason is that we have two "if (DebugVtables)" blocks in vtable stub creation code.
For this case, patch adopts the same way as ppc & sparc: set size to 1000 bytes when those debug options are turned on.
Performed full jtreg test on aarch64-linux-gnu. OK?
Thanks,
Felix
More information about the jdk8u-dev
mailing list