From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20277 invoked by alias); 18 Mar 2005 20:28:39 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 20162 invoked from network); 18 Mar 2005 20:28:33 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 18 Mar 2005 20:28:33 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.11) with ESMTP id j2IKSXcM002534 for ; Fri, 18 Mar 2005 15:28:33 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id j2IKSXY02510 for ; Fri, 18 Mar 2005 15:28:33 -0500 Received: from localhost.localdomain (vpn50-40.rdu.redhat.com [172.16.50.40]) by pobox.corp.redhat.com (8.12.8/8.12.8) with ESMTP id j2IKSWBd010634 for ; Fri, 18 Mar 2005 15:28:33 -0500 Received: from ironwood.lan (ironwood.lan [192.168.64.8]) by localhost.localdomain (8.12.11/8.12.10) with ESMTP id j2IKSRVS003028 for ; Fri, 18 Mar 2005 13:28:27 -0700 Date: Fri, 18 Mar 2005 20:28:00 -0000 From: Kevin Buettner To: gdb-patches@sources.redhat.com Subject: [COMMIT] frv-linux-tdep.c: Adjust an RT signal related constant Message-ID: <20050318132826.03b327dd@ironwood.lan> Organization: Red Hat Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-SW-Source: 2005-03/txt/msg00243.txt.bz2 I've just committed that patch below. Thanks to Richard Sandiford for finding the problem and suggesting the fix. (This patch looks bigger than it really is; it only touches one line of executable code. The rest of the changes are updates to comments.) * frv-linux-tdep.c (frv_linux_sigcontext_reg_addr): Update comments. Adjust incorrectly computed constant for realtime signal frame. Index: frv-linux-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/frv-linux-tdep.c,v retrieving revision 1.5 diff -u -p -r1.5 frv-linux-tdep.c --- frv-linux-tdep.c 11 Feb 2005 18:13:49 -0000 1.5 +++ frv-linux-tdep.c 18 Mar 2005 20:20:38 -0000 @@ -67,14 +67,14 @@ frv_linux_pc_in_sigtramp (CORE_ADDR pc, return retval; } -/* Given NEXT_FRAME, "callee" frame of the sigtramp frame that we +/* Given NEXT_FRAME, the "callee" frame of the sigtramp frame that we wish to decode, and REGNO, one of the frv register numbers defined in frv-tdep.h, return the address of the saved register (corresponding to REGNO) in the sigtramp frame. Return -1 if the register is not found in the sigtramp frame. The magic numbers in the code below were computed by examining the following kernel structs: - From arch/frvnommu/signal.c: + From arch/frv/kernel/signal.c: struct sigframe { @@ -96,7 +96,7 @@ frv_linux_pc_in_sigtramp (CORE_ADDR pc, uint32_t retcode[2]; }; - From include/asm-frvnommu/ucontext.h: + From include/asm-frv/ucontext.h: struct ucontext { unsigned long uc_flags; @@ -106,14 +106,22 @@ frv_linux_pc_in_sigtramp (CORE_ADDR pc, sigset_t uc_sigmask; }; - From include/asm-frvnommu/sigcontext.h: + From include/asm-frv/signal.h: + + typedef struct sigaltstack { + void *ss_sp; + int ss_flags; + size_t ss_size; + } stack_t; + + From include/asm-frv/sigcontext.h: struct sigcontext { struct user_context sc_context; unsigned long sc_oldmask; } __attribute__((aligned(8))); - From include/asm-frvnommu/registers.h: + From include/asm-frv/registers.h: struct user_int_regs { unsigned long psr; @@ -184,15 +192,19 @@ frv_linux_sigcontext_reg_addr (struct fr else if (tramp_type == RT_SIGTRAMP) { /* For a realtime sigtramp frame, SP + 12 contains a pointer - to the a ucontext struct. The ucontext struct contains - a sigcontext struct starting 12 bytes in. */ + to the a ucontext struct. The ucontext struct contains a + sigcontext struct starting 24 bytes in. (The offset of + uc_mcontext within struct ucontext is derived as follows: + stack_t is a 12-byte struct and struct sigcontext is + 8-byte aligned. This gives an offset of 8 + 12 + 4 (for + padding) = 24.) */ if (target_read_memory (sp + 12, buf, sizeof buf) != 0) { warning (_("Can't read realtime sigtramp frame.")); return 0; } sc_addr = extract_unsigned_integer (buf, sizeof buf); - sc_addr += 12; + sc_addr += 24; } else internal_error (__FILE__, __LINE__, _("not a signal trampoline"));