1281777SdimPull in r229911 from upstream llvm trunk (by Benjamin Kramer): 2281777Sdim 3281777Sdim MC: Allow multiple comma-separated expressions on the .uleb128 directive. 4281777Sdim 5281777Sdim For compatiblity with GNU as. Binutils documents this as 6281777Sdim '.uleb128 expressions'. Subtle, isn't it? 7281777Sdim 8281777SdimIntroduced here: http://svnweb.freebsd.org/changeset/base/281775 9281777Sdim 10281777SdimIndex: lib/MC/MCParser/AsmParser.cpp 11281777Sdim=================================================================== 12281777Sdim--- lib/MC/MCParser/AsmParser.cpp 13281777Sdim+++ lib/MC/MCParser/AsmParser.cpp 14281777Sdim@@ -3636,22 +3636,28 @@ bool AsmParser::parseDirectiveSpace(StringRef IDVa 15281777Sdim } 16281777Sdim 17281777Sdim /// parseDirectiveLEB128 18281777Sdim-/// ::= (.sleb128 | .uleb128) expression 19281777Sdim+/// ::= (.sleb128 | .uleb128) [ expression (, expression)* ] 20281777Sdim bool AsmParser::parseDirectiveLEB128(bool Signed) { 21281777Sdim checkForValidSection(); 22281777Sdim const MCExpr *Value; 23281777Sdim 24281777Sdim- if (parseExpression(Value)) 25281777Sdim- return true; 26281777Sdim+ for (;;) { 27281777Sdim+ if (parseExpression(Value)) 28281777Sdim+ return true; 29281777Sdim 30281777Sdim- if (getLexer().isNot(AsmToken::EndOfStatement)) 31281777Sdim- return TokError("unexpected token in directive"); 32281777Sdim+ if (Signed) 33281777Sdim+ getStreamer().EmitSLEB128Value(Value); 34281777Sdim+ else 35281777Sdim+ getStreamer().EmitULEB128Value(Value); 36281777Sdim 37281777Sdim- if (Signed) 38281777Sdim- getStreamer().EmitSLEB128Value(Value); 39281777Sdim- else 40281777Sdim- getStreamer().EmitULEB128Value(Value); 41281777Sdim+ if (getLexer().is(AsmToken::EndOfStatement)) 42281777Sdim+ break; 43281777Sdim 44281777Sdim+ if (getLexer().isNot(AsmToken::Comma)) 45281777Sdim+ return TokError("unexpected token in directive"); 46281777Sdim+ Lex(); 47281777Sdim+ } 48281777Sdim+ 49281777Sdim return false; 50281777Sdim } 51281777Sdim 52281777SdimIndex: test/MC/ELF/uleb.s 53281777Sdim=================================================================== 54281777Sdim--- test/MC/ELF/uleb.s 55281777Sdim+++ test/MC/ELF/uleb.s 56281777Sdim@@ -11,16 +11,17 @@ foo: 57281777Sdim .uleb128 128 58281777Sdim .uleb128 16383 59281777Sdim .uleb128 16384 60281777Sdim+ .uleb128 23, 42 61281777Sdim 62281777Sdim // ELF_32: Name: .text 63281777Sdim // ELF_32: SectionData ( 64281777Sdim-// ELF_32: 0000: 00017F80 01FF7F80 8001 65281777Sdim+// ELF_32: 0000: 00017F80 01FF7F80 8001172A 66281777Sdim // ELF_32: ) 67281777Sdim // ELF_64: Name: .text 68281777Sdim // ELF_64: SectionData ( 69281777Sdim-// ELF_64: 0000: 00017F80 01FF7F80 8001 70281777Sdim+// ELF_64: 0000: 00017F80 01FF7F80 8001172A 71281777Sdim // ELF_64: ) 72281777Sdim // MACHO_32: ('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 73281777Sdim-// MACHO_32: ('_section_data', '00017f80 01ff7f80 8001') 74281777Sdim+// MACHO_32: ('_section_data', '00017f80 01ff7f80 8001172a') 75281777Sdim // MACHO_64: ('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') 76281777Sdim-// MACHO_64: ('_section_data', '00017f80 01ff7f80 8001') 77281777Sdim+// MACHO_64: ('_section_data', '00017f80 01ff7f80 8001172a') 78