Commit Graph

10879 Commits

Author SHA1 Message Date
Sam Clegg cefbf9aca1 [WebAssembly] LTO: Fix signatures of undefined functions in bitcode
Function symbols that come from bitcode have not signatures.
After LTO when the real symbols are read in we need to make
sure that we set the signature on the existing symbol.
the signature-less undefined functions.

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

llvm-svn: 335875
2018-06-28 16:53:53 +00:00
Bob Haarman c103156c60 lld-link: align sections to 16 bytes if referenced from the gfids table
Summary:
Control flow guard works best when targets it checks are 16-byte aligned.
Microsoft's link.exe helps ensure this by aligning code from sections
that are referenced from the gfids table to 16 bytes when linking with
-guard:cf, even if the original section specifies a smaller alignment.
This change implements that behavior in lld-link.

See https://crbug.com/857012 for more details.

Reviewers: ruiu, hans, thakis, zturner

Subscribers: llvm-commits

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

llvm-svn: 335864
2018-06-28 15:22:40 +00:00
George Rimar e666545a71 [ELF] - EhFrame.cpp: add test case to check "CIE is too small" error message.
The following line of code was untested:
https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L94

Patch adds a test case.

llvm-svn: 335855
2018-06-28 13:46:49 +00:00
George Rimar 63feb16627 [ELF] - EhFrame.cpp: add test case to cover "corrupted CIE" error message.
This is to test the following line that was uncovered by LLD test cases yet:
https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L149

llvm-svn: 335852
2018-06-28 13:24:39 +00:00
George Rimar 805583e6a6 [ELF] - EhFrame.cpp: add test case to cover "DW_EH_PE_aligned encoding is not supported" error.
It is https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L144,
and we had no test case to cover it.

llvm-svn: 335849
2018-06-28 12:46:56 +00:00
Filipe Cabecinhas 02c70438f8 Fix warning on MSVC by using size_t arithmetic instead of casting after the fact. NFC
llvm-svn: 335848
2018-06-28 12:38:43 +00:00
George Rimar db139b725b [ELF] - EhFrame.cpp: add test case to check "unknown FDE encoding".
It's https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L147 line,
which was untested before this patch.

llvm-svn: 335847
2018-06-28 12:20:04 +00:00
George Rimar 5e0dfe62b6 [ELF] - EhFrame: add test case to cover uncovered branch of the code.
This test case adds test for the line that was uncovered previously:
https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L175

it errors out, but we now can test that we have expected flow,
which is different for CIE of version 1 and CIE of version 3.

llvm-svn: 335840
2018-06-28 11:58:31 +00:00
George Rimar 057ce39ea0 [ELF] - Cover "unknown .eh_frame augmentation string" error.
It was https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L195
and we did not cover it with test.

Patch fixes it.

llvm-svn: 335838
2018-06-28 11:35:10 +00:00
George Rimar 0331427895 [ELF] - Add test case to cover "corrupted CIE (failed to read LEB128)" error.
It is the following line:
https://github.com/llvm-mirror/lld/blob/master/ELF/EhFrame.cpp#L120

We did not cover it yet.

llvm-svn: 335833
2018-06-28 10:55:52 +00:00
George Rimar 99e6bad8d0 [ELF] - Removed trailing whitespace. NFC.
llvm-svn: 335826
2018-06-28 10:12:59 +00:00
George Rimar a3be535e6e [ELF] - Add test case to cover "corrupted CIE (failed to read string)"
It was uncovered by our test cases.

llvm-svn: 335824
2018-06-28 10:10:02 +00:00
George Rimar 488a894bde [ELF] - Add test case to cover "unexpected end of CIE" error.
It was uncovered by our test cases.

llvm-svn: 335819
2018-06-28 09:34:59 +00:00
George Rimar fecd315ff9 [ELF] - Get rid of precompiled elf object in test case.
We has precompiled object with unsupported FDE version (=2).
It is possible to use llvm-mc instead for this test.

Patch do this change.

llvm-svn: 335818
2018-06-28 09:29:49 +00:00
Fangrui Song 5d1fdee819 [ELF] Use %eiz after disassembler change in r335768
llvm-svn: 335784
2018-06-27 20:43:23 +00:00
Fangrui Song 65f35e4afc [ELF] Rename RF_PROGBITS_NOT_EXEC_OR_WRITE to RF_RODATA
Post commit review at D48406

