diff options
Diffstat (limited to 'llvm/lib')
-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 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 8 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 41 |
5 files changed, 45 insertions, 64 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index c601c56f395..e8fb6a95ebe 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -162,13 +162,15 @@ MCSymbol *MCContext::getOrCreateLSDASymbol(StringRef FuncName) { MCSymbol *MCContext::createSymbolImpl(const StringMapEntry<bool> *Name, bool IsTemporary) { if (MOFI) { - switch (MOFI->getObjectFileType()) { - case MCObjectFileInfo::IsCOFF: + switch (MOFI->getTargetTriple().getObjectFormat()) { + case Triple::COFF: return new (Name, *this) MCSymbolCOFF(Name, IsTemporary); - case MCObjectFileInfo::IsELF: + case Triple::ELF: return new (Name, *this) MCSymbolELF(Name, IsTemporary); - case MCObjectFileInfo::IsMachO: + case Triple::MachO: 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 576827a72d5..ade4b496ec7 100644 --- a/llvm/lib/MC/MCObjectFileInfo.cpp +++ b/llvm/lib/MC/MCObjectFileInfo.cpp @@ -767,25 +767,19 @@ void MCObjectFileInfo::InitMCObjectFileInfo(const Triple &TheTriple, TT = TheTriple; - 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; + Triple::ObjectFormatType Format = TT.getObjectFormat(); + switch (Format) { + case Triple::MachO: initMachOMCObjectFileInfo(TT); - } else if ((Arch == Triple::x86 || Arch == Triple::x86_64 || - Arch == Triple::arm || Arch == Triple::thumb) && - (TT.isOSWindows() && TT.getObjectFormat() == Triple::COFF)) { - Env = IsCOFF; + break; + case Triple::COFF: initCOFFMCObjectFileInfo(TT); - } else { - Env = IsELF; + break; + case Triple::ELF: initELFMCObjectFileInfo(TT); + break; + case Triple::UnknownObjectFormat: + break; } } @@ -801,7 +795,9 @@ MCSection *MCObjectFileInfo::getDwarfTypesSection(uint64_t Hash) const { } void MCObjectFileInfo::InitEHFrameSection() { - if (Env == IsMachO) + Triple::ObjectFormatType Format = TT.getObjectFormat(); + switch (Format) { + case Triple::MachO: EHFrameSection = Ctx->getMachOSection("__TEXT", "__eh_frame", MachO::S_COALESCED | @@ -809,14 +805,20 @@ void MCObjectFileInfo::InitEHFrameSection() { MachO::S_ATTR_STRIP_STATIC_SYMS | MachO::S_ATTR_LIVE_SUPPORT, SectionKind::getReadOnly()); - else if (Env == IsELF) + break; + case Triple::ELF: EHFrameSection = Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags); - else + break; + case Triple::COFF: 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 3f45b3d85a3..0089f8f4ebc 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -513,17 +513,19 @@ AsmParser::AsmParser(SourceMgr &SM, MCContext &Ctx, MCStreamer &Out, Lexer.setBuffer(SrcMgr.getMemoryBuffer(CurBuffer)->getBuffer()); // Initialize the platform / file format parser. - switch (Ctx.getObjectFileInfo()->getObjectFileType()) { - case MCObjectFileInfo::IsCOFF: + switch (Ctx.getObjectFileInfo()->getTargetTriple().getObjectFormat()) { + case Triple::COFF: PlatformParser.reset(createCOFFAsmParser()); break; - case MCObjectFileInfo::IsMachO: + case Triple::MachO: PlatformParser.reset(createDarwinAsmParser()); IsDarwin = true; break; - case MCObjectFileInfo::IsELF: + case Triple::ELF: PlatformParser.reset(createELFAsmParser()); break; + case Triple::UnknownObjectFormat: + break; } PlatformParser->Initialize(*this); diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp index 9292f660735..7d7a09f2694 100644 --- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp +++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp @@ -4055,10 +4055,10 @@ bool AArch64AsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, /// ParseDirective parses the arm specific directives bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) { - const MCObjectFileInfo::Environment Format = - getContext().getObjectFileInfo()->getObjectFileType(); - bool IsMachO = Format == MCObjectFileInfo::IsMachO; - bool IsCOFF = Format == MCObjectFileInfo::IsCOFF; + Triple::ObjectFormatType Format = + getContext().getObjectFileInfo()->getTargetTriple().getObjectFormat(); + bool IsMachO = Format == Triple::MachO; + bool IsCOFF = Format == Triple::COFF; StringRef IDVal = DirectiveID.getIdentifier(); SMLoc Loc = DirectiveID.getLoc(); diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 2d291bf8652..21414b085ff 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -5173,18 +5173,11 @@ bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) { return true; } - enum { - COFF = (1 << MCObjectFileInfo::IsCOFF), - ELF = (1 << MCObjectFileInfo::IsELF), - MACHO = (1 << MCObjectFileInfo::IsMachO) - }; static const struct PrefixEntry { const char *Spelling; ARMMCExpr::VariantKind VariantKind; - uint8_t SupportedFormats; } PrefixEntries[] = { - { "lower16", ARMMCExpr::VK_ARM_LO16, COFF | ELF | MACHO }, - { "upper16", ARMMCExpr::VK_ARM_HI16, COFF | ELF | MACHO }, + {"lower16", ARMMCExpr::VK_ARM_LO16}, {"upper16", ARMMCExpr::VK_ARM_HI16}, }; StringRef IDVal = Parser.getTok().getIdentifier(); @@ -5199,25 +5192,6 @@ bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) { return true; } - uint8_t CurrentFormat; - switch (getContext().getObjectFileInfo()->getObjectFileType()) { - case MCObjectFileInfo::IsMachO: - CurrentFormat = MACHO; - break; - case MCObjectFileInfo::IsELF: - CurrentFormat = ELF; - break; - case MCObjectFileInfo::IsCOFF: - CurrentFormat = COFF; - break; - } - - if (~Prefix->SupportedFormats & CurrentFormat) { - Error(Parser.getTok().getLoc(), - "cannot represent relocation in the current file format"); - return true; - } - RefKind = Prefix->VariantKind; Parser.Lex(); @@ -8691,10 +8665,10 @@ bool ARMAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, /// parseDirective parses the arm specific directives bool ARMAsmParser::ParseDirective(AsmToken DirectiveID) { - const MCObjectFileInfo::Environment Format = - getContext().getObjectFileInfo()->getObjectFileType(); - bool IsMachO = Format == MCObjectFileInfo::IsMachO; - bool IsCOFF = Format == MCObjectFileInfo::IsCOFF; + Triple::ObjectFormatType Format = + getContext().getObjectFileInfo()->getTargetTriple().getObjectFormat(); + bool IsMachO = Format == Triple::MachO; + bool IsCOFF = Format == Triple::COFF; StringRef IDVal = DirectiveID.getIdentifier(); if (IDVal == ".word") @@ -8859,8 +8833,9 @@ void ARMAsmParser::onLabelParsed(MCSymbol *Symbol) { /// ::= .thumbfunc symbol_name bool ARMAsmParser::parseDirectiveThumbFunc(SMLoc L) { MCAsmParser &Parser = getParser(); - const auto Format = getContext().getObjectFileInfo()->getObjectFileType(); - bool IsMachO = Format == MCObjectFileInfo::IsMachO; + Triple::ObjectFormatType Format = + getContext().getObjectFileInfo()->getTargetTriple().getObjectFormat(); + bool IsMachO = Format == Triple::MachO; // Darwin asm has (optionally) function name after .thumb_func direction // ELF doesn't |