diff --git a/clang/test/Modules/pch_container.m b/clang/test/Modules/pch_container.m
--- a/clang/test/Modules/pch_container.m
+++ b/clang/test/Modules/pch_container.m
@@ -6,14 +6,13 @@
 // RUN: %clang_cc1 -triple=x86_64-windows-coff -fmodules -fmodule-format=obj -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t-COFF -F %S/Inputs %s
 // RUN: %clang_cc1 -triple=x86_64-apple-darwin -fmodules -fmodule-format=raw -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t-raw -F %S/Inputs %s
 
-
 // RUN: llvm-objdump --section-headers %t-MachO/DependsOnModule.pcm %t-ELF/DependsOnModule.pcm %t-COFF/DependsOnModule.pcm | FileCheck %s
 // CHECK: file format Mach-O 64-bit x86-64
-// CHECK: __clangast   {{[0-9a-f]+}} {{[0-9a-f]+}} DATA
+// CHECK: __clangast   {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 2**{{[0-9]+}} DATA
 // CHECK: file format ELF64-x86-64
-// CHECK: __clangast   {{[0-9a-f]+}} {{[0-9a-f]+}} DATA
+// CHECK: __clangast   {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 2**{{[0-9]+}} DATA
 // CHECK: file format COFF-x86-64
-// CHECK: clangast   {{[0-9a-f]+}} {{[0-9a-f]+}}
+// CHECK: clangast   {{[0-9a-f]+}} {{[0-9a-f]+}} {{[0-9a-f]+}} 2**{{[0-9]+}} DATA
 
 // RUN: not llvm-objdump --section-headers %t-raw/DependsOnModule.pcm
 
diff --git a/lld/test/ELF/bss-start-common.s b/lld/test/ELF/bss-start-common.s
--- a/lld/test/ELF/bss-start-common.s
+++ b/lld/test/ELF/bss-start-common.s
@@ -6,8 +6,8 @@
 ## Test __bss_start is defined at the start of .bss
 
 # CHECK: Sections:
-# CHECK: Idx Name          Size     VMA                 Type
-# CHECK:   2 .bss          00000004 [[ADDR:[0-za-f]+]]  BSS
+# CHECK: Idx Name          Size      VMA               File off        Algn Type
+# CHECK:   1 .bss          00000004 [[ADDR:[0-9a-f]+]] {{[0-9a-f]+}} 2**2 BSS
 # CHECK: SYMBOL TABLE:
 # CHECK: [[ADDR]]          .bss 00000000 __bss_start
 
diff --git a/lld/test/ELF/edata-etext.s b/lld/test/ELF/edata-etext.s
--- a/lld/test/ELF/edata-etext.s
+++ b/lld/test/ELF/edata-etext.s
@@ -12,11 +12,10 @@
 ## 3) Address of _end is different from _edata because of 2.
 ## 4) Addresses of _edata == edata, _end == end and _etext == etext.
 # CHECK:      Sections:
-# CHECK-NEXT:  Idx Name          Size     VMA              Type
-# CHECK-NEXT:    0               00000000 0000000000000000
-# CHECK-NEXT:    1 .text         00000001 0000000000201158 TEXT
-# CHECK-NEXT:    2 .data         00000002 0000000000202159 DATA
-# CHECK-NEXT:    3 .bss          00000006 000000000020215c BSS
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:   0 .text         00000001 0000000000201158 0000000000000158 2**2  TEXT
+# CHECK-NEXT:   1 .data         00000002 0000000000202159 0000000000000159 2**0  DATA
+# CHECK-NEXT:   2 .bss          00000006 000000000020215c 000000000000015b 2**2  BSS
 # CHECK:      SYMBOL TABLE:
 # CHECK-NEXT:  000000000020215b         .data 00000000 _edata
 # CHECK-NEXT:  0000000000202162         .bss  00000000 _end
diff --git a/lld/test/ELF/edata-no-bss.s b/lld/test/ELF/edata-no-bss.s
--- a/lld/test/ELF/edata-no-bss.s
+++ b/lld/test/ELF/edata-no-bss.s
@@ -6,7 +6,7 @@
 # RUN: ld.lld %t.o -o %t --gc-sections
 # RUN: llvm-objdump -t -section-headers %t | FileCheck %s
 
-# CHECK: .data         00000008 000000000020215c DATA
+# CHECK: .data         00000008 000000000020215c 000000000000015c 2**0 DATA
 
 # CHECK: 0000000000202164         .data                 00000000 _edata
 
diff --git a/lld/test/ELF/emit-relocs-gc.s b/lld/test/ELF/emit-relocs-gc.s
--- a/lld/test/ELF/emit-relocs-gc.s
+++ b/lld/test/ELF/emit-relocs-gc.s
@@ -3,7 +3,7 @@
 
 ## Show that we emit .rela.bar and .rela.text when GC is disabled.
 # RUN: ld.lld --emit-relocs %t.o -o %t
-# RUN: llvm-objdump %t -section-headers | FileCheck %s --check-prefix=NOGC
+# RUN: llvm-readelf %t --sections | FileCheck %s --check-prefix=NOGC
 # NOGC: .rela.text
 # NOGC: .rela.bar
 
@@ -13,7 +13,7 @@
 # RUN:   | FileCheck --check-prefix=MSG %s
 # MSG: removing unused section {{.*}}.o:(.bar)
 # MSG: removing unused section {{.*}}.o:(.rela.bar)
-# RUN: llvm-objdump %t -section-headers | FileCheck %s --check-prefix=GC
+# RUN: llvm-readelf %t --sections | FileCheck %s --check-prefix=GC
 # GC-NOT:  rela.bar
 # GC:      rela.text
 # GC-NOT:  rela.bar
diff --git a/lld/test/ELF/gc-sections-metadata.s b/lld/test/ELF/gc-sections-metadata.s
--- a/lld/test/ELF/gc-sections-metadata.s
+++ b/lld/test/ELF/gc-sections-metadata.s
@@ -4,14 +4,11 @@
 # RUN: ld.lld --gc-sections %t.o -o %t
 # RUN: llvm-objdump -section-headers %t | FileCheck  %s
 
-# CHECK:      1 .foo1
+# CHECK:      0 .foo1
 # CHECK-NEXT:   bar1
 # CHECK-NEXT:   .zed1
 # CHECK-NEXT:   .text
 # CHECK-NEXT:   .comment
-# CHECK-NEXT:   .symtab
-# CHECK-NEXT:   .shstrtab
-# CHECK-NEXT:   .strtab
 
 .global _start
 _start:
diff --git a/lld/test/ELF/init_fini_priority.s b/lld/test/ELF/init_fini_priority.s
--- a/lld/test/ELF/init_fini_priority.s
+++ b/lld/test/ELF/init_fini_priority.s
@@ -4,16 +4,16 @@
 // RUN: ld.lld %t -o %t.exe
 // RUN: llvm-objdump -s %t.exe | FileCheck %s
 
-// OBJ:       3 .init_array
-// OBJ-NEXT:  4 .init_array.100
-// OBJ-NEXT:  5 .init_array.5
-// OBJ-NEXT:  6 .init_array
-// OBJ-NEXT:  7 .init_array
-// OBJ-NEXT:  8 .fini_array
-// OBJ-NEXT:  9 .fini_array.100
-// OBJ-NEXT: 10 .fini_array.5
-// OBJ-NEXT: 11 .fini_array
-// OBJ-NEXT: 12 .fini_array
+// OBJ:       1 .init_array
+// OBJ-NEXT:  2 .init_array.100
+// OBJ-NEXT:  3 .init_array.5
+// OBJ-NEXT:  4 .init_array
+// OBJ-NEXT:  5 .init_array
+// OBJ-NEXT:  6 .fini_array
+// OBJ-NEXT:  7 .fini_array.100
+// OBJ-NEXT:  8 .fini_array.5
+// OBJ-NEXT:  9 .fini_array
+// OBJ-NEXT: 10 .fini_array
 
 .globl _start
 _start:
diff --git a/lld/test/ELF/invalid-fde-rel.s b/lld/test/ELF/invalid-fde-rel.s
--- a/lld/test/ELF/invalid-fde-rel.s
+++ b/lld/test/ELF/invalid-fde-rel.s
@@ -33,4 +33,4 @@
         .long 0x0
         .long 0x0
 
-// CHECK:  1 .eh_frame     0000001c
+// CHECK:  0 .eh_frame     0000001c
diff --git a/lld/test/ELF/linkerscript/addr.test b/lld/test/ELF/linkerscript/addr.test
--- a/lld/test/ELF/linkerscript/addr.test
+++ b/lld/test/ELF/linkerscript/addr.test
@@ -4,12 +4,11 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .text         00000000 0000000000001000 TEXT
-# CHECK-NEXT:   2 .foo.1        00000008 0000000000001000 DATA
-# CHECK-NEXT:   3 .foo.2        00000008 0000000000001100 DATA
-# CHECK-NEXT:   4 .foo.3        00000008 0000000000001108 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:   0 .text         00000000 0000000000001000 0000000000001000 2**2  TEXT
+# CHECK-NEXT:   1 .foo.1        00000008 0000000000001000 0000000000001000 2**0  DATA
+# CHECK-NEXT:   2 .foo.2        00000008 0000000000001100 0000000000001100 2**0  DATA
+# CHECK-NEXT:   3 .foo.3        00000008 0000000000001108 0000000000001108 2**0  DATA
 
 SECTIONS {
   . = 0x1000;
diff --git a/lld/test/ELF/linkerscript/align-empty.test b/lld/test/ELF/linkerscript/align-empty.test
--- a/lld/test/ELF/linkerscript/align-empty.test
+++ b/lld/test/ELF/linkerscript/align-empty.test
@@ -14,9 +14,8 @@
 
 # CHECK:      Sections:
 # CHECK-NEXT: Idx Name          Size     VMA
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .dynsym       00000018 0000000000000190
-# CHECK-NEXT:   2 .gnu.hash     0000001c 00000000000001a8
-# CHECK-NEXT:   3 .hash         00000010 00000000000001c4
-# CHECK-NEXT:   4 .dynstr       00000001 00000000000001d4
-# CHECK-NEXT:   5 foo           00000001 0000000000001000
+# CHECK-NEXT:   0 .dynsym       00000018 0000000000000190
+# CHECK-NEXT:   1 .gnu.hash     0000001c 00000000000001a8
+# CHECK-NEXT:   2 .hash         00000010 00000000000001c4
+# CHECK-NEXT:   3 .dynstr       00000001 00000000000001d4
+# CHECK-NEXT:   4 foo           00000001 0000000000001000
diff --git a/lld/test/ELF/linkerscript/align1.test b/lld/test/ELF/linkerscript/align1.test
--- a/lld/test/ELF/linkerscript/align1.test
+++ b/lld/test/ELF/linkerscript/align1.test
@@ -13,11 +13,10 @@
 }
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .aaa          00000008 0000000000010000 DATA
-# CHECK-NEXT:   2 .bbb          00000008 0000000000011000 DATA
-# CHECK-NEXT:   3 .ccc          00000008 0000000000014000 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:   0 .aaa          00000008 0000000000010000 0000000000001000 2**0  DATA
+# CHECK-NEXT:   1 .bbb          00000008 0000000000011000 0000000000002000 2**0  DATA
+# CHECK-NEXT:   2 .ccc          00000008 0000000000014000 0000000000005000 2**0  DATA
 
 ## Check that ALIGN zero do nothing and does not crash #1.
 # RUN: echo "SECTIONS { . = ALIGN(0x123, 0); .aaa : { *(.aaa) } }" > %t.script
@@ -25,9 +24,11 @@
 # RUN: llvm-objdump -section-headers %t4 | FileCheck %s -check-prefix=ZERO
 
 # ZERO:      Sections:
-# ZERO-NEXT: Idx Name          Size     VMA              Type
-# ZERO-NEXT:   0               00000000 0000000000000000
-# ZERO-NEXT:   1 .aaa          00000008 0000000000000123 DATA
+# ZERO-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# ZERO-NEXT:   0 .aaa          00000008 0000000000000123 0000000000000123 2**0  DATA
+# ZERO-NEXT:   1 .bbb          00000008 000000000000012b 000000000000012b 2**0  DATA
+# ZERO-NEXT:   2 .ccc          00000008 0000000000000133 0000000000000133 2**0  DATA
+
 
 ## Check that ALIGN zero do nothing and does not crash #2.
 # RUN: echo "SECTIONS { . = 0x123; . = ALIGN(0); .aaa : { *(.aaa) } }" > %t.script
