forked from OSchip/llvm-project
50 lines
1.6 KiB
ArmAsm
50 lines
1.6 KiB
ArmAsm
# REQUIRES: mips
|
|
# MIPS TLS variables that are marked as local by a version script were previously
|
|
# writing values to the GOT that caused runtime crashes. This was happending when
|
|
# linking jemalloc_tsd.c in FreeBSD libc. Check that we do the right thing now:
|
|
|
|
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-freebsd %s -o %t.o
|
|
# RUN: echo "{ global: foo; local: *; };" > %t.script
|
|
# RUN: ld.lld --version-script %t.script -shared %t.o -o %t.so
|
|
# RUN: llvm-objdump --section=.got -s %t.so | FileCheck %s -check-prefix GOT
|
|
# RUN: llvm-readobj -r %t.so | FileCheck %s -check-prefix RELOCS
|
|
|
|
# GOT: Contents of section .got:
|
|
# GOT-NEXT: 20000 00000000 00000000 80000000 00000000
|
|
# GOT-NEXT: 20010 00000000 00000000 00000000 00000000
|
|
# GOT-NEXT: 20020 ffffffff ffff8000
|
|
|
|
# RELOCS: Section ({{.+}}) .rel.dyn {
|
|
# RELOCS-NEXT: 0x20018 R_MIPS_TLS_DTPMOD64/R_MIPS_NONE/R_MIPS_NONE
|
|
# RELOCS-NEXT: }
|
|
|
|
# Test case generated using clang -mcpu=mips4 -target mips64-unknown-freebsd12.0 -fpic -O -G0 -EB -mabi=n64 -msoft-float -std=gnu99 -S %s -o %t.s
|
|
# from the following source:
|
|
#
|
|
# _Thread_local int x;
|
|
# int foo() { return x; }
|
|
#
|
|
.text
|
|
.globl foo
|
|
.p2align 3
|
|
.type foo,@function
|
|
.ent foo
|
|
foo:
|
|
lui $1, %hi(%neg(%gp_rel(foo)))
|
|
daddu $1, $1, $25
|
|
daddiu $gp, $1, %lo(%neg(%gp_rel(foo)))
|
|
ld $25, %call16(__tls_get_addr)($gp)
|
|
jalr $25
|
|
daddiu $4, $gp, %tlsgd(x)
|
|
.end foo
|
|
|
|
.type x,@object
|
|
.section .tbss,"awT",@nobits
|
|
.globl x
|
|
.p2align 2
|
|
x:
|
|
.4byte 0
|
|
.size x, 4
|
|
|
|
|