mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-25 16:47:38 +01:00
Patch to work around lexgrog bug
(Logical change 1.73)
This commit is contained in:
parent
f20b6f8a4a
commit
972aec70ba
15 changed files with 624 additions and 18 deletions
|
@ -5,8 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{libunwind-ia64}{David Mosberger-Tang}{Programming Library}{IA-64-specific support in libunwind}
|
\begin{Name}{3}{libunwind-ia64}{David Mosberger-Tang}{Programming Library}{IA-64-specific support in libunwind}libunwind-ia64 -- IA-64-specific support in libunwind
|
||||||
libunwind-ia64 -- IA-64-specific support in libunwind
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{libunwind-ptrace}{David Mosberger-Tang}{Programming Library}{ptrace() support in libunwind}
|
\begin{Name}{3}{libunwind-ptrace}{David Mosberger-Tang}{Programming Library}{ptrace() support in libunwind}libunwind-ptrace -- ptrace() support in libunwind
|
||||||
libunwind-ptrace -- ptrace() support in libunwind
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -5,8 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{libunwind-setjmp}{David Mosberger-Tang}{Programming Library}{libunwind-based non-local gotos}
|
\begin{Name}{3}{libunwind-setjmp}{David Mosberger-Tang}{Programming Library}{libunwind-based non-local gotos}libunwind-setjmp -- libunwind-based non-local gotos
|
||||||
libunwind-setjmp -- libunwind-based non-local gotos
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -5,9 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{libunwind}{David Mosberger-Tang}{Programming Library}{Introduction to libunwind}
|
\begin{Name}{3}{libunwind}{David Mosberger-Tang}{Programming Library}{Introduction to libunwind}libunwind -- a (mostly) platform-independent unwind API
|
||||||
|
|
||||||
libunwind -- a (mostly) platform-independent unwind API
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -5,9 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{unw\_create\_addr\_space}{David Mosberger-Tang}{Programming Library}{unw\_create\_addr\_space}
|
\begin{Name}{3}{unw\_create\_addr\_space}{David Mosberger-Tang}{Programming Library}{unw\_create\_addr\_space}unw\_create\_addr\_space -- create address space for remote unwinding
|
||||||
|
|
||||||
unw\_create\_addr\_space -- create address space for remote unwinding
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -5,9 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{unw\_destroy\_addr\_space}{David Mosberger-Tang}{Programming Library}{unw\_destroy\_addr\_space}
|
\begin{Name}{3}{unw\_destroy\_addr\_space}{David Mosberger-Tang}{Programming Library}{unw\_destroy\_addr\_space}unw\_destroy\_addr\_space -- destroy unwind address space
|
||||||
|
|
||||||
unw\_destroy\_addr\_space -- destroy unwind address space
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_flush\_cache}{David Mosberger-Tang}{Programming Library}{unw\_flush\_cache}unw\_flush\_cache -- flush cached info
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{void} \Func{unw\_flush\_cache}(\Type{unw\_addr\_space\_t} \Var{as}, \Type{unw\_word\_t} \Var{lo}, \Type{unw\_word\_t} \Var{hi});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_flush\_cache}() routine flushes all cached info as it
|
||||||
|
relates to address-range \Var{lo} to \Var{hi} (non-inclusive) in the
|
||||||
|
target address-space \Var{as}. In addition, all info cached for
|
||||||
|
address-space \Var{as} that is not tied to a particular code-range is
|
||||||
|
also flushed. For example, the address of the dynamic registration
|
||||||
|
list is not tied to a code-range and its cached value (if any) is
|
||||||
|
flushed by a call to this routine. The address range specified by
|
||||||
|
\Var{lo} and \Var{hi} should be understood as a hint:
|
||||||
|
\Func{unw\_flush\_cache}() may flush more information than requested,
|
||||||
|
but \emph{never} less. In other words, \Func{unw\_flush\_cache}() may
|
||||||
|
overflush, but not underflush.
|
||||||
|
|
||||||
|
As a special case, if arguments \Var{lo} and \Var{hi} are both 0, all
|
||||||
|
information cached on behalf of address space \Var{as} is flushed.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
The \Func{unw\_flush\_cache}() routine cannot fail and does not
|
||||||
|
return a value.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
The \Func{unw\_flush\_cache}() routine is thread-safe as well as safe to
|
||||||
|
use from a signal handler.
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)},
|
||||||
|
\SeeAlso{unw\_set\_caching\_policy(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,57 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_get\_accessors}{David Mosberger-Tang}{Programming Library}{unw\_get\_accessors}unw\_get\_accessors -- get pointer to accessor call-backs
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{unw\_accessors\_t~*}\Func{unw\_get\_accessors}(\Type{unw\_addr\_space\_t~}\Var{as});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_get\_accessors}() routine returns a pointer to a
|
||||||
|
\Type{unw\_accessors\_t} structure, which contains the call-back
|
||||||
|
routines that were specified when address space \Var{as} was created
|
||||||
|
(see \Func{unw\_create\_addr\_space}(3)). The returned pointer is
|
||||||
|
guaranteed to remain valid until address space \Var{as} is destroyed
|
||||||
|
by a call to \Func{unw\_destroy\_addr\_space}(3).
|
||||||
|
|
||||||
|
Note that \Func{unw\_get\_accessors}() can be used to retrieve the
|
||||||
|
call-back routines for the local address space
|
||||||
|
\Var{unw\_local\_addr\_space}.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
The \Func{unw\_get\_accessors}() routine cannot fail and always
|
||||||
|
returns a valid (non-\Const{NULL}) pointer to an
|
||||||
|
\Type{unw\_accessors\_t} structure.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
The \Func{unw\_get\_accessors}() routine is thread-safe as well as
|
||||||
|
safe to use from a signal handler.
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)},
|
||||||
|
\SeeAlso{unw\_create\_addr\_space(3)},
|
||||||
|
\SeeAlso{unw\_destroy\_addr\_space(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,124 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_get\_proc\_info}{David Mosberger-Tang}{Programming Library}{unw\_get\_proc\_info}unw\_get\_proc\_info -- get info on current procedure
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{int} \Func{unw\_get\_proc\_info}(\Type{unw\_cursor\_t~*}\Var{cp}, \Type{unw\_proc\_info\_t~*}\Var{pip});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_get\_proc\_info}() routine returns auxiliary
|
||||||
|
information about the procedure that created the stack frame
|
||||||
|
identified by argument \Var{cp}. The \Var{pip} argument is a pointer
|
||||||
|
to a structure of type \Type{unw\_proc\_info\_t} which is used to
|
||||||
|
return the information. The \Type{unw\_proc\_info\_t} has the
|
||||||
|
following members:
|
||||||
|
\begin{description}
|
||||||
|
\item[\Type{unw\_word\_t} \Var{start\_ip}] The address of the first
|
||||||
|
instruction of the procedure. If this address cannot be determined
|
||||||
|
(e.g., due to lack of unwind information), the \Var{start\_ip}
|
||||||
|
member is cleared to 0. \\
|
||||||
|
\item[\Type{unw\_word\_t} \Var{end\_ip}] The address of the first
|
||||||
|
instruction \emph{beyond} the end of the procedure. If this address
|
||||||
|
cannot be determined (e.g., due to lack of unwind information),
|
||||||
|
the \Var{end\_ip} member is cleared to 0. \\
|
||||||
|
\item[\Type{unw\_word\_t} \Var{lsda}] The address of the
|
||||||
|
language-specific data-area (LSDA). This area normally contains
|
||||||
|
language-specific information needed during exception handling. If
|
||||||
|
the procedure has no such area, this member is cleared to 0. \\
|
||||||
|
\item[\Type{unw\_word\_t} \Var{handler}] The address of the exception
|
||||||
|
handler routine. This is sometimes called the \emph{personality}
|
||||||
|
routine. If the procedure does not define
|
||||||
|
a personality routine, the \Var{handler} member is cleared to 0. \\
|
||||||
|
\item[\Type{unw\_word\_t} \Var{gp}] The global-pointer of the
|
||||||
|
procedure. On platforms that do not use a global pointer, this
|
||||||
|
member may contain an undefined value. On all other platforms, it
|
||||||
|
must be set either to the correct global-pointer value of the
|
||||||
|
procedure or to 0 if the proper global-pointer cannot be
|
||||||
|
obtained for some reason. \\
|
||||||
|
\item[\Type{unw\_word\_t} \Var{flags}] A set of flags. There are
|
||||||
|
currently no target-independent flags. For the IA-64 target, the
|
||||||
|
flag \Const{UNW_PI_FLAG_IA64_RBS_SWITCH} is set if the
|
||||||
|
procedure may switch the register-backing store.\\
|
||||||
|
\item[\Type{int} \Var{format}] The format of the unwind-info for this
|
||||||
|
procedure. If the unwind-info consists of dynamic procedure info,
|
||||||
|
\Var{format} is equal to \Const{UNW\_INFO\_FORMAT\_DYNAMIC}. If the
|
||||||
|
unwind-info consists of a (target-specific) unwind table, it is
|
||||||
|
equal to to \Const{UNW\_INFO\_FORMAT\_TABLE}. All other values are
|
||||||
|
reserved for future use by \Prog{libunwind}. This member exists
|
||||||
|
for use by the \Func{find\_proc\_info}() call-back (see
|
||||||
|
\Func{unw\_create\_addr\_space}(3)). The
|
||||||
|
\Func{unw\_get\_proc\_info}() routine
|
||||||
|
may return an undefined value in this member. \\
|
||||||
|
\item[\Type{int} \Var{unwind\_info\_size}] The size of the unwind-info
|
||||||
|
in bytes. This member exists for use by the
|
||||||
|
\Func{find\_proc\_info}() call-back (see
|
||||||
|
\Func{unw\_create\_addr\_space}(3)). The
|
||||||
|
\Func{unw\_get\_proc\_info}() routine
|
||||||
|
may return an undefined value in this member.\\
|
||||||
|
\item[\Type{void~*}\Var{unwind\_info}] The pointer to the unwind-info.
|
||||||
|
If no unwind info is available, this member must be set to
|
||||||
|
\Const{NULL}. This member exists for use by the
|
||||||
|
\Func{find\_proc\_info}() call-back (see
|
||||||
|
\Func{unw\_create\_addr\_space}(3)). The
|
||||||
|
\Func{unw\_get\_proc\_info}() routine
|
||||||
|
may return an undefined value in this member.\\
|
||||||
|
\end{description}
|
||||||
|
Note that for the purposes of \Prog{libunwind}, the code of a
|
||||||
|
procedure is assumed to occupy a single, contiguous range of
|
||||||
|
addresses. For this reason, it is alwas possible to describe the
|
||||||
|
extent of a procedure with the \Var{start\_ip} and \Var{end\_ip}
|
||||||
|
members. If a single function/routine is split into multiple,
|
||||||
|
discontiguous pieces, \Prog{libunwind} will treat each piece as a
|
||||||
|
separate procedure.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
On successful completion, \Func{unw\_get\_proc\_info}() returns 0.
|
||||||
|
Otherwise the negative value of one of the error-codes below is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
\Func{unw\_get\_proc\_info}() is thread-safe as well as safe to use
|
||||||
|
from a signal handler.
|
||||||
|
|
||||||
|
\section{Errors}
|
||||||
|
|
||||||
|
\begin{Description}
|
||||||
|
\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
|
||||||
|
\item[\Const{UNW\_ENOINFO}] \Prog{Libunwind} was unable to locate
|
||||||
|
unwind-info for the procedure.
|
||||||
|
\item[\Const{UNW\_EBADVERSION}] The unwind-info for the procedure has
|
||||||
|
version or format that is not understood by \Prog{libunwind}.
|
||||||
|
\end{Description}
|
||||||
|
In addition, \Func{unw\_get\_proc\_info}() may return any error
|
||||||
|
returned by the \Func{access\_mem}() call-back (see
|
||||||
|
\Func{unw\_create\_addr\_space}(3)).
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)},
|
||||||
|
\SeeAlso{unw\_create\_addr\_space(3)},
|
||||||
|
\SeeAlso{unw\_get\_proc\_name(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,83 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_get\_proc\_name}{David Mosberger-Tang}{Programming Library}{unw\_get\_proc\_name}unw\_get\_proc\_name -- get name of current procedure
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{int} \Func{unw\_get\_proc\_name}(\Type{unw\_cursor\_t~*}\Var{cp}, \Type{char~*}\Var{bufp}, \Type{size\_t} \Var{len}, \Type{unw\_word\_t~*}\Var{offp});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_get\_proc\_name}() routine returns the name of the
|
||||||
|
procedure that created the stack frame identified by argument
|
||||||
|
\Var{cp}. The \Var{bufp} argument is a pointer to a character buffer
|
||||||
|
that is at least \Var{len} bytes long. This buffer is used to return
|
||||||
|
the name of the procedure. The \Var{offp} argument is a pointer to a
|
||||||
|
word that is used to return the byte-offset of the instruction-pointer
|
||||||
|
saved in the stack frame identified by \Var{cp}, relative to the start
|
||||||
|
of the procedure. For example, if procedure \Func{foo}() starts at
|
||||||
|
address 0x40003000, then invoking \Func{unw\_get\_proc\_name}() on a
|
||||||
|
stack frame with an instruction-pointer value of 0x40003080 would
|
||||||
|
return a value of 0x80 in the word pointed to by \Var{offp} (assuming
|
||||||
|
the procedure is at least 0x80 bytes long).
|
||||||
|
|
||||||
|
Note that on some platforms there is no reliable way to distinguish
|
||||||
|
between procedure names and ordinary labels. Furthermore, if symbol
|
||||||
|
information has been stripped from a program, procedure names may be
|
||||||
|
completely unavailable or may be limited to those exported via a
|
||||||
|
dynamic symbol table. In such cases, \Func{unw\_get\_proc\_name}()
|
||||||
|
may return the name of a label or a preceeding (nearby) procedure.
|
||||||
|
However, the offset returned through \Var{offp} is always relative to
|
||||||
|
the returned name, which ensures that the value (address) of the
|
||||||
|
returned name plus the returned offset will always be equal to the
|
||||||
|
instruction-pointer of the stack frame identified by \Var{cp}.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
On successful completion, \Func{unw\_get\_proc\_name}() returns 0.
|
||||||
|
Otherwise the negative value of one of the error-codes below is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
\Func{unw\_get\_proc\_name}() is thread-safe but \emph{not} safe to
|
||||||
|
use from a signal handler.
|
||||||
|
|
||||||
|
\section{Errors}
|
||||||
|
|
||||||
|
\begin{Description}
|
||||||
|
\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
|
||||||
|
\item[\Const{UNW\_ENOINFO}] \Prog{Libunwind} was unable to determine
|
||||||
|
the name of the procedure.
|
||||||
|
\item[\Const{UNW\_ENOMME}] The procedure name is too long to fit
|
||||||
|
in the buffer provided. A truncated version of the name has been
|
||||||
|
returned.
|
||||||
|
\end{Description}
|
||||||
|
In addition, \Func{unw\_get\_proc\_name}() may return any error
|
||||||
|
returned by the \Func{access\_mem}() call-back (see
|
||||||
|
\Func{unw\_create\_addr\_space}(3)).
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)},
|
||||||
|
\SeeAlso{unw\_get\_proc\_info(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,83 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_init\_local}{David Mosberger-Tang}{Programming Library}{unw\_init\_local}unw\_init\_local -- initialize cursor for local unwinding
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{int} \Func{unw\_init\_local}(\Type{unw\_cursor\_t~*}\Var{c}, \Type{unw\_context\_t~*}\Var{ctxt});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_init\_local}() routine initializes the unwind cursor
|
||||||
|
pointed to by \Var{c} with the machine-state in the context structure
|
||||||
|
pointed to by \Var{ctxt}. As such, the machine-state pointed to by
|
||||||
|
\Var{ctxt} identifies the initial stack frame at which unwinding
|
||||||
|
starts. The machine-state must remain valid for the duration for
|
||||||
|
which the cursor \Var{c} is in use.
|
||||||
|
|
||||||
|
The \Func{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, \Func{unw\_init\_remote}() must be used instead.
|
||||||
|
From a behavioral point of view, the call:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
ret = unw_init_local(&cursor, &ucontext);
|
||||||
|
\end{verbatim}
|
||||||
|
is equivalent to:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
ret = unw_init_remote(&cursor, unw_local_addr_space,
|
||||||
|
&ucontext);
|
||||||
|
\end{verbatim}
|
||||||
|
However, unwind performance may be better when using
|
||||||
|
\Func{unw\_init\_local}(). Also, \Func{unw\_init\_local}() is
|
||||||
|
available even when \Const{UNW\_LOCAL\_ONLY} has been defined before
|
||||||
|
including \File{$<$libunwind.h$>$}, whereas \Func{unw\_init\_remote}()
|
||||||
|
is not.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
On successful completion, \Func{unw\_init\_local}() returns 0.
|
||||||
|
Otherwise the negative value of one of the error-codes below is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
\Func{unw\_init\_local}() is thread-safe as well as safe to use from a
|
||||||
|
signal handler.
|
||||||
|
|
||||||
|
\section{Errors}
|
||||||
|
|
||||||
|
\begin{Description}
|
||||||
|
\item[\Const{UNW\_EINVAL}] \Func{unw\_init\_local}() was called in a
|
||||||
|
version of \Prog{libunwind} which supports remote unwinding only
|
||||||
|
(this normally happens when calling \Func{unw\_init\_local}() for a
|
||||||
|
cross-platform version of \Prog{libunwind}).
|
||||||
|
\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
|
||||||
|
\item[\Const{UNW\_EBADREG}] A register needed by \Func{unw\_init\_local}()
|
||||||
|
wasn't accessible.
|
||||||
|
\end{Description}
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)}, \SeeAlso{unw\_init\_remote(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,80 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_init\_remote}{David Mosberger-Tang}{Programming Library}{unw\_init\_remote}unw\_init\_remote -- initialize cursor for remote unwinding
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{int} \Func{unw\_init\_remote}(\Type{unw\_cursor\_t~*}\Var{c}, \Type{unw\_addr\_space\_t~}\Var{as}, \Type{void~*}\Var{arg});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_init\_remote}() routine initializes the unwind cursor
|
||||||
|
pointed to by \Var{c} for unwinding in the address space identified by
|
||||||
|
\Var{as}. The \Var{as} argument can either be set to
|
||||||
|
\Var{unw\_local\_addr\_space} (local address space) or to an arbitrary
|
||||||
|
address space created with \Func{unw\_create\_addr\_space}().
|
||||||
|
|
||||||
|
The \Var{arg} void-pointer tells the address space exactly what entity
|
||||||
|
should be unwound. For example, if \Var{unw\_local\_addr\_space} is
|
||||||
|
passed in \Var{as}, then \Var{arg} needs to be a pointer to a context
|
||||||
|
structure containing the machine-state of the initial stack frame.
|
||||||
|
However, other address-spaces 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 \Var{arg} is entirely dependent on the address-space in use;
|
||||||
|
\Prog{libunwind} never interprets the argument in any way on its own.
|
||||||
|
|
||||||
|
Note that \Func{unw\_init\_remote}() can be used to initiate unwinding
|
||||||
|
in \emph{any} process, including the local process in which the
|
||||||
|
unwinder itself is running. However, for local unwinding, it is
|
||||||
|
generally preferable to use \Func{unw\_init\_local}() instead, because
|
||||||
|
it is easier to use and because it may perform better.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
On successful completion, \Func{unw\_init\_remote}() returns 0.
|
||||||
|
Otherwise the negative value of one of the error-codes below is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
\Func{unw\_init\_remote}() is thread-safe as well as safe to use from a
|
||||||
|
signal handler.
|
||||||
|
|
||||||
|
\section{Errors}
|
||||||
|
|
||||||
|
\begin{Description}
|
||||||
|
\item[\Const{UNW\_EINVAL}] \Func{unw\_init\_remote}() was called in a
|
||||||
|
version of \Prog{libunwind} which supports local unwinding only
|
||||||
|
(this normally happens when defining \Const{UNW\_LOCAL\_ONLY} before
|
||||||
|
including \File{$<$libunwind.h$>$} and then calling
|
||||||
|
\Func{unw\_init\_remote}()).
|
||||||
|
\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
|
||||||
|
\item[\Const{UNW\_EBADREG}] A register needed by \Func{unw\_init\_remote}()
|
||||||
|
wasn't accessible.
|
||||||
|
\end{Description}
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)}, \SeeAlso{unw\_create\_addr\_space(3)},
|
||||||
|
\SeeAlso{unw\_init\_local(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -0,0 +1,49 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_regname}{David Mosberger-Tang}{Programming Library}{unw\_regname}unw\_regname -- get register name
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{const char~*}\Func{unw\_regname}(\Type{unw\_regnum\_t} \Var{regnum});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_regname}() routine returns a printable name for
|
||||||
|
register \Var{regnum}. If \Var{regnum} is an invalid or otherwise
|
||||||
|
unrecognized register number, a string consisting of three question
|
||||||
|
marks is returned. The returned string is statically allocated and
|
||||||
|
therefore guaranteed to remain valid until the application terminates.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
The \Func{unw\_regname}() routine cannot fail and always returns a
|
||||||
|
valid (non-\Const{NULL}) string.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
The \Func{unw\_regname}() routine is thread-safe as well as safe to
|
||||||
|
use from a signal handler.
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
|
@ -5,9 +5,7 @@
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\begin{Name}{3}{unw\_resume}{David Mosberger-Tang}{Programming Library}{unw\_resume}
|
\begin{Name}{3}{unw\_resume}{David Mosberger-Tang}{Programming Library}{unw\_resume}unw\_resume -- resume execution in a particular stack frame
|
||||||
|
|
||||||
unw\_resume -- resume execution in a particular stack frame
|
|
||||||
\end{Name}
|
\end{Name}
|
||||||
|
|
||||||
\section{Synopsis}
|
\section{Synopsis}
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
\documentclass{article}
|
||||||
|
\usepackage[fancyhdr,pdf]{latex2man}
|
||||||
|
|
||||||
|
\input{common.tex}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
\begin{Name}{3}{unw\_set\_caching\_policy}{David Mosberger-Tang}{Programming Library}{unw\_set\_caching\_policy}unw\_set\_caching\_policy -- set unwind caching policy
|
||||||
|
\end{Name}
|
||||||
|
|
||||||
|
\section{Synopsis}
|
||||||
|
|
||||||
|
\File{\#include $<$libunwind.h$>$}\\
|
||||||
|
|
||||||
|
\Type{int} \Func{unw\_set\_caching\_policy}(\Type{unw\_addr\_space\_t} \Var{as}, \Type{unw\_caching_policy\_t} \Var{policy});\\
|
||||||
|
|
||||||
|
\section{Description}
|
||||||
|
|
||||||
|
The \Func{unw\_set\_caching\_policy}() routine sets the caching policy
|
||||||
|
of address space \Var{as} to the policy specified by argument
|
||||||
|
\Var{policy}. The \Var{policy} argument can take one of three
|
||||||
|
possible values:
|
||||||
|
\begin{description}
|
||||||
|
\item[\Const{UNW\_CACHE\_NONE}] Turns off caching completely. This
|
||||||
|
also implicitly flushes the contents of all caches as if
|
||||||
|
\Func{unw\_flush\_cache}() had been called.
|
||||||
|
\item[\Const{UNW\_CACHE\_GLOBAL}] Enables caching using a global cache
|
||||||
|
that is shared by all threads. If global caching is unavailable or
|
||||||
|
unsupported, \Prog{libunwind} may fall back on using a per-thread
|
||||||
|
cache, as if \Const{UNW\_CACHE\_PER\_THREAD} had been specified.
|
||||||
|
\item[\Const{UNW\_CACHE\_PER\_THREAD}] Enables caching using
|
||||||
|
thread-local caches. If a thread-local caching are unavailable or
|
||||||
|
unsupported, \Prog{libunwind} may fall back on using a global cache,
|
||||||
|
as if \Const{UNW\_CACHE\_GLOBAL} had been specified.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
If caching is enabled, an application must be prepared to make
|
||||||
|
appropriate calls to \Func{unw\_flush\_cache}() whenever the target
|
||||||
|
changes in a way that could affect the validity of cached information.
|
||||||
|
For example, after unloading (removing) a shared library,
|
||||||
|
\Func{unw\_flush\_cache}() would have to be called (at least) for the
|
||||||
|
address-range that was covered by the shared library.
|
||||||
|
|
||||||
|
For address spaces created via \Func{unw\_create\_addr\_space}(3),
|
||||||
|
caching is turned off by default. For the local address space
|
||||||
|
\Func{unw\_local\_addr\_space}, caching is turned on by default.
|
||||||
|
|
||||||
|
\section{Return Value}
|
||||||
|
|
||||||
|
On successful completion, \Func{unw\_set\_caching\_policy}() returns 0.
|
||||||
|
Otherwise the negative value of one of the error-codes below is
|
||||||
|
returned.
|
||||||
|
|
||||||
|
\section{Thread and Signal Safety}
|
||||||
|
|
||||||
|
\Func{unw\_set\_caching\_policy}() is thread-safe but \emph{not} safe
|
||||||
|
to use from a signal handler.
|
||||||
|
|
||||||
|
\section{Errors}
|
||||||
|
|
||||||
|
\begin{Description}
|
||||||
|
\item[\Const{UNW\_ENOMEM}] The desired caching policy could not be
|
||||||
|
established because the application is out of memory.
|
||||||
|
\end{Description}
|
||||||
|
|
||||||
|
\section{See Also}
|
||||||
|
|
||||||
|
\SeeAlso{libunwind(3)},
|
||||||
|
\SeeAlso{unw\_create\_addr\_space(3)},
|
||||||
|
\SeeAlso{unw\_flush\_cache(3)}
|
||||||
|
|
||||||
|
\section{Author}
|
||||||
|
|
||||||
|
\noindent
|
||||||
|
David Mosberger-Tang\\
|
||||||
|
Hewlett-Packard Labs\\
|
||||||
|
Palo-Alto, CA 94304\\
|
||||||
|
Email: \Email{davidm@hpl.hp.com}\\
|
||||||
|
WWW: \URL{http://www.hpl.hp.com/research/linux/libunwind/}.
|
||||||
|
\LatexManEnd
|
||||||
|
|
||||||
|
\end{document}
|
Loading…
Reference in a new issue