diff options
author | Shankar Easwaran <shankare@codeaurora.org> | 2013-09-12 15:43:09 +0000 |
---|---|---|
committer | Shankar Easwaran <shankare@codeaurora.org> | 2013-09-12 15:43:09 +0000 |
commit | f1b341c80e2d5e09d346043ffbfbc1874da6f875 (patch) | |
tree | 9237f2a14235d3578127aa6712eb23ecac172c22 /lld | |
parent | dfa4c7548bf577ec1a24597097bb2e80895c831b (diff) | |
download | bcm5719-llvm-f1b341c80e2d5e09d346043ffbfbc1874da6f875.tar.gz bcm5719-llvm-f1b341c80e2d5e09d346043ffbfbc1874da6f875.zip |
[lld][LayoutPass] Order the atoms that are in the same chain
We need to order atoms that exist in the same chain. This is to make sure that
the command line order is preserved when we emit the atoms to the output file.
Credits: BigCheese for finding the bug.
Adds a test which otherwise would fail.
llvm-svn: 190608
Diffstat (limited to 'lld')
27 files changed, 399 insertions, 669 deletions
diff --git a/lld/lib/Passes/LayoutPass.cpp b/lld/lib/Passes/LayoutPass.cpp index 13fcedea0f6..8f15cd9cafe 100644 --- a/lld/lib/Passes/LayoutPass.cpp +++ b/lld/lib/Passes/LayoutPass.cpp @@ -52,22 +52,15 @@ bool LayoutPass::CompareAtoms::operator()(const DefinedAtom *left, AtomToOrdinalT::const_iterator lPos = _layout._ordinalOverrideMap.find(left); AtomToOrdinalT::const_iterator rPos = _layout._ordinalOverrideMap.find(right); AtomToOrdinalT::const_iterator end = _layout._ordinalOverrideMap.end(); - if (lPos != end) { - if (rPos != end) { - // both left and right are overridden, so compare overridden ordinals - if (lPos->second != rPos->second) - return lPos->second < rPos->second; - } else { - // left is overridden and right is not, so left < right - return true; - } - } else { - if (rPos != end) { - // right is overridden and left is not, so right < left - return false; - } else { - // neither are overridden, - // fall into default sorting below + + // Sort atoms by their ordinal overrides only if they fall in the same + // chain. + const DefinedAtom *leftAtom = _layout._followOnRoots.find(left)->second; + const DefinedAtom *rightAtom = _layout._followOnRoots.find(right)->second; + + if (leftAtom == rightAtom) { + if ((lPos != end) && (rPos != end)) { + return lPos->second < rPos->second; } } @@ -91,8 +84,6 @@ bool LayoutPass::CompareAtoms::operator()(const DefinedAtom *left, if (leftType != rightType) return leftType < rightType; - // TO DO: Sort atoms in customs sections together. - // Sort by .o order. const File *leftFile = &left->file(); const File *rightFile = &right->file(); @@ -393,8 +384,6 @@ void LayoutPass::buildOrdinalOverrideMap(MutableFile::DefinedAtomRange &range) { _ordinalOverrideMap[nextAtom] = index++; } } - } else { - _ordinalOverrideMap[atom] = index++; } } } diff --git a/lld/test/elf/Hexagon/dynlib-gotoff.test b/lld/test/elf/Hexagon/dynlib-gotoff.test index 496c28f9c48..c5f3e91f5ab 100644 --- a/lld/test/elf/Hexagon/dynlib-gotoff.test +++ b/lld/test/elf/Hexagon/dynlib-gotoff.test @@ -3,85 +3,72 @@ RUN: lld -flavor gnu -target hexagon %p/Inputs/dynobj.o \ RUN: -o %t -emit-yaml -shared --noinhibit-exec RUN: FileCheck -check-prefix=CHECKGOTPLT %s < %t -CHECKGOTPLT: - ref-name: {{[0-9A-Z]+}} + - name: __got0 +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, +CHECKGOTPLT: 00, 00, 00, 00 ] +CHECKGOTPLT: alignment: 2^3 +CHECKGOTPLT: section-name: .got.plt +CHECKGOTPLT: permissions: rw- + - name: __got_c +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00 ] CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .text +CHECKGOTPLT: section-name: .got +CHECKGOTPLT: permissions: rw- CHECKGOTPLT: references: -CHECKGOTPLT: - kind: layout-after +CHECKGOTPLT: - kind: R_HEX_GLOB_DAT CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: fn2 -CHECKGOTPLT: - name: fn2 -CHECKGOTPLT: scope: global -CHECKGOTPLT: content: [ 00, C0, 9D, A0, 00, C0, 00, 78, 1E, C0, 1E, 96 ] +CHECKGOTPLT: target: c + - name: __got_shankar +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00 ] CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .text -CHECKGOTPLT: - name: fn1 -CHECKGOTPLT: scope: global -CHECKGOTPLT: content: [ 00, C0, 9D, A0, 00, C0, 00, 78, 1E, C0, 1E, 96 ] +CHECKGOTPLT: section-name: .got +CHECKGOTPLT: permissions: rw- +CHECKGOTPLT: references: +CHECKGOTPLT: - kind: R_HEX_GLOB_DAT +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: shankar + - name: __got_fn +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00 ] CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .text -CHECKGOTPLT: - name: fn -CHECKGOTPLT: scope: global -CHECKGOTPLT: content: [ 01, C0, 9D, A0, 01, D8, 9D, A1, 00, 40, 00, 00, -CHECKGOTPLT: 18, C0, 49, 6A, 00, 40, 00, 00, 00, C0, 49, 6A, -CHECKGOTPLT: 0A, C0, 40, 3C, 00, 40, 00, 00, 00, C0, 49, 6A, -CHECKGOTPLT: 14, C0, 40, 3C, 00, 40, 00, 00, 00, C0, 98, 91, -CHECKGOTPLT: 0A, C0, 40, 3C, 00, 40, 00, 00, 00, C0, 98, 91, -CHECKGOTPLT: 14, C0, 40, 3C, 00, C0, 00, 78, 38, C0, 9D, 91, -CHECKGOTPLT: 1E, C0, 1E, 96 ] +CHECKGOTPLT: section-name: .got.plt +CHECKGOTPLT: permissions: rw- +CHECKGOTPLT: references: +CHECKGOTPLT: - kind: R_HEX_JMP_SLOT +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: fn +CHECKGOTPLT: - kind: R_HEX_32 +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: .PLT0 + - name: __got_fn1 +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00 ] CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .text +CHECKGOTPLT: section-name: .got.plt +CHECKGOTPLT: permissions: rw- CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X -CHECKGOTPLT: offset: 8 -CHECKGOTPLT: target: _GLOBAL_OFFSET_TABLE_ -CHECKGOTPLT: - kind: R_HEX_6_PCREL_X -CHECKGOTPLT: offset: 12 -CHECKGOTPLT: target: _GLOBAL_OFFSET_TABLE_ -CHECKGOTPLT: addend: 4 -CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X -CHECKGOTPLT: offset: 16 -CHECKGOTPLT: target: [[SBSS:[-a-zA-Z0-9_]+]] -CHECKGOTPLT: - kind: R_HEX_6_PCREL_X -CHECKGOTPLT: offset: 20 -CHECKGOTPLT: target: [[SBSS]] -CHECKGOTPLT: addend: 4 -CHECKGOTPLT: - kind: R_HEX_B32_PCREL_X -CHECKGOTPLT: offset: 28 -CHECKGOTPLT: target: [[SBSS]] -CHECKGOTPLT: addend: 4 -CHECKGOTPLT: - kind: R_HEX_6_PCREL_X -CHECKGOTPLT: offset: 32 -CHECKGOTPLT: target: [[SBSS]] -CHECKGOTPLT: addend: 8 -CHECKGOTPLT: - kind: R_HEX_GOT_32_6_X -CHECKGOTPLT: offset: 40 - target: __got_c -CHECKGOTPLT: - kind: R_HEX_GOT_11_X -CHECKGOTPLT: offset: 44 - target: __got_c -CHECKGOTPLT: - kind: R_HEX_GOT_32_6_X -CHECKGOTPLT: offset: 52 - target: __got_shankar -CHECKGOTPLT: - kind: R_HEX_GOT_11_X -CHECKGOTPLT: offset: 56 - target: __got_shankar -CHECKGOTPLT: - name: fn3 -CHECKGOTPLT: scope: global -CHECKGOTPLT: content: [ 00, C0, 9D, A0, 00, C0, 00, 5A, 00, C0, 00, 5A, -CHECKGOTPLT: 00, C0, 00, 5A, 00, C0, 00, 78, 1E, C0, 1E, 96 ] +CHECKGOTPLT: - kind: R_HEX_JMP_SLOT +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: fn1 +CHECKGOTPLT: - kind: R_HEX_32 +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: .PLT0 + - name: __got_fn2 +CHECKGOTPLT: type: got +CHECKGOTPLT: content: [ 00, 00, 00, 00 ] CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .text +CHECKGOTPLT: section-name: .got.plt +CHECKGOTPLT: permissions: rw- CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_B22_PCREL -CHECKGOTPLT: offset: 4 - target: __plt_fn -CHECKGOTPLT: - kind: R_HEX_B22_PCREL -CHECKGOTPLT: offset: 8 - target: __plt_fn1 -CHECKGOTPLT: - kind: R_HEX_B22_PCREL -CHECKGOTPLT: offset: 12 - target: __plt_fn2 +CHECKGOTPLT: - kind: R_HEX_JMP_SLOT +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: fn2 +CHECKGOTPLT: - kind: R_HEX_32 +CHECKGOTPLT: offset: 0 +CHECKGOTPLT: target: .PLT0 - name: .PLT0 CHECKGOTPLT: type: stub CHECKGOTPLT: content: [ 00, 40, 00, 00, 1C, C0, 49, 6A, 0E, 42, 9C, E2, @@ -96,6 +83,7 @@ CHECKGOTPLT: offset: 0 CHECKGOTPLT: - kind: R_HEX_6_PCREL_X CHECKGOTPLT: offset: 4 target: __got0 +CHECKGOTPLT: addend: 4 - name: __plt_fn CHECKGOTPLT: type: stub CHECKGOTPLT: content: [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C, C0, 8E, 91, @@ -138,68 +126,3 @@ CHECKGOTPLT: - kind: R_HEX_6_PCREL_X CHECKGOTPLT: offset: 4 target: __got_fn2 CHECKGOTPLT: addend: 4 - - name: __got0 -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, -CHECKGOTPLT: 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^3 -CHECKGOTPLT: section-name: .got.plt - - name: __got_c -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .got -CHECKGOTPLT: permissions: rw- -CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_GLOB_DAT -CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: c - - name: __got_shankar -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .got -CHECKGOTPLT: permissions: rw- -CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_GLOB_DAT -CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: shankar - - name: __got_fn -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .got.plt -CHECKGOTPLT: permissions: rw- -CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_JMP_SLOT -CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: fn -CHECKGOTPLT: - kind: R_HEX_32 -CHECKGOTPLT: offset: 0 - target: .PLT0 - - name: __got_fn1 -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .got.plt -CHECKGOTPLT: permissions: rw- -CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_JMP_SLOT -CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: fn1 -CHECKGOTPLT: - kind: R_HEX_32 -CHECKGOTPLT: offset: 0 - target: .PLT0 - - name: __got_fn2 -CHECKGOTPLT: type: got -CHECKGOTPLT: content: [ 00, 00, 00, 00 ] -CHECKGOTPLT: alignment: 2^2 -CHECKGOTPLT: section-name: .got.plt -CHECKGOTPLT: permissions: rw- -CHECKGOTPLT: references: -CHECKGOTPLT: - kind: R_HEX_JMP_SLOT -CHECKGOTPLT: offset: 0 -CHECKGOTPLT: target: fn2 -CHECKGOTPLT: - kind: R_HEX_32 -CHECKGOTPLT: offset: 0 - target: .PLT0 diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/1.c b/lld/test/elf/X86_64/Inputs/layoutpass/1.c new file mode 100644 index 00000000000..fec98450321 --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/1.c @@ -0,0 +1,8 @@ +int main() { + a(); + return 0; +} + +int b() { + return 0; +} diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/1.o b/lld/test/elf/X86_64/Inputs/layoutpass/1.o Binary files differnew file mode 100644 index 00000000000..848a5b3321a --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/1.o diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/2.c b/lld/test/elf/X86_64/Inputs/layoutpass/2.c new file mode 100644 index 00000000000..fb9dbcc28aa --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/2.c @@ -0,0 +1,7 @@ +int a() { + return 0; +} + +int c() { + return 0; +} diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/2.o b/lld/test/elf/X86_64/Inputs/layoutpass/2.o Binary files differnew file mode 100644 index 00000000000..4c5ef867958 --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/2.o diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/3.c b/lld/test/elf/X86_64/Inputs/layoutpass/3.c new file mode 100644 index 00000000000..054029fe5cf --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/3.c @@ -0,0 +1,3 @@ +int d() { + return 0; +} diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/3.o b/lld/test/elf/X86_64/Inputs/layoutpass/3.o Binary files differnew file mode 100644 index 00000000000..76ef76e9790 --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/3.o diff --git a/lld/test/elf/X86_64/Inputs/layoutpass/lib2.a b/lld/test/elf/X86_64/Inputs/layoutpass/lib2.a Binary files differnew file mode 100644 index 00000000000..5f076c86981 --- /dev/null +++ b/lld/test/elf/X86_64/Inputs/layoutpass/lib2.a diff --git a/lld/test/elf/X86_64/dontignorezerosize-sections.test b/lld/test/elf/X86_64/dontignorezerosize-sections.test index 21a467dcd82..9d42bc12b92 100644 --- a/lld/test/elf/X86_64/dontignorezerosize-sections.test +++ b/lld/test/elf/X86_64/dontignorezerosize-sections.test @@ -3,9 +3,9 @@ RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \ RUN: --noinhibit-exec -emit-yaml -o %t RUN: FileCheck %s < %t -CHECK: section-name: .text CHECK: section-name: .data CHECK: references: CHECK: - kind: R_X86_64_16 CHECK: offset: 0 CHECK: target: L000 +CHECK: section-name: .text diff --git a/lld/test/elf/X86_64/layoutpass-order.test b/lld/test/elf/X86_64/layoutpass-order.test new file mode 100644 index 00000000000..8f2c5c7c047 --- /dev/null +++ b/lld/test/elf/X86_64/layoutpass-order.test @@ -0,0 +1,14 @@ +# This test checks that we follow the command line order of layouting +# symbols in the output file + +RUN: lld -flavor gnu -target x86_64 %p/Inputs/layoutpass/1.o \ +RUN: %p/Inputs/layoutpass/lib2.a %p/Inputs/layoutpass/3.o -o %t \ +RUN: --noinhibit-exec -static + +RUN: llvm-nm -n %t | FileCheck -check-prefix=SYMBOLSORDER %s + +SYMBOLSORDER: 004000b0 T main +SYMBOLSORDER: 004000c5 T b +SYMBOLSORDER: 004000d0 T a +SYMBOLSORDER: 004000db T c +SYMBOLSORDER: 004000e8 T d diff --git a/lld/test/elf/X86_64/multi-weak-syms-order.test b/lld/test/elf/X86_64/multi-weak-syms-order.test index ac15bf0fedf..e432db1184c 100644 --- a/lld/test/elf/X86_64/multi-weak-syms-order.test +++ b/lld/test/elf/X86_64/multi-weak-syms-order.test @@ -10,8 +10,4 @@ WEAKORDER: {{[0-9a-f]+}} T g WEAKORDER: {{[0-9a-f]+}} T main WEAKATOMSORDER: - name: f -WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}} WEAKATOMSORDER: - name: g -WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}} - - diff --git a/lld/test/elf/X86_64/nmagic.test b/lld/test/elf/X86_64/nmagic.test index 8ca081aefd6..3d52fc69ecb 100644 --- a/lld/test/elf/X86_64/nmagic.test +++ b/lld/test/elf/X86_64/nmagic.test @@ -6,207 +6,71 @@ RUN: --noinhibit-exec -o %t --nmagic -static RUN: llvm-readobj -sections %t | FileCheck -check-prefix=NMAGICSECTIONS %s RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=NMAGICPROGRAMHEADERS %s -NMAGICSECTIONS: Sections [ NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 0 NMAGICSECTIONS: Name: (0) NMAGICSECTIONS: Type: SHT_NULL (0x0) -NMAGICSECTIONS: Flags [ (0x0) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x0 -NMAGICSECTIONS: Offset: 0x0 -NMAGICSECTIONS: Size: 0 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 0 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 1 -NMAGICSECTIONS: Name: .text (1) +NMAGICSECTIONS: Name: .note.GNU-stack (1) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x6) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_EXECINSTR (0x4) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x4000B0 -NMAGICSECTIONS: Offset: 0xB0 -NMAGICSECTIONS: Size: 11 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 4 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 2 -NMAGICSECTIONS: Name: .note.GNU-stack (7) +NMAGICSECTIONS: Name: .text (17) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x2) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x4000BB -NMAGICSECTIONS: Offset: 0xBB -NMAGICSECTIONS: Size: 0 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 1 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 3 NMAGICSECTIONS: Name: .comment (23) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x2) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x4000BB -NMAGICSECTIONS: Offset: 0xBB -NMAGICSECTIONS: Size: 43 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 1 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 4 NMAGICSECTIONS: Name: .eh_frame (32) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x2) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x4000E8 -NMAGICSECTIONS: Offset: 0xE8 -NMAGICSECTIONS: Size: 56 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 8 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 5 NMAGICSECTIONS: Name: .tdata (42) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x403) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_TLS (0x400) -NMAGICSECTIONS: SHF_WRITE (0x1) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x401000 -NMAGICSECTIONS: Offset: 0x1000 -NMAGICSECTIONS: Size: 4 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 4 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 6 NMAGICSECTIONS: Name: .tbss (49) NMAGICSECTIONS: Type: SHT_NOBITS (0x8) -NMAGICSECTIONS: Flags [ (0x403) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_TLS (0x400) -NMAGICSECTIONS: SHF_WRITE (0x1) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x401004 -NMAGICSECTIONS: Offset: 0x1004 -NMAGICSECTIONS: Size: 8 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 4 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 7 NMAGICSECTIONS: Name: .got.plt (55) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x3) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_WRITE (0x1) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x401008 -NMAGICSECTIONS: Offset: 0x1008 -NMAGICSECTIONS: Size: 0 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 8 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 8 NMAGICSECTIONS: Name: .data (64) NMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -NMAGICSECTIONS: Flags [ (0x3) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_WRITE (0x1) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x401008 -NMAGICSECTIONS: Offset: 0x1008 -NMAGICSECTIONS: Size: 4 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 4 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 9 NMAGICSECTIONS: Name: .bss (70) NMAGICSECTIONS: Type: SHT_NOBITS (0x8) -NMAGICSECTIONS: Flags [ (0x3) -NMAGICSECTIONS: SHF_ALLOC (0x2) -NMAGICSECTIONS: SHF_WRITE (0x1) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x40100C -NMAGICSECTIONS: Offset: 0x100C -NMAGICSECTIONS: Size: 0 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 4 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 10 NMAGICSECTIONS: Name: .shstrtab (75) NMAGICSECTIONS: Type: SHT_STRTAB (0x3) -NMAGICSECTIONS: Flags [ (0x0) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x0 -NMAGICSECTIONS: Offset: 0x100C -NMAGICSECTIONS: Size: 101 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 1 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 11 NMAGICSECTIONS: Name: .symtab (85) NMAGICSECTIONS: Type: SHT_SYMTAB (0x2) -NMAGICSECTIONS: Flags [ (0x0) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x0 -NMAGICSECTIONS: Offset: 0x1078 -NMAGICSECTIONS: Size: 528 -NMAGICSECTIONS: Link: 12 -NMAGICSECTIONS: Info: 2 -NMAGICSECTIONS: AddressAlignment: 8 -NMAGICSECTIONS: EntrySize: 24 NMAGICSECTIONS: } NMAGICSECTIONS: Section { NMAGICSECTIONS: Index: 12 NMAGICSECTIONS: Name: .strtab (93) NMAGICSECTIONS: Type: SHT_STRTAB (0x3) -NMAGICSECTIONS: Flags [ (0x0) -NMAGICSECTIONS: ] -NMAGICSECTIONS: Address: 0x0 -NMAGICSECTIONS: Offset: 0x1288 -NMAGICSECTIONS: Size: 246 -NMAGICSECTIONS: Link: 0 -NMAGICSECTIONS: Info: 0 -NMAGICSECTIONS: AddressAlignment: 1 -NMAGICSECTIONS: EntrySize: 0 NMAGICSECTIONS: } -NMAGICSECTIONS: ] NMAGICPROGRAMHEADERS: ProgramHeaders [ NMAGICPROGRAMHEADERS: ProgramHeader { diff --git a/lld/test/elf/X86_64/omagic.test b/lld/test/elf/X86_64/omagic.test index e5f220c75aa..d07532f2bb3 100644 --- a/lld/test/elf/X86_64/omagic.test +++ b/lld/test/elf/X86_64/omagic.test @@ -6,207 +6,205 @@ RUN: --noinhibit-exec -o %t --omagic -static RUN: llvm-readobj -sections %t | FileCheck -check-prefix=OMAGICSECTIONS %s RUN: llvm-readobj -program-headers %t | FileCheck -check-prefix=OMAGICPROGRAMHEADERS %s -OMAGICSECTIONS: Sections [ -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 0 -OMAGICSECTIONS: Name: (0) -OMAGICSECTIONS: Type: SHT_NULL (0x0) -OMAGICSECTIONS: Flags [ (0x0) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x0 -OMAGICSECTIONS: Offset: 0x0 -OMAGICSECTIONS: Size: 0 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 0 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 1 -OMAGICSECTIONS: Name: .text (1) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x6) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_EXECINSTR (0x4) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x4000B0 -OMAGICSECTIONS: Offset: 0xB0 -OMAGICSECTIONS: Size: 11 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 4 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 2 -OMAGICSECTIONS: Name: .note.GNU-stack (7) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x2) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x4000BB -OMAGICSECTIONS: Offset: 0xBB -OMAGICSECTIONS: Size: 0 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 1 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 3 -OMAGICSECTIONS: Name: .comment (23) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x2) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x4000BB -OMAGICSECTIONS: Offset: 0xBB -OMAGICSECTIONS: Size: 43 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 1 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 4 -OMAGICSECTIONS: Name: .eh_frame (32) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x2) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x4000E8 -OMAGICSECTIONS: Offset: 0xE8 -OMAGICSECTIONS: Size: 56 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 8 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 5 -OMAGICSECTIONS: Name: .tdata (42) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x403) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_TLS (0x400) -OMAGICSECTIONS: SHF_WRITE (0x1) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x400120 -OMAGICSECTIONS: Offset: 0x120 -OMAGICSECTIONS: Size: 4 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 4 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 6 -OMAGICSECTIONS: Name: .tbss (49) -OMAGICSECTIONS: Type: SHT_NOBITS (0x8) -OMAGICSECTIONS: Flags [ (0x403) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_TLS (0x400) -OMAGICSECTIONS: SHF_WRITE (0x1) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x400124 -OMAGICSECTIONS: Offset: 0x124 -OMAGICSECTIONS: Size: 8 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 4 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 7 -OMAGICSECTIONS: Name: .got.plt (55) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x3) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_WRITE (0x1) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x400128 -OMAGICSECTIONS: Offset: 0x128 -OMAGICSECTIONS: Size: 0 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 8 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 8 -OMAGICSECTIONS: Name: .data (64) -OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) -OMAGICSECTIONS: Flags [ (0x3) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_WRITE (0x1) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x400128 -OMAGICSECTIONS: Offset: 0x128 -OMAGICSECTIONS: Size: 4 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 4 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 9 -OMAGICSECTIONS: Name: .bss (70) -OMAGICSECTIONS: Type: SHT_NOBITS (0x8) -OMAGICSECTIONS: Flags [ (0x3) -OMAGICSECTIONS: SHF_ALLOC (0x2) -OMAGICSECTIONS: SHF_WRITE (0x1) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x40012C -OMAGICSECTIONS: Offset: 0x12C -OMAGICSECTIONS: Size: 0 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 4 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 10 -OMAGICSECTIONS: Name: .shstrtab (75) -OMAGICSECTIONS: Type: SHT_STRTAB (0x3) -OMAGICSECTIONS: Flags [ (0x0) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x0 -OMAGICSECTIONS: Offset: 0x12C -OMAGICSECTIONS: Size: 101 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 1 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 11 -OMAGICSECTIONS: Name: .symtab (85) -OMAGICSECTIONS: Type: SHT_SYMTAB (0x2) -OMAGICSECTIONS: Flags [ (0x0) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x0 -OMAGICSECTIONS: Offset: 0x198 -OMAGICSECTIONS: Size: 528 -OMAGICSECTIONS: Link: 12 -OMAGICSECTIONS: Info: 2 -OMAGICSECTIONS: AddressAlignment: 8 -OMAGICSECTIONS: EntrySize: 24 -OMAGICSECTIONS: } -OMAGICSECTIONS: Section { -OMAGICSECTIONS: Index: 12 -OMAGICSECTIONS: Name: .strtab (93) -OMAGICSECTIONS: Type: SHT_STRTAB (0x3) -OMAGICSECTIONS: Flags [ (0x0) -OMAGICSECTIONS: ] -OMAGICSECTIONS: Address: 0x0 -OMAGICSECTIONS: Offset: 0x3A8 -OMAGICSECTIONS: Size: 246 -OMAGICSECTIONS: Link: 0 -OMAGICSECTIONS: Info: 0 -OMAGICSECTIONS: AddressAlignment: 1 -OMAGICSECTIONS: EntrySize: 0 -OMAGICSECTIONS: } -OMAGICSECTIONS: ] +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 0 +OMAGICSECTIONS: Name: (0) +OMAGICSECTIONS: Type: SHT_NULL (0x0) +OMAGICSECTIONS: Flags [ (0x0) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x0 +OMAGICSECTIONS: Offset: 0x0 +OMAGICSECTIONS: Size: 0 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 0 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 1 +OMAGICSECTIONS: Name: .note.GNU-stack (1) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x2) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x4000B0 +OMAGICSECTIONS: Offset: 0xB0 +OMAGICSECTIONS: Size: 0 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 1 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 2 +OMAGICSECTIONS: Name: .text (17) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x6) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_EXECINSTR (0x4) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x4000B0 +OMAGICSECTIONS: Offset: 0xB0 +OMAGICSECTIONS: Size: 11 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 4 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 3 +OMAGICSECTIONS: Name: .comment (23) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x2) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x4000BB +OMAGICSECTIONS: Offset: 0xBB +OMAGICSECTIONS: Size: 43 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 1 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 4 +OMAGICSECTIONS: Name: .eh_frame (32) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x2) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x4000E8 +OMAGICSECTIONS: Offset: 0xE8 +OMAGICSECTIONS: Size: 56 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 8 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 5 +OMAGICSECTIONS: Name: .tdata (42) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x403) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_TLS (0x400) +OMAGICSECTIONS: SHF_WRITE (0x1) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x400120 +OMAGICSECTIONS: Offset: 0x120 +OMAGICSECTIONS: Size: 4 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 4 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 6 +OMAGICSECTIONS: Name: .tbss (49) +OMAGICSECTIONS: Type: SHT_NOBITS (0x8) +OMAGICSECTIONS: Flags [ (0x403) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_TLS (0x400) +OMAGICSECTIONS: SHF_WRITE (0x1) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x400124 +OMAGICSECTIONS: Offset: 0x124 +OMAGICSECTIONS: Size: 8 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 4 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 7 +OMAGICSECTIONS: Name: .got.plt (55) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x3) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_WRITE (0x1) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x400128 +OMAGICSECTIONS: Offset: 0x128 +OMAGICSECTIONS: Size: 0 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 8 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 8 +OMAGICSECTIONS: Name: .data (64) +OMAGICSECTIONS: Type: SHT_PROGBITS (0x1) +OMAGICSECTIONS: Flags [ (0x3) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_WRITE (0x1) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x400128 +OMAGICSECTIONS: Offset: 0x128 +OMAGICSECTIONS: Size: 4 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 4 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 9 +OMAGICSECTIONS: Name: .bss (70) +OMAGICSECTIONS: Type: SHT_NOBITS (0x8) +OMAGICSECTIONS: Flags [ (0x3) +OMAGICSECTIONS: SHF_ALLOC (0x2) +OMAGICSECTIONS: SHF_WRITE (0x1) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x40012C +OMAGICSECTIONS: Offset: 0x12C +OMAGICSECTIONS: Size: 0 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 4 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 10 +OMAGICSECTIONS: Name: .shstrtab (75) +OMAGICSECTIONS: Type: SHT_STRTAB (0x3) +OMAGICSECTIONS: Flags [ (0x0) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x0 +OMAGICSECTIONS: Offset: 0x12C +OMAGICSECTIONS: Size: 101 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 1 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 11 +OMAGICSECTIONS: Name: .symtab (85) +OMAGICSECTIONS: Type: SHT_SYMTAB (0x2) +OMAGICSECTIONS: Flags [ (0x0) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x0 +OMAGICSECTIONS: Offset: 0x198 +OMAGICSECTIONS: Size: 528 +OMAGICSECTIONS: Link: 12 +OMAGICSECTIONS: Info: 2 +OMAGICSECTIONS: AddressAlignment: 8 +OMAGICSECTIONS: EntrySize: 24 +OMAGICSECTIONS: } +OMAGICSECTIONS: Section { +OMAGICSECTIONS: Index: 12 +OMAGICSECTIONS: Name: .strtab (93) +OMAGICSECTIONS: Type: SHT_STRTAB (0x3) +OMAGICSECTIONS: Flags [ (0x0) +OMAGICSECTIONS: ] +OMAGICSECTIONS: Address: 0x0 +OMAGICSECTIONS: Offset: 0x3A8 +OMAGICSECTIONS: Size: 246 +OMAGICSECTIONS: Link: 0 +OMAGICSECTIONS: Info: 0 +OMAGICSECTIONS: AddressAlignment: 1 +OMAGICSECTIONS: EntrySize: 0 +OMAGICSECTIONS: } OMAGICPROGRAMHEADERS: ProgramHeaders [ OMAGICPROGRAMHEADERS: ProgramHeader { diff --git a/lld/test/elf/X86_64/orderatoms-by-override.test b/lld/test/elf/X86_64/orderatoms-by-override.test index ab333b73c9a..cc7e44d370f 100644 --- a/lld/test/elf/X86_64/orderatoms-by-override.test +++ b/lld/test/elf/X86_64/orderatoms-by-override.test @@ -4,5 +4,5 @@ RUN: lld -flavor gnu -target x86_64 %p/Inputs/rwint.o \ RUN: %p/Inputs/constint.o -emit-yaml -o %t --noinhibit-exec RUN: FileCheck %s -check-prefix=CHECKORDER < %t -CHECKORDER: - name: a CHECKORDER: - name: b +CHECKORDER: - name: a diff --git a/lld/test/elf/X86_64/undef.test b/lld/test/elf/X86_64/undef.test index b75300d89b0..4fa54d987f5 100644 --- a/lld/test/elf/X86_64/undef.test +++ b/lld/test/elf/X86_64/undef.test @@ -7,13 +7,12 @@ RUN: lld -flavor gnu -target x86_64 %p/Inputs/libfn.a -o %t --noinhibit-exec RUN: llvm-readobj -symbols %t | FileCheck %s SYMFROMARCHIVE: Symbol { -SYMFROMARCHIVE: Name: fn (16) -SYMFROMARCHIVE: Value: 0x4001A4 +SYMFROMARCHIVE: Name: fn (1) SYMFROMARCHIVE: Size: 11 SYMFROMARCHIVE: Binding: Global (0x1) SYMFROMARCHIVE: Type: Function (0x2) SYMFROMARCHIVE: Other: 0 -SYMFROMARCHIVE: Section: .text (0x5) +SYMFROMARCHIVE: Section: .text (0x6) SYMFROMARCHIVE: } CHECK-NOT: Name: fn diff --git a/lld/test/elf/check.test b/lld/test/elf/check.test index 3230c34fdac..01dc69d2037 100644 --- a/lld/test/elf/check.test +++ b/lld/test/elf/check.test @@ -4,110 +4,40 @@ RUN: lld -flavor gnu -target i386 -e global_func --noinhibit-exec -emit-yaml \ RUN: %p/Inputs/object-test.elf-i386 -o %t RUN: FileCheck %s -check-prefix ELF-i386 < %t RUN: lld -flavor gnu -target hexagon -e global_func --noinhibit-exec -emit-yaml \ -RUN: %p/Inputs/object-test.elf-hexagon | FileCheck %s -check-prefix ELF-hexagon - -ELF-i386:defined-atoms: -ELF-i386: - name: common_symbol -ELF-i386: scope: global -ELF-i386: type: zero-fill -ELF-i386: merge: as-tentative - -ELF-i386: - name: tentative -ELF-i386: scope: global -ELF-i386: type: zero-fill -ELF-i386: merge: as-tentative - -ELF-i386: - name: global_func -ELF-i386: scope: global -ELF-i386: content: [ 55, 89, E5, 83, EC, 18, C7, 04, 24, 00, 00, 00, -ELF-i386: 00, E8, FC, FF, FF, FF, C9, C3 ] - -ELF-i386: - name: static_func -ELF-i386: content: [ 55, 89, E5, 83, EC, 18, C7, 04, 24, 07, 00, 00, -ELF-i386: 00, E8, FC, FF, FF, FF, C9, C3 ] - -ELF-i386: - name: weak_func -ELF-i386: scope: global -ELF-i386: merge: as-weak -ELF-i386: content: [ 55, 89, E5, 83, EC, 18, C7, 04, 24, 0E, 00, 00, -ELF-i386: 00, E8, FC, FF, FF, FF, C9, C3 ] - -ELF-i386: - name: hidden_func -ELF-i386: scope: hidden -ELF-i386: content: [ 55, 89, E5, 83, EC, 18, C7, 04, 24, 13, 00, 00, -ELF-i386: 00, E8, FC, FF, FF, FF, C9, C3 ] - -ELF-i386: - name: no_dead_strip -ELF-i386: scope: global -ELF-i386: content: [ 55, 89, E5, 5D, C3 ] - -ELF-i386: - name: no_special_section_func -ELF-i386: scope: global -ELF-i386: content: [ 55, 89, E5, 5D, C3 ] - -ELF-i386: - name: special_section_func -ELF-i386: scope: global -ELF-i386: content: [ 55, 89, E5, 5D, C3 ] -ELF-i386: section-choice: custom-required -ELF-i386: section-name: special_section - - -ELF-i386:undefined-atoms: -ELF-i386: - name: puts - -ELF-i386:absolute-atoms: -ELF-i386: - name: sample.c -ELF-i386: value: 0x0 - -ELF-hexagon:defined-atoms: - -ELF-hexagon: - name: common_symbol -ELF-hexagon: scope: global -ELF-hexagon: type: zero-fill -ELF-hexagon: merge: as-tentative - -ELF-hexagon: - name: tentative -ELF-hexagon: scope: global -ELF-hexagon: type: zero-fill -ELF-hexagon: merge: as-tentative - -ELF-hexagon: - name: global_func -ELF-hexagon: scope: global -ELF-hexagon: content: [ 00, C0, 9D, A0, 00, 40, 00, 00, 00, C0, 00, 78, -ELF-hexagon: 00, C0, 00, 5A, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: static_func -ELF-hexagon: content: [ 00, C0, 9D, A0, 00, 40, 00, 00, 00, C0, 00, 78, -ELF-hexagon: 00, C0, 00, 5A, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: weak_func -ELF-hexagon: scope: global -ELF-hexagon: merge: as-weak -ELF-hexagon: content: [ 00, C0, 9D, A0, 00, 40, 00, 00, 00, C0, 00, 78, -ELF-hexagon: 00, C0, 00, 5A, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: hidden_func -ELF-hexagon: scope: hidden -ELF-hexagon: content: [ 00, C0, 9D, A0, 00, 40, 00, 00, 00, C0, 00, 78, -ELF-hexagon: 00, C0, 00, 5A, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: no_dead_strip -ELF-hexagon: scope: global -ELF-hexagon: content: [ 00, C0, 9D, A0, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: no_special_section_func -ELF-hexagon: scope: global -ELF-hexagon: content: [ 00, C0, 9D, A0, 1E, C0, 1E, 96 ] - -ELF-hexagon: - name: special_section_func -ELF-hexagon: scope: global -ELF-hexagon: content: [ 00, C0, 9D, A0, 1E, C0, 1E, 96 ] -ELF-hexagon: section-choice: custom-required -ELF-hexagon: section-name: special_section - -ELF-hexagon: undefined-atoms: -ELF-hexagon: - name: puts - -ELF-hexagon: absolute-atoms: -ELF-hexagon: - name: sample.c -ELF-hexagon: value: 0x0 +RUN: %p/Inputs/object-test.elf-hexagon -o %t1 +RUN: FileCheck %s -check-prefix ELF-hexagon < %t1 + +ELF-i386: defined-atoms: +ELF-i386: - name: global_variable +ELF-i386: - name: common_symbol +ELF-i386: - name: tentative +ELF-i386: - name: uninitialized_static_variable +ELF-i386: - name: global_func +ELF-i386: - name: static_func +ELF-i386: - name: weak_func +ELF-i386: - name: hidden_func +ELF-i386: - name: no_dead_strip +ELF-i386: - name: no_special_section_func +ELF-i386: - name: special_section_func +ELF-i386: undefined-atoms: +ELF-i386: - name: puts +ELF-i386: absolute-atoms: +ELF-i386: - name: sample.c + +ELF-hexagon: - name: global_variable +ELF-hexagon: - name: tentative +ELF-hexagon: - name: common_symbol +ELF-hexagon: - name: uninitialized_static_variable +ELF-hexagon: - name: global_func +ELF-hexagon: - name: static_func +ELF-hexagon: - name: weak_func +ELF-hexagon: - name: hidden_func +ELF-hexagon: - name: no_dead_strip +ELF-hexagon: - name: no_special_section_func +ELF-hexagon: - name: special_section_func +ELF-hexagon: undefined-atoms: +ELF-hexagon: - name: puts +ELF-hexagon: absolute-atoms: +ELF-hexagon: - name: sample.c +ELF-hexagon: scope: static +ELF-hexagon: value: 0x0000000000000000 diff --git a/lld/test/elf/checkrodata.test b/lld/test/elf/checkrodata.test index fc75657b4af..af48210e1ac 100644 --- a/lld/test/elf/checkrodata.test +++ b/lld/test/elf/checkrodata.test @@ -4,6 +4,6 @@ RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=i386 %s RUN: lld -flavor gnu -target hexagon -o %t2 %p/Inputs/rodata-test.hexagon --noinhibit-exec RUN: llvm-objdump -section-headers %t2 | FileCheck -check-prefix=hexagon %s -i386: .rodata 00000004 0000000000000114 DATA +i386: .rodata 00000004 0000000000000111 DATA -hexagon: .rodata 00000004 0000000000000114 DATA +hexagon: .rodata 00000004 0000000000000111 DATA diff --git a/lld/test/elf/dynamic.test b/lld/test/elf/dynamic.test index 1b889bff8fe..de90bc0a964 100644 --- a/lld/test/elf/dynamic.test +++ b/lld/test/elf/dynamic.test @@ -9,6 +9,10 @@ RUN: llvm-objdump -p %t >> %t2 RUN: llvm-readobj -s -dyn-symbols -dynamic-table %t >> %t2 RUN: FileCheck %s < %t2 +CHECK: type: got +CHECK: references: +CHECK: kind: R_X86_64_JUMP_SLOT + CHECK: name: main CHECK: kind: R_X86_64_PC32 CHECK: offset: 18 @@ -17,10 +21,6 @@ CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]] CHECK: name: [[PLTNAME]] CHECK: type: stub -CHECK: type: got -CHECK: references: -CHECK: kind: R_X86_64_JUMP_SLOT - CHECK: shared-library-atoms: CHECK: name: foo CHECK: load-name: shared.so-x86-64 diff --git a/lld/test/elf/gotpcrel.test b/lld/test/elf/gotpcrel.test index e6353bde14b..6e1b4cd3e9e 100644 --- a/lld/test/elf/gotpcrel.test +++ b/lld/test/elf/gotpcrel.test @@ -3,19 +3,20 @@ RUN: lld -flavor gnu -target x86_64-linux -static -e main -emit-yaml \ RUN: --noinhibit-exec %p/Inputs/gotpcrel.x86-64 \ RUN: | FileCheck %s -check-prefix=YAML +YAML: name: [[NULLGOT:[a-zA-Z0-9_]+]] +YAML: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ] +YAML-NOT: references: + +YAML: name: [[MAINGOT:[a-zA-Z0-9_]+]] +YAML: kind: R_X86_64_64 +YAML: target: main + YAML: name: main YAML: references: YAML: kind: R_X86_64_PC32 YAML: offset: 3 -YAML: target: [[NULLGOT:[a-zA-Z0-9_]+]] +YAML: target: [[NULLGOT]] YAML: kind: R_X86_64_PC32 YAML: offset: 10 -YAML: target: [[MAINGOT:[a-zA-Z0-9_]+]] +YAML: target: [[MAINGOT]] -YAML: name: [[NULLGOT]] -YAML: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ] -YAML-NOT: references: - -YAML: name: [[MAINGOT]] -YAML: kind: R_X86_64_64 -YAML: target: main diff --git a/lld/test/elf/hexagon-quickdata-sort.test b/lld/test/elf/hexagon-quickdata-sort.test index 199cb9d1afc..129c0b27956 100644 --- a/lld/test/elf/hexagon-quickdata-sort.test +++ b/lld/test/elf/hexagon-quickdata-sort.test @@ -1,12 +1,12 @@ RUN: lld -flavor gnu -target hexagon %p/Inputs/quickdata-sort-test.o.elf-hexagon -o %t1 --noinhibit-exec RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSort -quickdataSort: 00002000 D A1 -quickdataSort: 00002001 D AA1 -quickdataSort: 00002002 D B1 -quickdataSort: 00002004 D BB1 -quickdataSort: 00002008 D C1 -quickdataSort: 0000200c D CC1 -quickdataSort: 00002010 D D1 -quickdataSort: 00002018 D DD1 +quickdataSort: 00002000 D AA1 +quickdataSort: 00002001 D A1 +quickdataSort: 00002002 D BB1 +quickdataSort: 00002004 D B1 +quickdataSort: 00002008 D CC1 +quickdataSort: 0000200c D C1 +quickdataSort: 00002010 D DD1 +quickdataSort: 00002018 D D1 diff --git a/lld/test/elf/hexagon-quickdata-sortcommon.test b/lld/test/elf/hexagon-quickdata-sortcommon.test index f7b2d063545..6495e135a69 100644 --- a/lld/test/elf/hexagon-quickdata-sortcommon.test +++ b/lld/test/elf/hexagon-quickdata-sortcommon.test @@ -2,16 +2,15 @@ RUN: lld -flavor gnu -target hexagon -o %t1 --noinhibit-exec \ RUN: %p/Inputs/quickdata-sortcommon-test.o.elf-hexagon RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSortCommon -quickdataSortCommon: 00002000 D A1 -quickdataSortCommon: 00002001 D AA1 +quickdataSortCommon: 00002000 D AA1 +quickdataSortCommon: 00002001 D A1 quickdataSortCommon: 00002002 D AAA1 -quickdataSortCommon: 00002004 D B1 -quickdataSortCommon: 00002006 D BB1 +quickdataSortCommon: 00002004 D BB1 +quickdataSortCommon: 00002006 D B1 quickdataSortCommon: 00002008 D BBB1 -quickdataSortCommon: 0000200c D C1 -quickdataSortCommon: 00002010 D CC1 +quickdataSortCommon: 0000200c D CC1 +quickdataSortCommon: 00002010 D C1 quickdataSortCommon: 00002014 D CCC1 -quickdataSortCommon: 00002018 D D1 -quickdataSortCommon: 00002020 D DD1 +quickdataSortCommon: 00002018 D DD1 +quickdataSortCommon: 00002020 D D1 quickdataSortCommon: 00002028 D DDD1 - diff --git a/lld/test/elf/ifunc.test b/lld/test/elf/ifunc.test index 0faf0b5a450..52c5729fd03 100644 --- a/lld/test/elf/ifunc.test +++ b/lld/test/elf/ifunc.test @@ -14,6 +14,12 @@ RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=RELATIVEADDEND PLT: defined-atoms: +// Make sure there's a got entry with a IRELATIVE relocation. +PLT: type: got +PLT: references: +PLT: kind: R_X86_64_IRELATIVE +PLT: target: hey + PLT: name: plt PLT: scope: global PLT: references: @@ -36,12 +42,6 @@ PLT: type: stub PLT: references PLT: kind: R_X86_64_PC32 -// Make sure there's a got entry with a IRELATIVE relocation. -PLT: type: got -PLT: references: -PLT: kind: R_X86_64_IRELATIVE -PLT: target: hey - CHECK: name: hey CHECK: scope: global CHECK: type: resolver diff --git a/lld/test/elf/quickdata.test b/lld/test/elf/quickdata.test index 3c90e77a364..5b2bda5bfb3 100644 --- a/lld/test/elf/quickdata.test +++ b/lld/test/elf/quickdata.test @@ -1,14 +1,14 @@ RUN: lld -flavor gnu -target hexagon -emit-yaml %p/Inputs/quickdata-test.elf-hexagon \ RUN: --noinhibit-exec | FileCheck %s -check-prefix hexagon +hexagon: - name: init +hexagon: scope: global +hexagon: type: quick-data hexagon: - name: ac1 hexagon: scope: global hexagon: type: zero-fill-quick hexagon: size: 1 hexagon: merge: as-tentative -hexagon: - name: init -hexagon: scope: global -hexagon: type: quick-data hexagon: - name: bss1 hexagon: scope: global hexagon: type: zero-fill-quick diff --git a/lld/test/elf/tls.test b/lld/test/elf/tls.test index 0748fea0b21..a286e1e4883 100644 --- a/lld/test/elf/tls.test +++ b/lld/test/elf/tls.test @@ -7,6 +7,11 @@ RUN: --noinhibit-exec -e main -static && llvm-objdump -d %t | FileCheck %s // Verify that the TLS accesses have the correct offsets. +YAML: type: got +YAML: references: +YAML: kind: R_X86_64_TPOFF64 +YAML: target: tls2 + YAML: name: main YAML: references: YAML: kind: R_X86_64_TPOFF32 @@ -23,11 +28,6 @@ YAML: name: GOTTPOFF YAML: kind: R_X86_64_PC32 YAML: target: [[GOTNAME:[a-zA-Z0-9_]+]] -YAML: type: got -YAML: references: -YAML: kind: R_X86_64_TPOFF64 -YAML: target: tls2 - // main CHECK: addl %fs:-4 diff --git a/lld/test/elf/x86-64-dynamic.test b/lld/test/elf/x86-64-dynamic.test index dac9b748b30..fdf34ce583c 100644 --- a/lld/test/elf/x86-64-dynamic.test +++ b/lld/test/elf/x86-64-dynamic.test @@ -5,6 +5,15 @@ RUN: %p/Inputs/shared.so-x86-64 -emit-yaml -o %t1 --noinhibit-exec RUN: FileCheck %s < %t1 // Don't check the GOT and PLT names as they are only present in assert builds. +CHECK: type: got +CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ] +CHECK: section-choice: custom-required +CHECK: section-name: .got.dyn +CHECK: permissions: rw- +CHECK: references: +CHECK: - kind: R_X86_64_GLOB_DAT +CHECK: offset: 0 +CHECK: target: i CHECK: - name: main CHECK: scope: global @@ -53,16 +62,6 @@ CHECK: - kind: R_X86_64_PC32 CHECK: offset: 12 target: .PLT0 CHECK: addend: -4 -CHECK: name: [[GOTNAME]] -CHECK: type: got -CHECK: content: [ 00, 00, 00, 00, 00, 00, 00, 00 ] -CHECK: section-choice: custom-required -CHECK: section-name: .got.dyn -CHECK: permissions: rw- -CHECK: references: -CHECK: - kind: R_X86_64_GLOB_DAT -CHECK: offset: 0 -CHECK: target: i diff --git a/lld/test/pecoff/importlib.test b/lld/test/pecoff/importlib.test index 014bac3afcf..9e6cd43d343 100644 --- a/lld/test/pecoff/importlib.test +++ b/lld/test/pecoff/importlib.test @@ -27,11 +27,11 @@ CHECK-NEXT: .text: CHECK-NEXT: 1000: 55 pushl %ebp CHECK-NEXT: 1001: 8b ec movl %esp, %ebp CHECK-NEXT: 1003: 56 pushl %esi -CHECK-NEXT: 1004: ff 15 78 20 40 00 calll *4202616 -CHECK-NEXT: 100a: 8b 0d 7c 20 40 00 movl 4202620, %ecx +CHECK-NEXT: 1004: ff 15 22 20 40 00 calll *4202530 +CHECK-NEXT: 100a: 8b 0d 26 20 40 00 movl 4202534, %ecx CHECK-NEXT: 1010: 8b 31 movl (%ecx), %esi CHECK-NEXT: 1012: 03 f0 addl %eax, %esi -CHECK-NEXT: 1014: ff 15 74 20 40 00 calll *4202612 +CHECK-NEXT: 1014: ff 15 1e 20 40 00 calll *4202526 CHECK-NEXT: 101a: 03 c6 addl %esi, %eax CHECK-NEXT: 101c: 5e popl %esi CHECK-NEXT: 101d: 5d popl %ebp |