| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
for 32 bit signed, 32 bit unsigned, and 64 bit pointers."
This reverts 57076d3199fc2b0af4a3736b7749dd5462cacda5.
Original review at https://reviews.llvm.org/D64931.
Review for added fix at https://reviews.llvm.org/D66843.
llvm-svn: 371568
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
D64136 and D65584, while fixing STB_WEAK issues and improving our
compatibility with ld.bfd, can cause another STB_WEAK problem related to
LTO:
If %tundef.o has an undefined reference on f,
and %tweakundef.o has a weak undefined reference on f,
%tdef.o has a definition of f
```
ld.lld %tundef.o %tweakundef.o --start-lib %tdef.o --end-lib
```
1) `%tundef.o` doesn't set the `referenced` bit.
2) `%weakundef.o` changes the binding from STB_GLOBAL to STB_WEAK
3) `%tdef.o` is not fetched because the binding is weak.
Step (1) is incorrect. This patch sets the `referenced` bit of Undefined
created by bitcode files.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D66992
llvm-svn: 370437
|
|
|
|
|
|
|
|
|
| |
signed,"
This reverts commit r370083 because it caused check-lld failures on
sanitizer-x86_64-linux-fast.
llvm-svn: 370142
|
|
|
|
|
|
| |
32 bit unsigned, and 64 bit pointers.
llvm-svn: 370083
|
|
|
|
|
|
|
|
|
| |
Module IDs can appear in diagnostic messages.
This patch adds some auxiliary symbols to improve their readability.
Differential Revision: https://reviews.llvm.org/D61857
llvm-svn: 360858
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
The gold linker allowed you to output the ELF files after LTO was run. It did
it by using the 'obj-path' option. This replicates that behavior.
Reviewers: espindola, ruiu, MaskRay, pcc
Reviewed By: MaskRay, pcc
Subscribers: grimar, emaste, inglorion, arichardson, steven_wu, dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D56046
llvm-svn: 354917
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adding all libcall symbols to the link can have undesired consequences.
For example, the libgcc implementation of __sync_val_compare_and_swap_8
on 32-bit ARM pulls in an .init_array entry that aborts the program if
the Linux kernel does not support 64-bit atomics, which would prevent
the program from running even if it does not use 64-bit atomics.
This change makes it so that we only add libcall symbols to the
link before LTO if we have to, i.e. if the symbol's definition is in
bitcode. Any other required libcall symbols will be added to the link
after LTO when we add the LTO object file to the link.
Differential Revision: https://reviews.llvm.org/D50475
llvm-svn: 339301
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D48812
llvm-svn: 336143
|
|
|
|
|
|
|
|
|
|
|
| |
This should be correctly implied by the linker.
This also makes the tests slightly easier to maintain and compare
with the equivalent tests under for other platforms.
Differential Revision: https://reviews.llvm.org/D47513
llvm-svn: 333567
|
|
|
|
|
|
|
|
| |
thinlto-prefix-replace
Differential Revision: https://reviews.llvm.org/D46034
llvm-svn: 331405
|
|
|
|
|
|
| |
We were setting IsUsedInRegularObj in lazy symbols only used from IR.
llvm-svn: 329101
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is relative to "Bug 36166 - tools/gold/X86/comdat.ll is failing only on Debian Unstable" (PR36166).
Something changed in newer versions of gold and now together with gold-plugin
there is an issue shown in PR, symbol may get wrong visibility.
LLD works fine, but we have no testcase for the same use case, patch adds it.
Differential revision: https://reviews.llvm.org/D43193
llvm-svn: 325874
|
|
|
|
|
|
|
|
|
| |
objects, it confuses codegen into generating pc-rel relocations for those
symbols, which leads to linker errors.
Differential Revision: https://reviews.llvm.org/D42977
llvm-svn: 324435
|
|
|
|
|
|
|
|
|
|
|
| |
Patch adds one more module with non-prevailing
version of asm symbol, defined in main module
This is for D42107, which is under review.
Extended version of testcase would fail with the
diff 9 version of patch posted.
llvm-svn: 323584
|
|
|
|
|
|
|
|
|
|
|
| |
Previously when BC file had global variable that was accessed from script,
it was optimized away or inlined by IPO.
In this patch I add symbols at left side of assignment expression as LinkerRedefined,
what prevents optimization for them.
Differential revision: https://reviews.llvm.org/D37059
llvm-svn: 314097
|
|
|
|
|
|
| |
Follow-up to r308915 suggested by Rafael and Peter.
llvm-svn: 308920
|
|
|
|
|
|
|
|
|
| |
We do this emitting a section for every function when LTO is used.
Fixes PR33888.
Differential Revision: https://reviews.llvm.org/D35809
llvm-svn: 308915
|
|
|
|
|
|
|
|
|
|
| |
procedural optimizations to prevent dropping symbols and allow the linker
to process re-directs.
PR33145: --wrap doesn't work with lto.
Differential Revision: https://reviews.llvm.org/D33621
llvm-svn: 304719
|
|
|
|
|
|
| |
Fix for PR33096.
llvm-svn: 303579
|
|
|
|
|
|
|
|
| |
It is needed for creating an unique identifier for ThinLTO.
This fixes pr32931.
llvm-svn: 302235
|
|
|
|
| |
llvm-svn: 296728
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
This fixes PR30665.
Differential Revision: https://reviews.llvm.org/D25495
llvm-svn: 284034
|
|
|
|
|
|
|
| |
Before the default was whatever number hardware_concurrency() returned.
Users can specify the number of threads via --lto-jobs=X option.
llvm-svn: 283787
|
|
|
|
|
|
|
|
|
|
|
| |
Before this lld was always creating common symbols itself. It worked,
but prevented them from being internalized when possible.
Now it preserves common symbols is the bitcode and they are internalized.
Fixes pr30184.
llvm-svn: 280242
|
|
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D24037
llvm-svn: 280144
|
|
|
|
|
|
|
| |
This is a reduction from the only symbol in a build of clang that the
gold plugin internalizes but lld does not.
llvm-svn: 272845
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D20704
llvm-svn: 270968
|
|
|
|
|
|
| |
Drop them and produce a graceful warning instead.
llvm-svn: 269149
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We currently don't do a good job of diagnosing inputs that would require
dynamic relocations to be applied to read only segments.
I am about to improve lld in that area, but unfortunately we developed
tests that depend on the current behavior.
To make clear what is actually changing, this first patch just updates
tests to not depend on the current behavior. In most cases this just
means using a rw section instead of a ro one, but that unfortunately
changes many addresses.
llvm-svn: 268145
|
|
|
|
|
|
| |
Differential Revision: http://reviews.llvm.org/D19389
llvm-svn: 267181
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since there is a copy in every translation unit that uses them, they can
be omitted from the symbol table if the address is not significant.
This still doesn't catch as many cases as the gold plugin. The
difference is that we check canBeOmittedFromSymbolTable in each file and
use lazy loading which limits what it can do. Gold checks it in the merged file.
I think the correct way of getting the same results as gold is just to
cache in the IR the result of canBeOmittedFromSymbolTable.
llvm-svn: 267063
|
|
|
|
|
|
|
| |
-> Drop linkage when converting to decl
-> Handling of unnamed_addr.
llvm-svn: 266954
|
|
|
|
| |
llvm-svn: 266899
|
|
|
|
| |
llvm-svn: 266896
|
|
|
|
|
|
|
| |
The previous fix didn't work for bitcode files. This patch fixes
the remaining issue.
llvm-svn: 265854
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
start-lib and end-lib are options to link object files in the same
semantics as archive files. If an object is in start-lib and end-lib,
the object is linked only when the file is needed to resolve
undefined symbols. That means, if an object is in start-lib and end-lib,
it behaves as if it were in an archive file.
In this patch, I introduced a new notion, LazyObjectFile. That is
analogous to Archive file type, but that works for a single object
file instead of for an archive file.
http://reviews.llvm.org/D18814
llvm-svn: 265710
|
|
|
|
|
|
|
|
|
|
| |
We have to differentiate undefined symbols from bitcode and undefined
symbols from other sources.
Undefined symbols from bitcode should not inhibit the symbol being
internalized. Undefined symbols from other sources should.
llvm-svn: 265536
|
|
|
|
|
|
|
| |
I have an idea on how to clean this up, but lets get the tests passing
first.
llvm-svn: 265374
|
|
|
|
|
|
|
|
|
|
|
| |
Make sure to copy the MustBeInDynSym field when replacing shared symbols with
bitcode symbols, and when replacing bitcode symbols with regular symbols
in addCombinedLtoObject. Fixes interposition of DSO symbols with bitcode
symbols in the main executable.
Differential Revision: http://reviews.llvm.org/D18780
llvm-svn: 265371
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a symbol is defined in an archive, when we replace its body
the isUsedInRegularObj wasn't set correctly. Internalize makes
its decision based on that bit so we ended up internalizing
symbols that we shouldn't (because they're referenced).
This should fix. Thanks to Peter and Rafael for discussion
and help diagnosing the issue!
Found during LTO of unittests.
llvm-svn: 265208
|
|
|
|
|
|
| |
We already get it right, but there was no coverage for it.
llvm-svn: 264925
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some optimizations, e.g. SimplifyLibCalls, can replace functions with
others as part of the lowering, e.g. printf => puts.
The new symbols don't have the isUsedInRegularObj flag set so they
don't get included in the final symbol table (and dynamic symbol
table), and the dynamic linker gets confused. Include them as a fix.
Differential Revision: http://reviews.llvm.org/D18357
llvm-svn: 264688
|
|
|
|
|
|
|
| |
Similarly to how we do with linkonce_odr symbols already, but
change their linkage to weak.
llvm-svn: 264181
|
|
|
|
|
|
|
|
|
|
|
| |
Ensure we keep the symbol we need to before it reaches
the Writer (and hit an assertion), changing its linkage
from linkonce_odr to weak. For a more detailed description
of the problem, see PR19901 where a similar problem was
fixed for the gold plugin. Thanks to Rafael for providing
a testcase.
llvm-svn: 264111
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This is useful for debugging issues with LTO.
The option follows the analogous option in ld64 and the gold plugin (per
Rafael's suggestion).
For starters, this only dumps the combined bitcode file.
In a future patch I will add dumping for the .o file.
The naming of the output follows ld64's convention which is slightly more
consistent IMO (consistent `.lto.<extension>` for all the files).
Reviewers: rafael, ruiu
Subscribers: joker.eph, Bigcheese, llvm-commits
Differential Revision: http://reviews.llvm.org/D18006
llvm-svn: 263055
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Reviewers: rafael
Subscribers: Bigcheese, llvm-commits, joker.eph
Differential Revision: http://reviews.llvm.org/D17974
llvm-svn: 262975
|
|
|
|
| |
llvm-svn: 262848
|