From 2db1a03b07ce4d22ad32ebbecdc2099b0e67524e Mon Sep 17 00:00:00 2001 From: Denis Protivensky Date: Thu, 21 May 2015 09:28:25 +0000 Subject: [ARM] Add skeleton implementation of DSO linking llvm-svn: 237881 --- .../ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h | 44 ++++++++++++++++++++++ lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp | 2 + lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp | 3 ++ 3 files changed, 49 insertions(+) create mode 100644 lld/lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h b/lld/lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h new file mode 100644 index 00000000000..2115b00e4fa --- /dev/null +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h @@ -0,0 +1,44 @@ +//===- lib/ReaderWriter/ELF/ARM/ARMDynamicLibraryWriter.h -----------------===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#ifndef LLD_READER_WRITER_ELF_ARM_ARM_DYNAMIC_LIBRARY_WRITER_H +#define LLD_READER_WRITER_ELF_ARM_ARM_DYNAMIC_LIBRARY_WRITER_H + +#include "DynamicLibraryWriter.h" +#include "ARMLinkingContext.h" +#include "ARMTargetHandler.h" + +namespace lld { +namespace elf { + +class ARMDynamicLibraryWriter : public DynamicLibraryWriter { +public: + ARMDynamicLibraryWriter(ARMLinkingContext &ctx, ARMTargetLayout &layout); + +protected: + // Add any runtime files and their atoms to the output + void createImplicitFiles(std::vector> &) override; + +private: + ARMLinkingContext &_ctx; + ARMTargetLayout &_armLayout; +}; + +ARMDynamicLibraryWriter::ARMDynamicLibraryWriter(ARMLinkingContext &ctx, + ARMTargetLayout &layout) + : DynamicLibraryWriter(ctx, layout), _ctx(ctx), _armLayout(layout) {} + +void ARMDynamicLibraryWriter::createImplicitFiles( + std::vector> &result) { + DynamicLibraryWriter::createImplicitFiles(result); +} + +} // namespace elf +} // namespace lld + +#endif // LLD_READER_WRITER_ELF_ARM_ARM_DYNAMIC_LIBRARY_WRITER_H diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp index e0d1582d8af..7a95362d77e 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMRelocationPass.cpp @@ -961,6 +961,8 @@ lld::elf::createARMRelocationPass(const ARMLinkingContext &ctx) { if (ctx.isDynamic()) return llvm::make_unique(ctx); return llvm::make_unique(ctx); + case llvm::ELF::ET_DYN: + return llvm::make_unique(ctx); default: llvm_unreachable("Unhandled output file type"); } diff --git a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp index 2b928fb1eba..e1f5eadbe78 100644 --- a/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.cpp @@ -9,6 +9,7 @@ #include "Atoms.h" #include "ARMExecutableWriter.h" +#include "ARMDynamicLibraryWriter.h" #include "ARMTargetHandler.h" #include "ARMLinkingContext.h" @@ -23,6 +24,8 @@ std::unique_ptr ARMTargetHandler::getWriter() { switch (this->_ctx.getOutputELFType()) { case llvm::ELF::ET_EXEC: return llvm::make_unique(_ctx, *_targetLayout); + case llvm::ELF::ET_DYN: + return llvm::make_unique(_ctx, *_targetLayout); default: llvm_unreachable("unsupported output type"); } -- cgit v1.2.3