Commit Graph

2425 Commits

Author SHA1 Message Date
Rui Ueyama fa7e8a663f [ELF] Add --as-needed.
The previous default behavior of LLD is --as-needed. LLD linked
against a DSO only if the DSO file was actually used to link an
executable (i.e. at least one symbol was resolved using the shared
library file.)

In this patch I added a boolean flag to FileNode for --as-needed.
I also added an accessor to DSO name to shared library file class.

llvm-svn: 226274
2015-01-16 14:27:01 +00:00
Simon Atanasyan 6cea6473b3 [ELF] Remove TargetHandler and DefaultTargetHandler constructors
These classes contain only abstract virtual functions. Explicit
constructors are redundant.

llvm-svn: 226265
2015-01-16 09:40:21 +00:00
Simon Atanasyan c7c4b26c11 [ELF] Remove unused class field
No functional changes.

llvm-svn: 226262
2015-01-16 08:58:14 +00:00
Simon Atanasyan 49a055336b [ELF] s/_context/_ctx/ and clang-format the code
No functional changes.

llvm-svn: 226261
2015-01-16 08:58:09 +00:00
Simon Atanasyan 7bdd62b2cd [ELF] Make the unhandledReferenceType() protected method
No functional changes.

llvm-svn: 226260
2015-01-16 08:58:03 +00:00
Simon Atanasyan 8a9c8b1968 [ELF] Make `TargetRelocationHandler` a regular non-template class
This class defines a relocation handler interface. The interface does
not depend on the template argument so the argument is redundant.

llvm-svn: 226259
2015-01-16 08:57:58 +00:00
Simon Atanasyan 42f0e789ed [PPC] Remove redundant `virtual` keyword
No functional changes.

llvm-svn: 226258
2015-01-16 08:57:45 +00:00
Simon Atanasyan 53d940335c [PPC] Remove unused class field PPCTargetRelocationHandler::_ppcTargetLayout
No functional changes.

llvm-svn: 226257
2015-01-16 08:57:39 +00:00
Simon Atanasyan c46de4ba3b [Mips] Use ELFLinkingContext class instead of MipsLinkingContext where possible
No functional changes.

llvm-svn: 226256
2015-01-16 08:57:33 +00:00
Simon Atanasyan 0f049c1a7c [Mips] Make MipsLinkingContext owner of MipsELFFlagsMerger
That reduce class dependencies and simplify the code a bit.
No functional changes.

llvm-svn: 226255
2015-01-16 08:57:26 +00:00
Simon Atanasyan 157432bcb2 [Mips] Remove redundant namespace names
No functional changes.

llvm-svn: 226254
2015-01-16 08:57:17 +00:00
Simon Atanasyan 48b0bca7e8 [Mips] Allow linking object files with MIPS32 and MIPS64 instructions
If object files satisfy O32 ABI they can be linked together even if some
of them contains MIPS64 or MIPS64R2 instructions.

llvm-svn: 226253
2015-01-16 08:57:08 +00:00
Saleem Abdulrasool 6fffd487ee PE/COFF: use dyn_cast for the check of the target
The target may be a synthetic symbol like __ImageBase.  cast_or_null will ensure
that the atom is a DefinedAtom, which is not guaranteed, which was the original
reason for the cast_or_null.  Switch this to dyn_cast, which should enable
building of executables for WoA.  Unfortunately, the issue of missing base
relocations still needs to be investigated.

