[llvm-readobj] Add -elf-section-groups option

Adds a way to inspect SHT_GROUP sections in ELF objects.
Displays signature, member sections of these sections.

Differential revision: http://reviews.llvm.org/D16555

llvm-svn: 258845
diff --git a/llvm/test/tools/llvm-readobj/elf-groups.test b/llvm/test/tools/llvm-readobj/elf-groups.test
new file mode 100644
index 0000000..e41b9dd
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/elf-groups.test
@@ -0,0 +1,39 @@
+# Source file compiled:
+##include <iostream>
+# #include <typeinfo>
+#template <class A>
+#void foo(A variable) {
+#  std::cout << "foo is " << typeid(A).name() << "\n";
+#}
+#int main () {
+#  char x = 'x';
+#  int y = 1;
+#  foo(x);
+#  foo(y);
+#  return 0;
+#}
+
+RUN: llvm-readobj -g %p/Inputs/elf-groups.x86_64 \
+RUN:   | FileCheck %s
+CHECK:         Groups {
+CHECK-NEXT:      Group {
+CHECK-NEXT:        Name: .group (92)
+CHECK-NEXT:        Index: 1
+CHECK-NEXT:        Type: COMDAT (0x1)
+CHECK-NEXT:        Signature: _Z3fooIcEvT_
+CHECK-NEXT:        Section(s) in group [
+CHECK-NEXT:          .text._Z3fooIcEvT_ (10)
+CHECK-NEXT:          .rela.text._Z3fooIcEvT_ (11)
+CHECK-NEXT:        ]
+CHECK-NEXT:      }
+CHECK-NEXT:      Group {
+CHECK-NEXT:        Name: .group (92)
+CHECK-NEXT:        Index: 2
+CHECK-NEXT:        Type: COMDAT (0x1)
+CHECK-NEXT:        Signature: _Z3fooIiEvT_
+CHECK-NEXT:        Section(s) in group [
+CHECK-NEXT:          .text._Z3fooIiEvT_ (12)
+CHECK-NEXT:          .rela.text._Z3fooIiEvT_ (13)
+CHECK-NEXT:        ]
+CHECK-NEXT:      }
+