Commit Graph

361 Commits

Author SHA1 Message Date
Rui Ueyama c1800beb55 Remove unnecessary namespace qualifier.
llvm-svn: 194037
2013-11-05 01:37:40 +00:00
Rafael Espindola 75c2ae9664 Replace ErrorOr<void> with error_code.
It was never transporting any value in addition to the error_code.

llvm-svn: 194028
2013-11-05 00:09:36 +00:00
Rui Ueyama 1c392a5611 [ELF] Simplify SectionTable::getSymbolTableIndex. No functionality change.
MSVC 2012 raises an error in the lambda passed to vector::find_if, while it
seems valid code. Rewrote without high-order functions.

llvm-svn: 193975
2013-11-04 03:24:14 +00:00
Rui Ueyama aa5b4dc868 Remove duplicate calls of pm.add() for RoundTrip tests.
llvm-svn: 193885
2013-11-01 21:05:42 +00:00
Michael J. Spencer 5fbce5bd56 [ELF] Implement minimal support for .eh_frame_hdr.
llvm-svn: 193662
2013-10-30 00:02:04 +00:00
Shankar Easwaran 2bc24928d3 [PassManager] add ReaderWriter{Native,YAML} to the Driver.
Enable this for the following flavors

a) core
b) gnu
c) darwin

Its disabled for the flavor PECOFF. Convenient markers are added with FIXME
comments in the Driver that would be removed and code removed from each flavor.

llvm-svn: 193585
2013-10-29 05:12:14 +00:00
Shankar Easwaran b0022c00a3 [X86_64] Fix the atom that need to be exported.
llvm-svn: 193481
2013-10-26 19:38:37 +00:00
Shankar Easwaran 5afd25dcac [X86] Add more relocation types.
llvm-svn: 193480
2013-10-26 19:38:35 +00:00
Michael J. Spencer 707f591fa0 [ELF] Implement .{init,fini}_array ordering.
llvm-svn: 193451
2013-10-25 23:59:06 +00:00
Rui Ueyama 89d4681b81 Put missing license header.
llvm-svn: 193435
2013-10-25 20:58:12 +00:00
Michael J. Spencer 28c7a21b29 [ELF] Refactor x86-64 relocation pass.
This renames the GOTPLTPass to RelocationPass and refactors it to better
represent the different types of relocations.

llvm-svn: 193379
2013-10-24 22:46:48 +00:00
Michael J. Spencer 2fd6c7d91c [ELF][x86-64] Generate PLT for R_*_32S relocs.
llvm-svn: 193369
2013-10-24 21:00:25 +00:00
Rui Ueyama 671c8013ed Revert "r193300 - [PassManager] add ReaderWriter{Native, YAML} to the Driver"
The patch have completely broken COFF port and disabled many tests.
This also reverts r193302 (comment fix).

llvm-svn: 193362
2013-10-24 18:22:16 +00:00
Shankar Easwaran 89c2d8faca [PassManager] add ReaderWriter{Native,YAML} to the Driver.
Disable tests to be run with REQUIRES: disable. Note disable is not added to the
config by the test runner Mkaefiles, so essentially disables the test.

Code changes would be required to fix these tests :-

test/darwin/hello-world.objtxt
test/elf/check.test
test/elf/phdr.test
test/elf/ppc.test
test/elf/undef-from-main-dso.test
test/elf/X86_64/note-sections-ro_plus_rw.test
test/pecoff/alignment.test
test/pecoff/base-reloc.test
test/pecoff/bss-section.test
test/pecoff/drectve.test
test/pecoff/dynamic.test
test/pecoff/dynamicbase.test
test/pecoff/entry.test
test/pecoff/hello.test
test/pecoff/imagebase.test
test/pecoff/importlib.test
test/pecoff/lib.test
test/pecoff/multi.test
test/pecoff/reloc.test
test/pecoff/weak-external.test

llvm-svn: 193300
2013-10-24 03:30:03 +00:00
Shankar Easwaran b6c825a5cf [ELF] Set ordinals properly to all atoms.
llvm-svn: 192939
2013-10-18 02:12:17 +00:00
Shankar Easwaran bcf36560fd [ELF] Fix Atoms in the same file had overlapping ordinals.
This also reverts the LayoutPass to use std::sort as all files
have an ordinal now.

