From: Alex Bradbury Date: Fri, 22 Mar 2019 10:20:21 +0000 (+0000) Subject: [RISCV][NFC] Add test case to MC/RISCV/linker-relaxation.s showing incorrect relocati... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49e838386166e09d38a85747499d4076f5696db5;p=llvm [RISCV][NFC] Add test case to MC/RISCV/linker-relaxation.s showing incorrect relocations being emitted A follow-up patch will fix this case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356736 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/MC/RISCV/linker-relaxation.s b/test/MC/RISCV/linker-relaxation.s index 2455f3bae70..0d50b0ac174 100644 --- a/test/MC/RISCV/linker-relaxation.s +++ b/test/MC/RISCV/linker-relaxation.s @@ -45,6 +45,7 @@ sb t1, %lo(foo)(a2) # RELAX-FIXUP: fixup A - offset: 0, value: %lo(foo), kind: fixup_riscv_lo12_s # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax +1: auipc t1, %pcrel_hi(foo) # NORELAX-RELOC: R_RISCV_PCREL_HI20 foo 0x0 # NORELAX-RELOC-NOT: R_RISCV_RELAX @@ -53,20 +54,20 @@ auipc t1, %pcrel_hi(foo) # RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_riscv_pcrel_hi20 # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax -addi t1, t1, %pcrel_lo(foo) -# NORELAX-RELOC: R_RISCV_PCREL_LO12_I foo 0x0 +addi t1, t1, %pcrel_lo(1b) +# NORELAX-RELOC: R_RISCV_PCREL_LO12_I .Ltmp0 0x0 # NORELAX-RELOC-NOT: R_RISCV_RELAX -# RELAX-RELOC: R_RISCV_PCREL_LO12_I foo 0x0 +# RELAX-RELOC: R_RISCV_PCREL_LO12_I .Ltmp0 0x0 # RELAX-RELOC: R_RISCV_RELAX - 0x0 -# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_riscv_pcrel_lo12_i +# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(.Ltmp0), kind: fixup_riscv_pcrel_lo12_i # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax -sb t1, %pcrel_lo(foo)(a2) -# NORELAX-RELOC: R_RISCV_PCREL_LO12_S foo 0x0 +sb t1, %pcrel_lo(1b)(a2) +# NORELAX-RELOC: R_RISCV_PCREL_LO12_S .Ltmp0 0x0 # NORELAX-RELOC-NOT: R_RISCV_RELAX -# RELAX-RELOC: R_RISCV_PCREL_LO12_S foo 0x0 +# RELAX-RELOC: R_RISCV_PCREL_LO12_S .Ltmp0 0x0 # RELAX-RELOC: R_RISCV_RELAX - 0x0 -# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_riscv_pcrel_lo12_s +# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(.Ltmp0), kind: fixup_riscv_pcrel_lo12_s # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax @@ -111,6 +112,7 @@ sb t1, %lo(bar)(a2) # RELAX-FIXUP: fixup A - offset: 0, value: %lo(bar), kind: fixup_riscv_lo12_s # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax +2: auipc t1, %pcrel_hi(bar) # NORELAX-RELOC-NOT: R_RISCV_PCREL_HI20 # NORELAX-RELOC-NOT: R_RISCV_RELAX @@ -119,8 +121,22 @@ auipc t1, %pcrel_hi(bar) # RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_hi(bar), kind: fixup_riscv_pcrel_hi20 # RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax -# TODO/FIXME: %pcrel_lo(bar) will produce an error finding the corresponding -# %pcrel_hi. +# TODO/FIXME: The generated PCREL_LO relocations are incorrect. +# RISCVMCExpr::evaluatePCRelLo should not be evaluating the fixup when linker +# relaxation is enabled. -#addi t1, t1, %pcrel_lo(bar) -#sb t1, %pcrel_lo(bar)(a2) +addi t1, t1, %pcrel_lo(2b) +# NORELAX-RELOC-NOT: R_RISCV_PCREL_LO12_I +# NORELAX-RELOC-NOT: R_RISCV_RELAX +# RELAX-RELOC: R_RISCV_PCREL_LO12_I bar 0x4 +# RELAX-RELOC: R_RISCV_RELAX - 0x0 +# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(.Ltmp1), kind: fixup_riscv_pcrel_lo12_i +# RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax + +sb t1, %pcrel_lo(2b)(a2) +# NORELAX-RELOC-NOT: R_RISCV_PCREL_LO12_S +# NORELAX-RELOC-NOT: R_RISCV_RELAX +# RELAX-RELOC: R_RISCV_PCREL_LO12_S bar 0x8 +# RELAX-RELOC: R_RISCV_RELAX - 0x0 +# RELAX-FIXUP: fixup A - offset: 0, value: %pcrel_lo(.Ltmp1), kind: fixup_riscv_pcrel_lo12_s +# RELAX-FIXUP: fixup B - offset: 0, value: 0, kind: fixup_riscv_relax