Skip to content

Commit dec7b74

Browse files
committed
1 parent 62cb7dc commit dec7b74

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

ext/opcache/jit/dynasm/dasm_arm64.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,12 @@ int dasm_encode(Dst_DECL, void *buffer)
482482
}
483483
break;
484484
case DASM_REL_A: {
485-
ptrdiff_t na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n) - (ptrdiff_t)cp + 4;
485+
ptrdiff_t na;
486+
if ((ins & 0x3000) == 0x3000) { /* ADRP */
487+
na = ((((ptrdiff_t)(*b++) << 32) | (unsigned int)n) & ~0xfff) - (((ptrdiff_t)cp + 4) & ~0xfff);
488+
} else {
489+
na = (((ptrdiff_t)(*b++) << 32) | (unsigned int)n) - (ptrdiff_t)cp + 4;
490+
}
486491
n = (int)na;
487492
CK_REL((ptrdiff_t)n == na, na);
488493
goto patchrel;

0 commit comments

Comments
 (0)