diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-11-18 22:10:53 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-11-18 22:10:53 +0000 |
commit | f85850f89e924cb6c8e92c56e85f072eb8b3f038 (patch) | |
tree | d649ea8e51334907f4c6d70498925691dce950a3 | |
parent | 84f1ee3001880118677e81708f907885afbffede (diff) | |
download | bcm5719-llvm-f85850f89e924cb6c8e92c56e85f072eb8b3f038.tar.gz bcm5719-llvm-f85850f89e924cb6c8e92c56e85f072eb8b3f038.zip |
Documentation for the llvm.stackprotector intrinsic.
llvm-svn: 59557
-rw-r--r-- | llvm/docs/LangRef.html | 87 |
1 files changed, 70 insertions, 17 deletions
diff --git a/llvm/docs/LangRef.html b/llvm/docs/LangRef.html index 221cc492ebb..553568007f2 100644 --- a/llvm/docs/LangRef.html +++ b/llvm/docs/LangRef.html @@ -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"> @@ -5804,6 +5809,54 @@ declare i8* @llvm.init.trampoline(i8* <tramp>, i8* <func>, i8* <n <!-- ======================================================================= --> <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> </div> |