[llvm] r373671 - [llvm-objdump] Further rearrange llvm-objdump sections for compatability

Jordan Rupprecht via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 3 15:01:09 PDT 2019


Author: rupprecht
Date: Thu Oct  3 15:01:08 2019
New Revision: 373671

URL: http://llvm.org/viewvc/llvm-project?rev=373671&view=rev
Log:
[llvm-objdump] Further rearrange llvm-objdump sections for compatability

Summary:
rL371826 rearranged some output from llvm-objdump for GNU objdump compatability, but there still seem to be some more.

I think this rearrangement is a little closer. Overview of the ordering which matches GNU objdump:
* Archive headers
* File headers
* Section headers
* Symbol table
* Dwarf debugging
* Relocations (if `--disassemble` is not used)
* Section contents
* Disassembly

Reviewers: jhenderson, justice_adams, grimar, ychen, espindola

Reviewed By: jhenderson

Subscribers: aprantl, emaste, arichardson, jrtc27, atanasyan, seiya, llvm-commits, MaskRay

Tags: #llvm

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

Added:
    llvm/trunk/test/tools/llvm-objdump/output-ordering.test
Modified:
    llvm/trunk/test/MC/COFF/symidx.s
    llvm/trunk/test/tools/llvm-objdump/X86/adjust-vma.test
    llvm/trunk/test/tools/llvm-objdump/X86/demangle.s
    llvm/trunk/test/tools/llvm-objdump/X86/out-of-section-sym.test
    llvm/trunk/test/tools/llvm-objdump/all-headers.test
    llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp

Modified: llvm/trunk/test/MC/COFF/symidx.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/symidx.s?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/symidx.s (original)
+++ llvm/trunk/test/MC/COFF/symidx.s Thu Oct  3 15:01:08 2019
@@ -8,8 +8,8 @@ bar:
 .symidx	bar
 .symidx	foo
 
-// CHECK:      Contents of section .data:
-// CHECK-NEXT:  0000 0[[BAR:[1-9]]]000000 0[[FOO:[1-9]]]000000
 // CHECK:      SYMBOL TABLE:
-// CHECK:      [ [[FOO]]](sec  1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000000 foo
-// CHECK-NEXT: [ [[BAR]]](sec  1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000001 bar
+// CHECK:      [ [[FOO:[1-9]]]](sec  1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000000 foo
+// CHECK-NEXT: [ [[BAR:[1-9]]]](sec  1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000001 bar
+// CHECK:      Contents of section .data:
+// CHECK-NEXT:  0000 0[[BAR]]000000 0[[FOO]]000000

Modified: llvm/trunk/test/tools/llvm-objdump/X86/adjust-vma.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/adjust-vma.test?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/adjust-vma.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/adjust-vma.test Thu Oct  3 15:01:08 2019
@@ -3,6 +3,35 @@
 # RUN: llvm-objdump --all-headers -D -z --adjust-vma=0x0 %t | FileCheck %s --check-prefixes=COMMON,NOADJUST
 # RUN: llvm-objdump --all-headers -D -z --adjust-vma=0x123000 %t | FileCheck %s --check-prefixes=COMMON,ADJUST
 
+# NOADJUST:      Sections:
+# NOADJUST-NEXT: Idx Name           Size     VMA              Type
+# NOADJUST-NEXT:  0                 00000000 0000000000000000
+# NOADJUST-NEXT:  1 .text           00000002 0000000000000000 TEXT
+# NOADJUST-NEXT:  2 .debug_str      00000004 0000000000000000
+# NOADJUST-NEXT:  3 .rela.debug_str 00000018 0000000000000000
+# NOADJUST-NEXT:  4 .data           00000004 0000000000000000 DATA
+# NOADJUST-NEXT:  5 .rela.data      00000018 0000000000000000
+# NOADJUST-NEXT:  6 .symtab         00000060 0000000000000000
+# NOADJUST-NEXT:  7 .strtab         00000010 0000000000000000
+# NOADJUST-NEXT:  8 .shstrtab       0000003c 0000000000000000
+
+# ADJUST:        Sections:
+# ADJUST-NEXT:   Idx Name           Size     VMA              Type
+# ADJUST-NEXT:    0                 00000000 0000000000000000
+# ADJUST-NEXT:    1 .text           00000002 0000000000123000 TEXT
+# ADJUST-NEXT:    2 .debug_str      00000004 0000000000000000
+# ADJUST-NEXT:    3 .rela.debug_str 00000018 0000000000000000
+# ADJUST-NEXT:    4 .data           00000004 0000000000123000 DATA
+# ADJUST-NEXT:    5 .rela.data      00000018 0000000000000000
+# ADJUST-NEXT:    6 .symtab         00000060 0000000000000000
+# ADJUST-NEXT:    7 .strtab         00000010 0000000000000000
+# ADJUST-NEXT:    8 .shstrtab       0000003c 0000000000000000
+
+# COMMON:      SYMBOL TABLE:
+# COMMON-NEXT:  0000000000000001  l F .text 00000000 func
+# COMMON-NEXT:  0000000000000000      .text 00000000 sym
+# COMMON-NEXT:  0000000000000000  l d .text 00000000 .text
+
 # NOADJUST:      0000000000000000 sym:
 # NOADJUST-NEXT:   0: {{.*}}  nop
 # NOADJUST:      0000000000000001 func:
