From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13408 invoked by alias); 12 Jan 2009 18:47:08 -0000 Received: (qmail 13400 invoked by uid 22791); 12 Jan 2009 18:47:08 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 12 Jan 2009 18:46:36 +0000 Received: (qmail 3495 invoked from network); 12 Jan 2009 18:46:34 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 12 Jan 2009 18:46:34 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [0/2] Inspect extra signal information Date: Mon, 12 Jan 2009 18:47:00 -0000 User-Agent: KMail/1.9.10 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200901121846.51709.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-01/txt/msg00255.txt.bz2 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