diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-07-12 21:23:32 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-07-12 21:23:32 +0000 |
commit | 5146a0970df05711ec85cd1d54c79feb0df4fcfc (patch) | |
tree | 53821bae6e766b036196523f906ad3302dbba8ea /lib/MC/MCParser/AsmParser.cpp | |
parent | 9c23d7f25ec2132292208799386e993cf661dfb5 (diff) |
MC/AsmParser: Move ELF specific parser to ELFAsmParser.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108196 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 45 |
1 files changed, 2 insertions, 43 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 66786ad826..793f3c7ab7 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -18,7 +18,6 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCInst.h" -#include "llvm/MC/MCSectionELF.h" #include "llvm/MC/MCStreamer.h" #include "llvm/MC/MCSymbol.h" #include "llvm/MC/MCParser/MCParsedAsmOperand.h" @@ -55,40 +54,12 @@ public: bool ParseDirectiveLoc(StringRef, SMLoc DirectiveLoc); // ".loc" }; -class ELFAsmParser : public MCAsmParserExtension { - bool ParseSectionSwitch(StringRef Section, unsigned Type, - unsigned Flags, SectionKind Kind); - -public: - ELFAsmParser() {} - - virtual void Initialize(MCAsmParser &Parser) { - // Call the base implementation. - this->MCAsmParserExtension::Initialize(Parser); - - Parser.AddDirectiveHandler(this, ".data", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseSectionDirectiveData)); - Parser.AddDirectiveHandler(this, ".text", MCAsmParser::DirectiveHandler( - &ELFAsmParser::ParseSectionDirectiveText)); - } - - bool ParseSectionDirectiveData(StringRef, SMLoc) { - return ParseSectionSwitch(".data", MCSectionELF::SHT_PROGBITS, - MCSectionELF::SHF_WRITE |MCSectionELF::SHF_ALLOC, - SectionKind::getDataRel()); - } - bool ParseSectionDirectiveText(StringRef, SMLoc) { - return ParseSectionSwitch(".text", MCSectionELF::SHT_PROGBITS, - MCSectionELF::SHF_EXECINSTR | - MCSectionELF::SHF_ALLOC, SectionKind::getText()); - } -}; - } namespace llvm { extern MCAsmParserExtension *createDarwinAsmParser(); +extern MCAsmParserExtension *createELFAsmParser(); } @@ -112,7 +83,7 @@ AsmParser::AsmParser(const Target &T, SourceMgr &_SM, MCContext &_Ctx, PlatformParser = createDarwinAsmParser(); PlatformParser->Initialize(*this); } else { - PlatformParser = new ELFAsmParser; + PlatformParser = createELFAsmParser(); PlatformParser->Initialize(*this); } } @@ -815,18 +786,6 @@ bool AsmParser::ParseDirectiveSet() { return ParseAssignment(Name); } -bool ELFAsmParser::ParseSectionSwitch(StringRef Section, unsigned Type, - unsigned Flags, SectionKind Kind) { - if (getLexer().isNot(AsmToken::EndOfStatement)) - return TokError("unexpected token in section switching directive"); - Lex(); - - getStreamer().SwitchSection(getContext().getELFSection( - Section, Type, Flags, Kind)); - - return false; -} - bool AsmParser::ParseEscapedString(std::string &Data) { assert(getLexer().is(AsmToken::String) && "Unexpected current token!"); |