RFR(S) 8191437: AOT doesn't work easily after thread local handshakes
Andrew Haley
aph at redhat.com
Thu Nov 30 16:51:58 UTC 2017
On 29/11/17 21:07, dean.long at oracle.com wrote:
> Pull request:
>
> https://github.com/graalvm/graal/pull/265
>
> I could use some Aarch64 reviewers and testers.
One thing breaks, and we need this hunk instead:
diff -r 4c25d37d8557 src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java Thu Nov 30 16:08:13 2017 +0100
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotSafepointOp.java Thu Nov 30 16:48:18 2017 +0000
@@ -94,4 +105,14 @@
}
}
+ private static void emitThreadLocalPoll(CompilationResultBuilder crb, AArch64MacroAssembler masm, GraalHotSpotVMConfig config, boolean onReturn, Register thread, Register scratch, LIRFrameState state) {
+ assert config.threadPollingPageOffset >= 0;
+ masm.ldr(64, scratch, masm.makeAddress(thread, config.threadPollingPageOffset, 8));
+ crb.recordMark(onReturn ? config.MARKID_POLL_RETURN_FAR : config.MARKID_POLL_FAR);
+ if (state != null) {
+ crb.recordInfopoint(masm.position(), state, InfopointReason.SAFEPOINT);
+ }
+ masm.ldr(32, zr, AArch64Address.createBaseRegisterOnlyAddress(scratch));
+ }
+
}
The only difference from what you pushed in MARKID_POLL_*FAR instead
of MARKID_POLL_*NEAR.
This is because we don't support MARKID_POLL_NEAR relocs in jvmci.
They can't happen, anyway: that's effectively dead code in AArch64's
Graal.
Thanks.
--
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671
More information about the hotspot-dev
mailing list