[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