Rafael Espindola
ee1364f7f6
Don't leave unused strings in the string table.
...
llvm-svn: 246593
2015-09-01 21:47:21 +00:00
Rafael Espindola
5b3942f54a
Don't include hidden or internal symbols in the symbol table.
...
llvm-svn: 246583
2015-09-01 20:36:51 +00:00
Rafael Espindola
7f37775e56
Every symbol now has an Elf_Sym. Simplify. NFC.
...
llvm-svn: 246581
2015-09-01 20:30:52 +00:00
Rafael Espindola
06c3a6d676
Start recording st_other (i.e. visibility).
...
llvm-svn: 246577
2015-09-01 19:42:38 +00:00
Rafael Espindola
f31f9617ca
Remember the maximum alignment used to refer to a common symbol.
...
llvm-svn: 246517
2015-09-01 01:19:12 +00:00
Rafael Espindola
b56cb9437f
Sort common symbols by alignment.
...
llvm-svn: 246511
2015-09-01 00:16:38 +00:00
Rafael Espindola
ce8c9c0548
Set the correct value for the common symbols.
...
In the relocatable object it is the alignment, but in the linked file it is
a regular address.
llvm-svn: 246505
2015-08-31 22:55:21 +00:00
Rafael Espindola
8b09d68447
Assign common symbols to the .bss output section.
...
llvm-svn: 246503
2015-08-31 22:33:21 +00:00
Rafael Espindola
0518574a73
Start allocating space for common symbols.
...
llvm-svn: 246496
2015-08-31 22:07:18 +00:00
Rafael Espindola
058f343246
Don't allocate space for SHT_NOBITS sections.
...
llvm-svn: 246480
2015-08-31 20:23:57 +00:00
Rafael Espindola
f7d45f0869
Delete SyntheticUndefined.
...
Now that resolved is templated anyway, we can use the regular Undefined.
llvm-svn: 246407
2015-08-31 01:46:20 +00:00
Rafael Espindola
daa92a6193
Keep the largest common symbol.
...
This requires templating some functions over ELFT, but that opens other cleanup
opportunities for future patches.
llvm-svn: 246405
2015-08-31 01:16:19 +00:00
Rafael Espindola
30e1797b38
Turn resolution.s into an exhaustive testcase.
...
Now that we print a symbol table and all symbol kinds are at least declared,
we can test all combinations that don't produce an error.
This also includes a few fixes to keep the test passing:
* Keep the strong symbol in a weak X strong pair
* Handle common symbols.
The common X common case will be finished in a followup patch.
llvm-svn: 246401
2015-08-30 23:17:30 +00:00
Davide Italiano
94f183a696
[ELFv2] Implement R_X86_64_32 relocation.
...
Differential Revision: http://reviews.llvm.org/D12436
llvm-svn: 246362
2015-08-29 13:15:42 +00:00
Rafael Espindola
51d4690b6e
Start adding support for common symbols.
...
For now this just recognizes the special section number.
llvm-svn: 246332
2015-08-28 21:26:51 +00:00
Rafael Espindola
3a63f3fb22
Add support for weak absolute symbols.
...
On ELF being weak is independent of what we call the kind of the symbol. So
this also makes the code simpler.
llvm-svn: 246326
2015-08-28 20:19:34 +00:00
Rafael Espindola
871765c321
Make sure we output symbols in the same order on 32 and 64 bit builds.
...
llvm-svn: 246264
2015-08-28 02:46:41 +00:00
Rafael Espindola
f2f41a9f97
Fix the gcc build:
...
InputFiles.h:98:53: error: invalid use of incomplete type ‘class lld::elf2::SymbolBody’
return SymbolBodies[SymbolIndex - FirstNonLocal]->getReplacement();
llvm-svn: 246262
2015-08-28 02:40:04 +00:00
Michael J. Spencer
67bc8d6b3f
[elf2] Add basic relocation support for x86-64.
...
This currently doesn't handle local symbols.
Differential Revision: http://reviews.llvm.org/D11612
llvm-svn: 246234
2015-08-27 23:15:56 +00:00
Rafael Espindola
0e0c1901c9
Start adding support for absolute symbols.
...
llvm-svn: 246147
2015-08-27 12:40:06 +00:00
Rafael Espindola
e11c6d2d6f
Set the symbol size in the symbol table.
...
llvm-svn: 246086
2015-08-26 21:46:24 +00:00
Rafael Espindola
034e2e7a8e
Define types close to use. NFC.
...
llvm-svn: 246085
2015-08-26 21:42:36 +00:00
Rafael Espindola
b85b4079f1
git-clang-format the constructor to reduce the diff in a merge.
...
llvm-svn: 246076
2015-08-26 20:46:55 +00:00
Rafael Espindola
f3837074cc
Set the symbol value in the symbol table.
...
llvm-svn: 245943
2015-08-25 15:53:17 +00:00
Rafael Espindola
5cd113df01
Diagnose symbols with invalid section indexes.
...
llvm-svn: 245884
2015-08-24 22:00:25 +00:00
Rafael Espindola
2034822981
Add support for reading files with more than 0xff00 sections.
...
llvm-svn: 245880
2015-08-24 21:43:25 +00:00
Rafael Espindola
832b93f219
Start recording the section of symbols in the symbol table.
...
Support for more than 64 K sections to follow shortly.
llvm-svn: 245868
2015-08-24 20:06:32 +00:00
Rafael Espindola
c5c82916e4
Read the alignment only when used.
...
The rest of the header was already read lazily, no point in having align be
special.
llvm-svn: 245863
2015-08-24 19:28:31 +00:00
Rafael Espindola
e6f52102a3
Remove a duplicated member variable. NFC.
...
This just makes it clear that, for now, there is only one symbol table.
llvm-svn: 245844
2015-08-24 14:48:18 +00:00
Rui Ueyama
570752c7ac
Do not use unique pointers. NFC.
...
These unique pointers have the exact same lifetime as automatic
variables, so use automatic variables instead.
llvm-svn: 245281
2015-08-18 09:13:25 +00:00
Rafael Espindola
1bd885aba4
ELF: Also record the type of undefined symbols.
...
Tested with a weak undefined. Testing with a plain undefined will have to wait
for support for -shared.
llvm-svn: 245069
2015-08-14 16:46:28 +00:00
Rafael Espindola
bd481b8f89
Fix the build with gcc.
...
llvm-svn: 245060
2015-08-14 15:20:34 +00:00
Rafael Espindola
c44d17ad45
Add the type of the symbols to the symbol table.
...
For now only defined symbols are covered. I will add undefined ones in the
next patch.
llvm-svn: 245057
2015-08-14 15:10:49 +00:00
Rafael Espindola
457c940835
Delete dead code.
...
llvm-svn: 245056
2015-08-14 14:58:57 +00:00
Rafael Espindola
4c3aa0f228
Delete unused forward declarations.
...
llvm-svn: 245055
2015-08-14 14:51:11 +00:00
Rafael Espindola
3bf356ee9c
Remove unused default values.
...
llvm-svn: 245053
2015-08-14 14:38:44 +00:00
Rafael Espindola
beee25e484
Make these headers as being c++.
...
llvm-svn: 245050
2015-08-14 14:12:54 +00:00
Rafael Espindola
383c323d4d
ELF: Set the correct symbol binding.
...
llvm-svn: 245049
2015-08-14 13:52:36 +00:00
Rafael Espindola
62b81b875a
Start populating the symbol table.
...
With this patch only the name is set. I will set the other fields shortly.
For now the table doesn't include local symbols. This is equivalent to using
--discard-all with gnu ld. This is OK for now since the symbols are not
needed for execution and for testing symbol resolution we only need the
global symbols.
llvm-svn: 245044
2015-08-14 13:07:05 +00:00
Rui Ueyama
8050d32b13
ELF2: Rename a function to make it the same as the COFF's counterpart.
...
llvm-svn: 245030
2015-08-14 05:17:30 +00:00
Rafael Espindola
f763ca3c9c
ELF: Create a symbol table.
...
For now it is empty. I will add the symbols in a followup patch.
llvm-svn: 245008
2015-08-14 02:42:20 +00:00
Rafael Espindola
83b0dc6392
ELF: Drop the Chunk base class.
...
With OutputSection being a virtual interface, each concrete OutputSection
handles only one type of chunk and we don't need a base Chunk class.
So for we have a class that handles input sections and one that handles
the string table, but this extends naturally for other outputs (symbol table,
merging of SHF_MERGE sections, etc.).
llvm-svn: 244972
2015-08-13 22:21:37 +00:00
Rafael Espindola
ebd2108215
Make OutputSection virtual and use that for creating the string table.
...
We were creating the string table in a completely ad hoc way. Now the
string table is an output section and gets its output offset set just like
any other section.
This opens the way for other linker created sections like the symbol table.
llvm-svn: 244969
2015-08-13 22:14:37 +00:00
Rafael Espindola
2db634d8f1
Correctly align output sections.
...
They don't need to be aligned to page boundaries. Only segments need that.
llvm-svn: 244942
2015-08-13 20:24:18 +00:00
Rafael Espindola
0160a281c2
Record the alignment of the output sections.
...
llvm-svn: 244941
2015-08-13 20:13:39 +00:00
Rafael Espindola
5d83ccd55b
Make getSectionName non virtual. NFC.
...
llvm-svn: 244939
2015-08-13 19:18:30 +00:00
Rafael Espindola
ea133eaa39
Delete dead code.
...
llvm-svn: 244938
2015-08-13 19:00:23 +00:00
Rafael Espindola
a175eb6ca6
Template OutputSection only over Is64Bit.
...
This is a bit more c++ code, but:
* It is less machine code: lld's text is 44688 bytes smaller.
* It should be a bit more efficient in the non native endian case.
* It should be a bit more efficient on architectures with slow unaligned access.
llvm-svn: 244934
2015-08-13 18:37:23 +00:00
Rafael Espindola
184d94e009
Define trivial methods inline. NFC.
...
llvm-svn: 244930
2015-08-13 18:25:47 +00:00
Rafael Espindola
64e888ba5f
Set the file offset of zero sized sections.
...
There is no reason not to do it and this matches what gold and bfd ld do.
llvm-svn: 244929
2015-08-13 18:23:43 +00:00
Rafael Espindola
29e8d343e4
Rename addSectionChunk to addChunk now that it can handle any Chunk.
...
llvm-svn: 244919
2015-08-13 17:35:13 +00:00
Rafael Espindola
375a508234
Pass the type and flags to the OutputSection constructor. NFC.
...
This will allow further cleanups.
llvm-svn: 244918
2015-08-13 17:32:30 +00:00
Rafael Espindola
a7471795ae
Take name, type and flags in consideration when concatenating sections.
...
This is mandated by the ELF spec.
llvm-svn: 244911
2015-08-13 17:04:50 +00:00
Rafael Espindola
674b5d570f
Store the offset in the output section, no in the file.
...
That is the value that is stable as the we layout the output sections.
llvm-svn: 244904
2015-08-13 15:54:36 +00:00
Rafael Espindola
ef1ac01c2e
Don't give an address to sections that are not allocated.
...
llvm-svn: 244900
2015-08-13 15:31:17 +00:00
Rafael Espindola
abad6186c3
Place SHF_ALLOC sections first in the output.
...
Having them in the middle of the file complicates the creation of segments.
llvm-svn: 244898
2015-08-13 15:23:46 +00:00
Rafael Espindola
25f51850a4
Delete dead code.
...
llvm-svn: 244896
2015-08-13 14:48:49 +00:00
Rafael Espindola
cde251370a
Include non-alloca sections in the link.
...
llvm-svn: 244895
2015-08-13 14:45:44 +00:00
Rafael Espindola
bdc8f2fb83
Update for llvm api change.
...
llvm-svn: 244849
2015-08-13 00:31:46 +00:00
Rafael Espindola
372889a8e6
Fix an use of uninitialized.
...
Should fix some tests on windows.
llvm-svn: 244834
2015-08-12 23:25:42 +00:00
Rafael Espindola
91009b3856
Fix the alignment of the section headers.
...
Thanks a lot to Rui for noticing it.
llvm-svn: 244711
2015-08-12 01:45:28 +00:00
Rafael Espindola
6b83b90b6a
ELF: Create a string table.
...
For now only the sections are in it, but it already makes the output easier
to read and test.
llvm-svn: 244702
2015-08-12 00:00:24 +00:00
Rui Ueyama
4f89fdad9f
ELF2: Make Defined{Regular,Weak} ctors look the same as other SymbolBody ctors.
...
llvm-svn: 244701
2015-08-11 23:37:25 +00:00
Rafael Espindola
021834046f
Template ELF's OutputSection.
...
This removes what I think is the last hard coded ELF64 structure.
llvm-svn: 244700
2015-08-11 23:34:29 +00:00
Rafael Espindola
52a0f1e8c6
Move more code that is local to Writer.cpp to an anonymous namespace.
...
llvm-svn: 244697
2015-08-11 23:22:24 +00:00
Rafael Espindola
5211c2a1a0
Delete dead code.
...
llvm-svn: 244696
2015-08-11 23:19:06 +00:00
Rafael Espindola
98f6bd09e4
Be a bit more consistent about using uintX_t for offsets and sizes. NFC.
...
llvm-svn: 244694
2015-08-11 23:14:13 +00:00
Rui Ueyama
880632c458
ELF2: Remove unused global variable.
...
A global variable "Driver" is to re-entry to the driver to parse a
.drectve section. Because the need is COFF-specific, we don't need
this variable for ELF.
llvm-svn: 244680
2015-08-11 21:45:55 +00:00
Reid Kleckner
f7b85e0ce2
Fix mismatched sign comparison
...
llvm-svn: 244653
2015-08-11 20:06:51 +00:00
Rafael Espindola
76e24ea955
Add support for weak undefined symbols.
...
llvm-svn: 244640
2015-08-11 17:57:05 +00:00
Rafael Espindola
791e9f9c59
Remove unused templating.
...
llvm-svn: 244639
2015-08-11 17:51:57 +00:00
Rafael Espindola
b13df6582a
Add support for weak symbols.
...
llvm-svn: 244636
2015-08-11 17:33:02 +00:00
Rafael Espindola
ae1b23bd61
Use real values for DefindeFirst and DefinedLast.
...
With this clang notices that switches are fully covered.
llvm-svn: 244632
2015-08-11 17:10:02 +00:00
Rafael Espindola
9247f165ff
Delete unused typedef.
...
llvm-svn: 244628
2015-08-11 16:55:28 +00:00
Rafael Espindola
7c388187c9
Don't report a conflict between two local symbols.
...
llvm-svn: 244624
2015-08-11 16:30:34 +00:00
Rafael Espindola
d8340dae0c
Don't depend on getDotSymtabSec. It is going away.
...
llvm-svn: 244451
2015-08-10 15:12:17 +00:00
Rafael Espindola
1a9344fa26
Use already available symbol tables. NFC.
...
llvm-svn: 244336
2015-08-07 17:16:28 +00:00
Rafael Espindola
df1e05a26c
Delete broken code.
...
This was using a hard coded string table and getting it for every symbol.
The symbol name was already available.
llvm-svn: 244220
2015-08-06 15:33:21 +00:00
Rafael Espindola
49a2ca6ddd
bar
...
llvm-svn: 244219
2015-08-06 15:33:19 +00:00
Rafael Espindola
192e1fa59d
Move the error handling functions to Error.h. NFC.
...
llvm-svn: 244216
2015-08-06 15:08:23 +00:00
Rui Ueyama
cb8474edae
COFF, ELF2: Pass output file path implicitly using Config global variable.
...
Various parameters are passed implicitly using Config global variable
already. Output file path is no different from others, so there was no
special reason to handle that differnetly.
This patch changes the signature of writeResult(SymbolTable *, StringRef)
to writeResult(SymbolTable *).
llvm-svn: 244180
2015-08-05 23:51:50 +00:00
Rui Ueyama
afff74e228
ELF2: Simplify Writer interface.
...
We are using Writer more like a function instead of a class.
This patch makes it a function to simplify the interface.
All details of Writer class is now hidden from other parts of the linker.
llvm-svn: 244169
2015-08-05 23:24:46 +00:00
Rafael Espindola
4b7c2fc64e
Add bare minimum to get a working i386 linux program.
...
llvm-svn: 244050
2015-08-05 15:08:40 +00:00
Rafael Espindola
e7a00e326a
For now we only have on Chunk type. Simplify.
...
The others we have in sight are
* common symbols.
* entries in SHF_MERGE sections.
They will have a substantially different treatment. It is not clear if it is
worth it putting them all in a single list just to dispatch based on the kind on
the other side.
I hope to implement common symbols soon, and then we will be in a position
to have a concrete discussion. For now this is simpler for the the implemented
features.
llvm-svn: 244042
2015-08-05 13:55:34 +00:00
Rafael Espindola
e3335d8a66
Delete dead code.
...
llvm-svn: 244040
2015-08-05 13:26:54 +00:00
Rafael Espindola
3c9cb4b3d3
lld elf2: Diagnose trying to mix incompatible files.
...
This is also a step in instantiating the writer with the correct template
argument.
llvm-svn: 244035
2015-08-05 12:03:34 +00:00
Rafael Espindola
87ee8dcb64
Use ELFOSABI_NONE. This matches both bfd ld and gold.
...
llvm-svn: 244033
2015-08-05 11:55:52 +00:00
Rafael Espindola
aefd5c1617
Create ObjectFile with the correct endian and word size.
...
The writer is still hard coded to 64 bits le, but with this we can test for
invalid ELF files.
llvm-svn: 243993
2015-08-04 15:45:54 +00:00
Rafael Espindola
e0a5c09a5c
Use make_unique. NFC.
...
llvm-svn: 243988
2015-08-04 15:06:36 +00:00
Rafael Espindola
2ffdd4d0e5
The SymbolTable doesn't need to be a template.
...
It was already using just code that is common to all object files.
llvm-svn: 243985
2015-08-04 14:29:01 +00:00
Rafael Espindola
602592a048
Remove a silly return.
...
llvm-svn: 243983
2015-08-04 14:08:11 +00:00
Rafael Espindola
30318518a5
This function never returns null, don't check it.
...
llvm-svn: 243982
2015-08-04 14:00:56 +00:00
Rafael Espindola
b89951457d
Remove SymbolTable::getChunks.
...
When we were using a std::sort over all the chunks we needed to put them in a
single storage.
Now that we just iterate over them and use a map to find the output section,
we can avoid allocating the temporary storage.
llvm-svn: 243980
2015-08-04 13:39:30 +00:00
Michael J. Spencer
44fc1c0a73
[ELF2] Templatize addChunk and handle section flags.
...
llvm-svn: 243579
2015-07-29 22:14:50 +00:00
Rui Ueyama
b4731a5847
ELF2: Use DenseMap instead of std::map for a symbol table.
...
We use DenseMap for COFF too.
llvm-svn: 243534
2015-07-29 16:30:40 +00:00
Michael J. Spencer
5a6f5f178e
[ELF2] Emit correct section types.
...
llvm-svn: 243509
2015-07-29 00:52:17 +00:00
Michael J. Spencer
8039dae26d
[ELF2] Emit section table.
...
llvm-svn: 243506
2015-07-29 00:30:10 +00:00
Michael J. Spencer
cdae0a4e2d
[ELF2] Devirtualize SymbolBody.
...
llvm-svn: 243496
2015-07-28 22:58:25 +00:00
Rui Ueyama
e44524de65
Use SmallDenseMap instead of std::map where we don't care about order of keys.
...
llvm-svn: 243358
2015-07-28 00:17:25 +00:00
Rui Ueyama
fdbbcdad87
ELF2: Inline very small functions.
...
llvm-svn: 243323
2015-07-27 20:39:04 +00:00
Rui Ueyama
a7ccb2926f
ELF2: Devirtualize SymbolBody::compare. NFC.
...
This is to make it consistent with COFF.
llvm-svn: 243321
2015-07-27 20:39:01 +00:00
Rui Ueyama
06d7bd2e42
ELF2: Avoid calling std::sort to make output deterministic.
...
llvm-svn: 243232
2015-07-26 00:50:15 +00:00
Rui Ueyama
179cd7b82a
ELF2: Remove dead code.
...
llvm-svn: 243231
2015-07-26 00:50:13 +00:00
Michael J. Spencer
84487f1174
[ELF2] Add a new ELF linker based on the new PE/COFF linker.
...
Differential Revision: http://reviews.llvm.org/D11188
llvm-svn: 243161
2015-07-24 21:03:07 +00:00
Michael J. Spencer
bae540e945
Revert ELF port. Posting to mailing list.
...
llvm-svn: 242118
2015-07-14 04:49:48 +00:00
Michael J. Spencer
50ed5308d1
Fix warnings.
...
llvm-svn: 242098
2015-07-14 01:02:37 +00:00
Michael J. Spencer
f754b1fe12
Put explicit template instantiations in the correct namespace.
...
llvm-svn: 242093
2015-07-14 00:22:00 +00:00
Michael J. Spencer
64661cdb4c
Remove commented out code.
...
llvm-svn: 242092
2015-07-14 00:11:38 +00:00
Michael J. Spencer
8a4145411f
Initial ELF port.
...
This is a direct port of the new PE/COFF linker to ELF.
It can take a single object file and generate a valid executable that executes at the first byte in the text section.
llvm-svn: 242088
2015-07-13 23:48:06 +00:00