This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[0/2] Inspect extra signal information
- From: Pedro Alves <pedro at codesourcery dot com>
- To: gdb-patches at sourceware dot org
- Date: Mon, 12 Jan 2009 18:46:51 +0000
- Subject: [0/2] Inspect extra signal information
Hi!
This mini series adds support for inspecting extra signal information.
What this means is, we get a new $_siginfo convenience variable that
is typed to look like the siginfo_t object on unix-ish platforms (but
can be any other type appropriate for the target platform).
E.g., on x86_64-linux,
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400770 in main () at ../../../src/gdb/testsuite/gdb.base/siginfo-obj.c:68
68 *(int *)p = 0;
(gdb) p $_siginfo
$1 = {si_signo = 11, si_errno = 0, si_code = 2, _sifields = {_pad = {-134254592, 32767, 0, 0, 0, 0, 1, 5, 12462832,
0, 4196201, 0, 0, 0, 4196208, 0, 12337488, 0, 12337488, 0, 4196208, 0, 12518720, 0, 12518864, 0, 12518848, 0},
_kill = {si_pid = -134254592, si_uid = 32767}, _timer = {si_tid = -134254592, si_overrun = 32767, si_sigval = {
sival_int = 0, sival_ptr = 0x0}}, _rt = {si_pid = -134254592, si_uid = 32767, si_sigval = {sival_int = 0,
sival_ptr = 0x0}}, _sigchld = {si_pid = -134254592, si_uid = 32767, si_status = 0, si_utime = 0,
si_stime = 4294967296}, _sigfault = {si_addr = 0x7ffff7ff7000}, _sigpoll = {si_band = 140737354100736,
si_fd = 0}}}
(gdb) ptype $_siginfo
type = struct {
int si_signo;
int si_errno;
int si_code;
union {
int _pad[28];
struct {...} _kill;
struct {...} _timer;
struct {...} _rt;
struct {...} _sigchld;
struct {...} _sigfault;
struct {...} _sigpoll;
} _sifields;
}
(gdb) p $_siginfo._sifields._sigfault.si_addr
$2 = (void *) 0x7ffff7ff7000
part 1:
- Adds some infrastracture to be able to register reader and writer
functions that are responsible for reading and writing
a ``struct value'''s value. We called those lval_computed values. We've
been using these kinds of values for other things in our tree for a
couple of years already --- I've piggy-backed on that, so I got to
push it. :-)
This first patch applies on top of this other one:
http://sourceware.org/ml/gdb-patches/2009-01/msg00252.html
part 2:
- Adds a new target object ``TARGET_OBJECT_SIGNAL_INFO'', used to transfer the
siginfo_t data from the target to GDB core.
- Adds a way for a convenience variable's type and value be lazy. This is because
the actual type of the $_siginfo variable may change between archs (across runs, or
across threads).
- Adds a new gdbarch method (get_siginfo_type) whose job is to return a type
suitable to print/inspect a TARGET_OBJECT_SIGNAL_INFO of a given arch.
- Adds the $_siginfo convenience variable, whose type is lval_computed. The read and
writer functions of this lval_computed variable take care of transfering
a TARGET_OBJECT_SIGINFO to/from the target.
- Adds a generic linux implementation of get_siginfo_type, suitable for linux archs
that use the default siginfo_t structure type, and registers it in x86, x86_64
and arm. Other archs that diverge from the default, will need to implement
their own version, which will be very similar to linux_get_siginfo_type.
- Adds linux native target and remote targets implementations of
transfering TARGET_OBJECT_SIGNAL_INFO.
- Adds gdbserver support for same.
- Docs, and,
- New test.
--
Pedro Alves