From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16282 invoked by alias); 3 Mar 2008 19:37:02 -0000 Received: (qmail 16234 invoked by uid 22791); 3 Mar 2008 19:37:01 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate7.de.ibm.com (HELO mtagate7.de.ibm.com) (195.212.29.156) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 03 Mar 2008 19:36:35 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate7.de.ibm.com (8.13.8/8.13.8) with ESMTP id m23JaVgv103648 for ; Mon, 3 Mar 2008 19:36:31 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m23JaUGj1499174 for ; Mon, 3 Mar 2008 20:36:30 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m23JaLZw012170 for ; Mon, 3 Mar 2008 19:36:24 GMT Received: from bbkeks.de.ibm.com (dyn-9-152-248-39.boeblingen.de.ibm.com [9.152.248.39]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m23JaI7f012114 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 3 Mar 2008 19:36:20 GMT Message-ID: <47CC5332.3020700@de.ibm.com> Date: Mon, 03 Mar 2008 19:37:00 -0000 From: Markus Deuling User-Agent: Thunderbird 2.0.0.12 (X11/20080213) MIME-Version: 1.0 To: GDB Patches CC: Ulrich Weigand Subject: [patch] Add proper error message instead of gdb_assert Content-Type: multipart/mixed; boundary="------------080202060904020802050209" 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: 2008-03/txt/msg00013.txt.bz2 This is a multi-part message in MIME format. --------------080202060904020802050209 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1163 Hi, when trying to put > 1 values into an array (fortran subrange) which comes from a register, register_size is called with regnum == -1. The following example comes from SPU architecture. Currently GDB exits with a gdb_assert going wrong: (gdb) set $r0%v2_int64(0:1)=(1,2) ../../../gdb-6.7/gdb/regcache.c:177: internal-error: register_size: Assertion `regnum >= 0 && regnum < (gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch))' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) y This patch replaces that gdb_assert by a proper error message before exiting: (gdb) set $r2%v2_int64(0:1)=(1,1) ../../../gdb-6.7/gdb/regcache.c:185: internal-error: invalid register -1 A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) If this patch is ok it would be great to have it in gdb 6.8. Ok? ChangeLog: * regcache.c (register_size): Replace gdb_assert by a proper error message. Regards, Markus -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com --------------080202060904020802050209 Content-Type: text/plain; name="fix-assert" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="fix-assert" Content-length: 858 diff -urpN gdb-6.7-orig/gdb/regcache.c gdb-6.7/gdb/regcache.c --- gdb-6.7-orig/gdb/regcache.c 2008-03-03 19:30:54.000000000 +0100 +++ gdb-6.7/gdb/regcache.c 2008-03-03 20:30:10.000000000 +0100 @@ -172,11 +172,18 @@ register_size (struct gdbarch *gdbarch, { struct regcache_descr *descr = regcache_descr (gdbarch); int size; - gdb_assert (regnum >= 0 - && regnum < (gdbarch_num_regs (gdbarch) - + gdbarch_num_pseudo_regs (gdbarch))); - size = descr->sizeof_register[regnum]; - return size; + + + if (regnum >= 0 + && regnum < (gdbarch_num_regs (gdbarch) + + gdbarch_num_pseudo_regs (gdbarch))) + { + size = descr->sizeof_register[regnum]; + return size; + } + + internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum); + return 0; } /* The register cache for storing raw register values. */ --------------080202060904020802050209--