brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 3dc3121 Raw
160 lines · plain
1# REQUIRES: loongarch2# RUN: rm -rf %t && split-file %s %t && cd %t3# RUN: llvm-mc -filetype=obj -triple=loongarch64 a.s -o a.64.o4# RUN: llvm-mc -filetype=obj -triple=loongarch64 c.s -o c.64.o5# RUN: ld.lld -shared -soname=c.64.so c.64.o -o c.64.so6# RUN: llvm-mc -filetype=obj -triple=loongarch32 --defsym ELF32=1 a.s -o a.32.o7# RUN: llvm-mc -filetype=obj -triple=loongarch32 --defsym ELF32=1 c.s -o c.32.o8# RUN: ld.lld -shared -soname=c.32.so c.32.o -o c.32.so9 10# RUN: ld.lld -shared -z now a.64.o c.64.o -o a.64.so11# RUN: llvm-readobj -r -x .got a.64.so | FileCheck --check-prefix=GD64-RELA %s12# RUN: llvm-objdump --no-show-raw-insn -h -d a.64.so | FileCheck %s --check-prefix=GD6413 14# RUN: ld.lld -shared -z now a.64.o c.64.o -o rel.64.so -z rel15# RUN: llvm-readobj -r -x .got rel.64.so | FileCheck --check-prefix=GD64-REL %s16 17## Transition from TLSDESC to IE/LE.18# RUN: ld.lld -e 0 -z now a.64.o c.64.o -o a.64.le19# RUN: llvm-readobj -r -x .got a.64.le 2>&1 | FileCheck --check-prefix=LE64-RELA %s20# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck --check-prefix=LE64 %s21 22# RUN: ld.lld -e 0 -z now a.64.o c.64.so -o a.64.ie23# RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s24# RUN: llvm-objdump --no-show-raw-insn -d a.64.ie | FileCheck --check-prefix=IE64 %s25 26## 32-bit code is mostly the same. We only test a few variants.27 28# RUN: ld.lld -shared -z now a.32.o c.32.o -o rel.32.so -z rel29# RUN: llvm-readobj -r -x .got rel.32.so | FileCheck --check-prefix=GD32-REL %s30 31# GD64-RELA:      .rela.dyn {32# GD64-RELA-NEXT:   0x20400 R_LARCH_TLS_DESC64 - 0x7FF33# GD64-RELA-NEXT:   0x203E0 R_LARCH_TLS_DESC64 a 0x034# GD64-RELA-NEXT:   0x203F0 R_LARCH_TLS_DESC64 c 0x035# GD64-RELA-NEXT: }36# GD64-RELA:      Hex dump of section '.got':37# GD64-RELA-NEXT: 0x000203e0 00000000 00000000 00000000 00000000 .38# GD64-RELA-NEXT: 0x000203f0 00000000 00000000 00000000 00000000 .39# GD64-RELA-NEXT: 0x00020400 00000000 00000000 00000000 00000000 .40 41# GD64-REL:      .rel.dyn {42# GD64-REL-NEXT:   0x203E8 R_LARCH_TLS_DESC64 -43# GD64-REL-NEXT:   0x203C8 R_LARCH_TLS_DESC64 a44# GD64-REL-NEXT:   0x203D8 R_LARCH_TLS_DESC64 c45# GD64-REL-NEXT: }46# GD64-REL:      Hex dump of section '.got':47# GD64-REL-NEXT: 0x000203c8 00000000 00000000 00000000 00000000 .48# GD64-REL-NEXT: 0x000203d8 00000000 00000000 00000000 00000000 .49# GD64-REL-NEXT: 0x000203e8 00000000 00000000 ff070000 00000000 .50 51# GD64:      .got     00000030 00000000000203e052 53## &.got[a]-. = 0x203e0 - 0x102e0: 0x10 pages, page offset 0x3e054# GD64:        102e0: pcalau12i $a0, 1655# GD64-NEXT:          addi.d $a0, $a0, 99256# GD64-NEXT:          ld.d $ra, $a0, 057# GD64-NEXT:          jirl $ra, $ra, 058# GD64-NEXT:          add.d $a1, $a0, $tp59 60## &.got[b]-. = 0x203e0+32 - 0x102f4: 0x10 pages, page offset 0x40061# GD64:        102f4: pcalau12i $a0, 1662# GD64-NEXT:          addi.d $a0, $a0, 102463# GD64-NEXT:          ld.d $ra, $a0, 064# GD64-NEXT:          jirl $ra, $ra, 065# GD64-NEXT:          add.d $a2, $a0, $tp66 67## &.got[c]-. = 0x23e0+16 - 0x10308: 0x10 pages, page offset 0x3f068# GD64:        10308: pcalau12i $a0, 1669# GD64-NEXT:          addi.d $a0, $a0, 100870# GD64-NEXT:          ld.d $ra, $a0, 071# GD64-NEXT:          jirl $ra, $ra, 072# GD64-NEXT:          add.d $a3, $a0, $tp73 74# LE64-RELA: could not find section '.got'75 76# LE64-LABEL: <.text>:77## st_value(a) = 878# LE64-NEXT:         nop79# LE64-NEXT:         nop80# LE64-NEXT:         nop81# LE64-NEXT:         ori     $a0, $zero, 882# LE64-NEXT:         add.d   $a1, $a0, $tp83## st_value(b) = 204784# LE64-NEXT:         nop85# LE64-NEXT:         nop86# LE64-NEXT:         nop87# LE64-NEXT:         ori     $a0, $zero, 204788# LE64-NEXT:         add.d   $a2, $a0, $tp89## st_value(c) = 204890# LE64-NEXT:         nop91# LE64-NEXT:         nop92# LE64-NEXT:         nop93# LE64-NEXT:         ori     $a0, $zero, 204894# LE64-NEXT:         add.d   $a3, $a0, $tp95 96# IE64-RELA:      .rela.dyn {97# IE64-RELA-NEXT:   0x303A8 R_LARCH_TLS_TPREL64 c 0x098# IE64-RELA-NEXT: }99# IE64-RELA:      Hex dump of section '.got':100# IE64-RELA-NEXT: 0x000303a8 00000000 00000000                  .101 102## a and b are optimized to use LE. c is optimized to IE.103# IE64-LABEL: <.text>:104# IE64-NEXT:         nop105# IE64-NEXT:         nop106# IE64-NEXT:         nop107# IE64-NEXT:         ori     $a0, $zero, 8108# IE64-NEXT:         add.d   $a1, $a0, $tp109# IE64-NEXT:         nop110# IE64-NEXT:         nop111# IE64-NEXT:         nop112# IE64-NEXT:         ori     $a0, $zero, 2047113# IE64-NEXT:         add.d   $a2, $a0, $tp114## &.got[c]-. = 0x303a8 - 0x202b8: 0x10 pages, page offset 0x3a8115# IE64-NEXT:         nop116# IE64-NEXT:         nop117# IE64-NEXT:  202b8: pcalau12i $a0, 16118# IE64-NEXT:         ld.d      $a0, $a0, 936119# IE64-NEXT:         add.d   $a3, $a0, $tp120 121# GD32-REL:      .rel.dyn {122# GD32-REL-NEXT:    0x20270 R_LARCH_TLS_DESC32 -123# GD32-REL-NEXT:    0x20260 R_LARCH_TLS_DESC32 a124# GD32-REL-NEXT:    0x20268 R_LARCH_TLS_DESC32 c125# GD32-REL-NEXT: }126# GD32-REL:      Hex dump of section '.got':127# GD32-REL-NEXT: 0x00020260 00000000 00000000 00000000 00000000 .128# GD32-REL-NEXT: 0x00020270 00000000 ff070000                   .129 130#--- a.s131.macro add dst, src1, src2132.ifdef ELF32133add.w \dst, \src1, \src2134.else135add.d \dst, \src1, \src2136.endif137.endm138 139la.tls.desc $a0, a140add $a1, $a0, $tp141 142la.tls.desc $a0, b143add $a2, $a0, $tp144 145la.tls.desc $a0, c146add $a3, $a0, $tp147 148.section .tbss,"awT",@nobits149.globl a150.zero 8151a:152.zero 2039  ## Place b at 0x7ff153b:154.zero 1155 156#--- c.s157.section .tbss,"awT",@nobits158.globl c159c: .zero 4160