Commit Graph

22 Commits

Author SHA1 Message Date
Simon Atanasyan
cd9f268b50 [Mips] Remove redundant non-template MipsRelocationHandler class
llvm-svn: 234155
2015-04-06 13:26:04 +00:00
Simon Atanasyan
58a7fd48dc [Mips] Replace MipsRelocationHandler::readAddend() by a regular function
The readAddend() does not depend on MipsRelocationHandler and should not
be its member function.

llvm-svn: 234154
2015-04-06 13:25:58 +00:00
Simon Atanasyan
3a8691a27a [Mips] Reformat the code with clang-format
llvm-svn: 234153
2015-04-06 13:25:52 +00:00
Rui Ueyama
1490b3512e ELF: Remove TargetHandler::getTargetLayout.
Only MIPS used that member function, and by removing the use of the
function, I removed a static_cast. Seems like it's a win.

llvm-svn: 233748
2015-03-31 20:31:48 +00:00
Simon Atanasyan
9a0263aad7 [Mips] Make readAddend a virtual member function to escape explicit
template class instantiation

No functional changes.

llvm-svn: 232081
2015-03-12 18:53:06 +00:00
Simon Atanasyan
cc0ed289b4 [Mips] Refactoring of relocation handling functions
1. Move relocation addendum reading code to the MipsRelocationHandler
class to reduce code duplication.
2. Factor out the relocations calculation code into the separate
function to be ready to handle MIPS N64 ABI relocation chains.

No functional changes.

llvm-svn: 231641
2015-03-09 10:53:32 +00:00
Simon Atanasyan
0712650742 [Mips] Teach LLD to recognize one more MIPS target triple - mips64el
This is initial patch to support MIPS64 object files linking.
The patch just makes some classes more generalized, and rejects
attempts to interlinking O32 and N64 ABI object files.

I try to reuse the current MIPS target related classes as much as
possible because O32 and N64 MIPS ABI are tightly related and share
almost the same set of relocations, GOT, flags etc.

llvm-svn: 227058
2015-01-25 19:15:35 +00:00
Will Newton
a8c4d48478 ELF: Support detection of relocation errors during processing
At the moment errors in relocation processing such as out of range
values are not detected or at best trapped by asserts which will not
be present in release builds. This patch adds support for checking
error return values from applyRelocation() calls and printing an
appropriate error message. It also adds support for printing multiple
errors rather than just the first one.

llvm-svn: 226557
2015-01-20 10:37:40 +00:00
Simon Atanasyan
8a9c8b1968 [ELF] Make TargetRelocationHandler a regular non-template class
This class defines a relocation handler interface. The interface does
not depend on the template argument so the argument is redundant.

llvm-svn: 226259
2015-01-16 08:57:58 +00:00
Will Newton
4c81bb7e3f ELF: Add a standard method for unknown relocation errors
At present each TargetRelocationHandler generates a pretty similar error
string and calls llvm_unreachable() when encountering an unknown
relocation. This is not ideal for two reasons:

1. llvm_unreachable disappears in release builds but we still want to
   know if we encountered a relocation we couldn't handle in release
   builds.

2. Duplication is bad - there is no need to have a per-architecture error
   message.

This change adds a test for AArch64 to test whether or not the error
message actually works. The other architectures have not been tested
but they compile and check-lld passes.

llvm-svn: 223782
2014-12-09 16:29:39 +00:00
Shankar Easwaran
14fc1c0240 Revert "[ELF][AllArchs] Fix includes"
This reverts commit e137dd93e1291a2d2fa7f41c8f8bcdb59c8b3225.

llvm-svn: 219313
2014-10-08 15:23:22 +00:00
Shankar Easwaran
47d5818452 [ELF][AllArchs] Fix includes
llvm-svn: 219278
2014-10-08 04:12:08 +00:00
Rafael Espindola
f743031b8b More prefixing of error_code.
llvm-svn: 210831
2014-06-12 21:35:33 +00:00
Simon Atanasyan
c1b62ea310 [Mips] Move AHL addends calculation to the RelocationPass class.
llvm-svn: 204243
2014-03-19 15:45:55 +00:00
Simon Atanasyan
f08deab395 [Mips] Remove unused class field.
llvm-svn: 203398
2014-03-09 13:04:45 +00:00
Simon Atanasyan
54f6f7bd77 [Mips] Replace "virtual" by "override" in member function declarations
where it is appropriate.

llvm-svn: 203102
2014-03-06 10:29:45 +00:00
Chandler Carruth
6eface7c9d [C++11] Switch from LLVM_FINAL to just "final" now that all of LLVM is
requiring MSVC 2012 or newer.

llvm-svn: 202626
2014-03-02 09:35:33 +00:00
Simon Atanasyan
0912fe06dc [Mips] Unify #include guard names.
llvm-svn: 200715
2014-02-03 20:10:30 +00:00
Shankar Easwaran
b11964707c [ELF] Make changes to all the targets supported currently
X86_64,X86,PPC,Hexagon,Mips

No change in functionality.

llvm-svn: 200177
2014-01-27 01:21:02 +00:00
Simon Atanasyan
05c88f9b61 [Mips] Add assert to check that we handle all paired relocations.
llvm-svn: 198789
2014-01-08 20:42:52 +00:00
Nick Kledzik
fc3a975d85 [lld] fix unused variable warnings
llvm-svn: 197737
2013-12-19 22:50:08 +00:00
Simon Atanasyan
9931f95bac Linking of shared libraries for MIPS little-endian 32-bit target.
The following are the most significant peculiarities of MIPS target:
- MIPS ABI requires some special tags in the dynamic table.
- GOT consists of two parts local and global. The local part contains
  entries refer locally visible symbols. The global part contains entries
  refer global symbols.
- Entries in the .dynsym section which have corresponded entries in the
  GOT should be:
  * Emitted at the end of .dynsym section
  * Sorted accordingly to theirs GOT counterparts
- There are "paired" relocations. One or more R_MIPS_HI16 and R_MIPS_GOT16
  relocations should be followed by R_MIPS_LO16 relocation. To calculate
  result of R_MIPS_HI16 and R_MIPS_GOT16 relocations we need to combine
  addends from these relocations and paired R_MIPS_LO16 relocation.

The patch reviewed by Michael Spencer, Shankar Easwaran, Rui Ueyama.
http://llvm-reviews.chandlerc.com/D2156

llvm-svn: 197342
2013-12-15 12:57:28 +00:00