unw_init_local - Man Page

initialize cursor for local unwinding

Synopsis

#include <libunwind.h>

int unw_init_local(unw_cursor_t *c, unw_context_t *ctxt);
int unw_init_local2(unw_cursor_t *c, unw_context_t *ctxt, int flag);

Description

The unw_init_local() routine initializes the unwind cursor  pointed to by c with the machine state in the context structure  pointed to by ctxt. As such, the machine state pointed to by  ctxt identifies the initial stack frame at which unwinding  starts. The machine state is expected to be one provided by a call to  unw_getcontext(); as such, the instruction pointer may point to  the instruction after the last instruction of a function, and  libunwind will back-up the instruction pointer before beginning  a walk up the call stack. The machine state must remain valid for the  duration for which the cursor c is in use.

The unw_init_local() routine can be used only for unwinding in  the address space of the current process (i.e., for local unwinding).  For all other cases, unw_init_remote() must be used instead.  However, unwind performance may be better when using  unw_init_local(). Also, unw_init_local() is  available even when UNW_LOCAL_ONLY has been defined before  including <libunwind.h>, whereas unw_init_remote() is not.

If the unw_context_t is known to be a signal frame (i.e.,  from the third argument in a sigaction handler on linux),  unw_init_local2() should be used for correct initialization  on some platforms, passing the UNW_INIT_SIGNAL_FRAME flag.

Return Value

On successful completion, unw_init_local() returns 0.  Otherwise the negative value of one of the error codes below is  returned.

Thread and Signal Safety

unw_init_local() is thread safe as well as safe to use from a  signal handler.

Errors

UNW_EINVAL

unw_init_local() was called in a  version of libunwind which supports remote unwinding only  (this normally happens when calling unw_init_local() for a  cross-platform version of libunwind).

UNW_EUNSPEC

An unspecified error occurred.

UNW_EBADREG

A register needed by unw_init_local() wasn't accessible.

See Also

libunwind(3libunwind), unw_init_remote(3libunwind)

Author

David Mosberger-Tang
Email: dmosberger@gmail.com
WWW: http://www.nongnu.org/libunwind/.

Referenced By

The man page unw_init_local2(3) is an alias of unw_init_local(3).

29 August 2023 Programming Library