Commit Graph

574 Commits

Author SHA1 Message Date
Sean Fertile
80cb547d11 [PPC64] Support "symbol@high" and "symbol@higha" symbol modifers.
Add support for the "@high" and "@higha" symbol modifiers in powerpc64 assembly.
The modifiers represent accessing the segment consiting of bits 16-31 of a
64-bit address/offset.

Differential Revision: https://reviews.llvm.org/D47729

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@334855 91177308-0d34-0410-b5e6-96231b3b80d8
2018-06-15 19:47:11 +00:00
Lang Hames
5ce1583427 [RuntimeDyld] Add an assert to catch misbehaving symbol resolvers.
Resolvers are required to find results for all requested symbols or return an
error, but if a resolver fails to adhere to this contract (by returning results
for only a subset of the requested symbols) then this code will infinite loop.
This assertion catches resolvers that fail to adhere to the contract.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@334536 91177308-0d34-0410-b5e6-96231b3b80d8
2018-06-12 20:43:17 +00:00
Hiroshi Inoue
9066b8af33 [PowerPC] fix broken JIT-compiled code with tail call optimization
The relocation for branch instructions in the dynamic loader of ExecutionEngine assumes branch instructions with R_PPC64_REL24 relocation type are only bl. However, with the tail call optimization, b instructions can be also used to jump into another function.
This patch makes the relocation to keep bits in the branch instruction other than the jump offset to avoid relocation rewrites a b instruction into bl.

Differential Revision: https://reviews.llvm.org/D47456



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333502 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-30 04:48:29 +00:00
Lang Hames
60b28ca5a7 [RuntimeDyld][MachO] Add support for MachO::ARM64_RELOC_POINTER_TO_GOT reloc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333130 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-23 21:27:07 +00:00
Nicola Zaghen
0818e789cb Rename DEBUG macro to LLVM_DEBUG.
The DEBUG() macro is very generic so it might clash with other projects.
The renaming was done as follows:
- git grep -l 'DEBUG' | xargs sed -i 's/\bDEBUG\s\?(/LLVM_DEBUG(/g'
- git diff -U0 master | ../clang/tools/clang-format/clang-format-diff.py -i -p1 -style LLVM
- Manual change to APInt
- Manually chage DOCS as regex doesn't match it.

In the transition period the DEBUG() macro is still present and aliased
to the LLVM_DEBUG() one.

Differential Revision: https://reviews.llvm.org/D43624



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@332240 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-14 12:53:11 +00:00
Lang Hames
99deb0bcb1 [RuntimeDyld][MachO] Properly handle thumb to thumb calls within a section.
Previously thumb bits were only checked for external relocations (thumb to arm
code and vice-versa). This patch adds detection for thumb callees in the same
section asthe (also thumb) caller.

The MachO/Thumb test case is updated to cover this, and redundant checks
(handled by the MachO/ARM test) are removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331838 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-09 01:38:13 +00:00
Adrian Prantl
0b24b74655 Remove @brief commands from doxygen comments, too.
This is a follow-up to r331272.

We've been running doxygen with the autobrief option for a couple of
years now. This makes the \brief markers into our comments
redundant. Since they are a visual distraction and we don't want to
encourage more \brief markers in new code either, this patch removes
them all.

Patch produced by
  for i in $(git grep -l '\@brief'); do perl -pi -e 's/\@brief //g' $i & done

https://reviews.llvm.org/D46290

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331275 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-01 16:10:38 +00:00
Adrian Prantl
26b584c691 Remove \brief commands from doxygen comments.
We've been running doxygen with the autobrief option for a couple of
years now. This makes the \brief markers into our comments
redundant. Since they are a visual distraction and we don't want to
encourage more \brief markers in new code either, this patch removes
them all.

Patch produced by

  for i in $(git grep -l '\\brief'); do perl -pi -e 's/\\brief //g' $i & done

Differential Revision: https://reviews.llvm.org/D46290

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331272 91177308-0d34-0410-b5e6-96231b3b80d8
2018-05-01 15:54:18 +00:00
Weiming Zhao
66258c9888 Add missing vtable anchors
Summary: This patch adds anchor() for MemoryBuffer, raw_fd_ostream, RTDyldMemoryManager, SectionMemoryManager, etc.

Reviewers: jlebar, eli.friedman, dblaikie

Reviewed By: dblaikie

Subscribers: mehdi_amini, mgorny, dblaikie, weimingz, llvm-commits

