diff options
author | Joerg Sonnenberger <joerg@bec.de> | 2015-03-09 18:07:19 +0000 |
---|---|---|
committer | Joerg Sonnenberger <joerg@bec.de> | 2015-03-09 18:07:19 +0000 |
commit | c583e8421f66785a780b1cc8505c06e8fef917fc (patch) | |
tree | e5920310e8ac892cde3b34a4785e57c3135b8d38 | |
parent | f3c13c6e905c8bc51de6e2de338c63417bb53573 (diff) | |
download | llvm-c583e8421f66785a780b1cc8505c06e8fef917fc.tar.gz |
Merging r229911 by d0k:
MC: Allow multiple comma-separated expressions on the .uleb128
directive.
For compatiblity with GNU as. Binutils documents this as
'.uleb128 expressions'. Subtle, isn't it?
git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_36@231675 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 24 | ||||
-rw-r--r-- | test/MC/ELF/uleb.s | 9 |
2 files changed, 20 insertions, 13 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index 8eff90a9ef7..e2a4fc1bef7 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -3636,21 +3636,27 @@ bool AsmParser::parseDirectiveSpace(StringRef IDVal) { } /// parseDirectiveLEB128 -/// ::= (.sleb128 | .uleb128) expression +/// ::= (.sleb128 | .uleb128) [ expression (, expression)* ] bool AsmParser::parseDirectiveLEB128(bool Signed) { checkForValidSection(); const MCExpr *Value; - if (parseExpression(Value)) - return true; + for (;;) { + if (parseExpression(Value)) + return true; - if (getLexer().isNot(AsmToken::EndOfStatement)) - return TokError("unexpected token in directive"); + if (Signed) + getStreamer().EmitSLEB128Value(Value); + else + getStreamer().EmitULEB128Value(Value); - if (Signed) - getStreamer().EmitSLEB128Value(Value); - else - getStreamer().EmitULEB128Value(Value); + if (getLexer().is(AsmToken::EndOfStatement)) + break; + + if (getLexer().isNot(AsmToken::Comma)) + return TokError("unexpected token in directive"); + Lex(); + } return false; } diff --git a/test/MC/ELF/uleb.s b/test/MC/ELF/uleb.s index d755cc23e39..5d203a93f02 100644 --- a/test/MC/ELF/uleb.s +++ b/test/MC/ELF/uleb.s @@ -11,16 +11,17 @@ foo: .uleb128 128 .uleb128 16383 .uleb128 16384 + .uleb128 23, 42 // ELF_32: Name: .text // ELF_32: SectionData ( -// ELF_32: 0000: 00017F80 01FF7F80 8001 +// ELF_32: 0000: 00017F80 01FF7F80 8001172A // ELF_32: ) // ELF_64: Name: .text // ELF_64: SectionData ( -// ELF_64: 0000: 00017F80 01FF7F80 8001 +// ELF_64: 0000: 00017F80 01FF7F80 8001172A // ELF_64: ) // MACHO_32: ('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -// MACHO_32: ('_section_data', '00017f80 01ff7f80 8001') +// MACHO_32: ('_section_data', '00017f80 01ff7f80 8001172a') // MACHO_64: ('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') -// MACHO_64: ('_section_data', '00017f80 01ff7f80 8001') +// MACHO_64: ('_section_data', '00017f80 01ff7f80 8001172a') |