1824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\documentclass{article}
2824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\usepackage[fancyhdr,pdf]{latex2man}
3824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
4824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\input{common.tex}
5824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
6824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\begin{document}
7824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
8972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\begin{Name}{3}{unw\_resume}{David Mosberger-Tang}{Programming Library}{unw\_resume}unw\_resume -- resume execution in a particular stack frame
9824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\end{Name}
10824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
11824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{Synopsis}
12824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
13824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\File{\#include $<$libunwind.h$>$}\\
14824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
151a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidm\Type{int} \Func{unw\_resume}(\Type{unw\_cursor\_t~*}\Var{cp});\\
16824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
17824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{Description}
18824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
19824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmThe \Func{unw\_resume}() routine resumes execution at the stack frame
201a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidmidentified by \Var{cp}.  The behavior of this routine differs
21a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmslightly for local and remote unwinding.
22a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm
23a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmFor local unwinding, \Func{unw\_resume}() restores the machine state
24a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmand then directly resumes execution in the target stack frame.  Thus
25a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm\Func{unw\_resume}() does not return in this case.  Restoring the
26a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmmachine state normally involves restoring the ``preserved''
27a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm(callee-saved) registers.  However, if execution in any of the stack
28a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmframes younger (more deeply nested) than the one identified by
291a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidm\Var{cp} was interrupted by a signal, then \Func{unw\_resume}() will
301a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidmrestore all registers as well as the signal mask.  Attempting to call
311a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidm\Func{unw\_resume}() on a cursor which identifies the stack frame of
321a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidmanother thread results in undefined behavior (e.g., the program may
33e2561af01f349d86ee8e6ec24ca28cf58fda49aamostang.com!davidmcrash).
34a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm
35a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmFor remote unwinding, \Func{unw\_resume}() installs the machine state
36a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmidentified by the cursor by calling the \Func{access\_reg} and
37a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm\Func{access\_fpreg} accessor callbacks as needed.  Once that is
38a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmaccomplished, the \Func{resume} accessor callback is invoked.  The
39a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm\Func{unw\_resume} routine then returns normally (that is, unlikely
40a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmfor local unwinding, \Func{unw\_resume} will always return for remote
41a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmunwinding).
42824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
43824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmMost platforms reserve some registers to pass arguments to exception
44824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmhandlers (e.g., IA-64 uses \texttt{r15}-\texttt{r18} for this
45824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmpurpose).  These registers are normally treated like ``scratch''
46a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmregisters.  However, if \Prog{libunwind} is used to set an exception
47a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmargument register to a particular value (e.g., via
48a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidm\Func{unw\_set\_reg}()), then \Func{unw\_resume}() will install this
49a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmvalue as the contents of the register.  In other words, the exception
50a126d452e431cc1045928fb6c466dc4b86519802hp.com!davidmhandling arguments are installed even in cases where normally only the
51824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm``preserved'' registers are restored.
52824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
5388c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmNote that \Func{unw\_resume}() does \emph{not} invoke any unwind
5488c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmhandlers (aka, ``personality routines'').  If a program needs this, it
5588c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmwill have to do so on its own by obtaining the \Type{unw\_proc\_info\_t}
5688c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmof each unwound frame and appropriately processing its unwind handler
5788c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmand language-specific data area (lsda).  These steps are generally
5888c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmdependent on the target-platform and are regulated by the
5988c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidmprocessor-specific ABI (application-binary interface).
6088c6bcd7949ac2028ede1a4f8524a25a8de932c3mostang.com!davidm
61824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{Return Value}
62824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
63824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmFor local unwinding, \Func{unw\_resume}() does not return on success.
64824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmFor remote unwinding, it returns 0 on success.  On failure, the
65824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmnegative value of one of the errors below is returned.
66824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
671c48aa0448847bca778318def41a1d730817aad1mostang.com!davidm\section{Thread and Signal Safety}
681c48aa0448847bca778318def41a1d730817aad1mostang.com!davidm
6938fe40cb1a7a31338a7c360011446286dd917891mostang.com!davidm\Func{unw\_resume}() is thread-safe.  If cursor \Var{cp} is in the
7038fe40cb1a7a31338a7c360011446286dd917891mostang.com!davidmlocal address-space, this routine is also safe to use from a signal
7138fe40cb1a7a31338a7c360011446286dd917891mostang.com!davidmhandler.
721c48aa0448847bca778318def41a1d730817aad1mostang.com!davidm
73824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{Errors}
74824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
75824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\begin{Description}
76824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
77824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\item[\Const{UNW\_EBADREG}] A register needed by \Func{unw\_resume}() wasn't
78824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm  accessible.
79824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\item[\Const{UNW\_EINVALIDIP}] The instruction pointer identified by
801a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidm  \Var{cp} is not valid.
81824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\item[\Const{UNW\_BADFRAME}] The stack frame identified by
821a595c496f59e846a5561f34222bfe1eb5607941mostang.com!davidm  \Var{cp} is not valid.
83824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\end{Description}
84824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
85824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{See Also}
86824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
87824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\SeeAlso{libunwind(3)},
88824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\SeeAlso{unw\_set\_reg(3)},
89824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmsigprocmask(2)
90824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
91824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\section{Author}
92824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
93824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\noindent
94824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidmDavid Mosberger-Tang\\
9575f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangEmail: \Email{dmosberger@gmail.com}\\
9675f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangWWW: \URL{http://www.nongnu.org/libunwind/}.
97824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\LatexManEnd
98824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm
99824d6619b500a86ff2fc680268357f0215d59b0cmostang.com!davidm\end{document}
100