- Mar 07, 2017
-
-
Rui Ueyama authored
llvm-svn: 297108
-
Rui Ueyama authored
llvm-svn: 297107
-
- Mar 06, 2017
-
-
Rafael Espindola authored
NFC, just a bit simpler. llvm-svn: 297087
-
Rafael Espindola authored
llvm-svn: 297077
-
Evgeniy Stepanov authored
tools/lld/ELF/Symbols.cpp:215:13: error: unused variable 'S' [-Werror,-Wunused-variable] if (auto *S = dyn_cast<SharedSymbol>(this) llvm-svn: 297063
-
Rafael Espindola authored
llvm-svn: 297061
-
Rafael Espindola authored
llvm-svn: 297059
-
Rafael Espindola authored
This puts us at parity with bfd, which could already gc this case. I noticed the sections not being gced when linking a modified freebsd kernel. A section that was not gced and not mentioned in the linker script would end up breaking the expected layout. Since fixing the gc is relatively simple and an improvement, that seems better than trying to hack the orphan placement code. There are 173 input section in the entire link whose names are valid C identifiers, so this is probably not too performance critical. llvm-svn: 297049
-
Rui Ueyama authored
llvm-svn: 297012
-
George Rimar authored
In compare with D30458, this makes Bss/BssRelRo to be pure synthetic sections. That removes CopyRelSection class completely, making Bss/BssRelRo to be just regular synthetics. SharedSymbols involved in creating copy relocations are converted to DefinedRegular, what also simplifies things. Differential revision: https://reviews.llvm.org/D30541 llvm-svn: 297008
-
- Mar 02, 2017
-
-
Rafael Espindola authored
This is consistent with rest of the file and opens the way for a relocation keeping multiple sections alive. llvm-svn: 296788
-
Rui Ueyama authored
llvm-svn: 296773
-
Peter Collingbourne authored
Differential Revision: https://reviews.llvm.org/D30519 llvm-svn: 296726
-
Rafael Espindola authored
We were not gcing any section whose name was a C identifier. Both gold and bfd only keep those if they are used. To avoid having to create the __start/__stop symbols early or doing string lookups in resolvedReloc, this patch just looks for undefined symbols __start/__stop to decide if a section is needed or not. llvm-svn: 296723
-
Peter Collingbourne authored
This patch adds an option named --thinlto-cache-dir, which specifies the path to a directory in which to cache native object files for ThinLTO incremental builds. Differential Revision: https://reviews.llvm.org/D30509 llvm-svn: 296702
-
- Mar 01, 2017
-
-
Rui Ueyama authored
That class had three member functions, and all of them are just reader methods that did not depend on class members, so they can be just non- member functions. Probably we should reorganize the functions themselves because their return types doesn't make much sense to me, but for now I just moved these functions out of the class. llvm-svn: 296700
-
Rui Ueyama authored
llvm-svn: 296695
-
Rui Ueyama authored
llvm-svn: 296694
-
Rui Ueyama authored
llvm-svn: 296689
-
Rui Ueyama authored
llvm-svn: 296688
-
Rui Ueyama authored
GdbIndexBuilder class inherited LoadedObjectInfo, but that's not necessary. llvm-svn: 296687
-
Rui Ueyama authored
llvm-svn: 296686
-
Rui Ueyama authored
llvm-svn: 296680
-
Rui Ueyama authored
Looks like .gdb.index and its support classes do things that they don't have to or shouldn't do do. This patch addresses one of these issues. GdbHashTab class is a hash table class. Just like other in-memory hash tables, that incrementally updates its internal data and resizes buckets as new elements are added so that key lookup is always fast. But that is completely not necessary. Unlike debuggers, we only produce hash tables for .gdb.index and never read them. So incrementally updating a hash table in memory is just a waste of resource and complicates the code. What we should do is to accumulate symbols and then create the final hash table at once. llvm-svn: 296678
-
Rui Ueyama authored
llvm-svn: 296650
-
Rafael Espindola authored
llvm-svn: 296620
-
Rafael Espindola authored
llvm-svn: 296619
-
George Rimar authored
In many places we reset Size to 0 before calling assignOffsets() manually. Sometimes we don't do that. It looks we can just always do that inside. Previous code had: template <class ELFT> void OutputSection::assignOffsets() { uint64_t Off = Size; And tests feels fine with Off = 0. I think Off = Size make no sence. Differential revision: https://reviews.llvm.org/D30463 llvm-svn: 296609
-
George Rimar authored
r296570 intorduced crash revealed by gnu-hash-table.s which crashed for me. Reason was use of uninitialized NBuckets variable. llvm-svn: 296597
-
Rui Ueyama authored
llvm-svn: 296586
-
Sean Silva authored
Thanks to Rafael for helping to dig down into what we're really trying to communicate here. llvm-svn: 296580
-
Rui Ueyama authored
Each input section knows its sh_entsize value, so we can set output section's sh_entsize based on input sections values. llvm-svn: 296577
-
Rui Ueyama authored
This implementation is probably slightly inefficient than before, but that should be negligible because this is not a performance- critical pass. llvm-svn: 296570
-
Martell Malone authored
Differential Revision: https://reviews.llvm.org/D29445 llvm-svn: 296542
-
- Feb 28, 2017
-
-
Rui Ueyama authored
Previously, LLD merged all read-only sections. So the following program prints out "true" if -icf=all is specified. static const int foo = 1; static const int bar = 1; int main() { printf("%s\n", &foo == &bar ? "true" : "false"); } This is somewhat counter-intuitive, and it actually caused nasty issues. One example is https://bugs.chromium.org/p/chromium/issues/detail?id=682773#c24. This patch changes the way how it works. Now ICF merges only functions (i.e. executable sections). Differential Revision: https://reviews.llvm.org/D30365 llvm-svn: 296534
-
Rui Ueyama authored
llvm-svn: 296529
-
Rui Ueyama authored
llvm-svn: 296511
-
Rui Ueyama authored
We converted them before, but there were a few remaining occurrences. llvm-svn: 296510
-
Rui Ueyama authored
Differential Revision: https://reviews.llvm.org/D30348 llvm-svn: 296508
-
Rui Ueyama authored
llvm-svn: 296507
-