NAME
getksym — get information for a global kernel symbol
SYNOPSIS
#include <sys/types.h>
#include <sys/ksym.h>
#include <sys/libelf.h>
int getksym(char
*symname,
char
*modname,
uint64_t
*value,
Remarks
getksym
is currently implemented as a macro.
DESCRIPTION
There are two ways that
getksym
can be used to retrieve kernel symbol information.
As detailed below, if
symname
is provided,
getksym
attempts to retrieve the value of the symbol; if
value
is provided, the associated symbol name is retrieved.
getksym,
given a
symname,
looks for a global
(STB_GLOBAL
or
STB_WEAK)
symbol of that name in the symbol table of the static kernel
and all currently loaded kernel modules. If it finds a match,
getksym
returns the value associated with that symbol (typically its address)
in the space pointed to by
value,
and the type of that symbol in the space pointed to by
info.
The types returned are:
- STT_NOTYPE
unknown type
- STT_FUNC
text symbol (typically function)
- STT_PARISC_MILLI
millicode function
- STT_OBJECT
data symbol
The symbol name can be no more than
MAXSYMNMLEN
characters. If
modname
is set to the name (basename only) of a dynamically loaded module,
then the search for the symbol name will only be in that module.
If
modname
is
NULL,
then the search order for the symbol name will be the static kernel
followed by each of the currently loaded modules in the order in which
they were loaded. The module name can be no more that
MODMAXNAMELEN
characters.
If
getksym
is given a valid address in the statically configured kernel
or one of the currently loaded modules in the space pointed to by
value,
it will return, in the space pointed to by
symname,
the name of the symbol whose value is the closest one less than or equal to
the given value and, in space pointed to by
info,
the difference between the address given and the value of the symbol found.
The space pointed to by
symname
must be at least
MAXSYMNMLEN
characters long.
RETURN VALUE
getksym
returns
0
upon successful completion. If an error occurs, a value of
-1
is returned and
errno
is set to indicated the error.
ERRORS
getksym
fails if one or more of the following are true:
- [ENOMATCH]
The symbol name given is not found, or the value given is not a currently
valid address.
- [EINVAL]
modname
does not represent a currently loaded module.
- [ENAMETOOLONG]
modname
is greater than
MODMAXNAMELEN
characters long, or
symname
is greater that
MAXSYMNMLEN
characters long.