summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCAsmBackend.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2018-05-21 19:20:29 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2018-05-21 19:20:29 +0000
commitdcd7d6c33112db3618798c1c037460cac58d7f9a (patch)
tree21a52d71cf6ec2df9a9d299ca4d4559cd4891382 /llvm/lib/MC/MCAsmBackend.cpp
parenta29fe579f48dd1600b21aadae7e90f64d643aef8 (diff)
downloadbcm5719-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.cpp26
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;
}
OpenPOWER on IntegriCloud