llvm-svn: 192409
2013-10-11 01:50:04 +00:00
Shankar Easwaran 26594caec4 [ELF] Initial design to handle Linker scripts for ELF.
llvm-svn: 192369
2013-10-10 17:27:49 +00:00
Shankar Easwaran 95d4e61411 [ELF] Change MaxAlignment to 2.
llvm-svn: 192310
2013-10-09 18:12:31 +00:00
Shankar Easwaran 49408ece47 [Layout] Dont set ordinals to Files by default.
This change removes code in various places which was setting the File Ordinals.
This is because the file ordinals are assigned by the way files are resolved.

There was no other way than making the getNextFileAndOrdinal be set const and
change the _nextOrdinal to mutable.

There are so many places in code, that you would need to cleanup to make
LinkingContext non-const!

llvm-svn: 192280
2013-10-09 07:32:47 +00:00
Rui Ueyama c6015f6476 Update error classes from all lowercase to camel case.
llvm-svn: 192261
2013-10-09 00:57:22 +00:00
Shankar Easwaran 7f1146c494 [LinkingContext] make LinkingContext non-const
llvm-svn: 192183
2013-10-08 15:43:48 +00:00
Shankar Easwaran a96f3a3da4 [lld][InputGraph] Change the Resolver to use inputGraph
Changes :-

a) Functionality in InputGraph to insert Input elements at any position
b) Functionality in the Resolver to use nextFile
c) Move the functionality of assigning file ordinals to InputGraph
d) Changes all inputs to MemoryBuffers
e) Remove LinkerInput, InputFiles, ReaderArchive

llvm-svn: 192081
2013-10-07 02:47:09 +00:00
Michael J. Spencer d419dbcc48 [ELF] Fix uninitalized value.
llvm-svn: 191924
2013-10-03 19:25:34 +00:00
Michael J. Spencer 102f82a74e [ELF] Handle copy relocations for PC32.
This will eventually need to be refactored to better handle COPY relocations,
as other relocations can also generate them. I'm not yet sure the exact
circumstances in which they are needed yet.

llvm-svn: 191567
2013-09-27 21:30:27 +00:00
Michael J. Spencer 3b36473007 [ELF] Mark STT_GNU_IFUNC symbols as code.
llvm-svn: 191566
2013-09-27 21:30:04 +00:00
Michael J. Spencer 32a3f9ee29 [ELF] Add COPY relocations.
llvm-svn: 191467
2013-09-26 22:09:16 +00:00
Michael J. Spencer 4355bb9d22 [Core] Add type and size to SharedLibraryAtom.
llvm-svn: 191466
2013-09-26 22:08:43 +00:00
Michael J. Spencer 4d628347b1 [ELF] Fix use after free.
llvm-svn: 191403
2013-09-25 22:12:14 +00:00
Rui Ueyama 8db1eddc07 Make Driver::link and LinkingContext::validate return true on success.
This patch inverts the return value of these functions, so that they return
"true" on success and "false" on failure. The meaning of boolean return value
was mixed in LLD; for example, InputGraph::validate() returns true on success.
With this patch they'll become consistent.

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1748

llvm-svn: 191341
2013-09-24 23:26:34 +00:00
Shankar Easwaran e67ba51791 [lld][ELF] Remove invalid comment
llvm-svn: 191207
2013-09-23 16:28:23 +00:00
Shankar Easwaran 7915ff34b7 [lld][LinkingContext][ELF] Allow different output file types.
This adds an option --output-filetype that can be set to either
YAML/Native(case insensitive). The linker would create the outputs
associated with the type specified by the user.

Changes all the tests to use the new option.

llvm-svn: 191183
2013-09-23 04:24:15 +00:00
Shankar Easwaran a2f881e275 [lld][ELF][Hexagon] Cleanup unused data
Cleanup structure members that are not being used.

Also clang-format it.

