93 lines · plain
1# REQUIRES: loongarch2## Test LA64 IE -> LE in various cases.3 4# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax %s -o %t.o5 6## Also check --emit-relocs.7# RUN: ld.lld --emit-relocs %t.o -o %t8# RUN: llvm-readelf -x .got %t 2>&1 | FileCheck --check-prefix=LE-GOT %s9# RUN: llvm-objdump -dr --no-show-raw-insn %t | FileCheck --check-prefixes=LER %s10 11# RUN: ld.lld --emit-relocs --no-relax %t.o -o %t.norelax12# RUN: llvm-readelf -x .got %t.norelax 2>&1 | FileCheck --check-prefix=LE-GOT %s13# RUN: llvm-objdump -dr --no-show-raw-insn %t.norelax | FileCheck --check-prefixes=LE %s14 15# LE-GOT: could not find section '.got'16 17# a@tprel = st_value(a) = 0xfff18# b@tprel = st_value(a) = 0x100019# LE: 20158: nop20# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 a21# LE-NEXT: R_LARCH_RELAX *ABS*22# LE-NEXT: ori $a0, $zero, 409523# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 a24# LE-NEXT: R_LARCH_RELAX *ABS*25# LE-NEXT: add.d $a0, $a0, $tp26# LE-NEXT: 20164: lu12i.w $a1, 127# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 b28# LE-NEXT: ori $a1, $a1, 029# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 b30# LE-NEXT: add.d $a1, $a1, $tp31# LE-NEXT: 20170: nop32# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 a33# LE-NEXT: R_LARCH_RELAX *ABS*34# LE-NEXT: lu12i.w $a3, 135# LE-NEXT: R_LARCH_TLS_IE_PC_HI20 b36# LE-NEXT: R_LARCH_RELAX *ABS*37# LE-NEXT: ori $a2, $zero, 409538# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 a39# LE-NEXT: ori $a3, $a3, 040# LE-NEXT: R_LARCH_TLS_IE_PC_LO12 b41# LE-NEXT: add.d $a2, $a2, $tp42# LE-NEXT: add.d $a3, $a3, $tp43 44# LER: 20158: ori $a0, $zero, 409545# LER-NEXT: R_LARCH_TLS_IE_PC_HI20 a46# LER-NEXT: R_LARCH_RELAX *ABS*47# LER-NEXT: R_LARCH_TLS_IE_PC_LO12 a48# LER-NEXT: R_LARCH_RELAX *ABS*49# LER-NEXT: add.d $a0, $a0, $tp50# LER-NEXT: 20160: lu12i.w $a1, 151# LER-NEXT: R_LARCH_TLS_IE_PC_HI20 b52# LER-NEXT: ori $a1, $a1, 053# LER-NEXT: R_LARCH_TLS_IE_PC_LO12 b54# LER-NEXT: add.d $a1, $a1, $tp55# LER-NEXT: 2016c: lu12i.w $a3, 156# LER-NEXT: R_LARCH_TLS_IE_PC_HI20 a57# LER-NEXT: R_LARCH_RELAX *ABS*58# LER-NEXT: R_LARCH_TLS_IE_PC_HI20 b59# LER-NEXT: R_LARCH_RELAX *ABS*60# LER-NEXT: ori $a2, $zero, 409561# LER-NEXT: R_LARCH_TLS_IE_PC_LO12 a62# LER-NEXT: ori $a3, $a3, 063# LER-NEXT: R_LARCH_TLS_IE_PC_LO12 b64# LER-NEXT: add.d $a2, $a2, $tp65# LER-NEXT: add.d $a3, $a3, $tp66 67la.tls.ie $a0, a # relax68add.d $a0, $a0, $tp69 70# PCALAU12I does not have R_LARCH_RELAX. No relaxation.71pcalau12i $a1, %ie_pc_hi20(b)72ld.d $a1, $a1, %ie_pc_lo12(b)73add.d $a1, $a1, $tp74 75# Test instructions are interleaved.76# PCALAU12I has an R_LARCH_RELAX. We perform relaxation.77pcalau12i $a2, %ie_pc_hi20(a)78.reloc .-4, R_LARCH_RELAX, 079pcalau12i $a3, %ie_pc_hi20(b)80.reloc .-4, R_LARCH_RELAX, 081ld.d $a2, $a2, %ie_pc_lo12(a)82ld.d $a3, $a3, %ie_pc_lo12(b)83add.d $a2, $a2, $tp84add.d $a3, $a3, $tp85 86.section .tbss,"awT",@nobits87.globl a88.zero 0xfff ## Place a at 0xfff, LE needs only one ins.89a:90.zero 1 ## Place b at 0x1000, LE needs two ins.91b:92.zero 493