@@ -41,35 +70,6 @@
 # COMMON-NEXT:    0: {{.*}} addb %al, (%rax)
 ## ... There are more lines here. We do not care.
 
-# NOADJUST:      Sections:
-# NOADJUST-NEXT: Idx Name           Size     VMA              Type
-# NOADJUST-NEXT:  0                 00000000 0000000000000000
-# NOADJUST-NEXT:  1 .text           00000002 0000000000000000 TEXT
-# NOADJUST-NEXT:  2 .debug_str      00000004 0000000000000000
-# NOADJUST-NEXT:  3 .rela.debug_str 00000018 0000000000000000
-# NOADJUST-NEXT:  4 .data           00000004 0000000000000000 DATA
-# NOADJUST-NEXT:  5 .rela.data      00000018 0000000000000000
-# NOADJUST-NEXT:  6 .symtab         00000060 0000000000000000
-# NOADJUST-NEXT:  7 .strtab         00000010 0000000000000000
-# NOADJUST-NEXT:  8 .shstrtab       0000003c 0000000000000000
-
-# ADJUST:        Sections:
-# ADJUST-NEXT:   Idx Name           Size     VMA              Type
-# ADJUST-NEXT:    0                 00000000 0000000000000000
-# ADJUST-NEXT:    1 .text           00000002 0000000000123000 TEXT
-# ADJUST-NEXT:    2 .debug_str      00000004 0000000000000000
-# ADJUST-NEXT:    3 .rela.debug_str 00000018 0000000000000000
-# ADJUST-NEXT:    4 .data           00000004 0000000000123000 DATA
-# ADJUST-NEXT:    5 .rela.data      00000018 0000000000000000
-# ADJUST-NEXT:    6 .symtab         00000060 0000000000000000
-# ADJUST-NEXT:    7 .strtab         00000010 0000000000000000
-# ADJUST-NEXT:    8 .shstrtab       0000003c 0000000000000000
-
-# COMMON:      SYMBOL TABLE:
-# COMMON-NEXT:  0000000000000001  l F .text 00000000 func
-# COMMON-NEXT:  0000000000000000      .text 00000000 sym
-# COMMON-NEXT:  0000000000000000  l d .text 00000000 .text
-
 --- !ELF
 FileHeader:      
   Class:           ELFCLASS64

