[PATCH] D63280: [llvm-objdump] Use <first-symbol>-<offset> as the section start symbol

Yuanfang Chen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 13 09:44:03 PDT 2019


ychen created this revision.
ychen added reviewers: jhenderson, grimar, MaskRay, rupprecht.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

provided that later symbol exists. If not, use section name.

https://bugs.llvm.org/show_bug.cgi?id=41946


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D63280

Files:
  llvm/test/Object/Inputs/no-start-symbol.elf-x86_64
  llvm/test/Object/X86/no-start-symbol.test
  llvm/test/tools/llvm-objdump/X86/elf-disassemble-no-start-symbol.test
  llvm/tools/llvm-objdump/llvm-objdump.cpp


Index: llvm/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1152,10 +1152,20 @@
     error(Section.getName(SectionName));
 
     // If the section has no symbol at the start, just insert a dummy one.
-    if (Symbols.empty() || std::get<0>(Symbols[0]) != 0) {
+    std::string StartSymbol;
+    if (Symbols.empty() || std::get<0>(Symbols[0]) != SectionAddr) {
+      StartSymbol = SectionName;
+      if (!Symbols.empty()) {
+        StartSymbol = std::get<1>(Symbols[0]);
+        if (Demangle)
+          StartSymbol = demangle(StartSymbol);
+        StartSymbol += "-0x";
+        StartSymbol += utohexstr(std::get<0>(Symbols[0]) - SectionAddr);
+      }
+
       Symbols.insert(
           Symbols.begin(),
-          std::make_tuple(SectionAddr, SectionName,
+          std::make_tuple(SectionAddr, StringRef(StartSymbol),
                           Section.isText() ? ELF::STT_FUNC : ELF::STT_OBJECT));
     }
 
Index: llvm/test/tools/llvm-objdump/X86/elf-disassemble-no-start-symbol.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objdump/X86/elf-disassemble-no-start-symbol.test
@@ -0,0 +1,44 @@
+## Test that if there is no symbol at the start of a section, we show a label
+## with the name <first-symbol-name>-0x<offset-of-first-symbol>
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump -d %t | FileCheck %s
+
+# CHECK:       Disassembly of section .text:
+# CHECK-EMPTY:
+# CHECK-NEXT:  0000000000001000 first_symbol-0x1:
+# CHECK-NEXT:      1000:
+# CHECK-EMPTY:
+# CHECK-NEXT:  0000000000001001 first_symbol:
+# CHECK-NEXT:      1001:
+# CHECK-EMPTY:
+# CHECK-NEXT:  Disassembly of section .text.no.sym:
+# CHECK-EMPTY:
+# CHECK-NEXT:  0000000000001002 .text.no.sym:
+# CHECK-NEXT:      1002:
+# CHECK-NEXT:      1003:{{.*}}
+# CHECK-NOT:   {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Address: 0x1000
+    Content: 9090
+  - Name:    .text.no.sym
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Address: 0x1002
+    Content: 9090
+Symbols:
+  - Name:    first_symbol
+    Value:   0x1001
+    Section: .text
+  - Name:    sym_with_no_section
+    Value:   0x1003
Index: llvm/test/Object/X86/no-start-symbol.test
===================================================================
--- llvm/test/Object/X86/no-start-symbol.test
+++ /dev/null
@@ -1,10 +0,0 @@
-RUN: llvm-objdump -d %p/../Inputs/no-start-symbol.elf-x86_64 | FileCheck %s
-
-Test that we disassemble the start of the section.
-
-CHECK: Disassembly of section .text:
-CHECK-EMPTY:
-CHECK-NEXT:  .text:
-CHECK-NEXT:       0:	90 	nop
-CHECK: foo:
-CHECK-NEXT:       1:	90 	nop


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63280.204565.patch
Type: text/x-patch
Size: 2968 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190613/f9e0052e/attachment.bin>


More information about the llvm-commits mailing list