diff options
| author | Shankar Easwaran <shankare@codeaurora.org> | 2013-03-03 22:10:57 +0000 |
|---|---|---|
| committer | Shankar Easwaran <shankare@codeaurora.org> | 2013-03-03 22:10:57 +0000 |
| commit | 03a525d6fd405c591fdb37af7d206e34f13dcbf2 (patch) | |
| tree | 733a03b30eec7904153f4694c4ea91c149fb8385 /lld/lib/ReaderWriter/ELF/Writer.cpp | |
| parent | 1993b0000c8ec42aa032b11f16b33ad196929f57 (diff) | |
| download | bcm5719-llvm-03a525d6fd405c591fdb37af7d206e34f13dcbf2.tar.gz bcm5719-llvm-03a525d6fd405c591fdb37af7d206e34f13dcbf2.zip | |
[lld][ELF] Add modified writer
llvm-svn: 176425
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Writer.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Writer.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Writer.cpp b/lld/lib/ReaderWriter/ELF/Writer.cpp new file mode 100644 index 00000000000..49c7b112388 --- /dev/null +++ b/lld/lib/ReaderWriter/ELF/Writer.cpp @@ -0,0 +1,38 @@ +//===- lib/ReaderWriter/ELF/Writer.cpp ------------------------------------===// +// +// The LLVM Linker +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#include "ExecutableWriter.h" + +using namespace llvm; +using namespace llvm::object; + +namespace lld { + +std::unique_ptr<Writer> createWriterELF(const ELFTargetInfo &TI) { + using llvm::object::ELFType; + // Set the default layout to be the static executable layout + // We would set the layout to a dynamic executable layout + // if we came across any shared libraries in the process + + if (!TI.is64Bits() && TI.isLittleEndian()) + return std::unique_ptr<Writer>(new + elf::ExecutableWriter<ELFType<support::little, 4, false>>(TI)); + else if (TI.is64Bits() && TI.isLittleEndian()) + return std::unique_ptr<Writer>(new + elf::ExecutableWriter<ELFType<support::little, 8, true>>(TI)); + else if (!TI.is64Bits() && !TI.isLittleEndian()) + return std::unique_ptr<Writer>(new + elf::ExecutableWriter<ELFType<support::big, 4, false>>(TI)); + else if (TI.is64Bits() && !TI.isLittleEndian()) + return std::unique_ptr<Writer>(new + elf::ExecutableWriter<ELFType<support::big, 8, true>>(TI)); + + llvm_unreachable("Invalid Options!"); +} + +} |