Differential Revision: https://reviews.llvm.org/D45244

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329861 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-11 23:09:20 +00:00
Lang Hames
433eb70569 [RuntimeDyld][PowerPC] Use global entry points for calls between sections.
Functions in different objects may use different TOCs, so calls between such
functions should use the global entry point of the callee which updates the
TOC pointer.

This should fix a bug that the Numba developers encountered (see
https://github.com/numba/numba/issues/2451).

Patch by Olexa Bilaniuk. Thanks Olexa!

No RuntimeDyld checker test case yet as I am not familiar enough with how
RuntimeDyldELF fixes up call-sites, but I do not want to hold up landing
this. I will continue to work on it and see if I can rope some powerpc
experts in.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329335 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-05 19:37:05 +00:00
Lang Hames
415892df80 Reapply r329133 with fix.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329136 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-04 00:34:54 +00:00
Lang Hames
69ec7d5667 Revert r329133 "[RuntimeDyld][AArch64] Add some error pluming / generation..."
This broke a number of buildbots. Looking in to it now...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329135 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-04 00:12:12 +00:00
Lang Hames
719cff5ce7 [RuntimeDyld][AArch64] Add some error pluming / generation to catch unhandled
relocation types on AArch64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@329133 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-03 23:19:20 +00:00
Lang Hames
e8aa86b340 [RuntimeDyld] Silence a compiler error.
This should fix the error at
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/19008

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327478 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-14 06:39:49 +00:00
Lang Hames
dda1921ef4 [ExecutionEngine] Add a getSymbolTable method to RuntimeDyld.
This can be used to extract the symbol table from a RuntimeDyld instance prior
to disposing of it.

This patch also updates RTDyldObjectLinkingLayer to use the new method, rather
than requesting symbols one at a time via getSymbol.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327476 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-14 06:25:07 +00:00
Lang Hames
7db8ad4adc [RuntimeDyld][MachO] Fix assertion in encodeAddend, add missing directive to
test case.

r326290 fixed the assertion for decodeAddend, but not encodeAddend. The
regression test failed to catch this because it was missing the
subsections_via_symbols flag, so the desired relocation was not applied.

This patch also fixes the formatting of the assertion from r326290.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@326406 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-01 01:44:33 +00:00
Lang Hames
d53cdbf4cc [RuntimeDyld][MachO] Support ARM64_RELOC_BRANCH26 for BL instructions by
relaxing an assertion.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@326290 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-28 00:58:21 +00:00
Frederich Munch
2bbb2bdf2e Handle IMAGE_REL_AMD64_ADDR32NB in RuntimeDyldCOFF
Summary:
IMAGE_REL_AMD64_ADDR32NB relocations are currently set to zero in all cases.
This patch sets the relocation to the correct value when possible and shows an error when not.

Reviewers: enderby, lhames, compnerd

Reviewed By: compnerd

Subscribers: LepelTsmok, compnerd, martell, llvm-commits

Differential Revision: https://reviews.llvm.org/D30709

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325700 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-21 17:18:20 +00:00
Rafael Espindola
f1e44dfc90 Move getPlatformFlags to ELFObjectFileBase and simplify.
This removes a few std::error_code results that were ignored on every
call.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323674 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-29 18:27:30 +00:00
Rafael Espindola
eaa7682afb Handle R_386_PLT32 in RuntimeDyldELF.
This should fix the 32 bit buildbots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323344 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 17:36:08 +00:00
Lang Hames
e0267674fd [ORC] Add orc::SymbolResolver, a Orc/Legacy API interop header, and an
orc::SymbolResolver to JITSymbolResolver adapter.

The new orc::SymbolResolver interface uses asynchronous queries for better
performance. (Asynchronous queries with bulk lookup minimize RPC/IPC overhead,
support parallel incoming queries, and expose more available work for
distribution). Existing ORC layers will soon be updated to use the
orc::SymbolResolver API rather than the legacy llvm::JITSymbolResolver API.

Because RuntimeDyld still uses JITSymbolResolver, this patch also includes an
adapter that wraps an orc::SymbolResolver with a JITSymbolResolver API.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323073 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 03:00:31 +00:00
Rui Ueyama
598fd0131b Fix -Wunused-variable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323004 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 22:56:04 +00:00
Lang Hames
156b994bce [ORC] Re-apply r322913 with a fix for a read-after-free error.
ExternalSymbolMap now stores the string key (rather than using a StringRef),
as the object file backing the key may be removed at any time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@323001 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 22:24:13 +00:00
Lang Hames
84238b3854 [ORC] Revert r322913 while I investigate an ASan failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322914 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 01:40:26 +00:00
Lang Hames
7a680c0d7c [ORC] Redesign the JITSymbolResolver interface to support bulk queries.
Bulk queries reduce IPC/RPC overhead for cross-process JITing and expose
opportunities for parallel compilation.

The two new query methods are lookupFlags, which finds the flags for each of a
set of symbols; and lookup, which finds the address and flags for each of a
set of symbols. (See doxygen comments for more details.)

The existing JITSymbolResolver class is renamed LegacyJITSymbolResolver, and
modified to extend the new JITSymbolResolver class using the following scheme:

- lookupFlags is implemented by calling findSymbolInLogicalDylib for each of the
symbols, then returning the result of calling getFlags() on each of these
symbols. (Importantly: lookupFlags does NOT call getAddress on the returned
symbols, so lookupFlags will never trigger materialization, and lookupFlags will
never call findSymbol, so only symbols that are part of the logical dylib will
return results.)

- lookup is implemented by calling findSymbolInLogicalDylib for each symbol and
falling back to findSymbol if findSymbolInLogicalDylib returns a null result.
Assuming a symbol is found its getAddress method is called to materialize it and
the result (if getAddress succeeds) is stored in the result map, or the error
(if getAddress fails) is returned immediately from lookup. If any symbol is not
found then lookup returns immediately with an error.

This change will break any out-of-tree derivatives of JITSymbolResolver. This
can be fixed by updating those classes to derive from LegacyJITSymbolResolver
instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322913 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 01:12:40 +00:00
Lang Hames
08bbfe4e7a [ExecutionEngine] Rename JITSymbol::isStrongDefinition to isStrong.
For symmetry with isWeak, isCommon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322594 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-16 20:39:51 +00:00
Rui Ueyama
1b2f7ed6f0 Remove ELFDataTypeTypedefHelper class.
Differential Revision: https://reviews.llvm.org/D41973

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322395 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-12 19:59:43 +00:00
Rui Ueyama
5a286a0041 Instead of ELFFile<ELFT>::Type, use ELFT::Type. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322346 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-12 02:28:31 +00:00
Michael Zolotukhin
cedd433a2b Remove redundant includes from lib/ExecutionEngine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320621 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-13 21:30:50 +00:00
Saleem Abdulrasool
05ea552595 ExecutionEngine: make COFF Thumb2 assertions non-tautological
The overflow detection assertions were tautological due to truncation.
Adjust them to no longer be tautological.

Patch by Alex Langford!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316303 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-22 20:51:25 +00:00
Nitesh Jain
ce20559b07 [mips] Adds support for R_MIPS_26, HIGHER, HIGHEST relocations in RuntimeDyld.
Reviewers: sdardis

Subscribers: jaydeep, bhushan, llvm-commits

Differential Revision: https://reviews.llvm.org/D38314

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316287 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-22 09:47:41 +00:00
Saleem Abdulrasool
2ac0f38d31 ExecutionEngine: adjust COFF i386 tautological asserts
Modify static_casts to not be tautological in some COFF i386
relocations.

Patch by Alex Langford!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316169 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-19 16:57:40 +00:00
Shoaib Meenai
d8da420012 [ExecutionEngine] Correct the size of a write in a COFF i386 relocation
We want to be writing a 32bit value, so we should be writing 4 bytes
instead of 2.

Patch by Alex Langford <apl@fb.com>.

Differential Revision: https://reviews.llvm.org/D38872

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315964 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-17 01:41:14 +00:00
Rafael Espindola
86ab1f56e4 Convert an ErrorOr to Expected.
getRelocationAddend should never be called on non SHT_RELA sections,
but changing that requires changing RelocVisitor.h.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315473 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-11 16:56:33 +00:00
Rafael Espindola
5c1b443509 Make the ELFObjectFile constructor private.
This forces every user to use the new create method that returns an
Expected. This in turn propagates better error messages.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315371 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-10 21:21:16 +00:00
Rafael Espindola
d4ae77eb46 Try to make gcc happy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315349 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-10 19:27:51 +00:00
Rafael Espindola
0e3d04a1c6 Return Expected from createRTDyldELFObject.
No functionality change, it just makes it easier to use Expected in
Object.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315348 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-10 19:14:30 +00:00
Rafael Espindola
de6c3080ed Simplify. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315347 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-10 19:07:10 +00:00
Saleem Abdulrasool
26d9773dd7 Revert "Revert "ExecutionEngine: add R_AARCH64_ABS{16,32}""
This reverts commit SVN r313668.  The original test case attempted to
write a pointer value into 16-bits, although the value may exceed the
range representable in 16-bits.  Ensure that the symbol is located in
the address space such that its absolute address is representable in
16-bits.  This should fix the assertion failure that was seen on the
Windows hosts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313822 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-20 21:32:44 +00:00
Saleem Abdulrasool
3a6eaef3cc Revert "ExecutionEngine: add R_AARCH64_ABS{16,32}"
This reverts commit SVN r313654.  Seems that it is triggering an
assertion on Windows specifically.  Revert until I can build on Windows
and look into what is happening there.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313668 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-19 20:35:25 +00:00
Saleem Abdulrasool
0cb391043b ExecutionEngine: add R_AARCH64_ABS{16,32}
Add support for the R_AARCH64_ABS{16,32} relocations in the execution
engine.  This is primarily used for DWARF debug information relocations
and needed by the LLVM JIT to support JITing for lldb.

Patch by Alex Langford!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313654 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-19 18:00:50 +00:00
Lang Hames
2c350aa3d3 [RuntimeDyld][ORC] Add support for Thumb mode to RuntimeDyldMachOARM.
This patch adds support for thumb relocations to RuntimeDyldMachOARM, and adds
a target-specific flags field to JITSymbolFlags (so that on ARM we can record
whether each symbol is Thumb-mode code).

RuntimeDyldImpl::emitSection is modified to ensure that stubs memory is
correctly aligned based on the size returned by getStubAlignment().



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@310517 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-09 20:19:27 +00:00
NAKAMURA Takumi
4e2037d4ad RuntimeDyldELF.cpp: Prune unused "TargetRegistry.h"
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308846 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-23 11:47:22 +00:00
Lang Hames
df1d474525 [RuntimeDyld][MachO/ARM] Don't add a redundant relocation entry.
We only need to add this entry once for it to be fixed up.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308375 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-18 21:12:03 +00:00
Lang Hames
a81793582b [ORC] Errorize the ORC APIs.
This patch updates the ORC layers and utilities to return and propagate
llvm::Errors where appropriate. This is necessary to allow ORC to safely handle
error cases in cross-process and remote JITing.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307350 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-07 02:59:13 +00:00
David Blaikie
4a35644b43 DebugInfo: Generalize LoadedObjectInfoHelper from RuntimeDyld
Make it usable by any class derived (even indirectly) from
LoadedObjectInfo by allowing a custom base class to be specified and
perfect forwarding to the ctor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307166 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-05 15:23:56 +00:00
Sam Clegg
fd1b7e89e7 Remove inline keyword from inline classof methods
The style guide states that the explicit `inline`
should not be used with inline methods.  classof is
very common inline method with a fair amount on
inconsistency:

$ git grep classof ./include | grep inline | wc -l
230
$ git grep classof ./include | grep -v inline | wc -l
257

I chose to target this method rather the larger change
since this method is easily cargo-culted (I did it at
least once).  I considered doing the larger change and
removing all occurrences but that would be a much larger
change.

Differential Revision: https://reviews.llvm.org/D33906

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306731 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-29 19:35:17 +00:00
Sagar Thakur
7cbb839d2b Revert [mips] Adds support for R_MIPS_26, HIGHER, HIGHEST relocations in RuntimeDyld
Reverting due to build bot failures



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306000 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-22 12:48:04 +00:00
Sagar Thakur
9410186031 [mips] Adds support for R_MIPS_26, HIGHER, HIGHEST relocations in RuntimeDyld
After the N64 static relocation model support was added to llvm it is required to add its support in RuntimeDyld also because lldb uses ExecutionEngine for evaluating expressions.

Reviewed by sdardis
Differential: D31649


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305997 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-22 11:49:19 +00:00
Zachary Turner
19ca2b0f9d Move Object format code to lib/BinaryFormat.
This creates a new library called BinaryFormat that has all of
the headers from llvm/Support containing structure and layout
definitions for various types of binary formats like dwarf, coff,
elf, etc as well as the code for identifying a file from its
magic.

Differential Revision: https://reviews.llvm.org/D33843

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304864 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 03:48:56 +00:00