- May 31, 2017
-
-
Rafael Espindola authored
Before InputSectionBase had an OutputSection pointer, but that was not always valid. For example, if it was a merge section one actually had to look at MergeSec->OutSec. This was brittle and caused bugs like the one fixed by r304260. We now have a single Parent pointer that points to an OutputSection for InputSection, but to a SyntheticSection for merge sections and .eh_frame. This makes it impossible to accidentally access an invalid OutSec. llvm-svn: 304338
-
Rafael Espindola authored
llvm-svn: 304334
-
Rafael Espindola authored
llvm-svn: 304330
-
Rafael Espindola authored
llvm-svn: 304328
-
Rafael Espindola authored
We would crash if a SHF_LINK_ORDER section pointed to a non InputSection section. Since those sections are not merged in order, SHF_LINK_ORDER is pretty meaningless and we can error on that case. llvm-svn: 304327
-
Peter Smith authored
This change converts the writing of the .ARM.exidx sentinel section to use the InputSectionDescriptions instead of OutputSection::Sections this is in preparation for the retirement of OutputSection::Sections. Differential Revision: https://reviews.llvm.org/D33500 llvm-svn: 304289
-
Rafael Espindola authored
This happens when attempting to link shared libraries using exceptions on MIPS. It requires -z notext because clang generates R_MIPS_64 relocations inside .eh_frame. The crash happened because for EhInputSection the OutSec member is null. Patch by Alexander Richardson! llvm-svn: 304260
-
- May 30, 2017
-
-
Rafael Espindola authored
By the time we get here all live sections should have been combined into InputSections. llvm-svn: 304243
-
Rafael Espindola authored
llvm-svn: 304240
-
Peter Smith authored
When there is a linker script with .ARM.exidx in the SECTIONS command we must add the .ARM.exidx sentinel section to the InputSectionDescriptions as well as to OutputSection::Sections. Differential Revision: https://reviews.llvm.org/D33496 llvm-svn: 304206
-
George Rimar authored
llvm-svn: 304197
-
George Rimar authored
I found that during visual inspection of code while wrote different patch. Script in testcase probably have nothing common with real life, but we segfault currently using it. If output section is known NOBITS, there is no need to create writers threads for doing nothing or proccess any filler logic that is useless here. We can just early return, that is what this patch do. DIfferential revision: https://reviews.llvm.org/D33646 llvm-svn: 304192
-
Petr Hosek authored
InputSections may contain MergeInputSection members which trigger a segmentation fault when trying to cast them to InputSection. Differential Revision: https://reviews.llvm.org/D33628 llvm-svn: 304189
-
Petr Hosek authored
While the following expression is handled fine: PROVIDE_HIDDEN(newsym = oldsym + address); The following expression triggers an error because the expression is evaluated as absolute: PROVIDE_HIDDEN(newsym = ALIGN(oldsym, CONSTANT(MAXPAGESIZE)) + address); To avoid this error, we use late evaluation for ALIGN by making the alignment an attribute of the expression itself. Differential Revision: https://reviews.llvm.org/D33629 llvm-svn: 304185
-
Rafael Espindola authored
llvm-svn: 304182
-
Rafael Espindola authored
Now that we are trying to use the linker script representation as the canonycal one, there are a few loops looking for just OutputSectionCommands. Create a vector with just the OutputSectionCommands once that is stable to simplify the rest of the code. llvm-svn: 304181
-
- May 29, 2017
-
-
George Rimar authored
This is PR33052, "Bug 33052 - -r eats comdats ". To fix it I stop removing group section from out when -r is given and fixing SHT_GROUP content when writing it just like we do some other fixup, e.g. for Rel[a]. (it needs fix for section indices that are in group). Differential revision: https://reviews.llvm.org/D33485 llvm-svn: 304140
-
- May 26, 2017
-
-
Petr Hosek authored
The .dynamic section of an ELF almost doesn't need to be written to with the exception of the DT_DEBUG entry. For several reasons having a read only .dynamic section would be useful. This change adds the -z keyword "rodynamic" which forces .dynamic to be read-only. In this case DT_DEBUG will not be emited. Patch by Jake Ehrlich Differential Revision: https://reviews.llvm.org/D33251 llvm-svn: 304024
-
George Rimar authored
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/8549/steps/build_Lld/logs/stdio llvm-svn: 304016
-
Rafael Espindola authored
After fabricateDefaultCommands we can look at the script commands. llvm-svn: 304014
-
Rafael Espindola authored
This is a necessary step for moving clearOutputSections earlier. llvm-svn: 304009
-
Rafael Espindola authored
On SPARC, .plt is both writeable and executable. The current way sections are sorted means that lld puts it after .data/.bss. but it really needs to be close to .test to make sure branches into .plt don't overflow. I'd argue that because .bss is supposed to come last on all architectures, we should change the default sort order such that writable and executable sections come before sections that are just writeable. read-only executable sections should still come after sections that are just read-only of course. This diff makes this change. llvm-svn: 304008
-
George Rimar authored
Restore bitwise-or order and fix warning (was changed by mistake during resolve of conflicts). llvm-svn: 303976
-
George Rimar authored
I found this when builded llc binary using gcc 5.4.1 + LLD. gcc produces duplicate entries in .debug_gnu_pubtypes section, ex: UnifyFunctionExitNodes.cpp.o has: 0x0000ac07 EXTERNAL TYPE "std::success_type<void*>" 0x0000ac07 EXTERNAL TYPE "std::success_type<void*>" clang produces single entry here: 0x0000d291 EXTERNAL TYPE "std::__success_type<void *>" If we link output from gcc with LLD, that would produce excessive duplicate entries in .gdb_index constant pool area. That does not seem affect gdb work, but makes .gdb_index larger than it can be. I also checked that gold filters out such duplicates too. Patch fixes it. Differential revision: https://reviews.llvm.org/D32647 llvm-svn: 303975
-
George Rimar authored
https://sourceware.org/gdb/onlinedocs/gdb/Index-Section-Format.html says: "A CU vector in the constant pool is a sequence of offset_type values. The first value is the number of CU indices in the vector. Each subsequent value is the index and symbol attributes of a CU in the CU list." Previously we keeped 2 values until the end, what was useless. Initially was a part of D32647, though it is possible to split out. Patch do that. Differential revision: https://reviews.llvm.org/D33551 llvm-svn: 303973
-
Rui Ueyama authored
llvm-svn: 303961
-
Rui Ueyama authored
llvm-svn: 303959
-
Rui Ueyama authored
llvm-svn: 303958
-
Rafael Espindola authored
llvm-svn: 303948
-
Rui Ueyama authored
In this way, the content and the flag is always consistent, which I think better than removing the bit when input sections reaches the Writer. llvm-svn: 303926
-
- May 25, 2017
-
-
Rafael Espindola authored
This reverts commit r303787. It caused a slowdown in fast links. That is, links with no debug info or optimizations. llvm-svn: 303925
-
Zachary Turner authored
Originally this was intended to be set up so that when linking a PDB which refers to a type server, it would only visit the PDB once, and on subsequent visitations it would just skip it since all the records had already been added. Due to some C++ scoping issues, this was not occurring and it was revisiting the type server every time, which caused every record to end up being thrown away on all subsequent visitations. This doesn't affect the performance of linking clang-cl generated object files because we don't use type servers, but when linking object files and libraries generated with /Zi via MSVC, this means only 1 object file has to be linked instead of N object files, so the speedup is quite large. llvm-svn: 303920
-
Rui Ueyama authored
llvm-svn: 303905
-
Rui Ueyama authored
llvm-svn: 303893
-
Rui Ueyama authored
If you pass /delayload:<dllname> to the COFF linker, it creates thunks so that DLLs are loaded when they are used for the first time instead of load-time. This mechanism do not work for data symbols as there's no way to trap acccesses to data imported from DLLs. (Technically, I think if we do not initially map dllimport tables in memory, we could actually trap accesses and delay-load data symbols, but that's not what Windows do.) This patch is to report an error when you try to delay-load data symbols. Fixes https://bugs.llvm.org/show_bug.cgi?id=33106 Differential Revision: https://reviews.llvm.org/D33557 llvm-svn: 303890
-
Rui Ueyama authored
llvm-svn: 303815
-
Rui Ueyama authored
This is a different implementation than r303225 (which was reverted in r303270, re-submitted in r303304 and then re-reverted in r303527). In the previous patch, I tried to add Live bit to each dllimported symbol. It turned out that it didn't work with "oldnames.lib" which contains a lot of weak aliases to dllimported symbols. The way we handle weak aliases is to check if undefined symbols can be resolved using weak aliases, and if so, memcpy the Defined symbols to weak Undefined symbols, so that any references to weak aliases automatically see defined symbols instead of undefined ones. This memcpy happens before MarkLive kicks in. That means we may have multiple copies of dllimported symbols. So turning on one instance's Live bit is not enough. This patch moves the Live bit to dllimport file. Since multiple copies of dllsymbols still point to the same file, we can use it as the central repository to keep track of liveness. Differential Revision: https://reviews.llvm.org/D33520 llvm-svn: 303814
-
Rafael Espindola authored
It is not clear why a synthetic section wants to use padding defined in the linker script. The padding is for the space between sections. It was also missing a test. llvm-svn: 303812
-
- May 24, 2017
-
-
Rui Ueyama authored
Looks like r303801 broke the sanitizer-windows bot. I don't fully understand what is going on, so I'll partially revert that patch. llvm-svn: 303805
-
Rui Ueyama authored
We originally wrote the ICF code for COFF and ported it to ELF. They started diverging since then. This patch closes the gap. llvm-svn: 303801
-