OLD | NEW |
1 {{+bindTo:partials.standard_nacl_article}} | 1 {{+bindTo:partials.standard_nacl_article}} |
2 | 2 |
3 <section id="pnacl-c-c-language-support"> | 3 <section id="pnacl-c-c-language-support"> |
4 <h1 id="pnacl-c-c-language-support">PNaCl C/C++ Language Support</h1> | 4 <h1 id="pnacl-c-c-language-support">PNaCl C/C++ Language Support</h1> |
5 <div class="contents local" id="contents" style="display: none"> | 5 <div class="contents local" id="contents" style="display: none"> |
6 <ul class="small-gap"> | 6 <ul class="small-gap"> |
7 <li><p class="first"><a class="reference internal" href="#source-language-suppor
t" id="id3">Source language support</a></p> | 7 <li><p class="first"><a class="reference internal" href="#source-language-suppor
t" id="id3">Source language support</a></p> |
8 <ul class="small-gap"> | 8 <ul class="small-gap"> |
9 <li><a class="reference internal" href="#versions" id="id4">Versions</a></li> | 9 <li><a class="reference internal" href="#versions" id="id4">Versions</a></li> |
10 <li><a class="reference internal" href="#preprocessor-definitions" id="id5">Prep
rocessor definitions</a></li> | 10 <li><a class="reference internal" href="#preprocessor-definitions" id="id5">Prep
rocessor definitions</a></li> |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 <h2 id="threading"><span id="language-support-threading"></span>Threading</h2> | 149 <h2 id="threading"><span id="language-support-threading"></span>Threading</h2> |
150 <p>Threading is explicitly supported through C11/C++11’s threading | 150 <p>Threading is explicitly supported through C11/C++11’s threading |
151 libraries as well as POSIX threads.</p> | 151 libraries as well as POSIX threads.</p> |
152 <p>Communication between threads should use atomic primitives as described | 152 <p>Communication between threads should use atomic primitives as described |
153 in <a class="reference internal" href="#id1">Memory Model and Atomics</a>.</p> | 153 in <a class="reference internal" href="#id1">Memory Model and Atomics</a>.</p> |
154 <h2 id="setjmp-and-longjmp"><code>setjmp</code> and <code>longjmp</code></h2> | 154 <h2 id="setjmp-and-longjmp"><code>setjmp</code> and <code>longjmp</code></h2> |
155 <p>PNaCl and NaCl support <code>setjmp</code> and <code>longjmp</code> without a
ny | 155 <p>PNaCl and NaCl support <code>setjmp</code> and <code>longjmp</code> without a
ny |
156 restrictions beyond C’s.</p> | 156 restrictions beyond C’s.</p> |
157 <h2 id="c-exception-handling"><span id="exception-handling"></span>C++ Exception
Handling</h2> | 157 <h2 id="c-exception-handling"><span id="exception-handling"></span>C++ Exception
Handling</h2> |
158 <p>PNaCl currently supports C++ exception handling through <code>setjmp()</code>
and | 158 <p>PNaCl currently supports C++ exception handling through <code>setjmp()</code>
and |
159 <code>longjmp()</code>, which can be enabled with the <code>--pnacl-exceptions=s
jlj</code> | 159 <code>longjmp()</code>, which can be enabled with the <code>--pnacl-exceptions=s
jlj</code> linker |
160 linker flag. Exceptions are disabled by default so that faster and | 160 flag (set with <code>LDFLAGS</code> when using Make). Exceptions are disabled by
default |
161 smaller code is generated, and <code>throw</code> statements are replaced with | 161 so that faster and smaller code is generated, and <code>throw</code> statements
are |
162 calls to <code>abort()</code>. The usual <code>-fno-exceptions</code> flag is al
so | 162 replaced with calls to <code>abort()</code>. The usual <code>-fno-exceptions</co
de> flag is also |
163 supported. PNaCl will support full zero-cost exception handling in the | 163 supported, though the default is <code>-fexceptions</code>. PNaCl will support f
ull |
164 future.</p> | 164 zero-cost exception handling in the future.</p> |
| 165 <aside> |
| 166 When using <a class="reference external" href="https://code.google.com/p/naclpor
ts">naclports</a> or other prebuilt static libraries, you don’t |
| 167 need to recompile because the exception handling support is |
| 168 implemented at link time (when all the static libraries are put |
| 169 together with your application). |
| 170 </aside> |
165 <p>NaCl supports full zero-cost C++ exception handling.</p> | 171 <p>NaCl supports full zero-cost C++ exception handling.</p> |
166 <h2 id="inline-assembly">Inline Assembly</h2> | 172 <h2 id="inline-assembly">Inline Assembly</h2> |
167 <p>Inline assembly isn’t supported by PNaCl because it isn’t portabl
e. The | 173 <p>Inline assembly isn’t supported by PNaCl because it isn’t portabl
e. The |
168 one current exception is the common compiler barrier idiom | 174 one current exception is the common compiler barrier idiom |
169 <code>asm("":::"memory")</code>, which gets transformed to a
sequentially | 175 <code>asm("":::"memory")</code>, which gets transformed to a
sequentially |
170 consistent memory barrier (equivalent to <code>__sync_synchronize()</code>). In | 176 consistent memory barrier (equivalent to <code>__sync_synchronize()</code>). In |
171 PNaCl this barrier is only guaranteed to order <code>volatile</code> and atomic | 177 PNaCl this barrier is only guaranteed to order <code>volatile</code> and atomic |
172 memory accesses, though in practice the implementation attempts to also | 178 memory accesses, though in practice the implementation attempts to also |
173 prevent reordering of memory accesses to objects which may escape.</p> | 179 prevent reordering of memory accesses to objects which may escape.</p> |
174 <p>PNaCl supports <a class="reference internal" href="#portable-simd-vectors"><e
m>Portable SIMD Vectors</em></a>, | 180 <p>PNaCl supports <a class="reference internal" href="#portable-simd-vectors"><e
m>Portable SIMD Vectors</em></a>, |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 <p>Neither PNaCl nor NaCl currently support asynchronous interruption | 438 <p>Neither PNaCl nor NaCl currently support asynchronous interruption |
433 or suspension of threads.</p> | 439 or suspension of threads.</p> |
434 </li> | 440 </li> |
435 </ul> | 441 </ul> |
436 <p>If PNaCl were to support either of these, the interaction of | 442 <p>If PNaCl were to support either of these, the interaction of |
437 <code>volatile</code> and atomics with same-thread signal handling would need | 443 <code>volatile</code> and atomics with same-thread signal handling would need |
438 to be carefully detailed.</p> | 444 to be carefully detailed.</p> |
439 </section> | 445 </section> |
440 | 446 |
441 {{/partials.standard_nacl_article}} | 447 {{/partials.standard_nacl_article}} |
OLD | NEW |