llvm-svn: 191038
2013-09-19 21:27:21 +00:00
Shankar Easwaran a17e5bc02a [lld][ELF] Support non alloc sections in the Writer.
This also makes it support debugging executables built with lld.

Initial patch done by Bigcheese. This is only a revised patch to
have the functionality in the Writer.

llvm-svn: 191032
2013-09-19 20:07:01 +00:00
Shankar Easwaran 063b75013f [lld][ELF] Assign sectionChoice properly to ELF atoms
This sets the sectionChoice property for DefinedAtoms. The output section name
is derived by the property of the atom. This also decreases native file size.

Adds a test.

llvm-svn: 190840
2013-09-17 02:56:22 +00:00
Joerg Sonnenberger 97fc3834b8 Output soname.
llvm-svn: 190758
2013-09-14 19:53:51 +00:00
Joerg Sonnenberger 9e5676c5c8 If .bss doesn't exist, set _end/end based on .data.
llvm-svn: 190753
2013-09-14 13:59:49 +00:00
Joerg Sonnenberger 4263d8b35d Add _end symbol for dynamic libraries. At least brk/sbrk in libc on
NetBSD need it.

llvm-svn: 190752
2013-09-14 13:45:29 +00:00
Shankar Easwaran 2a92c18ba3 [lld][ELF] Handle multiple weak symbols
This handles multiple weak symbols which appear back to back. This fix is needed
which otherwise will lead to symbols getting initialized to arbitrary values.

There was a constructor/destructor test that really triggered this to be fixed
on X86_64.

Adds a test.

llvm-svn: 190658
2013-09-13 04:25:44 +00:00
Shankar Easwaran 2734d79d94 [lld][ELF] Fix vaddr of the first section
The first section in the output was not aligned to the alignment of the section.

llvm-svn: 190610
2013-09-12 15:43:17 +00:00
Shankar Easwaran df2dd193ee [lld][ELF] Fix the readonly section order.
This associates rodata and sections which just have the SHF_ALLOC flag
to be set to typeConstant.

llvm-svn: 190609
2013-09-12 15:43:13 +00:00
Joerg Sonnenberger ecd1d9bc1d Handle _DYNAMIC correctly in the x86_64 backend.
llvm-svn: 190302
2013-09-09 12:19:28 +00:00
Joerg Sonnenberger 5e235de9d3 Change the parseFile argument from MemoryBuffer pointer to LinkerInput
reference. Move readFile logic into FileNode::createLinkerInput.

llvm-svn: 190253
2013-09-07 17:55:28 +00:00
Shankar Easwaran 176e7fd05f [lld][ELF] Change the order of the writable note section
Writable note sections if they exist should not appear before text
they belong in the data segment

llvm-svn: 190024
2013-09-05 01:50:21 +00:00
Shankar Easwaran 8c705690ab [lld][ELF] Differentiate between Note sections(RW/RO)
It looks like there is a possibility of seeing RO/RW note sections
and we would need to create an appropriate RO/RW segment associated
with them.

Adds a test too.

llvm-svn: 189907
2013-09-04 02:42:02 +00:00
Shankar Easwaran b85f1857a1 [lld][ELF] Emit note sections
Emit note sections if the input contains a note section.

Also emit a note segment.

llvm-svn: 189896
2013-09-04 00:51:42 +00:00
Joerg Sonnenberger 37f50b7ccc Start a TODO list for the ELF backend.
llvm-svn: 189890
2013-09-04 00:00:48 +00:00
Shankar Easwaran d3b3d71a3a [lld] Remove bitfield for boolean members
llvm-svn: 189876
2013-09-03 22:55:45 +00:00
Shankar Easwaran 84c643fcc3 [lld][ELF][X86_64] Fix alignment of init_array/fini_array sections
llvm-svn: 189874
2013-09-03 22:44:46 +00:00
Shankar Easwaran 2b9d1025d6 [lld][ELF] Change the InitFini atom type from Stub to Data
llvm-svn: 189873
2013-09-03 22:44:44 +00:00
Shankar Easwaran fce7952b79 [lld][ELF][Hexagon] add Init/Fini option for hexagon
This adds init/fini support for Hexagon.

