llvm-project/llvm
Keno Fischer e6892c8149 Reapply [RuntimeDyldELF] Fold Placeholder into Addend
This reapplies r235060 and 235070, which were reverted because of test failures
in LLDB. The failure was caused because at  moment RuntimeDyld is processing
relocations for all sections, irrespective of whether we actually load them
into memory or not, but RuntimeDyld was not actually remembering where in memory
the unrelocated section is. This commit includes a fix for that issue by
remembering that pointer, though the longer term fix should be to stop processing
unneeded sections.

Original Summary:

This allows us to get rid of the original unrelocated object file after
we're done processing relocations (but before applying them).
MachO and COFF already do not require this (currently we have temporary hacks
to prevent ownership from being released, but those are brittle and should be
removed soon).

The placeholder mechanism allowed the relocation resolver to look at original
object file to obtain more information that are required to apply the
relocations. This is usually necessary in two cases:

- For relocations targetting sub-word memory locations, there may be pieces
  of the instruction at the target address which we should not override.
- Some relocations on some platforms allow an extra addend to be encoded in
  their immediate fields.

The problem is that in the second case the information cannot be recovered
after the relocations have been applied once because they will have been
overridden. In the first case we also need to be careful to not use any bits
that aren't fixed and may have been overriden by applying a first relocation.

In the past both have been fixed by just looking at original object file. This
patch attempts to recover the information from the first by looking at the
relocated object file, while the extra addend in the second case is read
upon relocation processing and addend to the regular addend.

I have tested this on X86. Other platforms represent my best understanding
of how those relocations should work, but I may have missed something because
I do not have access to those platforms.
We will keep the ugly workarounds in place for a couple of days, so this commit
can be reverted if it breaks the bots.

Differential Revision: http://reviews.llvm.org/D9028

llvm-svn: 236341
2015-05-01 20:21:45 +00:00
..
autoconf Clean up docs references to './configure' in preparation for deprecating in-source builds 2015-04-29 20:06:41 +00:00
bindings IR: Give 'DI' prefix to debug info metadata 2015-04-29 16:38:44 +00:00
cmake [CMake] Also search for prefixed versions of ld.gold 2015-05-01 11:58:30 +00:00
docs Update YamlIO documentation for the ScalarTraits class. 2015-05-01 18:20:23 +00:00
examples IR: Give 'DI' prefix to debug info metadata 2015-04-29 16:38:44 +00:00
include Revert "[WinEH] Add an EH registration and state insertion pass for 32-bit x86" 2015-05-01 20:14:04 +00:00
lib Reapply [RuntimeDyldELF] Fold Placeholder into Addend 2015-05-01 20:21:45 +00:00
projects build: make libunwind a proper project 2015-04-25 01:47:39 +00:00
test Revert "[WinEH] Add an EH registration and state insertion pass for 32-bit x86" 2015-05-01 20:14:04 +00:00
tools [Object] Teach Object and llvm-objdump about ".hidden" 2015-04-30 23:08:53 +00:00
unittests Move unit test into anonymous namespace as per convention. 2015-05-01 18:51:06 +00:00
utils Remove std::move on return when it could prevent copy elision. 2015-05-01 15:16:11 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore Ignore compile_commands.json only at the root of the tree. 2015-03-26 18:55:42 +00:00
CMakeLists.txt [CMake] Updates to llvm-shlib to support overriding exports list and added an option to export all symbols. 2015-04-13 21:29:46 +00:00
CODE_OWNERS.TXT Add myself as the Constant Folder owner. 2015-04-20 23:19:10 +00:00
CREDITS.TXT
LICENSE.TXT Update for a new year. 2015-03-12 01:25:29 +00:00
LLVMBuild.txt
Makefile
Makefile.common
Makefile.config.in Try to unbreak Clang build to export LLVM_ABI_BREAKING_CHECKS, fixup for r233310. 2015-04-01 11:46:15 +00:00
Makefile.rules Add support for SunOS function/data sections and associated 2015-03-03 20:54:29 +00:00
README.txt Revert test commit at revision 233535. 2015-03-30 12:39:03 +00:00
configure Clean up docs references to './configure' in preparation for deprecating in-source builds 2015-04-29 20:06:41 +00:00
llvm.spec.in

README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.