diff options
Diffstat (limited to 'llvm/lib/MC/MCAsmBackend.cpp')
-rw-r--r-- | llvm/lib/MC/MCAsmBackend.cpp | 24 |
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"; +} |