diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-01-30 04:02:31 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-01-30 04:02:31 +0000 |
commit | 6e00ca887ebbeef8018cd058e68be82697f8b989 (patch) | |
tree | 7b649ce11ae2b18177bd3ddaff52542eae745f0b /llvm/lib/MC/MCExpr.cpp | |
parent | f6f0ce903e4321ea4590696137a678ffbce9ed69 (diff) | |
download | bcm5719-llvm-6e00ca887ebbeef8018cd058e68be82697f8b989.tar.gz bcm5719-llvm-6e00ca887ebbeef8018cd058e68be82697f8b989.zip |
ARM: support tlscall relocations
This adds support for TLS CALL relocations. TLS CALL relocations are used to
indicate to the linker to generate appropriate entries to resolve TLS references
via an appropriate function invocation (e.g. __tls_get_addr(PLT)).
In order to accomodate the linker relaxation of the TLS access model for the
references (GD/LD -> IE, IE -> LE), the relocation addend must be incomplete.
This requires that the partial inplace value is also incomplete (i.e. 0). We
simply avoid the offset value calculation at the time of the fixup adjustment in
the ARM assembler backend.
llvm-svn: 200446
Diffstat (limited to 'llvm/lib/MC/MCExpr.cpp')
-rw-r--r-- | llvm/lib/MC/MCExpr.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp index 2052d55dc7e..3772bceea57 100644 --- a/llvm/lib/MC/MCExpr.cpp +++ b/llvm/lib/MC/MCExpr.cpp @@ -185,6 +185,7 @@ StringRef MCSymbolRefExpr::getVariantKindName(VariantKind Kind) { case VK_ARM_TARGET2: return "target2"; case VK_ARM_PREL31: return "prel31"; case VK_ARM_TLSLDO: return "tlsldo"; + case VK_ARM_TLSCALL: return "tlscall"; case VK_PPC_LO: return "l"; case VK_PPC_HI: return "h"; case VK_PPC_HA: return "ha"; @@ -408,6 +409,8 @@ MCSymbolRefExpr::getVariantKindForName(StringRef Name) { .Case("prel31", VK_ARM_PREL31) .Case("TLSLDO", VK_ARM_TLSLDO) .Case("tlsldo", VK_ARM_TLSLDO) + .Case("TLSCALL", VK_ARM_TLSCALL) + .Case("tlscall", VK_ARM_TLSCALL) .Default(VK_Invalid); } |