llvm-6502/test
Ulrich Weigand edfd4f18bc [PowerPC] ELFv2 function call changes
This patch builds upon the two preceding MC changes to implement the
basic ELFv2 function call convention.  In the ELFv1 ABI, a "function
descriptor" was associated with every function, pointing to both the
entry address and the related TOC base (and a static chain pointer
for nested functions).  Function pointers would actually refer to that
descriptor, and the indirect call sequence needed to load up both entry
address and TOC base.

In the ELFv2 ABI, there are no more function descriptors, and function
pointers simply refer to the (global) entry point of the function code.
Indirect function calls simply branch to that address, after loading it
up into r12 (as required by the ABI rules for a global entry point).
Direct function calls continue to just do a "bl" to the target symbol;
this will be resolved by the linker to the local entry point of the
target function if it is local, and to a PLT stub if it is global.
That PLT stub would then load the (global) entry point address of the
final target into r12 and branch to it.  Note that when performing a
local function call, r2 must be set up to point to the current TOC
base: if the target ends up local, the ABI requires that its local
entry point is called with r2 set up; if the target ends up global,
the PLT stub requires that r2 is set up.

This patch implements all LLVM changes to implement that scheme:
- No longer create a function descriptor when emitting a function
  definition (in EmitFunctionEntryLabel)
- Emit two entry points *if* the function needs the TOC base (r2)
  anywhere (this is done EmitFunctionBodyStart; note that this cannot
  be done in EmitFunctionBodyStart because the global entry point
  prologue code must be *part* of the function as covered by debug info).
- In order to make use tracking of r2 (as needed above) work correctly,
  mark direct function calls as implicitly using r2.
- Implement the ELFv2 indirect function call sequence (no function
  descriptors; load target address into r12).
- When creating an ELFv2 object file, emit the .abiversion 2 directive
  to tell the linker to create the appropriate version of PLT stubs.  

Reviewed by Hal Finkel.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213489 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-20 23:31:44 +00:00
..
Analysis Improve BasicAA CS-CS queries (redux) 2014-07-17 01:28:25 +00:00
Assembler
Bindings
Bitcode Add a dereferenceable attribute 2014-07-18 15:51:28 +00:00
BugPoint llvm/test/BugPoint/compile-custom.ll: Use explicit %python to invoke a test script, compile-custom.ll.py, for shebang-incapable hosts. 2014-07-11 14:44:10 +00:00
CodeGen [PowerPC] ELFv2 function call changes 2014-07-20 23:31:44 +00:00
DebugInfo MC: correct DWARF header for PE/COFF assembly input 2014-07-17 16:27:44 +00:00
ExecutionEngine [RuntimeDyld] Replace a crufty old ARM RuntimeDyld test with a new one that uses 2014-07-10 23:29:11 +00:00
Feature IR: Allow comdats to be applied to globals with internal linkage 2014-07-13 04:56:11 +00:00
FileCheck Add FileCheck -implicit-check-not option to allow stricter tests without adding too many CHECK-NOTs manually. 2014-07-11 12:39:32 +00:00
Instrumentation [ASan] Don't instrument load/stores with !nosanitize metadata. 2014-07-17 18:48:12 +00:00
Integer
JitListener
Linker
LTO
MC [MC] Pass MCSymbolData to needsRelocateWithSymbol 2014-07-20 23:15:06 +00:00
Object Add printing of Mach-O stabs in llvm-nm. 2014-07-17 22:47:16 +00:00
Other
TableGen [TableGen] Allow shift operators to take bits<n> 2014-07-17 17:04:27 +00:00
tools llvm-objdump: Handle BSS sections larger than the object file 2014-07-14 16:20:14 +00:00
Transforms [LoopVectorize] Use AA to partition potential dependency checks 2014-07-20 23:07:52 +00:00
Unit
Verifier IR: Allow comdats to be applied to globals with internal linkage 2014-07-13 04:56:11 +00:00
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg llvm/test/lit.cfg: Let %python available. 2014-07-11 14:36:39 +00:00
lit.site.cfg.in
Makefile
Makefile.tests
TestRunner.sh