[aarch64-port-dev ] Very large code caches
Leslie Zhai
lesliezhai at llvm.org.cn
Wed May 16 02:53:21 UTC 2018
Hi HotSpot developers,
I am trying to implement `patch_verified_entry` for other targets, such
as riscv, but I found that:
> but the real problem is that the resulting call
> site is not MT-safe: it can't be patched atomically. To make that
> work we'd have to move the destination address into the constant pool.
So aarch64 hasn't implemented patched *atomically* yet? And I also investigate sparc target:
0: void NativeJump::insert(address code_pos, address entry) {
0: Unimplemented();
^ :P
0: }
0:
0: // MT safe inserting of a jump over an unknown instruction sequence (used by nmethod::makeZombie)
0: // The problem: jump_to <dest> is a 3-word instruction (including its delay slot).
0: // Atomic write can be only with 1 word.
0: void NativeJump::patch_verified_entry(address entry, address verified_entry, address dest) {
0: // Here's one way to do it: Pre-allocate a three-word jump sequence somewhere
0: // in the header of the nmethod, within a short branch's span of the patch point.
0: // Set up the jump sequence using NativeJump::insert, and then use an annulled
0: // unconditional branch at the target site (an atomic 1-word update).
0: // Limitations: You can only patch nmethods, with any given nmethod patched at
0: // most once, and the patch must be in the nmethod's header.
0: // It's messy, but you can ask the CodeCache for the nmethod containing the
0: // target address.
0:
0: // %%%%% For now, do something MT-stupid:
^ :P
0: ResourceMark rm;
0: int code_size = 1 * BytesPerInstWord;
0: CodeBuffer cb(verified_entry, code_size + 1);
0: MacroAssembler* a = new MacroAssembler(&cb);
4848: a->ldsw(G0, 0, O7); // "ld" must agree with code in the signal handler
0: ICache::invalidate_range(verified_entry, code_size);
0: }
It seems not implemented already neither? please share your implementation experience, thanks a lot!
--
Regards,
Leslie Zhai
More information about the hotspot-compiler-dev
mailing list