]> granicus.if.org Git - llvm/commitdiff
[llvm-readobj] Display section names for STT_SECTION symbols.
authorMatt Davis <Matthew.Davis@sony.com>
Fri, 1 Mar 2019 17:31:32 +0000 (17:31 +0000)
committerMatt Davis <Matthew.Davis@sony.com>
Fri, 1 Mar 2019 17:31:32 +0000 (17:31 +0000)
Summary:
This patch will obtain the section name for symbols that refer to a section.  Prior to this patch the Name field for STT_SECTIONs was blank, now it is populated.

Before:
```
Symbol table '.symtab' contains 6 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _GLOBAL_OFFSET_TABLE_
     5: 0000000000000000     0 TLS     GLOBAL DEFAULT  UND sym
```

With this patch:
```
Symbol table '.symtab' contains 6 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 .text
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    3 .data
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 .bss
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _GLOBAL_OFFSET_TABLE_
     5: 0000000000000000     0 TLS     GLOBAL DEFAULT  UND sym
```

This fixes PR40788

Reviewers: jhenderson, rupprecht, espindola

Reviewed By: rupprecht

Subscribers: emaste, javed.absar, arichardson, MaskRay, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D58796

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355207 91177308-0d34-0410-b5e6-96231b3b80d8

test/MC/ARM/arm-elf-symver.s
test/MC/ELF/alias.s
test/MC/ELF/many-sections-2.s
test/MC/ELF/section-sym.s
test/MC/ELF/symver.s
test/MC/ELF/weakref.s
test/Object/readobj-shared-object.test
test/tools/llvm-readobj/gnu-symbols.test
test/tools/llvm-readobj/sections-ext.test
tools/llvm-readobj/ELFDumper.cpp