llvm-svn: 335743
2018-06-27 15:56:32 +00:00
George Rimar dbbba29cc9 [ELF] - ICF: Add test case to check many sections case.
Currently, ICF does not enable threading if we have less than 1024
sections in each equivalence class.

And the following code is uncovered by our test cases:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L404

This patch adds a test case that triggers the mentioned code to execute.

llvm-svn: 335738
2018-06-27 14:37:02 +00:00
Zaara Syeda de54f584cc [PPC64] Add support for R_PPC64_GOT_DTPREL16* relocations
The local dynamic TLS access on PPC64 ELF v2 ABI uses R_PPC64_GOT_DTPREL16*
relocations when a TLS variables falls outside 2 GB of the thread storage
block. This patch adds support for these relocations by adding a new RelExpr
called R_TLSLD_GOT_OFF which emits a got entry for the TLS variable relative
to the dynamic thread pointer using the relocation R_PPC64_DTPREL64. It then
evaluates the R_PPC64_GOT_DTPREL16* relocations as the got offset for the
R_PPC64_DTPREL64 got entries.

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

llvm-svn: 335732
2018-06-27 13:55:41 +00:00
Zaara Syeda 1cdd816c12 [PPC64] Add TLS global dynamic to local exec relaxation
This patch adds the target call back relaxTlsGdToLe to support TLS relaxation
from global dynamic to local exec model.

The relaxation performs the following transformation:
addis r3, r2, x@got@tlsgd@ha --> nop
addi r3, r3, x@got@tlsgd@l   --> addis r3, r13, x@tprel@ha
bl __tls_get_addr(x@tlsgd)   --> nop
nop                          --> addi r3, r3, x@tprel@l

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

llvm-svn: 335730
2018-06-27 13:27:29 +00:00
George Rimar a582419ac7 [ELF] - Implement linker script OVERLAYs.
This is PR36768.

Linker script OVERLAYs are described in 4.6.9. Overlay Description of the spec:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html

They are used to allow output sections which have different LMAs but the same VAs
and used for embedded programming.

Currently, LLD restricts overlapping of sections and that seems to be the most desired
behaviour for defaults. My thoughts about possible approaches for PR36768 are on the bug page,
this patch implements OVERLAY keyword and allows VAs overlapping for sections that within the overlay.

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

llvm-svn: 335714
2018-06-27 08:08:12 +00:00
Rui Ueyama 53f6bfbf9b Make -z option check more strict.
llvm-svn: 335713
2018-06-27 07:56:23 +00:00
Rui Ueyama 2fa0604bcc Report an error for an unknown -z option.
This is a less clever version of https://reviews.llvm.org/D48433.
This is a dumb version but I think I prefer this for its simplicity.

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

llvm-svn: 335712
2018-06-27 07:22:27 +00:00
Fangrui Song b6772b86e2 [ELF] Move `// REQUIRES:` line to the top
llvm-svn: 335676
2018-06-26 22:20:04 +00:00
Fangrui Song 3d87323a7e [ELF] Make non-writable non-executable PROGBITS sections closer to .text
This generalizes the old heuristic placing SHT_DYNSYM SHT_DYNSTR first in the readonly SHF_ALLOC segment.

Reviewers: espindola

Subscribers: emaste, arichardson, llvm-commits

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

llvm-svn: 335674
2018-06-26 22:13:32 +00:00
Sean Fertile f60cb34c91 [PPC64] Thread-local storage general-dynamic to initial-exec relaxation.
Patch adds support for relaxing the general-dynamic tls sequence to
initial-exec.

the relaxation performs the following transformation:
addis r3, r2, x@got@tlsgd@ha --> addis r3, r2, x@got@tprel@ha
addi r3, r3, x@got@tlsgd@l   --> ld r3, x@got@tprel@l(r3)
bl __tls_get_addr(x@tlsgd)   --> nop
nop                          --> add r3, r3, r13

and instead of emitting a DTPMOD64/DTPREL64 pair for x, we emit a single
R_PPC64_TPREL64.

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

