This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]