summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/ARM
diff options
context:
space:
mode:
authorDenis Protivensky <dprotivensky@accesssoftek.com>2015-04-22 07:51:26 +0000
committerDenis Protivensky <dprotivensky@accesssoftek.com>2015-04-22 07:51:26 +0000
commit4b0abddeeadbece3a97713806604db192fbbf53e (patch)
treec89a85a0adc9669b28aac1146efccaa72b295507 /lld/lib/ReaderWriter/ELF/ARM
parentf6c8938edda1ef6037dd4d9a5bf77cea54b09651 (diff)
downloadbcm5719-llvm-4b0abddeeadbece3a97713806604db192fbbf53e.tar.gz
bcm5719-llvm-4b0abddeeadbece3a97713806604db192fbbf53e.zip
[ARM] Implement veneers for dynamic executable linking
llvm-svn: 235486
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/ARM')
-rw-r--r--lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp
index 531d4e6a8aa..6badc5e0779 100644
--- a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp
+++ b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp
@@ -873,13 +873,19 @@ public:
/// \brief Get the veneer for ARM B/BL instructions.
const VeneerAtom *getVeneer_ARM_B_BL(const DefinedAtom *da,
StringRef secName) {
- llvm_unreachable("Handle ARM veneer");
+ if (_ctx.getOutputELFType() == llvm::ELF::ET_EXEC) {
+ return getVeneer_ARM_B_BL_Abs(da, secName);
+ }
+ llvm_unreachable("Handle ARM veneer for DSOs");
}
/// \brief Get the veneer for Thumb B/BL instructions.
const VeneerAtom *getVeneer_THM_B_BL(const DefinedAtom *da,
StringRef secName) {
- llvm_unreachable("Handle Thumb veneer");
+ if (_ctx.getOutputELFType() == llvm::ELF::ET_EXEC) {
+ return getVeneer_THM_B_BL_Abs(da, secName);
+ }
+ llvm_unreachable("Handle Thumb veneer for DSOs");
}
/// \brief Create a GOT entry for R_ARM_TLS_TPOFF32 reloc.
OpenPOWER on IntegriCloud