Commit Graph

451 Commits

Author SHA1 Message Date
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
Rui Ueyama 5f689e24de [lld] Fix compiler warning that shift count is too big on P64.
llvm-svn: 181852
2013-05-14 23:51:50 +00:00
Rui Ueyama fe81cf8f91 [lld] Allow flags other than -std= in CMAKE_CXX_FLAGS. Also simplify the IF conditions.
llvm-svn: 181822
2013-05-14 19:53:41 +00:00
Rui Ueyama 0196d1062f [lld][LayoutPass] Cleanup: replace (*atom).size() with atom->size().
llvm-svn: 181804
2013-05-14 16:53:59 +00:00
Rui Ueyama 5ec6d1a9cd [lld][LayoutPass] Fix a bug that caused buildbot to fail on some platforms.
llvm-svn: 181752
2013-05-14 01:51:56 +00:00
Rui Ueyama ca8ca55b52 [lld][LayoutPass] Split buildFollowOnTable for readability.
Summary:
Split buildFollowOnTable to small functions to improve
code readability and remove code duplication. No change
in functionality.

CC: llvm-commits

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

llvm-svn: 181749
2013-05-14 00:41:52 +00:00
Rui Ueyama deb979bf7a [lld] Add help text for -flavor option.
llvm-svn: 181655
2013-05-11 01:24:38 +00:00
Rui Ueyama 0227be6b0e [lld] Fix typo in document.
llvm-svn: 181652
2013-05-11 00:26:26 +00:00
Rui Ueyama eaadec3a39 [lld] Document about how to enable debug output.
llvm-svn: 181640
2013-05-10 22:19:28 +00:00
Shankar Easwaran bd525a3f63 [lld][ELF] set ordinals for mergeAtoms and fix testcase
llvm-svn: 181622
2013-05-10 18:52:29 +00:00
Shankar Easwaran 3c5d2c8a24 [lld][LayoutPass] This commit fixes a problem in the
Layoutpass by ordering atoms if they appear in the override
list first and then looking at the way of ordering atoms in
the default way.

The fix also fixes issues with the sizes of the sections,
that appear in the output properly too.

The commit also adds a testcase(orderatoms-by-override.test)
to test it and fixes all the other relevant testcases.

llvm-svn: 181605
2013-05-10 16:44:02 +00:00
Rui Ueyama eb6b6e4857 [lld] Fix broken test. -layout-pass option does not exist.
Also shuffle the atoms so that it can verify the layout pass
actually changed the layout.

llvm-svn: 181573
2013-05-10 00:50:33 +00:00
Rui Ueyama 4689326d4c [lld] Fix wrong comment.
llvm-svn: 181547
2013-05-09 21:14:02 +00:00
Rui Ueyama 90b3b92a8b [lld] Use range based for loop instead of explicit iterators (no functionality change)
llvm-svn: 181503
2013-05-09 04:00:44 +00:00
Rui Ueyama 60f5f30687 [lld] Add comments to InputFiles::searchLibraries() arguments.
llvm-svn: 181492
2013-05-08 23:54:10 +00:00
Rui Ueyama 980e52d7ae [lld][Core] Fix latch synchronization bug.
We need to acquire a lock before signal a condition.
Otherwise threads waiting on a condition variable can
miss a signal.

Consider two threads: Thread A executing dec() and thread
B executing sync(). The initial value of _count is 1. If
these two threads are interleaved in the following order,
thread B misses the signal sent by thread A, because at the
time thread A sends a signal, B is not waiting for it.

  Thread A                 |   Thread B
                           |   std::unique_lock<std::mutex> lock(_condMut);
                           |   while (!(_count == 0)) {
  if (--_count == 0)       |
    _cond_notify_all()     |
                           |     _cond.wait();
                           |   }

Note that "wait(lock, pred)" is equivalent to "while(!pred())
wait(lock)", so I expanded it in the above example.

Reviewers: Bigcheese

CC: llvm-commits

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

llvm-svn: 181484
2013-05-08 23:29:24 +00:00
Rui Ueyama ec504cfffd [lld] Add "explicit" to constructors where appropriate.
Summary:
Add the explicit keyword to one-parameter
constructors to prevent unintended type conversions.

CC: llvm-commits

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

llvm-svn: 181483
2013-05-08 23:20:53 +00:00
Nick Kledzik 80d8308b57 Use anonymous namespace for local classes. Patch by Rui Ueyama
llvm-svn: 181473
2013-05-08 21:34:11 +00:00
Shankar Easwaran e796006333 [lld][ELF] fix build failure
llvm-svn: 181325
2013-05-07 15:27:02 +00:00
Shankar Easwaran 790ede43de [lld][ELF] split ELF reader into multiple functions for readability (no change in functionality)
llvm-svn: 181288
2013-05-07 04:58:09 +00:00
Michael J. Spencer 75ed350132 [ELF] Initialize readers and writers on creation.
This makes the target handler a constructor argument because the constructor of
OutputELFWriter relies on it being initialized.