llvm-svn: 189872
2013-09-03 22:44:42 +00:00
Shankar Easwaran 2f5d64062b [lld] handle the case of errors from createLinkerInput
This changes the interface of createLinkerInput to use ErrorOr, so that
errors from the linker can be captured.

Also adds a convenience function for error strings to be returned from
file nodes.

llvm-svn: 189871
2013-09-03 22:44:37 +00:00
Joerg Sonnenberger a82839593c Finish -rpath implementation to actually create the DT_RPATH entries.
llvm-svn: 189847
2013-09-03 20:45:09 +00:00
Joerg Sonnenberger 840d3daf01 Add support for --sysroot.
llvm-svn: 189826
2013-09-03 16:29:02 +00:00
Joerg Sonnenberger 7d5aed5ce5 A weak reference to a symbol that is only weakly referenced in
dependencies should remain weak, not get promoted to undef or dropped.

llvm-svn: 189793
2013-09-03 12:06:33 +00:00
Shankar Easwaran 2e4424b431 [lld][ELF] Add Init/Fini support
This creates .init_array/.fini_array section for X86_64 ELF
targets and executes init/fini functions specified by the
-init/-fini options respectively.

llvm-svn: 189719
2013-08-31 05:27:44 +00:00
Shankar Easwaran d26c8e3463 [lld][LinkingContext] Atoms created from command line options should be available in YAML
This adds an API to the LinkingContext for flavors to add Internal files
containing atoms that need to appear in the YAML output as well, when -emit-yaml
switch is used.

Flavors can add more internal files for other options that are needed.

llvm-svn: 189718
2013-08-31 05:27:38 +00:00
Rui Ueyama 352e7308c0 Rename ti -> ctx.
This should have been done in r187823 when I renamed LinkingContext
from TargetInfo. I missed a few files.

llvm-svn: 189298
2013-08-27 00:04:42 +00:00
Shankar Easwaran f1947537a0 [lld][ELF] Cleanup ELF writing, No change in functionality
The cleanup includes :-

* Rename ambiguous Header class to ELFHeader
* Convert Chunk contentype and kind to be a enumerated class
* Remove functions that are not being used, avoids future confusion

llvm-svn: 189209
2013-08-26 03:16:13 +00:00
Shankar Easwaran be81dd757e [lld][ELF] process fini_array sections
This change processes fini_array section in addition to processing
init_array sections. This also makes functions registered at compile
time for initialization and finalization to be run during execution

llvm-svn: 189196
2013-08-25 18:05:12 +00:00
Shankar Easwaran f9fe6250ff [lld][ELF] Dont ignore zero sized sections.
There may be relocations that may be pointing to the section
even if the section sizes are 0. We shouldnot ignore them
for that regard.

llvm-svn: 189139
2013-08-23 20:03:35 +00:00
Shankar Easwaran 78457803bc [lld][ELF][Cleanup] Section associated with the relocation traversed
There is no change in functionality, this uses the defined way to access
the relocation section that belongs to a particular section.

llvm-svn: 189138
2013-08-23 20:03:31 +00:00
Shankar Easwaran d9e0a49357 [lld][ELF] Rename typeTLV content type for ELF
typeTLV content type is used by Darwin to represent thread local
storage. A new contentType has to be made to represent ELF
thread local storage data. These have been set to

- typeThreadZeroFill (represents TBSS storage)
- typeThreadData     (represents TDATA storage)

llvm-svn: 189137
2013-08-23 20:03:28 +00:00
Shankar Easwaran d17ba4bd4d [lld] handle typeZeroFill atoms in ELF/Native/YAML
BSS atoms dont take any file space in the Input file. They are associated
with a contentType(typeZeroFill). Similiar zero fill types also exist which
have the same meaning in terms of occupying file space in the Input.

These atoms have to be handled seperately when writing to the
lld's intermediate file or the lld test infrastructure.

Also adds a test.

