Commit Graph

7257 Commits

Author SHA1 Message Date
Eugene Leviant a113a4194c [ELF] Convert GdbIndexSection to input section
Differential revision: https://reviews.llvm.org/D26854

llvm-svn: 287526
2016-11-21 09:24:43 +00:00
Rui Ueyama 0b1b695a9e Add comments.
This patch rearranges code a bit to make it easy to explain.

llvm-svn: 287515
2016-11-21 02:11:05 +00:00
Rui Ueyama e0be2901cd Simplify. NFC.
llvm-svn: 287514
2016-11-21 02:10:12 +00:00
Rui Ueyama 60c4e36c7e Simplify. NFC.
llvm-svn: 287510
2016-11-20 23:15:56 +00:00
Rui Ueyama 7bed9eec36 Update comments.
llvm-svn: 287509
2016-11-20 23:15:54 +00:00
Rui Ueyama f94efdddc0 Add a flag to InputSectionBase for linker script.
Previously, we set (uintptr_t)-1 to InputSectionBase::OutSec to record
that a section has already been set to be assigned to some output section
by linker scripts. Later, we restored nullptr to the pointer to use
the field for the original purpose. That overloading is not very easy to
understand.

This patch adds a bit flag for that purpose, so that we don't need
to piggyback the flag on an unrelated pointer.

llvm-svn: 287508
2016-11-20 23:15:52 +00:00
Rui Ueyama 9f8cb730eb Use auto for obvious types.
llvm-svn: 287481
2016-11-20 02:43:44 +00:00
Rui Ueyama bd1f0630a8 Do not expose ICF class from the file.
Also this patch uses file-scope functions instead of class member function.

Now that ICF class is not visible from outside, InputSection class
can no longer be "friend" of it. So I removed the friend relation
and just make it expose the features to public.

llvm-svn: 287480
2016-11-20 02:39:59 +00:00
Rui Ueyama f7dfb2e250 Remove a file that is too short to be an independent file.
We have a .cpp and a .h for parseDynamicList(). This patch
moves the function to DriverUtil.cpp.

llvm-svn: 287468
2016-11-19 23:26:41 +00:00
Rui Ueyama 8f47556796 Remove unused #include.
llvm-svn: 287467
2016-11-19 23:18:43 +00:00
Rui Ueyama e2dfbc17c8 Refactor ICF.
In order to use forEachGroup in the final loop in ICF::run,
I changed some function parameter types.

llvm-svn: 287466
2016-11-19 23:14:23 +00:00
Rui Ueyama a05134e837 Use std::equal instead of hand-written loops.
llvm-svn: 287460
2016-11-19 20:15:55 +00:00
Rui Ueyama 1cb63183af Restore a comment that was accidentally changed.
llvm-svn: 287457
2016-11-19 19:26:52 +00:00
Rui Ueyama 061f9286df Use Optional<std::string> instead of "" to represent a failure.
llvm-svn: 287456
2016-11-19 19:23:58 +00:00
Rui Ueyama ec75220fe9 Make buildSysrootedPath file-scoped.
This patch also changes its return type to simplify callers.

llvm-svn: 287455
2016-11-19 19:23:56 +00:00
Rui Ueyama 844c1c908c Simplify "missing argument" error message.
We do not have an option taking more than one arguments,
so we can just say "missing argument" instead of "missing argument(s)".

llvm-svn: 287454
2016-11-19 18:49:38 +00:00
Rui Ueyama 98bdbdaedd Split getFdeEncoding.
llvm-svn: 287452
2016-11-19 18:44:09 +00:00
Rui Ueyama a9b7514eb0 Fix typo in error message.
llvm-svn: 287451
2016-11-19 18:34:55 +00:00
George Rimar 0a94bffe12 [ELF] - Exit on --version call.
GNU linkers disagree here.
Though both -version and -v are mentioned
in help to print the version information, GNU ld just normally exits,
while gold can continue linking. We are compatible with ld.bfd here.

