diff options
Diffstat (limited to 'llvm/lib/MC')
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/MC/MCObjectFileInfo.cpp | 40 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 10 |
3 files changed, 27 insertions, 33 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index e8fb6a95ebe..c601c56f395 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -162,15 +162,13 @@ MCSymbol *MCContext::getOrCreateLSDASymbol(StringRef FuncName) { MCSymbol *MCContext::createSymbolImpl(const StringMapEntry<bool> *Name, bool IsTemporary) { if (MOFI) { - switch (MOFI->getTargetTriple().getObjectFormat()) { - case Triple::COFF: + switch (MOFI->getObjectFileType()) { + case MCObjectFileInfo::IsCOFF: return new (Name, *this) MCSymbolCOFF(Name, IsTemporary); - case Triple::ELF: + case MCObjectFileInfo::IsELF: return new (Name, *this) MCSymbolELF(Name, IsTemporary); - case Triple::MachO: + case MCObjectFileInfo::IsMachO: return new (Name, *this) MCSymbolMachO(Name, IsTemporary); - case Triple::UnknownObjectFormat: - break; } } return new (Name, *this) MCSymbol(MCSymbol::SymbolKindUnset, Name, diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp index ade4b496ec7..576827a72d5 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -767,19 +767,25 @@ void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, TT = TheTriple; - Triple::ObjectFormatType Format = TT.getObjectFormat(); - switch (Format) { - case Triple::MachO: + Triple::ArchType Arch = TT.getArch(); + // FIXME: Checking for Arch here to filter out bogus triples such as + // cellspu-apple-darwin. Perhaps we should fix in Triple? + if ((Arch == Triple::x86 || Arch == Triple::x86_64 || + Arch == Triple::arm || Arch == Triple::thumb || + Arch == Triple::aarch64 || + Arch == Triple::ppc || Arch == Triple::ppc64 || + Arch == Triple::UnknownArch) && + TT.isOSBinFormatMachO()) { + Env = IsMachO; initMachOMCObjectFileInfo(TT); - break; - case Triple::COFF: + } else if ((Arch == Triple::x86 || Arch == Triple::x86_64 || + Arch == Triple::arm || Arch == Triple::thumb) && + (TT.isOSWindows() && TT.getObjectFormat() == Triple::COFF)) { + Env = IsCOFF; initCOFFMCObjectFileInfo(TT); - break; - case Triple::ELF: + } else { + Env = IsELF; initELFMCObjectFileInfo(TT); - break; - case Triple::UnknownObjectFormat: - break; } } @@ -795,9 +801,7 @@ MCSection *MCObjectFileInfo::getDwarfTypesSection(uint64_t Hash) const { } void MCObjectFileInfo::InitEHFrameSection() { - Triple::ObjectFormatType Format = TT.getObjectFormat(); - switch (Format) { - case Triple::MachO: + if (Env == IsMachO) EHFrameSection = Ctx->getMachOSection("__TEXT", "__eh_frame", MachO::S_COALESCED | @@ -805,20 +809,14 @@ void MCObjectFileInfo::InitEHFrameSection() { MachO::S_ATTR_STRIP_STATIC_SYMS | MachO::S_ATTR_LIVE_SUPPORT, SectionKind::getReadOnly()); - break; - case Triple::ELF: + else if (Env == IsELF) EHFrameSection = Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags); - break; - case Triple::COFF: + else EHFrameSection = Ctx->getCOFFSection(".eh_frame", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA | COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE, SectionKind::getDataRel()); - break; - case Triple::UnknownObjectFormat: - break; - } } diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 0089f8f4ebc..3f45b3d85a3 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -513,19 +513,17 @@ AsmParser::AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer)->getBuffer()); // Initialize the platform / file format parser. - switch (Ctx.getObjectFileInfo()->getTargetTriple().getObjectFormat()) { - case Triple::COFF: + switch (Ctx.getObjectFileInfo()->getObjectFileType()) { + case MCObjectFileInfo::IsCOFF: PlatformParser.reset(createCOFFAsmParser()); break; - case Triple::MachO: + case MCObjectFileInfo::IsMachO: PlatformParser.reset(createDarwinAsmParser()); IsDarwin = true; break; - case Triple::ELF: + case MCObjectFileInfo::IsELF: PlatformParser.reset(createELFAsmParser()); break; - case Triple::UnknownObjectFormat: - break; } PlatformParser->Initialize(*this); |