PSYMBOL_ITER(3PROC) | Process Control Library Functions | PSYMBOL_ITER(3PROC) |
Psymbol_iter
,
Psymbol_iter_by_addr
,
Psymbol_iter_by_lmid
,
Psymbol_iter_by_name
,
Pxsymbol_iter
— iterate
symbols in a process
Process Control Library (libproc, -lproc)
#include
<libproc.h>
int
Psymbol_iter
(struct ps_prochandle
*P, const char *object_name, int
which, int mask, proc_sym_f
*func, void *data);
int
Psymbol_iter_by_addr
(struct
ps_prochandle *P, const char *object_name,
int which, int mask,
proc_sym_f *func, void
*data);
int
Psymbol_iter_by_lmid
(struct
ps_prochandle *P, Lmid_t lmid,
const char *object_name, int
which, int mask, proc_sym_f
*func, void *data);
int
Psymbol_iter_by_name
(struct
ps_prochandle *P, const char *object_name,
int which, int mask,
proc_sym_f *func, void
*data);
int
Pxsymbol_iter
(struct ps_prochandle
*P, Lmid_t lmid, const char
*object_name, int which, int
mask, proc_xsym_f *func, void
*data);
The
Psymbol_iter
(),
Psymbol_iter_by_addr
(),
Psymbol_iter_by_lmid
(),
Psymbol_iter_by_name
(), and
Pxsymbol_iter
() functions are used to iterate over
the symbols present in the process referred to by the handle
P. For each symbol found, the callback function
func will be called once and the argument
data will be passed to it along with an ELF symbol
entry in the form of the
GElf_Sym
along with the name of the symbol, if known. In the case of the
Pxsymbol_iter
() function an additional
prsyminfo_t argument will be provided to the callback. The
definitions of
proc_sym_f,
proc_xsym_f,
and prsyminfo_t are found in
libproc(3LIB).
The object_name argument names the object
that is a part of the controlled process which will be searched for symbols.
Only one object may be searched at any given time. Valid object names may be
obtained through the
Pobjname(3PROC) and
Pobject_iter(3PROC)
functions, among others. The system also has two special object names that
may be passed in to refer to the objects of the executable file and for
ld.so.1. The symbol PR_OBJ_EXEC
refers to the
executables object and the symbol PR_OBJ_LDSO
refers
to the object ld.so.1.
The which argument controls which of two
possible symbol tables will be searched. If the argument is
PR_SYMTAB
then the ELF symbol table will be
searched. Otherwise, if it is PR_DYNSYM
then the
symbol table associated with the dynamic section will be searched instead.
If any other value is specified for which, then an
error will be returned.
The mask argument controls which symbols will be included. The mask argument allows for control over both the symbol's binding and the symbol's type. These flags logically correspond to the various ELF symbol bindings and types. The following values may be passed as a bitwise-inclusive-OR into the flags argument:
BIND_LOCAL
BIND_GLOBAL
BIND_WEAK
BIND_ANY
BIND_LOCAL
,
BIND_GLOBAL
, and
BIND_WEAK
. Every symbol's binding will match this
value.TYPE_NOTYPE
TYPE_OBJECT
TYPE_FUNC
TYPE_SECTION
TYPE_FILE
TYPE_ANY
TYPE_NOTYPE
,
TYPE_OBJECT
, TYPE_FUNC
,
TYPE_SECTION
, and
TYPE_FILE
. Every symbol's type will match this
value.To obtain all of the symbols in an object, the caller would pass
the expression BIND_ANY
|
TYPE_ANY
in as the value of
mask.
The
Psymbol_iter_by_lmid
()
and
Pxsymbol_iter
()
functions allow for a link-map identifier to be specified in the
lmid argument. This will restrict the search for the
object specified in object_name to the specified
link-map. There are three special link-map identifiers that may be passed
in. The symbol PR_LMID_EVERY
indicates that every
link-map should be searched. The symbol LM_ID_BASE
indicates that the base link-map, the one that is used for the executable
should be searched. Finally, the symbol LM_ID_LDSO
refers to the link-map that is used by the run-time link editor, ld.so.1.
The functions which do not allow a link-map identifier to be specified
always search every link-map.
By default, symbols are iterated based
on the order of the symbol table being searched. However, it is also
possible to iterate based on the name of the symbol and based on the address
of the symbol. To iterate by name use the
Psymbol_iter_by_name
()
function. To iterate by address use the
Psymbol_iter_by_addr
()
function. The Psymbol_iter
(),
Psymbol_iter_by_lmid
(), and
Pxsymbol_iter
() functions all sort based on the
order of the symbol table.
The return value of the callback function
func determines whether or not iteration continues. If
func returns
0, then iteration will
continue. However, if func returns non-zero, then
iteration will halt and that value will be used as the return value of the
Psymbol_iter
(),
Psymbol_iter_by_addr
(),
Psymbol_iter_by_lmid
(),
Psymbol_iter_by_name
(), and
Pxsymbol_iter
() functions. Because these functions
return -1 on internal failure, it is recommended that the
callback function not return -1 to indicate an error so
that the caller may distinguish between the failure of the callback function
and the failure of these functions.
Upon successful completion, the
Psymbol_iter
(),
Psymbol_iter_by_addr
(),
Psymbol_iter_by_lmid
(),
Psymbol_iter_by_name
(), and
Pxsymbol_iter
() functions return
0. If there was
an internal error then -1 is returned. Otherwise, if the
callback function func returns non-zero, then its
return value will be returned instead.
See LOCKING in libproc(3LIB).
May 11, 2016 | OmniOS |