llvm-svn: 226246
2015-01-16 04:14:33 +00:00
Rui Ueyama 18e53ca3dd Use std::recursive_mutex instead of llvm's SmartMutex.
llvm-svn: 226236
2015-01-16 00:55:01 +00:00
Rui Ueyama c2836079df Simplify.
llvm-svn: 226225
2015-01-15 23:15:09 +00:00
Filipe Cabecinhas e609302ad1 Remove the slashes so they don't fail in some Windows setups
llvm-svn: 226222
2015-01-15 23:04:15 +00:00
Rui Ueyama 8aa4aa4fd5 Add "explicit".
llvm-svn: 226205
2015-01-15 21:05:00 +00:00
Rui Ueyama 962b0c7740 Rename InputGraph.h -> Node.h.
llvm-svn: 226154
2015-01-15 08:58:38 +00:00
Rui Ueyama ae1daae461 Simplify.
llvm-svn: 226153
2015-01-15 08:51:23 +00:00
Rui Ueyama cf14b63116 [ELF] Do not error on non-existent file in the driver.
This change makes it easy to write unit tests for the GNU driver.
No more "empty group" hack is needed. No change in functionality.

llvm-svn: 226150
2015-01-15 08:49:19 +00:00
Rui Ueyama 883afba228 Remove InputGraph and use std::vector<Node> instead.
In total we have removed more than 1000 lines!

llvm-svn: 226149
2015-01-15 08:46:36 +00:00
Rui Ueyama 61635440a9 Rename InputElement Node.
InputElement was named that because it's an element of an InputGraph.
It's losing the origin because the InputGraph is now being removed.
InputElement's subclass is FileNode, that naming inconsistency needed
to be fixed.

llvm-svn: 226147
2015-01-15 08:31:46 +00:00
Rui Ueyama 861c2d6c3a Remove InputGraph::addInputElement{,Front}.
They were the last member functions of InputGraph (besides members()).
Now InputGraph is just a container of a vector. We are ready to replace
InputGraph with plain File vector.

llvm-svn: 226146
2015-01-15 08:18:14 +00:00
Rui Ueyama 423177a54b Remove WrapperNode.
WrapperNode was a useless subclass of FileNode. We should just use
FileNode instead.

llvm-svn: 226145
2015-01-15 08:10:10 +00:00
Rui Ueyama df3fca2520 Remove FileNode::parse.
FileNode::parse was just a forwarder to File::parse so we could remove that.
Also removed dead code.

llvm-svn: 226144
2015-01-15 07:56:14 +00:00
Rui Ueyama 7c4ba12769 Remove FileNode::getPath().
Previously both FileNode and File keep filename. This patch removed
that redundancy.

llvm-svn: 226143
2015-01-15 07:38:32 +00:00
Rui Ueyama be9acbfde0 temporary commit.
llvm-svn: 226141
2015-01-15 07:23:39 +00:00
Rui Ueyama cdb1071be5 Remove InputGraph::size().
llvm-svn: 226140
2015-01-15 07:20:39 +00:00
Rui Ueyama 56206368f5 Simplify FileNode.
The member function was defined to allow subclasses to customize
error message. But since we only have one FileNode type, there's
no actual need for that.

llvm-svn: 226139
2015-01-15 07:15:36 +00:00
Rui Ueyama 8054342f9e Merge SimpleFileNode with WrapperNode.
llvm-svn: 226137
2015-01-15 07:05:46 +00:00
Rui Ueyama 5a831ee5fd [PECOFF] Remove an InputElement placeholder for the entry name.
llvm-svn: 226133
2015-01-15 06:56:26 +00:00
Rui Ueyama 80c04431ca Re-commit r225766, r225767, r225769, r225814, r225816, r225829, and r225832.
These changes depended on r225674 and had been rolled back in r225859.
Because r225674 has been re-submitted, it's safe to re-submit them.

llvm-svn: 226132
2015-01-15 06:49:21 +00:00
Rui Ueyama 2b5a4fbc30 Attempt to fix a Linux buildbot.
llvm-svn: 226127
2015-01-15 05:41:12 +00:00
Rui Ueyama df230b21e3 Re-commit r225674: Convert other drivers to use WrapperNode.
The original commit had an issue with Mac OS dylib files. It didn't
handle fat binary dylib files correctly. This patch includes a fix.
A test for that case has already been committed in r225764.

llvm-svn: 226123
2015-01-15 04:34:31 +00:00
Rui Ueyama a2013fa33c Make libmyshared.dylib a fat binary.
This would have caught the issue that I made in r225764.

