gcc/aarch64-fix-tls-negative-offset.patch
2020-01-19 17:29:40 +08:00

25 lines
858 B
Diff

diff -urpN a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
--- a/gcc/config/aarch64/aarch64.c 2018-10-09 11:49:19.000000000 +0800
+++ b/gcc/config/aarch64/aarch64.c 2018-10-09 13:42:15.000000000 +0800
@@ -1619,7 +1619,7 @@ aarch64_load_symref_appropriately (rtx d
case SYMBOL_SMALL_TLSDESC:
{
machine_mode mode = GET_MODE (dest);
- rtx x0 = gen_rtx_REG (mode, R0_REGNUM);
+ rtx x0 = gen_rtx_REG (ptr_mode, R0_REGNUM);
rtx tp;
gcc_assert (mode == Pmode || mode == ptr_mode);
@@ -1635,6 +1635,11 @@ aarch64_load_symref_appropriately (rtx d
if (mode != Pmode)
tp = gen_lowpart (mode, tp);
+ if (mode != ptr_mode)
+ {
+ x0 = force_reg (mode, gen_rtx_SIGN_EXTEND (mode, x0));
+ }
+
emit_insn (gen_rtx_SET (dest, gen_rtx_PLUS (mode, tp, x0)));
set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
return;