1972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\documentclass{article}
2972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\usepackage[fancyhdr,pdf]{latex2man}
3972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
4972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\input{common.tex}
5972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
6972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\begin{document}
7972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
8972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\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
9972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\end{Name}
10972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
11972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Synopsis}
12972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
13972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\File{\#include $<$libunwind.h$>$}\\
14972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
15972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\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});\\
16972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
17972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Description}
18972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
19972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeThe \Func{unw\_get\_proc\_name}() routine returns the name of the
20972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeprocedure that created the stack frame identified by argument
21972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\Var{cp}.  The \Var{bufp} argument is a pointer to a character buffer
22972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayethat is at least \Var{len} bytes long.  This buffer is used to return
23972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayethe name of the procedure.  The \Var{offp} argument is a pointer to a
24972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeword that is used to return the byte-offset of the instruction-pointer
25972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayesaved in the stack frame identified by \Var{cp}, relative to the start
26972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeof the procedure.  For example, if procedure \Func{foo}() starts at
27972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeaddress 0x40003000, then invoking \Func{unw\_get\_proc\_name}() on a
28972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayestack frame with an instruction-pointer value of 0x40003080 would
29972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayereturn a value of 0x80 in the word pointed to by \Var{offp} (assuming
30972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayethe procedure is at least 0x80 bytes long).
31972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
32972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeNote that on some platforms there is no reliable way to distinguish
33972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayebetween procedure names and ordinary labels.  Furthermore, if symbol
34972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeinformation has been stripped from a program, procedure names may be
35972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayecompletely unavailable or may be limited to those exported via a
36972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayedynamic symbol table.  In such cases, \Func{unw\_get\_proc\_name}()
37972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayemay return the name of a label or a preceeding (nearby) procedure.
38972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeHowever, the offset returned through \Var{offp} is always relative to
39972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayethe returned name, which ensures that the value (address) of the
40972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayereturned name plus the returned offset will always be equal to the
41972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeinstruction-pointer of the stack frame identified by \Var{cp}.
42972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
43972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Return Value}
44972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
45972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeOn successful completion, \Func{unw\_get\_proc\_name}() returns 0.
46972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeOtherwise the negative value of one of the error-codes below is
47972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayereturned.
48972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
49972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Thread and Signal Safety}
50972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
51b511e18f63772060c6f35a22f54ed8c4215b94f1mostang.com!davidm\Func{unw\_get\_proc\_name}() is thread-safe.  If cursor \Var{cp} is
52b511e18f63772060c6f35a22f54ed8c4215b94f1mostang.com!davidmin the local address-space, this routine is also safe to use from a
53b511e18f63772060c6f35a22f54ed8c4215b94f1mostang.com!davidmsignal handler.
54972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
55972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Errors}
56972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
57972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\begin{Description}
58972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\item[\Const{UNW\_EUNSPEC}] An unspecified error occurred.
59972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\item[\Const{UNW\_ENOINFO}] \Prog{Libunwind} was unable to determine
60972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye  the name of the procedure.
615e854a4103240925b5e1d14352521a9c07746ba9Tommi Rantala\item[\Const{UNW\_ENOMEM}] The procedure name is too long to fit
62972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye  in the buffer provided.  A truncated version of the name has been
63972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye  returned.
64972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\end{Description}
65972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeIn addition, \Func{unw\_get\_proc\_name}() may return any error
66972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayereturned by the \Func{access\_mem}() call-back (see
67972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\Func{unw\_create\_addr\_space}(3)).
68972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
69972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{See Also}
70972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
71972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\SeeAlso{libunwind(3)},
72972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\SeeAlso{unw\_get\_proc\_info(3)}
73972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
74972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\section{Author}
75972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
76972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\noindent
77972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahayeDavid Mosberger-Tang\\
7875f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangEmail: \Email{dmosberger@gmail.com}\\
7975f34ccb7dcdfd2b96e370824b3fd723b2f22b49David Mosberger-TangWWW: \URL{http://www.nongnu.org/libunwind/}.
80972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\LatexManEnd
81972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye
82972aec70ba48f64db9b635a47a497cd65489d343esiee.fr!m.delahaye\end{document}
83