Rui Ueyama
294b136db4
Remove `explicit` from constructors that take more than one parameter.
...
llvm-svn: 248873
2015-09-30 02:06:17 +00:00
Rafael Espindola
84aff152d9
Simplify enumeration definition.
...
Thanks to Rui for the suggestion.
llvm-svn: 248615
2015-09-25 21:20:23 +00:00
Rafael Espindola
0e604f913a
Add support for creating the symbols __init_array_start and __init_array_end.
...
llvm-svn: 248604
2015-09-25 18:56:53 +00:00
Rafael Espindola
5b197f0620
Fix the typedef.
...
Thanks to David Blaikie for noticing.
llvm-svn: 248602
2015-09-25 18:32:09 +00:00
Rafael Espindola
38af127c6a
Fix the parent class of SharedSymbol.
...
It is a defined symbol according to classof. Found by inspection.
llvm-svn: 248573
2015-09-25 15:34:03 +00:00
Rafael Espindola
d27adc42e6
Add support for the _GLOBAL_OFFSET_TABLE_ symbol.
...
llvm-svn: 248490
2015-09-24 13:34:01 +00:00
Michael J. Spencer
2812aa82d0
[elf2] Pass BSSSec to the relocation handling code differently. Don't store it in the symbol.
...
llvm-svn: 248393
2015-09-23 16:57:31 +00:00
Rafael Espindola
05a3dd2cba
Implement --export-dynamic.
...
llvm-svn: 248347
2015-09-22 23:38:23 +00:00
Rafael Espindola
7167585c94
Remove the Chunk terminology from ELF.
...
llvm-svn: 248229
2015-09-22 00:16:19 +00:00
Rafael Espindola
9d06ab6ded
Rename Chunks.(h|cpp) to InputSection.(h|cpp). NFC.
...
llvm-svn: 248226
2015-09-22 00:01:39 +00:00
Rafael Espindola
53d5cea648
Rename SectionChunk to InputSection.
...
This is more consistent with OutputSection. This is also part of removing
the "Chunk" term from the ELF linker, since we just have input/output sections
and program headers.
llvm-svn: 248183
2015-09-21 17:47:00 +00:00
Rafael Espindola
eb79273158
Start adding support for PLT.
...
For now this doesn't support lazy symbol resolution, but is enough to link
and run a program with
jmp foo@PLT
llvm-svn: 248165
2015-09-21 15:11:29 +00:00
Michael J. Spencer
658dccd1c8
[elf2] Relocate against common symbols.
...
llvm-svn: 248054
2015-09-18 22:13:25 +00:00
Rafael Espindola
5c2310c30c
Start adding support for creating the GOT.
...
With this a program can call into a shared library with
jmp *foo@GOTPCREL(%rip)
llvm-svn: 247992
2015-09-18 14:40:19 +00:00
Rafael Espindola
19e3889dba
Start creating dynamic relocations.
...
For now we don't create got/plt and only Elf_Rela is supported.
llvm-svn: 247811
2015-09-16 15:54:15 +00:00
Rafael Espindola
37ecff14f4
Remove redundant "protected:".
...
llvm-svn: 247797
2015-09-16 13:47:45 +00:00
Rafael Espindola
18173d420e
Start adding support for symbols in shared libraries.
...
llvm-svn: 247019
2015-09-08 15:50:05 +00:00
Michael J. Spencer
1b348a68e5
[elf2] Add basic archive file support.
...
llvm-svn: 246886
2015-09-04 22:28:10 +00:00
Rafael Espindola
78471f0ec1
Merge visibility from all symbols with the same name.
...
The ELF spec says:
... if any reference to or definition of a name is a symbol with a
non-default visibility attribute, the visibility attribute must be
propagated to the resolving symbol in the linked object. If different
visibility attributes are specified for distinct references to or
definitions of a symbol, the most constraining visibility attribute
must be propagated to the resolving symbol in the linked object. The
attributes, ordered from least to most constraining, are:
STV_PROTECTED, STV_HIDDEN and STV_INTERNAL.
llvm-svn: 246603
2015-09-01 23:12:52 +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
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
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
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
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
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
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
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
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
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
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
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
e3335d8a66
Delete dead code.
...
llvm-svn: 244040
2015-08-05 13:26:54 +00:00
Michael J. Spencer
cdae0a4e2d
[ELF2] Devirtualize SymbolBody.
...
llvm-svn: 243496
2015-07-28 22:58: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
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
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