diff --git a/lld/test/ELF/linkerscript/align2.test b/lld/test/ELF/linkerscript/align2.test
--- a/lld/test/ELF/linkerscript/align2.test
+++ b/lld/test/ELF/linkerscript/align2.test
@@ -13,8 +13,7 @@
 }
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .aaa          00000008 0000000000010000 DATA
-# CHECK-NEXT:   2 .bbb          00000008 0000000000011000 DATA
-# CHECK-NEXT:   3 .ccc          00000008 0000000000014000 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn Type
+# CHECK-NEXT:   0 .aaa          00000008 0000000000010000 0000000000001000 2**0 DATA
+# CHECK-NEXT:   1 .bbb          00000008 0000000000011000 0000000000002000 2**0 DATA
+# CHECK-NEXT:   2 .ccc          00000008 0000000000014000 0000000000005000 2**0 DATA
diff --git a/lld/test/ELF/linkerscript/align3.test b/lld/test/ELF/linkerscript/align3.test
--- a/lld/test/ELF/linkerscript/align3.test
+++ b/lld/test/ELF/linkerscript/align3.test
@@ -11,8 +11,7 @@
 }
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .aaa          00000008 0000000000010000 DATA
-# CHECK-NEXT:   2 .bbb          00000008 0000000000011000 DATA
-# CHECK-NEXT:   3 .ccc          00000008 0000000000014000 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:   0 .aaa          00000008 0000000000010000 0000000000004000 2**0  DATA
+# CHECK-NEXT:   1 .bbb          00000008 0000000000011000 0000000000005000 2**12  DATA
+# CHECK-NEXT:   2 .ccc          00000008 0000000000014000 0000000000008000 2**14  DATA
diff --git a/lld/test/ELF/linkerscript/at2.test b/lld/test/ELF/linkerscript/at2.test
--- a/lld/test/ELF/linkerscript/at2.test
+++ b/lld/test/ELF/linkerscript/at2.test
@@ -49,10 +49,9 @@
 
 # SECTIONS:      Sections:
 # SECTIONS-NEXT: Idx Name          Size     VMA
-# SECTIONS-NEXT:   0               00000000 0000000000000000
-# SECTIONS-NEXT:   1 .foo1         00000008 0000000000002000
-# SECTIONS-NEXT:   2 .foo2         00000008 0000000000002008
-# SECTIONS-NEXT:   3 .text         00000000 0000000000002010
-# SECTIONS-NEXT:   4 .bar1         00000008 0000000000003000
-# SECTIONS-NEXT:   5 .bar2         00000008 0000000000003008
-# SECTIONS-NEXT:   6 .bar3         00000008 0000000000003010
+# SECTIONS-NEXT:   0 .foo1         00000008 0000000000002000
+# SECTIONS-NEXT:   1 .foo2         00000008 0000000000002008
+# SECTIONS-NEXT:   2 .text         00000000 0000000000002010
+# SECTIONS-NEXT:   3 .bar1         00000008 0000000000003000
+# SECTIONS-NEXT:   4 .bar2         00000008 0000000000003008
+# SECTIONS-NEXT:   5 .bar3         00000008 0000000000003010
diff --git a/lld/test/ELF/linkerscript/constructor.test b/lld/test/ELF/linkerscript/constructor.test
--- a/lld/test/ELF/linkerscript/constructor.test
+++ b/lld/test/ELF/linkerscript/constructor.test
@@ -6,8 +6,7 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
 # CHECK-NEXT: Idx Name          Size
-# CHECK-NEXT:   0               00000000
-# CHECK-NEXT:   1 foo           00000001
+# CHECK-NEXT:   0 foo           00000001
 
 SECTIONS {
   foo : {
diff --git a/lld/test/ELF/linkerscript/define.test b/lld/test/ELF/linkerscript/define.test
--- a/lld/test/ELF/linkerscript/define.test
+++ b/lld/test/ELF/linkerscript/define.test
@@ -10,6 +10,6 @@
   .bar : { *(.bar*) }
 }
 
-# CHECK: 1 .foo  00000008 0000000000011000 DATA
-# CHECK: 2 .bar  00000008 0000000000013000 DATA
-# CHECK: 3 .text 00000000 0000000000013008 TEXT
+# CHECK: 0 .foo  00000008 0000000000011000 0000000000001000 2**0 DATA
+# CHECK: 1 .bar  00000008 0000000000013000 0000000000003000 2**0 DATA
+# CHECK: 2 .text 00000000 0000000000013008 0000000000003008 2**2 TEXT
diff --git a/lld/test/ELF/linkerscript/double-bss.test b/lld/test/ELF/linkerscript/double-bss.test
--- a/lld/test/ELF/linkerscript/double-bss.test
+++ b/lld/test/ELF/linkerscript/double-bss.test
@@ -3,8 +3,8 @@
 # RUN:   | llvm-mc -filetype=obj -triple=x86_64-unknown-linux - -o %t
 # RUN: ld.lld -o %t1 --script %s %t
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
-# CHECK:      .bss1          00000004 0000000000000122 BSS
-# CHECK-NEXT: .bss2          00000080 0000000000000128 BSS
+# CHECK:      .bss1          00000004 0000000000000122 0000000000000122 2**0 BSS
+# CHECK-NEXT: .bss2          00000080 0000000000000128 0000000000000122 2**3 BSS
 
 SECTIONS {
   . = SIZEOF_HEADERS;
diff --git a/lld/test/ELF/linkerscript/eh-frame-emit-relocs.s b/lld/test/ELF/linkerscript/eh-frame-emit-relocs.s
--- a/lld/test/ELF/linkerscript/eh-frame-emit-relocs.s
+++ b/lld/test/ELF/linkerscript/eh-frame-emit-relocs.s
@@ -2,7 +2,7 @@
 # RUN: echo "SECTIONS { .foo : { *(.eh_frame) } }" > %t.script
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
 # RUN: ld.lld --emit-relocs %t.o -T %t.script -o %t
-# RUN: llvm-objdump -section-headers %t | FileCheck %s
+# RUN: llvm-readelf --sections %t | FileCheck %s
 
 # CHECK-NOT: eh_frame
 # CHECK:     .rela.foo
diff --git a/lld/test/ELF/linkerscript/emit-reloc-section-names.s b/lld/test/ELF/linkerscript/emit-reloc-section-names.s
--- a/lld/test/ELF/linkerscript/emit-reloc-section-names.s
+++ b/lld/test/ELF/linkerscript/emit-reloc-section-names.s
@@ -2,7 +2,7 @@
 # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
 # RUN: echo "SECTIONS { .text.zed : { *(.text.foo) } .text.qux : { *(.text.bar) } }" > %t.script
 # RUN: ld.lld -T %t.script --emit-relocs %t.o -o %t
-# RUN: llvm-objdump -section-headers %t | FileCheck %s
+# RUN: llvm-readelf --sections %t | FileCheck %s
 
 ## Check we name relocation sections in according to
 ## their target sections names.
diff --git a/lld/test/ELF/linkerscript/expr-sections.test b/lld/test/ELF/linkerscript/expr-sections.test
--- a/lld/test/ELF/linkerscript/expr-sections.test
+++ b/lld/test/ELF/linkerscript/expr-sections.test
@@ -13,7 +13,7 @@
   }
 };
 
-# CHECK:  5 .text         00000000 000000000000014c
+# CHECK:  4 .text         00000000 000000000000014c
 
 # CHECK: 000000000000014d         .text		 00000000 foo1
 # CHECK: 000000000000014d         .text		 00000000 bar1
diff --git a/lld/test/ELF/linkerscript/input-sec-dup.s b/lld/test/ELF/linkerscript/input-sec-dup.s
--- a/lld/test/ELF/linkerscript/input-sec-dup.s
+++ b/lld/test/ELF/linkerscript/input-sec-dup.s
@@ -6,9 +6,8 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
 # CHECK-NEXT: Idx Name          Size
-# CHECK-NEXT:   0               00000000
-# CHECK-NEXT:   1 .foo          00000004
-# CHECK-NEXT:   2 .text         00000001
+# CHECK-NEXT:   0 .foo          00000004
+# CHECK-NEXT:   1 .text         00000001
 
 .global _start
 _start:
diff --git a/lld/test/ELF/linkerscript/insert-after.test b/lld/test/ELF/linkerscript/insert-after.test
--- a/lld/test/ELF/linkerscript/insert-after.test
+++ b/lld/test/ELF/linkerscript/insert-after.test
@@ -16,12 +16,11 @@
 # RUN: ld.lld %t1.o -o %t1 --script %p/Inputs/insert-after.script --script %s
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .text         00000008 0000000000000000 TEXT
-# CHECK-NEXT:   2 .foo.text     00000008 0000000000000008 TEXT
-# CHECK-NEXT:   3 .data         00000008 0000000000000010 DATA
-# CHECK-NEXT:   4 .foo.data     00000008 0000000000000018 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn Type
+# CHECK-NEXT:   0 .text         00000008 0000000000000000 0000000000001000 2**2 TEXT
+# CHECK-NEXT:   1 .foo.text     00000008 0000000000000008 0000000000001008 2**0 TEXT
+# CHECK-NEXT:   2 .data         00000008 0000000000000010 0000000000001010 2**0 DATA
+# CHECK-NEXT:   3 .foo.data     00000008 0000000000000018 0000000000001018 2**0 DATA
 
 # RUN: not ld.lld %t1.o -o %t1 --script %s 2>&1 \
 # RUN:   | FileCheck %s --check-prefix=ERR
diff --git a/lld/test/ELF/linkerscript/insert-before.test b/lld/test/ELF/linkerscript/insert-before.test
--- a/lld/test/ELF/linkerscript/insert-before.test
+++ b/lld/test/ELF/linkerscript/insert-before.test
@@ -16,12 +16,11 @@
 # RUN: ld.lld %t1.o -o %t1 --script %p/Inputs/insert-after.script --script %s
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA         Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .foo.text     00000008 0000000000000000 TEXT
-# CHECK-NEXT:   2 .text         00000008 0000000000000008 TEXT
-# CHECK-NEXT:   3 .foo.data     00000008 0000000000000010 DATA
-# CHECK-NEXT:   4 .data         00000008 0000000000000018 DATA
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn Type
+# CHECK-NEXT:   0 .foo.text     00000008 0000000000000000 0000000000001000 2**0 TEXT
+# CHECK-NEXT:   1 .text         00000008 0000000000000008 0000000000001008 2**2 TEXT
+# CHECK-NEXT:   2 .foo.data     00000008 0000000000000010 0000000000001010 2**0 DATA
+# CHECK-NEXT:   3 .data         00000008 0000000000000018 0000000000001018 2**0 DATA
 
 # RUN: not ld.lld %t1.o -o %t1 --script %s 2>&1 \
 # RUN:   | FileCheck %s --check-prefix=ERR
diff --git a/lld/test/ELF/linkerscript/memory-include.test b/lld/test/ELF/linkerscript/memory-include.test
--- a/lld/test/ELF/linkerscript/memory-include.test
+++ b/lld/test/ELF/linkerscript/memory-include.test
@@ -7,8 +7,8 @@
 # RUN: echo "RAM2 (rwx): ORIGIN = 0x3000, LENGTH = 0x100" > %t.inc
 # RUN: ld.lld -o %t.elf --script %s %t.o -L %T
 # RUN: llvm-objdump -section-headers %t.elf | FileCheck %s