llvm-svn: 181280
2013-05-07 00:28:07 +00:00
Michael J. Spencer b5fb0dee0c [Core] Properly stop the ThreadPoolExecutor and use the ConcRT memory allocator.
llvm-svn: 181279
2013-05-07 00:27:40 +00:00
Shankar Easwaran c8858b3469 [lld]remove lld-core
llvm-svn: 181244
2013-05-06 20:24:39 +00:00
Tim Northover d11e5bc03c [lld][ELF] fix header comment typos
llvm-svn: 181188
2013-05-06 08:31:58 +00:00
Shankar Easwaran 6e1f5b7d1a [lld][ELF] reduce the number of symbols emitted in the symbol table
llvm-svn: 180872
2013-05-01 19:36:38 +00:00
Shankar Easwaran 02078464e1 [lld][ELF] continue on finding a section with no symbols, tests already present
llvm-svn: 180769
2013-04-30 03:14:01 +00:00
Shankar Easwaran cc06891c42 [lld][ELF] (no testable functionality change) resize the number of entries in the string table for static linking
llvm-svn: 180692
2013-04-29 04:10:42 +00:00
Shankar Easwaran d846d9852e [lld][ELF] (no testable functionality change) resize the number of entries in the string table for static linking
llvm-svn: 180691
2013-04-29 04:10:11 +00:00
Shankar Easwaran 45a5f93517 [lld][LayoutPass] initialize the number of entries for the densehash (no functionality change)
llvm-svn: 180690
2013-04-29 03:27:57 +00:00
Michael J. Spencer 9d70cef481 [Core] Allow weak symbols in shared library when linking.
Patch by Rui Ueyama.

llvm-svn: 180209
2013-04-24 19:00:26 +00:00
Andy Gibbs 93383381d7 Distinguish between unsupported and unrecognised flavours.
Suggested by Nick Kledzik in reference to r179590.

llvm-svn: 179617
2013-04-16 19:24:13 +00:00
Andy Gibbs bab932b850 Moved llvm_unreachable out of switch blocks to avoid the "control reaches end of non-void function" warning.
llvm-svn: 179590
2013-04-16 11:52:34 +00:00
Michael J. Spencer 1eb3b89d92 [Core] Add parallel infrastructure to lld.
Uses ConcRT and PPL on Windows.

llvm-svn: 179397
2013-04-12 18:40:39 +00:00
Nico Rieck bdfd4eb223 Replace elf-dump with llvm-readobj in lld tests
llvm-svn: 179364
2013-04-12 04:29:01 +00:00
Shankar Easwaran bba9fe8495 [test] missing underscore while checking for test output
llvm-svn: 179264
2013-04-11 04:20:21 +00:00
Shankar Easwaran 4cb24b38f6 [test] fix failing test, the test was not accounting for - in the path
llvm-svn: 179260
2013-04-11 04:08:11 +00:00
Shankar Easwaran eeee23e60a This adds functionality for undefined atoms from dynamic libraries to be added
to the list of undefined atoms. 

The processing of undefined atoms from dynamic libraries is controlled by
use-shlib-undefines command line option. 

This patch also adds additional command line arguments to allow/disallow
unresolved symbols from shared libraries and mimics GNU ld behavior.

llvm-svn: 179257
2013-04-11 02:56:30 +00:00
Michael J. Spencer d4eb47c110 Add VTune as an optional external dependency and add task tracking.
llvm-svn: 178940
2013-04-06 00:56:40 +00:00
Michael J. Spencer e6d5609de4 Revert "Correctly pass ownership of MemoryBuffers."
llvm-svn: 178918
2013-04-05 22:04:44 +00:00
Michael J. Spencer ce1e53e19c Correctly pass ownership of MemoryBuffers.
llvm-svn: 178914
2013-04-05 21:08:30 +00:00
Michael J. Spencer 096ea03f31 Fix uninitialized variables. Found by ubsan.
llvm-svn: 178913
2013-04-05 21:07:44 +00:00
Shankar Easwaran f4a5e2f439 [ELF][test] add dynamic library search
llvm-svn: 178840
2013-04-05 04:34:57 +00:00
Shankar Easwaran a4323a5cca This fixes a SIGSEGV failure in ReaderArchive while trying to trace what
InputFile is being pulled from the Archive library to resolve a symbol. 

The buffer which was being used was already being handed over to the
MemoryBuffer object and was being accessed after the hand over. 

Moving it before the buffer is handed over.

llvm-svn: 178838
2013-04-05 03:50:15 +00:00
Shankar Easwaran 831b4a0503 [test] remove printing the file to stdout
llvm-svn: 178817
2013-04-04 23:53:46 +00:00
Shankar Easwaran d953d66ee9 [ELF] fix atom order
llvm-svn: 178815
2013-04-04 23:51:36 +00:00
Michael J. Spencer dfe85483d5 [Driver] Fix symlinked universal driver behavior and add a test.
llvm-svn: 178798
2013-04-04 22:04:16 +00:00