Commit Graph

1396 Commits

Author SHA1 Message Date
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
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
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
Rafael Espindola
18173d420e Start adding support for symbols in shared libraries.
llvm-svn: 247019
2015-09-08 15:50:05 +00:00
Rafael Espindola
4f624b9581 Simplify reporting of undefined symbols.
llvm-svn: 247016
2015-09-08 14:32:29 +00:00
Rafael Espindola
a4dd7c1d38 Revert "[elf2] Add 32S and 64 relocations (needed for musl)."
This reverts commit r246902. It had uncessary use of yaml.

llvm-svn: 247014
2015-09-08 13:52:31 +00:00
Michael J. Spencer
1b3fffa6e0 [elf2] Add 32S and 64 relocations (needed for musl).
It wasn't obvious what the assembly was to generate these relocations, so I did the test with yaml.

llvm-svn: 246902
2015-09-05 00:36:03 +00:00
Michael J. Spencer
baae538cc6 [elf2] Correctly handle sections with an alignment of 0. Spec says to treat it as an alignment of 1.
llvm-svn: 246901
2015-09-05 00:25:33 +00:00
Michael J. Spencer
f832541066 [elf2] Fix include order.
llvm-svn: 246892
2015-09-04 22:48:30 +00:00
Michael J. Spencer
1b348a68e5 [elf2] Add basic archive file support.
llvm-svn: 246886
2015-09-04 22:28:10 +00:00
Davide Italiano
ad6c81c628 [ELF2] Writer: Fold variables, use setVisibility(). NFCI.
llvm-svn: 246861
2015-09-04 19:42:14 +00:00
Rafael Espindola
f98d6d84cd Start adding support for shared libraries.
This just adds the types and enough support to detect incompatibilities among
shared libraries and object files.

llvm-svn: 246797
2015-09-03 20:03:54 +00:00
Rafael Espindola
8aeb13fec1 Add a helper function for getting the first object file.
Also preparation for shared objects. It will become the first ELF file.

llvm-svn: 246796
2015-09-03 19:13:13 +00:00
Rafael Espindola
222edc66d6 Make ObjectFiles private. NFC.
Just preparation for adding support for shared libraries.

llvm-svn: 246793
2015-09-03 18:56:20 +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
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
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
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
f3837074cc Set the symbol value in the symbol table.
llvm-svn: 245943
2015-08-25 15:53:17 +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
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