summaryrefslogtreecommitdiff
path: root/lld
AgeCommit message (Collapse)Author
2018-09-13Update release notes for lld 7.linaro-local/ci/tcwg-llvm-kernel-baseline-armv8l-release-stable-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-armv8l-release-next-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-armv8l-release-mainline-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-armv8l-release-mainlinelinaro-local/ci/tcwg-llvm-kernel-baseline-armv8l-release-lts-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-stable-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-stablelinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-next-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-mainline-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-mainlinelinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-lts-defconfig_nolselinaro-local/ci/tcwg-llvm-kernel-baseline-aarch64-release-ltsRui Ueyama
2018-09-11Clarify the wording for the state of the lld/MinGW targetMartin Storsjo
2018-09-11Update release notes to say that lld/MinGW is production-ready.Rui Ueyama
2018-09-11ReleaseNotes: fixesHans Wennborg
2018-09-11Update release notes for lld 7.0.Rui Ueyama
2018-09-10Merging r341670 and r341672:Hans Wennborg
------------------------------------------------------------------------ r341670 | tstellar | 2018-09-07 17:42:01 +0200 (Fri, 07 Sep 2018) | 15 lines MachO: Fix out-of-bounds memory access in getString16 Summary: This fixes the following tests when gcc is compiled with gcc8: lld :: mach-o/do-not-emit-unwind-fde-arm64.yaml lld :: mach-o/eh-frame-relocs-arm64.yaml llvm.org/PR38096 Reviewers: lhames, kledzik, javed.absar Subscribers: kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D51547 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r341672 | tstellar | 2018-09-07 17:51:52 +0200 (Fri, 07 Sep 2018) | 3 lines MachO: Change getString16() back to inline function This was accidentally changed in r341670. ------------------------------------------------------------------------
2018-09-07ReleaseNotes: tidy up for the releaseHans Wennborg
2018-09-04Merging r339253:Hans Wennborg
------------------------------------------------------------------------ r339253 | psmith | 2018-08-08 16:50:33 +0200 (Wed, 08 Aug 2018) | 7 lines Add missing REQUIRES x86 to tests. Add REQUIRES to tests that fail when an x86 backend is not present. Differential Revision: https://reviews.llvm.org/D50440 ------------------------------------------------------------------------
2018-08-30Merging r338877, r338911 and r339165:Hans Wennborg
------------------------------------------------------------------------ r338877 | nico | 2018-08-03 14:00:12 +0200 (Fri, 03 Aug 2018) | 19 lines lld-link: Fix subsystem inference for non-console apps on 32-bit, and fix entry point inference on 32-bit with /nodefaultlib LinkerDriver::inferSubsystem() used to do Symtab->findUnderscore("WinMain"), but WinMain is stdcall in 32-bit and is hence is called _WinMain@16. Instead, Symtab->findMangle(mangle("WinMain")) needs to be called. But since LinkerDriver::inferSubsystem() and LinkerDriver::findDefaultEntry() both need to call this, introduce a common helper function for this and call it from both places. (Also call it for "main" for consistency, even though findUnderscore() is enough for main since that's __cdecl on 32-bit). This also exposed a bug for /nodefaultlib entrypoint inference: The code here called findMangle(Sym) instead of findMangle(mangle(Sym)), again doing the wrong thing on 32-bit. Fix that too. While here, make Driver::mangle() a static free function. https://reviews.llvm.org/D50184 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r338911 | nico | 2018-08-03 20:32:44 +0200 (Fri, 03 Aug 2018) | 7 lines lld-link: Simplify LinkerDriver::findDefaultEntry() No intended behavior change. Not repeating the CRTStartup names makes fixing PR36523 simpler. https://reviews.llvm.org/D50253 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r339165 | nico | 2018-08-07 21:10:28 +0200 (Tue, 07 Aug 2018) | 26 lines lld-link: Take /SUBSYSTEM into account for automatic /ENTRY detection. If /subsystem:windows is passed, link.exe only looks for WinMain and wWinMain, and if /subsystem:console is passed it only looks for main and wmain. lld-link used to look for all 4 in both cases. This patch makes lld-link match link.exe's behavior. This requires that the subsystem is known by the time findDefaultEntry() gets called. findDefaultEntry() is called before the main link loop, so that the loop can mark the entry point as undefined. That means inferSubsystem() has to be called above the main loop as well. This in turn means /subsystem: from .drectve sections only has an effect on entry point inference for obj files passed to lld-link directly (and not in obj files found later in .lib files). link.exe seems to ignore /subsystem: for obj files from lib files completely (while in lld it's ignored only for entry point detection but it still overrides /subsystem: flags passed on the command line for the value that gets written in the output file). Also, if the subsytem isn't needed (e.g. when only writing a /def: lib file and not writing a coff file), link.exe doesn't complain if the subsystem isn't known, so both subsystem and entry point handling should be below the early return lld has for that case. Fixes PR36523. https://reviews.llvm.org/D50316 ------------------------------------------------------------------------
2018-08-28[docs][mips] Add MIPS specific release notes for LLD 7.0Simon Atanasyan
Differential revision: https://reviews.llvm.org/D51309
2018-08-17Merging r339904:Hans Wennborg
------------------------------------------------------------------------ r339904 | maskray | 2018-08-16 19:22:02 +0200 (Thu, 16 Aug 2018) | 11 lines [ELF] mergeSections: remove non-alive MergeInputSection Summary: This makes it conform to what the comment says. Otherwise when getErrPlace() is called afterwards, cast<InputSection>(D) will cause incompatible cast as MergeInputSection is not a subclass of InputSection. Reviewers: ruiu, grimar, espindola, pcc Reviewed By: grimar Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D50742 ------------------------------------------------------------------------
2018-08-14Merging r339049:Hans Wennborg
------------------------------------------------------------------------ r339049 | mstorsjo | 2018-08-06 21:49:18 +0200 (Mon, 06 Aug 2018) | 8 lines [COFF] Remove a superfluous warning about aligncomm for non-common symbols It's not an error if a common symbol (uninitialized data, with alignment specified via the aligncomm directive) is replaced with a regular one with initialized data (with alignment specified via the section chunk). Differential Revision: https://reviews.llvm.org/D50268 ------------------------------------------------------------------------
2018-08-14Merging r339075:Hans Wennborg
------------------------------------------------------------------------ r339075 | stella.stamenova | 2018-08-07 00:37:49 +0200 (Tue, 07 Aug 2018) | 12 lines [lit, python] Always add quotes around the python path in lit Summary: The issue with the python path is that the path to python on Windows can contain spaces. To make the tests always work, the path to python needs to be surrounded by quotes. This is a companion change to: https://reviews.llvm.org/D50206 Reviewers: asmith, zturner, espindola Subscribers: emaste, sbc100, arichardson, aheejin, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D50282 ------------------------------------------------------------------------
2018-08-14[ReleaseNotes] Mention noteworthy changes for 7.0Martin Storsjo
2018-08-07Merging r339058:Hans Wennborg
------------------------------------------------------------------------ r339058 | mstorsjo | 2018-08-06 23:26:09 +0200 (Mon, 06 Aug 2018) | 16 lines [COFF] Treat .xdata/.pdata$<sym> as implicitly associative to <sym> for MinGW MinGW configurations don't use associative comdats, as GNU ld doesn't support that. Instead they produce normal comdats named .text$sym, .xdata$sym and .pdata$sym. GNU ld doesn't discard any comdats starting with .xdata or .pdata, even if --gc-sections is used (while it does discard other unreferenced comdats), regardless of what symbol name is used after the $ separator. For LLD, treat any such comdat as implicitly associative to the base symbol. This requires maintaining a map from symbol name to section number, but that is only maintained when the MinGW flag has been enabled. Differential Revision: https://reviews.llvm.org/D49700 ------------------------------------------------------------------------
2018-08-06Merging r338679, r338684, r338697, r338699:Hans Wennborg
------------------------------------------------------------------------ r338679 | grimar | 2018-08-02 10:07:07 +0200 (Thu, 02 Aug 2018) | 10 lines [LLD] - Improve handling of AT> linker script commands 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 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r338684 | grimar | 2018-08-02 10:13:56 +0200 (Thu, 02 Aug 2018) | 9 lines [LLD] Only increase LMARegion if different from MemRegion 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 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r338697 | grimar | 2018-08-02 12:45:46 +0200 (Thu, 02 Aug 2018) | 9 lines [LLD] Do not overwrite LMAOffset of PT_LOAD header Patch by Konstantin Schwarz! If more than a single output section is added to a PT_LOAD header, only the first section should set the LMAOffset of the segment. Otherwise, we get a load-address overlap error Differential revision: https://reviews.llvm.org/D50133 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r338699 | grimar | 2018-08-02 12:59:28 +0200 (Thu, 02 Aug 2018) | 5 lines [LLD][ELF] - Simplify. NFC. isHeaderSection can be useful I believe, but probably not right now and not for this case. ------------------------------------------------------------------------
2018-08-01Test CommitOwen Reynolds
Removal of extra line
2018-08-01[LLD][ELF] - Apply clang-format to InputSections.cpp. NFC.George Rimar
2018-08-01[LLD][ELF] - Removed excessive llvm:: prefix. NFC.George Rimar
2018-07-31Allow oformat to accept format starting with elf as acceptable format. ↵Rumeet Dhindsa
isOutputFormatBinary returns false in such case. Example: --oformat elf64-x86-64 Differential Revision: https://reviews.llvm.org/D50105
2018-07-31[lld] Fix test RUN commands so they don't fail when run in a read-only ↵David L. Jones
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.
2018-07-31ELF: Add libcall symbols to the link when LTO is being used.Peter Collingbourne
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
2018-07-31Simplify. NFC.Rui Ueyama
2018-07-31Make ICF log output order deterministic.Rui Ueyama
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
2018-07-31[LLD][ELF] - ICF: Check we do not fold sections which relocations reffering ↵George Rimar
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.
2018-07-31[ELF][ARM] Implement support for Tag_ABI_VFP_argsPeter Smith
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
2018-07-31[LLD][ELF] - ICF: add test case testing we do not fold sections with the ↵George Rimar
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.
2018-07-31windows_support.rst: Add links for downloadingHans Wennborg
2018-07-31index.rst: pe/coff does support pdbs nowHans Wennborg
2018-07-30[docs] Sort ld.lld.1 optionsFangrui Song
Reviewers: ruiu Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D50022
2018-07-30[docs] Add missing options to ld.lld.1Fangrui Song
Differential Revision: https://reviews.llvm.org/D49938
2018-07-30[docs] Update ld.lld.1Fangrui Song
2018-07-30[AArch64] Support execute-only LOAD segments.David Bolvansky
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
2018-07-30[ELF] - Implement SHT_SYMTAB_SHNDX (.symtab_shndxr) section.George Rimar
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
2018-07-29[ELF][HEXAGON] Add R_HEX_32_6_X and R_HEX_12_XSid Manning
And add a test.
2018-07-27Reland r338088, "ELF: Make --print-icf-sections output deterministic."Peter Collingbourne
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
2018-07-27Revert "ELF: Make --print-icf-sections output deterministic."Ilya Biryukov
This reverts commit r338088. To unbreak our integrate. The resulting lld output is different if compiled with '-funsigned-char'.
2018-07-26ELF: Make --print-icf-sections output deterministic.Peter Collingbourne
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
2018-07-26[COFF] Handle comdat sections without leader symbolsMartin Storsjo
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
2018-07-26[COFF] clean up global resources after completionRui Ueyama
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
2018-07-25[ELF] Fix linker-script-in-search-path.sFangrui Song
2018-07-25[ELF] Make linker-script-in-search-path.s robust per r337972Fangrui Song
2018-07-25Make a test more robust.Rui Ueyama
Previously, this test fails if there's other test that happens to create "t.script" in the current directory.
2018-07-25[ELF] Use search paths for --version-script=Fangrui Song
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
2018-07-25ELF: Do not ICF SHF_LINK_ORDER sections.Peter Collingbourne
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
2018-07-24Fix error messages for bad symbols.Rui Ueyama
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
2018-07-24[ELF][HEXAGON] Add R_HEX_B15_PCREL_X relocationSid Manning
Update testcase Differential Revision: https://reviews.llvm.org/D49567
2018-07-24[ELF][MIPS] Fix primary GOT sometimes overflowing by one or two wordsSimon Atanasyan
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
2018-07-23[WebAssembly] Add support for --whole-archive.Sam Clegg
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D49706
2018-07-23Revert r337638, "ELF: Make sections with KeepUnique bit eligible for ICF."Peter Collingbourne
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()); }