llvm/lld/test/ELF/loongarch-reloc-pic.s

# REQUIRES: loongarch
# RUN: rm -rf %t && split-file %s %t

# RUN: llvm-mc --filetype=obj --triple=loongarch32 %t/32.s -o %t/32.o
# RUN: llvm-mc --filetype=obj --triple=loongarch64 %t/64.s -o %t/64.o
# RUN: ld.lld -shared %t/32.o -o %t/32.so
# RUN: llvm-nm %t/32.so | FileCheck --check-prefix=NM32 %s
# RUN: llvm-readobj -r %t/32.so | FileCheck --check-prefix=RELOC32 %s
# RUN: ld.lld -shared %t/64.o -o %t/64.so
# RUN: llvm-nm %t/64.so | FileCheck --check-prefix=NM64 %s
# RUN: llvm-readobj -r %t/64.so | FileCheck --check-prefix=RELOC64 %s

## R_LARCH_32 and R_LARCH_64 are absolute relocation types.
## In PIC mode, they create relative relocations if the symbol is non-preemptable.

# NM32: 000301fc d b
# NM64: 00030350 d b

# RELOC32:      .rela.dyn {
# RELOC32-NEXT:   0x301FC R_LARCH_RELATIVE - 0x301FC
# RELOC32-NEXT:   0x301F8 R_LARCH_32 a 0
# RELOC32-NEXT: }
# RELOC64:      .rela.dyn {
# RELOC64-NEXT:   0x30350 R_LARCH_RELATIVE - 0x30350
# RELOC64-NEXT:   0x30348 R_LARCH_64 a 0
# RELOC64-NEXT: }

#--- 32.s
.globl a, b
.hidden b

.data
.long a
b:
.long b

#--- 64.s
.globl a, b
.hidden b

.data
.quad a
b:
.quad b