diff options
author | Peter Smith <peter.smith@linaro.org> | 2016-07-19 14:15:33 +0000 |
---|---|---|
committer | Peter Smith <peter.smith@linaro.org> | 2016-07-19 14:15:33 +0000 |
commit | cbcecca538e380ead0b07bb2549e262e2458f54d (patch) | |
tree | 8170399b69cc8b20cc6a732daff5e8828fd0beca | |
parent | b87a21f1c33fcd3ce17ac1421ecde4c6be22337f (diff) | |
download | bcm5719-llvm-cbcecca538e380ead0b07bb2549e262e2458f54d.tar.gz bcm5719-llvm-cbcecca538e380ead0b07bb2549e262e2458f54d.zip |
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
llvm-svn: 275977
-rw-r--r-- | llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp | 3 | ||||
-rw-r--r-- | llvm/test/MC/ARM/symbol-variants.s | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp index 4118fe8e8cd..bb562df1b28 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp +++ b/llvm/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/llvm/test/MC/ARM/symbol-variants.s b/llvm/test/MC/ARM/symbol-variants.s index c54190587a2..96fa18055f0 100644 --- a/llvm/test/MC/ARM/symbol-variants.s +++ b/llvm/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 |