From 194c54be450a061d3c5791c63c9466be813c2ad4 Mon Sep 17 00:00:00 2001 From: Simon Dardis Date: Mon, 6 Nov 2017 10:50:04 +0000 Subject: [PATCH] [mips] Fix PR35140 Mark all symbols involved with TLS relocations as being TLS symbols. This resolves PR35140. Thanks to Alex Crichton for reporting the issue! Reviewers: atanasyan Differential Revision: https://reviews.llvm.org/D39591 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317470 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp | 8 +++--- test/MC/Mips/tls-symbols.s | 28 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 test/MC/Mips/tls-symbols.s diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp b/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp index aad6bf378ea..0bddba78145 100644 --- a/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp +++ b/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp @@ -246,8 +246,6 @@ void MipsMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const { break; case MEK_CALL_HI16: case MEK_CALL_LO16: - case MEK_DTPREL_HI: - case MEK_DTPREL_LO: case MEK_GOT: case MEK_GOT_CALL: case MEK_GOT_DISP: @@ -263,14 +261,16 @@ void MipsMCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const { case MEK_NEG: case MEK_PCREL_HI16: case MEK_PCREL_LO16: - case MEK_TLSLDM: // If we do have nested target-specific expressions, they will be in // a consecutive chain. if (const MipsMCExpr *E = dyn_cast(getSubExpr())) E->fixELFSymbolsInTLSFixups(Asm); break; - case MEK_GOTTPREL: + case MEK_DTPREL_HI: + case MEK_DTPREL_LO: + case MEK_TLSLDM: case MEK_TLSGD: + case MEK_GOTTPREL: case MEK_TPREL_HI: case MEK_TPREL_LO: fixELFSymbolsInTLSFixupsImpl(getSubExpr(), Asm); diff --git a/test/MC/Mips/tls-symbols.s b/test/MC/Mips/tls-symbols.s new file mode 100644 index 00000000000..d5a31b18950 --- /dev/null +++ b/test/MC/Mips/tls-symbols.s @@ -0,0 +1,28 @@ +# RUN: llvm-mc -arch=mips < %s -position-independent -filetype=obj \ +# RUN: | llvm-readelf -symbols | FileCheck %s +# RUN: llvm-mc -arch=mips < %s -filetype=obj | llvm-readelf -symbols \ +# RUN: | FileCheck %s + +# Test that TLS relocations cause symbols to be marked as TLS symbols. + + .set noat + lui $3, %tlsgd(foo1) + lui $1, %dtprel_hi(foo2) + lui $1, %dtprel_lo(foo3) + lui $1, %tprel_hi(foo4) + lui $1, %tprel_lo(foo5) + lw $2, %gottprel(foo6)($28) + + .hidden foo1 + .hidden foo2 + .hidden foo3 + .hidden foo4 + .hidden foo5 + .hidden foo6 + +# CHECK: 1: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo1 +# CHECK: 2: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo2 +# CHECK: 3: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo3 +# CHECK: 4: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo4 +# CHECK: 5: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo5 +# CHECK: 6: {{.+}} {{.+}} TLS GLOBAL HIDDEN UND foo6 -- 2.40.0