llvm-mirror/tools
Peter Collingbourne 837799f13b Prologue support
Patch by Ben Gamari!

This redefines the `prefix` attribute introduced previously and
introduces a `prologue` attribute.  There are a two primary usecases
that these attributes aim to serve,

  1. Function prologue sigils

  2. Function hot-patching: Enable the user to insert `nop` operations
     at the beginning of the function which can later be safely replaced
     with a call to some instrumentation facility

  3. Runtime metadata: Allow a compiler to insert data for use by the
     runtime during execution. GHC is one example of a compiler that
     needs this functionality for its tables-next-to-code functionality.

Previously `prefix` served cases (1) and (2) quite well by allowing the user
to introduce arbitrary data at the entrypoint but before the function
body. Case (3), however, was poorly handled by this approach as it
required that prefix data was valid executable code.

Here we redefine the notion of prefix data to instead be data which
occurs immediately before the function entrypoint (i.e. the symbol
address). Since prefix data now occurs before the function entrypoint,
there is no need for the data to be valid code.

The previous notion of prefix data now goes under the name "prologue
data" to emphasize its duality with the function epilogue.

The intention here is to handle cases (1) and (2) with prologue data and
case (3) with prefix data.

References
----------

This idea arose out of discussions[1] with Reid Kleckner in response to a
proposal to introduce the notion of symbol offsets to enable handling of
case (3).

[1] http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073235.html

Test Plan: testsuite

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

llvm-svn: 223189
2014-12-03 02:08:38 +00:00
..
bugpoint Fix style. 2014-11-07 21:30:36 +00:00
bugpoint-passes [CMake] Add LLVM_LINK_COMPONENTS to loadable modules, LLVMHello and BugpointPasses, on Win32. 2014-07-13 13:36:48 +00:00
gold gold plugin: call llvm_shutdown so that -stats works. 2014-11-25 20:52:49 +00:00
llc Add doInitialization/doFinalization to DataLayoutPass. 2014-09-10 21:27:43 +00:00
lli [MCJIT] Unique-ptrify the RTDyldMemoryManager member of MCJIT. NFC. 2014-12-03 00:51:19 +00:00
llvm-ar Remove unused variable. 2014-11-07 21:33:09 +00:00
llvm-as Modernize raw_fd_ostream's constructor a bit. 2014-08-25 18:16:47 +00:00
llvm-bcanalyzer Teach llvm-bcanalyzer to use one stream's BLOCKINFO to read another stream. 2014-08-30 17:07:55 +00:00
llvm-c-test [CMake] llvm-c-test: Use libLLVM.so if it is available. 2014-11-10 15:04:26 +00:00
llvm-config Enabling LLVM & Clang to be cross-compiled using CMake from a single configuration command line 2014-09-03 23:21:18 +00:00
llvm-cov llvm-cov: Sink some reporting logic into CoverageMapping 2014-11-14 01:50:32 +00:00
llvm-diff Return a std::unique_ptr from the IRReader.h functions. NFC. 2014-08-26 17:29:46 +00:00
llvm-dis Modernize raw_fd_ostream's constructor a bit. 2014-08-25 18:16:47 +00:00
llvm-dwarfdump Reapply "[dwarfdump] Add support for dumping accelerator tables." 2014-11-14 16:15:53 +00:00
llvm-extract Remove redundant calls to isMaterializable. 2014-11-01 16:46:18 +00:00
llvm-go Teach LLVM about llgo subproject. 2014-11-27 00:15:21 +00:00
llvm-jitlistener [MCJIT] Reapply r222828 and r222810-r222812 with fix for MSVC move-op issues. 2014-11-26 16:54:40 +00:00
llvm-link Make it easier to pass a custom diagnostic handler to the IR linker. 2014-10-27 23:02:10 +00:00
llvm-lto Add an option to the LTO code generator to disable vectorization during LTO 2014-10-26 21:50:58 +00:00
llvm-mc Remove the now unused StringRefMemoryObject.h. 2014-11-12 02:13:27 +00:00
llvm-mcmarkup Explicitly pass ownership of the MemoryBuffer to AddNewSourceBuffer using std::unique_ptr 2014-08-21 20:44:56 +00:00
llvm-nm Object, COFF: Cleanup symbol type code, improve binutils compatibility 2014-10-31 05:07:00 +00:00
llvm-objdump Object/COFF: Fix off-by-one error for object having lots of relocations 2014-11-26 22:17:25 +00:00
llvm-profdata Use ErrorOr for the ::create factory on instrumented and sample profilers. 2014-11-03 00:51:45 +00:00
llvm-readobj Correctly handle Tag_CPU_arch_profile. 2014-11-25 09:30:09 +00:00
llvm-rtdyld [MCJIT] Update CMakeLists.txt for llvm-rtdyld to add Object as a requirement. 2014-11-27 04:18:50 +00:00
llvm-shlib [CMake] llvm-shlib: Prune redundant components, AsmPrinter, MC, and SelectionDAG. 2014-11-11 07:57:25 +00:00
llvm-size Remove bogus std::error_code returns form SectionRef. 2014-10-08 15:28:58 +00:00
llvm-stress Modernize raw_fd_ostream's constructor a bit. 2014-08-25 18:16:47 +00:00
llvm-symbolizer llvm-symbolizer: teach it about PowerPC64 ELF function descriptors 2014-11-07 09:08:39 +00:00
llvm-vtabledump llvm-vtabledump: Handle Itanium VTables 2014-11-03 07:23:25 +00:00
lto libLTO: Allow linker to choose context of modules and codegen 2014-11-11 23:19:23 +00:00
macho-dump Adds the next bit of support for llvm-objdump’s -private-headers for executable Mach-O files. 2014-09-04 16:54:47 +00:00
msbuild MSBuild integration: fix the loop in install.bat 2014-09-30 22:30:06 +00:00
obj2yaml obj2yaml, yaml2obj: Add support for COFF executables 2014-11-14 08:15:42 +00:00
opt DebugIR: Delete -debug-ir 2014-11-29 03:15:47 +00:00
verify-uselistorder Prologue support 2014-12-03 02:08:38 +00:00
yaml2obj Remove StringMap::GetOrCreateValue in favor of StringMap::insert 2014-11-19 05:49:42 +00:00
CMakeLists.txt Teach LLVM about llgo subproject. 2014-11-27 00:15:21 +00:00
LLVMBuild.txt Rename llvm-uselistorder => verify-uselistorder 2014-07-30 17:11:27 +00:00
Makefile Add llvm-go tool. 2014-10-23 02:33:23 +00:00