summaryrefslogtreecommitdiffstats
path: root/lld
Commit message (Collapse)AuthorAgeFilesLines
...
* [ELF] - Report proper error message about mixing bitcode files.George Rimar2018-07-113-1/+12
| | | | | | | | | If we have 2 bitcode inputs for different targets, LLD would print "<internal>" instead of the name of one of the files. The patch adds a test and fixes this issue. llvm-svn: 336794
* Remove dead code.Rui Ueyama2018-07-111-2/+0
| | | | llvm-svn: 336791
* Parallelize GdbIndexSection's symbol table creation.Rui Ueyama2018-07-112-22/+50
| | | | | | | | | | | | | | | | | | | | | Since .gdb_index sections contain all known symbols, they can be very large. One of my executables has a .gdb_index section of 1350 GiB. Uniquifying symbols by name takes 3.77 seconds on my machine. This patch parallelize it. Time to call createSymbols() with 8.4 million unique symbols: Without this patch: 3773 ms Parallelism = 1: 4374 ms Parallelism = 2: 2628 ms Parallelism = 16: 837 ms As you can see above, this algorithm is a bit more inefficient than the non-parallelized version, but even with dual-core, it is faster than that, so I think it is overall a win. Differential Revision: https://reviews.llvm.org/D49164 llvm-svn: 336790
* Remove a workaround for an old GCC bug.Rui Ueyama2018-07-112-65/+1
| | | | | | | | | | | | | | This workaround is for GCC 5.4.1. Without this workaround, lld will produce larger .gdb_index sections for object files compiled with the buggy version of the compiler. Since it is not for correctness, and it affects only debug builds (since you are generating .gdb_index sections), perhaps the hack shouldn't have been added in the first place. At least, I think it is time to remove this hack. Differential Revision: https://reviews.llvm.org/D49149 llvm-svn: 336788
* Refactor GdbIndexSection. NFC.Rui Ueyama2018-07-103-161/+165
| | | | | | | | | | | | | | | | This patch merges createGdbIndex function and GdbIndexSection's constructor into a single static member function of the class. This patch also change how we keep CU vectors. Previously, CuVector and GdbSymbols were parallel arrays, but there's no reason to choose that design. Now, CuVector is a member of GdbSymbol class. A lot of members are removed from GdbIndexSection. Previously, it has members that need to be kept in sync over several phases. I belive the new design is less error-prone, and the new code is much easier to read than before. llvm-svn: 336743
* [ELF][MIPS] Add mote tests on MipsArchTree routines, fix typos in error messagesSimon Atanasyan2018-07-105-69/+268
| | | | | | | | | This fix add more test cases for routines check MIPS ELF header flags and flags from .MIPS.abiflags sections. The tests use yaml2obj for object files generation because not all combinations of flags can be produced by LLVM tools. llvm-svn: 336704
* Initialize a variable properly to fix buildbots.Rui Ueyama2018-07-101-1/+1
| | | | llvm-svn: 336700
* Make a struct type declaration private. NFC.Rui Ueyama2018-07-101-7/+6
| | | | llvm-svn: 336690
* Simplify. NFC.Rui Ueyama2018-07-101-1/+1
| | | | llvm-svn: 336686
* Rename a variable for consistency. NFC.Rui Ueyama2018-07-101-3/+3
| | | | llvm-svn: 336674
* Reduce memory usage when creating .gdb_index. NFC.Rui Ueyama2018-07-102-97/+69
| | | | | | | | | | | | | | .gdb_index sections can be very large. When you are compiling multi-gibibyte executables, they can be larger than 1 GiB. The previous implementation of .gdb_index seems to consume too much memory. This patch reduces memory consumption by eliminating temporary objects. In one experiment, memory consumption of GdbIndexSection class is reduced from 962 MiB to 228 MiB when creating a .gdb_index of 1350 GiB. Differential Revision: https://reviews.llvm.org/D49094 llvm-svn: 336672
* [ELF] - Add a test for readCallGraph() code.George Rimar2018-07-101-2/+4
| | | | | | | This is to test the following untested line: https://github.com/llvm-mirror/lld/blob/master/ELF/Driver.cpp#L643 llvm-svn: 336670
* [COFF] Store import symbol pointers as pointers to the base classMartin Storsjo2018-07-107-16/+45
| | | | | | | | | | | | | | | Future symbol insertions can potentially change the type of these symbols - keep pointers to the base class to reflect this, and use dynamic casts to inspect them before using as the subclass type. This fixes crashes that were possible before, by touching these symbols that now are populated as e.g. a DefinedRegular, via the old pointers with DefinedImportThunk type. Differential Revision: https://reviews.llvm.org/D48953 llvm-svn: 336652
* [ELF] - Improve call graph pasing error reporting.George Rimar2018-07-102-4/+15
| | | | | | | This adds a file name to the error message, adds a missing test case and refactors code a bit. llvm-svn: 336651
* [ELF] - Report call graph profile file names in error messages.George Rimar2018-07-102-3/+3
| | | | | | We did not report file names for some reason. llvm-svn: 336650
* Report an error for an extremely large .gdb_index section.Rui Ueyama2018-07-102-15/+18
| | | | | | | | | | I believe the only way to test this functionality is to create extremely large object files and attempt to create a .gdb_index that is greater than 4 GiB. But I think that's too much for most environments and buildbots, so I'm commiting this without a test that actually triggers the new error condition. llvm-svn: 336631
* Fix a bug for packed relocations.Rui Ueyama2018-07-092-15/+106
| | | | | | | | | Previously, we didn't create multiple consecutive bitmaps. Added a test to catch this bug too. Differential Revision: https://reviews.llvm.org/D49107 llvm-svn: 336620
* Simplify RelrSection<ELFT>::updateAllocSize.Rui Ueyama2018-07-091-40/+34
| | | | | | | | | This patch also speeds it up by making some constants compile-time constants. Other than that, NFC. Differential Revision: https://reviews.llvm.org/D49101 llvm-svn: 336614
* Fix direct calls to __wrap_sym when it is relocated.Rui Ueyama2018-07-095-1/+61
| | | | | | | | | | | | Patch by Matthew Koontz! Before, direct calls to __wrap_sym would not map to valid PLT entries, so they would crash at runtime. This change maps such calls to the same PLT entry as calls to sym that are then wrapped. Differential Revision: https://reviews.llvm.org/D48502 llvm-svn: 336609
* Factor out code to parse -pack-dyn-relocs. NFC.Rui Ueyama2018-07-092-15/+18
| | | | llvm-svn: 336599
* lld: add experimental support for SHT_RELR sections.Rui Ueyama2018-07-099-124/+462
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Patch by Rahul Chaudhry! This change adds experimental support for SHT_RELR sections, proposed here: https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg Pass '--pack-dyn-relocs=relr' to enable generation of SHT_RELR section and DT_RELR, DT_RELRSZ, and DT_RELRENT dynamic tags. Definitions for the new ELF section type and dynamic array tags, as well as the encoding used in the new section are all under discussion and are subject to change. Use with caution! Pass '--use-android-relr-tags' with '--pack-dyn-relocs=relr' to use SHT_ANDROID_RELR section type instead of SHT_RELR, as well as DT_ANDROID_RELR* dynamic tags instead of DT_RELR*. The generated section contents are identical. '--pack-dyn-relocs=android+relr --use-android-relr-tags' enables both '--pack-dyn-relocs=android' and '--pack-dyn-relocs=relr': lld will encode the relative relocations in a SHT_ANDROID_RELR section, and pack the rest of the dynamic relocations in a SHT_ANDROID_REL(A) section. Differential Revision: https://reviews.llvm.org/D48247 llvm-svn: 336594
* [PPC64] Add TLS local dynamic to local exec relaxationZaara Syeda2018-07-095-8/+152
| | | | | | | | | This patch adds the target call back relaxTlsLdToLe to support TLS relaxation from local dynamic to local exec model. Differential Revision: https://reviews.llvm.org/D48293 llvm-svn: 336559
* [PDB] One more fix for hasing GSI records.Zachary Turner2018-07-062-0/+81
| | | | | | | | | | | | | | | | The reference implementation uses a case-insensitive string comparison for strings of equal length. This will cause the string "tEo" to compare less than "VUo". However we were using a case sensitive comparison, which would generate the opposite outcome. Switch to a case insensitive comparison. Also, when one of the strings contains non-ascii characters, fallback to a straight memcmp. The only way to really test this is with a DIA test. Before this patch, the test will fail (but succeed if link.exe is used instead of lld-link). After the patch, it succeeds even with lld-link. llvm-svn: 336464
* [ELF] - Add test for empty version in a symbol name. George Rimar2018-07-061-0/+20
| | | | | | | This covers the following line which was untested: https://github.com/llvm-mirror/lld/blob/master/ELF/Symbols.cpp#L170 llvm-svn: 336443
* [ELF] - Remove dead code #2.George Rimar2018-07-061-4/+1
| | | | | | 'Pos' is never can be 0 here. llvm-svn: 336436
* [ELF] - Remove dead code. NFC.George Rimar2018-07-061-2/+0
| | | | | | 'Pos' can never be 0. llvm-svn: 336435
* Relax filechecks in r336405 testsHans Wennborg2018-07-063-12/+12
| | | | | | | | | | | | | | | | | | | They were failing in Chromium's packaging builds with: C:\b\rr\tmphqfaff\w\src\third_party\llvm\tools\lld\test\COFF\pdb-globals-dia-vfunc-collision2.test:24:8: error: expected string not found in input CHECK: func [0x00001060+ 0 - 0x0000106c-12 | sizeof= 12] (FPO) virtual int __cdecl A132() ^ <stdin>:8:11: note: scanning from here struct S [sizeof = 8] { ^ <stdin>:9:2: note: possible intended match here func [0x00001060+ 0 - 0x0000106c-12 | sizeof= 12] (FPO) virtual int __cdecl S::A132() ^ Maybe due to different DIA versions. llvm-svn: 336424
* dos2unixHans Wennborg2018-07-063-93/+93
| | | | llvm-svn: 336423
* [ELF][MIPS] Simplify `checkFlags` routine and inline `rejectMicroMips64`. NFCSimon Atanasyan2018-07-061-9/+6
| | | | llvm-svn: 336414
* [ELF][MIPS] Remove support for linking microMIPS 64-bit codeSimon Atanasyan2018-07-066-112/+33
| | | | | | | | | Remove support for linking microMIPS 64-bit code because this kind of ISA is rarely used and unsupported by LLVM. Differential revision: https://reviews.llvm.org/D48949 llvm-svn: 336413
* [llvm-pdbutil] Dump more info about globals.Zachary Turner2018-07-061-0/+19
| | | | | | | | | | | | | | | We add an option to dump the entire global / public symbol record stream. Previously we would dump globals or publics, but not both. And when we did dump them, we would always dump them in the order they were referenced by the corresponding hash streams, not in the order they were serialized in. This patch adds a lower level mode that just dumps the whole stream in serialization order. Additionally, when dumping global-extras, we now dump the hash bitmap as well as the record offset instead of dumping all zeros for the offsets. llvm-svn: 336407
* [PDB] Sort globals symbols by name in GSI hash buckets.Zachary Turner2018-07-066-0/+93
| | | | | | | | | | | It seems like the debugger first computes a symbol's bucket, and then does a binary search of entries in the bucket using the symbol's name in order to find it. If the bucket entries are not in sorted order, this obviously won't work. After this patch a couple of simple test cases show that we generate an exactly identical GSI hash stream, which is very nice. llvm-svn: 336405
* Remove redundnat call of makeArrayRef(). NFC.Rui Ueyama2018-07-051-1/+1
| | | | llvm-svn: 336378
* Simplify PPC64::calcEFlags().Rui Ueyama2018-07-052-40/+20
| | | | | | | | | | In this file we only have to handle the v2 ABI, so what we need to do is to just make sure that all object files have v2 or unspecified version number. Differential Revision: https://reviews.llvm.org/D48112 llvm-svn: 336372
* Make a test more robust.Rui Ueyama2018-07-051-0/+5
| | | | | | Reported by Chris Jackson. llvm-svn: 336366
* [ELF] - Add test case for checking PT_INTERP behavior.George Rimar2018-07-051-0/+21
| | | | | | | | | | | | | When PT_INTERP is specified in PHDRS command, it should be created. (if other conditions met) We had no test for the folowing line: https://github.com/llvm-mirror/lld/blob/master/ELF/LinkerScript.cpp#L1108 And for this header itself. Patch fixes that. llvm-svn: 336359
* [ELF] - Eliminate dead "if". NFC.George Rimar2018-07-051-2/+0
| | | | | | | | | | | | We call switchTo() from assignAddresses() for switching to Aether, and from assignOffsets(). First calls assignOffsets() one by one for each output section. (https://github.com/llvm-mirror/lld/blob/master/ELF/LinkerScript.cpp#L1045) That I believe means the condition removed in this patch is dead. llvm-svn: 336356
* [ELF] - Convert excessive dyn_cast -> cast. NFC.George Rimar2018-07-051-3/+2
| | | | | | | | | Currently, there are only OutputSection and SymbolAssignment commands possible at the first level under SECTIONS tag. Hence, dyn_cast was excessive. llvm-svn: 336354
* [ELF] - Test we are able to assign version to symbols that are not "_Z*"George Rimar2018-07-051-0/+22
| | | | | | | | | | This is to test the following line of the code: https://github.com/llvm-mirror/lld/blob/master/ELF/SymbolTable.cpp#L681 If symbol does not start from _Z prefix and we have extern "C++", we do not call demangler and use its name as is. llvm-svn: 336353
* [ELF] - Check we do not assign version to undefined symbol when using extern ↵George Rimar2018-07-051-0/+19
| | | | | | | | | C++. This tests the following 'continue' line in getDemangledSyms(): https://github.com/llvm-mirror/lld/blob/master/ELF/SymbolTable.cpp#L677 llvm-svn: 336349
* [ELF] - Add test to check we don't crash when tracing reserved symbol.George Rimar2018-07-051-0/+3
| | | | | | | | | This is to test the following line of code: https://github.com/llvm-mirror/lld/blob/master/ELF/SymbolTable.cpp#L601 Without that line linker would crash. llvm-svn: 336345
* [ELF] - Test LLD creates empty .imports file.George Rimar2018-07-051-2/+6
| | | | | | | | | This covers the following code line with a test: https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L213 After that, coverage of LTO.cpp is 100%. llvm-svn: 336342
* [ELF] - Add test to check we produce an error if unable to write an empty ↵George Rimar2018-07-051-0/+10
| | | | | | | | | | | | index file. Test case ensures lld generates an error if unable to write an empty index file for lazy object file that is not added to link. This covers the following line with a test: https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L206 llvm-svn: 336340
* [ELF] - Remove dead code. NFC.George Rimar2018-07-051-3/+0
| | | | | | | | | | | | | I think code is dead, because the only way to see Path as empty seems would be if replaceThinLTOSuffix() replaced some prefix with empty prefix (making the result Path empty). But it is impossible to pass the empty prefix, we would file in driver: https://github.com/llvm-mirror/lld/blob/master/ELF/Driver.cpp#L669 llvm-svn: 336338
* [ELF] - Advance position in a memory region when change the Dot.George Rimar2018-07-053-0/+41
| | | | | | | | | | | | This is https://bugs.llvm.org//show_bug.cgi?id=37836 Previously LLD could assign to Dot or set the address for the section with address expression but did not advance the position in a memory region. Patch fixes the issue. llvm-svn: 336335
* [ELF] - Simplify. NFC.George Rimar2018-07-041-3/+1
| | | | | | | | | | | Currently, there are only OutputSection and SymbolAssignment commands possible at the first level under SECTIONS tag. So, shouldSkip() contained dead "return true". Patch simplifies the code. llvm-svn: 336282
* [ELF] - Extend edata-etext.s test case.George Rimar2018-07-041-1/+5
| | | | | | | | | | | | | We did not have a test that would test that _etext address is equal to etext, _end == end and _edata == edata. Because of that, the following line was never executed when running our tests: https://github.com/llvm-mirror/lld/blob/master/ELF/Writer.cpp#L928 Patch fixes that. llvm-svn: 336280
* [ELF] - Cover handling of DW_AT_external with test.George Rimar2018-07-041-1/+30
| | | | | | | | | The following check was uncovered with tests: https://github.com/llvm-mirror/lld/blob/master/ELF/InputFiles.cpp#L159 Patch adds test to cover it. llvm-svn: 336273
* [ELF] - LTO: add test for createEmptyIndex.George Rimar2018-07-041-0/+5
| | | | | | | | | | | | | | | | We have a following comment for createEmptyIndex caller code: // If LazyObjFile has not been added to link, emit empty index files. // This is needed because this is what GNU gold plugin does and we have a // distributed build system that depends on that behavior. Though createEmptyIndex() itself (https://github.com/llvm-mirror/lld/blob/master/ELF/LTO.cpp#L202) is never called in our test cases. Patch adds a test. llvm-svn: 336270
* [ELF] - Add a test case for relocation pointing to deduplicated COMDAT.George Rimar2018-07-042-0/+23
| | | | | | | | | | | | ELF spec doesn't allow a relocation to point to a deduplicated COMDAT section. Unfortunately this happens in practice (e.g. .eh_frame) We have a code in MarkLive.cpp for that and it was uncovered by any test case: https://github.com/llvm-mirror/lld/blob/master/ELF/MarkLive.cpp#L199 Patch adds a test. llvm-svn: 336259
OpenPOWER on IntegriCloud