Commit Graph

9081 Commits

Author SHA1 Message Date
Simon Atanasyan 4f70b30d6f [MIPS] Initial support of microMIPS code linking
The patch implements initial support of microMIPS code linking:
  - Handle microMIPS specific relocations.
  - Emit both R1-R5 and R6 microMIPS PLT records.

For now linking mixed set of regular and microMIPS object files is not
supported. Also the patch does not handle (setup and clear) the
least-significant bit of an address which is utilized as the ISA mode
bit and allows to make jump between regular and microMIPS code without
any thunks.

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

llvm-svn: 313028
2017-09-12 13:08:24 +00:00
Peter Smith 38029d3c89 [ELF] Rename variables and add comments to getISThunkSec [NFC]
Replace OutputSection *Cmd to OutputSection *OS. The Commands vector was
moved to OutputSection but the names of the variables were not. This patch
changes the names to match.

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

llvm-svn: 313015
2017-09-12 09:17:39 +00:00
Rafael Espindola a6acd23c53 Align addresses, not offsets.
This fixes two more cases where we were aligning the offset in a
section, instead of the final address.

llvm-svn: 312983
2017-09-12 00:06:00 +00:00
NAKAMURA Takumi 8a55c471ba lldMinGW: Add LLVMSupport in libdeps.
llvm-svn: 312981
2017-09-12 00:01:07 +00:00
Rafael Espindola b7147ad3dd Correct ALIGN expression when inside a section.
When given

foobar = ALIGN(., 0x100);

my expectation from what the manual says is that the final address of
foobar will be aligned. It seems that bfd aligns the offset in the
section, which causes some odd results if the section is not 0x100
aligned. Gold aligns the address.

This changes lld to align the final address.

llvm-svn: 312979
2017-09-11 23:44:53 +00:00
Adrian Prantl dcf890598c Update testcases for llvm-dwarfdump command line interface change
llvm-svn: 312976
2017-09-11 23:34:12 +00:00
Adrian Prantl 65b79a544f Update testcases for llvm-dwarfdump command line interface change
llvm-svn: 312974
2017-09-11 23:28:21 +00:00
Rui Ueyama 9d9bdabee3 Ignore /natvis option for now.
/natvis is a new command line option introduced by MSVC 2017.
We eventually have to support it, but for now, let's ignore it so that
we can at least link stuff instead of printing out an error.

Patch by Michael Rickert.

llvm-svn: 312966
2017-09-11 22:24:13 +00:00
Rui Ueyama d2da71f971 Reorder functions so that related functions come closer.
llvm-svn: 312964
2017-09-11 22:04:37 +00:00
Rui Ueyama 447479677f Rename COFFLdOptTable MinGWOptTable for consistency.
llvm-svn: 312963
2017-09-11 22:04:25 +00:00
Rui Ueyama c16fd25c29 Make the scope of an anonymous namespace as narrow as possible.
llvm-svn: 312962
2017-09-11 22:04:13 +00:00
Rui Ueyama 95114b497f Remove unused includes and do not enclose the entire file with a namespace.
llvm-svn: 312961
2017-09-11 22:04:01 +00:00
Rui Ueyama febfec2b3c Fix MinGW/CMakeLists.txt.
We do not use "Shim" as a name of MinGW driver, so rename it MinGW.
I don't think the former dependency list was correct. MinGW driver
depends on COFF.

llvm-svn: 312960
2017-09-11 22:03:49 +00:00
Martell Malone 0d17638b89 LLD: Add -mllvm flag to the MinGW driver.
This adds support for passing LTO flags to the MINGW driver
in GNU LD style i.e. -mllvm flag -> /mllvm:flag

Reviewers: ruiu, mstorsjo

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

llvm-svn: 312956
2017-09-11 21:36:37 +00:00
Rui Ueyama c3e4602645 Sort options.
This patch also rename OPT_outlib OPT_out_implib for consistency.

llvm-svn: 312949
2017-09-11 20:54:51 +00:00
Martin Storsjo 5d5aa214d8 [MinGW] Ignore the sysroot parameter
If the sysroot parameter is passed to the clang frontend, clang
already uses it to find libraries and adds -L options for it, but
also passes it on to the linker. Therefore we can get pretty far
by just ignoring it altogether.

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

llvm-svn: 312945
2017-09-11 20:43:43 +00:00
Martin Storsjo a79762a32d [MinGW] Map the -verbose option, implement -### for showing the produced parameters
Pass the -verbose option through to the COFF linker, and show the
arguments passed to it. If the -### option is specified, just show
the produced argument list and exit, just like in clang.

