svn commit: r281908 - in stable: 10/contrib/llvm/lib/MC/MCParser 10/contrib/llvm/patches 9/contrib/llvm/lib/MC/MCParser 9/contrib/llvm/patches

Dimitry Andric dim at FreeBSD.org
Thu Apr 23 22:06:04 UTC 2015


Author: dim
Date: Thu Apr 23 22:06:02 2015
New Revision: 281908
URL: https://svnweb.freebsd.org/changeset/base/281908

Log:
  MFC r281775:
  
  Pull in r229911 from upstream llvm trunk (by Benjamin Kramer):
  
    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?
  
  Reported by:	sbruno
  PR:		199554
  
  MFC r281777:
  
  Add llvm patch corresponding to r281775.

Added:
  stable/10/contrib/llvm/patches/patch-r281775-llvm-r229911-uleb128-commas.diff
     - copied unchanged from r281777, head/contrib/llvm/patches/patch-13-llvm-r229911-uleb128-commas.diff
Modified:
  stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
Directory Properties:
  stable/10/   (props changed)

Changes in other areas also in this revision:
Added:
  stable/9/contrib/llvm/patches/patch-r281775-llvm-r229911-uleb128-commas.diff
     - copied unchanged from r281777, head/contrib/llvm/patches/patch-13-llvm-r229911-uleb128-commas.diff
Modified:
  stable/9/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
Directory Properties:
  stable/9/contrib/llvm/   (props changed)

Modified: stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
==============================================================================
--- stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp	Thu Apr 23 21:39:32 2015	(r281907)
+++ stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp	Thu Apr 23 22:06:02 2015	(r281908)
@@ -3370,21 +3370,27 @@ bool AsmParser::parseDirectiveSpace(Stri
 }
 
 /// 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;
 }

Copied: stable/10/contrib/llvm/patches/patch-r281775-llvm-r229911-uleb128-commas.diff (from r281777, head/contrib/llvm/patches/patch-13-llvm-r229911-uleb128-commas.diff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/contrib/llvm/patches/patch-r281775-llvm-r229911-uleb128-commas.diff	Thu Apr 23 22:06:02 2015	(r281908, copy of r281777, head/contrib/llvm/patches/patch-13-llvm-r229911-uleb128-commas.diff)
@@ -0,0 +1,77 @@
+Pull in r229911 from upstream llvm trunk (by Benjamin Kramer):
+
+  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?
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/281775
+
+Index: lib/MC/MCParser/AsmParser.cpp
+===================================================================
+--- lib/MC/MCParser/AsmParser.cpp
++++ lib/MC/MCParser/AsmParser.cpp
+@@ -3636,22 +3636,28 @@ bool AsmParser::parseDirectiveSpace(StringRef IDVa
+ }
+ 
+ /// 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;
+ }
+ 
+Index: test/MC/ELF/uleb.s
+===================================================================
+--- test/MC/ELF/uleb.s
++++ 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')


More information about the svn-src-all mailing list