diff options
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 24 | ||||
| -rw-r--r-- | llvm/test/MC/ELF/uleb.s | 9 | 
2 files changed, 20 insertions, 13 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index c714f3ee261..ef6a54002d3 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/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/llvm/test/MC/ELF/uleb.s b/llvm/test/MC/ELF/uleb.s index d755cc23e39..5d203a93f02 100644 --- a/llvm/test/MC/ELF/uleb.s +++ b/llvm/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')  | 

