[aarch64-port-dev ] RFR: 8144498: aarch64: large code cache generates SEGV
Andrew Haley
aph at redhat.com
Fri Dec 4 16:14:03 UTC 2015
Your fix looks OK.
However, there is one other fix which would be nice.
We use call relocs for things other than bl instructions. This
is because some things (e.g. MachUEPNode::emit) do this:
__ far_jump(RuntimeAddress(SharedRuntime::get_ic_miss_stub()));
Only bl immediate instructions are ever used to jump to trampolines.
This is essential because they must be patchable.
Because of this, in here:
if (is_call()) {
address trampoline = nativeCall_at(orig_addr)->get_trampoline();
if (trampoline) {
return nativeCallTrampolineStub_at(trampoline)->destination();
}
}
the is_call() could be replaced by NativeCall::is_call_at().
Otherwise we're pointlessly decoding instructions and chasing
nonexistent trampolines. Could you try that?
Thanks,
Andrew.
More information about the aarch64-port-dev
mailing list