| Index: native_client_sdk/doc_generated/reference/pnacl-bitcode-abi.html
|
| diff --git a/native_client_sdk/doc_generated/reference/pnacl-bitcode-abi.html b/native_client_sdk/doc_generated/reference/pnacl-bitcode-abi.html
|
| index f6c2590631ed223721d7d8f23c3b51f43f1b36ed..1259c79ad6e20e4ac8c35eebb21590ccd37c4b3c 100644
|
| --- a/native_client_sdk/doc_generated/reference/pnacl-bitcode-abi.html
|
| +++ b/native_client_sdk/doc_generated/reference/pnacl-bitcode-abi.html
|
| @@ -54,8 +54,7 @@
|
| </li>
|
| </ul>
|
|
|
| -</div><section id="introduction">
|
| -<h2 id="introduction">Introduction</h2>
|
| +</div><h2 id="introduction">Introduction</h2>
|
| <p>This document is a reference manual for the PNaCl bitcode format. It describes
|
| the bitcode on a <em>semantic</em> level; the physical encoding level will be described
|
| elsewhere. For the purpose of this document, the textual form of LLVM IR is
|
| @@ -65,10 +64,8 @@ version 3.3, many sections in this document point to a relevant section
|
| of the LLVM language reference manual. Only the changes, restrictions
|
| and variations specific to PNaCl are described—full semantic
|
| descriptions are not duplicated from the LLVM reference manual.</p>
|
| -</section><section id="high-level-structure">
|
| <h2 id="high-level-structure">High Level Structure</h2>
|
| <p>A PNaCl portable executable (<strong>pexe</strong> in short) is a single LLVM IR module.</p>
|
| -<section id="data-model">
|
| <h3 id="data-model">Data Model</h3>
|
| <p>The data model for PNaCl bitcode is fixed at little-endian ILP32: pointers are
|
| 32 bits in size. 64-bit integer types are also supported natively via the i64
|
| @@ -76,24 +73,20 @@ type (for example, a front-end can generate these from the C/C++ type
|
| <code>long long</code>).</p>
|
| <p>Floating point support is fixed at IEEE 754 32-bit and 64-bit values (f32 and
|
| f64, respectively).</p>
|
| -</section><section id="linkage-types">
|
| -<span id="bitcode-linkagetypes"></span><h3 id="linkage-types"><span id="bitcode-linkagetypes"></span>Linkage Types</h3>
|
| +<h3 id="linkage-types"><span id="bitcode-linkagetypes"></span>Linkage Types</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#linkage">LLVM LangRef: Linkage Types</a></p>
|
| <p>The linkage types supported by PNaCl bitcode are <code>internal</code> and <code>external</code>.
|
| A single function in the pexe, named <code>_start</code>, has the linkage type
|
| <code>external</code>. All the other functions and globals have the linkage type
|
| <code>internal</code>.</p>
|
| -</section><section id="calling-conventions">
|
| <h3 id="calling-conventions">Calling Conventions</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#callingconv">LLVM LangRef: Calling Conventions</a></p>
|
| <p>The only calling convention supported by PNaCl bitcode is <code>ccc</code> - the C
|
| calling convention.</p>
|
| -</section><section id="visibility-styles">
|
| <h3 id="visibility-styles">Visibility Styles</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#visibility-styles">LLVM LangRef: Visibility Styles</a></p>
|
| <p>PNaCl bitcode does not support visibility styles.</p>
|
| -</section><section id="global-variables">
|
| -<span id="bitcode-globalvariables"></span><h3 id="global-variables"><span id="bitcode-globalvariables"></span>Global Variables</h3>
|
| +<h3 id="global-variables"><span id="bitcode-globalvariables"></span>Global Variables</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#globalvars">LLVM LangRef: Global Variables</a></p>
|
| <p>Restrictions on global variables:</p>
|
| <ul class="small-gap">
|
| @@ -124,7 +117,6 @@ negative):</li>
|
| </pre>
|
| <p>A <em>CompoundElement</em> is a unnamed, packed struct containing more than one
|
| <em>SimpleElement</em>.</p>
|
| -</section><section id="functions">
|
| <h3 id="functions">Functions</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#functionstructure">LLVM LangRef: Functions</a></p>
|
| <p>The restrictions on <a class="reference internal" href="#bitcode-linkagetypes"><em>linkage types</em></a>, calling
|
| @@ -137,41 +129,33 @@ return type).</li>
|
| <li>Functions with a variable number of arguments (<em>vararg</em>).</li>
|
| <li>Alignment (<code>align</code>).</li>
|
| </ul>
|
| -</section><section id="aliases">
|
| <h3 id="aliases">Aliases</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#aliases">LLVM LangRef: Aliases</a></p>
|
| <p>PNaCl bitcode does not support aliases.</p>
|
| -</section><section id="named-metadata">
|
| <h3 id="named-metadata">Named Metadata</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#namedmetadatastructure">LLVM LangRef: Named Metadata</a></p>
|
| <p>While PNaCl bitcode has provisions for debugging metadata, it is not considered
|
| part of the stable ABI. It exists for tool support and should not appear in
|
| distributed pexes.</p>
|
| <p>Other kinds of LLVM metadata are not supported.</p>
|
| -</section><section id="module-level-inline-assembly">
|
| <h3 id="module-level-inline-assembly">Module-Level Inline Assembly</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#moduleasm">LLVM LangRef: Module-Level Inline Assembly</a></p>
|
| <p>PNaCl bitcode does not support inline assembly.</p>
|
| -</section><section id="volatile-memory-accesses">
|
| <h3 id="volatile-memory-accesses">Volatile Memory Accesses</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#volatile">LLVM LangRef: Volatile Memory Accesses</a></p>
|
| <p>PNaCl bitcode does not support volatile memory accesses. The
|
| <code>volatile</code> attribute on loads and stores is not supported. See the
|
| <a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html"><em>PNaCl C/C++ Language Support</em></a> for more details.</p>
|
| -</section><section id="memory-model-for-concurrent-operations">
|
| <h3 id="memory-model-for-concurrent-operations">Memory Model for Concurrent Operations</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#memmodel">LLVM LangRef: Memory Model for Concurrent Operations</a></p>
|
| <p>See the <a class="reference external" href="PNaClDeveloperGuide.html">PNaCl Developer’s Guide</a> for more
|
| details.</p>
|
| -</section><section id="fast-math-flags">
|
| <h3 id="fast-math-flags">Fast-Math Flags</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#fastmath">LLVM LangRef: Fast-Math Flags</a></p>
|
| <p>Fast-math mode is not currently supported by the PNaCl bitcode.</p>
|
| -</section></section><section id="type-system">
|
| <h2 id="type-system">Type System</h2>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#typesystem">LLVM LangRef: Type System</a></p>
|
| <p>The LLVM types allowed in PNaCl bitcode are restricted, as follows:</p>
|
| -<section id="scalar-types">
|
| <h3 id="scalar-types">Scalar types</h3>
|
| <ul class="small-gap">
|
| <li><p class="first">The only scalar types allowed are integer, float (32-bit floating point),
|
| @@ -183,7 +167,6 @@ values are i32 and i64.</li>
|
| </ul>
|
| </li>
|
| </ul>
|
| -</section><section id="vector-types">
|
| <h3 id="vector-types">Vector types</h3>
|
| <p>The only vector types allowed are:</p>
|
| <ul class="small-gap">
|
| @@ -193,12 +176,10 @@ values are i32 and i64.</li>
|
| element counts listed previously (their width is therefore not
|
| 128-bits).</li>
|
| </ul>
|
| -</section><section id="array-and-struct-types">
|
| <h3 id="array-and-struct-types">Array and struct types</h3>
|
| <p>Array and struct types are only allowed in
|
| <a class="reference internal" href="#bitcode-globalvariables"><em>global variable initializers</em></a>.</p>
|
| -</section><section id="pointer-types">
|
| -<span id="bitcode-pointertypes"></span><h3 id="pointer-types"><span id="bitcode-pointertypes"></span>Pointer types</h3>
|
| +<h3 id="pointer-types"><span id="bitcode-pointertypes"></span>Pointer types</h3>
|
| <p>Only the following pointer types are allowed:</p>
|
| <ul class="small-gap">
|
| <li>Pointers to valid PNaCl bitcode scalar types, as specified above, except for
|
| @@ -216,38 +197,30 @@ instruction, or is an address of a global value.</p>
|
| <li>Is the return value of a <code>bitcast</code> instruction.</li>
|
| <li>Is the return value of a <code>inttoptr</code> instruction.</li>
|
| </ul>
|
| -</section><section id="undefined-values">
|
| <h3 id="undefined-values">Undefined Values</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#undefvalues">LLVM LangRef: Undefined Values</a></p>
|
| <p><code>undef</code> is only allowed within functions, not in global variable initializers.</p>
|
| -</section><section id="constant-expressions">
|
| <h3 id="constant-expressions">Constant Expressions</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#constant-expressions">LLVM LangRef: Constant Expressions</a></p>
|
| <p>Constant expressions are only allowed in
|
| <a class="reference internal" href="#bitcode-globalvariables"><em>global variable initializers</em></a>.</p>
|
| -</section></section><section id="other-values">
|
| <h2 id="other-values">Other Values</h2>
|
| -<section id="metadata-nodes-and-metadata-strings">
|
| <h3 id="metadata-nodes-and-metadata-strings">Metadata Nodes and Metadata Strings</h3>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#metadata">LLVM LangRef: Metadata Nodes and Metadata Strings</a></p>
|
| <p>While PNaCl bitcode has provisions for debugging metadata, it is not considered
|
| part of the stable ABI. It exists for tool support and should not appear in
|
| distributed pexes.</p>
|
| <p>Other kinds of LLVM metadata are not supported.</p>
|
| -</section></section><section id="intrinsic-global-variables">
|
| <h2 id="intrinsic-global-variables">Intrinsic Global Variables</h2>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#intrinsic-global-variables">LLVM LangRef: Intrinsic Global Variables</a></p>
|
| <p>PNaCl bitcode does not support intrinsic global variables.</p>
|
| -</section><section id="errno-and-errors-in-arithmetic-instructions">
|
| -<span id="ir-and-errno"></span><h2 id="errno-and-errors-in-arithmetic-instructions"><span id="ir-and-errno"></span>Errno and errors in arithmetic instructions</h2>
|
| +<h2 id="errno-and-errors-in-arithmetic-instructions"><span id="ir-and-errno"></span>Errno and errors in arithmetic instructions</h2>
|
| <p>Some arithmetic instructions and intrinsics have the similar semantics to
|
| libc math functions, but differ in the treatment of <code>errno</code>. While the
|
| libc functions may set <code>errno</code> for domain errors, the instructions and
|
| intrinsics do not. This is because the variable <code>errno</code> is not special
|
| and is not required to be part of the program.</p>
|
| -</section><section id="instruction-reference">
|
| <h2 id="instruction-reference">Instruction Reference</h2>
|
| -<section id="list-of-allowed-instructions">
|
| <h3 id="list-of-allowed-instructions">List of allowed instructions</h3>
|
| <p>This is a list of LLVM instructions supported by PNaCl bitcode. Where
|
| applicable, PNaCl-specific restrictions are provided.</p>
|
| @@ -331,17 +304,14 @@ argument must be an i32.</p>
|
| <li><code>insertelement</code></li>
|
| <li><code>extractelement</code></li>
|
| </ul>
|
| -</section><section id="alloca">
|
| -<span id="bitcode-allocainst"></span><h3 id="alloca"><span id="bitcode-allocainst"></span><code>alloca</code></h3>
|
| +<h3 id="alloca"><span id="bitcode-allocainst"></span><code>alloca</code></h3>
|
| <p>The only allowed type for <code>alloca</code> instructions in PNaCl bitcode is i8. The
|
| size argument must be an i32. For example:</p>
|
| <pre>
|
| %buf = alloca i8, i32 8, align 4
|
| </pre>
|
| -</section></section><section id="intrinsic-functions">
|
| <h2 id="intrinsic-functions">Intrinsic Functions</h2>
|
| <p><a class="reference external" href="http://llvm.org/releases/3.3/docs/LangRef.html#intrinsics">LLVM LangRef: Intrinsic Functions</a></p>
|
| -<section id="list-of-allowed-intrinsics">
|
| <h3 id="list-of-allowed-intrinsics">List of allowed intrinsics</h3>
|
| <p>The only intrinsics supported by PNaCl bitcode are the following.</p>
|
| <ul class="small-gap">
|
| @@ -397,15 +367,13 @@ execution.</p>
|
| <p>See <a class="reference internal" href="#bitcode-atomicintrinsics"><em>atomic intrinsics</em></a>.</p>
|
| </li>
|
| </ul>
|
| -</section><section id="thread-pointer-related-intrinsics">
|
| -<span id="bitcode-threadpointerintrinsics"></span><h3 id="thread-pointer-related-intrinsics"><span id="bitcode-threadpointerintrinsics"></span>Thread pointer related intrinsics</h3>
|
| +<h3 id="thread-pointer-related-intrinsics"><span id="bitcode-threadpointerintrinsics"></span>Thread pointer related intrinsics</h3>
|
| <pre>
|
| declare i8* @llvm.nacl.read.tp()
|
| </pre>
|
| <p>Returns a read-only thread pointer. The value is controlled by the embedding
|
| sandbox’s runtime.</p>
|
| -</section><section id="setjmp-and-longjmp">
|
| -<span id="bitcode-setjmplongjmp"></span><h3 id="setjmp-and-longjmp"><span id="bitcode-setjmplongjmp"></span>Setjmp and Longjmp</h3>
|
| +<h3 id="setjmp-and-longjmp"><span id="bitcode-setjmplongjmp"></span>Setjmp and Longjmp</h3>
|
| <pre>
|
| declare void @llvm.nacl.longjmp(i8* %jmpbuf, i32)
|
| declare i32 @llvm.nacl.setjmp(i8* %jmpbuf)
|
| @@ -413,8 +381,7 @@ sandbox’s runtime.</p>
|
| <p>These intrinsics implement the semantics of C11 <code>setjmp</code> and <code>longjmp</code>. The
|
| <code>jmpbuf</code> pointer must be 64-bit aligned and point to at least 1024 bytes of
|
| allocated memory.</p>
|
| -</section><section id="atomic-intrinsics">
|
| -<span id="bitcode-atomicintrinsics"></span><h3 id="atomic-intrinsics"><span id="bitcode-atomicintrinsics"></span>Atomic intrinsics</h3>
|
| +<h3 id="atomic-intrinsics"><span id="bitcode-atomicintrinsics"></span>Atomic intrinsics</h3>
|
| <pre>
|
| declare iN @llvm.nacl.atomic.load.<size>(
|
| iN* <source>, i32 <memory_order>)
|
| @@ -473,6 +440,6 @@ are lock-free or not. This reflects the C11 <code>atomic_is_lock_free</code>
|
| function from header <code><stdatomic.h></code> and the C++11 <code>is_lock_free</code>
|
| member function in header <code><atomic></code>. It can be used through the
|
| <code>__nacl_atomic_is_lock_free</code> builtin.</p>
|
| -</section></section></section>
|
| +</section>
|
|
|
| {{/partials.standard_nacl_article}}
|
|
|