diff options
| author | Sean Fertile <sfertile@ca.ibm.com> | 2018-05-31 18:44:12 +0000 |
|---|---|---|
| committer | Sean Fertile <sfertile@ca.ibm.com> | 2018-05-31 18:44:12 +0000 |
| commit | 1a8343fce3bfff06864a86d33ec3c1acf58cc9b7 (patch) | |
| tree | 4f2033c6d01059a42bb942417c198c4b58eb27fe /lld/ELF/Arch/PPC64.cpp | |
| parent | 26fc531dbc652a7738f3c8a421b3023ca12ca1ad (diff) | |
| download | bcm5719-llvm-1a8343fce3bfff06864a86d33ec3c1acf58cc9b7.tar.gz bcm5719-llvm-1a8343fce3bfff06864a86d33ec3c1acf58cc9b7.zip | |
[PPC64] Support R_PPC64_GOT_TLSLD16 relocations.
Add support for the R_PPC64_GOT_TLSLD16 relocations used to build the address of
the tls_index struct used in local-dynamic tls.
Differential Revision: https://reviews.llvm.org/D47538
llvm-svn: 333681
Diffstat (limited to 'lld/ELF/Arch/PPC64.cpp')
| -rw-r--r-- | lld/ELF/Arch/PPC64.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lld/ELF/Arch/PPC64.cpp b/lld/ELF/Arch/PPC64.cpp index b1f27c0c6cd..37fbcd5efcc 100644 --- a/lld/ELF/Arch/PPC64.cpp +++ b/lld/ELF/Arch/PPC64.cpp @@ -175,7 +175,13 @@ RelExpr PPC64::getRelExpr(RelType Type, const Symbol &S, case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_LO: return R_TLSGD_GOT; + case R_PPC64_GOT_TLSLD16: + case R_PPC64_GOT_TLSLD16_HA: + case R_PPC64_GOT_TLSLD16_HI: + case R_PPC64_GOT_TLSLD16_LO: + return R_TLSLD_GOT; case R_PPC64_TLSGD: + case R_PPC64_TLSLD: return R_HINT; default: return R_ABS; @@ -221,17 +227,21 @@ static std::pair<RelType, uint64_t> toAddr16Rel(RelType Type, uint64_t Val) { uint64_t V = Val - PPC64TocOffset; switch (Type) { case R_PPC64_GOT_TLSGD16: + case R_PPC64_GOT_TLSLD16: case R_PPC64_TOC16: return {R_PPC64_ADDR16, V}; case R_PPC64_TOC16_DS: return {R_PPC64_ADDR16_DS, V}; case R_PPC64_GOT_TLSGD16_HA: + case R_PPC64_GOT_TLSLD16_HA: case R_PPC64_TOC16_HA: return {R_PPC64_ADDR16_HA, V}; case R_PPC64_GOT_TLSGD16_HI: + case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_TOC16_HI: return {R_PPC64_ADDR16_HI, V}; case R_PPC64_GOT_TLSGD16_LO: + case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_TOC16_LO: return {R_PPC64_ADDR16_LO, V}; case R_PPC64_TOC16_LO_DS: |

