aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCAsmBackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/MC/MCAsmBackend.cpp')
-rw-r--r--llvm/lib/MC/MCAsmBackend.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCAsmBackend.cpp b/llvm/lib/MC/MCAsmBackend.cpp
index c4e505146d44..64bbc63719c7 100644
--- a/llvm/lib/MC/MCAsmBackend.cpp
+++ b/llvm/lib/MC/MCAsmBackend.cpp
@@ -22,7 +22,8 @@
using namespace llvm;
-MCAsmBackend::MCAsmBackend(support::endianness Endian) : Endian(Endian) {}
+MCAsmBackend::MCAsmBackend(support::endianness Endian, unsigned RelaxFixupKind)
+ : Endian(Endian), RelaxFixupKind(RelaxFixupKind) {}
MCAsmBackend::~MCAsmBackend() = default;
@@ -61,6 +62,9 @@ MCAsmBackend::createDwoObjectWriter(raw_pwrite_stream &OS,
raw_pwrite_stream &DwoOS) const {
auto TW = createObjectTargetWriter();
switch (TW->getFormat()) {
+ case Triple::COFF:
+ return createWinCOFFDwoObjectWriter(
+ cast<MCWinCOFFObjectTargetWriter>(std::move(TW)), OS, DwoOS);
case Triple::ELF:
return createELFDwoObjectWriter(
cast<MCELFObjectTargetWriter>(std::move(TW)), OS, DwoOS,
@@ -69,7 +73,7 @@ MCAsmBackend::createDwoObjectWriter(raw_pwrite_stream &OS,
return createWasmDwoObjectWriter(
cast<MCWasmObjectTargetWriter>(std::move(TW)), OS, DwoOS);
default:
- report_fatal_error("dwo only supported with ELF and Wasm");
+ report_fatal_error("dwo only supported with COFF, ELF, and Wasm");
}
}
@@ -115,3 +119,19 @@ bool MCAsmBackend::fixupNeedsRelaxationAdvanced(
return true;
return fixupNeedsRelaxation(Fixup, Value, DF, Layout);
}
+
+bool MCAsmBackend::isDarwinCanonicalPersonality(const MCSymbol *Sym) const {
+ // Consider a NULL personality (ie., no personality encoding) to be canonical
+ // because it's always at 0.
+ if (!Sym)
+ return true;
+
+ if (!Sym->isMachO())
+ llvm_unreachable("Expected MachO symbols only");
+
+ StringRef name = Sym->getName();
+ // XXX: We intentionally leave out "___gcc_personality_v0" because, despite
+ // being system-defined like these two, it is not very commonly-used.
+ // Reserving an empty slot for it seems silly.
+ return name == "___gxx_personality_v0" || name == "___objc_personality_v0";
+}