This fixes PR31057.

Differential revision: https://reviews.llvm.org/D26865

llvm-svn: 287448
2016-11-19 18:14:24 +00:00
Rui Ueyama 6e68c5e5cf Simplify. NFC.
llvm-svn: 287446
2016-11-19 18:05:58 +00:00
Rui Ueyama 16068aeb58 Change filler type from ArrayRef<uint8_t> to uint32_t.
Filler expressions in linker script "=fillexp" are always handled
as 32-bit integers. Thus the new type is more natural.

llvm-svn: 287445
2016-11-19 18:05:56 +00:00
Rui Ueyama 5c851a5a6d Simplify. NFC.
llvm-svn: 287372
2016-11-18 19:45:04 +00:00
Rafael Espindola 4d2d9c07a5 Simplify handling of SHF_LINK_ORDER.
It seems a lot simpler to just sort the sections and let the
relocations do the rest.

llvm-svn: 287365
2016-11-18 19:02:15 +00:00
Eugene Leviant ff23d3e741 [ELF] Convert PltSection to input section
Differential revision: https://reviews.llvm.org/D26842

llvm-svn: 287346
2016-11-18 14:35:03 +00:00
Eugene Leviant b96e809c7f [ELF] Convert HashTableSection to input section
Differential revision: https://reviews.llvm.org/D26834

llvm-svn: 287326
2016-11-18 09:06:47 +00:00
Rui Ueyama f8f6f1e783 Update comment.
llvm-svn: 287325
2016-11-18 07:03:56 +00:00
Rui Ueyama 009d174229 Omit empty parameter list.
llvm-svn: 287324
2016-11-18 06:49:09 +00:00
Rui Ueyama 46247b85be Use consume() instead of peek() and skip().
llvm-svn: 287323
2016-11-18 06:49:07 +00:00
Eugene Leviant be809a7125 [ELF] Convert GnuHashTableSection to input section
Differential revision: https://reviews.llvm.org/D26792

llvm-svn: 287322
2016-11-18 06:44:18 +00:00
Rui Ueyama 12450b20b4 Split ScriptParser::readVersionDeclaration.
readVersionDeclaration was to read anonymous version definition and
named version definition. Splitting it into two functions should
improve readability as the two cases are different enough.

I also changed a few helper functions to return values instead of
mutating given references.

llvm-svn: 287319
2016-11-18 06:30:09 +00:00
Rui Ueyama 8980c92dde Use consistent variable name.
llvm-svn: 287318
2016-11-18 06:30:08 +00:00
Rui Ueyama 77f2a87575 Simplify MergeOutputSection.
MergeOutputSection class was a bit hard to use because it provdes
a series of finalize functions that have to be called in a right way
at a right time. It also intereacted with MergeInputSection, and the
logic was somewhat entangled between the two classes.

This patch simplifies it by providing only one finalize function.
Now, all you have to do is to call MergeOutputSection::finalize
when you have added all sections to the output section. Then, it
internally merges strings and initliazes StringPiece objects.
I think this is much easier to understand.

This patch also adds comments.

llvm-svn: 287314
2016-11-18 05:05:43 +00:00
Davide Italiano 2e8b2a70ab [ELF] Rename an historical leftover, `Chunk` is now `InputSection`.
llvm-svn: 287297
2016-11-18 02:23:48 +00:00
Davide Italiano 44665e7bc5 [ELF] Use std::for_each() and hoist common code in a lambda.
llvm-svn: 287296
2016-11-18 02:18:04 +00:00
Rafael Espindola 25a41c1f63 Add missing REQUIRES.
llvm-svn: 287284
2016-11-18 00:11:12 +00:00
Rafael Espindola 933fcab2ad Always compute sh_link for SHF_LINK_ORDER sections.
Since the output has a section table too, it is meaningful to compute
the sh_link. In a more practical note, the binutils' strip crashes if
sh_link is not set for SHT_ARM_EXIDX.

