[lld] r227666 - ELF: Don't use LayoutPass.

Rafael Auler rafaelauler at gmail.com
Sun Feb 1 05:45:28 PST 2015


No problem. Just checked, it's fixed!

On Sun, Feb 1, 2015 at 3:13 AM, Rui Ueyama <ruiu at google.com> wrote:

> I believe it's fixed in r227709. Could you please verify when you have
> time? Thanks!
>
> On Sat, Jan 31, 2015 at 7:13 PM, Rui Ueyama <ruiu at google.com> wrote:
>
>> Thanks Rafael for reporting.
>>
>> Looks like there are two atoms having the same ordinals. It's pretty odd
>> because if there's such bug in the ELF reader, the bug should make the
>> tests fail not only on Mac but on any platform. I'll take a look.
>>
>> On Sat, Jan 31, 2015 at 2:01 PM, Rafael Auler <rafaelauler at gmail.com>
>> wrote:
>>
>>> Oddly, this breaks my darwin build compiling with Apple's clang 6.0 (but
>>> not the Linux one with gcc 4.8.2). I'm reporting this here to give you a
>>> heads up because it looks like the buildbots for lld on darwin are red
>>> anyway for another problem (failure do locate Intrinsics.gen).
>>>
>>> rafael$ ninja check-lld
>>> [15/15] Running lld test suite
>>> FAILED: cd /Users/rafael/p/obj/tools/lld/test && /usr/bin/python
>>> /Users/rafael/p/llvm/utils/lit/lit.py -sv --param
>>> lld_site_config=/Users/rafael/p/obj/tools/lld/test/lit.site.cfg --param
>>> lld_unit_site_config=/Users/rafael/p/obj/tools/lld/test/Unit/lit.site.cfg
>>> /Users/rafael/p/obj/tools/lld/test
>>> -- Testing: 651 tests, 8 threads --
>>> Testing: 0 .. 10.. 20.. 30.. 40
>>> FAIL: lld :: elf/X86_64/startGroupEndGroup.test (286 of 651)
>>> ******************** TEST 'lld :: elf/X86_64/startGroupEndGroup.test'
>>> FAILED ********************
>>> Script:
>>> --
>>> not lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a -o x
>>> 2>
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp.err
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a
>>> --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn.o
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn2.o
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn1.o
>>> --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp2
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group    --whole-archive
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> --no-whole-archive
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a
>>> --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp3
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn2.so
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn1.o
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn.o
>>>  --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp4
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o '-('
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a '-)'
>>> -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1.alias
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o '-('
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn.o
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn2.o
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/fn1.o '-)' -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp2.alias
>>> lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o '-('
>>>  --whole-archive
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> --no-whole-archive
>>>  /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a '-)'
>>> -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp3.alias
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp2
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp3
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1.alias
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp2.alias
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> llvm-nm
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp3.alias
>>> | FileCheck -check-prefix=RESOLVEDEXTERNAL
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/startGroupEndGroup.test
>>> --
>>> Exit Code: 132
>>>
>>> Command Output (stderr):
>>> --
>>> Assertion failed: (lhs->ordinal() != rhs->ordinal()), function
>>> compareByPosition, file
>>> /Users/rafael/p/llvm/tools/lld/lib/Core/DefinedAtom.cpp, line 90.
>>> 0  lld                      0x00000001067986fe
>>> llvm::sys::PrintStackTrace(__sFILE*) + 46
>>> 1  lld                      0x0000000106799aab
>>> PrintStackTraceSignalHandler(void*) + 27
>>> 2  lld                      0x0000000106799ef5 SignalHandler(int) + 565
>>> 3  libsystem_platform.dylib 0x00007fff8ebb4f1a _sigtramp + 26
>>> 4  libsystem_platform.dylib 0x00007fff61c25764 _sigtramp + 3540453476
>>> 5  lld                      0x0000000106799adb raise + 27
>>> 6  lld                      0x0000000106799b92 abort + 18
>>> 7  lld                      0x0000000106799b71 __assert_rtn + 129
>>> 8  lld                      0x0000000106b7feb7
>>> lld::DefinedAtom::compareByPosition(lld::DefinedAtom const*,
>>> lld::DefinedAtom const*) + 231
>>> 9  lld                      0x000000010689e60b void
>>> std::__1::__sort<bool (*&)(lld::DefinedAtom const*, lld::DefinedAtom
>>> const*), lld::DefinedAtom const**>(lld::DefinedAtom const**,
>>> lld::DefinedAtom const**, bool (*&)(lld::DefinedAtom const*,
>>> lld::DefinedAtom const*)) + 2187
>>> 10 lld                      0x000000010689b5eb void
>>> lld::detail::parallel_quick_sort<std::__1::__wrap_iter<lld::DefinedAtom
>>> const**>, bool (lld::DefinedAtom const*, lld::DefinedAtom
>>> const*)>(std::__1::__wrap_iter<lld::DefinedAtom const**>,
>>> std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>>  const(&)(lld::DefinedAtom const*, lld::DefinedAtom const*),
>>> lld::TaskGroup&, unsigned long) + 459
>>> 11 lld                      0x000000010689b3f1 void
>>> lld::parallel_sort<std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>> (lld::DefinedAtom const*, lld::DefinedAtom
>>> const*)>(std::__1::__wrap_iter<lld::DefinedAtom const**>,
>>> std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>>  const(&)(lld::DefinedAtom const*, lld::DefinedAtom const*)) + 385
>>> 12 lld                      0x0000000106b0dcb7
>>> lld::elf::OrderPass::perform(std::__1::unique_ptr<lld::MutableFile,
>>> std::__1::default_delete<lld::MutableFile> >&) + 311
>>> 13 lld                      0x000000010668f9a6
>>> lld::PassManager::runOnFile(std::__1::unique_ptr<lld::MutableFile,
>>> std::__1::default_delete<lld::MutableFile> >&) + 454
>>> 14 lld                      0x000000010668d189
>>> lld::Driver::link(lld::LinkingContext&, llvm::raw_ostream&) + 7065
>>> 15 lld                      0x000000010669c569
>>> lld::GnuLdDriver::linkELF(int, char const**, llvm::raw_ostream&) + 1113
>>> 16 lld                      0x00000001066b7ade
>>> lld::UniversalDriver::link(int, char const**, llvm::raw_ostream&) + 1454
>>> 17 lld                      0x000000010667b5e6 main + 86
>>> 18 libdyld.dylib            0x00007fff965ee5c9 start + 1
>>> Stack dump:
>>> 0. Program arguments: lld -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a
>>> --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1
>>> -flavor gnu
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.script:
>>> line 14: 12872 Illegal instruction: 4  lld -flavor gnu -target x86_64
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/1.o
>>> --start-group
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn.a
>>> /Users/rafael/p/llvm/tools/lld/test/elf/X86_64/Inputs/group/libfn1.a
>>> --end-group -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/X86_64/Output/startGroupEndGroup.test.tmp1
>>>
>>> --
>>>
>>> ********************
>>> Testing: 0 .. 10.. 20.. 30.. 40.
>>> FAIL: lld :: elf/init_array.test (302 of 651)
>>> ******************** TEST 'lld :: elf/init_array.test' FAILED
>>> ********************
>>> Script:
>>> --
>>> lld -flavor gnu -target x86_64-linux -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/Output/init_array.test.tmp
>>> /Users/rafael/p/llvm/tools/lld/test/elf/Inputs/init_array.x86-64   -e
>>> __init_array_start
>>> llvm-objdump -t -section-headers
>>> /Users/rafael/p/obj/tools/lld/test/elf/Output/init_array.test.tmp |
>>> FileCheck /Users/rafael/p/llvm/tools/lld/test/elf/init_array.test
>>> --
>>> Exit Code: 132
>>>
>>> Command Output (stderr):
>>> --
>>> Assertion failed: (lhs->ordinal() != rhs->ordinal()), function
>>> compareByPosition, file
>>> /Users/rafael/p/llvm/tools/lld/lib/Core/DefinedAtom.cpp, line 90.
>>> 0  lld                      0x0000000105e4f6fe
>>> llvm::sys::PrintStackTrace(__sFILE*) + 46
>>> 1  lld                      0x0000000105e50aab
>>> PrintStackTraceSignalHandler(void*) + 27
>>> 2  lld                      0x0000000105e50ef5 SignalHandler(int) + 565
>>> 3  libsystem_platform.dylib 0x00007fff8ebb4f1a _sigtramp + 26
>>> 4  libsystem_platform.dylib 0x0000000000000002 _sigtramp + 1900327170
>>> 5  lld                      0x0000000105e50adb raise + 27
>>> 6  lld                      0x0000000105e50b92 abort + 18
>>> 7  lld                      0x0000000105e50b71 __assert_rtn + 129
>>> 8  lld                      0x0000000106236eb7
>>> lld::DefinedAtom::compareByPosition(lld::DefinedAtom const*,
>>> lld::DefinedAtom const*) + 231
>>> 9  lld                      0x0000000105f5560b void
>>> std::__1::__sort<bool (*&)(lld::DefinedAtom const*, lld::DefinedAtom
>>> const*), lld::DefinedAtom const**>(lld::DefinedAtom const**,
>>> lld::DefinedAtom const**, bool (*&)(lld::DefinedAtom const*,
>>> lld::DefinedAtom const*)) + 2187
>>> 10 lld                      0x0000000105f525eb void
>>> lld::detail::parallel_quick_sort<std::__1::__wrap_iter<lld::DefinedAtom
>>> const**>, bool (lld::DefinedAtom const*, lld::DefinedAtom
>>> const*)>(std::__1::__wrap_iter<lld::DefinedAtom const**>,
>>> std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>>  const(&)(lld::DefinedAtom const*, lld::DefinedAtom const*),
>>> lld::TaskGroup&, unsigned long) + 459
>>> 11 lld                      0x0000000105f523f1 void
>>> lld::parallel_sort<std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>> (lld::DefinedAtom const*, lld::DefinedAtom
>>> const*)>(std::__1::__wrap_iter<lld::DefinedAtom const**>,
>>> std::__1::__wrap_iter<lld::DefinedAtom const**>, bool
>>>  const(&)(lld::DefinedAtom const*, lld::DefinedAtom const*)) + 385
>>> 12 lld                      0x00000001061c4cb7
>>> lld::elf::OrderPass::perform(std::__1::unique_ptr<lld::MutableFile,
>>> std::__1::default_delete<lld::MutableFile> >&) + 311
>>> 13 lld                      0x0000000105d469a6
>>> lld::PassManager::runOnFile(std::__1::unique_ptr<lld::MutableFile,
>>> std::__1::default_delete<lld::MutableFile> >&) + 454
>>> 14 lld                      0x0000000105d44189
>>> lld::Driver::link(lld::LinkingContext&, llvm::raw_ostream&) + 7065
>>> 15 lld                      0x0000000105d53569
>>> lld::GnuLdDriver::linkELF(int, char const**, llvm::raw_ostream&) + 1113
>>> 16 lld                      0x0000000105d6eade
>>> lld::UniversalDriver::link(int, char const**, llvm::raw_ostream&) + 1454
>>> 17 lld                      0x0000000105d325e6 main + 86
>>> 18 libdyld.dylib            0x00007fff965ee5c9 start + 1
>>> 19 libdyld.dylib            0x000000000000000a start + 1772165698
>>> Stack dump:
>>> 0. Program arguments: lld -target x86_64-linux -o
>>> /Users/rafael/p/obj/tools/lld/test/elf/Output/init_array.test.tmp
>>> /Users/rafael/p/llvm/tools/lld/test/elf/Inputs/init_array.x86-64 -e
>>> __init_array_start -flavor gnu
>>> /Users/rafael/p/obj/tools/lld/test/elf/Output/init_array.test.script:
>>> line 2: 13049 Illegal instruction: 4  lld -flavor gnu -target x86_64-linux
>>> -o /Users/rafael/p/obj/tools/lld/test/elf/Output/init_array.test.tmp
>>> /Users/rafael/p/llvm/tools/lld/test/elf/Inputs/init_array.x86-64 -e
>>> __init_array_start
>>>
>>> --
>>>
>>> ********************
>>> Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..
>>> Testing Time: 2.94s
>>> ********************
>>> Failing Tests (2):
>>>     lld :: elf/X86_64/startGroupEndGroup.test
>>>     lld :: elf/init_array.test
>>>
>>>   Expected Passes    : 616
>>>   Expected Failures  : 1
>>>   Unsupported Tests  : 32
>>>   Unexpected Failures: 2
>>>
>>> On Sat, Jan 31, 2015 at 12:05 AM, Rui Ueyama <ruiu at google.com> wrote:
>>>
>>>> Author: ruiu
>>>> Date: Fri Jan 30 20:05:01 2015
>>>> New Revision: 227666
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=227666&view=rev
>>>> Log:
>>>> ELF: Don't use LayoutPass.
>>>>
>>>> Previously we applied the LayoutPass to order atoms and then
>>>> apply elf::ArrayOrderPass to sort them again. The first pass is
>>>> basically supposed to sort atoms in the normal fashion (which
>>>> is to sort symbols in the same order as the input files).
>>>> The second pass sorts atoms in {init,fini}_array.<priority> by
>>>> priority.
>>>>
>>>> The problem is that the LayoutPass is overkill. It analyzes
>>>> references between atoms to make a decision how to sort them.
>>>> It's slow, hard to understand, and above all, it doesn't seem
>>>> that we need its feature for ELF in the first place.
>>>>
>>>> This patch remove the LayoutPass from ELF pass list. Now all
>>>> reordering is done in elf::OrderPass. That pass sorts atoms by
>>>> {init,fini}_array, and if they are not in the special section,
>>>> they are ordered as the same order as they appear in the command
>>>> line. The new code is far easier to understand, faster, and
>>>> still able to create valid executables.
>>>>
>>>> Unlike the previous layout pass, elf::OrderPass doesn't count
>>>> any attributes of an atom (e.g. permissions) except its
>>>> position. It's OK because the writer takes care of them if we
>>>> have to.
>>>>
>>>> This patch changes the order of final output, although that's
>>>> benign. Tests are updated.
>>>>
>>>> http://reviews.llvm.org/D7278
>>>>
>>>> Added:
>>>>     lld/trunk/lib/ReaderWriter/ELF/OrderPass.h
>>>> Removed:
>>>>     lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp
>>>>     lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h
>>>>     lld/trunk/test/elf/X86_64/orderatoms-by-override.test
>>>> Modified:
>>>>     lld/trunk/include/lld/Core/DefinedAtom.h
>>>>     lld/trunk/lib/Core/DefinedAtom.cpp
>>>>     lld/trunk/lib/ReaderWriter/ELF/CMakeLists.txt
>>>>     lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
>>>>     lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h
>>>>     lld/trunk/test/elf/AArch64/defsym.test
>>>>     lld/trunk/test/elf/Hexagon/dynlib-gotoff.test
>>>>     lld/trunk/test/elf/Hexagon/zerofillquick-sdata.test
>>>>     lld/trunk/test/elf/Mips/dynlib-dynsym-micro.test
>>>>     lld/trunk/test/elf/Mips/dynlib-dynsym.test
>>>>     lld/trunk/test/elf/Mips/got16-micro.test
>>>>     lld/trunk/test/elf/Mips/got16.test
>>>>     lld/trunk/test/elf/Mips/rel-dynamic-02.test
>>>>     lld/trunk/test/elf/Mips/rel-dynamic-11.test
>>>>     lld/trunk/test/elf/check.test
>>>>     lld/trunk/test/elf/dynamic.test
>>>>     lld/trunk/test/elf/gotpcrel.test
>>>>     lld/trunk/test/elf/hexagon-quickdata-sort.test
>>>>     lld/trunk/test/elf/hexagon-quickdata-sortcommon.test
>>>>     lld/trunk/test/elf/ifunc.test
>>>>     lld/trunk/test/elf/quickdata.test
>>>>     lld/trunk/test/elf/tls.test
>>>>     lld/trunk/test/elf/x86-64-dynamic.test
>>>>
>>>> Modified: lld/trunk/include/lld/Core/DefinedAtom.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/DefinedAtom.h?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/include/lld/Core/DefinedAtom.h (original)
>>>> +++ lld/trunk/include/lld/Core/DefinedAtom.h Fri Jan 30 20:05:01 2015
>>>> @@ -349,6 +349,10 @@ public:
>>>>              atomContentType == DefinedAtom::typeGnuLinkOnce);
>>>>    }
>>>>
>>>> +  // Returns true if lhs should be placed before rhs in the final
>>>> output.
>>>> +  static bool compareByPosition(const DefinedAtom *lhs,
>>>> +                                const DefinedAtom *rhs);
>>>> +
>>>>  protected:
>>>>    // DefinedAtom is an abstract base class. Only subclasses can access
>>>>    // constructor.
>>>>
>>>> Modified: lld/trunk/lib/Core/DefinedAtom.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/DefinedAtom.cpp?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/Core/DefinedAtom.cpp (original)
>>>> +++ lld/trunk/lib/Core/DefinedAtom.cpp Fri Jan 30 20:05:01 2015
>>>> @@ -9,11 +9,10 @@
>>>>
>>>>  #include "llvm/Support/ErrorHandling.h"
>>>>  #include "lld/Core/DefinedAtom.h"
>>>> -
>>>> +#include "lld/Core/File.h"
>>>>
>>>>  namespace lld {
>>>>
>>>> -
>>>>  DefinedAtom::ContentPermissions DefinedAtom::permissions() const {
>>>>    // By default base permissions on content type.
>>>>    return permissions(this->contentType());
>>>> @@ -82,6 +81,14 @@ DefinedAtom::ContentPermissions DefinedA
>>>>    llvm_unreachable("unknown content type");
>>>>  }
>>>>
>>>> +bool DefinedAtom::compareByPosition(const DefinedAtom *lhs,
>>>> +                                    const DefinedAtom *rhs) {
>>>> +  const File *lhsFile = &lhs->file();
>>>> +  const File *rhsFile = &rhs->file();
>>>> +  if (lhsFile->ordinal() != rhsFile->ordinal())
>>>> +    return lhsFile->ordinal() < rhsFile->ordinal();
>>>> +  assert(lhs->ordinal() != rhs->ordinal());
>>>> +  return lhs->ordinal() < rhs->ordinal();
>>>> +}
>>>>
>>>>  } // namespace
>>>> -
>>>>
>>>> Removed: lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp?rev=227665&view=auto
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp (original)
>>>> +++ lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.cpp (removed)
>>>> @@ -1,56 +0,0 @@
>>>> -//===- lib/ReaderWriter/ELF/ArrayOrderPass.cpp
>>>> ----------------------------===//
>>>> -//
>>>> -//                             The LLVM Linker
>>>> -//
>>>> -// This file is distributed under the University of Illinois Open
>>>> Source
>>>> -// License. See LICENSE.TXT for details.
>>>> -//
>>>>
>>>> -//===----------------------------------------------------------------------===//
>>>> -
>>>> -#include "ArrayOrderPass.h"
>>>> -#include <algorithm>
>>>> -#include <limits>
>>>> -
>>>> -namespace lld {
>>>> -namespace elf {
>>>> -void ArrayOrderPass::perform(std::unique_ptr<MutableFile> &f) {
>>>> -  auto definedAtoms = f->definedAtoms();
>>>> -
>>>> -  // Move sections need to be sorted into the separate continious
>>>> group.
>>>> -  // That reduces a number of sorting elements and simplifies
>>>> conditions
>>>> -  // in the sorting predicate.
>>>> -  auto last = std::stable_partition(definedAtoms.begin(),
>>>> definedAtoms.end(),
>>>> -                                    [](const DefinedAtom *atom) {
>>>> -    if (atom->sectionChoice() != DefinedAtom::sectionCustomRequired)
>>>> -      return false;
>>>> -
>>>> -    StringRef name = atom->customSectionName();
>>>> -    return name.startswith(".init_array") ||
>>>> name.startswith(".fini_array");
>>>> -  });
>>>> -
>>>> -  std::stable_sort(definedAtoms.begin(), last,
>>>> -                   [](const DefinedAtom *left, const DefinedAtom
>>>> *right) {
>>>> -    StringRef leftSec = left->customSectionName();
>>>> -    StringRef rightSec = right->customSectionName();
>>>> -
>>>> -    // Drop the front dot from the section name and get
>>>> -    // an optional section's number starting after the second dot.
>>>> -    StringRef leftNum = leftSec.drop_front().rsplit('.').second;
>>>> -    StringRef rightNum = rightSec.drop_front().rsplit('.').second;
>>>> -
>>>> -    // Sort {.init_array, .fini_array}[.<num>] sections
>>>> -    // according to their number. Sections without optional
>>>> -    // numer suffix should go last.
>>>> -
>>>> -    uint32_t leftPriority;
>>>> -    uint32_t rightPriority;
>>>> -    if (leftNum.getAsInteger(10, leftPriority))
>>>> -      leftPriority = std::numeric_limits<uint32_t>::max();
>>>> -    if (rightNum.getAsInteger(10, rightPriority))
>>>> -      rightPriority = std::numeric_limits<uint32_t>::max();
>>>> -
>>>> -    return leftPriority < rightPriority;
>>>> -  });
>>>> -}
>>>> -} // end namespace elf
>>>> -} // end namespace lld
>>>>
>>>> Removed: lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h?rev=227665&view=auto
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h (original)
>>>> +++ lld/trunk/lib/ReaderWriter/ELF/ArrayOrderPass.h (removed)
>>>> @@ -1,26 +0,0 @@
>>>> -//===- lib/ReaderWriter/ELF/ArrayOrderPass.h
>>>> ------------------------------===//
>>>> -//
>>>> -//                             The LLVM Linker
>>>> -//
>>>> -// This file is distributed under the University of Illinois Open
>>>> Source
>>>> -// License. See LICENSE.TXT for details.
>>>> -//
>>>>
>>>> -//===----------------------------------------------------------------------===//
>>>> -
>>>> -#ifndef LLD_READER_WRITER_ELF_ARRAY_ORDER_PASS_H
>>>> -#define LLD_READER_WRITER_ELF_ARRAY_ORDER_PASS_H
>>>> -
>>>> -#include "lld/Core/Pass.h"
>>>> -
>>>> -namespace lld {
>>>> -namespace elf {
>>>> -/// \brief This pass sorts atoms in .{init,fini}_array.<priority>
>>>> sections.
>>>> -class ArrayOrderPass : public Pass {
>>>> -public:
>>>> -  ArrayOrderPass() : Pass() {}
>>>> -  void perform(std::unique_ptr<MutableFile> &mergedFile) override;
>>>> -};
>>>> -}
>>>> -}
>>>> -
>>>> -#endif
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/ELF/CMakeLists.txt
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/CMakeLists.txt?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/ELF/CMakeLists.txt (original)
>>>> +++ lld/trunk/lib/ReaderWriter/ELF/CMakeLists.txt Fri Jan 30 20:05:01
>>>> 2015
>>>> @@ -1,5 +1,4 @@
>>>>  add_llvm_library(lldELF
>>>> -  ArrayOrderPass.cpp
>>>>    ELFLinkingContext.cpp
>>>>    Reader.cpp
>>>>    Writer.cpp
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
>>>> +++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Fri Jan 30
>>>> 20:05:01 2015
>>>> @@ -8,12 +8,11 @@
>>>>
>>>>  //===----------------------------------------------------------------------===//
>>>>
>>>>  #include "lld/ReaderWriter/ELFLinkingContext.h"
>>>> -#include "ArrayOrderPass.h"
>>>>  #include "ELFFile.h"
>>>> +#include "OrderPass.h"
>>>>  #include "TargetHandler.h"
>>>>  #include "lld/Core/Instrumentation.h"
>>>>  #include "lld/Core/SharedLibraryFile.h"
>>>> -#include "lld/Passes/LayoutPass.h"
>>>>  #include "lld/Passes/RoundTripYAMLPass.h"
>>>>  #include "llvm/ADT/Triple.h"
>>>>  #include "llvm/Config/config.h"
>>>> @@ -66,8 +65,7 @@ ELFLinkingContext::ELFLinkingContext(
>>>>        _finiFunction("_fini"), _sysrootPath("") {}
>>>>
>>>>  void ELFLinkingContext::addPasses(PassManager &pm) {
>>>> -  pm.add(std::unique_ptr<Pass>(new LayoutPass(registry())));
>>>> -  pm.add(std::unique_ptr<Pass>(new elf::ArrayOrderPass()));
>>>> +  pm.add(std::unique_ptr<Pass>(new elf::OrderPass()));
>>>>  }
>>>>
>>>>  uint16_t ELFLinkingContext::getOutputMachine() const {
>>>>
>>>> Added: lld/trunk/lib/ReaderWriter/ELF/OrderPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OrderPass.h?rev=227666&view=auto
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/ELF/OrderPass.h (added)
>>>> +++ lld/trunk/lib/ReaderWriter/ELF/OrderPass.h Fri Jan 30 20:05:01 2015
>>>> @@ -0,0 +1,70 @@
>>>> +//===- lib/ReaderWriter/ELF/OrderPass.h
>>>> -----------------------------------===//
>>>> +//
>>>> +//                             The LLVM Linker
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open
>>>> Source
>>>> +// License. See LICENSE.TXT for details.
>>>> +//
>>>>
>>>> +//===----------------------------------------------------------------------===//
>>>> +
>>>> +#ifndef LLD_READER_WRITER_ELF_ORDER_PASS_H
>>>> +#define LLD_READER_WRITER_ELF_ORDER_PASS_H
>>>> +
>>>> +#include "lld/Core/Parallel.h"
>>>> +#include <algorithm>
>>>> +#include <limits>
>>>> +
>>>> +namespace lld {
>>>> +namespace elf {
>>>> +
>>>> +/// \brief This pass sorts atoms by file and atom ordinals.
>>>> +/// .{init,fini}_array.<priority> sections are handled specially.
>>>> +class OrderPass : public Pass {
>>>> +public:
>>>> +  void perform(std::unique_ptr<MutableFile> &file) override {
>>>> +    MutableFile::DefinedAtomRange defined = file->definedAtoms();
>>>> +    auto last = std::partition(defined.begin(), defined.end(),
>>>> isInitFini);
>>>> +    parallel_sort(defined.begin(), last, compareInitFini);
>>>> +    parallel_sort(last, defined.end(), DefinedAtom::compareByPosition);
>>>> +  }
>>>> +
>>>> +private:
>>>> +  static bool isInitFini(const DefinedAtom *atom) {
>>>> +    if (atom->sectionChoice() != DefinedAtom::sectionCustomRequired)
>>>> +      return false;
>>>> +    StringRef name = atom->customSectionName();
>>>> +    return name.startswith(".init_array") ||
>>>> name.startswith(".fini_array");
>>>> +  }
>>>> +
>>>> +  static bool compareInitFini(const DefinedAtom *lhs, const
>>>> DefinedAtom *rhs) {
>>>> +    StringRef lhsSec = lhs->customSectionName();
>>>> +    StringRef rhsSec = rhs->customSectionName();
>>>> +
>>>> +    // Drop the front dot from the section name and get
>>>> +    // an optional section's number starting after the second dot.
>>>> +    StringRef lhsNum = lhsSec.drop_front().rsplit('.').second;
>>>> +    StringRef rhsNum = rhsSec.drop_front().rsplit('.').second;
>>>> +
>>>> +    // Sort {.init_array, .fini_array}[.<num>] sections
>>>> +    // according to their number. Sections without optional
>>>> +    // numer suffix should go last.
>>>> +
>>>> +    uint32_t lhsPriority;
>>>> +    uint32_t rhsPriority;
>>>> +    if (lhsNum.getAsInteger(10, lhsPriority))
>>>> +      lhsPriority = std::numeric_limits<uint32_t>::max();
>>>> +    if (rhsNum.getAsInteger(10, rhsPriority))
>>>> +      rhsPriority = std::numeric_limits<uint32_t>::max();
>>>> +
>>>> +    if (lhsPriority != rhsPriority)
>>>> +      return lhsPriority < rhsPriority;
>>>> +
>>>> +    // If both atoms have the same priority, fall back to default.
>>>> +    return DefinedAtom::compareByPosition(lhs, rhs);
>>>> +  }
>>>> +};
>>>> +
>>>> +}
>>>> +}
>>>> +
>>>> +#endif
>>>>
>>>> Modified: lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h (original)
>>>> +++ lld/trunk/lib/ReaderWriter/PECOFF/OrderPass.h Fri Jan 30 20:05:01
>>>> 2015
>>>> @@ -37,15 +37,6 @@
>>>>  namespace lld {
>>>>  namespace pecoff {
>>>>
>>>> -static bool compareByPosition(const DefinedAtom *lhs, const
>>>> DefinedAtom *rhs) {
>>>> -  const File *lhsFile = &lhs->file();
>>>> -  const File *rhsFile = &rhs->file();
>>>> -  if (lhsFile->ordinal() != rhsFile->ordinal())
>>>> -    return lhsFile->ordinal() < rhsFile->ordinal();
>>>> -  assert(lhs->ordinal() != rhs->ordinal());
>>>> -  return lhs->ordinal() < rhs->ordinal();
>>>> -}
>>>> -
>>>>  static bool compare(const DefinedAtom *lhs, const DefinedAtom *rhs) {
>>>>    bool lhsCustom = (lhs->sectionChoice() ==
>>>> DefinedAtom::sectionCustomRequired);
>>>>    bool rhsCustom = (rhs->sectionChoice() ==
>>>> DefinedAtom::sectionCustomRequired);
>>>> @@ -53,13 +44,13 @@ static bool compare(const DefinedAtom *l
>>>>      int cmp =
>>>> lhs->customSectionName().compare(rhs->customSectionName());
>>>>      if (cmp != 0)
>>>>        return cmp < 0;
>>>> -    return compareByPosition(lhs, rhs);
>>>> +    return DefinedAtom::compareByPosition(lhs, rhs);
>>>>    }
>>>>    if (lhsCustom && !rhsCustom)
>>>>      return true;
>>>>    if (!lhsCustom && rhsCustom)
>>>>      return false;
>>>> -  return compareByPosition(lhs, rhs);
>>>> +  return DefinedAtom::compareByPosition(lhs, rhs);
>>>>  }
>>>>
>>>>  class OrderPass : public lld::Pass {
>>>>
>>>> Modified: lld/trunk/test/elf/AArch64/defsym.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/AArch64/defsym.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/AArch64/defsym.test (original)
>>>> +++ lld/trunk/test/elf/AArch64/defsym.test Fri Jan 30 20:05:01 2015
>>>> @@ -12,7 +12,7 @@ CHECK:   Other: 0
>>>>  CHECK:   Section: .text (0x5)
>>>>  CHECK: }
>>>>  CHECK: Symbol {
>>>> -CHECK:   Name: fn (6)
>>>> +CHECK:   Name: fn (11)
>>>>  CHECK:   Value: 0x4001A4
>>>>  CHECK:   Size: 8
>>>>  CHECK:   Binding: Global (0x1)
>>>>
>>>> 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=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Hexagon/dynlib-gotoff.test (original)
>>>> +++ lld/trunk/test/elf/Hexagon/dynlib-gotoff.test Fri Jan 30 20:05:01
>>>> 2015
>>>> @@ -3,6 +3,63 @@ RUN: lld -flavor gnu -target hexagon %p/
>>>>  RUN:   -o %t --output-filetype=yaml -shared --noinhibit-exec
>>>>  RUN: FileCheck -check-prefix=CHECKGOTPLT %s < %t
>>>>
>>>> +              - name:            .PLT0
>>>> +CHECKGOTPLT:    type:            stub
>>>> +CHECKGOTPLT:    content:         [ 00, 40, 00, 00, 1C, C0, 49, 6A, 0E,
>>>> 42, 9C, E2,
>>>> +CHECKGOTPLT:                       4F, 40, 9C, 91, 3C, C0, 9C, 91, 0E,
>>>> 42, 0E, 8C,
>>>> +CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> +CHECKGOTPLT:    alignment:       2^4
>>>> +CHECKGOTPLT:    section-name:    .plt
>>>> +CHECKGOTPLT:    references:
>>>> +CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> +CHECKGOTPLT:        offset:          0
>>>> +                    target:          __got0
>>>> +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,
>>>> +CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> +CHECKGOTPLT:    alignment:       2^4
>>>> +CHECKGOTPLT:    section-name:    .plt
>>>> +CHECKGOTPLT:    references:
>>>> +CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> +CHECKGOTPLT:        offset:          0
>>>> +                    target:          __got_fn
>>>> +CHECKGOTPLT:      - kind:            R_HEX_6_PCREL_X
>>>> +CHECKGOTPLT:        offset:          4
>>>> +                    target:          __got_fn
>>>> +CHECKGOTPLT:        addend:          4
>>>> +              - name:            __plt_fn1
>>>> +CHECKGOTPLT:    type:            stub
>>>> +CHECKGOTPLT:    content:         [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C,
>>>> C0, 8E, 91,
>>>> +CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> +CHECKGOTPLT:    alignment:       2^4
>>>> +CHECKGOTPLT:    section-name:    .plt
>>>> +CHECKGOTPLT:    references:
>>>> +CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> +CHECKGOTPLT:        offset:          0
>>>> +                    target:          __got_fn1
>>>> +CHECKGOTPLT:      - kind:            R_HEX_6_PCREL_X
>>>> +CHECKGOTPLT:        offset:          4
>>>> +                    target:          __got_fn1
>>>> +CHECKGOTPLT:        addend:          4
>>>> +              - name:            __plt_fn2
>>>> +CHECKGOTPLT:    type:            stub
>>>> +CHECKGOTPLT:    content:         [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C,
>>>> C0, 8E, 91,
>>>> +CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> +CHECKGOTPLT:    alignment:       2^4
>>>> +CHECKGOTPLT:    section-name:    .plt
>>>> +CHECKGOTPLT:    references:
>>>> +CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> +CHECKGOTPLT:        offset:          0
>>>> +                    target:          __got_fn2
>>>> +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,
>>>> @@ -69,60 +126,3 @@ 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,
>>>> -CHECKGOTPLT:                       4F, 40, 9C, 91, 3C, C0, 9C, 91, 0E,
>>>> 42, 0E, 8C,
>>>> -CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> -CHECKGOTPLT:    alignment:       2^4
>>>> -CHECKGOTPLT:    section-name:    .plt
>>>> -CHECKGOTPLT:    references:
>>>> -CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> -CHECKGOTPLT:        offset:          0
>>>> -                    target:          __got0
>>>> -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,
>>>> -CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> -CHECKGOTPLT:    alignment:       2^4
>>>> -CHECKGOTPLT:    section-name:    .plt
>>>> -CHECKGOTPLT:    references:
>>>> -CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> -CHECKGOTPLT:        offset:          0
>>>> -                    target:          __got_fn
>>>> -CHECKGOTPLT:      - kind:            R_HEX_6_PCREL_X
>>>> -CHECKGOTPLT:        offset:          4
>>>> -                    target:          __got_fn
>>>> -CHECKGOTPLT:        addend:          4
>>>> -              - name:            __plt_fn1
>>>> -CHECKGOTPLT:    type:            stub
>>>> -CHECKGOTPLT:    content:         [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C,
>>>> C0, 8E, 91,
>>>> -CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> -CHECKGOTPLT:    alignment:       2^4
>>>> -CHECKGOTPLT:    section-name:    .plt
>>>> -CHECKGOTPLT:    references:
>>>> -CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> -CHECKGOTPLT:        offset:          0
>>>> -                    target:          __got_fn1
>>>> -CHECKGOTPLT:      - kind:            R_HEX_6_PCREL_X
>>>> -CHECKGOTPLT:        offset:          4
>>>> -                    target:          __got_fn1
>>>> -CHECKGOTPLT:        addend:          4
>>>> -              - name:            __plt_fn2
>>>> -CHECKGOTPLT:    type:            stub
>>>> -CHECKGOTPLT:    content:         [ 00, 40, 00, 00, 0E, C0, 49, 6A, 1C,
>>>> C0, 8E, 91,
>>>> -CHECKGOTPLT:                       00, C0, 9C, 52 ]
>>>> -CHECKGOTPLT:    alignment:       2^4
>>>> -CHECKGOTPLT:    section-name:    .plt
>>>> -CHECKGOTPLT:    references:
>>>> -CHECKGOTPLT:      - kind:            R_HEX_B32_PCREL_X
>>>> -CHECKGOTPLT:        offset:          0
>>>> -                    target:          __got_fn2
>>>> -CHECKGOTPLT:      - kind:            R_HEX_6_PCREL_X
>>>> -CHECKGOTPLT:        offset:          4
>>>> -                    target:          __got_fn2
>>>> -CHECKGOTPLT:        addend:          4
>>>>
>>>> Modified: lld/trunk/test/elf/Hexagon/zerofillquick-sdata.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Hexagon/zerofillquick-sdata.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Hexagon/zerofillquick-sdata.test (original)
>>>> +++ lld/trunk/test/elf/Hexagon/zerofillquick-sdata.test Fri Jan 30
>>>> 20:05:01 2015
>>>> @@ -9,7 +9,7 @@ CHECKSECTIONSANDSIZE:  Section {
>>>>  CHECKSECTIONSANDSIZE:    Name: .sdata (13)
>>>>  CHECKSECTIONSANDSIZE:    Address: 0x1000
>>>>  CHECKSECTIONSANDSIZE:    Offset: 0x1000
>>>> -CHECKSECTIONSANDSIZE:    Size: 20
>>>> +CHECKSECTIONSANDSIZE:    Size: 24
>>>>  CHECKSECTIONSANDSIZE:  }
>>>>  CHECKSECTIONSANDSIZE:  Section {
>>>>  CHECKSECTIONSANDSIZE:    Name: .bss (20)
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/dynlib-dynsym-micro.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/dynlib-dynsym-micro.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/dynlib-dynsym-micro.test (original)
>>>> +++ lld/trunk/test/elf/Mips/dynlib-dynsym-micro.test Fri Jan 30
>>>> 20:05:01 2015
>>>> @@ -78,7 +78,7 @@
>>>>  # CHECK-GOT:     section-choice:  custom-required
>>>>  # CHECK-GOT:     section-name:    .got
>>>>  # CHECK-GOT:     permissions:     rw-
>>>> -# CHECK-GOT:   - ref-name:        L002
>>>> +# CHECK-GOT:   - ref-name:        L000
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -88,8 +88,8 @@
>>>>  # CHECK-GOT:     references:
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_32_HI16
>>>>  # CHECK-GOT:         offset:          0
>>>> -# CHECK-GOT:         target:          L003
>>>> -# CHECK-GOT:   - ref-name:        L004
>>>> +# CHECK-GOT:         target:          L007
>>>> +# CHECK-GOT:   - ref-name:        L002
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -99,8 +99,8 @@
>>>>  # CHECK-GOT:     references:
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_32_HI16
>>>>  # CHECK-GOT:         offset:          0
>>>> -# CHECK-GOT:         target:          L005
>>>> -# CHECK-GOT:   - ref-name:        L006
>>>> +# CHECK-GOT:         target:          L008
>>>> +# CHECK-GOT:   - ref-name:        L004
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -111,7 +111,7 @@
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_GLOBAL_GOT
>>>>  # CHECK-GOT:         offset:          0
>>>>  # CHECK-GOT:         target:          foo
>>>> -# CHECK-GOT:   - ref-name:        L007
>>>> +# CHECK-GOT:   - ref-name:        L005
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -122,7 +122,7 @@
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_GLOBAL_GOT
>>>>  # CHECK-GOT:         offset:          0
>>>>  # CHECK-GOT:         target:          ext1
>>>> -# CHECK-GOT:   - ref-name:        L008
>>>> +# CHECK-GOT:   - ref-name:        L006
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/dynlib-dynsym.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/dynlib-dynsym.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/dynlib-dynsym.test (original)
>>>> +++ lld/trunk/test/elf/Mips/dynlib-dynsym.test Fri Jan 30 20:05:01 2015
>>>> @@ -74,7 +74,7 @@
>>>>  # CHECK-GOT:     section-choice:  custom-required
>>>>  # CHECK-GOT:     section-name:    .got
>>>>  # CHECK-GOT:     permissions:     rw-
>>>> -# CHECK-GOT:   - ref-name:        L002
>>>> +# CHECK-GOT:   - ref-name:        L000
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -84,8 +84,8 @@
>>>>  # CHECK-GOT:     references:
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_32_HI16
>>>>  # CHECK-GOT:         offset:          0
>>>> -# CHECK-GOT:         target:          L003
>>>> -# CHECK-GOT:   - ref-name:        L004
>>>> +# CHECK-GOT:         target:          L007
>>>> +# CHECK-GOT:   - ref-name:        L002
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -95,8 +95,8 @@
>>>>  # CHECK-GOT:     references:
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_32_HI16
>>>>  # CHECK-GOT:         offset:          0
>>>> -# CHECK-GOT:         target:          L005
>>>> -# CHECK-GOT:   - ref-name:        L006
>>>> +# CHECK-GOT:         target:          L008
>>>> +# CHECK-GOT:   - ref-name:        L004
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -107,7 +107,7 @@
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_GLOBAL_GOT
>>>>  # CHECK-GOT:         offset:          0
>>>>  # CHECK-GOT:         target:          foo
>>>> -# CHECK-GOT:   - ref-name:        L007
>>>> +# CHECK-GOT:   - ref-name:        L005
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>> @@ -118,7 +118,7 @@
>>>>  # CHECK-GOT:       - kind:            LLD_R_MIPS_GLOBAL_GOT
>>>>  # CHECK-GOT:         offset:          0
>>>>  # CHECK-GOT:         target:          ext1
>>>> -# CHECK-GOT:   - ref-name:        L008
>>>> +# CHECK-GOT:   - ref-name:        L006
>>>>  # CHECK-GOT:     type:            got
>>>>  # CHECK-GOT:     content:         [ 00, 00, 00, 00 ]
>>>>  # CHECK-GOT:     alignment:       2^2
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/got16-micro.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/got16-micro.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/got16-micro.test (original)
>>>> +++ lld/trunk/test/elf/Mips/got16-micro.test Fri Jan 30 20:05:01 2015
>>>> @@ -10,8 +10,39 @@
>>>>  # RUN: llvm-objdump -t -disassemble -mattr=micromips %t2 \
>>>>  # RUN:   | FileCheck -check-prefix RAW %s
>>>>
>>>> +# Function glob
>>>> +# YAML:      - name:         main
>>>> +# YAML:        scope:        global
>>>> +# YAML:        content:      [ 5C, FC, 00, 00, 42, 30, 00, 00, 5C, FC,
>>>> 00, 00,
>>>> +# YAML:                        42, 30, 00, 00, 5C, FC, 00, 00, 5C, FC,
>>>> 00, 00,
>>>> +# YAML:                        5C, FC, 00, 00 ]
>>>> +# YAML:        alignment:    4 mod 2^4
>>>> +# YAML:        code-model:   mips-micro
>>>> +# YAML:        references:
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> +# YAML-NEXT:       offset:       0
>>>> +# YAML-NEXT:       target:       L000
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_LO16
>>>> +# YAML-NEXT:       offset:       4
>>>> +# YAML-NEXT:       target:       data_1
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> +# YAML-NEXT:       offset:       8
>>>> +# YAML-NEXT:       target:       L001
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_LO16
>>>> +# YAML-NEXT:       offset:       12
>>>> +# YAML-NEXT:       target:       data_2
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> +# YAML-NEXT:       offset:       16
>>>> +# YAML-NEXT:       target:       L002
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_CALL16
>>>> +# YAML-NEXT:       offset:       20
>>>> +# YAML-NEXT:       target:       L003
>>>> +# YAML-NEXT:     - kind:         R_MICROMIPS_CALL16
>>>> +# YAML-NEXT:       offset:       24
>>>> +# YAML-NEXT:       target:       L004
>>>> +
>>>>  # Local GOT entries:
>>>> -# YAML:       - ref-name:        L001
>>>> +# YAML:       - ref-name:        L000
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -22,7 +53,7 @@
>>>>  # YAML-NEXT:      - kind:            LLD_R_MIPS_32_HI16
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          data_1
>>>> -# YAML-NEXT:  - ref-name:        L002
>>>> +# YAML-NEXT:  - ref-name:        L001
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -33,7 +64,7 @@
>>>>  # YAML-NEXT:      - kind:            LLD_R_MIPS_32_HI16
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          data_2
>>>> -# YAML-NEXT:  - ref-name:        L003
>>>> +# YAML-NEXT:  - ref-name:        L002
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -46,7 +77,7 @@
>>>>  # YAML-NEXT:        target:          data_h
>>>>
>>>>  # Global GOT entries:
>>>> -# YAML-NEXT:  - ref-name:        L004
>>>> +# YAML-NEXT:  - ref-name:        L003
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -60,7 +91,7 @@
>>>>  # YAML-NEXT:      - kind:            R_MIPS_32
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          bar
>>>> -# YAML-NEXT:  - ref-name:        L005
>>>> +# YAML-NEXT:  - ref-name:        L004
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -72,37 +103,6 @@
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          foo
>>>>
>>>> -# Function glob
>>>> -# YAML:      - name:         main
>>>> -# YAML:        scope:        global
>>>> -# YAML:        content:      [ 5C, FC, 00, 00, 42, 30, 00, 00, 5C, FC,
>>>> 00, 00,
>>>> -# YAML:                        42, 30, 00, 00, 5C, FC, 00, 00, 5C, FC,
>>>> 00, 00,
>>>> -# YAML:                        5C, FC, 00, 00 ]
>>>> -# YAML:        alignment:    4 mod 2^4
>>>> -# YAML:        code-model:   mips-micro
>>>> -# YAML:        references:
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> -# YAML-NEXT:       offset:       0
>>>> -# YAML-NEXT:       target:       L001
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_LO16
>>>> -# YAML-NEXT:       offset:       4
>>>> -# YAML-NEXT:       target:       data_1
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> -# YAML-NEXT:       offset:       8
>>>> -# YAML-NEXT:       target:       L002
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_LO16
>>>> -# YAML-NEXT:       offset:       12
>>>> -# YAML-NEXT:       target:       data_2
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_GOT16
>>>> -# YAML-NEXT:       offset:       16
>>>> -# YAML-NEXT:       target:       L003
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_CALL16
>>>> -# YAML-NEXT:       offset:       20
>>>> -# YAML-NEXT:       target:       L004
>>>> -# YAML-NEXT:     - kind:         R_MICROMIPS_CALL16
>>>> -# YAML-NEXT:       offset:       24
>>>> -# YAML-NEXT:       target:       L005
>>>> -
>>>>  # RAW: Disassembly of section .text:
>>>>  # RAW: main:
>>>>  # RAW-NEXT:   164:  5c fc 18 80   lw      $2, -32744($gp)
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/got16.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/got16.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/got16.test (original)
>>>> +++ lld/trunk/test/elf/Mips/got16.test Fri Jan 30 20:05:01 2015
>>>> @@ -8,8 +8,40 @@
>>>>  # RUN: lld -flavor gnu -target mipsel -shared --noinhibit-exec -o %t2
>>>> %t.o
>>>>  # RUN: llvm-objdump -t -disassemble %t2 | FileCheck -check-prefix RAW
>>>> %s
>>>>
>>>> +# Function glob
>>>> +# YAML:  - name:            glob
>>>> +# YAML:    scope:           global
>>>> +# YAML:    content:         [ 00, 00, 84, 8F, 00, 00, 84, 24, 01, 00,
>>>> 84, 8F,
>>>> +# YAML:                       00, 02, 84, 24, 00, 00, 84, 8F, 00, 00,
>>>> 84, 8F,
>>>> +# YAML:                       00, 00, 84, 8F ]
>>>> +# YAML:    alignment:       2^2
>>>> +# YAML:    references:
>>>> +# YAML:      - kind:            R_MIPS_GOT16
>>>> +# YAML:        offset:          0
>>>> +# YAML:        target:          L000
>>>> +# YAML:      - kind:            R_MIPS_LO16
>>>> +# YAML:        offset:          4
>>>> +# YAML:        target:          L009
>>>> +# YAML:      - kind:            R_MIPS_GOT16
>>>> +# YAML:        offset:          8
>>>> +# YAML:        target:          L002
>>>> +# YAML:        addend:          66048
>>>> +# YAML:      - kind:            R_MIPS_LO16
>>>> +# YAML:        offset:          12
>>>> +# YAML:        target:          L009
>>>> +# YAML:        addend:          512
>>>> +# YAML:      - kind:            R_MIPS_GOT16
>>>> +# YAML:        offset:          16
>>>> +# YAML:        target:          L004
>>>> +# YAML:      - kind:            R_MIPS_CALL16
>>>> +# YAML:        offset:          20
>>>> +# YAML:        target:          L005
>>>> +# YAML:      - kind:            R_MIPS_CALL16
>>>> +# YAML:        offset:          24
>>>> +# YAML:        target:          L006
>>>> +
>>>>  # Local GOT entries:
>>>> -# YAML:       - ref-name:        L003
>>>> +# YAML:       - ref-name:        L000
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -19,8 +51,8 @@
>>>>  # YAML-NEXT:    references:
>>>>  # YAML-NEXT:      - kind:            LLD_R_MIPS_32_HI16
>>>>  # YAML-NEXT:        offset:          0
>>>> -# YAML-NEXT:        target:          L006
>>>> -# YAML-NEXT:  - ref-name:        L005
>>>> +# YAML-NEXT:        target:          L009
>>>> +# YAML-NEXT:  - ref-name:        L002
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -30,9 +62,9 @@
>>>>  # YAML-NEXT:    references:
>>>>  # YAML-NEXT:      - kind:            LLD_R_MIPS_32_HI16
>>>>  # YAML-NEXT:        offset:          0
>>>> -# YAML-NEXT:        target:          L006
>>>> +# YAML-NEXT:        target:          L009
>>>>  # YAML-NEXT:        addend:          66048
>>>> -# YAML-NEXT:  - ref-name:        L007
>>>> +# YAML-NEXT:  - ref-name:        L004
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -45,7 +77,7 @@
>>>>  # YAML-NEXT:        target:          hidden
>>>>
>>>>  # Global GOT entries:
>>>> -# YAML-NEXT:  - ref-name:        L008
>>>> +# YAML-NEXT:  - ref-name:        L005
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -59,7 +91,7 @@
>>>>  # YAML-NEXT:      - kind:            R_MIPS_32
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          glob
>>>> -# YAML-NEXT:  - ref-name:        L009
>>>> +# YAML-NEXT:  - ref-name:        L006
>>>>  # YAML-NEXT:    type:            got
>>>>  # YAML-NEXT:    content:         [ 00, 00, 00, 00 ]
>>>>  # YAML-NEXT:    alignment:       2^2
>>>> @@ -71,38 +103,6 @@
>>>>  # YAML-NEXT:        offset:          0
>>>>  # YAML-NEXT:        target:          extern
>>>>
>>>> -# Function glob
>>>> -# YAML:  - name:            glob
>>>> -# YAML:    scope:           global
>>>> -# YAML:    content:         [ 00, 00, 84, 8F, 00, 00, 84, 24, 01, 00,
>>>> 84, 8F,
>>>> -# YAML:                       00, 02, 84, 24, 00, 00, 84, 8F, 00, 00,
>>>> 84, 8F,
>>>> -# YAML:                       00, 00, 84, 8F ]
>>>> -# YAML:    alignment:       2^2
>>>> -# YAML:    references:
>>>> -# YAML:      - kind:            R_MIPS_GOT16
>>>> -# YAML:        offset:          0
>>>> -# YAML:        target:          L003
>>>> -# YAML:      - kind:            R_MIPS_LO16
>>>> -# YAML:        offset:          4
>>>> -# YAML:        target:          L006
>>>> -# YAML:      - kind:            R_MIPS_GOT16
>>>> -# YAML:        offset:          8
>>>> -# YAML:        target:          L005
>>>> -# YAML:        addend:          66048
>>>> -# YAML:      - kind:            R_MIPS_LO16
>>>> -# YAML:        offset:          12
>>>> -# YAML:        target:          L006
>>>> -# YAML:        addend:          512
>>>> -# YAML:      - kind:            R_MIPS_GOT16
>>>> -# YAML:        offset:          16
>>>> -# YAML:        target:          L007
>>>> -# YAML:      - kind:            R_MIPS_CALL16
>>>> -# YAML:        offset:          20
>>>> -# YAML:        target:          L008
>>>> -# YAML:      - kind:            R_MIPS_CALL16
>>>> -# YAML:        offset:          24
>>>> -# YAML:        target:          L009
>>>> -
>>>>  # RAW: Disassembly of section .text:
>>>>  # RAW: glob:
>>>>  # RAW-NEXT:   12c:  18 80 84 8f  lw      $4, -32744($gp)
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/rel-dynamic-02.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/rel-dynamic-02.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/rel-dynamic-02.test (original)
>>>> +++ lld/trunk/test/elf/Mips/rel-dynamic-02.test Fri Jan 30 20:05:01 2015
>>>> @@ -15,8 +15,8 @@
>>>>  #
>>>>  # PLT-SYM:      Relocations [
>>>>  # PLT-SYM-NEXT:   Section (4) .rel.dyn {
>>>> -# PLT-SYM-NEXT:     0x2000 R_MIPS_REL32 T1 0x0
>>>>  # PLT-SYM-NEXT:     0x140 R_MIPS_REL32 T1 0x0
>>>> +# PLT-SYM-NEXT:     0x2000 R_MIPS_REL32 T1 0x0
>>>>  # PLT-SYM-NEXT:   }
>>>>  # PLT-SYM-NEXT: ]
>>>>  #
>>>>
>>>> Modified: lld/trunk/test/elf/Mips/rel-dynamic-11.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/rel-dynamic-11.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/Mips/rel-dynamic-11.test (original)
>>>> +++ lld/trunk/test/elf/Mips/rel-dynamic-11.test Fri Jan 30 20:05:01 2015
>>>> @@ -17,8 +17,8 @@
>>>>  #
>>>>  # PLT-SYM:      Relocations [
>>>>  # PLT-SYM-NEXT:   Section (4) .rel.dyn {
>>>> -# PLT-SYM-NEXT:     0x2000 R_MIPS_REL32 T1 0x0
>>>>  # PLT-SYM-NEXT:     0x150 R_MIPS_REL32 T1 0x0
>>>> +# PLT-SYM-NEXT:     0x2000 R_MIPS_REL32 T1 0x0
>>>>  # PLT-SYM-NEXT:   }
>>>>  # PLT-SYM-NEXT: ]
>>>>  #
>>>>
>>>> Removed: 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=227665&view=auto
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/X86_64/orderatoms-by-override.test (original)
>>>> +++ lld/trunk/test/elf/X86_64/orderatoms-by-override.test (removed)
>>>> @@ -1,8 +0,0 @@
>>>> -# 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 --output-filetype=yaml -o %t
>>>> --noinhibit-exec
>>>> -RUN: FileCheck %s -check-prefix=CHECKORDER < %t
>>>> -
>>>> -CHECKORDER:  - name:            b
>>>> -CHECKORDER:  - name:            a
>>>>
>>>> Modified: lld/trunk/test/elf/check.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/check.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/check.test (original)
>>>> +++ lld/trunk/test/elf/check.test Fri Jan 30 20:05:01 2015
>>>> @@ -8,28 +8,28 @@ RUN:    %p/Inputs/object-test.elf-hexago
>>>>  RUN: FileCheck %s -check-prefix ELF-hexagon < %t1
>>>>
>>>>  ELF-i386: defined-atoms:
>>>> -ELF-i386:   - name:            global_variable
>>>> -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:            global_variable
>>>> +ELF-i386:   - name:            uninitialized_static_variable
>>>>  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:            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:            global_variable
>>>> +ELF-hexagon:   - name:            uninitialized_static_variable
>>>>  ELF-hexagon:   - name:            special_section_func
>>>>  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=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/dynamic.test (original)
>>>> +++ lld/trunk/test/elf/dynamic.test Fri Jan 30 20:05:01 2015
>>>> @@ -9,10 +9,6 @@ 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
>>>> @@ -21,6 +17,10 @@ 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
>>>>
>>>> Modified: lld/trunk/test/elf/gotpcrel.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/gotpcrel.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/gotpcrel.test (original)
>>>> +++ lld/trunk/test/elf/gotpcrel.test Fri Jan 30 20:05:01 2015
>>>> @@ -3,20 +3,19 @@ RUN: lld -flavor gnu -target x86_64-linu
>>>>  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_GOTPCREL
>>>>  YAML:   offset:  3
>>>> -YAML:   target:  [[NULLGOT]]
>>>> +YAML:   target:  [[NULLGOT:[a-zA-Z0-9_]+]]
>>>>  YAML:   kind:    R_X86_64_GOTPCREL
>>>>  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/hexagon-quickdata-sort.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/hexagon-quickdata-sort.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/hexagon-quickdata-sort.test (original)
>>>> +++ lld/trunk/test/elf/hexagon-quickdata-sort.test Fri Jan 30 20:05:01
>>>> 2015
>>>> @@ -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 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
>>>> +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
>>>>
>>>>
>>>> Modified: lld/trunk/test/elf/hexagon-quickdata-sortcommon.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/hexagon-quickdata-sortcommon.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/hexagon-quickdata-sortcommon.test (original)
>>>> +++ lld/trunk/test/elf/hexagon-quickdata-sortcommon.test Fri Jan 30
>>>> 20:05:01 2015
>>>> @@ -2,15 +2,15 @@ RUN: lld -flavor gnu -target hexagon -o
>>>>  RUN:     %p/Inputs/quickdata-sortcommon-test.o.elf-hexagon
>>>>  RUN: llvm-nm -n %t1 | FileCheck %s -check-prefix=quickdataSortCommon
>>>>
>>>> -quickdataSortCommon: 00002000 D AA1
>>>> -quickdataSortCommon: 00002001 D A1
>>>> +quickdataSortCommon: 00002000 D A1
>>>> +quickdataSortCommon: 00002001 D AA1
>>>>  quickdataSortCommon: 00002002 D AAA1
>>>> -quickdataSortCommon: 00002004 D BB1
>>>> -quickdataSortCommon: 00002006 D B1
>>>> +quickdataSortCommon: 00002004 D B1
>>>> +quickdataSortCommon: 00002006 D BB1
>>>>  quickdataSortCommon: 00002008 D BBB1
>>>> -quickdataSortCommon: 0000200c D CC1
>>>> -quickdataSortCommon: 00002010 D C1
>>>> +quickdataSortCommon: 0000200c D C1
>>>> +quickdataSortCommon: 00002010 D CC1
>>>>  quickdataSortCommon: 00002014 D CCC1
>>>> -quickdataSortCommon: 00002018 D DD1
>>>> -quickdataSortCommon: 00002020 D D1
>>>> +quickdataSortCommon: 00002018 D D1
>>>> +quickdataSortCommon: 00002020 D DD1
>>>>  quickdataSortCommon: 00002028 D DDD1
>>>>
>>>> Modified: lld/trunk/test/elf/ifunc.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/ifunc.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/ifunc.test (original)
>>>> +++ lld/trunk/test/elf/ifunc.test Fri Jan 30 20:05:01 2015
>>>> @@ -21,12 +21,6 @@ RUN: | FileCheck %s --check-prefix=SHARE
>>>>
>>>>  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:
>>>> @@ -47,6 +41,12 @@ 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
>>>>
>>>> Modified: lld/trunk/test/elf/quickdata.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/quickdata.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/quickdata.test (original)
>>>> +++ lld/trunk/test/elf/quickdata.test Fri Jan 30 20:05:01 2015
>>>> @@ -1,14 +1,14 @@
>>>>  RUN: lld -flavor gnu -target hexagon --output-filetype=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
>>>>
>>>> Modified: lld/trunk/test/elf/tls.test
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/tls.test?rev=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/tls.test (original)
>>>> +++ lld/trunk/test/elf/tls.test Fri Jan 30 20:05:01 2015
>>>> @@ -9,11 +9,6 @@ RUN:   --noinhibit-exec -e main -static
>>>>
>>>>  // 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
>>>> @@ -30,6 +25,10 @@ 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=227666&r1=227665&r2=227666&view=diff
>>>>
>>>> ==============================================================================
>>>> --- lld/trunk/test/elf/x86-64-dynamic.test (original)
>>>> +++ lld/trunk/test/elf/x86-64-dynamic.test Fri Jan 30 20:05:01 2015
>>>> @@ -8,17 +8,6 @@ RUN: lld -flavor gnu -target x86_64-linu
>>>>  RUN:   %p/Inputs/shared.so-x86-64 --output-filetype=yaml
>>>> --noinhibit-exec \
>>>>  RUN: | FileCheck %s --check-prefix=32S
>>>>
>>>> -// 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
>>>>  CHECK:    references:
>>>> @@ -67,7 +56,16 @@ CHECK:        offset:          12
>>>>                target:          .PLT0
>>>>  CHECK:        addend:          -4
>>>>
>>>> -
>>>> +// 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:shared-library-atoms:
>>>>  CHECK:  - name:            foo
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150201/c6c30e5a/attachment.html>


More information about the llvm-commits mailing list