From dcd7d6c33112db3618798c1c037460cac58d7f9a Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Mon, 21 May 2018 19:20:29 +0000 Subject: 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 --- llvm/lib/MC/MCAsmBackend.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'llvm/lib/MC/MCAsmBackend.cpp') 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 #include #include @@ -23,6 +28,27 @@ MCAsmBackend::MCAsmBackend(support::endianness Endian) MCAsmBackend::~MCAsmBackend() = default; +std::unique_ptr +MCAsmBackend::createObjectWriter(raw_pwrite_stream &OS) const { + auto TW = createObjectTargetWriter(); + switch (TW->getFormat()) { + case Triple::ELF: + return createELFObjectWriter(cast(std::move(TW)), OS, + Endian == support::little); + case Triple::MachO: + return createMachObjectWriter(cast(std::move(TW)), + OS, Endian == support::little); + case Triple::COFF: + return createWinCOFFObjectWriter( + cast(std::move(TW)), OS); + case Triple::Wasm: + return createWasmObjectWriter(cast(std::move(TW)), + OS); + default: + llvm_unreachable("unexpected object format"); + } +} + Optional MCAsmBackend::getFixupKind(StringRef Name) const { return None; } -- cgit v1.2.3