Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

unw_init_remote(3) [debian man page]

UNW_INIT_REMOTE(3)					       Programming Library						UNW_INIT_REMOTE(3)

NAME
unw_init_remote -- initialize cursor for remote unwinding SYNOPSIS
#include <libunwind.h> int unw_init_remote(unw_cursor_t *c, unw_addr_space_t as, void *arg); DESCRIPTION
The unw_init_remote() routine initializes the unwind cursor pointed to by c for unwinding in the address space identified by as. The as argument can either be set to unw_local_addr_space (local address space) or to an arbitrary address space created with unw_cre- ate_addr_space(). The arg void-pointer tells the address space exactly what entity should be unwound. For example, if unw_local_addr_space is passed in as, then arg needs to be a pointer to a context structure containing the machine-state of the initial stack frame. However, other address-spa- ces may instead expect a process-id, a thread-id, or a pointer to an arbitrary structure which identifies the stack-frame chain to be unwound. In other words, the interpretation of arg is entirely dependent on the address-space in use; libunwind never interprets the argu- ment in any way on its own. Note that unw_init_remote() can be used to initiate unwinding in any process, including the local process in which the unwinder itself is running. However, for local unwinding, it is generally preferable to use unw_init_local() instead, because it is easier to use and because it may perform better. RETURN VALUE
On successful completion, unw_init_remote() returns 0. Otherwise the negative value of one of the error-codes below is returned. THREAD AND SIGNAL SAFETY
unw_init_remote() is thread-safe. If the local address-space is passed in argument as, this routine is also safe to use from a signal han- dler. ERRORS
UNW_EINVAL unw_init_remote() was called in a version of libunwind which supports local unwinding only (this normally happens when defining UNW_LOCAL_ONLY before including <libunwind.h> and then calling unw_init_remote()). UNW_EUNSPEC An unspecified error occurred. UNW_EBADREG A register needed by unw_init_remote() wasn't accessible. SEE ALSO
libunwind(3), unw_create_addr_space(3), unw_init_local(3) AUTHOR
David Mosberger-Tang Email: dmosberger@gmail.com WWW: http://www.nongnu.org/libunwind/. Programming Library 16 August 2007 UNW_INIT_REMOTE(3)

Check Out this Related Man Page

UNW_RESUME(3)						       Programming Library						     UNW_RESUME(3)

NAME
unw_resume -- resume execution in a particular stack frame SYNOPSIS
#include <libunwind.h> int unw_resume(unw_cursor_t *cp); DESCRIPTION
The unw_resume() routine resumes execution at the stack frame identified by cp. The behavior of this routine differs slightly for local and remote unwinding. For local unwinding, unw_resume() restores the machine state and then directly resumes execution in the target stack frame. Thus unw_resume() does not return in this case. Restoring the machine state normally involves restoring the ``preserved'' (callee-saved) regis- ters. However, if execution in any of the stack frames younger (more deeply nested) than the one identified by cp was interrupted by a sig- nal, then unw_resume() will restore all registers as well as the signal mask. Attempting to call unw_resume() on a cursor which identifies the stack frame of another thread results in undefined behavior (e.g., the program may crash). For remote unwinding, unw_resume() installs the machine state identified by the cursor by calling the access_reg and access_fpreg accessor callbacks as needed. Once that is accomplished, the resume accessor callback is invoked. The unw_resume routine then returns normally (that is, unlikely for local unwinding, unw_resume will always return for remote unwinding). Most platforms reserve some registers to pass arguments to exception handlers (e.g., IA-64 uses r15-r18 for this purpose). These registers are normally treated like ``scratch'' registers. However, if libunwind is used to set an exception argument register to a particular value (e.g., via unw_set_reg()), then unw_resume() will install this value as the contents of the register. In other words, the exception han- dling arguments are installed even in cases where normally only the ``preserved'' registers are restored. Note that unw_resume() does not invoke any unwind handlers (aka, ``personality routines''). If a program needs this, it will have to do so on its own by obtaining the unw_proc_info_t of each unwound frame and appropriately processing its unwind handler and language-specific data area (lsda). These steps are generally dependent on the target-platform and are regulated by the processor-specific ABI (applica- tion-binary interface). RETURN VALUE
For local unwinding, unw_resume() does not return on success. For remote unwinding, it returns 0 on success. On failure, the negative value of one of the errors below is returned. THREAD AND SIGNAL SAFETY
unw_resume() is thread-safe. If cursor cp is in the local address-space, this routine is also safe to use from a signal handler. ERRORS
UNW_EUNSPEC An unspecified error occurred. UNW_EBADREG A register needed by unw_resume() wasn't accessible. UNW_EINVALIDIP The instruction pointer identified by cp is not valid. UNW_BADFRAME The stack frame identified by cp is not valid. SEE ALSO
libunwind(3), unw_set_reg(3), sigprocmask(2) AUTHOR
David Mosberger-Tang Email: dmosberger@gmail.com WWW: http://www.nongnu.org/libunwind/. Programming Library 16 August 2007 UNW_RESUME(3)
Man Page