[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