index ce9c4fe5f00e1527650355180344a4a01af1b9c6..8a0aefc68f63857c86ff6181317fb5ba9add6ba6 100644 (file)
@@ -78,7 +78,7 @@ global1:
 @ CHECK-NEXT:     Section: .text
 @ CHECK-NEXT:   }
 @ CHECK-NEXT:   Symbol {
-@ CHECK-NEXT:     Name: (0)
+@ CHECK-NEXT:     Name: .text (0)
 @ CHECK-NEXT:     Value: 0x0
 @ CHECK-NEXT:     Size: 0
 @ CHECK-NEXT:     Binding: Local (0x0)
index df39fd4be147d24000d231252b776943459693fe..c575ce81b41a1de4d9a0a07d0ad5b7d1e0380a9a 100644 (file)
@@ -107,7 +107,7 @@ leaq .Llocal1(%rip), %rdi
 // CHECK-NEXT:     Section: .text
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
-// CHECK-NEXT:     Name: (0)
+// CHECK-NEXT:     Name: .data (0)
 // CHECK-NOT: Symbol {
 // CHECK:        }
 // CHECK-NEXT:   Symbol {
index 2c3e4b87bb89314ac8a1ede94a07862491ebbc74..71ac870c8bce6a5cd5a622e50dbc65ac3f9bef57 100644 (file)
@@ -32,7 +32,7 @@
 
 
 // Test that this file has one section too many.
-// SYMBOLS:         Name: (0)
+// SYMBOLS:         Name: dm (0)
 // SYMBOLS:         Value: 0x0
 // SYMBOLS:         Size: 0
 // SYMBOLS:         Binding: Local (0x0)
index 9e660526b7adfc8914962f5c3f1aadf34d947888..5d5486f9f7a587a78c225f9babefa9f996816bc7 100644 (file)
@@ -82,7 +82,7 @@
 // CHECK-NEXT:    Section: .group
 // CHECK-NEXT:  }
 // CHECK-NEXT:  Symbol {
-// CHECK-NEXT:    Name:  (0)
+// CHECK-NEXT:    Name:  foo (0)
 // CHECK-NEXT:    Value: 0x0
 // CHECK-NEXT:    Size: 0
 // CHECK-NEXT:    Binding: Local (0x0)
index 0f434dd859d3813a33e34ed939d61af5e9e02171..8883d192d28dc89862c118fcea5ac8e532434de9 100644 (file)
@@ -77,7 +77,7 @@ global1:
 // CHECK-NEXT:     Section: .text
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
-// CHECK-NEXT:     Name: (0)
+// CHECK-NEXT:     Name: .text (0)
 // CHECK-NEXT:     Value: 0x0
 // CHECK-NEXT:     Size: 0
 // CHECK-NEXT:     Binding: Local
index d342c61f745abbee2652709219b03c421fef7396..986e92d1d4726a23a4e1e7ebaf2fe499faee1e8d 100644 (file)
@@ -116,7 +116,7 @@ bar15:
 // CHECK-NEXT:     Section: .text
 // CHECK-NEXT:   }
 // CHECK-NEXT:   Symbol {
-// CHECK-NEXT:     Name: (0)
+// CHECK-NEXT:     Name: .text (0)
 // CHECK-NEXT:     Value: 0x0
 // CHECK-NEXT:     Size: 0
 // CHECK-NEXT:     Binding: Local
index 59f5ff127cf36a9b47059a39e7441d3d4c916bac..da594af799e3cd0a04deae823ff808fc1ec95a51 100644 (file)
@@ -128,61 +128,61 @@ ELF: ]
 
 ELF: Symbols [
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .hash (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .hash
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .dynsym (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .dynsym
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .dynstr (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .dynstr
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .text (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .text
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .eh_frame (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .eh_frame
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .tdata (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .tdata
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .dynamic (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .dynamic
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .got.plt (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .got.plt
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .data (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .data
 ELF:   }
 ELF:   Symbol {
-ELF:     Name: (0)
+ELF:     Name: .bss (0)
 ELF:     Binding: Local
 ELF:     Type: Section
 ELF:     Section: .bss
index 18d43f6290d6ba6a8bddd77f284c4ccd9244f263..2d864d426c57befb6178f185700ae45f06980a70 100644 (file)
@@ -20,9 +20,9 @@ ELF32-NEXT:      4: 00000000     4 OBJECT  GLOBAL DEFAULT    3 y
 ELF64: Symbol table '.symtab' contains 6 entries:
 ELF64-NEXT:   Num:    Value          Size Type    Bind   Vis      Ndx Name
 ELF64-NEXT:     0:  0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
-ELF64-NEXT:     1:  0000000000000000     0 SECTION LOCAL  DEFAULT    1
-ELF64-NEXT:     2:  0000000000000000     0 SECTION LOCAL  DEFAULT    3
-ELF64-NEXT:     3:  0000000000000000     0 SECTION LOCAL  DEFAULT    4
+ELF64-NEXT:     1:  0000000000000000     0 SECTION LOCAL  DEFAULT    1 .text
+ELF64-NEXT:     2:  0000000000000000     0 SECTION LOCAL  DEFAULT    3 .data
+ELF64-NEXT:     3:  0000000000000000     0 SECTION LOCAL  DEFAULT    4 .bss
 ELF64-NEXT:     4:  0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _GLOBAL_OFFSET_TABLE_
 ELF64-NEXT:     5:  0000000000000000     0 TLS     GLOBAL DEFAULT  UND sym
 
@@ -42,11 +42,11 @@ NO-SYMTAB-NOT: Symbol table '.symtab'
 SYMTAB: Symbol table '.symtab' contains 12 entries:
 SYMTAB-NEXT:   Num:    Value          Size Type    Bind   Vis      Ndx Name
 SYMTAB-NEXT:     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
-SYMTAB-NEXT:     1: 00000000000000e8     0 SECTION LOCAL  DEFAULT    1
-SYMTAB-NEXT:     2: 0000000000000120     0 SECTION LOCAL  DEFAULT    2
-SYMTAB-NEXT:     3: 0000000000000198     0 SECTION LOCAL  DEFAULT    3
-SYMTAB-NEXT:     4: 00000000000001b8     0 SECTION LOCAL  DEFAULT    4
-SYMTAB-NEXT:     5: 00000000002001b8     0 SECTION LOCAL  DEFAULT    5
+SYMTAB-NEXT:     1: 00000000000000e8     0 SECTION LOCAL  DEFAULT    1 .gnu.hash
+SYMTAB-NEXT:     2: 0000000000000120     0 SECTION LOCAL  DEFAULT    2 .dynsym
+SYMTAB-NEXT:     3: 0000000000000198     0 SECTION LOCAL  DEFAULT    3 .dynstr
+SYMTAB-NEXT:     4: 00000000000001b8     0 SECTION LOCAL  DEFAULT    4 .eh_frame
+SYMTAB-NEXT:     5: 00000000002001b8     0 SECTION LOCAL  DEFAULT    5 .dynamic
 SYMTAB-NEXT:     6: 00000000002001b8     0 OBJECT  LOCAL  DEFAULT    5 _DYNAMIC
 SYMTAB-NEXT:     7: 0000000000200268     0 OBJECT  LOCAL  DEFAULT    5 _GLOBAL_OFFSET_TABLE_
 SYMTAB-NEXT:     8: 0000000000200268     0 NOTYPE  GLOBAL DEFAULT    5 __bss_start
index 085693829c394eb8388570adcb3777106081f718..e9849a67a31fcc8f8c4d6d259026d9225707cba6 100644 (file)
@@ -124,7 +124,7 @@ ELF-NEXT:     Relocations [
 ELF-NEXT:     ]
 ELF-NEXT:     Symbols [
 ELF-NEXT:       Symbol {
-ELF-NEXT:         Name: (0)
+ELF-NEXT:         Name: .text (0)
 ELF-NEXT:         Value: 0x0
 ELF-NEXT:         Size: 0
 ELF-NEXT:         Binding: Local (0x0)
index 6428e9926ef947aaa1c9e77b2a25bfecb9587964..786a028035f883cfc4170c8a6b75ca173d8f2c90 100644 (file)
@@ -814,6 +814,16 @@ std::string ELFDumper<ELFT>::getFullSymbolName(const Elf_Sym *Symbol,
                                                bool IsDynamic) const {
   std::string SymbolName =
       maybeDemangle(unwrapOrError(Symbol->getName(StrTable)));
+
+  if (SymbolName.empty() && Symbol->getType() == ELF::STT_SECTION) {
+    unsigned SectionIndex;
+    StringRef SectionName;
+    Elf_Sym_Range Syms =
+        unwrapOrError(ObjF->getELFFile()->symbols(DotSymtabSec));
+    getSectionNameIndex(Symbol, Syms.begin(), SectionName, SectionIndex);
+    return SectionName;
+  }
+
   if (!IsDynamic)
     return SymbolName;