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