[llvm] r321419 - [MC] - Teach llvm-mc to handle comdats whose names are numbers.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 23 22:13:37 PST 2017


Author: grimar
Date: Sat Dec 23 22:13:36 2017
New Revision: 321419

URL: http://llvm.org/viewvc/llvm-project?rev=321419&view=rev
Log:
[MC] - Teach llvm-mc to handle comdats whose names are numbers.

Currently llvm-mc ignores COMDATs whose names are numbers,
for example following code:

.section .foo,"G", at progbits,123,comdat

would produce no COMDATs at all.

Patch fixes the issue. 

Differential revision: https://reviews.llvm.org/D41552

Added:
    llvm/trunk/test/MC/ELF/comdat-name-number.s
Modified:
    llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp

Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=321419&r1=321418&r2=321419&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Sat Dec 23 22:13:36 2017
@@ -423,8 +423,12 @@ bool ELFAsmParser::parseGroup(StringRef
   if (L.isNot(AsmToken::Comma))
     return TokError("expected group name");
   Lex();
-  if (getParser().parseIdentifier(GroupName))
+  if (L.is(AsmToken::Integer)) {
+    GroupName = getTok().getString();
+    Lex();
+  } else if (getParser().parseIdentifier(GroupName)) {
     return true;
+  }
   if (L.is(AsmToken::Comma)) {
     Lex();
     StringRef Linkage;

Added: llvm/trunk/test/MC/ELF/comdat-name-number.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat-name-number.s?rev=321419&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/comdat-name-number.s (added)
+++ llvm/trunk/test/MC/ELF/comdat-name-number.s Sat Dec 23 22:13:36 2017
@@ -0,0 +1,28 @@
+// RUN: llvm-mc -triple x86_64-pc-linux-gnu %s -filetype=obj -o %t.o 
+// RUN: llvm-readobj -elf-section-groups %t.o | FileCheck %s
+
+// Test that we can handle numeric COMDAT names.
+
+.section .foo,"G", at progbits,123,comdat
+.section .bar,"G", at progbits,abc,comdat
+
+// CHECK:      Groups {
+// CHECK-NEXT:   Group {
+// CHECK-NEXT:     Name: .group
+// CHECK-NEXT:     Index:
+// CHECK-NEXT:     Type: COMDAT
+// CHECK-NEXT:     Signature: 123
+// CHECK-NEXT:     Section(s) in group [
+// CHECK-NEXT:       .foo
+// CHECK-NEXT:     ]
+// CHECK-NEXT:   }
+// CHECK-NEXT:   Group {
+// CHECK-NEXT:     Name: .group
+// CHECK-NEXT:     Index:
+// CHECK-NEXT:     Type: COMDAT
+// CHECK-NEXT:     Signature: abc
+// CHECK-NEXT:     Section(s) in group [
+// CHECK-NEXT:       .bar
+// CHECK-NEXT:     ]
+// CHECK-NEXT:   }
+// CHECK-NEXT: }




More information about the llvm-commits mailing list