Commit Graph

6725 Commits

Author SHA1 Message Date
Rafael Espindola 10897f1807 Enable merging of SHF_MERGE sections with linker scripts.
This also fixes the related problem of non SHF_MERGE sections with
different flags not being merged.

Fixes pr30355.

llvm-svn: 281338
2016-09-13 14:23:14 +00:00
Rafael Espindola 28c1597ad9 Refactor duplicated code. NFC.
llvm-svn: 281329
2016-09-13 13:00:06 +00:00
Rafael Espindola 17c35832a0 Turn createKey into a static helper. NFC.
llvm-svn: 281325
2016-09-13 12:25:30 +00:00
Rafael Espindola 540893a2e2 Delete dead code.
We already handle this is createSections.

llvm-svn: 281320
2016-09-13 11:28:22 +00:00
George Rimar e2051efcbe [ELF] - Versionscript: support mangled symbols with the same name.
This is PR30312. Info from bug page:

Both of these symbols demangle to abc::abc():
_ZN3abcC1Ev
_ZN3abcC2Ev
(These would be abc's complete object constructor and base object constructor, respectively.)
however with "abc::abc()" in the version script only one of the two receives the symbol version.

Patch fixes that.
It uses testcase created by Ed Maste (D24306).

Differential revision: https://reviews.llvm.org/D24336

llvm-svn: 281318
2016-09-13 10:45:39 +00:00
Chris Bieneman 5a805df1a5 [CMake] Fix linker-as-ld to symlink instead of copy lld
Summary: This test fails if you're building with BUILD_SHARED_LIBS because the LLVM libraries are found via @rpath. Symlinking instead of copying should be sufficiently robust for the test case.

Reviewers: llvm-commits

Subscribers: davide

Differential Revision: https://reviews.llvm.org/D24476

llvm-svn: 281271
2016-09-12 22:38:43 +00:00
Rui Ueyama 0eb2a1bd7a Add comments.
llvm-svn: 281265
2016-09-12 21:44:29 +00:00
Davide Italiano f6c1d2c158 [MachO] Factor out a fair amount of duplicated code. NFCI.
llvm-svn: 281260
2016-09-12 21:07:26 +00:00
Davide Italiano 3582242aa3 [Cmake] Use Cmake's default RPATH for unittest.
Similarly to what was done in r280791 for llvm/.
This should fix a bunch of failures I saw while
trying a BUILD_SHARED_LIBS build on MacOS.
Still there are some failures, but this is a step
forward.

Thanks a lot to Chris Bieneman for the suggested
fix (in PR30345)

llvm-svn: 281256
2016-09-12 20:44:53 +00:00
Rafael Espindola 7bd37870bc Simplify handling of /DISCARD/. NFC.
llvm-svn: 281222
2016-09-12 16:05:16 +00:00
Rafael Espindola c7e1e03498 Store an ArrayRef for Data in InputSectionData.
llvm-svn: 281210
2016-09-12 13:13:53 +00:00
Rafael Espindola 54f1614ec1 Revert "Revert "Compact InputSectionData from 64 to 48 bytes. NFC.""
This reverts commit r281096.

The previous link errors should be fixed by r281208.

llvm-svn: 281209
2016-09-12 13:06:10 +00:00
Eugene Leviant 99da752980 [ELF/AArch64] Implement some UABS relocs
Differential revision: https://reviews.llvm.org/D24403

llvm-svn: 281202
2016-09-12 10:02:41 +00:00
Davide Italiano 35065193f1 [MachO] Remove code accidentally cut'n'pasted 3 times.
It wasn't harmful, just goofy. It's weird to see how this has
fallen through the crack without anybody noticing for so long.

llvm-svn: 281148
2016-09-10 20:41:26 +00:00
Michael J. Spencer 0cb8a70adc [ELF] Fix memory leak in BinaryFile handling.
llvm-svn: 281129
2016-09-10 01:42:43 +00:00
Hans Wennborg efcc5c4390 Move the contents of test/elf to test/ELF
Having two directories with the same name modulo case does not work well
on Windows. The new test/elf directory was added in r281108. I assume
the intention was to add the test file to the existing test/ELF dir.

llvm-svn: 281115
2016-09-09 22:46:16 +00:00
Michael J. Spencer a9424f39c4 [ELF] Add support for -b binary
Implemented by building an ELF file in memory.

elf, default, and binary match gold behavior.

Differential Revision: https://reviews.llvm.org/D24060

llvm-svn: 281108
2016-09-09 22:08:04 +00:00
Rui Ueyama 478f8eb6ef Add comments.
llvm-svn: 281098
2016-09-09 21:35:38 +00:00
Rafael Espindola 78fe670994 Revert "Compact InputSectionData from 64 to 48 bytes. NFC."
This reverts commit r281084.

The link was failing on some bots. No idea why. I will try to
reproduce it on Monday.

llvm-svn: 281096
2016-09-09 21:20:30 +00:00
Rafael Espindola 82621dcb10 Compact InputSectionData from 64 to 48 bytes. NFC.
llvm-svn: 281084
2016-09-09 19:42:11 +00:00
Saleem Abdulrasool c1b5f19262 test: adjust the GUID
Although the GUID seems to be stable across test runs now, it seems to be
unstable across hosts.  Lets be a bit more lax about the reading of the RSDS
record.

llvm-svn: 281083
2016-09-09 19:41:46 +00:00
Saleem Abdulrasool 88f6407542 COFF: make builds more reproducible
Change the way we calculate the build id to use MD5 to give reproducible build
ids. Previously we would generate random bytes for the build id GUID.

llvm-svn: 281079
2016-09-09 19:26:03 +00:00
George Rimar cd574a5e46 Recommit [ELF] - Versionscript: do not treat non-wildcarded names as wildcards.
Fixed code that was not checked before on windows for me, because of testcases that are
disabled on that platform atm.

Inital commit message:
"[ELF] - Versionscript: do not treat non-wildcarded names as wildcards."
Previously we incorrectly handled cases when symbol name in extern c++ tag
was enclosed in quotes. Next case was treated as wildcard:

GLIBCXX_3.4 {                                                                   
    extern "C++" {  
    "aaa*"
   }
But it should have not. Quotes around aaa here means that we should have do exact
name matching.
That is PR30268 which has name with pointer is interpreted as wildcard by lld:

extern "C++" {                                                              
    "operator delete[](void*)";

Patch fixes the issue.

Differential revision: https://reviews.llvm.org/D24229

llvm-svn: 281049
2016-09-09 14:35:36 +00:00
George Rimar 6368525eea Revert r281045, it broke BB.
Broken BB:
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/27211

llvm-svn: 281046
2016-09-09 14:16:00 +00:00
George Rimar b5e77c47fb Recommit [ELF] - Versionscript: do not treat non-wildcarded names as wildcards.
Fixed code that was not checked by testcases that are disabled on windows.

Inital commit message:
"[ELF] - Versionscript: do not treat non-wildcarded names as wildcards."
Previously we incorrectly handled cases when symbol name in extern c++ tag
was enclosed in quotes. Next case was treated as wildcard:

GLIBCXX_3.4 {                                                                   
    extern "C++" {  
    "aaa*"
   }
But it should have not. Quotes around aaa here means that we should have do exact
name matching.
That is PR30268 which has name with pointer is interpreted as wildcard by lld:

extern "C++" {                                                              
    "operator delete[](void*)";

Patch fixes the issue.

Differential revision: https://reviews.llvm.org/D24229

llvm-svn: 281045
2016-09-09 13:58:07 +00:00
George Rimar 08b1862caf [ELF] - Revert r281038 to see if that unbreaks build bot.
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/19703

llvm-svn: 281041
2016-09-09 12:56:55 +00:00
George Rimar d220384376 [ELF] - Versionscript: do not treat non-wildcarded names as wildcards.
Previously we incorrectly handled cases when symbol name in extern c++ tag
was enclosed in quotes. Next case was treated as wildcard:

GLIBCXX_3.4 {                                                                   
    extern "C++" {  
    "aaa*"
   }
But it should have not. Quotes around aaa here means that we should have do exact
name matching.
That is PR30268 which has name with pointer is interpreted as wildcard by lld:

extern "C++" {                                                              
    "operator delete[](void*)";

Patch fixes the issue.

Differential revision: https://reviews.llvm.org/D24229

llvm-svn: 281038
2016-09-09 12:22:28 +00:00
Eugene Leviant 56b21c869e Linker script: implement AT [ (address) ] for PHDR
Differential revision: https://reviews.llvm.org/D24340

llvm-svn: 281024
2016-09-09 09:46:16 +00:00
Rui Ueyama a60058c8f5 Fix -output option.
Usually, options that are longer than one character can be preceded
either by "-" or "--", but options starting with "o" are exceptions
because they conflict with "-o" option. They have to be preceded by
"--".

llvm-svn: 281004
2016-09-09 00:25:56 +00:00
Rui Ueyama 86c5fb8296 Fix bug in -nostdlib.
We still have to skip a token inside SEARCH_DIR() when -nostdlib is
specified. Previuosly, we didn't skip it, so it caused a parse error.

llvm-svn: 281001
2016-09-08 23:26:54 +00:00
Rui Ueyama c442cff96e Define writeUint and use it. NFC.
llvm-svn: 280994
2016-09-08 21:46:21 +00:00
Davide Italiano e02ba98f8f [ELF] Fix DT_NEEDED value.
Differential Revision: https://reviews.llvm.org/D24363

llvm-svn: 280990
2016-09-08 21:18:38 +00:00
Ed Maste e349b6da2c ELF: clarify error when we don't know the output format
lld differs from GNU ld in that it does not have a built-in default
target emulation. Emulation is always specified via the -m option, or
obtained from the object file(s) being linked. In most cases at least
one ELF object is included in the link, so the emulation is known.

When using lld's (not yet committed) -b binary support with -r, to
convert a binary file into an ELF object we do not have a known
emulation. The error message previously emitted in this case
"-m or at least a .o file required" is accurate but does not offer
much insight. Add text to the error message to give a hint why -m or an
object file is required.

Differential Revision:	https://reviews.llvm.org/D24348

llvm-svn: 280989
2016-09-08 21:06:29 +00:00
Rafael Espindola c0028d3d3b Reduce templating. NFC.
llvm-svn: 280986
2016-09-08 20:47:52 +00:00
Rui Ueyama 881406e787 Define '-undefined foo' as an alias to '-undefined=foo'.
llvm-svn: 280985
2016-09-08 20:35:29 +00:00
Ed Maste 2b68ada188 ELF: Report original emulation name in "unknown emulation" error
A trailing _fbsd is stripped from emulation names, but if the result was
still not a valid emulation the error was somewhat confusing.

For example,

% ld.lld -m elf_amd64_fbsd
unknown emulation: elf_amd64

Use the original emulation name in error messages.

Differential Revision:	https://reviews.llvm.org/D24357

llvm-svn: 280983
2016-09-08 19:36:22 +00:00
Ed Maste 21e2be6403 ELF: accept -m elf_amd64 as an alias for -m elf_x86_64
In the FreeBSD world x86_64 still has its original name, amd64. Accept
it as an alias.

Differential Revision:	https://reviews.llvm.org/D24356

llvm-svn: 280982
2016-09-08 19:30:47 +00:00
Rafael Espindola 868fc9279e Handle globs in global symbol names.
Fixes pr28775.

llvm-svn: 280947
2016-09-08 14:50:55 +00:00
Rafael Espindola 4d1e4d76ee Use a protected destructor instead of a virtual one.
llvm-svn: 280941
2016-09-08 14:11:08 +00:00
Rafael Espindola 042a3f209b Compute section names only once.
This simplifies error handling as there is now only one place in the
code that needs to consider the possibility that the name is
corrupted. Before we would do it in every access.

llvm-svn: 280937
2016-09-08 14:06:08 +00:00
Rafael Espindola 16853bb00f Pack InputSectionData from 72 to 64 bytes. NFC.
llvm-svn: 280925
2016-09-08 12:33:41 +00:00
George Rimar 9fc6143a5b [ELF] - Add virtual destructor to LinkerScriptBase class. NFC.
Absence of it caused a clang warning:
warning: 'lld:🧝:LinkerScriptBase' has virtual functions but non-virtual destructor [-Wnon-virtual-dtor]

At fact we don't need it here because do not destroy this object by
base pointer.

llvm-svn: 280916
2016-09-08 09:59:13 +00:00
Eugene Leviant 36fac7f0d0 Linker script: implement ALIGNOF
Differential revision: https://reviews.llvm.org/D24141

llvm-svn: 280915
2016-09-08 09:08:30 +00:00
Simon Atanasyan 919a58c456 [ELF][MIPS] Fix initialization of TLS-related GOT entries
This patch allows static linking of TLS code. To do that it fixes
GOT entries initialization.

If TLS-related GOT entry created for a preemptible symbol i.e. has
a corresponding dynamic relocation, leave the entry initialized by zero.
Write down adjusted TLS symbol's values otherwise. For the adjustments
calculation use offsets for thread-local storage.

https://www.linux-mips.org/wiki/NPTL

llvm-svn: 280914
2016-09-08 09:07:19 +00:00
Simon Atanasyan af52f6af22 [ELF][MIPS] Update the comment
llvm-svn: 280913
2016-09-08 09:07:12 +00:00
Eugene Leviant 3967ea05a9 Set entry address to 0x0 if no _start symbol
Differential revision: https://reviews.llvm.org/D23925

llvm-svn: 280912
2016-09-08 08:57:51 +00:00
George Rimar 6c55f0e35e [ELF] - Apply clang-format to LinkerScript.cpp, NFC.
llvm-svn: 280911
2016-09-08 08:20:30 +00:00
George Rimar 884e786d38 [ELF] - Linkerscript: simplify access to templated methods from parser.
Previous way of accessing templated methods was a bit bulky,
Patch introduces small interface based solution.

Differential revision: https://reviews.llvm.org/D23872

llvm-svn: 280910
2016-09-08 08:19:13 +00:00
Rui Ueyama 8239617acd Rename test file. NFC.
llvm-svn: 280904
2016-09-08 03:08:05 +00:00
Ed Maste 4d9947ba09 ELF: Add -Qy as ignored option
GCC passes it by default on powerpc64 on FreeBSD. GNU ld claims "this
option is ignored for SVR4 compatibility", so we can ignore it too.

Differential Revision:	https://reviews.llvm.org/D24313

llvm-svn: 280864
2016-09-07 21:10:25 +00:00
Rui Ueyama a3b7546cf7 Fix inconsistent indentation.
llvm-svn: 280860
2016-09-07 20:50:41 +00:00
Rafael Espindola 0a75850fa7 Move field to the base class. NFC.
llvm-svn: 280858
2016-09-07 20:41:19 +00:00
Rafael Espindola 664c6522fa Delete dead field. NFC.
llvm-svn: 280856
2016-09-07 20:37:34 +00:00
Ed Maste 5ad1cbeecb ELF: add version script void function test case
After r280733 we use LLVM's demangler in lld. As a result we no longer
have a discrepancy between f() and f(void) on FreeBSD (due to an issue
with FreeBSD's system demangler).

Restore a test case for a void arg function.

Differential Revision:	https://reviews.llvm.org/D24305

llvm-svn: 280831
2016-09-07 17:51:00 +00:00
Rafael Espindola 4a2350e841 Enable test on windows.
It looks like it was disable just because we were missing a demangler.

llvm-svn: 280805
2016-09-07 12:09:10 +00:00
George Rimar bcbbb3987d [ELF] - Sort command line options. NFC.
llvm-svn: 280803
2016-09-07 11:43:18 +00:00
George Rimar a14b13d867 [ELF] - Linkerscript: create multiple output sections for inputs with different attributes.
Previously we combined sections by name if linkerscript was used.
For that we had to disable SHF_MERGE handling temporarily, but then
found that implementing it properly will require additional complexity layers like
subsections or something.
At the same time looks we can live with multiple output sections approach for now.
That patch do this change.

Differential revision: https://reviews.llvm.org/D24127

llvm-svn: 280801
2016-09-07 10:46:07 +00:00
George Rimar 51da9c7178 [ELF] - Fix for: PR29093 - version script does not support [chars] wildcards
GNU ld supports [chars] wildcards in version scripts, to match a single instance of any of the chars.
Here is an extern example from libstdc++'s version script in FreeBSD:

extern "C++"
{
...

std::locale::_[T-Za-z]*;                                                                                                       
std::[A-Zm]*;                                                            
std::n[^u]*;                                                             
std::nu[^m]*;                                                            
std::num[^e]*;
...

}

Patch adds support for scripts above. This is PR29093.

Differential revision: https://reviews.llvm.org/D23803

llvm-svn: 280799
2016-09-07 10:19:44 +00:00
George Rimar 8825a5c6ef [ELF] - Enable testcases that uses demangler to run under windows and escape quotes around "C++".
Previously testcases were enabled only for shell.
r280733 added c++ itanium demangler to lld and we can enable them fully.

Also this change make quotes to be escaped:

extern "C++" -> extern \"C++\", which worked before just because we are dropping tokens 
quotes internally at this moment.

llvm-svn: 280797
2016-09-07 09:59:29 +00:00
Eugene Leviant db741e7203 Support ABSOLUE keyword in symbol assignments
This patch allows making section defined symbols absolute:
.foo : {
  begin_foo = ABSOLUTE(.);
  *(.foo)
}

Differential revision: https://reviews.llvm.org/D24135

llvm-svn: 280788
2016-09-07 07:08:43 +00:00
Rui Ueyama adcdb664cb Simplify a boolean expression by using the De Morgan's law.
llvm-svn: 280766
2016-09-06 22:50:48 +00:00
Rafael Espindola 5b0fb8f4d5 Fix shared library build.
llvm-svn: 280753
2016-09-06 21:06:55 +00:00
Rafael Espindola d1942133e8 Use the demangler in llvm.
llvm-svn: 280733
2016-09-06 19:17:14 +00:00
Petr Hosek 5baa1c7641 [ELF] Add support for -no-gc-sections flag
This flag is supported by both BFD ld and gold and is occasionally
used to negate the effect of -gc-sections flag.

Differential Revision: https://reviews.llvm.org/D24270

llvm-svn: 280729
2016-09-06 18:28:49 +00:00
Rui Ueyama 25150e8b0d Add a comment.
llvm-svn: 280724
2016-09-06 17:46:43 +00:00
Rafael Espindola 719f55d379 Mark R_GOTREL_FROM_END as a relative expression.
Fixes pr30282.

llvm-svn: 280709
2016-09-06 13:57:15 +00:00
George Rimar ff1f29e0f6 [ELF] - Linkerscript: implemented FILL command as alias for =fillexpr
Patch implements FILL just as alias for =fillexpr. 
This allows to make implementation much shorted and simpler than D24186.

Differential revision: https://reviews.llvm.org/D24227

llvm-svn: 280708
2016-09-06 13:51:57 +00:00
Simon Atanasyan 643729d277 [ELF][MIPS] Support R_MIPS_TLS_DTPREL64 / R_MIPS_TLS_TPREL64 relocations calculation
llvm-svn: 280666
2016-09-05 15:42:43 +00:00
Simon Atanasyan 875951eceb [ELF][MIPS] Support R_MIPS_TLS_DTPREL32 / R_MIPS_TLS_TPREL32 relocations calculation
llvm-svn: 280665
2016-09-05 15:42:39 +00:00
Simon Atanasyan d9ea656021 [ELF][MIPS] Do not create a hidden definition for __tls_get_addr on MIPS
On most architectures the linker is required to optimize away any
references to __tls_get_addr in case of static linking. As usual
a special case is MIPS - libc defines __tls_get_addr itself because
there are no TLS optimizations for this architecture.

llvm-svn: 280664
2016-09-05 15:42:29 +00:00
Simon Atanasyan 65b2461cfd [ELF][MIPS] Do not emit DT_REL[A]COUNT for MIPS targets
It looks like MIPS dynamic loader does not support RELCOUNT tag.
Both gold/bfd linkers does not emit this tag on MIPS. I will investigate
the problem further but for now it is better to behave like GNU linkers.

llvm-svn: 280630
2016-09-04 17:40:12 +00:00
Duncan P. N. Exon Smith 9f71057d69 ReaderWriter: Use ilist_noalloc_traits for TrieEdge, NFC
Adopt r280128 in lld, specializing ilist_alloc_traits rather than
reinventing the wheel.

llvm-svn: 280566
2016-09-03 01:29:36 +00:00
Rui Ueyama dad2b88c7d Update comments.
llvm-svn: 280548
2016-09-02 22:15:08 +00:00
Simon Atanasyan eaeafb2b4f [ELF] PR30221 - linker script expression parser does not accept '~'
The patch adds support for both '-' and '~' unary expressions. Also it
brings support for signed numbers is expressions.

https://llvm.org/bugs/show_bug.cgi?id=30221

Differential revision: https://reviews.llvm.org/D24128

llvm-svn: 280546
2016-09-02 21:54:35 +00:00
George Rimar c91930a17f [ELF] - Use std::regex instead of hand written logic in elf::globMatch()
Use std::regex instead of hand written matcher.

Patch based on code and ideas of Rui Ueyama.

Differential revision: https://reviews.llvm.org/D23829

llvm-svn: 280544
2016-09-02 21:17:20 +00:00
Rui Ueyama ffdc16051f Move a test file to the right place.
llvm-svn: 280541
2016-09-02 20:46:06 +00:00
Rui Ueyama 66ba9f08b9 Remove useless file prefix.
Differential Revision: https://reviews.llvm.org/D24207

llvm-svn: 280540
2016-09-02 20:40:53 +00:00
Rui Ueyama b397ab5895 Use od instead of hexdump.
od is defined by POSIX and exists since version 1 AT&T Unix.
hexdump is not part of any standard as far as I know.
So od is a better choice than hexdump.

Differential Revision: https://reviews.llvm.org/D24205

llvm-svn: 280536
2016-09-02 20:20:04 +00:00
Rui Ueyama 6af4016f6d Simplify. NFC.
llvm-svn: 280533
2016-09-02 19:49:27 +00:00
Rui Ueyama fee70ea8c6 Rename UnresolvedPolicy::Error -> UnresolvedPolicy::ReportError.
"Error" looks like it is indicating a parse error. "Error" actually
instructs the later process to report an error if there's an error
condition. Thus the new name.

llvm-svn: 280529
2016-09-02 19:36:29 +00:00
Rui Ueyama 6c7ad13f89 Add -nostdlib.
llvm-svn: 280528
2016-09-02 19:20:33 +00:00
Rui Ueyama a27eeccade Dispatch without hash table lookup.
Cmd used to be the single central place to dispatch. It is not longer
the case because we have a logic for readProvideOrAssignment().
This patch removes the hash table so that evrything is in a single
function. This is slightly verbose but should improve readability.

Differential Revision: https://reviews.llvm.org/D24200

llvm-svn: 280524
2016-09-02 18:52:41 +00:00
Rui Ueyama 626e0b08ac Add comments.
llvm-svn: 280515
2016-09-02 18:19:00 +00:00
Rui Ueyama fa12b8bd1a Remove temoprary files.
Previously, we created temporary files using llvm::sys::fs::createTemporaryFile
and removed them using llvm::FileRemover. This is error-prone as it is easy to
forget creating FileRemover instances after creating temporary files.
There is actually a temporary file leak bug.

This patch introduces a new class, TemporaryFile, to manage temporary files
in the RAII style.

Differential Revision: https://reviews.llvm.org/D24176

llvm-svn: 280510
2016-09-02 17:34:17 +00:00
Rui Ueyama 951cfb6aae Fix potential test failures.
Windows does not allow opened files to be removed. This patch
fixes two types of errors.

 - Output file being the same as input file. Because LLD itself
   holds a file descriptor of the input file, it cannot create an
   output file with the same name as a new file.

 - Removing files before releasing MemoryBuffer objects.

These tests are not failing no because MemoryBuffer happens to
decide not to use mmap on these files. But we shouldn't rely on
that behavior.

llvm-svn: 280507
2016-09-02 17:19:28 +00:00
George Rimar 9f2f7ad98b [ELF] - Linkerscript: add support for suffixes in numbers.
Both bfd and gold accept:
foo = 1K;
bar = 1M;
zed = 1H;

And lowercase forms: k, m, h.
Patch adds support for that.

Differential revision: https://reviews.llvm.org/D24194

llvm-svn: 280494
2016-09-02 16:01:42 +00:00
George Rimar b952ece2df [ELF] - Fix for: bug 30237 - lld does not implement -f option
FreeBSD's libstdc++ build (used on tier-2 architectures) uses GNU ld's 
-f <name> option, which sets the DT_AUXILIARY field to the specified name.
Multiple -f options may be specified and the DT_AUXILIARY entries 
will be added in the order in which they appear.

Patch implements that option.

Differential revision: https://reviews.llvm.org/D24139

llvm-svn: 280475
2016-09-02 09:13:05 +00:00
Rui Ueyama 8a425f03dd Add comments.
llvm-svn: 280423
2016-09-01 22:48:05 +00:00
Petr Hosek fdfcb796e1 [ELF] Do not omit debug sections when computing build-id
The primary use of build-id is in debugging, hence omitting debug
sections when computing it significantly reduces its usability as
changes in debug section content wouldn't alter the build-id.

Differential Revision: https://reviews.llvm.org/D24120

llvm-svn: 280421
2016-09-01 22:43:03 +00:00
Rafael Espindola d59509eecc Add missing REQUIRES.
llvm-svn: 280375
2016-09-01 14:59:11 +00:00
Rafael Espindola 3a9eef1670 Sign extend a value before passing it to the Target.
This is what InputSectionBase<ELFT>::relocate does and we need to be
consistent. The other option would be to be more explicit about which
relocations are signed and which are not, and sign extend only when
appropriated. That would require extending the target interface.

llvm-svn: 280366
2016-09-01 13:52:52 +00:00
Eugene Leviant 97403d15ee Eliminate LayoutInputSection class
Previously we used LayoutInputSection class to correctly assign
symbols defined in linker script. This patch removes it and uses
pointer to preceding input section in SymbolAssignment class instead.

Differential revision: https://reviews.llvm.org/D23661

llvm-svn: 280348
2016-09-01 09:55:57 +00:00
Rafael Espindola 79202c378f Fix the implementation of R_386_GOTPC and R_386_GOTOFF.
They were both pointing to the start of the got, not the end.

Fixes pr28924.

llvm-svn: 280310
2016-08-31 23:24:11 +00:00
Rafael Espindola 7f4f9cd546 Use getSize to find the size of a section. NFC.
llvm-svn: 280305
2016-08-31 23:01:13 +00:00
Rui Ueyama 7caf48cc5b Initialize RelativeRel for AMDGPU.
Target->RelativeRel is used for all platforms, but AMDGPU did
not send that member.

Fixes bug 30227 - RelativeRel is used, but not initialized for AMDGPU.

Differential Revision: https://reviews.llvm.org/D24100

llvm-svn: 280291
2016-08-31 21:04:25 +00:00
Rui Ueyama 95769b4a29 Linker script: support VERSION command.
Summary:
VERSION commands define symbol versions. The grammar of the
commnad is as follows

  VERSION { version-script-commands }

where version-script-commands is

  [ name ] { version-definitions }.

Note that we already support version-script-commands because
it is being used for version script command.

This patch is based on George's patch https://reviews.llvm.org/D23609

Reviewers: grimar

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D24089

llvm-svn: 280284
2016-08-31 20:03:54 +00:00
Ivan Krasin 8baccc2f19 Fix UBSan bot by not passing NULL into memcpy src.
Summary:
UBSan complains like the following:
tools/lld/COFF/Writer.cpp:97:15: runtime error: null pointer passed as argument 2, which is declared to never be null

The reason is that the vector could be empty.

Reviewers: rsmith

Subscribers: Eugene.Zelenko, kcc

Differential Revision: https://reviews.llvm.org/D24050

llvm-svn: 280259
2016-08-31 17:23:05 +00:00
Petr Hosek e5d3ca5031 [ELF] Linkerscript: define symbols outside SECTIONS
Symbol assignments outside of SECTIONS command need to be created
even when SECTIONS command is not used.

Differential Revision: https://reviews.llvm.org/D23751

llvm-svn: 280252
2016-08-31 15:31:17 +00:00
Rafael Espindola 0509876f3f Remove redundant argument. NFC.
llvm-svn: 280243
2016-08-31 13:49:23 +00:00
Rafael Espindola 8db87291ef Internalize common variables.
Before this lld was always creating common symbols itself. It worked,
but prevented them from being internalized when possible.

Now it preserves common symbols is the bitcode and they are internalized.

Fixes pr30184.

llvm-svn: 280242
2016-08-31 13:42:08 +00:00