From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8699 invoked by alias); 2 Apr 2006 12:44:41 -0000 Received: (qmail 8691 invoked by uid 22791); 2 Apr 2006 12:44:40 -0000 X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 02 Apr 2006 12:44:38 +0000 Received: from elgar.sibelius.xs4all.nl (root@elgar.sibelius.xs4all.nl [192.168.0.2]) by sibelius.xs4all.nl (8.13.4/8.13.4) with ESMTP id k32CiS54008113; Sun, 2 Apr 2006 14:44:28 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.13.4/8.13.3) with ESMTP id k32CiRcj024226; Sun, 2 Apr 2006 14:44:27 +0200 (CEST) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.13.4/8.13.4/Submit) id k32CiRXZ029528; Sun, 2 Apr 2006 14:44:27 +0200 (CEST) Date: Sun, 02 Apr 2006 12:44:00 -0000 Message-Id: <200604021244.k32CiRXZ029528@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: der.herr@hofr.at CC: gdb@sourceware.org In-reply-to: <200604030757.k337vhj22619@hofr.at> (message from Der Herr Hofrat on Mon, 3 Apr 2006 09:57:43 +0200 (CEST)) Subject: Re: /gdb/regcache.c question References: <200604030757.k337vhj22619@hofr.at> Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2006-04/txt/msg00004.txt.bz2 > From: Der Herr Hofrat > Date: Mon, 3 Apr 2006 09:57:43 +0200 (CEST) > > Hi ! > > while implementing tracepoints I ran acros a little problem with > gdb/regcache.c - the behavior is not really an error its just overly > strict for interactive input, obviously regache.c is assuming > automatic generation of registers lists only. > > (gdb) actions > Enter actions for tracepoint 1, one per line. > End with a line saying just "end". > > collect $regs > > end > (gdb) trace junk2 > Tracepoint 2 at 0x80483eb: file hello.c, line 27. > (gdb) actions > Enter actions for tracepoint 2, one per line. > End with a line saying just "end". > > collect $sp > regcache.c:163: internal-error: register_type: Assertion `regnum >= 0 && regnum > < descr->nr_cooked_registers' failed. > A problem internal to GDB has been detected, > further debugging may prove unreliable. > Quit this debugging session? (y or n) n > > regcache.c:163: internal-error: register_type: Assertion `regnum >= 0 && regnum > < descr->nr_cooked_registers' failed. > A problem internal to GDB has been detected, > further debugging may prove unreliable. > Create a core file of GDB? (y or n) y > > > The trigger is gdb_assert in line 163: > > gdb/regcache.c:159-165 > struct type * > register_type (struct gdbarch *gdbarch, int regnum) > { > struct regcache_descr *descr = regcache_descr (gdbarch); > gdb_assert (regnum >= 0 && regnum < descr->nr_cooked_registers); > return descr->register_type[regnum]; > } > > > So a simple misstyp of the register name runs into an assertion > with a core file dumped - this makes sense for automatic generation > - but for tracepoints you need to manually be able to pass > registers with collect $REGNAME , and for that case gdb_assert -> > corfile is a little harsh on the user. I don't understand what you're doing here, but that gdb_assert (and all gdb_asserts in the code) is checking for a "should not happen" condition. If you hit one, it means there's a bug in some other piece of gdb code. You should find and fix that bug. Mark