llvm-svn: 189136
2013-08-23 20:03:21 +00:00
Shankar Easwaran c1ea4572ba [lld][Hexagon] Enable Hexagon sdata sorting test
llvm-svn: 188981
2013-08-22 03:02:17 +00:00
Shankar Easwaran b4fae7c3d0 remove trailing whitespace
llvm-svn: 188965
2013-08-22 00:08:25 +00:00
Shankar Easwaran e44104b001 add InputGraph functionality
llvm-svn: 188958
2013-08-21 22:57:10 +00:00
Michael J. Spencer 238cc72ec5 Update to llvm changes.
llvm-svn: 188021
2013-08-08 22:26:50 +00:00
Rui Ueyama 0ca149fce9 Rename TargetInfo -> LinkingContext.
Also change some local variable names: "ti" -> "context" and
"_targetInfo" -> "_context".

Differential Revision: http://llvm-reviews.chandlerc.com/D1301

llvm-svn: 187823
2013-08-06 22:31:59 +00:00
Shankar Easwaran 2302bd5568 [lld] rename member variable name.
This renames variable name to reflect initial undefined symbols that are
defined by the linker -u option.

This doesnot change any functionality in lld, and updates code to reflect
Nick's comment.

llvm-svn: 184682
2013-06-24 03:22:51 +00:00
Rui Ueyama 7b7b0b9f7d Removed unnecessary "class" keyword.
llvm-svn: 184589
2013-06-21 19:59:15 +00:00
Shankar Easwaran 53caafebdb [ELF] add -u/--undefined option, to define undefined symbols
llvm-svn: 184266
2013-06-19 00:31:09 +00:00
Shankar Easwaran f91031efcf [ELF] Add more sections to the default section map.
This change adds functionality to add more sections like .gcc_except_table,
.data.rel.local, .data.rel.ro into the default section map, so that they are
all merged into appropriate output sections.

This also makes c++ static binaries comparable to what you get with the default
linker.

Adds a test for testing the functionality.

llvm-svn: 184071
2013-06-17 02:29:36 +00:00
Rui Ueyama e96044a370 [lld] Move AtomLayout from ELF to ReaderWriter so that it can be used by non-ELF writers.
Reviewers: Bigcheese

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D977

llvm-svn: 184061
2013-06-16 17:14:58 +00:00
Benjamin Kramer 2b004debde Fix typo in comment. Found by -Wdocumentation.
llvm-svn: 184058
2013-06-16 11:09:47 +00:00
Shankar Easwaran a42a473893 [ELF] add NMAGIC/OMAGIC support
llvm-svn: 184055
2013-06-16 05:06:28 +00:00
Rui Ueyama 8338716e8d [ARM] Remove isThumb() as it's not used and it's not in the right place.
Architecture specific code should reside in architecture specific directory
not in Atom. Looks like there are no efforts being made at this moment to
support ARM, so let's remove it for now.

Reviewers: Bigcheese

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D959

llvm-svn: 183877
2013-06-13 00:26:16 +00:00
Rui Ueyama 969e70265a [ELF] Remove unused parameter from ELFReference c'tor.
Reviewers: shankarke

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D961

llvm-svn: 183850
2013-06-12 18:21:36 +00:00
Shankar Easwaran 08470c4b6b [ELF][X86_64] Create GOT entries for external TLS symbols properly without Segfaults.
llvm-svn: 183817
2013-06-12 00:32:39 +00:00
Shankar Easwaran 79dbc5b5d1 [ELF] NMAGIC support : Find the BSS section to setup the virtual address of _end.
llvm-svn: 183816
2013-06-12 00:32:35 +00:00
Shankar Easwaran d5ff08ca5f [ELF] TBSS section has to be special cased so that it doesnot occupy memory space
llvm-svn: 183815
2013-06-12 00:32:32 +00:00
Rafael Espindola 2fa59a9330 Convert another use of sys::identifyFileType.
No functionality change.

llvm-svn: 183762
2013-06-11 18:12:28 +00:00
Rafael Espindola c1b32686fe Factor duplicated yamlReader creation.
The yaml reader is not specific to any file format. This patch moves
it to TargetInfo and makes validate a non virtual interface so that it
can be constructed from a single location.

The same method will be used to create a reader for llvm bitcode
files.