llvm-svn: 226072
2015-01-15 01:32:00 +00:00
Chandler Carruth 89642a7b37 [cleanup] Re-sort #include lines using llvm/utils/sort_includes.py
This is just a mechanical cleanup, no functionality changed. This just
fixes very minor inconsistencies with how #include lines were spaced and
sorted in LLD.

llvm-svn: 225978
2015-01-14 11:26:52 +00:00
Rui Ueyama cfb2534ef8 Revert "Convert other drivers to use WrapperNode" and subsequent commits.
r225764 broke a basic functionality on Mac OS. This change reverts
r225764, r225766, r225767, r225769, r225814, r225816, r225829, and r225832.

llvm-svn: 225859
2015-01-14 00:21:34 +00:00
Rui Ueyama b34838424a Remove InputGraph::getNextFile().
getNextFile used to have a complex logic to determine which file
should be processed by the Resolver on next iteration.
Now, it is just a sequential accessor to the internal array and
provides no sensible feature.

This patch also removes InputGraph::getGroupSize and InputGraph::
skipGroup to simplify the code.

llvm-svn: 225832
2015-01-13 21:27:12 +00:00
Rui Ueyama a4f2925bd1 Use init list and move operator instead of swap().
llvm-svn: 225829
2015-01-13 21:09:05 +00:00
Rui Ueyama 555cd88224 Simplify.
We can remove these methods because every InputElement has
only one File.

llvm-svn: 225816
2015-01-13 18:51:09 +00:00
Rui Ueyama 0d31e53095 Replace vector<unique_ptr<File> with unique_ptr<File>.
Because each InputElement has exactly one File, we no longer have
to use a vector to store pointers to Files.

llvm-svn: 225814
2015-01-13 18:47:25 +00:00
Rui Ueyama d5bb5c2bfe Remove dead code.
Now every InputElement has exactly one File in it, so "expand"
method is now no-op.

llvm-svn: 225769
2015-01-13 05:59:17 +00:00
Rui Ueyama 64e3dedf3b Remove InputGraph::registerObserver.
PECOFF was the only user of the API, and the reason why we created
the API is because, although the driver creates a list of input files,
it has no knowledge on what files are being created. It was because
everything was hidden behind the InputGraph abstraction.

Now the driver knows what that's doing. We no longer need this
indirection to get the file list being processed.

llvm-svn: 225767
2015-01-13 05:24:53 +00:00
Rui Ueyama d2838c4958 Remove InputGraph::dump().
This is dead code.

llvm-svn: 225766
2015-01-13 05:11:05 +00:00
Rui Ueyama e8ecb2b144 Convert other drivers to use WrapperNode.
llvm-svn: 225764
2015-01-13 04:33:07 +00:00
Greg Fitzgerald 5a60ed7708 Remove fragile regex from test
Differential Revision: http://reviews.llvm.org/D6937

llvm-svn: 225739
2015-01-13 00:12:04 +00:00
Greg Fitzgerald cedca2f057 Remove CMake standalone build configuration
Differential Revision: http://reviews.llvm.org/D6898

llvm-svn: 225704
2015-01-12 21:41:10 +00:00
Rui Ueyama 1e51e238ed Update comment.
llvm-svn: 225645
2015-01-12 18:32:24 +00:00
Greg Fitzgerald fcf77fd369 Don't fail if parent directory name contains a '+' character
Differential Revision: http://reviews.llvm.org/D6902

llvm-svn: 225574
2015-01-10 02:34:26 +00:00
Saleem Abdulrasool b9c402ed25 PE/COFF: add support to import functions in ARM NT
This is necessary to support linking a basic program which references symbols
outside of the module itself.  Add the import thunk for ARM NT style imports.
This allows us to create the reference.  However, it is still insufficient to
generate executables that will run due to base relocations not being emitted for
the import.

llvm-svn: 225428
2015-01-08 04:19:08 +00:00