# REQUIRES: loongarch # RUN: rm -rf %t && split-file %s %t # RUN: llvm-mc --filetype=obj --triple=loongarch32-unknown-elf %t/a.s -o %t/a.la32.o # RUN: llvm-mc --filetype=obj --triple=loongarch64-unknown-elf %t/a.s -o %t/a.la64.o # RUN: ld.lld %t/a.la32.o -shared -T %t/a.t -o %t/a.la32.so # RUN: ld.lld %t/a.la64.o -shared -T %t/a.t -o %t/a.la64.so # RUN: llvm-objdump -d --no-show-raw-insn %t/a.la32.so | FileCheck --check-prefixes=DIS,DIS32 %s # RUN: llvm-objdump -d --no-show-raw-insn %t/a.la64.so | FileCheck --check-prefixes=DIS,DIS64 %s ## PLT should be present in this case. # DIS: Disassembly of section .plt: # DIS: <.plt>: # DIS: 234020: pcaddu12i $t3, 510 # DIS32-NEXT: ld.w $t3, $t3, 84 # DIS64-NEXT: ld.d $t3, $t3, 184 # DIS-NEXT: jirl $t1, $t3, 0 # DIS-NEXT: nop # DIS: Disassembly of section .text: # DIS: : # DIS-NEXT: nop # DIS-NEXT: nop # DIS-NEXT: nop # DIS-NEXT: pcalau12i $t0, -510 # DIS-NEXT: jirl $zero, $t0, 32 # RUN: llvm-mc --filetype=obj --triple=loongarch32-unknown-elf %t/error.s -o %t/error.la32.o # RUN: llvm-mc --filetype=obj --triple=loongarch64-unknown-elf %t/error.s -o %t/error.la64.o # RUN: not ld.lld %t/error.la32.o -shared -o %t/error.la32.so 2>&1 | FileCheck --check-prefix=ERR %s # RUN: not ld.lld %t/error.la64.o -shared -o %t/error.la64.so 2>&1 | FileCheck --check-prefix=ERR %s # ERR: error: relocation R_LARCH_PCALA_LO12 cannot be used against symbol 'bar'; recompile with -fPIC #--- a.t SECTIONS { .plt 0x234000: { *(.plt) } .text 0x432000: { *(.text) } } #--- a.s .p2align 12 .global foo foo: ## The nops are for pushing the relocs off page boundary, to better see the ## page-aligned semantics in action. nop nop nop ## The offsets should be -510 (0x234 - 0x432) and 32 (PLT header size + 0) ## respectively. pcalau12i $t0, %pc_hi20(bar) jirl $zero, $t0, %pc_lo12(bar) #--- error.s .global foo foo: pcalau12i $t0, %pc_hi20(bar) ld.w $t0, $t0, %pc_lo12(bar)