brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 140aa4c Raw
176 lines · plain
1# REQUIRES: loongarch2# RUN: rm -rf %t && split-file %s %t3 4## LoongArch psABI doesn't specify TLS relaxation. It can be handled the same way as gcc:5## (a) code sequence can be converted from `pcalau12i+addi.[wd]` to `pcaddi`.6## (b) dynamic relocations can be omitted for GD->LE relaxation.7 8# RUN: llvm-mc --filetype=obj --triple=loongarch32 %t/a.s -o %t/a.32.o9# RUN: llvm-mc --filetype=obj --triple=loongarch32 -mattr=+relax %t/a.s -o %t/a.32.relax.o10# RUN: llvm-mc --filetype=obj --triple=loongarch32 %t/bc.s -o %t/bc.32.o11# RUN: ld.lld -shared -soname=bc.so %t/bc.32.o -o %t/bc.32.so12# RUN: llvm-mc --filetype=obj --triple=loongarch32 %t/tga.s -o %t/tga.32.o13# RUN: llvm-mc --filetype=obj --triple=loongarch64 %t/a.s -o %t/a.64.o14# RUN: llvm-mc --filetype=obj --triple=loongarch64 %t/a.s -mattr=+relax -o %t/a.64.relax.o15# RUN: llvm-mc --filetype=obj --triple=loongarch64 %t/bc.s -o %t/bc.64.o16# RUN: ld.lld -shared -soname=bc.so %t/bc.64.o -o %t/bc.64.so17# RUN: llvm-mc --filetype=obj --triple=loongarch64 %t/tga.s -o %t/tga.64.o18 19## LA32 GD20# RUN: ld.lld -shared %t/a.32.o %t/bc.32.o -o %t/gd.32.so21# RUN: llvm-readobj -r %t/gd.32.so | FileCheck --check-prefix=GD32-REL %s22# RUN: llvm-objdump -d --no-show-raw-insn %t/gd.32.so | FileCheck --check-prefix=GD32 %s23# RUN: ld.lld -shared %t/a.32.relax.o %t/bc.32.o -o %t/gd.32.relax.so24# RUN: llvm-readobj -r %t/gd.32.relax.so | FileCheck --check-prefix=GD32-REL-RELAX %s25# RUN: llvm-objdump -d --no-show-raw-insn %t/gd.32.relax.so | FileCheck --check-prefix=GD32-RELAX %s26 27## LA32 GD -> LE28# RUN: ld.lld %t/a.32.o %t/bc.32.o %t/tga.32.o -o %t/le.3229# RUN: llvm-readelf -r %t/le.32 | FileCheck --check-prefix=NOREL %s30# RUN: llvm-readelf -x .got %t/le.32 | FileCheck --check-prefix=LE32-GOT %s31# RUN: ld.lld -pie %t/a.32.o %t/bc.32.o %t/tga.32.o -o %t/le-pie.3232# RUN: llvm-readelf -r %t/le-pie.32 | FileCheck --check-prefix=NOREL %s33# RUN: llvm-readelf -x .got %t/le-pie.32 | FileCheck --check-prefix=LE32-GOT %s34 35## LA32 GD -> IE36# RUN: ld.lld %t/a.32.o %t/bc.32.so %t/tga.32.o -o %t/ie.3237# RUN: llvm-readobj -r %t/ie.32 | FileCheck --check-prefix=IE32-REL %s38# RUN: llvm-readelf -x .got %t/ie.32 | FileCheck --check-prefix=IE32-GOT %s39 40## LA64 GD41# RUN: ld.lld -shared %t/a.64.o %t/bc.64.o -o %t/gd.64.so42# RUN: llvm-readobj -r %t/gd.64.so | FileCheck --check-prefix=GD64-REL %s43# RUN: llvm-objdump -d --no-show-raw-insn %t/gd.64.so | FileCheck --check-prefix=GD64 %s44# RUN: ld.lld -shared %t/a.64.relax.o %t/bc.64.o -o %t/gd.64.relax.so45# RUN: llvm-readobj -r %t/gd.64.relax.so | FileCheck --check-prefix=GD64-REL-RELAX %s46# RUN: llvm-objdump -d --no-show-raw-insn %t/gd.64.relax.so | FileCheck --check-prefix=GD64-RELAX %s47 48## LA64 GD -> LE49# RUN: ld.lld %t/a.64.o %t/bc.64.o %t/tga.64.o -o %t/le.6450# RUN: llvm-readelf -r %t/le.64 | FileCheck --check-prefix=NOREL %s51# RUN: llvm-readelf -x .got %t/le.64 | FileCheck --check-prefix=LE64-GOT %s52# RUN: ld.lld -pie %t/a.64.o %t/bc.64.o %t/tga.64.o -o %t/le-pie.6453# RUN: llvm-readelf -r %t/le-pie.64 | FileCheck --check-prefix=NOREL %s54# RUN: llvm-readelf -x .got %t/le-pie.64 | FileCheck --check-prefix=LE64-GOT %s55 56## LA64 GD -> IE57# RUN: ld.lld %t/a.64.o %t/bc.64.so %t/tga.64.o -o %t/ie.6458# RUN: llvm-readobj -r %t/ie.64 | FileCheck --check-prefix=IE64-REL %s59# RUN: llvm-readelf -x .got %t/ie.64 | FileCheck --check-prefix=IE64-GOT %s60 61# GD32-REL:      .rela.dyn {62# GD32-REL-NEXT:   0x20310 R_LARCH_TLS_DTPMOD32 a 0x063# GD32-REL-NEXT:   0x20314 R_LARCH_TLS_DTPREL32 a 0x064# GD32-REL-NEXT:   0x20318 R_LARCH_TLS_DTPMOD32 b 0x065# GD32-REL-NEXT:   0x2031C R_LARCH_TLS_DTPREL32 b 0x066# GD32-REL-NEXT: }67 68## &DTPMOD(a) - . = 0x20310 - 0x10250: 0x10 pages, page offset 0x31069# GD32:      10250: pcalau12i $a0, 1670# GD32-NEXT:        addi.w $a0, $a0, 78471# GD32-NEXT:        bl 5672 73## &DTPMOD(b) - . = 0x20318 - 0x1025c: 0x10 pages, page offset 0x31874# GD32:      1025c: pcalau12i $a0, 1675# GD32-NEXT:        addi.w $a0, $a0, 79276# GD32-NEXT:        bl 4477 78# GD32-REL-RELAX:      .rela.dyn {79# GD32-REL-RELAX-NEXT:   0x20300 R_LARCH_TLS_DTPMOD32 a 0x080# GD32-REL-RELAX-NEXT:   0x20304 R_LARCH_TLS_DTPREL32 a 0x081# GD32-REL-RELAX-NEXT:   0x20308 R_LARCH_TLS_DTPMOD32 b 0x082# GD32-REL-RELAX-NEXT:   0x2030C R_LARCH_TLS_DTPREL32 b 0x083# GD32-REL-RELAX-NEXT: }84 85## &DTPMOD(a) - . = 0x20300 - 0x10250 = 16428<<286# GD32-RELAX:      10250: pcaddi $a0, 1642887# GD32-RELAX-NEXT:        bl 4488 89## &DTPMOD(b) - . = 0x20308 - 0x10258 = 16428<<290# GD32-RELAX:      10258: pcaddi $a0, 1642891# GD32-RELAX-NEXT:        bl 3692 93# GD64-REL:      .rela.dyn {94# GD64-REL-NEXT:   0x204C0 R_LARCH_TLS_DTPMOD64 a 0x095# GD64-REL-NEXT:   0x204C8 R_LARCH_TLS_DTPREL64 a 0x096# GD64-REL-NEXT:   0x204D0 R_LARCH_TLS_DTPMOD64 b 0x097# GD64-REL-NEXT:   0x204D8 R_LARCH_TLS_DTPREL64 b 0x098# GD64-REL-NEXT: }99 100## &DTPMOD(a) - . = 0x204c0 - 0x10398: 0x10 pages, page offset 0x4c0101# GD64:      10398: pcalau12i $a0, 16102# GD64-NEXT:        addi.d $a0, $a0, 1216103# GD64-NEXT:        bl 48104 105## &DTPMOD(b) - . = 0x204d0 - 0x103a4: 0x10 pages, page offset 0x4d0106# GD64:      103a4: pcalau12i $a0, 16107# GD64-NEXT:        addi.d $a0, $a0, 1232108# GD64-NEXT:        bl 36109 110# GD64-REL-RELAX:      .rela.dyn {111# GD64-REL-RELAX-NEXT:   0x204C0 R_LARCH_TLS_DTPMOD64 a 0x0112# GD64-REL-RELAX-NEXT:   0x204C8 R_LARCH_TLS_DTPREL64 a 0x0113# GD64-REL-RELAX-NEXT:   0x204D0 R_LARCH_TLS_DTPMOD64 b 0x0114# GD64-REL-RELAX-NEXT:   0x204D8 R_LARCH_TLS_DTPREL64 b 0x0115# GD64-REL-RELAX-NEXT: }116 117## &DTPMOD(a) - . = 0x204c0 - 0x10398 = 16458<<2118# GD64-RELAX:      10398: pcaddi $a0, 16458119# GD64-RELAX-NEXT:        bl 52120 121## &DTPMOD(b) - . = 0x204d0 - 0x103a0 = 16460<<2122# GD64-RELAX:      103a0: pcaddi $a0, 16460123# GD64-RELAX-NEXT:        bl 44124 125# NOREL: no relocations126 127## .got contains pre-populated values: [a@dtpmod, a@dtprel, b@dtpmod, b@dtprel]128## a@dtprel = st_value(a) = 0x8129## b@dtprel = st_value(b) = 0xc130# LE32-GOT: section '.got':131# LE32-GOT-NEXT: 0x[[#%x,A:]] 01000000 08000000 01000000 0c000000132# LE64-GOT: section '.got':133# LE64-GOT-NEXT: 0x[[#%x,A:]] 01000000 00000000 08000000 00000000134# LE64-GOT-NEXT: 0x[[#%x,A:]] 01000000 00000000 0c000000 00000000135 136## a is local - relaxed to LE - its DTPMOD/DTPREL slots are link-time constants.137## b is external - DTPMOD/DTPREL dynamic relocations are required.138# IE32-REL:      .rela.dyn {139# IE32-REL-NEXT:   0x30228 R_LARCH_TLS_DTPMOD32 b 0x0140# IE32-REL-NEXT:   0x3022C R_LARCH_TLS_DTPREL32 b 0x0141# IE32-REL-NEXT: }142# IE32-GOT:      section '.got':143# IE32-GOT-NEXT: 0x00030220 01000000 08000000 00000000 00000000144 145# IE64-REL:      .rela.dyn {146# IE64-REL-NEXT:   0x30388 R_LARCH_TLS_DTPMOD64 b 0x0147# IE64-REL-NEXT:   0x30390 R_LARCH_TLS_DTPREL64 b 0x0148# IE64-REL-NEXT: }149# IE64-GOT:      section '.got':150# IE64-GOT-NEXT: 0x00030378 01000000 00000000 08000000 00000000151# IE64-GOT-NEXT: 0x00030388 00000000 00000000 00000000 00000000152 153#--- a.s154la.tls.gd $a0, a155bl %plt(__tls_get_addr)156 157la.tls.gd $a0, b158bl %plt(__tls_get_addr)159 160.section .tbss,"awT",@nobits161.globl a162.zero 8163a:164.zero 4165 166#--- bc.s167.section .tbss,"awT",@nobits168.globl b, c169b:170.zero 4171c:172 173#--- tga.s174.globl __tls_get_addr175__tls_get_addr:176