From ca1d6a655414a7f5dd1ed9a92a505629f772c4c4 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 19 Jul 2016 14:15:33 +0000 Subject: [PATCH] Add support for tlsldm assembler operator to ARM target The standard local dynamic model for TLS on ARM systems needs two relocations: - R_ARM_TLS_LDM32 (module idx) - R_ARM_TLS_LDO32 (offset of object from origin of module TLS block) In GNU style assembler we use symbol(tlsldm) and symbol(tlsldo) to produce these relocations. llvm-mc for ARM supports symbol(tlsldo) but does not support symbol(tlsldm). This patch wires up the existing symbol(tlsldm) to R_ARM_TLS_LDM32. TLS for ARM is defined in Addenda to, and Errata in, the ABI for the ARM Architecture Differential Revision: https://reviews.llvm.org/D22461 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@275977 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp | 3 +++ test/MC/ARM/symbol-variants.s | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp index 4118fe8e8cd..bb562df1b28 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp @@ -221,6 +221,9 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target, case MCSymbolRefExpr::VK_TLSDESC: Type = ELF::R_ARM_TLS_GOTDESC; break; + case MCSymbolRefExpr::VK_TLSLDM: + Type = ELF::R_ARM_TLS_LDM32; + break; case MCSymbolRefExpr::VK_ARM_TLSDESCSEQ: Type = ELF::R_ARM_TLS_DESCSEQ; break; diff --git a/test/MC/ARM/symbol-variants.s b/test/MC/ARM/symbol-variants.s index c54190587a2..96fa18055f0 100644 --- a/test/MC/ARM/symbol-variants.s +++ b/test/MC/ARM/symbol-variants.s @@ -90,8 +90,14 @@ bl f05(plt) @CHECK: 68 R_ARM_PREL31 f26 @CHECK: 6c R_ARM_PREL31 f27 +@ tlsldm +.word f28(TLSLDM) +.word f29(tlsldm) +@CHECK: 70 R_ARM_TLS_LDM32 f28 +@CHECK: 74 R_ARM_TLS_LDM32 f29 + @ got_prel -.word f28(GOT_PREL) + (. - .Lsym) - ldr r3, =f29(GOT_PREL) -@ CHECK: 70 R_ARM_GOT_PREL f28 -@ CHECK: 78 R_ARM_GOT_PREL f29 +.word f30(GOT_PREL) + (. - .Lsym) + ldr r3, =f31(GOT_PREL) +@ CHECK: 78 R_ARM_GOT_PREL f30 +@ CHECK: 80 R_ARM_GOT_PREL f31