llvm-svn: 335651
2018-06-26 19:38:18 +00:00
Fangrui Song 68fa4e8c34 [ELF] Assign RF_EXEC rank even if --no-rosegment or SECTIONS command is used
Summary:
Currently when --no-rosegment is specified or a linker script with SECTIONS command is used,
.rodata (A) .text (AX) are assigned the same rank and .rodata may be placed after .text .
This increases the gap between .text and .bss and can cause pc-relative relocation overflow (e.g. gcc crtbegin.o crtbegin.S have R_X86_64_PC32 relocation from .text to .bss).

This patch makes SingleRoRx affect only segment layout, not section layout. As a consequence, .rodata will be placed before .text regardless of SingleRoRx.

Reviewers: espindola, ruiu, grimar, echristo, javed.absar

Subscribers: emaste, arichardson, llvm-commits

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

llvm-svn: 335627
2018-06-26 17:04:47 +00:00
Fangrui Song eb75b8f8f7 [ELF] Move `# REQUIRES:` line to the top
llvm-svn: 335625
2018-06-26 16:58:19 +00:00
George Rimar 8f53b6d71e [ELF] - Change the way of sorting local symbols.
rLLD329787 added the stable sorting to SymbolTableBaseSection::postThunkContents.

I profiled the Mozilla (response-O0.txt) from lld-speed-test package and found
std::stable_sort is showing up in profile results and consuming the 3.1% of the total
CPU time in the RelWithDebug build. Total time of postThunkContents is 3.54%, 238ms.

This change reduces postTimeContents time to 50ms, making it to take 0.73% of Total CPU time.

So, instead of sorting the local part I suggest to just rebuild it.
That is what this patch does.

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

llvm-svn: 335583
2018-06-26 08:50:09 +00:00
Fangrui Song 74282efee1 [ELF] Fix sort-non-script.s
llvm-svn: 335499
2018-06-25 17:16:01 +00:00
Fangrui Song 5ea154402e [ELF] Change test files for style consistency. NFC
* Move `REQUIRES:` line to the top
* llvm-mc ... -o %t -> llvm-mc ... -o %t.o
* Don't check "TEXT" "DATA" columns (they are bfd-style names that do
not fit into llvm well) in llvm-objdump output

llvm-svn: 335498
2018-06-25 17:07:40 +00:00
Fangrui Song 65c50074c2 [ELF] readobj -elf-output-style=GNU -> readelf
Style change for consistency. NFC

llvm-svn: 335494
2018-06-25 16:49:52 +00:00
George Rimar 32287ad897 [ELF] - ICF: add one more test case #3.
ICF is able to merge sections which relocations referring regular input sections
or mergeable sections, so it handles InputSection and MergeInputSection cases.

The following "return false" line which is executed in case of another type
of the sections is uncovered by our test cases:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L285
Patch fixes code coverage for this place.

llvm-svn: 335482
2018-06-25 15:27:09 +00:00
George Rimar 871b059129 [ELF] - Rewrote comment. NFC.
llvm-svn: 335479
2018-06-25 14:35:47 +00:00
George Rimar 1286c535bc [ELF] - ICF: add one more test case #2.
Check that ICF does not merge sections which relocations
have equal addends, but different target values.

This covers the following line, which was uncovered:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L278

llvm-svn: 335477
2018-06-25 14:28:40 +00:00
George Rimar 6facf4715c [ELF] - ICF: add one more test case.
This test case check that ICF does not merge 2 sections which relocations
efer to symbols that live in sections of the different types
(regular input section and mergeable input sections in this case).

It covers the following line of code, which was uncovered previously:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L271

llvm-svn: 335475
2018-06-25 14:00:05 +00:00
George Rimar 2f5ca59497 Revert r335460 "[ELF] - ICF: Remove dead code. NFC."
My mistake, it was not NFC.

llvm-svn: 335471
2018-06-25 13:46:39 +00:00
George Rimar fb66ad5ea1 [ELF] - ICF: Remove dead code. NFC.
Code is dead. We use only InputSections when building the list of
sections elegible for the ICF:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L439
And 'isEligible' filters out SyntheticSections as well for us. 

