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> SectionSymbolsTy; -static bool shouldKeep(object::SectionRef S) { - if (FilterSections.empty()) - return true; - +static bool shouldKeep(object::SectionRef S, + ToolFilterOptions *Opts = nullptr) { Expected 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(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(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(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(Obj); + return WasmObj->getWasmSection(Section).Offset; + } + if (Obj->isXCOFF()) { + auto *XCoffObj = dyn_cast(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(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"; }