Denis Protivensky
18add764f0
[ELF2] Fix typo in RelocationSection::hasRelocs method
...
llvm-svn: 247878
2015-09-17 09:54:29 +00:00
Rafael Espindola
eade07ba59
Start adding support for Elf_Rel.
...
I don't intend to add full i686 support right now, just make sure we have all
the infrastructure in place for it.
llvm-svn: 247858
2015-09-16 21:57:07 +00:00
Davide Italiano
6d328d3841
[ELF2] Initial support for local symbols.
...
Symbol table is now populated correctly, but some fields are missing,
they'll be added in the future. This patch also adds --discard-all
flag, which was the default behavior until now.
Differential Revision: http://reviews.llvm.org/D12874
llvm-svn: 247849
2015-09-16 20:45:57 +00:00
Rafael Espindola
2b92d8f184
Move code computing NumEntries to finalize.
...
When DynamicSection is constructed we still don't know if there will be
any dynamic relocations or not.
llvm-svn: 247838
2015-09-16 19:26:31 +00:00
Rafael Espindola
3887ebfc21
Add DT_RELA and DT_RELASZ to the dynamic table.
...
llvm-svn: 247837
2015-09-16 18:52:42 +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
Michael J. Spencer
141dd91ac5
[elf2] Simplify overflow checks.
...
llvm-svn: 247768
2015-09-16 02:02:04 +00:00
Michael J. Spencer
75e5fda3de
[elf2] Add R_X86_64_32S.
...
llvm-svn: 247758
2015-09-16 00:24:19 +00:00
Michael J. Spencer
dff84070da
[elf2] Add error checking for the R_X86_64_32 relocation.
...
llvm-svn: 247745
2015-09-15 23:36:30 +00:00
Michael J. Spencer
3c1ac0a17a
[elf2] Relocate absolute symbols.
...
llvm-svn: 247738
2015-09-15 23:12:02 +00:00
Rafael Espindola
e6451d9e74
Replace isa+cast with dyn_cast. NFC.
...
llvm-svn: 247691
2015-09-15 14:08:11 +00:00
Rafael Espindola
a5c97d9025
Add support for R_X86_64_64.
...
llvm-svn: 247688
2015-09-15 13:52:06 +00:00
Rafael Espindola
7d4038dc5a
Use the same typedef style for all Elf_* types.
...
llvm-svn: 247680
2015-09-15 12:43:09 +00:00
Rui Ueyama
b73002fb4e
ELF2: Simplify by removing temporary variables.
...
llvm-svn: 247652
2015-09-15 01:03:58 +00:00
Rafael Espindola
c92d28d427
Simplify, NFC.
...
Thanks to Rui for the suggestion.
llvm-svn: 247637
2015-09-14 23:28:02 +00:00
Rafael Espindola
80faee82e6
Add content to the .hash section.
...
This also sets DT_HASH.
With this simple shared libraries created by lld can be loaded by the dynamic
linker.
llvm-svn: 247625
2015-09-14 22:08:55 +00:00
Rui Ueyama
9078f73fa0
Use C++11 member initializers. NFC.
...
llvm-svn: 247613
2015-09-14 20:32:41 +00:00
Rafael Espindola
601771ebc0
Start adding the .hash output section.
...
It is still empty. Content will be added in the next patch.
llvm-svn: 247609
2015-09-14 20:20:34 +00:00
Rafael Espindola
bfcdfb32af
Correctly align sections.
...
We have to align the start, not the end.
This should fix crashes on systems where memcpy enforces the expected
alignment.
llvm-svn: 247599
2015-09-14 19:00:35 +00:00
Rafael Espindola
4340aad144
Start adding support for creating shared libraries.
...
They are not fully functional yet, but this implements enough support for lld
itself to read them.
With that, delete the .so binary we were using for tests and start eating our
own dog food.
llvm-svn: 247487
2015-09-11 22:42:45 +00:00
Rafael Espindola
1d12ab3db1
Fix handling of _start being undefined.
...
We were crashing before.
llvm-svn: 247481
2015-09-11 21:44:55 +00:00
Rafael Espindola
92b6c15cce
Fix a copy and paste error. Sorry about that.
...
llvm-svn: 247478
2015-09-11 21:26:42 +00:00
Rafael Espindola
2e9eac13c7
Implement -rpath.
...
llvm-svn: 247475
2015-09-11 21:18:56 +00:00
Rafael Espindola
7010776db7
Implement the -dynamic-linker option.
...
With this dynamic executables can be executed with just ./t instead of
/lib64/ld-2.20.so ./t
llvm-svn: 247446
2015-09-11 18:49:42 +00:00
Rafael Espindola
d67bb26642
Add more information to a comment.
...
llvm-svn: 247408
2015-09-11 13:20:07 +00:00
Rafael Espindola
243d90f549
Add a DT_SYMTAB entry in the dynamic section.
...
With this a trivial shared binary runs with the glibc dynamic linker:
LD_LIBRARY_PATH=. /lib64/ld-2.20.so ./t
llvm-svn: 247370
2015-09-11 01:14:39 +00:00
Rafael Espindola
fb815282d5
Create a dynamic symbol table.
...
For now it includes every symbol in the regular table. Since we don't
create dynamic relocations yet, we don't have a good way of knowing which
symbols are actually needed.
llvm-svn: 247365
2015-09-11 00:30:13 +00:00
Rafael Espindola
24d07fdd27
Cache the bss output section in the writer, not in the symbol table.
...
There is soon going to be two symbol tables, but there will still be only one
output bss.
llvm-svn: 247363
2015-09-11 00:10:11 +00:00
Rafael Espindola
dd34a4d3c5
Make a few details of the string and symbol table private.
...
This is in preparation to adding a dynamic string table.
llvm-svn: 247355
2015-09-10 22:49:06 +00:00
Rafael Espindola
65db630fe7
Fix a warning when building with gcc.
...
It was
/Writer.cpp:119:45: warning: enumeral and non-enumeral type in conditional expression
llvm-svn: 247330
2015-09-10 20:02:22 +00:00
Rafael Espindola
0a2e211ace
Create a PT_LOAD program header for the start of the file.
...
With this a trivial dynamic program works with the musl dynamic linker:
LD_LIBRARY_PATH=. ~/musl/lib/libc.so ./t
llvm-svn: 247290
2015-09-10 15:41:34 +00:00
Rafael Espindola
60252d8feb
Change the load addr into something that works on linux x86_64.
...
With this simple static programs run again.
llvm-svn: 247205
2015-09-09 22:53:55 +00:00
Michael J. Spencer
1d299a8a9d
[elf2] Assign output sections to PHDRs.
...
This is a minimal implementation to produce legal output. Future patches will combine multiple compatible PT_LOADs.
llvm-svn: 247185
2015-09-09 20:48:09 +00:00
Rafael Espindola
778562fc78
Add the DT_NEEDED entries to the dynamic table.
...
llvm-svn: 247181
2015-09-09 20:26:23 +00:00
Rui Ueyama
d5004e1c69
Fix indentation.
...
llvm-svn: 247169
2015-09-09 18:02:23 +00:00
Rui Ueyama
6666f6ad73
ELF2: Reduce nesting by returning early. NFC.
...
llvm-svn: 247168
2015-09-09 17:55:09 +00:00
Rui Ueyama
7da94a58a0
ELF2: Return early. NFC.
...
llvm-svn: 247165
2015-09-09 17:40:51 +00:00
Rafael Espindola
3f4228f613
Start adding content to the dynamic section.
...
With this patch we create a dynamic string table (it is allocated, unlike
the regular one) and the dynamic section has a DT_STRTAB pointing to it.
llvm-svn: 247155
2015-09-09 15:33:08 +00:00
Rafael Espindola
e438e07856
Create a dynamic segment.
...
It is still empty. I will add content next.
llvm-svn: 247097
2015-09-08 22:55:28 +00:00
Michael J. Spencer
ac5f048e09
[lld][elf2] Address review comments.
...
llvm-svn: 247096
2015-09-08 22:51:46 +00:00
Michael J. Spencer
546c64c733
[lld][elf2] Fix hard coded entry address.
...
llvm-svn: 247089
2015-09-08 22:34:57 +00:00
Rafael Espindola
18608a0a55
Simplify using namespaces and typedefs. NFC.
...
llvm-svn: 247079
2015-09-08 21:57:31 +00:00
Rafael Espindola
b9fe03d4a9
Revert "[lld][elf2] Fix hard coded entry address."
...
This reverts commit r247073.
It broke
lld :: elf2/basic32be.s
lld :: elf2/basic64be.s
llvm-svn: 247077
2015-09-08 21:32:44 +00:00
Michael J. Spencer
8be15899b4
[lld][elf2] Fix hard coded entry address.
...
llvm-svn: 247073
2015-09-08 21:11:25 +00:00
Michael J. Spencer
88f0d63bea
[lld][elf2] Fix style.
...
llvm-svn: 247064
2015-09-08 20:36:20 +00:00
Rafael Espindola
740fafe54d
Start creating the .dynamic section.
...
For now it is always empty.
llvm-svn: 247056
2015-09-08 19:43:27 +00:00
Rafael Espindola
57b2592ace
Don't treat the string table index specially. NFC.
...
We assign the string table section an index like every other section, we can
use it from there.
llvm-svn: 247051
2015-09-08 19:23:30 +00:00
Rafael Espindola
b01b57486d
Bug fix: Assign output section indexes *after* sorting them.
...
llvm-svn: 247037
2015-09-08 18:08:57 +00:00
Rafael Espindola
5f55387251
Every output section should be added to the OutputSecitons vector.
...
Simplify.
llvm-svn: 247032
2015-09-08 17:39:39 +00:00