mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-09 13:33:17 +00:00
Documentation for the llvm.stackprotector intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59557 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f17fc461d1
commit
3c44f5bec9
@ -214,23 +214,28 @@
|
||||
<li><a href="#int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#int_atomics">Atomic intrinsics</a>
|
||||
<ol>
|
||||
<li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
|
||||
<li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li>
|
||||
<li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
|
||||
<li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li>
|
||||
<li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li>
|
||||
<li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li>
|
||||
<li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li>
|
||||
<li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li>
|
||||
<li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li>
|
||||
<li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li>
|
||||
<li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li>
|
||||
<li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li>
|
||||
<li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#int_stackprotect">Stack Protector Intrinsic</a>
|
||||
<ol>
|
||||
<li><a href="#int_ssp">'<tt>llvm.stackprotector</tt>' Intrinsic</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#int_atomics">Atomic intrinsics</a>
|
||||
<ol>
|
||||
<li><a href="#int_memory_barrier"><tt>llvm.memory_barrier</tt></a></li>
|
||||
<li><a href="#int_atomic_cmp_swap"><tt>llvm.atomic.cmp.swap</tt></a></li>
|
||||
<li><a href="#int_atomic_swap"><tt>llvm.atomic.swap</tt></a></li>
|
||||
<li><a href="#int_atomic_load_add"><tt>llvm.atomic.load.add</tt></a></li>
|
||||
<li><a href="#int_atomic_load_sub"><tt>llvm.atomic.load.sub</tt></a></li>
|
||||
<li><a href="#int_atomic_load_and"><tt>llvm.atomic.load.and</tt></a></li>
|
||||
<li><a href="#int_atomic_load_nand"><tt>llvm.atomic.load.nand</tt></a></li>
|
||||
<li><a href="#int_atomic_load_or"><tt>llvm.atomic.load.or</tt></a></li>
|
||||
<li><a href="#int_atomic_load_xor"><tt>llvm.atomic.load.xor</tt></a></li>
|
||||
<li><a href="#int_atomic_load_max"><tt>llvm.atomic.load.max</tt></a></li>
|
||||
<li><a href="#int_atomic_load_min"><tt>llvm.atomic.load.min</tt></a></li>
|
||||
<li><a href="#int_atomic_load_umax"><tt>llvm.atomic.load.umax</tt></a></li>
|
||||
<li><a href="#int_atomic_load_umin"><tt>llvm.atomic.load.umin</tt></a></li>
|
||||
</ol>
|
||||
</li>
|
||||
<li><a href="#int_general">General intrinsics</a>
|
||||
<ol>
|
||||
<li><a href="#int_var_annotation">
|
||||
@ -5802,6 +5807,54 @@ declare i8* @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <n
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- ======================================================================= -->
|
||||
<div class="doc_subsection">
|
||||
<a name="int_stackprotect">Stack Protector Intrinsic</a>
|
||||
</div>
|
||||
|
||||
<div class="doc_text">
|
||||
<p>
|
||||
This intrinsic is used when stack protectors are required. LLVM generates a
|
||||
call to load the randomized stack protector guard's value. The intrinsic is
|
||||
used so that LLVM can ensure that the stack guard is placed onto the stack in
|
||||
the appropriate place—before local variables are allocated on the stack.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<div class="doc_subsubsection">
|
||||
<a name="int_ssp">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
|
||||
</div>
|
||||
<div class="doc_text">
|
||||
<h5>Syntax:</h5>
|
||||
<pre>
|
||||
declare void @llvm.stackprotector( i8* <guard>, i8** <slot> )
|
||||
|
||||
</pre>
|
||||
<h5>Overview:</h5>
|
||||
<p>
|
||||
The <tt>llvm.stackprotector</tt> intrinsic takes the <tt>guard</tt> and stores
|
||||
it onto the stack at <tt>slot</tt>. The stack slot is adjusted to ensure that
|
||||
it's before local variables are allocated on the stack.
|
||||
</p>
|
||||
<h5>Arguments:</h5>
|
||||
<p>
|
||||
The <tt>llvm.stackprotector</tt> intrinsic requires two pointer arguments. The
|
||||
first argument is the value loaded from the stack guard
|
||||
<tt>@__stack_chk_guard</tt>. The second variable is an <tt>alloca</tt> that
|
||||
has enough space to hold the value of the guard.
|
||||
</p>
|
||||
<h5>Semantics:</h5>
|
||||
<p>
|
||||
This intrinsic causes the prologue/epilogue inserter to force the position of
|
||||
the <tt>AllocaInst</tt> stack slot to be before local variables on the
|
||||
stack. This is to ensure that if a local variable on the stack is overwritten,
|
||||
it will destroy the value of the guard. When the function exits, the guard on
|
||||
the stack is checked against the original guard. If they're different, then
|
||||
the program aborts by calling the <tt>__stack_chk_fail()</tt> function.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- ======================================================================= -->
|
||||
<div class="doc_subsection">
|
||||
<a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
|
||||
|
Loading…
x
Reference in New Issue
Block a user