llvm-svn: 287280
2016-11-17 23:16:39 +00:00
Simon Atanasyan b8bfec686f [ELF][MIPS] Remove 'mips' word from MipsGotSection fields and methods names. NFC
Also add new comments with MIPS GOT description.

llvm-svn: 287264
2016-11-17 21:49:14 +00:00
Rafael Espindola dab02d4b68 Allow use define symbols to override linker defined ones.
I hit an internal linker script that was defining _DYNAMIC instead of
letting the linker do it. It turns out that both bfd and gold allow
that.

This is pretty easy to implement, just make the linker defined symbol
weak. This should have no impact in the case where there is no user
defined symbol: The visibility is hidden, which causes the output to
still be local.

llvm-svn: 287260
2016-11-17 21:20:16 +00:00
Rui Ueyama edf75e7992 Allow SIZEOF() command on nonexistent section.
Linker script doesn't create a section if it has no content. So the following
script doesn't create .norelocs section if it doesn't have any .rel* sections.

  .norelocs : { *(.rel*) }

Later, if you assert that the size of .norelocs is 0, LLD printed out
an error message, because it didn't allow calling SIZEOF() on nonexistent
sections.

This patch allows SIZEOF() on nonexistent sections, so that you can do
something like this.

  ASSERT(SIZEOF(.norelocs), "shouldn't contain .rel sections!")

Note that this behavior is compatible with GNU.

Differential Revision: https://reviews.llvm.org/D26810

llvm-svn: 287257
2016-11-17 20:27:10 +00:00
Rui Ueyama d84124f043 Add single quotes to error messages.
llvm-svn: 287254
2016-11-17 19:57:47 +00:00
Rui Ueyama 96db27c74f Use consistent variable name.
llvm-svn: 287253
2016-11-17 19:57:45 +00:00
Rui Ueyama cd236a9577 Use llvm::reverse to get a reverse range.
llvm-svn: 287252
2016-11-17 19:57:43 +00:00
Rui Ueyama 7ee38e00a5 Enable -threads by default.
LLD supports multi-threading, and it seems to be working well as
you can see in r287140. In short, LLD runs a few percent to 30%
faster with -threads and more than 50% faster if you are using
-build-id (your mileage may vary depending on your computer).

However, I don't think most users even don't know about that because
-threads is not a default option.

This patch enables it by default.

Discussion thread:
http://lists.llvm.org/pipermail/llvm-dev/2016-November/107160.html

llvm-svn: 287237
2016-11-17 17:06:51 +00:00
Rui Ueyama bac1c3ce85 Pass StringRefs instead of StringMatcher because it's simpler.
llvm-svn: 287234
2016-11-17 16:48:53 +00:00
Rafael Espindola 74fa2822f6 Simplify. NFC.
llvm-svn: 287231
2016-11-17 15:29:11 +00:00
Rafael Espindola d8b81d6663 Avoid accessing an end() iterator.
llvm-svn: 287225
2016-11-17 14:18:08 +00:00
Eugene Leviant 4b84a9041a [ELF] Remove unneeded forward declarations. NFC.
llvm-svn: 287218
2016-11-17 10:34:05 +00:00
Eugene Leviant 9230db94b7 [ELF] Convert SymbolTableSection to input section
Differential revision: https://reviews.llvm.org/D26740

llvm-svn: 287216
2016-11-17 09:16:34 +00:00
Chris Bieneman aeb30257c5 [CMake] NFC. Updating CMake dependency specifications
This patch updates a couple places where add_dependencies was being explicitly called to add dependencies on intrinsics_gen to instead use the DEPENDS named parameter. This cleanup is needed for a patch I'm working on to add a dependency debugging mode to the build system.

llvm-svn: 287205
2016-11-17 04:36:35 +00:00
Rui Ueyama 729ac793a2 Rename a function so that that starts with a lowercase letter.
llvm-svn: 287202
2016-11-17 04:10:09 +00:00