Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lld / test / ELF / mips-tls-64-pic-local-variable.s
blobc80464f5cdc9feb8abf84b62727b78beaa982170
1 # REQUIRES: mips
3 # MIPS TLS variables that are marked as local by a version script were
4 # previously writing values to the GOT that caused runtime crashes. This
5 # was happending when linking jemalloc_tsd.c in FreeBSD libc. Check that
6 # we do the right thing now:
8 # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-freebsd %s -o %t.o
9 # RUN: echo "{ global: foo; local: *; };" > %t.script
10 # RUN: echo "SECTIONS { \
11 # RUN: . = 0x10000; .text : { *(.text) } \
12 # RUN: . = 0x20000; .got : { *(.got) } \
13 # RUN: }" > %t.script1
14 # RUN: ld.lld --version-script %t.script -script %t.script1 -shared %t.o -o %t.so
15 # RUN: llvm-objdump --section=.got -s %t.so | FileCheck %s --check-prefix GOT
16 # RUN: llvm-readobj -r %t.so | FileCheck %s -check-prefix RELOCS
18 # GOT: Contents of section .got:
19 # GOT-NEXT: 20000 00000000 00000000 80000000 00000000
20 # GOT-NEXT: 20010 00000000 00000000 00000000 00000000
21 # GOT-NEXT: 20020 ffffffff ffff8000
23 # RELOCS: Section ({{.+}}) .rel.dyn {
24 # RELOCS-NEXT: 0x20018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE
25 # RELOCS-NEXT: }
27 # Test case generated using:
28 # clang -mcpu=mips4 -target mips64-unknown-freebsd12.0 \
29 # -fpic -O -G0 -EB -mabi=n64 -msoft-float -std=gnu99 -S %s -o %t.s
30 # from the following source:
32 # _Thread_local int x;
33 # int foo() { return x; }
35 .text
36 .globl foo
37 .p2align 3
38 .type foo,@function
39 .ent foo
40 foo:
41 lui $1, %hi(%neg(%gp_rel(foo)))
42 daddu $1, $1, $25
43 daddiu $gp, $1, %lo(%neg(%gp_rel(foo)))
44 ld $25, %call16(__tls_get_addr)($gp)
45 jalr $25
46 daddiu $4, $gp, %tlsgd(x)
47 .end foo
49 .type x,@object
50 .section .tbss,"awT",@nobits
51 .globl x
52 .p2align 2
54 .4byte 0
55 .size x, 4