llvm-svn: 183740
2013-06-11 12:36:05 +00:00
Rui Ueyama e3ee514aa7 [ELF] Refactor File.h.
- Split createAtom() in lib/ReaderWriter/ELF/File.h into small methods.
 - Added comments to code in other methods.

No functionality changes.

Reviewers: shankarke

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D921

llvm-svn: 183696
2013-06-10 21:32:44 +00:00
Rafael Espindola 808dfba985 Use the StringRef version of identifyFileType.
llvm-svn: 183670
2013-06-10 15:36:21 +00:00
Rafael Espindola 4cdc6c14ed Use early returns.
No functionality change.

llvm-svn: 183659
2013-06-10 14:27:58 +00:00
Rafael Espindola a0af48fc93 Fix handling of files without a symbol table.
This fixes a recent regression (r183338). Stripped elf files (like installed
crtn.o for example), are not required to have a symbol table. Handle that
correctly.

llvm-svn: 183573
2013-06-07 21:08:19 +00:00
Rafael Espindola 0b87956542 Update for llvm's r183337.
llvm-svn: 183338
2013-06-05 20:35:36 +00:00
Shankar Easwaran a5008e3a63 [lld][elf] Add --dynamic-linker option to the ELF linker.
Users can override the default value of the dynamic linker to be set to the
one that appears in the command line. The path can even be empty!. 

Added a test for the option.

llvm-svn: 182889
2013-05-29 22:51:01 +00:00
Michael J. Spencer 20cd8b6114 Parallel write.
llvm-svn: 182795
2013-05-28 19:09:56 +00:00
Michael J. Spencer 9ae1408556 [ELF] Make addressOfAtom thread safe.
The expression _atomToAddressMap[atom] may modify _atomToAddressMap.

llvm-svn: 182793
2013-05-28 19:09:25 +00:00
Michael J. Spencer bd66d04f34 Instrument things.
llvm-svn: 182789
2013-05-28 18:55:39 +00:00
Michael J. Spencer 427354ee21 [ELF][Reader] Kind in this context refers to File::Kind. Qualify with Reference::Kind.
llvm-svn: 182787
2013-05-28 18:43:17 +00:00
Rui Ueyama f52a930cfb Fix indentation.
llvm-svn: 182709
2013-05-25 04:59:32 +00:00
Michael J. Spencer e24b872188 Use new version of countLeadingZeros.
llvm-svn: 182697
2013-05-25 00:25:21 +00:00
Shankar Easwaran 4df05caadb [lld][ELF] Inline header files into the one file using it
llvm-svn: 182427
2013-05-21 21:47:33 +00:00
Shankar Easwaran 87a594835f [lld][ELF][x86_64,hexagon] Changed dynamic atoms to live in anonymous namespace
so that their names are hidden.

This addresses comments raised by Sean/Rafael.

llvm-svn: 182230
2013-05-20 03:57:01 +00:00
Shankar Easwaran 9af77a2cab [lld][ELF][All Archs] Addend is used by dynamic relocations
only if they are relative. This removes the FIXME when the
relocations are being emitted and checks if the relocation
is relative and only then populates the addend information.

I couldnt add a testcase for this as llvm-readobj lacks     
functionality of printing dynamic relocations.              

When the functionality is added, remove the commented lines
from elf/ifunc.test to test functionality.

llvm-svn: 182077
2013-05-17 05:10:30 +00:00
Shankar Easwaran f9a7933d90 [lld][ELF][X86_64] Reorganize X86_64 Target specific code
This patch splits X86_64Target specific code so that 
the dynamic atoms and the Relocation handlers are in seperate 
files for easier maintenace. The files are sure to grow and this 
makes it easier to work with.

* There is no change in functionality *

llvm-svn: 182076
2013-05-17 04:19:53 +00:00
Rui Ueyama d819aa5c54 [lld] Do not create a temporary pair.
llvm-svn: 182033
2013-05-16 17:58:14 +00:00
Rui Ueyama bd314482e1 [lld] Fix inconsistent style and do cleanup.
llvm-svn: 182031
2013-05-16 17:53:34 +00:00