[lld] r181605 - [lld][LayoutPass] This commit fixes a problem in the
Shankar Easwaran
shankare at codeaurora.org
Fri May 10 09:44:03 PDT 2013
Author: shankare
Date: Fri May 10 11:44:02 2013
New Revision: 181605
URL: http://llvm.org/viewvc/llvm-project?rev=181605&view=rev
Log:
[lld][LayoutPass] This commit fixes a problem in the
Layoutpass by ordering atoms if they appear in the override
list first and then looking at the way of ordering atoms in
the default way.
The fix also fixes issues with the sizes of the sections,
that appear in the output properly too.
The commit also adds a testcase(orderatoms-by-override.test)
to test it and fixes all the other relevant testcases.
Added:
lld/trunk/test/elf/X86_64/Inputs/constint.c
lld/trunk/test/elf/X86_64/Inputs/constint.o (with props)
lld/trunk/test/elf/X86_64/Inputs/rwint.c
lld/trunk/test/elf/X86_64/Inputs/rwint.o (with props)
lld/trunk/test/elf/X86_64/orderatoms-by-override.test
Modified:
lld/trunk/lib/Passes/LayoutPass.cpp
lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
lld/trunk/test/elf/X86_64/multi-weak-override.test
lld/trunk/test/elf/X86_64/multi-weak-syms-order.test
lld/trunk/test/elf/X86_64/weak-override.test
lld/trunk/test/elf/check.objtxt
lld/trunk/test/elf/dynamic.test
lld/trunk/test/elf/gotpcrel.test
lld/trunk/test/elf/ifunc.test
lld/trunk/test/elf/mergeatoms.objtxt
lld/trunk/test/elf/phdr.objtxt
lld/trunk/test/elf/sections.objtxt
lld/trunk/test/elf/tls.test
lld/trunk/test/elf/x86-64-dynamic.test
Modified: lld/trunk/lib/Passes/LayoutPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Passes/LayoutPass.cpp?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/lib/Passes/LayoutPass.cpp (original)
+++ lld/trunk/lib/Passes/LayoutPass.cpp Fri May 10 11:44:02 2013
@@ -31,6 +31,30 @@ bool LayoutPass::CompareAtoms::operator(
if (left == right)
return false;
+ DEBUG(llvm::dbgs() << "Sorting by override\n");
+
+ 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 same permissions together.
DefinedAtom::ContentPermissions leftPerms = left->permissions();
DefinedAtom::ContentPermissions rightPerms = right->permissions();
@@ -67,30 +91,6 @@ bool LayoutPass::CompareAtoms::operator(
return leftPos < rightPos;
}
- DEBUG(llvm::dbgs() << "Sorting by override\n");
-
- 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 by .o order.
const File *leftFile = &left->file();
const File *rightFile = &right->file();
Modified: lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/dynlib-gotoff.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/Hexagon/dynlib-gotoff.test (original)
+++ lld/trunk/test/elf/Hexagon/dynlib-gotoff.test Fri May 10 11:44:02 2013
@@ -1,72 +1,8 @@
+# This tests GOT's and PLT's for dynamic libraries for Hexagon
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
- - 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
CHECKGOTPLT: - ref-name: {{[0-9A-Z]+}}
CHECKGOTPLT: alignment: 2^2
CHECKGOTPLT: section-name: .text
@@ -146,6 +82,71 @@ CHECKGOTPLT: offset: 8
CHECKGOTPLT: - kind: R_HEX_B22_PCREL
CHECKGOTPLT: offset: 12
target: __plt_fn2
+ - 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
- name: .PLT0
CHECKGOTPLT: type: stub
CHECKGOTPLT: content: [ 00, 40, 00, 00, 1C, C0, 49, 6A, 0E, 42, 9C, E2,
Added: lld/trunk/test/elf/X86_64/Inputs/constint.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/constint.c?rev=181605&view=auto
==============================================================================
--- lld/trunk/test/elf/X86_64/Inputs/constint.c (added)
+++ lld/trunk/test/elf/X86_64/Inputs/constint.c Fri May 10 11:44:02 2013
@@ -0,0 +1 @@
+const int b = 20;
Added: lld/trunk/test/elf/X86_64/Inputs/constint.o
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/constint.o?rev=181605&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lld/trunk/test/elf/X86_64/Inputs/constint.o
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lld/trunk/test/elf/X86_64/Inputs/rwint.c
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/rwint.c?rev=181605&view=auto
==============================================================================
--- lld/trunk/test/elf/X86_64/Inputs/rwint.c (added)
+++ lld/trunk/test/elf/X86_64/Inputs/rwint.c Fri May 10 11:44:02 2013
@@ -0,0 +1 @@
+int a = 10;
Added: lld/trunk/test/elf/X86_64/Inputs/rwint.o
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/Inputs/rwint.o?rev=181605&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lld/trunk/test/elf/X86_64/Inputs/rwint.o
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: lld/trunk/test/elf/X86_64/multi-weak-override.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/multi-weak-override.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/multi-weak-override.test (original)
+++ lld/trunk/test/elf/X86_64/multi-weak-override.test Fri May 10 11:44:02 2013
@@ -6,8 +6,8 @@ RUN: lld -flavor gnu -target x86_64 %p/I
RUN: %p/Inputs/multi-ovrd.o -emit-yaml -o %t2 --noinhibit-exec
RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-WEAKORDER: 0040020c T f
-WEAKORDER: 0040021c T g
+WEAKORDER: {{[0-9a-f]+}} T f
+WEAKORDER: {{[0-9a-f]+}} T g
WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
Modified: lld/trunk/test/elf/X86_64/multi-weak-syms-order.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/multi-weak-syms-order.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/multi-weak-syms-order.test (original)
+++ lld/trunk/test/elf/X86_64/multi-weak-syms-order.test Fri May 10 11:44:02 2013
@@ -4,10 +4,10 @@ RUN: llvm-nm -n %t | FileCheck -check-pr
RUN: lld -flavor gnu -target x86_64 %p/Inputs/multi-weak.o -o %t2 -emit-yaml --noinhibit-exec
RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-WEAKORDER: 004001b0 T fn
-WEAKORDER: 004001bb T f
-WEAKORDER: 004001cb T g
-WEAKORDER: 004001db T main
+WEAKORDER: {{[0-9a-f]+}} T fn
+WEAKORDER: {{[0-9a-f]+}} T f
+WEAKORDER: {{[0-9a-f]+}} T g
+WEAKORDER: {{[0-9a-f]+}} T main
WEAKATOMSORDER: - name: f
WEAKATOMSORDER: - ref-name: {{[A-Z0-9]+}}
Added: lld/trunk/test/elf/X86_64/orderatoms-by-override.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/orderatoms-by-override.test?rev=181605&view=auto
==============================================================================
--- lld/trunk/test/elf/X86_64/orderatoms-by-override.test (added)
+++ lld/trunk/test/elf/X86_64/orderatoms-by-override.test Fri May 10 11:44:02 2013
@@ -0,0 +1,8 @@
+# This testcase tests the behaviour of the layoutpass so that the atoms that
+# appear by their override take preference before proceeding to default behaviour
+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
Modified: lld/trunk/test/elf/X86_64/weak-override.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/weak-override.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/X86_64/weak-override.test (original)
+++ lld/trunk/test/elf/X86_64/weak-override.test Fri May 10 11:44:02 2013
@@ -6,7 +6,7 @@ RUN: lld -flavor gnu -target x86_64 %p/I
RUN: %p/Inputs/ovrd.o -o %t2 -emit-yaml --noinhibit-exec
RUN: FileCheck -check-prefix=WEAKATOMSORDER %s < %t2
-WEAKORDER: 004001ec T f
+WEAKORDER: {{[0-9a-c]+}} T f
WEAKATOMSORDER: references:
WEAKATOMSORDER: - kind: layout-after
Modified: lld/trunk/test/elf/check.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/check.objtxt?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/check.objtxt (original)
+++ lld/trunk/test/elf/check.objtxt Fri May 10 11:44:02 2013
@@ -1,3 +1,5 @@
+# This tests the basic functionality of ordering data and functions as they
+# appear in the inputs
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
@@ -5,16 +7,6 @@ RUN: lld -flavor gnu -target hexagon -e
RUN: %p/Inputs/object-test.elf-hexagon | FileCheck %s -check-prefix ELF-hexagon
ELF-i386:defined-atoms:
-ELF-i386: - name: tentative
-ELF-i386: scope: global
-ELF-i386: type: zero-fill
-ELF-i386: merge: as-tentative
-
-ELF-i386: - name: common_symbol
-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,
@@ -49,6 +41,17 @@ ELF-i386: content: [ 55,
ELF-i386: section-choice: custom-required
ELF-i386: section-name: special_section
+ELF-i386: - name: tentative
+ELF-i386: scope: global
+ELF-i386: type: zero-fill
+ELF-i386: merge: as-tentative
+
+ELF-i386: - name: common_symbol
+ELF-i386: scope: global
+ELF-i386: type: zero-fill
+ELF-i386: merge: as-tentative
+
+
ELF-i386:undefined-atoms:
ELF-i386: - name: puts
@@ -57,15 +60,6 @@ ELF-i386: - name: sample
ELF-i386: value: 0x0
ELF-hexagon:defined-atoms:
-ELF-hexagon: - name: tentative
-ELF-hexagon: scope: global
-ELF-hexagon: type: zero-fill
-ELF-hexagon: merge: as-tentative
-
-ELF-hexagon: - name: common_symbol
-ELF-hexagon: scope: global
-ELF-hexagon: type: zero-fill
-ELF-hexagon: merge: as-tentative
ELF-hexagon: - name: global_func
ELF-hexagon: scope: global
@@ -101,6 +95,16 @@ ELF-hexagon: content: [ 0
ELF-hexagon: section-choice: custom-required
ELF-hexagon: section-name: special_section
+ELF-hexagon: - name: tentative
+ELF-hexagon: scope: global
+ELF-hexagon: type: zero-fill
+ELF-hexagon: merge: as-tentative
+
+ELF-hexagon: - name: common_symbol
+ELF-hexagon: scope: global
+ELF-hexagon: type: zero-fill
+ELF-hexagon: merge: as-tentative
+
ELF-hexagon: undefined-atoms:
ELF-hexagon: - name: puts
Modified: lld/trunk/test/elf/dynamic.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/dynamic.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/dynamic.test (original)
+++ lld/trunk/test/elf/dynamic.test Fri May 10 11:44:02 2013
@@ -1,3 +1,4 @@
+# Checks functionality of dynamic executables
RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
RUN: %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined
RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
@@ -7,15 +8,15 @@ 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
CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
+CHECK: type: got
+CHECK: references:
+CHECK: kind: R_X86_64_JUMP_SLOT
+
CHECK: name: [[PLTNAME]]
CHECK: type: stub
Modified: lld/trunk/test/elf/gotpcrel.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/gotpcrel.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/gotpcrel.test (original)
+++ lld/trunk/test/elf/gotpcrel.test Fri May 10 11:44:02 2013
@@ -1,21 +1,21 @@
+# This test checks that GOTPCREL entries are being handled properly
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]]
+YAML: target: [[NULLGOT:[a-zA-Z0-9_]+]]
YAML: kind: R_X86_64_PC32
YAML: offset: 10
-YAML: target: [[MAINGOT]]
+YAML: target: [[MAINGOT:[a-zA-Z0-9_]+]]
+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
Modified: lld/trunk/test/elf/ifunc.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/ifunc.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/ifunc.test (original)
+++ lld/trunk/test/elf/ifunc.test Fri May 10 11:44:02 2013
@@ -1,3 +1,5 @@
+# This test checks that IRELATIVE relocations are created for symbols that
+# need relocation even for static links.
RUN: lld -flavor gnu -target x86_64-linux -emit-yaml -r \
RUN: %p/Inputs/ifunc.x86-64 | FileCheck %s
@@ -12,12 +14,6 @@ RUN: && llvm-objdump -d -s %t| FileCheck
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:
@@ -25,12 +21,19 @@ PLT: kind: R_X86_64_PC32
PLT: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
PLT: kind: layout-before
PLT: target: __hey_1
+
PLT: name: main
PLT: scope: global
PLT: references:
PLT: kind: R_X86_64_PC32
PLT: target: [[PLTNAME]]
+// 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
+
// Make sure the target of main's relocation is a stub with a PC32 relocation.
// This relocation is to the got atom, but you can't really write that check in
// FileCheck.
Modified: lld/trunk/test/elf/mergeatoms.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/mergeatoms.objtxt?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/mergeatoms.objtxt (original)
+++ lld/trunk/test/elf/mergeatoms.objtxt Fri May 10 11:44:02 2013
@@ -1,5 +1,6 @@
+# Tests that atoms are merged by testing it with --merge-strings option
RUN: lld -flavor gnu --merge-strings -o %t1 \
RUN: %p/Inputs/foo.o.x86-64 %p/Inputs/bar.o.x86-64 -e bar1
RUN: llvm-objdump -s %t1 | FileCheck -check-prefix=mergeAtoms %s
-mergeAtoms: 62617200 666f6f00 bar.foo.
+mergeAtoms: 666f6f00 62617200 foo.bar.
Modified: lld/trunk/test/elf/phdr.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/phdr.objtxt?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/phdr.objtxt (original)
+++ lld/trunk/test/elf/phdr.objtxt Fri May 10 11:44:02 2013
@@ -1,3 +1,4 @@
+# This test checks emission for program header for ELF binaries
RUN: lld -flavor gnu -target i386-linux -o %t1 -e main %p/Inputs/phdr.i386 \
RUN: && llvm-readobj -program-headers %t1 | FileCheck -check-prefix=I386 %s
RUN: lld -flavor gnu -target x86_64-linux -o %t1 -e _start %p/Inputs/relocs.x86-64 -static \
@@ -62,7 +63,7 @@ I386-NEXT: Offset: 0x4000
I386-NEXT: VirtualAddress: 0x4000
I386-NEXT: PhysicalAddress: 0x4000
I386-NEXT: FileSize: 4
-I386-NEXT: MemSize: 16392
+I386-NEXT: MemSize: 16389
I386-NEXT: Flags [ (0x6)
I386-NEXT: PF_R (0x4)
I386-NEXT: PF_W (0x2)
Modified: lld/trunk/test/elf/sections.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/sections.objtxt?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/sections.objtxt (original)
+++ lld/trunk/test/elf/sections.objtxt Fri May 10 11:44:02 2013
@@ -1,3 +1,5 @@
+# This test checks if sections are created properly in the output that appear in
+# the input
RUN: lld -flavor gnu -target i386 -o %t1 %p/Inputs/section-test.i386 \
RUN: -static -e baz
RUN: llvm-objdump -section-headers %t1 | FileCheck -check-prefix=OBJDUMP %s
@@ -8,7 +10,7 @@ OBJDUMP: 1 .text 0000000a 00000
OBJDUMP: 2 .data 00000004 0000000000001000 DATA
OBJDUMP: 3 .special 00000004 0000000000001004 DATA
OBJDUMP: 4 .anotherspecial 00000004 0000000000001008 DATA
-OBJDUMP: 5 .bss 00000004 000000000000100c BSS
+OBJDUMP: 5 .bss 00000001 000000000000100c BSS
OBJDUMP: 6 .shstrtab {{[0-9a-f]+}} 0000000000000000
OBJDUMP: 7 .symtab {{[0-9a-f]+}} 0000000000000000
OBJDUMP: 8 .strtab {{[0-9a-f]+}} 0000000000000000
@@ -88,7 +90,7 @@ READOBJ: SHF_ALLOC
READOBJ: SHF_WRITE
READOBJ: ]
READOBJ: Address: 0x100C
-READOBJ: Size: 4
+READOBJ: Size: 1
READOBJ: }
READOBJ: Section {
READOBJ: Index: 6
Modified: lld/trunk/test/elf/tls.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/tls.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/tls.test (original)
+++ lld/trunk/test/elf/tls.test Fri May 10 11:44:02 2013
@@ -1,3 +1,4 @@
+# This tests verifies that TLS variables have correct offsets
RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 -static \
RUN: -emit-yaml --noinhibit-exec | FileCheck %s -check-prefix=YAML
@@ -6,12 +7,6 @@ RUN: --noinhibit-exec -e main -static
// Verify that the TLS accesses have the correct offsets.
-YAML: defined-atoms:
-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
@@ -28,6 +23,11 @@ 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
Modified: lld/trunk/test/elf/x86-64-dynamic.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/x86-64-dynamic.test?rev=181605&r1=181604&r2=181605&view=diff
==============================================================================
--- lld/trunk/test/elf/x86-64-dynamic.test (original)
+++ lld/trunk/test/elf/x86-64-dynamic.test Fri May 10 11:44:02 2013
@@ -1,32 +1,34 @@
+# Checks that linking an object file with a shared object creates the necessary
+# PLT/GOT Entries
RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared.x86-64 \
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: name: [[GOTNAME:[-a-zA-Z0-9_]+]]
-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
CHECK: references:
CHECK: - kind: R_X86_64_PC32
CHECK: offset: 18
- target: [[PLTNAME:[-a-zA-Z0-9_]+]]
+CHECK: target: [[PLTNAME:[-a-zA-Z0-9_]+]]
CHECK: addend: -4
CHECK: - kind: R_X86_64_PC32
CHECK: offset: 25
- target: [[GOTNAME]]
+CHECK: target: [[GOTNAME:[-a-zA-Z0-9_]+]]
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
+
- name: .PLT0
CHECK: type: stub
CHECK: content: [ FF, 35, 00, 00, 00, 00, FF, 25, 00, 00, 00, 00,
More information about the llvm-commits
mailing list