librtld_db
—
library for run-time linker debugging
Debugging interface to the runtime linker Library
(librtld_db, -lrtld_db)
#include
<rtld_db.h>
void
rd_delete
(rd_agent_t *rdap);
char *
rd_errstr
(rd_err_e rderr);
rd_err_e
rd_event_addr
(rd_agent_t *rdap,
rd_event_e event, rd_notify_t *notify);
rd_err_e
rd_event_enable
(rd_agent_t *rdap, int
onoff);
rd_err_e
rd_event_getmsg
(rd_agent_t *rdap,
rd_event_msg_t *msg);
rd_err_e
rd_init
(int version);
typedef int
rl_iter_f
(const rd_loadobj_t *, void
*);
rd_err_e
rd_loadobj_iter
(rd_agent_t *rdap,
rl_iter_f *cb, void *clnt_data);
void
rd_log
(const int onoff);
rd_agent_t *
rd_new
(struct proc_handle
*php);
rd_err_e
rd_objpad_enable
(rd_agent_t *rdap,
size_t padsize);
rd_err_e
rd_plt_resolution
(rd_agent_t *rdap,
uintptr_t pc, struct proc *proc, uintptr_t plt_base,
rd_plt_info_t *rpi);
rd_err_e
rd_reset
(rd_agent_t *rdap);
The librtld_db
library provides a
debugging interface to the run-time linker (rtld). This library must be used
along with
libproc(3).
Most library functions take a rd_agent_t
argument. This argument is an opaque structure containing information
associated with the current status of the agent.
Before you start using
librtld_db
you should call
rd_init
()
with the RD_VERSION argument. This initializes the
library to the correct version your program was compiled with and provides
proper ABI stability.
What follows is a description of what each function.
rd_new
()
creates a new librtld_db
agent. The
php argument should be the
proc_handle you received from
libproc(3).
rd_reset
()
resets your previously created agent.
rd_delete
()
deallocates the resources associated with the agent.
rd_errstr
()
returns an error string describing the error present in
rderr.
rd_event_enable
()
enables reporting of events. This function always returns RD_OK.
rd_event_addr
()
returns the event address corresponding to the event
parameter. At the moment we only report events of type RD_NOTIFY_BPT.
rd_event_getmsg
()
returns the message associated with the latest event. At the moment only
RD_POSTINIT events are supported.
rd_loadobj_iter
()
allows you to iterate over the program's loaded objects.
cb is a callback of type
rl_iter_f
().
Most functions return an rd_err_e type
error. The error codes are described in the header file for this library.
You can get the error string using rd_errstr
().
The librtld_db
library first appeared in
FreeBSD 9.0 and was modeled after the same library
present in the Solaris operating system.
The librtld_db
library and this manual
page were written by Rui Paulo
<rpaulo@FreeBSD.org>
under sponsorship from the FreeBSD Foundation.
The functions rd_event_enable
(),
rd_log
(), rd_objpad_enable
()
and rd_plt_resolution
() are not yet implemented.