164 lines · plain
1# RUN: llvm-mc -triple riscv32 -M no-aliases %s -show-encoding \2# RUN: | FileCheck -check-prefix=INSTR %s3# RUN: llvm-mc -filetype=obj -triple riscv32 -mattr=+c %s \4# RUN: | llvm-readobj -r - | FileCheck -check-prefix=RELOC %s5 6# Check prefixes:7# RELOC - Check the relocation in the object.8# INSTR - Check the instruction is handled properly by the ASMPrinter9 10.long foo11# RELOC: R_RISCV_32 foo12 13.quad foo14# RELOC: R_RISCV_64 foo15 16lui t1, %hi(foo)17# RELOC: R_RISCV_HI20 foo 0x018# INSTR: lui t1, %hi(foo)19 20lui t1, %hi(foo+4)21# RELOC: R_RISCV_HI20 foo 0x422# INSTR: lui t1, %hi(foo+4)23 24lui t1, %tprel_hi(foo)25# RELOC: R_RISCV_TPREL_HI20 foo 0x026# INSTR: lui t1, %tprel_hi(foo)27 28lui t1, %tprel_hi(foo+4)29# RELOC: R_RISCV_TPREL_HI20 foo 0x430# INSTR: lui t1, %tprel_hi(foo+4)31 32addi t1, t1, %lo(foo)33# RELOC: R_RISCV_LO12_I foo 0x034# INSTR: addi t1, t1, %lo(foo)35 36addi t1, t1, %lo(foo+4)37# RELOC: R_RISCV_LO12_I foo 0x438# INSTR: addi t1, t1, %lo(foo+4)39 40addi t1, t1, %tprel_lo(foo)41# RELOC: R_RISCV_TPREL_LO12_I foo 0x042# INSTR: addi t1, t1, %tprel_lo(foo)43 44addi t1, t1, %tprel_lo(foo+4)45# RELOC: R_RISCV_TPREL_LO12_I foo 0x446# INSTR: addi t1, t1, %tprel_lo(foo+4)47 48sb t1, %lo(foo)(a2)49# RELOC: R_RISCV_LO12_S foo 0x050# INSTR: sb t1, %lo(foo)(a2)51 52sb t1, %lo(foo+4)(a2)53# RELOC: R_RISCV_LO12_S foo 0x454# INSTR: sb t1, %lo(foo+4)(a2)55 56sb t1, %tprel_lo(foo)(a2)57# RELOC: R_RISCV_TPREL_LO12_S foo 0x058# INSTR: sb t1, %tprel_lo(foo)(a2)59 60sb t1, %tprel_lo(foo+4)(a2)61# RELOC: R_RISCV_TPREL_LO12_S foo 0x462# INSTR: sb t1, %tprel_lo(foo+4)(a2)63 64.L0:65auipc t1, %pcrel_hi(foo)66# RELOC: R_RISCV_PCREL_HI20 foo 0x067# INSTR: auipc t1, %pcrel_hi(foo)68 69auipc t1, %pcrel_hi(foo+4)70# RELOC: R_RISCV_PCREL_HI20 foo 0x471# INSTR: auipc t1, %pcrel_hi(foo+4)72 73addi t1, t1, %pcrel_lo(.L0)74# RELOC: R_RISCV_PCREL_LO12_I .L0 0x075# INSTR: addi t1, t1, %pcrel_lo(.L0)76 77sb t1, %pcrel_lo(.L0)(a2)78# RELOC: R_RISCV_PCREL_LO12_S .L0 0x079# INSTR: sb t1, %pcrel_lo(.L0)(a2)80 81.L1:82auipc t1, %got_pcrel_hi(foo)83# RELOC: R_RISCV_GOT_HI20 foo 0x084# INSTR: auipc t1, %got_pcrel_hi(foo)85 86addi t1, t1, %pcrel_lo(.L1)87# RELOC: R_RISCV_PCREL_LO12_I .L1 0x088# INSTR: addi t1, t1, %pcrel_lo(.L1)89 90sb t1, %pcrel_lo(.L1)(a2)91# RELOC: R_RISCV_PCREL_LO12_S .L1 0x092# INSTR: sb t1, %pcrel_lo(.L1)(a2)93 94# Check that GOT relocations aren't evaluated to a constant when the symbol is95# in the same object file.96.L2:97auipc t1, %got_pcrel_hi(.L1)98# RELOC: R_RISCV_GOT_HI20 .L1 0x099# INSTR: auipc t1, %got_pcrel_hi(.L1)100 101addi t1, t1, %pcrel_lo(.L2)102# RELOC: R_RISCV_PCREL_LO12_I .L2 0x0103# INSTR: addi t1, t1, %pcrel_lo(.L2)104 105sb t1, %pcrel_lo(.L2)(a2)106# RELOC: R_RISCV_PCREL_LO12_S .L2 0x0107# INSTR: sb t1, %pcrel_lo(.L2)(a2)108 109.L3:110auipc t1, %tls_ie_pcrel_hi(foo)111# RELOC: R_RISCV_TLS_GOT_HI20 foo 0x0112# INSTR: auipc t1, %tls_ie_pcrel_hi(foo)113 114addi t1, t1, %pcrel_lo(.L3)115# RELOC: R_RISCV_PCREL_LO12_I .L3 0x0116# INSTR: addi t1, t1, %pcrel_lo(.L3)117 118sb t1, %pcrel_lo(.L3)(a2)119# RELOC: R_RISCV_PCREL_LO12_S .L3 0x0120# INSTR: sb t1, %pcrel_lo(.L3)(a2)121 122.L4:123auipc t1, %tls_gd_pcrel_hi(foo)124# RELOC: R_RISCV_TLS_GD_HI20 foo 0x0125# INSTR: auipc t1, %tls_gd_pcrel_hi(foo)126 127addi t1, t1, %pcrel_lo(.L4)128# RELOC: R_RISCV_PCREL_LO12_I .L4 0x0129# INSTR: addi t1, t1, %pcrel_lo(.L4)130 131sb t1, %pcrel_lo(.L4)(a2)132# RELOC: R_RISCV_PCREL_LO12_S .L4 0x0133# INSTR: sb t1, %pcrel_lo(.L4)(a2)134 135add t1, t1, tp, %tprel_add(foo)136# RELOC: R_RISCV_TPREL_ADD foo 0x0137# INSTR: add t1, t1, tp, %tprel_add(foo)138 139jal zero, foo140# RELOC: R_RISCV_JAL141# INSTR: jal zero, foo142 143# Since foo is undefined, this will be relaxed to (bltu; jal)144bgeu a0, a1, foo145# RELOC: R_RISCV_JAL146# INSTR: bgeu a0, a1, foo147 148.L5:149auipc a0, %tlsdesc_hi(a_symbol)150# RELOC: R_RISCV_TLSDESC_HI20151# INSTR: auipc a0, %tlsdesc_hi(a_symbol)152 153lw a1, %tlsdesc_load_lo(.L5)(a0)154# RELOC: R_RISCV_TLSDESC_LOAD_LO12155# INSTR: lw a1, %tlsdesc_load_lo(.L5)(a0)156 157addi a0, a0, %tlsdesc_add_lo(.L5)158# RELOC: R_RISCV_TLSDESC_ADD_LO12159# INSTR: addi a0, a0, %tlsdesc_add_lo(.L5)160 161jalr t0, 0(a1), %tlsdesc_call(.L5)162# RELOC: R_RISCV_TLSDESC_CALL163# INSTR: jalr t0, 0(a1), %tlsdesc_call(.L5)164