summaryrefslogtreecommitdiffstats
path: root/lld
Commit message (Collapse)AuthorAgeFilesLines
...
* [LLD] Only increase LMARegion if different from MemRegionGeorge Rimar2018-08-023-1/+37
| | | | | | | | | | | | Patch by Konstantin Schwarz! If both the MemRegion and LMARegion are set for an output section in a linker script, we should only increase the LMARegion if it is different from the MemRegion. Otherwise, we reserve the memory twice. Differential revision: https://reviews.llvm.org/D50065 llvm-svn: 338684
* [LLD] - Improve handling of AT> linker script commandsGeorge Rimar2018-08-023-5/+48
| | | | | | | | | | | | | Patch by Konstantin Schwarz! The condition to create a new phdr must also check the usage of "AT>" linker script command, and create a new PT_LOAD header if a new LMARegion is used. This fixes PR38307 Differential revision: https://reviews.llvm.org/D50052 llvm-svn: 338679
* Re-submit r338596 with a bug fix and a test.Rui Ueyama2018-08-012-7/+5
| | | | llvm-svn: 338647
* Update for DWARF API changeReid Kleckner2018-08-012-3/+3
| | | | llvm-svn: 338642
* lld-link: Remove /msvclto optionNico Weber2018-08-017-240/+0
| | | | | | | | | | | This was useful for LTO bringup in lld-link while lld couldn't write PDBs. Now that it can, this should no longer be needed. Hopefully the flag is obscure enough and recent enough, that nobody uses it – but if somebody should use it, they should be able to just stop passing it and things should continue to work. https://reviews.llvm.org/D50139 llvm-svn: 338615
* Revert r338596: Simplify. NFC.Rui Ueyama2018-08-011-4/+7
| | | | | | | This reverts commit r338596 because it contained a functional change. The patch accidentally replaced StringRef::startswith with the exact match. llvm-svn: 338600
* Simplify. NFC.Rui Ueyama2018-08-011-7/+4
| | | | llvm-svn: 338596
* Update docs version and clear release notes after 8.0.0 version bumpHans Wennborg2018-08-012-5/+5
| | | | llvm-svn: 338558
* Test CommitOwen Reynolds2018-08-011-1/+0
| | | | | | Removal of extra line llvm-svn: 338533
* [LLD][ELF] - Apply clang-format to InputSections.cpp. NFC.George Rimar2018-08-011-3/+3
| | | | llvm-svn: 338498
* [LLD][ELF] - Removed excessive llvm:: prefix. NFC.George Rimar2018-08-011-6/+4
| | | | llvm-svn: 338497
* Allow oformat to accept format starting with elf as acceptable format. ↵Rumeet Dhindsa2018-07-312-0/+4
| | | | | | | | | | isOutputFormatBinary returns false in such case. Example: --oformat elf64-x86-64 Differential Revision: https://reviews.llvm.org/D50105 llvm-svn: 338445
* [lld] Fix test RUN commands so they don't fail when run in a read-only ↵David L. Jones2018-07-311-6/+6
| | | | | | | | | | filesystem. Some test setups run tests in a read-only path, which means that opening the default output path (a.out) for write will fail. This change adds appropriate -o flags so the tests will not fail spuriously. llvm-svn: 338440
* ELF: Add libcall symbols to the link when LTO is being used.Peter Collingbourne2018-07-313-3/+45
| | | | | | | | | | | | If any of our inputs are bitcode files, the LTO code generator may create references to certain library functions that might not be explicit in the bitcode file's symbol table. If any of those library functions are defined in a bitcode file in an archive member, we need to arrange to use LTO to compile those archive members by adding them to the link beforehand. Differential Revision: https://reviews.llvm.org/D50017 llvm-svn: 338434
* Simplify. NFC.Rui Ueyama2018-07-312-3/+2
| | | | llvm-svn: 338409
* Make ICF log output order deterministic.Rui Ueyama2018-07-312-9/+3
| | | | | | | | | | This patch does the same thing as r338153 for COFF. Note that this patch affects only the order of log messages. The output file is already deterministic. Differential Revision: https://reviews.llvm.org/D50023 llvm-svn: 338406
* [LLD][ELF] - ICF: Check we do not fold sections which relocations reffering ↵George Rimar2018-07-312-0/+24
| | | | | | | | | | | to absolute symbols with a different values. This adds a test for the following uncovered piece of code: https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L263 Without that lines we would crash. llvm-svn: 338379
* [ELF][ARM] Implement support for Tag_ABI_VFP_argsPeter Smith2018-07-3111-1/+241
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Tag_ABI_VFP_args build attribute controls the procedure call standard used for floating point parameters on ARM. The values are: 0 - Base AAPCS (FP Parameters passed in Core (Integer) registers 1 - VFP AAPCS (FP Parameters passed in FP registers) 2 - Toolchain specific (Neither Base or VFP) 3 - Compatible with all (No use of floating point parameters) If the Tag_ABI_VFP_args build attribute is missing it has an implicit value of 0. We use the attribute in two ways: - Detect a clash in calling convention between Base, VFP and Toolchain. we follow ld.bfd's lead and do not error if there is a clash between an implicit Base AAPCS caused by a missing attribute. Many projects including the hard-float (VFP AAPCS) version of glibc contain assembler files that do not use floating point but do not have Tag_ABI_VFP_args. - Set the EF_ARM_ABI_FLOAT_SOFT or EF_ARM_ABI_FLOAT_HARD ELF header flag for Base or VFP AAPCS respectively. This flag is used by some ELF loaders. References: - Addenda to, and Errata in, the ABI for the ARM Architecture for Tag_ABI_VFP_args - Elf for the ARM Architecture for ELF header flags Fixes PR36009 Differential Revision: https://reviews.llvm.org/D49993 llvm-svn: 338377
* [LLD][ELF] - ICF: add test case testing we do not fold sections with the ↵George Rimar2018-07-311-0/+15
| | | | | | | | | | | different flags. NFCI. Previously the following condition was not tested at all: https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L300 Patch adds a test for `A->Flags != B->Flags` part. llvm-svn: 338375
* windows_support.rst: Add links for downloadingHans Wennborg2018-07-311-0/+7
| | | | llvm-svn: 338363
* index.rst: pe/coff does support pdbs nowHans Wennborg2018-07-311-1/+1
| | | | llvm-svn: 338362
* [docs] Sort ld.lld.1 optionsFangrui Song2018-07-301-43/+43
| | | | | | | | | | Reviewers: ruiu Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D50022 llvm-svn: 338326
* [docs] Add missing options to ld.lld.1Fangrui Song2018-07-301-24/+30
| | | | | | Differential Revision: https://reviews.llvm.org/D49938 llvm-svn: 338320
* [docs] Update ld.lld.1Fangrui Song2018-07-302-4/+10
| | | | llvm-svn: 338275
* [AArch64] Support execute-only LOAD segments.David Bolvansky2018-07-306-0/+62
| | | | | | | | | | | | | | | | | | | Summary: This adds an LLD flag to mark executable LOAD segments execute-only for AArch64 targets. In AArch64 the expectation is that code is execute-only compatible, so this just adds a linker option to enforce this. Patch by: ivanlozano (Ivan Lozano) Reviewers: srhines, echristo, peter.smith, eugenis, javed.absar, espindola, ruiu Reviewed By: ruiu Subscribers: dokyungs, emaste, arichardson, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D49456 llvm-svn: 338271
* [ELF] - Implement SHT_SYMTAB_SHNDX (.symtab_shndxr) section.George Rimar2018-07-305-35/+109
| | | | | | | | | | | | | | | | This is relative to https://bugs.llvm.org//show_bug.cgi?id=38119. SHT_SYMTAB section is able to keep symbols with output section indices up to 0xff00 (SHN_LORESERVE). But if we have indices that are greater than that (PR shows that it might happen), we need to use SHT_SYMTAB_SHNDX extended section. It was not supported by LLD. Description of the SHT_SYMTAB_SHNDX section is here: https://docs.oracle.com/cd/E19683-01/817-3677/chapter6-94076/index.html. Differential revision: https://reviews.llvm.org/D49541 llvm-svn: 338247
* [ELF][HEXAGON] Add R_HEX_32_6_X and R_HEX_12_XSid Manning2018-07-292-0/+13
| | | | | | And add a test. llvm-svn: 338213
* Reland r338088, "ELF: Make --print-icf-sections output deterministic."Peter Collingbourne2018-07-272-32/+27
| | | | | | | | | | | | | | | | | | | | The xxHash64 function has been made unsigned-char-independent, so we can reland this change now. Original commit message: > The icf-safe.s test currently fails on 32-bit platforms because it uses > the --print-icf-sections flag and depends on the output appearing in > a specific order. However, this flag causes the output to depend on > the order of the sections in the Sections array, which depends on the > hash values returned from hash_combine, which happen to be different > for that test between 32-bit and 64-bit platforms. > > This change makes the output deterministic by using xxHash64 instead of > hash_combine. Differential Revision: https://reviews.llvm.org/D49877 llvm-svn: 338153
* Revert "ELF: Make --print-icf-sections output deterministic."Ilya Biryukov2018-07-272-23/+28
| | | | | | | This reverts commit r338088. To unbreak our integrate. The resulting lld output is different if compiled with '-funsigned-char'. llvm-svn: 338110
* ELF: Make --print-icf-sections output deterministic.Peter Collingbourne2018-07-262-28/+23
| | | | | | | | | | | | | | | | The icf-safe.s test currently fails on 32-bit platforms because it uses the --print-icf-sections flag and depends on the output appearing in a specific order. However, this flag causes the output to depend on the order of the sections in the Sections array, which depends on the hash values returned from hash_combine, which happen to be different for that test between 32-bit and 64-bit platforms. This change makes the output deterministic by using xxHash64 instead of hash_combine. Differential Revision: https://reviews.llvm.org/D49877 llvm-svn: 338088
* [COFF] Handle comdat sections without leader symbolsMartin Storsjo2018-07-262-0/+28
| | | | | | | | | | | | | | | | | Discard them unless they have been associated by other means (yet uimplemented). According to MS link.exe, such sections are illegal, but MinGW setups use them in their take on associative comdats. This avoids leaving references to the bogus SectionChunk* PendingComdat, which cannot be dereferenced. This fixes PR38183. Differential Revision: https://reviews.llvm.org/D49653 llvm-svn: 338064
* [COFF] clean up global resources after completionRui Ueyama2018-07-261-0/+3
| | | | | | | | | | | | | Patch by Andrew Kelley. Previously, running lld::coff::link() twice in the same process would access stale pointers because of these global variables not being reset. After this patch, lld::coff::link() can be called any number of times, just like its ELF and MACH-O counterparts. Differential Revision: https://reviews.llvm.org/D49856 llvm-svn: 338042
* [ELF] Fix linker-script-in-search-path.sFangrui Song2018-07-251-3/+3
| | | | llvm-svn: 337983
* [ELF] Make linker-script-in-search-path.s robust per r337972Fangrui Song2018-07-251-2/+2
| | | | llvm-svn: 337975
* Make a test more robust.Rui Ueyama2018-07-251-3/+3
| | | | | | | Previously, this test fails if there's other test that happens to create "t.script" in the current directory. llvm-svn: 337972
* [ELF] Use search paths for --version-script=Fangrui Song2018-07-255-9/+23
| | | | | | | | | | | | Summary: This behavior matches ld.bfd -Ld --version-script=t.script a.o Reviewers: ruiu, espindola Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D49820 llvm-svn: 337969
* ELF: Do not ICF SHF_LINK_ORDER sections.Peter Collingbourne2018-07-252-0/+23
| | | | | | | | | | | | | | | | | | We are already ICF'ing these sections as a unit with their dependent sections, so they don't need to be considered for ICF individually. This change also "fixes" slowness caused by our quadratic-in-group-size relocation segregation algorithm on 32-bit ARM platforms with unwind data and ICF on rodata. In this scenario almost every function's .ARM.exidx is identical except for the targets of the relocations that refer to the function and its .ARM.extab, which causes almost all of the program's .ARM.exidx sections to be initially added to the same class, which causes us to compare every such section with every other such section. Differential Revision: https://reviews.llvm.org/D49716 llvm-svn: 337967
* Fix error messages for bad symbols.Rui Ueyama2018-07-242-13/+53
| | | | | | | | | Previously, the error messages didn't contain symbol name because we didn't read a symbol name for these error messages. Differential Revision: https://reviews.llvm.org/D49762 llvm-svn: 337863
* [ELF][HEXAGON] Add R_HEX_B15_PCREL_X relocationSid Manning2018-07-242-0/+9
| | | | | | | | Update testcase Differential Revision: https://reviews.llvm.org/D49567 llvm-svn: 337829
* [ELF][MIPS] Fix primary GOT sometimes overflowing by one or two wordsSimon Atanasyan2018-07-243-1/+95
| | | | | | | | | | | | | | | | If we fail to merge a secondary GOT with the primary GOT but so far only one merged GOT has been created (the primary one), the final element in MergedGots is the primary GOT. Thus we should not try to merge with this final element passing IsPrimary=false, since this will ignore the fact that the destination GOT does in fact need a header, and those extra two entries can be enough to allow the merge to incorrectly occur. Instead we should check for this case before attempting the second merge. Patch by James Clarke. Differential revision: https://reviews.llvm.org/D49422 llvm-svn: 337810
* [WebAssembly] Add support for --whole-archive.Sam Clegg2018-07-235-14/+105
| | | | | | | | Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D49706 llvm-svn: 337777
* Revert r337638, "ELF: Make sections with KeepUnique bit eligible for ICF."Peter Collingbourne2018-07-232-27/+5
| | | | | | | | | | | | | | | | | | The gold behaviour with regard to --keep-unique is arguably a bug. I also noticed a bug in my patch, which is that we mislink the following program with --icf=safe by merging f3 and f4: void f1() {} void f2() {} __attribute__((weak)) void* f3() { return f1; } __attribute__((weak)) void* f4() { return f2; } int main() { printf("%p %p\n", f3(), f4()); } llvm-svn: 337729
* [LLD] Add llvm-objcopy to test dependencies. NFC.Andrew Ng2018-07-231-3/+3
| | | | | | | | Dependency on llvm-objcopy was introduced by r337429. Also sorted the list of dependencies. llvm-svn: 337693
* [ELF] Fix handling of FDE negative relative PC addrAndrew Ng2018-07-234-1/+261
| | | | | | | | | | | | | | Signed values for the FDE PC addr were not correctly handled in readFdeAddr(). If the value is negative and the type of the value is smaller than 64 bits, the FDE PC addr overflow error would be incorrectly triggered. Fixed readFdeAddr() to properly handle signed values by sign extending where appropriate. Differential Revision: https://reviews.llvm.org/D49557 llvm-svn: 337683
* ELF: Read address significance tables with --icf=all.Peter Collingbourne2018-07-213-45/+92
| | | | | | | | | | | | | | | | Under --icf=all we now only apply KeepUnique to non-executable address-significant sections. This has the effect of making --icf=all mean unsafe ICF for executable sections and safe ICF for non-executable sections. With this change the meaning of the KeepUnique bit changes to "does the current ICF mode (together with the --keep-unique and --ignore-data-address-equality flags) require this section to be kept unique". Differential Revision: https://reviews.llvm.org/D49626 llvm-svn: 337640
* ELF: Make sections with KeepUnique bit eligible for ICF.Peter Collingbourne2018-07-212-5/+27
| | | | | | | | | | The only restriction is that we cannot merge more than one KeepUnique section together. This matches gold's behaviour and reduces code size when using --icf=safe. Differential Revision: https://reviews.llvm.org/D49622 llvm-svn: 337638
* Omit path to lld binary from lld's error, warning, and log output.Nico Weber2018-07-204-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | lld currently prepends the absolute path to itself to every diagnostic it emits. This path can be longer than the diagnostic, and makes the actual error message hard to read. There isn't a good reason for printing this path: if you want to know which lld you're running, pass -v to clang – chances are that if you're unsure of this, you're not only unsure when it errors out. Some people want an indication that the diagnostic is from the linker though, so instead print just the basename of the linker's path. Before: ``` $ out/bin/clang -target x86_64-unknown-linux -x c++ /dev/null -fuse-ld=lld /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: cannot open crt1.o: No such file or directory /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: cannot open crti.o: No such file or directory /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: cannot open crtbegin.o: No such file or directory /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: unable to find library -lgcc /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: unable to find library -lgcc_s /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: unable to find library -lc /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: unable to find library -lgcc /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: unable to find library -lgcc_s /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: cannot open crtend.o: No such file or directory /Users/thakis/src/llvm-mono/out/bin/ld.lld: error: cannot open crtn.o: No such file or directory clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` After: ``` $ out/bin/clang -target x86_64-unknown-linux -x c++ /dev/null -fuse-ld=lld ld.lld: error: cannot open crt1.o: No such file or directory ld.lld: error: cannot open crti.o: No such file or directory ld.lld: error: cannot open crtbegin.o: No such file or directory ld.lld: error: unable to find library -lgcc ld.lld: error: unable to find library -lgcc_s ld.lld: error: unable to find library -lc ld.lld: error: unable to find library -lgcc ld.lld: error: unable to find library -lgcc_s ld.lld: error: cannot open crtend.o: No such file or directory ld.lld: error: cannot open crtn.o: No such file or directory clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` https://reviews.llvm.org/D49189 llvm-svn: 337634
* Simplify; no behavior change.Nico Weber2018-07-201-4/+2
| | | | | | Reviewed as part of https://reviews.llvm.org/D49189 llvm-svn: 337633
* [PDB] Write the command line after response file expansionReid Kleckner2018-07-203-11/+16
| | | | | | | | | | | | Summary: Fixes PR38085 Reviewers: ruiu, zturner Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49566 llvm-svn: 337628
* [ELF] Check eh_frame_hdr overflow with PC offsets instead of PC absolute ↵Fangrui Song2018-07-205-49/+81
| | | | | | | | | | | | addresses Reviewers: grimar, ruiu, espindola Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D49607 llvm-svn: 337610
OpenPOWER on IntegriCloud