Modified: llvm/trunk/test/tools/llvm-objdump/X86/demangle.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/demangle.s?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/demangle.s (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/demangle.s Thu Oct  3 15:01:08 2019
@@ -1,13 +1,13 @@
 # RUN: llvm-mc %s -filetype=obj -triple=x86_64-pc-linux -o %t
 # RUN: llvm-objdump -t -r --demangle %t | FileCheck %s
 
-## Check we demangle symbols when printing relocations.
-# CHECK:      000000000000001 R_X86_64_PLT32 foo()-4
-
 ## Check we demangle symbols when printing symbol table.
 # CHECK:      SYMBOL TABLE:
 # CHECK-NEXT: 0000000000000000 g     F .text           00000000 foo()
 
+## Check we demangle symbols when printing relocations.
+# CHECK:      000000000000001 R_X86_64_PLT32 foo()-4
+
 ## Check the case when relocations are inlined into disassembly.
 # RUN: llvm-objdump -d -r --demangle %t | FileCheck %s --check-prefix=INLINE
 # INLINE:      foo():

Modified: llvm/trunk/test/tools/llvm-objdump/X86/out-of-section-sym.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/out-of-section-sym.test?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/out-of-section-sym.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/out-of-section-sym.test Thu Oct  3 15:01:08 2019
@@ -5,12 +5,13 @@
 // RUN: cmp %t0 %t1
 // RUN: FileCheck --input-file %t0 %s
 
-CHECK: Disassembly of section .text:
-CHECK-EMPTY:
-CHECK-NEXT: _start:
-CHECK-NEXT:   10:  c3  retl
-CHECK-NEXT: SYMBOL TABLE:
+CHECK: SYMBOL TABLE:
 CHECK-NEXT: 00000010 l    d  .text  00000000 .text
 CHECK-NEXT: 00000010         .text  00000000 _start
 CHECK-NEXT: 00000020         .text  00000000 _fdata
 CHECK-NEXT: 00000010         .text  00000000 _ftext
+CHECK-EMPTY:
+CHECK-NEXT: Disassembly of section .text:
+CHECK-EMPTY:
+CHECK-NEXT: _start:
+CHECK-NEXT:   10:  c3  retl

Modified: llvm/trunk/test/tools/llvm-objdump/all-headers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/all-headers.test?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/all-headers.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/all-headers.test Thu Oct  3 15:01:08 2019
@@ -1,8 +1,9 @@
 # RUN: yaml2obj %s > %t
 # RUN: llvm-objdump --all-headers %t | FileCheck %s
 
-## Check we print file format, architecture and start address followed by the
-## other data when using --all-headers.
+## Note: --all-headers (-x) is an alias for --archive-headers --file-headers
+## --section-headers --private-headers --reloc --syms (-afhprt). Test for them
+## in the following order which provides GNU objdump compatability.
 
 # CHECK:       file format ELF64-x86-64
 # CHECK-EMPTY:
@@ -13,6 +14,7 @@
 # CHECK: Dynamic Section:
 # CHECK: Sections:
 # CHECK: SYMBOL TABLE:
+# CHECK: RELOCATION RECORDS FOR [.text]:
 
 ## Check how we dump the archives.
 ## Check we dump the appropriate headers for each file in the archive.
@@ -23,26 +25,49 @@
 # RUN: llvm-objdump --all-headers %t.a | FileCheck %s --check-prefix=ARCHIVE
 
 # ARCHIVE: {{.*}}.a({{.*}}):   file format ELF64-x86-64
+# ARCHIVE: rw-r--r--
 # ARCHIVE: architecture: x86_64
 # ARCHIVE: start address: 0x0000000000000000
-# ARCHIVE: rw-r--r--
 # ARCHIVE: Program Header:
 # ARCHIVE: Dynamic Section:
 # ARCHIVE: Sections:
 # ARCHIVE: SYMBOL TABLE:
+# ARCHIVE: RELOCATION RECORDS FOR [.text]:
 # ARCHIVE: {{.*}}.a({{.*}}2):   file format ELF64-x86-64
+# ARCHIVE: rw-r--r--
 # ARCHIVE: architecture: x86_64
 # ARCHIVE: start address: 0x0000000000000000
-# ARCHIVE: rw-r--r--
 # ARCHIVE: Program Header:
 # ARCHIVE: Dynamic Section:
 # ARCHIVE: Sections:
 # ARCHIVE: SYMBOL TABLE:
+# ARCHIVE: RELOCATION RECORDS FOR [.text]:
 
 !ELF
 FileHeader:
   Class:           ELFCLASS64
   Data:            ELFDATA2LSB
-  Type:            ET_EXEC
+  Type:            ET_REL
   Machine:         EM_X86_64
 Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+  - Name: .rel.text
+    Type: SHT_REL
+    Info: .text
+    Relocations:
+      - Offset: 0x1
+        Symbol: foo
+        Type: R_X86_64_32
+  - Name:            .dynamic
+    Type:            SHT_DYNAMIC
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    EntSize:         0x0000000000000010
+    Entries:
+      - Tag:             DT_INIT
+        Value:           0x00000000000006A0
+      - Tag:             DT_NULL
+        Value:           0x0000000000000000
+Symbols:
+  - Name:    foo
+    Section: .text

Added: llvm/trunk/test/tools/llvm-objdump/output-ordering.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/output-ordering.test?rev=373671&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/output-ordering.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/output-ordering.test Thu Oct  3 15:01:08 2019
@@ -0,0 +1,70 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-objdump --file-headers --private-headers --section-headers --syms \
+# RUN:   --full-contents --dwarf=frames \
+# RUN:   --reloc %t.o | FileCheck %s --check-prefixes=CHECK,RELOC
+# RUN: llvm-objdump --file-headers --private-headers --section-headers --syms \
+# RUN:   --full-contents --dwarf=frames \
+# RUN:   --disassemble %t.o | FileCheck %s --check-prefixes=CHECK,DISASM
+
+## Test the ordering of most of the output. Note that --disassemble suppresses
+## --reloc, so we test them independently.
+
+## File headers (-f)
+# CHECK: file format ELF64-x86-64
+# CHECK: architecture: x86_64
+# CHECK: start address: 0x0000000000000000
+## Private headers (-p)
+# CHECK: Program Header:
+# CHECK: Dynamic Section:
+## Section headers (-h)
+# CHECK: Sections:
+## Symbol table (-t)
+# CHECK: SYMBOL TABLE:
+## DWARF contents:
+# CHECK: .eh_frame contents:
+## Relocations (-r)
+# RELOC: RELOCATION RECORDS FOR [.text]:
+## Section contents (-s)
+# CHECK: Contents of section .rel.text:
+# CHECK: Contents of section .dynamic:
+# CHECK: Contents of section .symtab:
+# CHECK: Contents of section .strtab:
+# CHECK: Contents of section .shstrtab:
+## Disassembly (-d)
+# DISASM: Disassembly of section .text:
+
+!ELF
+FileHeader:
+  Class:    ELFCLASS64
+  Data:     ELFDATA2LSB
+  Type:     ET_REL
+  Machine:  EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
+    Content: e800000000e800000000
+  - Name: .rel.text
+    Type: SHT_REL
+    Info: .text
+    Relocations:
+      - Offset: 0x1
+        Symbol: foo
+        Type: R_X86_64_32
+  - Name:    .dynamic
+    Type:    SHT_DYNAMIC
+    Flags:   [ SHF_WRITE, SHF_ALLOC ]
+    EntSize: 0x0000000000000010
+    Entries:
+      - Tag:   DT_INIT
+        Value: 0x00000000000006A0
+      - Tag:   DT_NULL
+        Value: 0x0000000000000000
+  - Name:         .eh_frame
+    Type:         SHT_X86_64_UNWIND
+    Flags:        [ SHF_ALLOC ]
+    AddressAlign: 0x0000000000000001
+    Content:      00000000
+Symbols:
+  - Name:    foo
+    Section: .text

Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=373671&r1=373670&r2=373671&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Thu Oct  3 15:01:08 2019
@@ -2076,27 +2076,37 @@ static void dumpObject(ObjectFile *O, co
   if (StartAddress.getNumOccurrences() || StopAddress.getNumOccurrences())
     checkForInvalidStartStopAddress(O, StartAddress, StopAddress);
 
+  // Note: the order here matches GNU objdump for compatability.
   StringRef ArchiveName = A ? A->getFileName() : "";
-  if (FileHeaders)
-    printFileHeaders(O);
   if (ArchiveHeaders && !MachOOpt && C)
     printArchiveChild(ArchiveName, *C);
-  if (Disassemble)
-    disassembleObject(O, Relocations);
-  if (Relocations && !Disassemble)
-    printRelocations(O);
-  if (DynamicRelocations)
-    printDynamicRelocations(O);
+  if (FileHeaders)
+    printFileHeaders(O);
   if (PrivateHeaders || FirstPrivateHeader)
     printPrivateFileHeaders(O, FirstPrivateHeader);
   if (SectionHeaders)
     printSectionHeaders(O);
-  if (SectionContents)
-    printSectionContents(O);
   if (SymbolTable)
     printSymbolTable(O, ArchiveName);
+  if (DwarfDumpType != DIDT_Null) {
+    std::unique_ptr<DIContext> DICtx = DWARFContext::create(*O);
+    // Dump the complete DWARF structure.
+    DIDumpOptions DumpOpts;
+    DumpOpts.DumpType = DwarfDumpType;
+    DICtx->dump(outs(), DumpOpts);
+  }
+  if (Relocations && !Disassemble)
+    printRelocations(O);
+  if (DynamicRelocations)
+    printDynamicRelocations(O);
+  if (SectionContents)
+    printSectionContents(O);
+  if (Disassemble)
+    disassembleObject(O, Relocations);
   if (UnwindInfo)
     printUnwindInfo(O);
+
+  // Mach-O specific options:
   if (ExportsTrie)
     printExportsTrie(O);
   if (Rebase)
@@ -2107,17 +2117,12 @@ static void dumpObject(ObjectFile *O, co
     printLazyBindTable(O);
   if (WeakBind)
     printWeakBindTable(O);
+
+  // Other special sections:
   if (RawClangAST)
     printRawClangAST(O);
   if (FaultMapSection)
     printFaultMaps(O);
-  if (DwarfDumpType != DIDT_Null) {
-    std::unique_ptr<DIContext> DICtx = DWARFContext::create(*O);
-    // Dump the complete DWARF structure.
-    DIDumpOptions DumpOpts;
-    DumpOpts.DumpType = DwarfDumpType;
-    DICtx->dump(outs(), DumpOpts);
-  }
 }
 
 static void dumpObject(const COFFImportFile *I, const Archive *A,




More information about the llvm-commits mailing list