Replace the first argument with "lld-link" in order to produce a
correct command line.

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

llvm-svn: 312944
2017-09-11 20:43:39 +00:00
Rui Ueyama 5941b0bb63 Improve readability of MinGW driver. NFC.
Summary:
In addition to removing a few global variables and functions, I believe
this patch improves code readability a bit in general.

Reviewers: mstorsjo, martell

Subscribers: llvm-commits

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

llvm-svn: 312940
2017-09-11 20:14:47 +00:00
Rui Ueyama e298e5e9c5 Remove cross-target test dependency.
Tests for MinGW shouldn't depend on files under test/COFF/Inputs.

llvm-svn: 312931
2017-09-11 18:00:03 +00:00
Martell Malone 894dbbe8eb LLD: Introduce a GNU LD style driver for COFF
When building COFF programs many targets such as mingw prefer
to have a gnu ld frontend. Rather then having a fully fledged
standalone driver we wrap a shim around the LINK driver.

Extra tests were provided by mstorsjo

Reviewers: mstorsjo, ruiu

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

llvm-svn: 312926
2017-09-11 17:02:59 +00:00
James Henderson 4c2a3ec33b [ELF] Fix issue with test when build path contains '@'
'@' is a valid character in file paths, but the linker script tokenizer treats it
as a separate token. This was leading to an unexpected test failure, on our local
builds. This patch changes the test to quote the path to prevent this happening.

An alternative would have been to add '@' to the list of "unquoted tokens" in
ScriptLexer.cpp, but ld.bfd has the same behaviour as the current LLD.

Reviewers: ruiu

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

llvm-svn: 312922
2017-09-11 15:55:54 +00:00
Rui Ueyama 9011320921 Remove a redundant local variable.
llvm-svn: 312823
2017-09-08 19:41:35 +00:00
Rafael Espindola 8016bdfd93 Handle empty dynamic lists.
llvm-svn: 312820
2017-09-08 18:53:43 +00:00
Rafael Espindola ee6a352a8d Handle lazy symbols is computeIsPreemptible.
llvm-svn: 312812
2017-09-08 18:41:49 +00:00
Rafael Espindola 716c57bfb5 Simplify. NFC.
We handled all undefined symbols before this.

llvm-svn: 312808
2017-09-08 18:23:25 +00:00
Rafael Espindola bb468da200 Simplify as this runs before copy relocations are created.
llvm-svn: 312807
2017-09-08 18:21:14 +00:00
Rafael Espindola d72d97b3be If --dynamic-list is given, only those symbols are preemptible.
This allows combining --dynamic-list and version scripts too. The
version script controls which symbols are visible, and
--dynamic-list controls which of those are preemptible.

Unlike previous versions, undefined symbols are still considered
preemptible, which was the issue breaking the cfi tests.

This fixes pr34053.

llvm-svn: 312806
2017-09-08 18:16:59 +00:00
Dmitry Mikulin 1e30f07ce7 Currently lld creates a single section to collect all commons. There is no way
to separate commons based on file name patterns. The following linker script
construct does not work because commons are allocated before section placement
is done and the only synthesized BssSection that holds all commons has no file
associated with it:
SECTIONS { .common_0 : { *file0.o(COMMON) }}

This patch changes the allocation of commons to create a section per common
symbol and let the section logic do the layout.

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

llvm-svn: 312796
2017-09-08 16:22:43 +00:00
George Rimar 9a2da39837 [ELF] - Simplify #2. NFC.
llvm-svn: 312789
2017-09-08 13:40:07 +00:00
George Rimar 7ac3825afb [ELF] - Simplify. NFC.
llvm-svn: 312787
2017-09-08 13:26:45 +00:00
George Rimar 113a5ca029 [ELF] - Simplify and improve symbols.s testcase.
There is no need to check anything excepr that
symbol is not in output.
Previously additional iformation like symbol values
or flags were checked, that was not correct.
For example if we would provide symbol with different
value/visibility/type for case when should not provide 
symbol at all, testcase would not fail.

llvm-svn: 312779
2017-09-08 09:31:01 +00:00
George Rimar 5f37541c73 [ELF] - Linkerscript: implement REGION_ALIAS.
REGION_ALIAS(alias, region)

Alias names can be added to existing memory regions created with
the MEMORY command. Each name corresponds to at most one
memory region.

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

llvm-svn: 312777
2017-09-08 08:23:15 +00:00
Rafael Espindola 0ff545c018 Revert "Revert "Revert r311468: If --dynamic-list is given, only those symbols are preemptible""
This reverts commit r312757.