That way the only Kind we have in the Sections vector is SectionBase::Regular,
so we do not need to check sections kind at all, it is always the same.

llvm-svn: 335460
2018-06-25 12:51:55 +00:00
George Rimar afcd983a49 [ELF] - ICF: test we do not merge sectinons which relocations points to symbols of the different types.
This test case covers the following line of code:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L261

Previously it was uncovered.

llvm-svn: 335453
2018-06-25 11:37:27 +00:00
George Rimar 2051bd02a7 [ELF] - Replace llvm::find_if with the loop. NFC.
Requested during post commit review.

llvm-svn: 335447
2018-06-25 09:30:39 +00:00
Fangrui Song e737e75491 [ELF] Change llvm-objdump output for D48472: TEXT DATA -> TEXT
Reviewers: jyknight, Bigcheese, espindola

Subscribers: emaste, arichardson, llvm-commits

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

llvm-svn: 335404
2018-06-23 00:15:23 +00:00
George Rimar 0cde82ade5 [ELF] - ICF: test we do not merge sections which relocations differs only in addend.
This is to test the following `return false` line which
was uncovered by our tests earlier:

https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L255

llvm-svn: 335357
2018-06-22 15:21:38 +00:00
Sam Clegg ffd0aaf810 Revert "[WebAssembly] Error on mismatched function signature in final output"
This caused a lot of issues on the WebAssembly waterfall.
In particular, until with the signature of `main`.  We
probably want a better solution for main before we re-land.

Reverts rL335192

llvm-svn: 335355
2018-06-22 15:13:10 +00:00
George Rimar a99b3759bf [ELF] - Repair (re-enable) few ICF test cases.
--verbose is not used to report ICF sections since r324755,
--print-icf-sections is used instead.

These tests were at fact disabled since that time.

llvm-svn: 335354
2018-06-22 15:08:01 +00:00
George Rimar 6366c76fa5 [ELF] - ICF: Add 2 more test cases.
These test cases covers the following condition:
https://github.com/llvm-mirror/lld/blob/master/ELF/ICF.cpp#L243

It was uncovered by our tests. I was able to delete the whole `if`
and no test failed.

llvm-svn: 335351
2018-06-22 14:29:22 +00:00
George Rimar 50c6be9630 [ELF] - ICF: remove excessive check. NFC.
Change removes the excessive comparsion of
the relocation arrays sizes.

This code was dead, because at the higer level,
equalsConstant function contains the following check:

`A->NumRelocations != B->NumRelocations`
where NumRelocations contains the size of the relocations array.
So removed check did the same job twice.

This was found with use of code coverage analysis.

llvm-svn: 335346
2018-06-22 13:21:37 +00:00
George Rimar c9c0ccc8a9 [ELF] - Change how we handle suplicate -wrap. [NFC]
This avoids doing llvm::sort and std::unique for -wrap options.
I think it is more clean way.

llvm-svn: 335337
2018-06-22 11:18:11 +00:00
Sam Clegg 084d360f69 [WebAssembly] Only mark non-hidden symbols as live if they are also defined
Previously we were also marking undefined symbols (i.e. imports)
as live.

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

llvm-svn: 335243
2018-06-21 15:00:00 +00:00
Sam Clegg 1369dfa30b [WebAssembly] Error on mismatched function signature in final output
During symbol resolution, emit warnings for function signature
mismatches.  During GC, if any mismatched symbol is marked as live
then generate an error.

This means that we only error out if the mismatch is written to the
final output.  i.e. if we would generate an invalid wasm file.

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

llvm-svn: 335192
2018-06-21 00:12:25 +00:00
Sam Clegg e16a7d3faf [WebAssembly] Minor cleanup to test inputs. NFC.
Update load-undefined.test such that it doesn't rely on
ret32 and ret64 having default visibility.

Split out from: https://reviews.llvm.org/D48394

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

llvm-svn: 335187
2018-06-20 22:52:33 +00:00
Sam Clegg ddaab86972 [WebAssembly] Update function signature mismatch error message. NFC.
We don't start our error messages with capital letters.

Split out from https://reviews.llvm.org/D48394

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

llvm-svn: 335186
2018-06-20 22:45:03 +00:00