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