Evgenii Stepanov reports that it broke some tests.

llvm-svn: 312771
2017-09-08 01:09:52 +00:00
Peter Collingbourne 052e855e2b COFF: Implement ThinLTO cache and cache pruning support.
Differential Revision: https://reviews.llvm.org/D37607

llvm-svn: 312770
2017-09-08 00:50:50 +00:00
Rui Ueyama 721b71d532 Replace CRLF.
llvm-svn: 312765
2017-09-07 23:54:32 +00:00
Rui Ueyama d63ac33948 Remove a stale comment.
llvm-svn: 312763
2017-09-07 23:54:20 +00:00
Peter Collingbourne cef809938d COFF: Remove unnecessary casts. NFCI.
llvm-svn: 312762
2017-09-07 23:49:09 +00:00
Rafael Espindola b7d0be5896 Revert "Revert r311468: If --dynamic-list is given, only those symbols are preemptible"
If --dynamic-list is given, only those symbols are preemptible.

This allows combining --dynamic-list and version scripts too. The
version script controls which symbols are visible, and --dynamic-list
controls which of those are preemptible.

This fixes pr34053.

llvm-svn: 312757
2017-09-07 23:19:09 +00:00
Rui Ueyama e2f52eb22f Add -no-gdb-index which negates -gdb-index option.
llvm-svn: 312753
2017-09-07 22:40:54 +00:00
Peter Collingbourne 9e26e97955 COFF: PDB: Allow multiple modules with the same name.
It is possible for two modules to have the same name if they are
archive members with the same name, or if we are doing LTO (in which
case all modules will have the name "lto.tmp").

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

llvm-svn: 312744
2017-09-07 20:39:46 +00:00
Rafael Espindola c20759038b Drop --no-threads from tests.
The performance problem with --threads is fixed.

llvm-svn: 312738
2017-09-07 19:07:49 +00:00
Peter Smith 20489ec563 [ELF] Always write non-immediate bits for AArch64 branch instruction.
To support errata patching on AArch64 we need to be able to overwrite
an arbitrary instruction with a branch. For AArch64 it is sufficient to
always write all the bits of the branch instruction and not just the
immediate field. This is safe as the non-immediate bits of the branch
instruction are always the same.

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

llvm-svn: 312727
2017-09-07 16:29:52 +00:00
George Rimar 6823c5f0c0 [ELF] - Rename PhdrEntry::First/Last to FirstSec/LastSec. NFC.
As was suggested in D34956 thread.

llvm-svn: 312712
2017-09-07 11:01:10 +00:00
George Rimar 582ede8922 [ELF] - Store pointer to PT_LOAD instead of pointer to first section in OutputSection
It is a bit more convinent and helps to simplify logic 
of program headers allocation a little.

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

llvm-svn: 312711
2017-09-07 10:53:07 +00:00
Andrew Ng 6dee736c91 [LLD] Fix padding of .eh_frame when in executable segment
The default padding for an executable segment is the target trap
instruction which for x86_64 is 0xCC. However, the .eh_frame section
requires the padding to be zero. The code that writes the .eh_frame
section assumes that its segment is zero initialized and does not
explicitly write the zero padding. This does not work when the .eh_frame
section is in the executable segment (for example when using
-no-rosegment).

This patch changes the .eh_frame writing code to explicitly write the
zero padding.

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

llvm-svn: 312706
2017-09-07 08:43:56 +00:00
James Henderson 7594c61d2d [ELF] Prevent crash with binary inputs with non-ascii file names
If using --format=binary with an input file name that has one or more non-ascii
characters in, LLD has undefined behaviour (it crashes on my Windows Debug build)
when calling isalnum with these non-ascii characters. Instead, of calling
std::isalnum, this patch uses an internal version that ignores the locale and
checks a specific subset of characters.

Reviewers: ruiu

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

llvm-svn: 312705
2017-09-07 08:30:09 +00:00
Rafael Espindola 17e93d28f2 Simplify type. NFC.
llvm-svn: 312675
2017-09-06 22:16:32 +00:00
Davide Italiano a0186dd986 [ELF/Writer] Fix english in a comment. NFCI.
llvm-svn: 312669
2017-09-06 21:16:51 +00:00
Rui Ueyama 0440be4a42 Detect linker script INCLUDE cycles.
Differential Revision: https://reviews.llvm.org/D37524

llvm-svn: 312656
2017-09-06 18:14:08 +00:00
Rui Ueyama fd06b02558 Add a comment.
llvm-svn: 312655
2017-09-06 18:09:06 +00:00