# HG changeset patch # User Doug Simon # Date 1387830066 -3600 # Node ID 37f0c86f58d4b3756a25731751a1bf1b5cb434a6 # Parent e6309fde98c8171f5e9829a20f9396686b53b0d1 fixed bug when safepoint polling page is not within 32-bit offset of code cache (exposed by -XX:+ForceUnreachable_ diff -r e6309fde98c8 -r 37f0c86f58d4 graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Mon Dec 23 20:57:34 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotSafepointOp.java Mon Dec 23 21:21:06 2013 +0100 @@ -72,16 +72,17 @@ } public static void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler asm, HotSpotVMConfig config, boolean atReturn, LIRFrameState state, Register scratch) { - final int pos = asm.codeBuffer.position(); if (isPollingPageFar(config)) { asm.movq(scratch, config.safepointPollingAddress); crb.recordMark(atReturn ? MARK_POLL_RETURN_FAR : MARK_POLL_FAR); + final int pos = asm.codeBuffer.position(); if (state != null) { crb.recordInfopoint(pos, state, InfopointReason.SAFEPOINT); } asm.testl(rax, new AMD64Address(scratch)); } else { crb.recordMark(atReturn ? MARK_POLL_RETURN_NEAR : MARK_POLL_NEAR); + final int pos = asm.codeBuffer.position(); if (state != null) { crb.recordInfopoint(pos, state, InfopointReason.SAFEPOINT); }