-# CHECK: .data         00000008 0000000000002000 DATA
-# CHECK: .data2        00000008 0000000000003000 DATA
+# CHECK: .data         00000008 0000000000002000 0000000000002000 2**0 DATA
+# CHECK: .data2        00000008 0000000000003000 0000000000003000 2**0 DATA
 
 MEMORY {
   ROM (rwx): ORIGIN = 0x1000, LENGTH = 0x100
diff --git a/lld/test/ELF/linkerscript/memory.s b/lld/test/ELF/linkerscript/memory.s
--- a/lld/test/ELF/linkerscript/memory.s
+++ b/lld/test/ELF/linkerscript/memory.s
@@ -11,8 +11,8 @@
 # RUN: ld.lld -o %t1 --script %t.script %t
 # RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=RAM %s
 
-# RAM:       1 .text         00000001 0000000000008000 TEXT
-# RAM-NEXT:  2 .data         00001000 0000000000008001 DATA
+# RAM:       0 .text         00000001 0000000000008000 0000000000001000 2**2 TEXT
+# RAM-NEXT:  1 .data         00001000 0000000000008001 0000000000001001 2**0 DATA
 
 ## Check RAM and ROM memory regions.
 
@@ -27,8 +27,8 @@
 # RUN: ld.lld -o %t1 --script %t.script %t
 # RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=RAMROM %s
 
-# RAMROM:       1 .text         00000001 0000000080000000 TEXT
-# RAMROM-NEXT:  2 .data         00001000 0000000000000000 DATA
+# RAMROM:       0 .text         00000001 0000000080000000 0000000000001000 2**2 TEXT
+# RAMROM-NEXT:  1 .data         00001000 0000000000000000 0000000000002000 2**0 DATA
 
 ## Check memory region placement by attributes.
 
@@ -43,8 +43,8 @@
 # RUN: ld.lld -o %t1 --script %t.script %t
 # RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=ATTRS %s
 
-# ATTRS:  1 .text         00000001 0000000080000000 TEXT
-# ATTRS:  2 .data         00001000 0000000000000000 DATA
+# ATTRS:  0 .text         00000001 0000000080000000 0000000000001000 2**2 TEXT
+# ATTRS:  1 .data         00001000 0000000000000000 0000000000002000 2**0 DATA
 
 ## Check bad `ORIGIN`.
 
diff --git a/lld/test/ELF/linkerscript/memory3.s b/lld/test/ELF/linkerscript/memory3.s
--- a/lld/test/ELF/linkerscript/memory3.s
+++ b/lld/test/ELF/linkerscript/memory3.s
@@ -15,8 +15,7 @@
 ## Check we place .text into first defined memory region with appropriate flags.
 # CHECK: Sections:
 # CHECK: Idx Name  Size     VMA
-# CHECK:   0       00000000 0000000000000000
-# CHECK:   1 .text 00000001 0000000000001000
+# CHECK:   0 .text 00000001 0000000000001000
 
 .section .text.foo,"ax",%progbits
 foo:
diff --git a/lld/test/ELF/linkerscript/memory4.test b/lld/test/ELF/linkerscript/memory4.test
--- a/lld/test/ELF/linkerscript/memory4.test
+++ b/lld/test/ELF/linkerscript/memory4.test
@@ -4,8 +4,8 @@
 # RUN: ld.lld -o %t.so --script %s %t.o
 # RUN: llvm-objdump -section-headers %t.so | FileCheck %s
 
-# CHECK:      1 .text         00000001 0000000000042000
-# CHECK-NEXT: 2 .data         00000001 0000000000042400
+# CHECK:      0 .text         00000001 0000000000042000
+# CHECK-NEXT: 1 .data         00000001 0000000000042400
 
 ## Test that address expressions changes the position in a memory region.
 
diff --git a/lld/test/ELF/linkerscript/memory5.test b/lld/test/ELF/linkerscript/memory5.test
--- a/lld/test/ELF/linkerscript/memory5.test
+++ b/lld/test/ELF/linkerscript/memory5.test
@@ -4,8 +4,8 @@
 # RUN: ld.lld -o %t.so --script %s %t.o
 # RUN: llvm-objdump -section-headers %t.so | FileCheck %s
 
-# CHECK:      1 .text         00000001 0000000000042000
-# CHECK-NEXT: 2 .data         00000001 0000000000042001
+# CHECK:      0 .text         00000001 0000000000042000
+# CHECK-NEXT: 1 .data         00000001 0000000000042001
 
 ## Test that assigning to Dot does not change the position in a memory region.
 
diff --git a/lld/test/ELF/linkerscript/multi-sections-constraint.s b/lld/test/ELF/linkerscript/multi-sections-constraint.s
--- a/lld/test/ELF/linkerscript/multi-sections-constraint.s
+++ b/lld/test/ELF/linkerscript/multi-sections-constraint.s
@@ -8,8 +8,8 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size      VMA          Type
-# CHECK: .aaa          00000010 0000000000002000 DATA
+# CHECK-NEXT: Idx Name Size VMA File off Algn Type
+# CHECK: .aaa          00000010 0000000000002000 0000000000002000 2**0 DATA
 
 
 # RUN: echo "SECTIONS { \
@@ -20,8 +20,8 @@
 # RUN: llvm-objdump -section-headers %t2 | FileCheck %s --check-prefix=REV
 
 # REV:      Sections:
-# REV-NEXT: Idx Name          Size       VMA          Type
-# REV:  .aaa          00000010 0000000000001000 DATA
+# REV-NEXT: Idx Name Size VMA File off Algn Type
+# REV:  .aaa          00000010 0000000000001000 0000000000002000 2**0 DATA
 
 .global _start
 _start:
diff --git a/lld/test/ELF/linkerscript/non-absolute2.test b/lld/test/ELF/linkerscript/non-absolute2.test
--- a/lld/test/ELF/linkerscript/non-absolute2.test
+++ b/lld/test/ELF/linkerscript/non-absolute2.test
@@ -10,8 +10,7 @@
 
 # CHECK:       Sections:
 # CHECK-NEXT:  Idx Name          Size     VMA
-# CHECK-NEXT:    0               00000000 0000000000000000
-# CHECK-NEXT:    1 .dynsym       00000030 0000000000001000
-# CHECK:         5 .text         00000000 000000000000106c
+# CHECK-NEXT:    0 .dynsym       00000030 0000000000001000
+# CHECK:         4 .text         00000000 000000000000106c
 
 # CHECK: 0000000000000001         .dynsym            00000000 A
diff --git a/lld/test/ELF/linkerscript/numbers.s b/lld/test/ELF/linkerscript/numbers.s
--- a/lld/test/ELF/linkerscript/numbers.s
+++ b/lld/test/ELF/linkerscript/numbers.s
@@ -19,13 +19,12 @@
 
 # CHECK:     Sections:
 # CHECK-NEXT: Idx Name          Size     VMA
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .hex1         00000008 0000000000001000
-# CHECK-NEXT:   2 .hex2         00000008 0000000000001010
-# CHECK-NEXT:   3 .kilo1        00000008 0000000000002800
-# CHECK-NEXT:   4 .kilo2        00000008 0000000000002c00
-# CHECK-NEXT:   5 .mega1        00000008 0000000000100000
-# CHECK-NEXT:   6 .mega2        00000008 0000000000200000
+# CHECK-NEXT:   0 .hex1         00000008 0000000000001000
+# CHECK-NEXT:   1 .hex2         00000008 0000000000001010
+# CHECK-NEXT:   2 .kilo1        00000008 0000000000002800
+# CHECK-NEXT:   3 .kilo2        00000008 0000000000002c00
+# CHECK-NEXT:   4 .mega1        00000008 0000000000100000
+# CHECK-NEXT:   5 .mega2        00000008 0000000000200000
 
 ## Mailformed number errors.
 # RUN: echo "SECTIONS { . = 0x11h; }" > %t2.script
@@ -68,9 +67,8 @@
 # RUN: llvm-objdump -section-headers %t6 | FileCheck -check-prefix=SECADDR %s
 # SECADDR:     Sections:
 # SECADDR-NEXT: Idx Name          Size     VMA
-# SECADDR-NEXT:   0               00000000 0000000000000000
-# SECADDR-NEXT:   1 .hex1         00000008 0000000000000400
-# SECADDR-NEXT:   2 .hex2         00000008 0000000000000500
+# SECADDR-NEXT:   0 .hex1         00000008 0000000000000400
+# SECADDR-NEXT:   1 .hex2         00000008 0000000000000500
 
 .globl _start
 _start:
diff --git a/lld/test/ELF/linkerscript/orphan.s b/lld/test/ELF/linkerscript/orphan.s
--- a/lld/test/ELF/linkerscript/orphan.s
+++ b/lld/test/ELF/linkerscript/orphan.s
@@ -12,13 +12,12 @@
 ## .jcr is a relro section and should be placed before other RW sections.
 ## .bss is SHT_NOBITS section and should be last RW section, so some space
 ## in ELF file could be saved.
-# CHECK:       0               00000000 0000000000000000
-# CHECK-NEXT:  1 .text         00000000 0000000000000000 TEXT
-# CHECK-NEXT:  2 .jcr          00000008 0000000000000000 DATA
-# CHECK-NEXT:  3 .rw1          00000008 0000000000000008 DATA
-# CHECK-NEXT:  4 .rw2          00000008 0000000000000010 DATA
-# CHECK-NEXT:  5 .rw3          00000008 0000000000000018 DATA
-# CHECK-NEXT:  6 .bss          00000008 0000000000000020 BSS
+# CHECK:       0 .text         00000000 0000000000000000 0000000000001000 2**2 TEXT
+# CHECK-NEXT:  1 .jcr          00000008 0000000000000000 0000000000001000 2**0 DATA
+# CHECK-NEXT:  2 .rw1          00000008 0000000000000008 0000000000001008 2**0 DATA
+# CHECK-NEXT:  3 .rw2          00000008 0000000000000010 0000000000001010 2**0 DATA
+# CHECK-NEXT:  4 .rw3          00000008 0000000000000018 0000000000001018 2**0 DATA
+# CHECK-NEXT:  5 .bss          00000008 0000000000000020 0000000000001020 2**0 BSS
 
 .section .rw1, "aw"
  .quad 0
diff --git a/lld/test/ELF/linkerscript/orphans.s b/lld/test/ELF/linkerscript/orphans.s
--- a/lld/test/ELF/linkerscript/orphans.s
+++ b/lld/test/ELF/linkerscript/orphans.s
@@ -13,15 +13,13 @@
 
 # TEXTORPHAN:      Sections:
 # TEXTORPHAN-NEXT: Idx Name
-# TEXTORPHAN-NEXT:   0
-# TEXTORPHAN-NEXT:   1 .text
-# TEXTORPHAN-NEXT:   2 .writable
+# TEXTORPHAN-NEXT:   0 .text
+# TEXTORPHAN-NEXT:   1 .writable
 
 # WRITABLEORPHAN:      Sections:
 # WRITABLEORPHAN-NEXT: Idx Name
-# WRITABLEORPHAN-NEXT:   0
-# WRITABLEORPHAN-NEXT:   1 .text
-# WRITABLEORPHAN-NEXT:   2 .writable
+# WRITABLEORPHAN-NEXT:   0 .text
+# WRITABLEORPHAN-NEXT:   1 .writable
 
 .global _start
 _start:
diff --git a/lld/test/ELF/linkerscript/out-of-order-section-in-region.test b/lld/test/ELF/linkerscript/out-of-order-section-in-region.test
--- a/lld/test/ELF/linkerscript/out-of-order-section-in-region.test
+++ b/lld/test/ELF/linkerscript/out-of-order-section-in-region.test
@@ -5,8 +5,8 @@
 # RUN: ld.lld %t --script %s -o %t2
 
 # RUN: llvm-objdump -section-headers %t2 | FileCheck %s
-# CHECK: .aaa 00000008 0000000000001008 DATA
-# CHECK: .bbb 00000008 0000000000001000 DATA
+# CHECK: .aaa 00000008 0000000000001008 0000000000001008 2**0 DATA
+# CHECK: .bbb 00000008 0000000000001000 0000000000001000 2**0 DATA
 
 MEMORY {
   REGION (rwx) : ORIGIN = 0x1000, LENGTH = 0x100
diff --git a/lld/test/ELF/linkerscript/out-of-order.s b/lld/test/ELF/linkerscript/out-of-order.s
--- a/lld/test/ELF/linkerscript/out-of-order.s
+++ b/lld/test/ELF/linkerscript/out-of-order.s
@@ -22,14 +22,13 @@
 # must take responsibility to make sure this does not happen.
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA              Type
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .dynamic      00000060 0000000000000000
-# CHECK-NEXT:   2 .data         00000008 0000000000004000
-# CHECK-NEXT:   3 .dynsym       00000018 0000000000002000
-# CHECK-NEXT:   4 .dynstr       00000001 0000000000002018
-# CHECK-NEXT:   5 .hash         00000010 000000000000201c
-# CHECK-NEXT:   6 .text         00000008 000000000000202c
+# CHECK-NEXT: Idx Name          Size     VMA              File off Algn Type
+# CHECK-NEXT:   0 .dynamic      00000060 0000000000000000
+# CHECK-NEXT:   1 .data         00000008 0000000000004000
+# CHECK-NEXT:   2 .dynsym       00000018 0000000000002000
+# CHECK-NEXT:   3 .dynstr       00000001 0000000000002018
+# CHECK-NEXT:   4 .hash         00000010 000000000000201c
+# CHECK-NEXT:   5 .text         00000008 000000000000202c
 
 .quad 0
 .data
diff --git a/lld/test/ELF/linkerscript/output-section-include.test b/lld/test/ELF/linkerscript/output-section-include.test
--- a/lld/test/ELF/linkerscript/output-section-include.test
+++ b/lld/test/ELF/linkerscript/output-section-include.test
@@ -8,13 +8,13 @@
 # RUN: echo "" > %t.inc
 # RUN: ld.lld -o %t.elf --script %s %t.o -L %T
 # RUN: llvm-objdump -section-headers %t.elf | FileCheck %s --check-prefix=CHECK1
-# CHECK1: .data         00000008 0000000000002000 DATA
+# CHECK1: .data         00000008 0000000000002000 0000000000002000 2**0 DATA
 
 ## Non-empty include file.
 # RUN: echo "QUAD(0)" > %t.inc
 # RUN: ld.lld -o %t.elf --script %s %t.o -L %T
 # RUN: llvm-objdump -section-headers %t.elf | FileCheck %s --check-prefix=CHECK2
-# CHECK2: .data         00000010 0000000000002000 DATA
+# CHECK2: .data         00000010 0000000000002000 0000000000002000 2**0 DATA
 
 MEMORY {
   ROM (rwx): ORIGIN = 0x1000, LENGTH = 0x100
diff --git a/lld/test/ELF/linkerscript/region-alias.s b/lld/test/ELF/linkerscript/region-alias.s
--- a/lld/test/ELF/linkerscript/region-alias.s
+++ b/lld/test/ELF/linkerscript/region-alias.s
@@ -15,16 +15,16 @@
 # RUN: echo "REGION_ALIAS (\"ALIAS_DATA\", RAM);" >> %t.script.inc
 # RUN: ld.lld %t --script %t.script -o %t2
 # RUN: llvm-objdump -section-headers %t2 | FileCheck %s
-# CHECK: .text       00000001 0000000000001000 TEXT
-# CHECK: .data       00000008 0000000000002000 DATA
+# CHECK: .text       00000001 0000000000001000 0000000000001000 2**2 TEXT
+# CHECK: .data       00000008 0000000000002000 0000000000002000 2**0 DATA
 
 ## All to ROM.
 # RUN: echo "REGION_ALIAS (\"ALIAS_TEXT\", ROM);" > %t.script.inc
 # RUN: echo "REGION_ALIAS (\"ALIAS_DATA\", ROM);" >> %t.script.inc
 # RUN: ld.lld %t --script %t.script -o %t2
 # RUN: llvm-objdump -section-headers %t2 | FileCheck %s --check-prefix=RAM
-# RAM: .text         00000001 0000000000001000 TEXT
-# RAM: .data         00000008 0000000000001001 DATA
+# RAM: .text         00000001 0000000000001000 0000000000001000 2**2 TEXT
+# RAM: .data         00000008 0000000000001001 0000000000001001 2**0 DATA
 
 ## Redefinition of region.
 # RUN: echo "REGION_ALIAS (\"ROM\", ROM);" > %t.script.inc
diff --git a/lld/test/ELF/linkerscript/repsection-va.s b/lld/test/ELF/linkerscript/repsection-va.s
--- a/lld/test/ELF/linkerscript/repsection-va.s
+++ b/lld/test/ELF/linkerscript/repsection-va.s
@@ -5,7 +5,7 @@
 # RUN: ld.lld -o %t1 --script %t.script %t
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size     VMA          Type
+# CHECK-NEXT: Idx Name Size VMA File off Algn Type
 # CHECK-NOT: .foo
 # CHECK:  .foo          00000008 {{.*}} DATA
 # CHECK-NOT: .foo
diff --git a/lld/test/ELF/linkerscript/section-include.test b/lld/test/ELF/linkerscript/section-include.test
--- a/lld/test/ELF/linkerscript/section-include.test
+++ b/lld/test/ELF/linkerscript/section-include.test
@@ -8,16 +8,16 @@
 # RUN: echo "" > %t.inc
 # RUN: ld.lld -o %t.elf --script %s %t.o -L %T
 # RUN: llvm-objdump -section-headers %t.elf | FileCheck %s --check-prefix=CHECK1
-# CHECK1:      .data         00000008 0000000000002000 DATA
-# CHECK1-NEXT: .data3        00000008 0000000000002008 DATA
+# CHECK1:      .data         00000008 0000000000002000 0000000000002000 2**0 DATA
+# CHECK1-NEXT: .data3        00000008 0000000000002008 0000000000002008 2**0 DATA
 
 ## Non-empty include file.
 # RUN: echo ".data2 : { QUAD(0) } > RAM" > %t.inc
 # RUN: ld.lld -o %t.elf --script %s %t.o -L %T
 # RUN: llvm-objdump -section-headers %t.elf | FileCheck %s --check-prefix=CHECK2
-# CHECK2:      .data         00000008 0000000000002000 DATA
-# CHECK2-NEXT: .data2        00000008 0000000000002008 DATA
-# CHECK2-NEXT: .data3        00000008 0000000000002010 DATA
+# CHECK2:      .data         00000008 0000000000002000 0000000000002000 2**0 DATA
+# CHECK2-NEXT: .data2        00000008 0000000000002008 0000000000002008 2**0 DATA
+# CHECK2-NEXT: .data3        00000008 0000000000002010 0000000000002010 2**0 DATA
 
 MEMORY {
   ROM (rwx): ORIGIN = 0x1000, LENGTH = 0x100
diff --git a/lld/test/ELF/linkerscript/sections-constraint.s b/lld/test/ELF/linkerscript/sections-constraint.s
--- a/lld/test/ELF/linkerscript/sections-constraint.s
+++ b/lld/test/ELF/linkerscript/sections-constraint.s
@@ -8,7 +8,6 @@
 # RUN:   FileCheck -check-prefix=BASE %s
 # BASE: Sections:
 # BASE-NEXT: Idx Name          Size
-# BASE-NEXT:   0               00000000
 # BASE:   .writable     00000004
 # BASE:   .readable     00000004
 
@@ -21,7 +20,6 @@
 # RUN:   FileCheck -check-prefix=NO1 %s
 # NO1: Sections:
 # NO1-NEXT: Idx Name          Size
-# NO1-NEXT: 0               00000000
 # NO1:  .writable     00000004
 # NO1:  .foo.2        00000004
 # NO1:  .readable     00000004
diff --git a/lld/test/ELF/linkerscript/sections-gc2.s b/lld/test/ELF/linkerscript/sections-gc2.s
--- a/lld/test/ELF/linkerscript/sections-gc2.s
+++ b/lld/test/ELF/linkerscript/sections-gc2.s
@@ -8,14 +8,10 @@
 # RUN: ld.lld -T %t.script -o %t.so %t.o --gc-sections
 # RUN: llvm-objdump -h %t.so | FileCheck %s
 
-# CHECK: Idx Name          Size      VMA          Type
-# CHECK-NEXT:  0
+# CHECK: Idx Name Size VMA File off Algn Type
 # CHECK-NEXT:    used_in_reloc
 # CHECK-NEXT:    .text
 # CHECK-NEXT:    .comment
-# CHECK-NEXT:    .symtab
-# CHECK-NEXT:    .shstrtab
-# CHECK-NEXT:    .strtab
 
         .global _start
 _start:
diff --git a/lld/test/ELF/linkerscript/sections-keep.s b/lld/test/ELF/linkerscript/sections-keep.s
--- a/lld/test/ELF/linkerscript/sections-keep.s
+++ b/lld/test/ELF/linkerscript/sections-keep.s
@@ -12,9 +12,8 @@
 # RUN:   FileCheck -check-prefix=SECGC %s
 # SECGC:      Sections:
 # SECGC-NEXT: Idx Name          Size
-# SECGC-NEXT:   0               00000000
-# SECGC-NEXT:   1 .text         00000007
-# SECGC-NEXT:   2 .temp         00000004
+# SECGC-NEXT:   0 .text         00000007
+# SECGC-NEXT:   1 .temp         00000004
 
 ## Now apply KEEP command to preserve the section.
 # RUN: echo "SECTIONS { \
@@ -26,10 +25,9 @@
 # RUN:   FileCheck -check-prefix=SECNOGC %s
 # SECNOGC:      Sections:
 # SECNOGC-NEXT: Idx Name          Size
-# SECNOGC-NEXT:   0               00000000
-# SECNOGC-NEXT:   1 .text         00000007
-# SECNOGC-NEXT:   2 .keep         00000004
-# SECNOGC-NEXT:   3 .temp         00000004
+# SECNOGC-NEXT:   0 .text         00000007
+# SECNOGC-NEXT:   1 .keep         00000004
+# SECNOGC-NEXT:   2 .temp         00000004
 
 ## A section name matches two entries in the SECTIONS directive. The
 ## first one doesn't have KEEP, the second one does. If section that have
@@ -42,14 +40,10 @@
 # RUN: llvm-objdump -section-headers %t | FileCheck -check-prefix=MIXED1 %s
 # MIXED1:      Sections:
 # MIXED1-NEXT: Idx Name          Size
-# MIXED1-NEXT:   0               00000000
-# MIXED1-NEXT:   1 .keep         00000004
-# MIXED1-NEXT:   2 .temp         00000004 00000000000000ec
-# MIXED1-NEXT:   3 .text         00000007 00000000000000f0
-# MIXED1-NEXT:   4 .comment      00000008 0000000000000000
-# MIXED1-NEXT:   5 .symtab       00000060 0000000000000000
-# MIXED1-NEXT:   6 .shstrtab     00000036 0000000000000000
-# MIXED1-NEXT:   7 .strtab       00000012 0000000000000000
+# MIXED1-NEXT:   0 .keep         00000004
+# MIXED1-NEXT:   1 .temp         00000004 00000000000000ec
+# MIXED1-NEXT:   2 .text         00000007 00000000000000f0
+# MIXED1-NEXT:   3 .comment      00000008 0000000000000000
 
 ## The same, but now section without KEEP is at first place.
 ## gold and bfd linkers disagree here. gold collects .keep while
@@ -63,14 +57,10 @@
 # RUN: llvm-objdump -section-headers %t | FileCheck -check-prefix=MIXED2 %s
 # MIXED2:      Sections:
 # MIXED2-NEXT: Idx Name          Size
-# MIXED2-NEXT:   0               00000000
-# MIXED2-NEXT:   1 .nokeep       00000004 00000000000000e8
-# MIXED2-NEXT:   2 .temp         00000004 00000000000000ec
-# MIXED2-NEXT:   3 .text         00000007 00000000000000f0
-# MIXED2-NEXT:   4 .comment      00000008 0000000000000000
-# MIXED2-NEXT:   5 .symtab       00000060 0000000000000000
-# MIXED2-NEXT:   6 .shstrtab     00000038 0000000000000000
-# MIXED2-NEXT:   7 .strtab       00000012 0000000000000000
+# MIXED2-NEXT:   0 .nokeep       00000004 00000000000000e8
+# MIXED2-NEXT:   1 .temp         00000004 00000000000000ec
+# MIXED2-NEXT:   2 .text         00000007 00000000000000f0
+# MIXED2-NEXT:   3 .comment      00000008 0000000000000000
 
 # Check file pattern for kept sections.
 # RUN: echo "SECTIONS { \
diff --git a/lld/test/ELF/linkerscript/sections-sort.s b/lld/test/ELF/linkerscript/sections-sort.s
--- a/lld/test/ELF/linkerscript/sections-sort.s
+++ b/lld/test/ELF/linkerscript/sections-sort.s
@@ -14,14 +14,10 @@
 .byte 0
 
 # CHECK: Idx
-# CHECK-NEXT: 0
-# CHECK-NEXT: 1 .text
-# CHECK-NEXT: 2 .dynsym
-# CHECK-NEXT: 3 .hash
-# CHECK-NEXT: 4 .dynstr
-# CHECK-NEXT: 5 foo
-# CHECK-NEXT: 6 .dynamic
-# CHECK-NEXT: 7 .comment
-# CHECK-NEXT: 8 .symtab
-# CHECK-NEXT: 9 .shstrtab
-# CHECK-NEXT: 10 .strtab
+# CHECK-NEXT: 0 .text
+# CHECK-NEXT: 1 .dynsym
+# CHECK-NEXT: 2 .hash
+# CHECK-NEXT: 3 .dynstr
+# CHECK-NEXT: 4 foo
+# CHECK-NEXT: 5 .dynamic
+# CHECK-NEXT: 6 .comment
diff --git a/lld/test/ELF/linkerscript/sections.s b/lld/test/ELF/linkerscript/sections.s
--- a/lld/test/ELF/linkerscript/sections.s
+++ b/lld/test/ELF/linkerscript/sections.s
@@ -4,7 +4,7 @@
 # Empty SECTIONS command.
 # RUN: echo "SECTIONS {}" > %t.script
 # RUN: ld.lld -o %t1 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t1 | \
+# RUN: llvm-readelf --sections %t1 | \
 # RUN:   FileCheck -check-prefix=SEC-DEFAULT %s
 
 # SECTIONS command with the same order as default.
@@ -12,18 +12,18 @@
 # RUN:          .text : { *(.text) } \
 # RUN:          .data : { *(.data) } }" > %t.script
 # RUN: ld.lld -o %t2 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t2 | \
+# RUN: llvm-readelf --sections %t2 | \
 # RUN:   FileCheck -check-prefix=SEC-DEFAULT %s
 
-#             Idx Name          Size
-# SEC-DEFAULT: 1 .text         0000000e {{[0-9a-f]*}} TEXT
-# SEC-DEFAULT: 2 .data         00000020 {{[0-9a-f]*}} DATA
-# SEC-DEFAULT: 3 other         00000003 {{[0-9a-f]*}} DATA
-# SEC-DEFAULT: 4 .bss          00000002 {{[0-9a-f]*}} BSS
-# SEC-DEFAULT: 5 .comment      00000008 {{[0-9a-f]*}}
-# SEC-DEFAULT: 6 .symtab       00000030 {{[0-9a-f]*}}
-# SEC-DEFAULT: 7 .shstrtab     0000003b {{[0-9a-f]*}}
-# SEC-DEFAULT: 8 .strtab       00000008 {{[0-9a-f]*}}
+#              [Nr] Name      Type     Address       Off           Size
+# SEC-DEFAULT: [ 1] .text     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 00000e
+# SEC-DEFAULT: [ 2] .data     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000020
+# SEC-DEFAULT: [ 3] other     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000003
+# SEC-DEFAULT: [ 4] .bss      NOBITS   {{[0-9a-f]*}} {{[0-9a-f]*}} 000002
+# SEC-DEFAULT: [ 5] .comment  PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
+# SEC-DEFAULT: [ 6] .symtab   SYMTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000030
+# SEC-DEFAULT: [ 7] .shstrtab STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 00003b
+# SEC-DEFAULT: [ 8] .strtab   STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
 
 # Sections are put in order specified in linker script, other than alloc
 # sections going first.
@@ -36,36 +36,36 @@
 # RUN:          .data : { *(.data) } \
 # RUN:          .text : { *(.text) } }" > %t.script
 # RUN: ld.lld -o %t3 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t3 | \
+# RUN: llvm-readelf --sections %t3 | \
 # RUN:   FileCheck -check-prefix=SEC-ORDER %s
 
-#           Idx Name          Size
-# SEC-ORDER: 1 .bss          00000002 {{[0-9a-f]*}} BSS
-# SEC-ORDER: 2 other         00000003 {{[0-9a-f]*}} DATA
-# SEC-ORDER: 3 .shstrtab     0000003b {{[0-9a-f]*}}
-# SEC-ORDER: 4 .symtab       00000030 {{[0-9a-f]*}}
-# SEC-ORDER: 5 .strtab       00000008 {{[0-9a-f]*}}
-# SEC-ORDER: 6 .comment      00000008 {{[0-9a-f]*}}
-# SEC-ORDER: 7 .data         00000020 {{[0-9a-f]*}} DATA
-# SEC-ORDER: 8 .text         0000000e {{[0-9a-f]*}} TEXT
+#            [Nr] Name      Type     Address       Off           Size
+# SEC-ORDER: [ 1] .bss      NOBITS   {{[0-9a-f]*}} {{[0-9a-f]*}} 000002
+# SEC-ORDER: [ 2] other     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000003
+# SEC-ORDER: [ 3] .shstrtab STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 00003b
+# SEC-ORDER: [ 4] .symtab   SYMTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000030
+# SEC-ORDER: [ 5] .strtab   STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
+# SEC-ORDER: [ 6] .comment  PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
+# SEC-ORDER: [ 7] .data     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000020
+# SEC-ORDER: [ 8] .text     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 00000e
 
 # .text and .data have swapped names but proper sizes and types.
 # RUN: echo "SECTIONS { \
 # RUN:          .data : { *(.text) } \
 # RUN:          .text : { *(.data) } }" > %t.script
 # RUN: ld.lld -o %t4 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t4 | \
+# RUN: llvm-readelf --sections %t4 | \
 # RUN:   FileCheck -check-prefix=SEC-SWAP-NAMES %s
 
-#                Idx Name          Size
-# SEC-SWAP-NAMES: 1 .data         0000000e {{[0-9a-f]*}} TEXT
-# SEC-SWAP-NAMES: 2 .text         00000020 {{[0-9a-f]*}} DATA
-# SEC-SWAP-NAMES: 3 other         00000003 {{[0-9a-f]*}} DATA
-# SEC-SWAP-NAMES: 4 .bss          00000002 {{[0-9a-f]*}} BSS
-# SEC-SWAP-NAMES: 5 .comment      00000008 {{[0-9a-f]*}}
-# SEC-SWAP-NAMES: 6 .symtab       00000030 {{[0-9a-f]*}}
-# SEC-SWAP-NAMES: 7 .shstrtab     0000003b {{[0-9a-f]*}}
-# SEC-SWAP-NAMES: 8 .strtab       00000008 {{[0-9a-f]*}}
+#                 [Nr] Name      Type     Address       Off           Size
+# SEC-SWAP-NAMES: [ 1] .data     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 00000e
+# SEC-SWAP-NAMES: [ 2] .text     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000020
+# SEC-SWAP-NAMES: [ 3] other     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000003
+# SEC-SWAP-NAMES: [ 4] .bss      NOBITS   {{[0-9a-f]*}} {{[0-9a-f]*}} 000002
+# SEC-SWAP-NAMES: [ 5] .comment  PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
+# SEC-SWAP-NAMES: [ 6] .symtab   SYMTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000030
+# SEC-SWAP-NAMES: [ 7] .shstrtab STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 00003b
+# SEC-SWAP-NAMES: [ 8] .strtab   STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
 
 # Multiple SECTIONS command specifying additional input section descriptions
 # for the same output section description - input sections are merged into
@@ -76,18 +76,18 @@
 # RUN:       SECTIONS { \
 # RUN:          .data : { *(other) } }" > %t.script
 # RUN: ld.lld -o %t6 --script %t.script %t
-# RUN: llvm-objdump -section-headers %t6 | \
+# RUN: llvm-readelf --sections %t6 | \
 # RUN:   FileCheck -check-prefix=SEC-MULTI %s
 
-#           Idx Name          Size
-# SEC-MULTI:      1 .text         0000000e {{[0-9a-f]*}} TEXT
-# SEC-MULTI-NEXT:   .data         00000020 {{[0-9a-f]*}} DATA
-# SEC-MULTI-NEXT:   .data         00000003 {{[0-9a-f]*}} DATA
-# SEC-MULTI-NEXT:   .bss          00000002 {{[0-9a-f]*}} BSS
-# SEC-MULTI-NEXT:   .comment      00000008 {{[0-9a-f]*}}
-# SEC-MULTI-NEXT:   .symtab       00000030 {{[0-9a-f]*}}
-# SEC-MULTI-NEXT:   .shstrtab     00000035 {{[0-9a-f]*}}
-# SEC-MULTI-NEXT:   .strtab       00000008 {{[0-9a-f]*}}
+#                 [Nr] Name      Type     Address       Off           Size
+# SEC-MULTI:      [ 1] .text     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 00000e
+# SEC-MULTI-NEXT: [ 2] .data     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000020
+# SEC-MULTI-NEXT: [ 3] .data     PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000003
+# SEC-MULTI-NEXT: [ 4] .bss      NOBITS   {{[0-9a-f]*}} {{[0-9a-f]*}} 000002
+# SEC-MULTI-NEXT: [ 5] .comment  PROGBITS {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
+# SEC-MULTI-NEXT: [ 6] .symtab   SYMTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000030
+# SEC-MULTI-NEXT: [ 7] .shstrtab STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000035
+# SEC-MULTI-NEXT: [ 8] .strtab   STRTAB   {{[0-9a-f]*}} {{[0-9a-f]*}} 000008
 
 # Input section pattern contains additional semicolon.
 # Case found in linux kernel script. Check we are able to parse it.
diff --git a/lld/test/ELF/linkerscript/sizeof.s b/lld/test/ELF/linkerscript/sizeof.s
--- a/lld/test/ELF/linkerscript/sizeof.s
+++ b/lld/test/ELF/linkerscript/sizeof.s
@@ -13,10 +13,9 @@
 # RUN: llvm-objdump -t -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
 # CHECK-NEXT:  Idx Name          Size
-# CHECK-NEXT:    0               00000000
-# CHECK-NEXT:    1 .aaa          00000008
-# CHECK-NEXT:    2 .bbb          00000010
-# CHECK-NEXT:    3 .ccc          00000018
+# CHECK-NEXT:    0 .aaa          00000008
+# CHECK-NEXT:    1 .bbb          00000010
+# CHECK-NEXT:    2 .ccc          00000018
 # CHECK:      SYMBOL TABLE:
 # CHECK-NEXT:                   .text 00000000 _start
 # CHECK-NEXT:  0000000000000008 *ABS* 00000000 _aaa
diff --git a/lld/test/ELF/linkerscript/symbol-only.test b/lld/test/ELF/linkerscript/symbol-only.test
--- a/lld/test/ELF/linkerscript/symbol-only.test
+++ b/lld/test/ELF/linkerscript/symbol-only.test
@@ -13,7 +13,6 @@
 
 # CHECK:      Sections:
 # CHECK-NEXT: Idx Name          Size     VMA
-# CHECK-NEXT:   0               00000000 0000000000000000
 # CHECK:          abc           00000000 [[ADDR:[0-9a-f]*]]
 # CHECK:          bar           00000000 0000000000001000
 
diff --git a/lld/test/ELF/linkerscript/va.s b/lld/test/ELF/linkerscript/va.s
--- a/lld/test/ELF/linkerscript/va.s
+++ b/lld/test/ELF/linkerscript/va.s
@@ -6,10 +6,9 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 # CHECK:      Sections:
 # CHECK-NEXT: Idx Name          Size     VMA
-# CHECK-NEXT:   0               00000000 0000000000000000
-# CHECK-NEXT:   1 .foo          00000004 0000000000000000
-# CHECK-NEXT:   2 .boo          00000004 0000000000000004
-# CHECK-NEXT:   3 .text         00000001 0000000000000008
+# CHECK-NEXT:   0 .foo          00000004 0000000000000000
+# CHECK-NEXT:   1 .boo          00000004 0000000000000004
+# CHECK-NEXT:   2 .text         00000001 0000000000000008
 
 .global _start
 _start:
diff --git a/lld/test/ELF/linkerscript/wildcards.s b/lld/test/ELF/linkerscript/wildcards.s
--- a/lld/test/ELF/linkerscript/wildcards.s
+++ b/lld/test/ELF/linkerscript/wildcards.s
@@ -9,15 +9,11 @@
 # RUN:   FileCheck -check-prefix=SEC-DEFAULT %s
 # SEC-DEFAULT:      Sections:
 # SEC-DEFAULT-NEXT: Idx Name          Size
-# SEC-DEFAULT-NEXT:   0               00000000
-# SEC-DEFAULT-NEXT:   1 .text         00000008
-# SEC-DEFAULT-NEXT:   2 .abcd         00000004
-# SEC-DEFAULT-NEXT:   3 .ad           00000004
-# SEC-DEFAULT-NEXT:   4 .ag           00000004
-# SEC-DEFAULT-NEXT:   5 .comment      00000008 {{[0-9a-f]*}}
-# SEC-DEFAULT-NEXT:   6 .symtab       00000030
-# SEC-DEFAULT-NEXT:   7 .shstrtab     00000038
-# SEC-DEFAULT-NEXT:   8 .strtab       00000008
+# SEC-DEFAULT-NEXT:   0 .text         00000008
+# SEC-DEFAULT-NEXT:   1 .abcd         00000004
+# SEC-DEFAULT-NEXT:   2 .ad           00000004
+# SEC-DEFAULT-NEXT:   3 .ag           00000004
+# SEC-DEFAULT-NEXT:   4 .comment      00000008 {{[0-9a-f]*}}
 
 ## Now replace the symbol with '?' and check that results are the same.
 # RUN: echo "SECTIONS { \
@@ -34,14 +30,10 @@
 # RUN:   FileCheck -check-prefix=SEC-ALL %s
 # SEC-ALL:      Sections:
 # SEC-ALL-NEXT: Idx Name          Size
-# SEC-ALL-NEXT:   0               00000000
-# SEC-ALL-NEXT:   1 .text         0000000c
-# SEC-ALL-NEXT:   2 .ad           00000004
-# SEC-ALL-NEXT:   3 .ag           00000004
-# SEC-ALL-NEXT:   4 .comment      00000008
-# SEC-ALL-NEXT:   5 .symtab       00000030
-# SEC-ALL-NEXT:   6 .shstrtab     00000032
-# SEC-ALL-NEXT:   7 .strtab       00000008
+# SEC-ALL-NEXT:   0 .text         0000000c
+# SEC-ALL-NEXT:   1 .ad           00000004
+# SEC-ALL-NEXT:   2 .ag           00000004
+# SEC-ALL-NEXT:   3 .comment      00000008
 
 ## All sections started with .a are merged.
 # RUN: echo "SECTIONS { \
@@ -51,12 +43,8 @@
 # RUN:   FileCheck -check-prefix=SEC-NO %s
 # SEC-NO: Sections:
 # SEC-NO-NEXT: Idx Name          Size
-# SEC-NO-NEXT:   0               00000000
-# SEC-NO-NEXT:   1 .text         00000014
-# SEC-NO-NEXT:   2 .comment      00000008
-# SEC-NO-NEXT:   3 .symtab       00000030
-# SEC-NO-NEXT:   4 .shstrtab     0000002a
-# SEC-NO-NEXT:   5 .strtab       00000008
+# SEC-NO-NEXT:   0 .text         00000014
+# SEC-NO-NEXT:   1 .comment      00000008
 
 .text
 .section .abc,"ax",@progbits
diff --git a/lld/test/ELF/linkerscript/wildcards2.s b/lld/test/ELF/linkerscript/wildcards2.s
--- a/lld/test/ELF/linkerscript/wildcards2.s
+++ b/lld/test/ELF/linkerscript/wildcards2.s
@@ -9,9 +9,8 @@
 # RUN:   FileCheck %s
 # CHECK:      Sections:
 # CHECK-NEXT:  Idx Name          Size
-# CHECK-NEXT:    0               00000000
-# CHECK-NEXT:    1 .text         00000004
-# CHECK-NEXT:    2 aabc          00000004
+# CHECK-NEXT:    0 .text         00000004
+# CHECK-NEXT:    1 aabc          00000004
 
 .text
 .section .abc,"ax",@progbits
diff --git a/lld/test/ELF/relocatable-sections.s b/lld/test/ELF/relocatable-sections.s
--- a/lld/test/ELF/relocatable-sections.s
+++ b/lld/test/ELF/relocatable-sections.s
@@ -1,7 +1,7 @@
 # REQUIRES: x86
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o
 # RUN: ld.lld -r %t1.o -o %t
-# RUN: llvm-objdump -section-headers %t | FileCheck %s
+# RUN: llvm-readelf --sections %t | FileCheck %s
 
 # CHECK:      .text
 # CHECK-NEXT: .rela.text
diff --git a/lld/test/ELF/relocatable.s b/lld/test/ELF/relocatable.s
--- a/lld/test/ELF/relocatable.s
+++ b/lld/test/ELF/relocatable.s
@@ -53,15 +53,10 @@
 # CHECK-NEXT:  }
 
 # SECTION: Sections:
-# SECTION: Idx Name          Size     VMA              Type
-# SECTION:   0               00000000 0000000000000000
-# SECTION:   1 .text         00000056 0000000000000000 TEXT
-# SECTION:   2 .rela.text    00000090 0000000000000000
-# SECTION:   3 .bss          00000018 0000000000000000 BSS
-# SECTION:   4 .note.GNU-stack 00000000 0000000000000000
-# SECTION:   5 .symtab       00000168 0000000000000000
-# SECTION:   6 .shstrtab     00000041 0000000000000000
-# SECTION:   7 .strtab       0000002d 0000000000000000
+# SECTION: Idx Name          Size     VMA              File off         Algn  Type
+# SECTION:   0 .text         00000056 0000000000000000 0000000000000040 2**4  TEXT
+# SECTION:   1 .bss          00000018 0000000000000000 0000000000000128 2**2  BSS
+# SECTION:   2 .note.GNU-stack 00000000 0000000000000000 0000000000000128 2**0
 
 # CHECKTEXT:      Disassembly of section .text:
 # CHECKTEXT-EMPTY:
diff --git a/lld/test/ELF/relro-omagic.s b/lld/test/ELF/relro-omagic.s
--- a/lld/test/ELF/relro-omagic.s
+++ b/lld/test/ELF/relro-omagic.s
@@ -7,20 +7,20 @@
 # RUN: llvm-readobj --program-headers %t | FileCheck --check-prefix=NOPHDRS %s
 
 # NORELRO:      Sections:
-# NORELRO-NEXT: Idx Name          Size     VMA              Type
-# NORELRO-NEXT:   0               00000000 0000000000000000
-# NORELRO-NEXT:   1 .dynsym       00000048 00000000002000e8
-# NORELRO-NEXT:   2 .hash         00000020 0000000000200130
-# NORELRO-NEXT:   3 .dynstr       00000021 0000000000200150
-# NORELRO-NEXT:   4 .rela.dyn     00000018 0000000000200178
-# NORELRO-NEXT:   5 .rela.plt     00000018 0000000000200190
-# NORELRO-NEXT:   6 .text         0000000a 00000000002001a8 TEXT
-# NORELRO-NEXT:   7 .plt          00000020 00000000002001c0 TEXT
-# NORELRO-NEXT:   8 .data         00000008 00000000002001e0 DATA
-# NORELRO-NEXT:   9 .foo          00000004 00000000002001e8 DATA
-# NORELRO-NEXT:  10 .dynamic      000000f0 00000000002001f0
-# NORELRO-NEXT:  11 .got          00000008 00000000002002e0 DATA
-# NORELRO-NEXT:  12 .got.plt      00000020 00000000002002e8 DATA
+# NORELRO-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# NORELRO-NEXT:   0 .dynsym       00000048 00000000002000e8 00000000000000e8 2**3
+# NORELRO-NEXT:   1 .hash         00000020 0000000000200130 0000000000000130 2**2
+# NORELRO-NEXT:   2 .dynstr       00000021 0000000000200150 0000000000000150 2**0
+# NORELRO-NEXT:   3 .rela.dyn     00000018 0000000000200178 0000000000000178 2**3
+# NORELRO-NEXT:   4 .rela.plt     00000018 0000000000200190 0000000000000190 2**3
+# NORELRO-NEXT:   5 .text         0000000a 00000000002001a8 00000000000001a8 2**2  TEXT
+# NORELRO-NEXT:   6 .plt          00000020 00000000002001c0 00000000000001c0 2**4  TEXT
+# NORELRO-NEXT:   7 .data         00000008 00000000002001e0 00000000000001e0 2**0  DATA
+# NORELRO-NEXT:   8 .foo          00000004 00000000002001e8 00000000000001e8 2**0  DATA
+# NORELRO-NEXT:   9 .dynamic      000000f0 00000000002001f0 00000000000001f0 2**3
+# NORELRO-NEXT:  10 .got          00000008 00000000002002e0 00000000000002e0 2**3  DATA
+# NORELRO-NEXT:  11 .got.plt      00000020 00000000002002e8 00000000000002e8 2**3  DATA
+# NORELRO-NEXT:  12 .comment      00000008 0000000000000000 0000000000000308 2**0
 
 # NOPHDRS:     ProgramHeaders [
 # NOPHDRS-NOT: PT_GNU_RELRO
diff --git a/lld/test/ELF/section-name.s b/lld/test/ELF/section-name.s
--- a/lld/test/ELF/section-name.s
+++ b/lld/test/ELF/section-name.s
@@ -42,17 +42,14 @@
 .section .tdata.foo,"aGwT",@progbits,foo,comdat
 .byte 0
 
-// CHECK:  1 .rodata  00000002
-// CHECK:  2 .gcc_except_table 00000001
-// CHECK:  3 .text         00000002
-// CHECK:  4 .tdata        00000001
-// CHECK:  5 .tbss         00000001
-// CHECK:  6 .data.rel.ro  00000004
-// CHECK:  7 .data         00000002
-// CHECK:  8 .foo.a        00000001
-// CHECK:  9 .foo          00000001
-// CHECK: 10 .bss          00000002
-// CHECK: 11 .comment      00000008
-// CHECK: 12 .symtab       00000030
-// CHECK: 13 .shstrtab     00000075
-// CHECK: 14 .strtab       00000008
+// CHECK:  0 .rodata  00000002
+// CHECK:  1 .gcc_except_table 00000001
+// CHECK:  2 .text         00000002
+// CHECK:  3 .tdata        00000001
+// CHECK:  4 .tbss         00000001
+// CHECK:  5 .data.rel.ro  00000004
+// CHECK:  6 .data         00000002
+// CHECK:  7 .foo.a        00000001
+// CHECK:  8 .foo          00000001
+// CHECK:  9 .bss          00000002
+// CHECK: 10 .comment      00000008
diff --git a/lld/test/ELF/sectionstart-noallochdr.s b/lld/test/ELF/sectionstart-noallochdr.s
--- a/lld/test/ELF/sectionstart-noallochdr.s
+++ b/lld/test/ELF/sectionstart-noallochdr.s
@@ -5,11 +5,11 @@
 # RUN: llvm-objdump -section-headers %t1 | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT:  Idx Name          Size     VMA              Type
-# CHECK-NEXT:    0               00000000 0000000000000000
-# CHECK-NEXT:    1 .text         00000001 0000000000000010 TEXT
-# CHECK-NEXT:    2 .data         00000004 0000000000000020 DATA
-# CHECK-NEXT:    3 .bss          00000004 0000000000000030 BSS
+# CHECK-NEXT:  Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:    0 .text         00000001 0000000000000010 0000000000001010 2**2  TEXT
+# CHECK-NEXT:    1 .data         00000004 0000000000000020 0000000000001020 2**0  DATA
+# CHECK-NEXT:    2 .bss          00000004 0000000000000030 0000000000001024 2**0  BSS
+
 
 .text
 .globl _start
diff --git a/lld/test/ELF/sectionstart.s b/lld/test/ELF/sectionstart.s
--- a/lld/test/ELF/sectionstart.s
+++ b/lld/test/ELF/sectionstart.s
@@ -5,11 +5,10 @@
 # RUN: llvm-objdump -section-headers %t | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT:  Idx Name          Size     VMA              Type
-# CHECK-NEXT:    0               00000000 0000000000000000
-# CHECK-NEXT:    1 .text         00000001 0000000000100000 TEXT
-# CHECK-NEXT:    2 .data         00000004 0000000000110000 DATA
-# CHECK-NEXT:    3 .bss          00000004 0000000000200000 BSS
+# CHECK-NEXT:  Idx Name          Size     VMA              File off         Algn  Type
+# CHECK-NEXT:    0 .text         00000001 0000000000100000 0000000000001000 2**2  TEXT
+# CHECK-NEXT:    1 .data         00000004 0000000000110000 0000000000002000 2**0  DATA
+# CHECK-NEXT:    2 .bss          00000004 0000000000200000 0000000000002004 2**0  BSS
 
 ## The same, but dropped "0x" prefix.
 # RUN: ld.lld %t.o --section-start .text=100000 \
diff --git a/lld/test/ELF/strip-all.s b/lld/test/ELF/strip-all.s
--- a/lld/test/ELF/strip-all.s
+++ b/lld/test/ELF/strip-all.s
@@ -2,24 +2,24 @@
 
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
 # RUN: ld.lld %t.o -o %t1
-#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix BEFORE
+#RUN: llvm-readelf --sections %t1 | FileCheck %s -check-prefix BEFORE
 #BEFORE:       .symtab
 #BEFORE-NEXT:  .shstrtab
 #BEFORE-NEXT:  .strtab
 
 #RUN: ld.lld %t.o --strip-all -o %t1
-#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix AFTER
+#RUN: llvm-readelf --sections %t1 | FileCheck %s -check-prefix AFTER
 #AFTER-NOT: .symtab
 #AFTER:     .shstrtab
 #AFTER-NOT: .strtab
 
 # Ignore --strip-all if -r is specified
 #RUN: ld.lld %t.o --strip-all -r -o %t1
-#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix BEFORE
+#RUN: llvm-readelf --sections %t1 | FileCheck %s -check-prefix BEFORE
 
 # Test alias -s
 #RUN: ld.lld %t.o -s -o %t1
-#RUN: llvm-objdump -section-headers %t1 | FileCheck %s -check-prefix AFTER
+#RUN: llvm-readelf --sections %t1 | FileCheck %s -check-prefix AFTER
 
 # RUN: not ld.lld %t.o --strip-all --emit-relocs -o /dev/null 2>&1 | FileCheck --check-prefix=ERR %s
 # ERR: error: --strip-all and --emit-relocs may not be used together
diff --git a/lld/test/ELF/synthetic-got.s b/lld/test/ELF/synthetic-got.s
--- a/lld/test/ELF/synthetic-got.s
+++ b/lld/test/ELF/synthetic-got.s
@@ -7,8 +7,8 @@
 # RUN:   | FileCheck %s --check-prefix=GOTDATA
 
 # GOT:     Sections:
-# GOT:       9 .got         00000008 00000000000001b0 DATA
-# GOT:      10 .got.plt     00000020 00000000000001b8 DATA
+# GOT:       8 .got         00000008 00000000000001b0 00000000000011b0 2**3 DATA
+# GOT:       9 .got.plt     00000020 00000000000001b8 00000000000011b8 2**3 DATA
 # GOTDATA:      Contents of section .got:
 # GOTDATA-NEXT:  01b0 00000000 00000000
 # GOTDATA-NEXT: Contents of section .got.plt:
@@ -21,7 +21,7 @@
 # RUN: llvm-objdump -s -section=.mygot %t1.out | FileCheck %s --check-prefix=MYGOTDATA
 
 # MYGOT:     Sections:
-# MYGOT:      8  .mygot     00000028 00000000000000e0 DATA
+# MYGOT:      7  .mygot     00000028 00000000000000e0 00000000000010e0 2**3 DATA
 # MYGOT-NOT:  .got
 # MYGOT-NOT:  .got.plt
 # MYGOTDATA:      00e0 00000000 00000000 08010000 00000000
diff --git a/llvm/test/MC/COFF/assoc-private.s b/llvm/test/MC/COFF/assoc-private.s
--- a/llvm/test/MC/COFF/assoc-private.s
+++ b/llvm/test/MC/COFF/assoc-private.s
@@ -5,9 +5,9 @@
 # it anyway.
 
 # CHECK: Sections:
-# CHECK: Idx Name          Size     VMA              Type
-# CHECK:   3 .rdata        00000004 0000000000000000 DATA
-# CHECK:   4 .CRT$XCU      00000008 0000000000000000 DATA
+# CHECK: Idx Name          Size     VMA              File off         Algn Type
+# CHECK:   3 .rdata        00000004 0000000000000000 00000000000000dc 2**2 DATA
+# CHECK:   4 .CRT$XCU      00000008 0000000000000000 00000000000000e0 2**3 DATA
 # CHECK: SYMBOL TABLE:
 # CHECK: [ 6](sec  4)(fl 0x00)(ty   0)(scl   3) (nx 1) 0x00000000 .rdata
 # CHECK: AUX scnlen 0x4 nreloc 0 nlnno 0 checksum 0x0 assoc 4 comdat 0
diff --git a/llvm/test/Object/objdump-no-sectionheaders.test b/llvm/test/Object/objdump-no-sectionheaders.test
--- a/llvm/test/Object/objdump-no-sectionheaders.test
+++ b/llvm/test/Object/objdump-no-sectionheaders.test
@@ -2,5 +2,5 @@
 ; RUN:              | FileCheck %s
 
 ; CHECK: Sections:
-; CHECK: Idx Name          Size      VMA              Type
+; CHECK: Idx Name Size VMA File off Algn Type
 ; CHECK-NOT: {{.}}
diff --git a/llvm/test/Object/objdump-sectionheaders.test b/llvm/test/Object/objdump-sectionheaders.test
--- a/llvm/test/Object/objdump-sectionheaders.test
+++ b/llvm/test/Object/objdump-sectionheaders.test
@@ -5,15 +5,10 @@
 # results in a way that we don't emulate.
 
 # CHECK: Sections:
-# CHECK: Idx Name          Size     VMA              Type
-# CHECK:   0               00000000 0000000000000000
-# CHECK:   1 .text         00000026 0000000000000000 TEXT
-# CHECK:   2 .rodata.str1.1 0000000d 0000000000000026 DATA
-# CHECK:   3 .note.GNU-stack 00000000 0000000000000033
-# CHECK:   4 .rela.text    00000000 0000000000000038
-# CHECK:   5 .symtab       00000018 0000000000000000
-# CHECK:   6 .strtab       00000001 0000000000000000
-# CHECK:   7 .shstrtab     00000045 0000000000000000
+# CHECK: Idx Name          Size     VMA              File off         Algn Type
+# CHECK:   0 .text         00000026 0000000000000000 0000000000000040 2**0 TEXT
+# CHECK:   1 .rodata.str1.1 0000000d 0000000000000026 0000000000000066 2**0 DATA
+# CHECK:   2 .note.GNU-stack 00000000 0000000000000033 0000000000000073 2**0
 
 --- !ELF
 FileHeader:
diff --git a/llvm/test/ObjectYAML/CodeView/sections.yaml b/llvm/test/ObjectYAML/CodeView/sections.yaml
--- a/llvm/test/ObjectYAML/CodeView/sections.yaml
+++ b/llvm/test/ObjectYAML/CodeView/sections.yaml
@@ -108,5 +108,5 @@
 # CHECK:       Number:          1
 # CHECK: ...
 
-# HEADERS:   0 .debug$T      00000040 0000000000000000 DATA
-# HEADERS:   1 .debug$H      00000030 0000000000000000 DATA
+# HEADERS:   0 .debug$T      00000040 0000000000000000 0000000000000064 2**0 DATA
+# HEADERS:   1 .debug$H      00000030 0000000000000000 00000000000000a4 2**2 DATA
diff --git a/llvm/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test b/llvm/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test
--- a/llvm/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/symtab-error-on-remove-strtab.test
@@ -14,9 +14,9 @@
 # ERR2: error: '[[INPUT]]': string table '.strtab' cannot be removed because it is referenced by the symbol table '.symtab'
 
 # RUN: llvm-objcopy --allow-broken-links -R .strtab %t %t4
-# RUN: llvm-objdump --section-headers %t4 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.strtab
+# RUN: llvm-readelf --section-headers %t4 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.strtab
 # RUN: cp %t %t5
 # RUN: llvm-strip --no-strip-all --allow-broken-links -R .strtab %t %t5
-# RUN: llvm-objdump --section-headers %t5 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.strtab
+# RUN: llvm-readelf --section-headers %t5 | FileCheck %s --check-prefix=SECTIONS --implicit-check-not=.strtab
 
 # SECTIONS: .symtab
diff --git a/llvm/test/tools/llvm-objdump/X86/adjust-vma.test b/llvm/test/tools/llvm-objdump/X86/adjust-vma.test
--- a/llvm/test/tools/llvm-objdump/X86/adjust-vma.test
+++ b/llvm/test/tools/llvm-objdump/X86/adjust-vma.test
@@ -4,28 +4,16 @@
 # 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
+# NOADJUST-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# NOADJUST-NEXT:   0 .text         00000002 0000000000000000 0000000000000040 2**2  TEXT
+# NOADJUST-NEXT:   1 .debug_str    00000004 0000000000000000 0000000000000042 2**0
+# NOADJUST-NEXT:   2 .data         00000004 0000000000000000 0000000000000060 2**0  DATA
 
 # 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
+# ADJUST-NEXT: Idx Name          Size     VMA              File off         Algn  Type
+# ADJUST-NEXT:   0 .text         00000002 0000000000123000 0000000000000040 2**2  TEXT
+# ADJUST-NEXT:   1 .debug_str    00000004 0000000000000000 0000000000000042 2**0
+# ADJUST-NEXT:   2 .data         00000004 0000000000123000 0000000000000060 2**0  DATA
 
 # COMMON:      SYMBOL TABLE:
 # COMMON-NEXT:  0000000000000001  l F .text 00000000 func
diff --git a/llvm/test/tools/llvm-objdump/X86/macho-section-headers.test b/llvm/test/tools/llvm-objdump/X86/macho-section-headers.test
--- a/llvm/test/tools/llvm-objdump/X86/macho-section-headers.test
+++ b/llvm/test/tools/llvm-objdump/X86/macho-section-headers.test
@@ -1,8 +1,8 @@
 RUN: llvm-objdump -macho -h %p/Inputs/hello.obj.macho-x86_64 | FileCheck %s
 
 CHECK: Sections:
-CHECK: Idx Name          Size     VMA              Type
-CHECK:   0 __text        0000003b 0000000000000000 TEXT 
-CHECK:   1 __cstring     0000000d 000000000000003b DATA 
-CHECK:   2 __compact_unwind 00000020 0000000000000048 DATA 
-CHECK:   3 __eh_frame    00000040 0000000000000068 DATA 
+CHECK: Idx Name          Size     VMA              File off         Algn  Type
+CHECK:   0 __text        0000003b 0000000000000000 0000000000000210 2**4  TEXT
+CHECK:   1 __cstring     0000000d 000000000000003b 000000000000024b 2**0  DATA
+CHECK:   2 __compact_unwind 00000020 0000000000000048 0000000000000258 2**3  DATA
+CHECK:   3 __eh_frame    00000040 0000000000000068 0000000000000278 2**3  DATA
diff --git a/llvm/test/tools/llvm-objdump/X86/phdrs-lma.test b/llvm/test/tools/llvm-objdump/X86/phdrs-lma.test
--- a/llvm/test/tools/llvm-objdump/X86/phdrs-lma.test
+++ b/llvm/test/tools/llvm-objdump/X86/phdrs-lma.test
@@ -4,11 +4,10 @@
 # RUN: llvm-objdump --section-headers %t | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name  Size     VMA              LMA              Type
-# CHECK-NEXT:   0       00000000 0000000000000000 0000000000000000
-# CHECK-NEXT:   1 .text 00000004 0000000000001000 0000000000002000 TEXT
-# CHECK-NEXT:   2 .init 00000004 0000000000001010 0000000000001010 TEXT
-# CHECK-NEXT:   3 .data 00000004 0000000000002000 0000000000003000 DATA
+# CHECK-NEXT: Idx Name  Size     VMA              LMA              File off         Algn Type
+# CHECK-NEXT:   0 .text 00000004 0000000000001000 0000000000002000 00000000000000b0 2**0 TEXT
+# CHECK-NEXT:   1 .init 00000004 0000000000001010 0000000000001010 00000000000000b4 2**0 TEXT
+# CHECK-NEXT:   2 .data 00000004 0000000000002000 0000000000003000 00000000000000b8 2**0 DATA
 
 !ELF
 FileHeader:
diff --git a/llvm/test/tools/llvm-objdump/X86/phdrs-lma2.test b/llvm/test/tools/llvm-objdump/X86/phdrs-lma2.test
--- a/llvm/test/tools/llvm-objdump/X86/phdrs-lma2.test
+++ b/llvm/test/tools/llvm-objdump/X86/phdrs-lma2.test
@@ -5,22 +5,20 @@
 # RUN: llvm-objdump --section-headers %t | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name  Size     VMA              Type
-# CHECK-NEXT:   0       00000000 0000000000000000
-# CHECK-NEXT:   1 .text 00000004 0000000000001000 TEXT
-# CHECK-NEXT:   2 .init 00000004 0000000000001010 TEXT
-# CHECK-NEXT:   3 .data 00000004 0000000000002000 DATA
+# CHECK-NEXT: Idx Name  Size     VMA              File off         Algn Type
+# CHECK-NEXT:   0 .text 00000004 0000000000001000 00000000000000b0 2**0 TEXT
+# CHECK-NEXT:   1 .init 00000004 0000000000001010 00000000000000b4 2**0 TEXT
+# CHECK-NEXT:   2 .data 00000004 0000000000002000 00000000000000b8 2**0 DATA
 
 ## Check we can trigger displaying the LMA column with --show-lma.
 # RUN: llvm-objdump --section-headers --show-lma %t |\
 # RUN:   FileCheck %s --check-prefix=LMA
 
 # LMA:      Sections:
-# LMA-NEXT: Idx Name  Size     VMA              LMA              Type
-# LMA-NEXT:   0       00000000 0000000000000000 0000000000000000
-# LMA-NEXT:   1 .text 00000004 0000000000001000 0000000000001000 TEXT
-# LMA-NEXT:   2 .init 00000004 0000000000001010 0000000000001010 TEXT
-# LMA-NEXT:   3 .data 00000004 0000000000002000 0000000000002000 DATA
+# LMA-NEXT: Idx Name  Size     VMA              LMA              File off         Algn Type
+# LMA-NEXT:   0 .text 00000004 0000000000001000 0000000000001000 00000000000000b0 2**0 TEXT
+# LMA-NEXT:   1 .init 00000004 0000000000001010 0000000000001010 00000000000000b4 2**0 TEXT
+# LMA-NEXT:   2 .data 00000004 0000000000002000 0000000000002000 00000000000000b8 2**0 DATA
 
 !ELF
 FileHeader:
diff --git a/llvm/test/tools/llvm-objdump/X86/section-index.s b/llvm/test/tools/llvm-objdump/X86/section-index.s
--- a/llvm/test/tools/llvm-objdump/X86/section-index.s
+++ b/llvm/test/tools/llvm-objdump/X86/section-index.s
@@ -2,16 +2,16 @@
 
 # RUN: llvm-objdump -section-headers %t | FileCheck %s
 # CHECK:     Idx Name
-# CHECK:      3  .foo
-# CHECK-NEXT: 4  .bar
-# CHECK-NEXT: 5  .zed
+# CHECK:      1  .foo
+# CHECK-NEXT: 2  .bar
+# CHECK-NEXT: 3  .zed
 
 ## Check we report the valid section index
 ## when requesting a specific section.
 # RUN: llvm-objdump -section-headers -section=.bar %t \
 # RUN:   | FileCheck %s --check-prefix=BAR
 # BAR:      Idx Name
-# BAR-NEXT:  4  .bar
+# BAR-NEXT:  2  .bar
 # BAR-NOT:  foo
 # BAR-NOT:  zed
 
diff --git a/llvm/test/tools/llvm-objdump/section-filter.test b/llvm/test/tools/llvm-objdump/section-filter.test
--- a/llvm/test/tools/llvm-objdump/section-filter.test
+++ b/llvm/test/tools/llvm-objdump/section-filter.test
@@ -5,9 +5,9 @@
 # RUN: llvm-objdump -h %t.h.elf -j=.text --section=.bss \
 # RUN:   | FileCheck %s --check-prefix=SHDRS --implicit-check-not=.data --implicit-check-not=.text2
 
-# SHDRS: Name  Size     VMA              LMA
-# SHDRS: .text 00000001 0000000000000400 0000000000001000
-# SHDRS: .bss  00000001 0000000000000420 0000000000003000
+# SHDRS: Name  Size     VMA              LMA              File off         Algn  Type
+# SHDRS: .text 00000001 0000000000000400 0000000000001000 00000000000000f0 2**4  TEXT
+# SHDRS: .bss  00000001 0000000000000420 0000000000003000 0000000000000110 2**4  BSS
 
 --- !ELF
 FileHeader:
@@ -114,5 +114,5 @@
 # RUN:   | FileCheck %s --check-prefix=NO-SECTION
 
 # NO-SECTION:      Sections:
-# NO-SECTION-NEXT: Idx Name Size VMA Type
+# NO-SECTION-NEXT: Idx Name Size VMA File off Algn Type
 # NO-SECTION-NOT:  {{.}}
diff --git a/llvm/test/tools/llvm-objdump/wasm.txt b/llvm/test/tools/llvm-objdump/wasm.txt
--- a/llvm/test/tools/llvm-objdump/wasm.txt
+++ b/llvm/test/tools/llvm-objdump/wasm.txt
@@ -1,14 +1,14 @@
 # RUN: llvm-objdump -h %p/Inputs/trivial.obj.wasm | FileCheck %s
 
 # CHECK:      Sections:
-# CHECK-NEXT: Idx Name          Size    VMA              Type
-# CHECK-NEXT:  0 TYPE          00000011 0000000000000000
-# CHECK-NEXT:  1 IMPORT        0000005d 0000000000000000
-# CHECK-NEXT:  2 FUNCTION      00000003 0000000000000000
-# CHECK-NEXT:  3 CODE          00000024 0000000000000000 TEXT
-# CHECK-NEXT:  4 DATA          0000001c 0000000000000000 DATA
-# CHECK-NEXT:  5 linking       0000006d 0000000000000000
-# CHECK-NEXT:  6 reloc.CODE    0000000f 0000000000000000
+# CHECK-NEXT: Idx Name          Size     VMA              File off         Algn Type
+# CHECK-NEXT:   0 TYPE          00000011 0000000000000000 0000000000000008 2**0
+# CHECK-NEXT:   1 IMPORT        0000005d 0000000000000000 000000000000001f 2**0
+# CHECK-NEXT:   2 FUNCTION      00000003 0000000000000000 0000000000000082 2**0
+# CHECK-NEXT:   3 CODE          00000024 0000000000000000 000000000000008b 2**0 TEXT
+# CHECK-NEXT:   4 DATA          0000001c 0000000000000000 00000000000000b5 2**0 DATA
+# CHECK-NEXT:   5 linking       0000006d 0000000000000000 00000000000000d7 2**0
+# CHECK-NEXT:   6 reloc.CODE    0000000f 0000000000000000 0000000000000152 2**0
 
 # RUN: llvm-objdump -p %p/Inputs/trivial.obj.wasm | FileCheck %s -check-prefix CHECK-HEADER
 
diff --git a/llvm/test/tools/llvm-objdump/xcoff-section-headers.test b/llvm/test/tools/llvm-objdump/xcoff-section-headers.test
--- a/llvm/test/tools/llvm-objdump/xcoff-section-headers.test
+++ b/llvm/test/tools/llvm-objdump/xcoff-section-headers.test
@@ -12,12 +12,12 @@
 
 # CHECK: xcoff-section-headers.o:      file format aixcoff-rs6000
 # CHECK: Sections:
-# CHECK: Idx Name          Size     VMA          Type
-# CHECK:   1 .text         00000080 0000000000000000 TEXT
-# CHECK:   2 .data         00000024 0000000000000080 DATA
-# CHECK:   3 .bss          00000004 00000000000000a4 BSS
-# CHECK:   4 .tdata        00000008 0000000000000000 DATA
-# CHECK:   5 .tbss         00000004 0000000000000008 BSS
+# CHECK: Idx Name          Size     VMA              File off         Algn  Type
+# CHECK:   0 .text         00000080 0000000000000000 0000000000000200 2**0  TEXT
+# CHECK:   1 .data         00000024 0000000000000080 0000000000000280 2**0  DATA
+# CHECK:   2 .bss          00000004 00000000000000a4 0000000000000000 2**0  BSS
+# CHECK:   3 .tdata        00000008 0000000000000000 00000000000002a4 2**0  DATA
+# CHECK:   4 .tbss         00000004 0000000000000008 0000000000000000 2**0  BSS
 
 # xcoff-section-headers.o Compiled with IBM XL C/C++ for AIX, V16.1.0
 # test.c:
@@ -32,10 +32,10 @@
 
 # LONG: xcoff-long-sec-names.o:      file format aixcoff-rs6000
 # LONG: Sections:
-# LONG: Idx Name          Size     VMA          Type
-# LONG: 1 .dwarnge      00000004 0000000000000000
-# LONG: 2 .dwpbnms      00000004 0000000000000000
-# LONG: 3 .dwpbtyp      00000004 0000000000000000
+# LONG: Idx Name          Size     VMA              File off         Algn  Type
+# LONG:   0 .dwarnge      00000004 0000000000000000 000000000000008c 2**0
+# LONG:   1 .dwpbnms      00000004 0000000000000000 0000000000000090 2**0
+# LONG:   2 .dwpbtyp      00000004 0000000000000000 0000000000000094 2**0
 
 # xcoff-long-sec-names.o was generated by assembling the following .s file:
 #  .dwsect 0x30000 # .dwpbnms section
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h
--- a/llvm/tools/llvm-objdump/llvm-objdump.h
+++ b/llvm/tools/llvm-objdump/llvm-objdump.h
@@ -79,7 +79,13 @@
 };
 
 // Various helper functions.
-SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O);
+struct ToolFilterOptions {
+  // Start at -1 so that it's 0 the first time we increment & return it.
+  int Idx = -1;
+  bool SkipSpecialELFSections = false;
+};
+SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O,
+                                ToolFilterOptions *Opts = nullptr);
 
 Error getELFRelocationValueString(const object::ELFObjectFileBase *Obj,
                                   const object::RelocationRef &Rel,
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -45,6 +45,7 @@
 #include "llvm/Object/MachOUniversal.h"
 #include "llvm/Object/ObjectFile.h"
 #include "llvm/Object/Wasm.h"
+#include "llvm/Object/XCOFFObjectFile.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Debug.h"
@@ -342,26 +343,98 @@
 
 typedef std::vector<std::tuple<uint64_t, StringRef, uint8_t>> SectionSymbolsTy;
 
-static bool shouldKeep(object::SectionRef S) {
-  if (FilterSections.empty())
-    return true;
-
+static bool shouldKeep(object::SectionRef S,
+                       ToolFilterOptions *Opts = nullptr) {
   Expected<StringRef> SecNameOrErr = S.getName();
   if (!SecNameOrErr) {
     consumeError(SecNameOrErr.takeError());
-    return false;
+    // FIXME: clarify this case. This is for Object/invalid.test which tests a
+    // bad .shstrtab section type.
+    return FilterSections.empty();
   }
   StringRef SecName = *SecNameOrErr;
 
-  // StringSet does not allow empty key so avoid adding sections with
-  // no name (such as the section with index 0) here.
-  if (!SecName.empty())
-    FoundSectionSet.insert(SecName);
+  // Always skip the null section
+  // FIXME: check if this is still necessary after checking for SHT_NULL below.
+  if (SecName.empty())
+    return false;
+
+  if (Opts && Opts->SkipSpecialELFSections) {
+    // TODO: this is ELF specific, but could easily crash if
+    // SkipSpecialELFSections is set when Obj->isELF() is false.
+    // This whole ELF-specific part of the loop should probably be extracted
+    // anyway.
+    ELFSectionRef ELFSection = static_cast<ELFSectionRef>(S);
+    switch (ELFSection.getType()) {
+    case ELF::SHT_NULL:
+    case ELF::SHT_SYMTAB:
+    case ELF::SHT_SYMTAB_SHNDX:
+      return false;
+    case ELF::SHT_REL:
+    case ELF::SHT_RELA:
+      // Discard reloc sections that don't look like reloc sections:
+      // 1. sh_link should point to a symbol table.
+      // 2. sh_info should point to a non-reloc section.
+      // See http://www.sco.com/developers/gabi/latest/ch4.sheader.html#sh_link.
+      // TODO: templatize this for other ELF types
+      if (const ELF64LEObjectFile *ELFObj =
+              dyn_cast<ELF64LEObjectFile>(S.getObject())) {
+        using Elf_Shdr = typename ELF64LE::Shdr;
+        const Elf_Shdr *ElfShdr = ELFObj->getSection(S.getRawDataRefImpl());
+        bool FoundSymtab = false;
+        bool FoundRelTarget = false;
+        // TODO: remove this loop which makes things O(n^2)
+        for (SectionRef OtherSection : S.getObject()->sections()) {
+          const Elf_Shdr *OtherShdr =
+              ELFObj->getSection(OtherSection.getRawDataRefImpl());
+          if (ElfShdr->sh_link == OtherSection.getIndex()) {
+            FoundSymtab = (OtherShdr->sh_type == ELF::SHT_SYMTAB);
+          }
+          if (ElfShdr->sh_info == OtherSection.getIndex()) {
+            FoundRelTarget = (OtherShdr->sh_type != ELF::SHT_REL &&
+                              OtherShdr->sh_type != ELF::SHT_RELA);
+          }
+        }
+        if (FoundSymtab && FoundRelTarget) {
+          return false;
+        } else {
+          ++Opts->Idx;
+          return true;
+        }
+      } else {
+        // TODO: remove fallback
+        return false;
+      }
+      return true;
+    case ELF::SHT_STRTAB:
+      // We want to keep sections like ".dynstr", so only discard sections like
+      // ".strtab" or ".shstrtab".
+      if (SecName.endswith("strtab")) {
+        return false;
+      } else {
+        ++Opts->Idx;
+        return true;
+      }
+    }
+  }
+
+  if (Opts)
+    ++Opts->Idx;
+
+  if (FilterSections.empty())
+    return true;
+
+  // StringSet does not allow empty key so avoid adding sections with no name
+  // (such as the null section with index 0 for ELF files) here. This is
+  // checked above.
+  FoundSectionSet.insert(SecName);
   return is_contained(FilterSections, SecName);
 }
 
-SectionFilter ToolSectionFilter(object::ObjectFile const &O) {
-  return SectionFilter([](object::SectionRef S) { return shouldKeep(S); }, O);
+SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O,
+                                ToolFilterOptions *Opts) {
+  return SectionFilter(
+      [Opts](object::SectionRef S) { return shouldKeep(S, Opts); }, O);
 }
 
 std::string getFileNameForError(const object::Archive::Child &C,
@@ -1650,17 +1723,51 @@
   return ShowLMA;
 }
 
+static uint64_t getFileOffset(const ObjectFile *Obj,
+                              const SectionRef &Section) {
+  if (Obj->isELF())
+    return ELFSectionRef(Section).getOffset();
+  if (Obj->isMachO()) {
+    auto *MachOObj = dyn_cast<MachOObjectFile>(Obj);
+    return MachOObj->is64Bit()
+               ? MachOObj->getSection64(Section.getRawDataRefImpl()).offset
+               : MachOObj->getSection(Section.getRawDataRefImpl()).offset;
+  }
+  if (Obj->isWasm()) {
+    // FIXME: the file offset here agree with llvm-readobj, but not GNU objdump.
+    auto *WasmObj = dyn_cast<WasmObjectFile>(Obj);
+    return WasmObj->getWasmSection(Section).Offset;
+  }
+  if (Obj->isXCOFF()) {
+    auto *XCoffObj = dyn_cast<XCOFFObjectFile>(Obj);
+    // FIXME: This seems very unsafe
+    return XCoffObj->is64Bit() ? XCoffObj->sections64()[Section.getIndex() - 1]
+                                     .FileOffsetToRawData
+                               : XCoffObj->sections32()[Section.getIndex() - 1]
+                                     .FileOffsetToRawData;
+  }
+  if (Obj->isCOFF()) {
+    auto *CoffObj = dyn_cast<COFFObjectFile>(Obj);
+    return CoffObj->getCOFFSection(Section)->PointerToRawData;
+  }
+  // TODO: crash here if unsupported?
+  return 0;
+}
+
 void printSectionHeaders(const ObjectFile *Obj) {
   bool HasLMAColumn = shouldDisplayLMA(Obj);
   if (HasLMAColumn)
     outs() << "Sections:\n"
               "Idx Name          Size     VMA              LMA              "
-              "Type\n";
+              "File off         Algn  Type\n";
   else
     outs() << "Sections:\n"
-              "Idx Name          Size     VMA          Type\n";
+              "Idx Name          Size     VMA              File off         "
+              "Algn  Type\n";
 
-  for (const SectionRef &Section : ToolSectionFilter(*Obj)) {
+  ToolFilterOptions FilterOpts;
+  FilterOpts.SkipSpecialELFSections = Obj->isELF();
+  for (const SectionRef &Section : ToolSectionFilter(*Obj, &FilterOpts)) {
     StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName());
     uint64_t VMA = Section.getAddress();
     if (shouldAdjustVA(Section))
@@ -1670,18 +1777,39 @@
     bool Text = Section.isText();
     bool Data = Section.isData();
     bool BSS = Section.isBSS();
+    // Note: GNU objdump prints CONTENTS, ALLOC, LOAD, READONLY, CODE etc. here
+    // instead.
     std::string Type = (std::string(Text ? "TEXT " : "") +
                         (Data ? "DATA " : "") + (BSS ? "BSS" : ""));
 
+    uint64_t FileOffset = getFileOffset(Obj, Section);
+    // FIXME: what happens if an object has an invalid alignment (i.e. 3, 5, or
+    // any other value not 2^n)? Test that case.
+
+    // Note: alignment = 0 is a "valid" alignment but not considered so for
+    // llvm::Align. So use valueOrOne() to be nice in that case.
+    llvm::Align SectionAlign =
+        llvm::MaybeAlign(Section.getAlignment()).valueOrOne();
+
+    if (Obj->isXCOFF()) {
+      // FIXME: XCOFF alignment value looks wrong. See:
+      // llvm/test/tools/llvm-objdump/Inputs/xcoff-section-headers.o.
+      // Ignore our current implementation and print "2**0" instead of something
+      // bogus to get tests stable; but revise before committing.
+      SectionAlign = llvm::Align();
+    }
+
     if (HasLMAColumn)
       outs() << format("%3d %-13s %08" PRIx64 " %016" PRIx64 " %016" PRIx64
-                       " %s\n",
-                       (unsigned)Section.getIndex(), Name.str().c_str(), Size,
-                       VMA, getELFSectionLMA(Section), Type.c_str());
+                       " %016" PRIx64 " 2**%d  %s\n",
+                       FilterOpts.Idx, Name.str().c_str(), Size, VMA,
+                       getELFSectionLMA(Section), FileOffset,
+                       Log2(SectionAlign), Type.c_str());
     else
-      outs() << format("%3d %-13s %08" PRIx64 " %016" PRIx64 " %s\n",
-                       (unsigned)Section.getIndex(), Name.str().c_str(), Size,
-                       VMA, Type.c_str());
+      outs() << format("%3d %-13s %08" PRIx64 " %016" PRIx64 " %016" PRIx64
+                       " 2**%d  %s\n",
+                       FilterOpts.Idx, Name.str().c_str(), Size, VMA,
+                       FileOffset, Log2(SectionAlign), Type.c_str());
   }
   outs() << "\n";
 }