diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2018-05-21 19:20:29 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2018-05-21 19:20:29 +0000 |
commit | dcd7d6c33112db3618798c1c037460cac58d7f9a (patch) | |
tree | 21a52d71cf6ec2df9a9d299ca4d4559cd4891382 /llvm/lib/MC/MCAsmBackend.cpp | |
parent | a29fe579f48dd1600b21aadae7e90f64d643aef8 (diff) | |
download | bcm5719-llvm-dcd7d6c33112db3618798c1c037460cac58d7f9a.tar.gz bcm5719-llvm-dcd7d6c33112db3618798c1c037460cac58d7f9a.zip |
MC: Separate creating a generic object writer from creating a target object writer. NFCI.
With this we gain a little flexibility in how the generic object
writer is created.
Part of PR37466.
Differential Revision: https://reviews.llvm.org/D47045
llvm-svn: 332868
Diffstat (limited to 'llvm/lib/MC/MCAsmBackend.cpp')
-rw-r--r-- | llvm/lib/MC/MCAsmBackend.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCAsmBackend.cpp b/llvm/lib/MC/MCAsmBackend.cpp index 8406d232863..213ea525803 100644 --- a/llvm/lib/MC/MCAsmBackend.cpp +++ b/llvm/lib/MC/MCAsmBackend.cpp @@ -11,7 +11,12 @@ #include "llvm/ADT/None.h" #include "llvm/ADT/STLExtras.h" #include "llvm/MC/MCCodePadder.h" +#include "llvm/MC/MCELFObjectWriter.h" #include "llvm/MC/MCFixupKindInfo.h" +#include "llvm/MC/MCMachObjectWriter.h" +#include "llvm/MC/MCObjectWriter.h" +#include "llvm/MC/MCWasmObjectWriter.h" +#include "llvm/MC/MCWinCOFFObjectWriter.h" #include <cassert> #include <cstddef> #include <cstdint> @@ -23,6 +28,27 @@ MCAsmBackend::MCAsmBackend(support::endianness Endian) MCAsmBackend::~MCAsmBackend() = default; +std::unique_ptr<MCObjectWriter> +MCAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const { + auto TW = createObjectTargetWriter(); + switch (TW->getFormat()) { + case Triple::ELF: + return createELFObjectWriter(cast<MCELFObjectTargetWriter>(std::move(TW)), OS, + Endian == support::little); + case Triple::MachO: + return createMachObjectWriter(cast<MCMachObjectTargetWriter>(std::move(TW)), + OS, Endian == support::little); + case Triple::COFF: + return createWinCOFFObjectWriter( + cast<MCWinCOFFObjectTargetWriter>(std::move(TW)), OS); + case Triple::Wasm: + return createWasmObjectWriter(cast<MCWasmObjectTargetWriter>(std::move(TW)), + OS); + default: + llvm_unreachable("unexpected object format"); + } +} + Optional<MCFixupKind> MCAsmBackend::getFixupKind(StringRef Name) const { return None; } |