diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2010-07-17 06:27:28 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2010-07-17 06:27:28 +0000 |
commit | dc1ad22d5351fca6885ba4ecb18967f8ada7d42a (patch) | |
tree | 0f3f5a9e1879b07472726fd5a6f228f5a7e8ca20 | |
parent | e332553eae20573f22d6d7e909f302c8923b5046 (diff) |
Start of .sleb128/.uleb128 parsing support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108612 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCParser/ELFAsmParser.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index 340af23cf9..8bbc8b37cb 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "llvm/MC/MCParser/MCAsmParserExtension.h" +#include "llvm/ADT/Twine.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCParser/MCAsmLexer.h" @@ -36,6 +37,10 @@ public: &ELFAsmParser::ParseDirectiveSection)); Parser.AddDirectiveHandler(this, ".size", MCAsmParser::DirectiveHandler( &ELFAsmParser::ParseDirectiveSize)); + Parser.AddDirectiveHandler(this, ".sleb128", MCAsmParser::DirectiveHandler( + &ELFAsmParser::ParseDirectiveLEB128)); + Parser.AddDirectiveHandler(this, ".uleb128", MCAsmParser::DirectiveHandler( + &ELFAsmParser::ParseDirectiveLEB128)); } bool ParseSectionDirectiveData(StringRef, SMLoc) { @@ -48,6 +53,7 @@ public: MCSectionELF::SHF_EXECINSTR | MCSectionELF::SHF_ALLOC, SectionKind::getText()); } + bool ParseDirectiveLEB128(StringRef, SMLoc); bool ParseDirectiveSection(StringRef, SMLoc); bool ParseDirectiveSize(StringRef, SMLoc); }; @@ -191,6 +197,26 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) { return false; } +bool ELFAsmParser::ParseDirectiveLEB128(StringRef DirName, SMLoc) { + int64_t Value; + if (getParser().ParseAbsoluteExpression(Value)) + return true; + + if (getLexer().isNot(AsmToken::EndOfStatement)) + return TokError("unexpected token in directive"); + + // FIXME: Add proper MC support. + if (getContext().getAsmInfo().hasLEB128()) { + if (DirName[1] == 's') + getStreamer().EmitRawText("\t.sleb128\t" + Twine(Value)); + else + getStreamer().EmitRawText("\t.uleb128\t" + Twine(Value)); + return false; + } + // FIXME: This shouldn't be an error! + return TokError("LEB128 not supported yet"); +} + namespace llvm { MCAsmParserExtension *createELFAsmParser() { |