diff options
Diffstat (limited to 'libs/context/doc/html/context')
-rw-r--r-- | libs/context/doc/html/context/acknowledgements.html | 48 | ||||
-rw-r--r-- | libs/context/doc/html/context/context.html | 294 | ||||
-rw-r--r-- | libs/context/doc/html/context/context/boost_fcontext.html | 146 | ||||
-rw-r--r-- | libs/context/doc/html/context/overview.html | 83 | ||||
-rw-r--r-- | libs/context/doc/html/context/performance.html | 152 | ||||
-rw-r--r-- | libs/context/doc/html/context/rationale.html | 104 | ||||
-rw-r--r-- | libs/context/doc/html/context/rationale/other_apis_.html | 117 | ||||
-rw-r--r-- | libs/context/doc/html/context/rationale/x86_and_floating_point_env.html | 124 | ||||
-rw-r--r-- | libs/context/doc/html/context/reference.html | 104 | ||||
-rw-r--r-- | libs/context/doc/html/context/requirements.html | 59 | ||||
-rw-r--r-- | libs/context/doc/html/context/stack.html | 163 | ||||
-rw-r--r-- | libs/context/doc/html/context/stack/stack_allocator.html | 51 | ||||
-rw-r--r-- | libs/context/doc/html/context/stack/stack_helper.html | 170 | ||||
-rw-r--r-- | libs/context/doc/html/context/tested.html | 295 | ||||
-rw-r--r-- | libs/context/doc/html/context/todo.html | 51 |
15 files changed, 1961 insertions, 0 deletions
diff --git a/libs/context/doc/html/context/acknowledgements.html b/libs/context/doc/html/context/acknowledgements.html new file mode 100644 index 0000000000..ac56768845 --- /dev/null +++ b/libs/context/doc/html/context/acknowledgements.html @@ -0,0 +1,48 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Acknowledgments</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="todo.html" title="Todo"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="todo.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.acknowledgements"></a><a class="link" href="acknowledgements.html" title="Acknowledgments">Acknowledgments</a> +</h2></div></div></div> +<p> + I'd like to thank Adreas Fett, Artyom Beilis, Daniel Larimer, Fernando Pelliccioni, + Giovanni Piero Deretta, Gordon Woodhull, Helge Bahmann, Holger Grund, Jeffrey + Lee Hellrung (Jr.), Keith Jeffery, Phil Endecott, Robert Stewart, Steven Watanabe, + Vicente J. Botet Escriba, Wayne Piekarski. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="todo.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/context.html b/libs/context/doc/html/context/context.html new file mode 100644 index 0000000000..ae9591ea73 --- /dev/null +++ b/libs/context/doc/html/context/context.html @@ -0,0 +1,294 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Context</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="requirements.html" title="Requirements"> +<link rel="next" href="context/boost_fcontext.html" title="Struct fcontext_t and related functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="requirements.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="context/boost_fcontext.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.context"></a><a class="link" href="context.html" title="Context">Context</a> +</h2></div></div></div> +<div class="toc"><dl><dt><span class="section"><a href="context/boost_fcontext.html">Struct <code class="computeroutput"><span class="identifier">fcontext_t</span></code> and related functions</a></span></dt></dl></div> +<p> + Each instance of <span class="emphasis"><em>fcontext_t</em></span> represents a context (CPU + registers and stack space). Together with its related functions <span class="emphasis"><em>jump_fcontext()</em></span> + and <span class="emphasis"><em>make_fcontext()</em></span> it provides a execution control transfer + mechanism similar interface like <a href="http://www.kernel.org/doc/man-pages/online/pages/man2/getcontext.2.html" target="_top">ucontext_t</a>. + <span class="emphasis"><em>fcontext_t</em></span> and its functions are located in <span class="emphasis"><em>boost::ctx</em></span> + and the functions are declared as extern "C". + </p> +<div class="warning"><table border="0" summary="Warning"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td> +<th align="left">Warning</th> +</tr> +<tr><td align="left" valign="top"><p> + If <span class="emphasis"><em>fcontext_t</em></span> is used in a multithreaded application, + it can migrated between threads, but must not reference <span class="emphasis"><em>thread-local + storage</em></span>. + </p></td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + If <span class="emphasis"><em>fiber-local storage</em></span> is used on Windows, the user + is responsible for calling <span class="emphasis"><em>::FlsAlloc()</em></span>, <span class="emphasis"><em>::FlsFree()</em></span>. + </p></td></tr> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The low level API is the part to port to new platforms. + </p></td></tr> +</table></div> +<h4> +<a name="context.context.h0"></a> + <span><a name="context.context.executing_a_context"></a></span><a class="link" href="context.html#context.context.executing_a_context">Executing + a context</a> + </h4> +<p> + A new context supposed to execute a <span class="emphasis"><em>context-function</em></span> (returning + void and accepting intptr_t as argument) must be initialized by function <span class="emphasis"><em>make_fcontext()</em></span>. + </p> +<pre class="programlisting"><span class="comment">// context-function</span> +<span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span> <span class="identifier">intptr</span><span class="special">);</span> + +<span class="comment">// creates and manages a protected stack (with guard page)</span> +<span class="identifier">ctx</span><span class="special">::</span><span class="identifier">stack_allocator</span> <span class="identifier">alloc</span><span class="special">;</span> +<span class="identifier">fc</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span> <span class="special">=</span> <span class="identifier">alloc</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">());</span> +<span class="identifier">fc</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">limit</span> <span class="special">=</span> + <span class="keyword">static_cast</span><span class="special"><</span> <span class="keyword">char</span> <span class="special">*</span> <span class="special">>(</span> <span class="identifier">fc</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">();</span> + +<span class="comment">// context fc uses f() as context function</span> +<span class="identifier">make_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span> +</pre> +<p> + <span class="emphasis"><em>fcontext_t</em></span> requires a pointer to the top of the stack + (<span class="emphasis"><em>fc_base</em></span>) as well as a pointer to the lower bound of the + stack (<span class="emphasis"><em>fc_limit</em></span>). + </p> +<p> + Calling <span class="emphasis"><em>jump_fcontext()</em></span> invokes the <span class="emphasis"><em>context-function</em></span> + in a newly created context complete with registers, flags, stack and instruction + pointers. When control should be returned to the original calling context, + call <span class="emphasis"><em>jump_fcontext()</em></span>. The current context information + (registers, flags, and stack and instruction pointers) is saved and the original + context information is restored. Calling <span class="emphasis"><em>jump_fcontext()</em></span> + again resumes execution in the second context after saving the new state of + the original context. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">ctx</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ctx</span><span class="special">;</span> + +<span class="identifier">ctx</span><span class="special">::</span><span class="identifier">fcontext_t</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="identifier">fc2</span><span class="special">;</span> + +<span class="keyword">void</span> <span class="identifier">f1</span><span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"f1: entered"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"f1: call jump_fcontext( & fc1, & fc2, 0)"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc2</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"f1: return"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> +<span class="special">}</span> + +<span class="keyword">void</span> <span class="identifier">f2</span><span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"f2: entered"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"f2: call jump_fcontext( & fc2, & fc1, 0)"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc2</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> + <span class="identifier">BOOST_ASSERT</span><span class="special">(</span> <span class="keyword">false</span> <span class="special">&&</span> <span class="special">!</span> <span class="string">"f2: never returns"</span><span class="special">);</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span> <span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">argv</span><span class="special">[])</span> +<span class="special">{</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">stack_allocator</span> <span class="identifier">alloc1</span><span class="special">,</span> <span class="identifier">alloc2</span><span class="special">;</span> + + <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span> <span class="special">=</span> <span class="identifier">alloc1</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">());</span> + <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">limit</span> <span class="special">=</span> + <span class="keyword">static_cast</span><span class="special"><</span> <span class="keyword">char</span> <span class="special">*</span> <span class="special">>(</span> <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">();</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">make_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="identifier">f1</span><span class="special">);</span> + + <span class="identifier">fc2</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span> <span class="special">=</span> <span class="identifier">alloc2</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">());</span> + <span class="identifier">fc2</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">limit</span> <span class="special">=</span> + <span class="keyword">static_cast</span><span class="special"><</span> <span class="keyword">char</span> <span class="special">*</span> <span class="special">>(</span> <span class="identifier">fc2</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">();</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">make_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc2</span><span class="special">,</span> <span class="identifier">f2</span><span class="special">);</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"main: call jump_fcontext( & fcm, & fc1, 0)"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="number">0</span><span class="special">);</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"main: done"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="identifier">EXIT_SUCCESS</span><span class="special">;</span> +<span class="special">}</span> + +<span class="identifier">output</span><span class="special">:</span> + <span class="identifier">main</span><span class="special">:</span> <span class="identifier">call</span> <span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="number">0</span><span class="special">)</span> + <span class="identifier">f1</span><span class="special">:</span> <span class="identifier">entered</span> + <span class="identifier">f1</span><span class="special">:</span> <span class="identifier">call</span> <span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc2</span><span class="special">,</span> <span class="number">0</span><span class="special">)</span> + <span class="identifier">f2</span><span class="special">:</span> <span class="identifier">entered</span> + <span class="identifier">f2</span><span class="special">:</span> <span class="identifier">call</span> <span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc2</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="number">0</span><span class="special">)</span> + <span class="identifier">f1</span><span class="special">:</span> <span class="keyword">return</span> + <span class="identifier">main</span><span class="special">:</span> <span class="identifier">done</span> +</pre> +<p> + First call of <span class="emphasis"><em>jump_fcontext()</em></span> enters the <span class="emphasis"><em>context-function</em></span> + <code class="computeroutput"><span class="identifier">f1</span><span class="special">()</span></code> + by starting context fc1 (context fcm saves the registers of <code class="computeroutput"><span class="identifier">main</span><span class="special">()</span></code>). For jumping between context's fc1 and fc2 + <code class="computeroutput"><span class="identifier">jump_fcontext</span><span class="special">()</span></code> + is called. Because context fcm is chained to fc1, <code class="computeroutput"><span class="identifier">main</span><span class="special">()</span></code> is entered (returning from <span class="emphasis"><em>jump_fcontext()</em></span>) + after context fc1 becomes complete (return from <code class="computeroutput"><span class="identifier">f1</span><span class="special">()</span></code>). + </p> +<div class="warning"><table border="0" summary="Warning"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../doc/src/images/warning.png"></td> +<th align="left">Warning</th> +</tr> +<tr><td align="left" valign="top"><p> + Calling <span class="emphasis"><em>jump_fcontext()</em></span> to the same context from inside + the same context results in undefined behaviour. + </p></td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In contrast to threads, which are preemtive, <span class="emphasis"><em>fcontext_t</em></span> + switches are cooperative (programmer controls when switch will happen). The + kernel is not involved in the context switches. + </p></td></tr> +</table></div> +<h4> +<a name="context.context.h1"></a> + <span><a name="context.context.transfer_of_data"></a></span><a class="link" href="context.html#context.context.transfer_of_data">Transfer + of data</a> + </h4> +<p> + The third argument passed to <span class="emphasis"><em>jump_fcontext()</em></span>, in one context, + is passed as the first argument of the <span class="emphasis"><em>context-function</em></span> + if the context is started for the first time. In all following invocations + of <span class="emphasis"><em>jump_fcontext()</em></span> the intptr_t passed to <span class="emphasis"><em>jump_fcontext()</em></span>, + in one context, is returned by <span class="emphasis"><em>jump_fcontext()</em></span> in the + other context. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">ctx</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ctx</span><span class="special">;</span> + +<span class="identifier">ctx</span><span class="special">::</span><span class="identifier">fcontext_t</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="identifier">fcm</span><span class="special">;</span> + +<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span> <span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span> <span class="special">></span> <span class="identifier">pair_t</span><span class="special">;</span> + +<span class="keyword">void</span> <span class="identifier">f1</span><span class="special">(</span> <span class="identifier">intptr_t</span> <span class="identifier">param</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">pair_t</span> <span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">pair_t</span> <span class="special">*)</span> <span class="identifier">param</span><span class="special">;</span> + + <span class="identifier">p</span> <span class="special">=</span> <span class="special">(</span> <span class="identifier">pair_t</span> <span class="special">*)</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> <span class="special">(</span> <span class="identifier">p</span><span class="special">-></span><span class="identifier">first</span> <span class="special">+</span> <span class="identifier">p</span><span class="special">-></span><span class="identifier">second</span><span class="special">)</span> <span class="special">);</span> + + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> <span class="special">(</span> <span class="identifier">p</span><span class="special">-></span><span class="identifier">first</span> <span class="special">+</span> <span class="identifier">p</span><span class="special">-></span><span class="identifier">second</span><span class="special">)</span> <span class="special">);</span> +<span class="special">}</span> + +<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span> <span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">argv</span><span class="special">[])</span> +<span class="special">{</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">stack_allocator</span> <span class="identifier">alloc</span><span class="special">;</span> + + <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span> <span class="special">=</span> <span class="identifier">alloc</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">());</span> + <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">limit</span> <span class="special">=</span> + <span class="keyword">static_cast</span><span class="special"><</span> <span class="keyword">char</span> <span class="special">*</span> <span class="special">>(</span> <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_stack</span><span class="special">.</span><span class="identifier">base</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">minimum_stacksize</span><span class="special">();</span> + <span class="identifier">fc1</span><span class="special">.</span><span class="identifier">fc_link</span> <span class="special">=</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">;</span> + <span class="identifier">pair_t</span> <span class="identifier">p</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span> <span class="number">2</span><span class="special">,</span> <span class="number">7</span><span class="special">)</span> <span class="special">);</span> + <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">make_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="identifier">f1</span><span class="special">);</span> + + <span class="keyword">int</span> <span class="identifier">res</span> <span class="special">=</span> <span class="special">(</span> <span class="keyword">int</span><span class="special">)</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> <span class="special">&</span> <span class="identifier">p</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">first</span> <span class="special"><<</span> <span class="string">" + "</span> <span class="special"><<</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">second</span> <span class="special"><<</span> <span class="string">" == "</span> <span class="special"><<</span> <span class="identifier">res</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">);</span> + <span class="identifier">res</span> <span class="special">=</span> <span class="special">(</span> <span class="keyword">int</span><span class="special">)</span> <span class="identifier">ctx</span><span class="special">::</span><span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="special">&</span> <span class="identifier">fcm</span><span class="special">,</span> <span class="special">&</span> <span class="identifier">fc1</span><span class="special">,</span> <span class="special">(</span> <span class="identifier">intptr_t</span><span class="special">)</span> <span class="special">&</span> <span class="identifier">p</span><span class="special">);</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">first</span> <span class="special"><<</span> <span class="string">" + "</span> <span class="special"><<</span> <span class="identifier">p</span><span class="special">.</span><span class="identifier">second</span> <span class="special"><<</span> <span class="string">" == "</span> <span class="special"><<</span> <span class="identifier">res</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"main: done"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + + <span class="keyword">return</span> <span class="identifier">EXIT_SUCCESS</span><span class="special">;</span> +<span class="special">}</span> + +<span class="identifier">output</span><span class="special">:</span> + <span class="number">2</span> <span class="special">+</span> <span class="number">7</span> <span class="special">==</span> <span class="number">9</span> + <span class="number">5</span> <span class="special">+</span> <span class="number">6</span> <span class="special">==</span> <span class="number">11</span> + <span class="identifier">main</span><span class="special">:</span> <span class="identifier">done</span> +</pre> +<h4> +<a name="context.context.h2"></a> + <span><a name="context.context.exceptions_in__emphasis_context_function__emphasis_"></a></span><a class="link" href="context.html#context.context.exceptions_in__emphasis_context_function__emphasis_">Exceptions + in <span class="emphasis"><em>context-function</em></span></a> + </h4> +<p> + If the <span class="emphasis"><em>context-function</em></span> emits an exception, the application + will terminate. + </p> +<h4> +<a name="context.context.h3"></a> + <span><a name="context.context.preserving_floating_point_registers"></a></span><a class="link" href="context.html#context.context.preserving_floating_point_registers">Preserving + floating point registers</a> + </h4> +<p> + Preserving the floating point registers increases the cycle count for a context + switch (see performance tests). The foruth argument of <span class="emphasis"><em>jump_fcontext()</em></span> + controls if fpu registers should be preserved by the context jump. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The use of the fpu controling argument of <span class="emphasis"><em>jump_fcontext()</em></span> + must be consistent in the application. Otherwise the behaviour is undefined. + </p></td></tr> +</table></div> +<h4> +<a name="context.context.h4"></a> + <span><a name="context.context.stack_unwinding"></a></span><a class="link" href="context.html#context.context.stack_unwinding">Stack + unwinding</a> + </h4> +<p> + Sometimes it is necessary to unwind the stack of an unfinished context to destroy + local stack variables so they can release allocated resources (RAII pattern). + The user is responsible for this task. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="requirements.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="context/boost_fcontext.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/context/boost_fcontext.html b/libs/context/doc/html/context/context/boost_fcontext.html new file mode 100644 index 0000000000..fad862482b --- /dev/null +++ b/libs/context/doc/html/context/context/boost_fcontext.html @@ -0,0 +1,146 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Struct fcontext_t and related functions</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Context"> +<link rel="up" href="../context.html" title="Context"> +<link rel="prev" href="../context.html" title="Context"> +<link rel="next" href="../stack.html" title="Stack allocation"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../context.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../context.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../stack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="context.context.boost_fcontext"></a><a class="link" href="boost_fcontext.html" title="Struct fcontext_t and related functions">Struct <code class="computeroutput"><span class="identifier">fcontext_t</span></code> and related functions</a> +</h3></div></div></div> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">stack_t</span> +<span class="special">{</span> + <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">base</span><span class="special">;</span> + <span class="keyword">void</span> <span class="special">*</span> <span class="identifier">limit</span><span class="special">;</span> +<span class="special">};</span> + +<span class="keyword">struct</span> <span class="identifier">fcontext_t</span> +<span class="special">{</span> + <span class="special"><</span> <span class="identifier">platform</span> <span class="identifier">specific</span> <span class="special">></span> + + <span class="identifier">stack_t</span> <span class="identifier">fc_stack</span><span class="special">;</span> +<span class="special">};</span> + +<span class="identifier">intptr_t</span> <span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="identifier">fcontext_t</span> <span class="special">*</span> <span class="identifier">ofc</span><span class="special">,</span> <span class="identifier">fcontext_t</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">nfc</span><span class="special">,</span> <span class="identifier">intptr_t</span> <span class="identifier">vp</span><span class="special">);</span> +<span class="keyword">void</span> <span class="identifier">make_fcontext</span><span class="special">(</span> <span class="identifier">fcontext_t</span> <span class="special">*</span> <span class="identifier">fc</span><span class="special">,</span> <span class="keyword">void</span><span class="special">(*</span> <span class="identifier">fn</span><span class="special">)(</span><span class="identifier">intptr_t</span><span class="special">)</span> <span class="special">);</span> +</pre> +<h5> +<a name="context.context.boost_fcontext.h0"></a> + <span><a name="context.context.boost_fcontext._code__phrase_role__identifier__base__phrase___code_"></a></span><a class="link" href="boost_fcontext.html#context.context.boost_fcontext._code__phrase_role__identifier__base__phrase___code_"><code class="computeroutput"><span class="identifier">base</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Member:</span></dt> +<dd><p> + Pointer to the top of the stack. + </p></dd> +</dl> +</div> +<h5> +<a name="context.context.boost_fcontext.h1"></a> + <span><a name="context.context.boost_fcontext._code__phrase_role__identifier__limit__phrase___code_"></a></span><a class="link" href="boost_fcontext.html#context.context.boost_fcontext._code__phrase_role__identifier__limit__phrase___code_"><code class="computeroutput"><span class="identifier">limit</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Member:</span></dt> +<dd><p> + Pointer to the bottom of the stack. + </p></dd> +</dl> +</div> +<h5> +<a name="context.context.boost_fcontext.h2"></a> + <span><a name="context.context.boost_fcontext._code__phrase_role__identifier__fc_stack__phrase___code_"></a></span><a class="link" href="boost_fcontext.html#context.context.boost_fcontext._code__phrase_role__identifier__fc_stack__phrase___code_"><code class="computeroutput"><span class="identifier">fc_stack</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Member:</span></dt> +<dd><p> + Tracks the memory for the context's stack. + </p></dd> +</dl> +</div> +<h5> +<a name="context.context.boost_fcontext.h3"></a> + <span><a name="context.context.boost_fcontext._code__phrase_role__identifier__intptr_t__phrase___phrase_role__identifier__jump_fcontext__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__ofc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__nfc__phrase__phrase_role__special_____phrase___phrase_role__identifier__intptr_t__phrase___phrase_role__identifier__p__phrase__phrase_role__special_____phrase___phrase_role__keyword__bool__phrase___phrase_role__identifier__preserve_fpu__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="boost_fcontext.html#context.context.boost_fcontext._code__phrase_role__identifier__intptr_t__phrase___phrase_role__identifier__jump_fcontext__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__ofc__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__nfc__phrase__phrase_role__special_____phrase___phrase_role__identifier__intptr_t__phrase___phrase_role__identifier__p__phrase__phrase_role__special_____phrase___phrase_role__keyword__bool__phrase___phrase_role__identifier__preserve_fpu__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">intptr_t</span> <span class="identifier">jump_fcontext</span><span class="special">(</span> <span class="identifier">fcontext_t</span> + <span class="special">*</span> <span class="identifier">ofc</span><span class="special">,</span> <span class="identifier">fcontext_t</span> + <span class="special">*</span> <span class="identifier">nfc</span><span class="special">,</span> <span class="identifier">intptr_t</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">bool</span> + <span class="identifier">preserve_fpu</span><span class="special">)</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Effects:</span></dt> +<dd><p> + Stores the current context data (stack pointer, instruction pointer, + and CPU registers) to <code class="computeroutput"><span class="special">*</span><span class="identifier">ofc</span></code> and restores the context data + from <code class="computeroutput"><span class="special">*</span><span class="identifier">nfc</span></code>, + which implies jumping to <code class="computeroutput"><span class="special">*</span><span class="identifier">nfc</span></code>'s execution context. The intptr_t + argument, <code class="computeroutput"><span class="identifier">p</span></code>, is passed + to the current context to be returned by the most recent call to <code class="computeroutput"><span class="identifier">jump_fcontext</span><span class="special">()</span></code> + in the same thread. The last argument controls if fpu registers have + to be preserved. + </p></dd> +<dt><span class="term">Returns:</span></dt> +<dd><p> + The third pointer argument passed to the most recent call to <code class="computeroutput"><span class="identifier">jump_fcontext</span><span class="special">()</span></code>, + if any. + </p></dd> +</dl> +</div> +<h5> +<a name="context.context.boost_fcontext.h4"></a> + <span><a name="context.context.boost_fcontext._code__phrase_role__keyword__void__phrase___phrase_role__identifier__make_fcontext__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__fc__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase__phrase_role__special______phrase__phrase_role__identifier__fn__phrase__phrase_role__special______phrase__phrase_role__identifier__intptr_t__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="boost_fcontext.html#context.context.boost_fcontext._code__phrase_role__keyword__void__phrase___phrase_role__identifier__make_fcontext__phrase__phrase_role__special_____phrase___phrase_role__identifier__fcontext_t__phrase___phrase_role__special_____phrase___phrase_role__identifier__fc__phrase__phrase_role__special_____phrase___phrase_role__keyword__void__phrase__phrase_role__special______phrase__phrase_role__identifier__fn__phrase__phrase_role__special______phrase__phrase_role__identifier__intptr_t__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">make_fcontext</span><span class="special">(</span> <span class="identifier">fcontext_t</span> + <span class="special">*</span> <span class="identifier">fc</span><span class="special">,</span> <span class="keyword">void</span><span class="special">(*</span><span class="identifier">fn</span><span class="special">)(</span><span class="identifier">intptr_t</span><span class="special">))</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Precondition:</span></dt> +<dd><p> + A stack is applied to <code class="computeroutput"><span class="special">*</span><span class="identifier">fc</span></code> before <code class="computeroutput"><span class="identifier">make_fcontext</span><span class="special">()</span></code> is called. + </p></dd> +<dt><span class="term">Effects:</span></dt> +<dd><p> + Modifies <code class="computeroutput"><span class="special">*</span><span class="identifier">fc</span></code> + in order to execute <code class="computeroutput"><span class="identifier">fn</span></code> + when the context is activated next. + </p></dd> +</dl> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../context.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../context.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../stack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/overview.html b/libs/context/doc/html/context/overview.html new file mode 100644 index 0000000000..a6bc1f609d --- /dev/null +++ b/libs/context/doc/html/context/overview.html @@ -0,0 +1,83 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Overview</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="../index.html" title="Context"> +<link rel="next" href="requirements.html" title="Requirements"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="requirements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.overview"></a><a class="link" href="overview.html" title="Overview">Overview</a> +</h2></div></div></div> +<p> + <span class="bold"><strong>Boost.Context</strong></span> is a foundational library that + provides a sort of cooperative multitasking on a single thread. By providing + an abstraction of the current execution state in the current thread, including + the stack (with local variables) and stack pointer, all registers and CPU flags, + and the instruction pointer, a <span class="emphasis"><em>fcontext_t</em></span> instance represents + a specific point in the application's execution path. This is useful for building + higher-level abstractions, like <span class="emphasis"><em>coroutines</em></span>, <span class="emphasis"><em>cooperative + threads (userland threads)</em></span> or an aquivalent to <a href="http://msdn.microsoft.com/en-us/library/9k7k7cf0%28v=vs.80%29.aspx" target="_top">C# + keyword <span class="emphasis"><em>yield</em></span></a> in C++. + </p> +<p> + A <span class="emphasis"><em>fcontext_t</em></span> provides the means to suspend the current + execution path and to transfer execution control, thereby permitting another + <span class="emphasis"><em>fcontext_t</em></span> to run on the current thread. This stateful + transfer mechanism enables a <span class="emphasis"><em>fcontext_t</em></span> to suspend execution + from within nested functions and, later, to resume from where it was suspended. + While the execution path represented by a <span class="emphasis"><em>fcontext_t</em></span> only + runs on a single thread, it can be migrated to another thread at any given + time. + </p> +<p> + A context switch between threads requires system calls (involving the OS kernel), + which can cost more than thousand CPU cycles on x86 CPUs. By contrast, transferring + control among them requires only fewer than hundred CPU cycles because it does + not involve system calls as it is done within a single thread. + </p> +<p> + In order to use the classes and functions described here, you can either include + the specific headers specified by the descriptions of each class or function, + or include the master library header: + </p> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">context</span><span class="special">/</span><span class="identifier">all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + which includes all the other headers in turn. + </p> +<p> + All functions and classes are contained in the namespace <span class="emphasis"><em>boost::ctx</em></span>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="requirements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/performance.html b/libs/context/doc/html/context/performance.html new file mode 100644 index 0000000000..8bdddcbe68 --- /dev/null +++ b/libs/context/doc/html/context/performance.html @@ -0,0 +1,152 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Performance</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="stack/stack_helper.html" title="Helper functions"> +<link rel="next" href="tested.html" title="Tested Platforms"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="stack/stack_helper.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tested.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.performance"></a><a class="link" href="performance.html" title="Performance">Performance</a> +</h2></div></div></div> +<p> + Performance of <span class="bold"><strong>Boost.Context</strong></span> was measured + on the platforms shown in the following table. Performance measurements were + taken using <code class="computeroutput"><span class="identifier">rdtsc</span></code>, with overhead + corrections, on x86 platforms. In each case, stack protection was active, cache + warm-up was accounted for, and the one running thread was pinned to a single + CPU. The code was compiled using the build options, 'variant = release cxxflags + = -DBOOST_DISABLE_ASSERTS'. + </p> +<p> + The numbers in the table are the number of cycles per iteration, based upon + an average computed over 10 iterations. + </p> +<div class="table"> +<a name="context.performance.t0"></a><p class="title"><b>Table 1. Perfomance of context switch</b></p> +<div class="table-contents"><table class="table" summary="Perfomance of context switch"> +<colgroup> +<col> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Platform + </p> + </th> +<th> + <p> + ucontext_t + </p> + </th> +<th> + <p> + fcontext_t with fpu + </p> + </th> +<th> + <p> + fcontext_t without fpu + </p> + </th> +<th> + <p> + boost::function + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + AMD Athlon 64 DualCore 4400+ (32bit Linux) + </p> + </td> +<td> + <p> + 846 cycles + </p> + </td> +<td> + <p> + 65 cycles + </p> + </td> +<td> + <p> + 46 cycles + </p> + </td> +<td> + <p> + 43 cycles + </p> + </td> +</tr> +<tr> +<td> + <p> + Intel Core2 Q6700 (64bit Linux) + </p> + </td> +<td> + <p> + 1472 cycles + </p> + </td> +<td> + <p> + 172 cycles + </p> + </td> +<td> + <p> + 63 cycles + </p> + </td> +<td> + <p> + 60 cycles + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="stack/stack_helper.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="tested.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/rationale.html b/libs/context/doc/html/context/rationale.html new file mode 100644 index 0000000000..4b85082379 --- /dev/null +++ b/libs/context/doc/html/context/rationale.html @@ -0,0 +1,104 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Rationale</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="tested.html" title="Tested Platforms"> +<link rel="next" href="rationale/other_apis_.html" title="Other APIs"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tested.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale/other_apis_.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.rationale"></a><a class="link" href="rationale.html" title="Rationale">Rationale</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="rationale/other_apis_.html">Other APIs </a></span></dt> +<dt><span class="section"><a href="rationale/x86_and_floating_point_env.html">x86 and + floating-point env</a></span></dt> +</dl></div> +<h4> +<a name="context.rationale.h0"></a> + <span><a name="context.rationale.no_inline_assembler"></a></span><a class="link" href="rationale.html#context.rationale.no_inline_assembler">No + inline-assembler</a> + </h4> +<p> + Some newer compiler (for instance MSVC 10 for x86_64 and itanium) do not support + inline assembler. <sup>[<a name="context.rationale.f0" href="#ftn.context.rationale.f0" class="footnote">1</a>]</sup>. + </p> +<h4> +<a name="context.rationale.h1"></a> + <span><a name="context.rationale.fcontext_t"></a></span><a class="link" href="rationale.html#context.rationale.fcontext_t">fcontext_t</a> + </h4> +<p> + <span class="bold"><strong>Boost.Context</strong></span> provides the low level API fcontext_t + which is implemented in assembler to provide context swapping operations. fcontext_t + is the part to port to new platforms. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Context switches do not preserve the signal mask on UNIX systems. + </p></td></tr> +</table></div> +<p> + Because the assembler code uses the byte layout of <span class="emphasis"><em>fcontext_t</em></span> + to access its members <span class="emphasis"><em>fcontext_t</em></span> must be a POD. This requires + that <span class="emphasis"><em>fcontext_t</em></span> has only a default constructor, no visibility + keywords (e.g. private, public, protected), no virtual methods and all members + and base clases are PODs too. + </p> +<h4> +<a name="context.rationale.h2"></a> + <span><a name="context.rationale.protecting_the_stack"></a></span><a class="link" href="rationale.html#context.rationale.protecting_the_stack">Protecting + the stack</a> + </h4> +<p> + Because the stack's size is fixed -- there is no support for split stacks yet + -- it is important to protect against exceeding the stack's bounds. Otherwise, + in the best case, overrunning the stack's memory will result in a segmentation + fault or access violation and, in the worst case, the application's memory + will be overwritten. <code class="computeroutput"><span class="identifier">stack_allocator</span></code> + appends a guard page to the stack to help detect overruns. The guard page consumes + no physical memory, but generates a segmentation fault or access violation + on access to the virtual memory addresses within it. + </p> +<div class="footnotes"> +<br><hr width="100" align="left"> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.f0" href="#context.rationale.f0" class="para">1</a>] </sup> + <a href="http://msdn.microsoft.com/en-us/library/4ks26t93.aspx" target="_top">MSDN article + 'Inline Assembler'</a> + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="tested.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale/other_apis_.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/rationale/other_apis_.html b/libs/context/doc/html/context/rationale/other_apis_.html new file mode 100644 index 0000000000..f86669a1e0 --- /dev/null +++ b/libs/context/doc/html/context/rationale/other_apis_.html @@ -0,0 +1,117 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Other APIs</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Context"> +<link rel="up" href="../rationale.html" title="Rationale"> +<link rel="prev" href="../rationale.html" title="Rationale"> +<link rel="next" href="x86_and_floating_point_env.html" title="x86 and floating-point env"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../rationale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rationale.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="x86_and_floating_point_env.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="context.rationale.other_apis_"></a><a class="link" href="other_apis_.html" title="Other APIs">Other APIs </a> +</h3></div></div></div> +<h5> +<a name="context.rationale.other_apis_.h0"></a> + <span><a name="context.rationale.other_apis_.setjmp___longjmp__"></a></span><a class="link" href="other_apis_.html#context.rationale.other_apis_.setjmp___longjmp__">setjmp()/longjmp()</a> + </h5> +<p> + C99 defines <code class="computeroutput"><span class="identifier">setjmp</span><span class="special">()</span></code>/<code class="computeroutput"><span class="identifier">longjmp</span><span class="special">()</span></code> + to provide non-local jumps but it does not require that <span class="emphasis"><em>longjmp()</em></span> + preserves the current stack frame. Therefore, jumping into a function which + was exited via a call to <span class="emphasis"><em>longjmp()</em></span> is undefined <sup>[<a name="context.rationale.other_apis_.f0" href="#ftn.context.rationale.other_apis_.f0" class="footnote">2</a>]</sup>. + </p> +<h5> +<a name="context.rationale.other_apis_.h1"></a> + <span><a name="context.rationale.other_apis_.ucontext_t"></a></span><a class="link" href="other_apis_.html#context.rationale.other_apis_.ucontext_t">ucontext_t</a> + </h5> +<p> + Since POSIX.1-2003 <code class="computeroutput"><span class="identifier">ucontext_t</span></code> + is deprecated and was removed in POSIX.1-2008! The function signature of + <code class="computeroutput"><span class="identifier">makecontext</span><span class="special">()</span></code> + is: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">makecontext</span><span class="special">(</span><span class="identifier">ucontext_t</span> <span class="special">*</span><span class="identifier">ucp</span><span class="special">,</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">func</span><span class="special">)(),</span> <span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="special">...);</span> +</pre> +<p> + The third argument of <code class="computeroutput"><span class="identifier">makecontext</span><span class="special">()</span></code> specifies the number of integer arguments + that follow which will require function pointer cast if <code class="computeroutput"><span class="identifier">func</span></code> + will accept those arguments which is undefined in C99 <sup>[<a name="context.rationale.other_apis_.f1" href="#ftn.context.rationale.other_apis_.f1" class="footnote">3</a>]</sup>. + </p> +<p> + The arguments in the var-arg list are required to be integers, passing pointers + in var-arg list is not guarantied to work, especially it will fail for architectures + where pointers are larger than integers. + </p> +<p> + <code class="computeroutput"><span class="identifier">ucontext_t</span></code> preserves signal + mask between context switches which involes system calls consuming a lot + of CPU cycles (ucontext_t is slower by perfomance_link[factor 13x] relative + to <code class="computeroutput"><span class="identifier">fcontext_t</span></code>). + </p> +<h5> +<a name="context.rationale.other_apis_.h2"></a> + <span><a name="context.rationale.other_apis_.windows_fibers"></a></span><a class="link" href="other_apis_.html#context.rationale.other_apis_.windows_fibers">Windows + fibers</a> + </h5> +<p> + A drawback of Windows Fiber API is that <code class="computeroutput"><span class="identifier">CreateFiber</span><span class="special">()</span></code> does not accept a pointer to user allocated + stack space preventing the reuse of stacks for other context instances. Because + the Windows Fiber API requires to call <code class="computeroutput"><span class="identifier">ConvertThreadToFiber</span><span class="special">()</span></code> if <code class="computeroutput"><span class="identifier">SwitchFiber</span><span class="special">()</span></code> is called for a thread which has not been + converted to a fiber. For the same reason <code class="computeroutput"><span class="identifier">ConvertFiberToThread</span><span class="special">()</span></code> must be called after return from <code class="computeroutput"><span class="identifier">SwitchFiber</span><span class="special">()</span></code> + if the thread was forced to be converted to a fiber before (which is inefficient). + </p> +<pre class="programlisting"><span class="keyword">if</span> <span class="special">(</span> <span class="special">!</span> <span class="identifier">is_a_fiber</span><span class="special">()</span> <span class="special">)</span> +<span class="special">{</span> + <span class="identifier">ConvertThreadToFiber</span><span class="special">(</span> <span class="number">0</span><span class="special">);</span> + <span class="identifier">SwitchToFiber</span><span class="special">(</span> <span class="identifier">ctx</span><span class="special">);</span> + <span class="identifier">ConvertFiberToThread</span><span class="special">();</span> +<span class="special">}</span> +</pre> +<p> + If the condition <code class="computeroutput"><span class="identifier">_WIN32_WINNT</span> <span class="special">>=</span> <span class="identifier">_WIN32_WINNT_VISTA</span></code> + is met function <code class="computeroutput"><span class="identifier">IsThreadAFiber</span><span class="special">()</span></code> is provided in order to detect if the current + thread was already converted. Unfortunately Windows XP + SP 2/3 defines + <code class="computeroutput"><span class="identifier">_WIN32_WINNT</span> <span class="special">>=</span> + <span class="identifier">_WIN32_WINNT_VISTA</span></code> without providing + <code class="computeroutput"><span class="identifier">IsThreadAFiber</span><span class="special">()</span></code>. + </p> +<div class="footnotes"> +<br><hr width="100" align="left"> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.other_apis_.f0" href="#context.rationale.other_apis_.f0" class="para">2</a>] </sup> + ISO/IEC 9899:1999, 2005, 7.13.2.1:2 + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.other_apis_.f1" href="#context.rationale.other_apis_.f1" class="para">3</a>] </sup> + ISO/IEC 9899:1999, 2005, J.2 + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../rationale.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rationale.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="x86_and_floating_point_env.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/rationale/x86_and_floating_point_env.html b/libs/context/doc/html/context/rationale/x86_and_floating_point_env.html new file mode 100644 index 0000000000..a2118af85c --- /dev/null +++ b/libs/context/doc/html/context/rationale/x86_and_floating_point_env.html @@ -0,0 +1,124 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>x86 and floating-point env</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Context"> +<link rel="up" href="../rationale.html" title="Rationale"> +<link rel="prev" href="other_apis_.html" title="Other APIs"> +<link rel="next" href="../reference.html" title="Reference"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="other_apis_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rationale.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="context.rationale.x86_and_floating_point_env"></a><a class="link" href="x86_and_floating_point_env.html" title="x86 and floating-point env">x86 and + floating-point env</a> +</h3></div></div></div> +<h5> +<a name="context.rationale.x86_and_floating_point_env.h0"></a> + <span><a name="context.rationale.x86_and_floating_point_env.i386"></a></span><a class="link" href="x86_and_floating_point_env.html#context.rationale.x86_and_floating_point_env.i386">i386</a> + </h5> +<p> + "The FpCsr and the MxCsr register must be saved and restored before + any call or return by any procedure that needs to modify them ..." + <sup>[<a name="context.rationale.x86_and_floating_point_env.f0" href="#ftn.context.rationale.x86_and_floating_point_env.f0" class="footnote">4</a>]</sup>. + </p> +<h5> +<a name="context.rationale.x86_and_floating_point_env.h1"></a> + <span><a name="context.rationale.x86_and_floating_point_env.x86_64"></a></span><a class="link" href="x86_and_floating_point_env.html#context.rationale.x86_and_floating_point_env.x86_64">x86_64</a> + </h5> +<h5> +<a name="context.rationale.x86_and_floating_point_env.h2"></a> + <span><a name="context.rationale.x86_and_floating_point_env.windows"></a></span><a class="link" href="x86_and_floating_point_env.html#context.rationale.x86_and_floating_point_env.windows">Windows</a> + </h5> +<p> + MxCsr - "A callee that modifies any of the nonvolatile fields within + MxCsr must restore them before returning to its caller. Furthermore, a caller + that has modified any of these fields must restore them to their standard + values before invoking a callee ..." <sup>[<a name="context.rationale.x86_and_floating_point_env.f1" href="#ftn.context.rationale.x86_and_floating_point_env.f1" class="footnote">5</a>]</sup>. + </p> +<p> + FpCsr - "A callee that modifies any of the fields within FpCsr must + restore them before returning to its caller. Furthermore, a caller that has + modified any of these fields must restore them to their standard values before + invoking a callee ..." <sup>[<a name="context.rationale.x86_and_floating_point_env.f2" href="#ftn.context.rationale.x86_and_floating_point_env.f2" class="footnote">6</a>]</sup>. + </p> +<p> + "The MMX and floating-point stack registers (MM0-MM7/ST0-ST7) are preserved + across context switches. There is no explicit calling convention for these + registers." <sup>[<a name="context.rationale.x86_and_floating_point_env.f3" href="#ftn.context.rationale.x86_and_floating_point_env.f3" class="footnote">7</a>]</sup>. + </p> +<p> + "The 64-bit Microsoft compiler does not use ST(0)-ST(7)/MM0-MM7". + <sup>[<a name="context.rationale.x86_and_floating_point_env.f4" href="#ftn.context.rationale.x86_and_floating_point_env.f4" class="footnote">8</a>]</sup>. + </p> +<p> + "XMM6-XMM15 must be preserved" <sup>[<a name="context.rationale.x86_and_floating_point_env.f5" href="#ftn.context.rationale.x86_and_floating_point_env.f5" class="footnote">9</a>]</sup> + </p> +<h5> +<a name="context.rationale.x86_and_floating_point_env.h3"></a> + <span><a name="context.rationale.x86_and_floating_point_env.sysv"></a></span><a class="link" href="x86_and_floating_point_env.html#context.rationale.x86_and_floating_point_env.sysv">SysV</a> + </h5> +<p> + "The control bits of the MxCsr register are callee-saved (preserved + across calls), while the status bits are caller-saved (not preserved). The + x87 status word register is caller-saved, whereas the x87 control word (FpCsr) + is callee-saved." <sup>[<a name="context.rationale.x86_and_floating_point_env.f6" href="#ftn.context.rationale.x86_and_floating_point_env.f6" class="footnote">10</a>]</sup>. + </p> +<div class="footnotes"> +<br><hr width="100" align="left"> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f0" href="#context.rationale.x86_and_floating_point_env.f0" class="para">4</a>] </sup> + 'Calling Conventions', Agner Fog + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f1" href="#context.rationale.x86_and_floating_point_env.f1" class="para">5</a>] </sup> + <a href="http://http://msdn.microsoft.com/en-us/library/yxty7t75.aspx" target="_top">MSDN + article 'MxCsr'</a> + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f2" href="#context.rationale.x86_and_floating_point_env.f2" class="para">6</a>] </sup> + <a href="http://http://msdn.microsoft.com/en-us/library/ms235300.aspx" target="_top">MSDN + article 'FpCsr'</a> + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f3" href="#context.rationale.x86_and_floating_point_env.f3" class="para">7</a>] </sup> + <a href="http://msdn.microsoft.com/en-us/library/a32tsf7t%28VS.80%29.aspx" target="_top">MSDN + article 'Legacy Floating-Point Support'</a> + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f4" href="#context.rationale.x86_and_floating_point_env.f4" class="para">8</a>] </sup> + 'Calling Conventions', Agner Fog + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f5" href="#context.rationale.x86_and_floating_point_env.f5" class="para">9</a>] </sup> + <a href="http://msdn.microsoft.com/en-us/library/9z1stfyw%28v=vs.100%29.aspx" target="_top">MSDN + article 'Register Usage'</a> + </p></div> +<div class="footnote"><p><sup>[<a id="ftn.context.rationale.x86_and_floating_point_env.f6" href="#context.rationale.x86_and_floating_point_env.f6" class="para">10</a>] </sup> + SysV ABI AMD64 Architecture Processor Supplement Draft Version 0.99.4, + 3.2.1 + </p></div> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="other_apis_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rationale.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../reference.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/reference.html b/libs/context/doc/html/context/reference.html new file mode 100644 index 0000000000..1cff2438e5 --- /dev/null +++ b/libs/context/doc/html/context/reference.html @@ -0,0 +1,104 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Reference</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="rationale/x86_and_floating_point_env.html" title="x86 and floating-point env"> +<link rel="next" href="todo.html" title="Todo"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rationale/x86_and_floating_point_env.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a> +</h2></div></div></div> +<h4> +<a name="context.reference.h0"></a> + <span><a name="context.reference.arm"></a></span><a class="link" href="reference.html#context.reference.arm">ARM</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + AAPCS ABI: Procedure Call Standard for the ARM Architecture + </li> +<li class="listitem"> + AAPCS/LINUX: ARM GNU/Linux Application Binary Interface Supplement + </li> +</ul></div> +<h4> +<a name="context.reference.h1"></a> + <span><a name="context.reference.mips"></a></span><a class="link" href="reference.html#context.reference.mips">MIPS</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + O32 ABI: SYSTEM V APPLICATION BINARY INTERFACE, MIPS RISC Processor Supplement + </li></ul></div> +<h4> +<a name="context.reference.h2"></a> + <span><a name="context.reference.powerpc32"></a></span><a class="link" href="reference.html#context.reference.powerpc32">PowerPC32</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + SYSV ABI: SYSTEM V APPLICATION BINARY INTERFACE PowerPC Processor Supplement + </li></ul></div> +<h4> +<a name="context.reference.h3"></a> + <span><a name="context.reference.powerpc64"></a></span><a class="link" href="reference.html#context.reference.powerpc64">PowerPC64</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + SYSV ABI: PowerPC User Instruction Set Architecture, Book I + </li></ul></div> +<h4> +<a name="context.reference.h4"></a> + <span><a name="context.reference.x86_32"></a></span><a class="link" href="reference.html#context.reference.x86_32">X86-32</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + SYSV ABI: SYSTEM V APPLICATION BINARY INTERFACE, Intel386TM Architecture + Processor Supplement + </li> +<li class="listitem"> + MS PE: <a href="http://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx" target="_top">Calling + Conventions</a> + </li> +</ul></div> +<h4> +<a name="context.reference.h5"></a> + <span><a name="context.reference.x86_64"></a></span><a class="link" href="reference.html#context.reference.x86_64">X86-64</a> + </h4> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + SYSV ABI: System V Application Binary Interface, AMD64 Architecture Processor + Supplement + </li> +<li class="listitem"> + MS PE: <a href="http://msdn.microsoft.com/en-us/library/7kcdt6fy%28VS.80%29.aspx" target="_top">x64 + Software Conventions</a> + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="rationale/x86_and_floating_point_env.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/requirements.html b/libs/context/doc/html/context/requirements.html new file mode 100644 index 0000000000..814e0141fa --- /dev/null +++ b/libs/context/doc/html/context/requirements.html @@ -0,0 +1,59 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Requirements</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="overview.html" title="Overview"> +<link rel="next" href="context.html" title="Context"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="context.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.requirements"></a><a class="link" href="requirements.html" title="Requirements">Requirements</a> +</h2></div></div></div> +<p> + <span class="bold"><strong>Boost.Context</strong></span> must be built for the particular + compiler(s) and CPU architecture(s)s being targeted. <span class="bold"><strong>Boost.Context</strong></span> + includes assembly code and, therefore, requires GNU AS for supported POSIX + systems, and MASM for Windows systems. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Please note that address-model=64 must be given to bjam command line on 64bit + Windows (boost-build issue). + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="context.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/stack.html b/libs/context/doc/html/context/stack.html new file mode 100644 index 0000000000..a519a46195 --- /dev/null +++ b/libs/context/doc/html/context/stack.html @@ -0,0 +1,163 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Stack allocation</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="context/boost_fcontext.html" title="Struct fcontext_t and related functions"> +<link rel="next" href="stack/stack_allocator.html" title="Class stack_allocator"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="context/boost_fcontext.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stack/stack_allocator.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.stack"></a><a class="link" href="stack.html" title="Stack allocation">Stack allocation</a> +</h2></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="stack/stack_allocator.html">Class <code class="computeroutput"><span class="identifier">stack_allocator</span></code></a></span></dt> +<dt><span class="section"><a href="stack/stack_helper.html">Helper functions</a></span></dt> +</dl></div> +<p> + A <span class="emphasis"><em>fcontext_t</em></span> requires a stack which will be allocated/deallocated + by a <span class="emphasis"><em>StackAllocator</em></span>. <span class="bold"><strong>Boost.Context</strong></span> + uses <code class="computeroutput"><span class="identifier">stack_allocator</span></code> by default + but a customized <code class="computeroutput"><span class="identifier">stack</span> <span class="identifier">allocator</span></code> + can be passed to the context constructor instead. If a context is constructed + it invokes <span class="emphasis"><em>allocate()</em></span> function and by its destruction + the stack gets released by <span class="emphasis"><em>deallocate()</em></span>. + </p> +<h4> +<a name="context.stack.h0"></a> + <span><a name="context.stack._emphasis_stackallocator_concept__emphasis_"></a></span><a class="link" href="stack.html#context.stack._emphasis_stackallocator_concept__emphasis_"><span class="emphasis"><em>StackAllocator + concept</em></span></a> + </h4> +<p> + A <span class="emphasis"><em>StackAllocator</em></span> must satisfy the <span class="emphasis"><em>StackAllocator + concept</em></span> requirements shown in the following table, in which <code class="computeroutput"><span class="identifier">a</span></code> is an object of a <span class="emphasis"><em>StackAllocator</em></span> + type, <code class="computeroutput"><span class="identifier">p</span></code> is a <code class="computeroutput"><span class="keyword">void</span> <span class="special">*</span></code>, and + <code class="computeroutput"><span class="identifier">s</span></code> is a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + expression + </p> + </th> +<th> + <p> + return type + </p> + </th> +<th> + <p> + notes + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span> + <span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span> <span class="special">*</span></code> + </p> + </td> +<td> + <p> + returns a pointer to <code class="computeroutput"><span class="identifier">s</span></code> + bytes allocated from the stack + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">deallocate</span><span class="special">(</span> + <span class="identifier">p</span><span class="special">,</span> + <span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +<td> + <p> + deallocates <code class="computeroutput"><span class="identifier">s</span></code> bytes + of memory beginning at <code class="computeroutput"><span class="identifier">p</span></code>, + a pointer previously returned by <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">()</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The implementation of <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> might include logic to protect against + exceeding the context's available stack size rather than leaving it as undefined + behaviour. + </p></td></tr> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Calling <code class="computeroutput"><span class="identifier">deallocate</span><span class="special">()</span></code> + with a pointer not returned by <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> results in undefined behaviour. + </p></td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The stack is not required to be aligned; alignment takes place inside <code class="computeroutput"><span class="identifier">make_fcontext</span><span class="special">()</span></code>. + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="context/boost_fcontext.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stack/stack_allocator.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/stack/stack_allocator.html b/libs/context/doc/html/context/stack/stack_allocator.html new file mode 100644 index 0000000000..2a810b23e8 --- /dev/null +++ b/libs/context/doc/html/context/stack/stack_allocator.html @@ -0,0 +1,51 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Class stack_allocator</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Context"> +<link rel="up" href="../stack.html" title="Stack allocation"> +<link rel="prev" href="../stack.html" title="Stack allocation"> +<link rel="next" href="stack_helper.html" title="Helper functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../stack.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stack.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stack_helper.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="context.stack.stack_allocator"></a><a class="link" href="stack_allocator.html" title="Class stack_allocator">Class <code class="computeroutput"><span class="identifier">stack_allocator</span></code></a> +</h3></div></div></div> +<p> + <span class="bold"><strong>Boost.Context</strong></span> provides a <span class="emphasis"><em>StackAllocator</em></span> + <code class="computeroutput"><span class="identifier">stack_allocator</span></code> which models + the <span class="emphasis"><em>StackAllocator concept</em></span> concept. It appends a <span class="emphasis"><em>guard-page</em></span> + to protect against exceeding the stack. If the guard page is accessed (read + or write operation) a segmentation fault/access violation is generated by + the operating system. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../stack.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stack.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stack_helper.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/stack/stack_helper.html b/libs/context/doc/html/context/stack/stack_helper.html new file mode 100644 index 0000000000..af5494b77d --- /dev/null +++ b/libs/context/doc/html/context/stack/stack_helper.html @@ -0,0 +1,170 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Helper functions</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Context"> +<link rel="up" href="../stack.html" title="Stack allocation"> +<link rel="prev" href="stack_allocator.html" title="Class stack_allocator"> +<link rel="next" href="../performance.html" title="Performance"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="stack_allocator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stack.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="context.stack.stack_helper"></a><a class="link" href="stack_helper.html" title="Helper functions">Helper functions</a> +</h3></div></div></div> +<p> + <span class="bold"><strong>Boost.Context</strong></span> provides easy access to the + stack related limits defined by the environment. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">default_stacksize</span><span class="special">();</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">minimum_stacksize</span><span class="special">();</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">maximum_stacksize</span><span class="special">();</span> + +<span class="keyword">bool</span> <span class="identifier">is_stack_unbound</span><span class="special">();</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">pagesize</span><span class="special">();</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">page_count</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">stacksize</span><span class="special">);</span> +</pre> +<h5> +<a name="context.stack.stack_helper.h0"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__default_stacksize__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__default_stacksize__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> + <span class="identifier">default_stacksize</span><span class="special">()</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns a default stack size, which may be platform specific. The present + implementation returns a value of 256 kB. + </p></dd> +</dl> +</div> +<h5> +<a name="context.stack.stack_helper.h1"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__minimum_stacksize__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__minimum_stacksize__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> + <span class="identifier">minimum_stacksize</span><span class="special">()</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns the minimum size in bytes of stack defined by the environment. + </p></dd> +<dt><span class="term">Throws:</span></dt> +<dd><p> + Nothing. + </p></dd> +</dl> +</div> +<h5> +<a name="context.stack.stack_helper.h2"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__maximum_stacksize__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__maximum_stacksize__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> + <span class="identifier">maximum_stacksize</span><span class="special">()</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Preconditions:</span></dt> +<dd><p> + <code class="computeroutput"><span class="identifier">is_stack_unbound</span><span class="special">()</span></code> + returns <code class="computeroutput"><span class="keyword">false</span></code>. + </p></dd> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns the maximum size in bytes of stack defined by the environment. + </p></dd> +<dt><span class="term">Throws:</span></dt> +<dd><p> + Nothing. + </p></dd> +</dl> +</div> +<h5> +<a name="context.stack.stack_helper.h3"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__keyword__bool__phrase___phrase_role__identifier__is_stack_unbound__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__keyword__bool__phrase___phrase_role__identifier__is_stack_unbound__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">is_stack_unbound</span><span class="special">()</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns <code class="computeroutput"><span class="keyword">true</span></code> if the environment + defines no limit for the size of a stack. + </p></dd> +<dt><span class="term">Throws:</span></dt> +<dd><p> + Nothing. + </p></dd> +</dl> +</div> +<h5> +<a name="context.stack.stack_helper.h4"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__pagesize__phrase__phrase_role__special______phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__pagesize__phrase__phrase_role__special______phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> + <span class="identifier">pagesize</span><span class="special">()</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns how many bytes the operating system allocates for one page. + </p></dd> +<dt><span class="term">Throws:</span></dt> +<dd><p> + Nothing. + </p></dd> +</dl> +</div> +<h5> +<a name="context.stack.stack_helper.h5"></a> + <span><a name="context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__page_count__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__stacksize__phrase__phrase_role__special_____phrase___code_"></a></span><a class="link" href="stack_helper.html#context.stack.stack_helper._code__phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__page_count__phrase__phrase_role__special_____phrase___phrase_role__identifier__std__phrase__phrase_role__special______phrase__phrase_role__identifier__size_t__phrase___phrase_role__identifier__stacksize__phrase__phrase_role__special_____phrase___code_"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> + <span class="identifier">page_count</span><span class="special">(</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">stacksize</span><span class="special">)</span></code></a> + </h5> +<div class="variablelist"> +<p class="title"><b></b></p> +<dl> +<dt><span class="term">Returns:</span></dt> +<dd><p> + Returns how many pages have to be allocated for a stack of <code class="computeroutput"><span class="identifier">stacksize</span></code> bytes. + </p></dd> +<dt><span class="term">Throws:</span></dt> +<dd><p> + Nothing. + </p></dd> +</dl> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="stack_allocator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stack.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/tested.html b/libs/context/doc/html/context/tested.html new file mode 100644 index 0000000000..e2fe446b10 --- /dev/null +++ b/libs/context/doc/html/context/tested.html @@ -0,0 +1,295 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Tested Platforms</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="performance.html" title="Performance"> +<link rel="next" href="rationale.html" title="Rationale"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="performance.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.tested"></a><a class="link" href="tested.html" title="Tested Platforms">Tested Platforms</a> +</h2></div></div></div> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Platform + </p> + </th> +<th> + <p> + OS + </p> + </th> +<th> + <p> + Compiler + </p> + </th> +<th> + <p> + ABI + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + ARM (ARM926EJ-S) + </p> + </td> +<td> + <p> + Debian GNU/Linux (Lenny) + </p> + </td> +<td> + <p> + GCC 4.4.4 + </p> + </td> +<td> + <p> + ARM APCS (Linux) + </p> + </td> +</tr> +<tr> +<td> + <p> + MIPS (MIPS 24K) + </p> + </td> +<td> + <p> + Debian GNU/Linux (Lenny) + </p> + </td> +<td> + <p> + GCC 4.3.2 + </p> + </td> +<td> + <p> + O32 + </p> + </td> +</tr> +<tr> +<td> + <p> + MIPS (O2 / MIPS R5000) + </p> + </td> +<td> + <p> + Debian GNU/Linux (Lenny) + </p> + </td> +<td> + <p> + GCC 4.3.2 + </p> + </td> +<td> + <p> + O32 + </p> + </td> +</tr> +<tr> +<td> + <p> + PowerPC (7400) + </p> + </td> +<td> + <p> + Debian GNU/Linux (Lenny) + </p> + </td> +<td> + <p> + GCC 4.3.2 + </p> + </td> +<td> + <p> + SYSV + </p> + </td> +</tr> +<tr> +<td> + <p> + X86_64 (Intel Core2 Quad) + </p> + </td> +<td> + <p> + Ubuntu GNU/Linux (Lucid Lynx) + </p> + </td> +<td> + <p> + GCC 4.4.3 + </p> + </td> +<td> + <p> + SYSV + </p> + </td> +</tr> +<tr> +<td> + <p> + X86_64 + </p> + </td> +<td> + <p> + Windows 7 + </p> + </td> +<td> + <p> + MS VC 10.0 + </p> + </td> +<td> + <p> + PE + </p> + </td> +</tr> +<tr> +<td> + <p> + I386 + </p> + </td> +<td> + <p> + Debian GNU/Linux (Lenny) + </p> + </td> +<td> + <p> + GCC 4.4.3 + </p> + </td> +<td> + <p> + SYSV + </p> + </td> +</tr> +<tr> +<td> + <p> + I386 + </p> + </td> +<td> + <p> + FreeBSD 8.0 + </p> + </td> +<td> + <p> + GCC 4.2.1 + </p> + </td> +<td> + <p> + SYSV + </p> + </td> +</tr> +<tr> +<td> + <p> + I386 + </p> + </td> +<td> + <p> + OpenSolaris 2009.06 + </p> + </td> +<td> + <p> + GCC 4.3.2 + </p> + </td> +<td> + <p> + SYSV + </p> + </td> +</tr> +<tr> +<td> + <p> + I386 + </p> + </td> +<td> + <p> + Windows XP + </p> + </td> +<td> + <p> + MSVC 9.0 + </p> + </td> +<td> + <p> + PE + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="performance.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/context/doc/html/context/todo.html b/libs/context/doc/html/context/todo.html new file mode 100644 index 0000000000..c6c1b329a1 --- /dev/null +++ b/libs/context/doc/html/context/todo.html @@ -0,0 +1,51 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Todo</title> +<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../index.html" title="Context"> +<link rel="up" href="../index.html" title="Context"> +<link rel="prev" href="reference.html" title="Reference"> +<link rel="next" href="acknowledgements.html" title="Acknowledgments"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td> +<td align="center"><a href="../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h2 class="title" style="clear: both"> +<a name="context.todo"></a><a class="link" href="todo.html" title="Todo">Todo</a> +</h2></div></div></div> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + provide support for SPARC + </li> +<li class="listitem"> + support split-stack feature from gcc/gold linker + </li> +</ul></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2009 Oliver Kowalke<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgements.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> |