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/trunk@229911 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2015-02-19 20:24:04 +00:00
parent b886152fde
commit 6715e16c4f
2 changed files with 20 additions and 13 deletions

View File

@ -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;
}

View File

@ -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')