From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27010 invoked by alias); 3 Nov 2003 18:16:37 -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 26996 invoked from network); 3 Nov 2003 18:16:36 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 3 Nov 2003 18:16:36 -0000 Received: from drow by nevyn.them.org with local (Exim 4.24 #1 (Debian)) id 1AGjFj-0008C5-CE; Mon, 03 Nov 2003 13:16:35 -0500 Date: Mon, 03 Nov 2003 18:16:00 -0000 From: Daniel Jacobowitz To: Joel Brobecker Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA] stabs: remember types that cross reference another type Message-ID: <20031103181635.GA31356@nevyn.them.org> Mail-Followup-To: Joel Brobecker , gdb-patches@sources.redhat.com References: <20031031200851.GD1236@gnat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20031031200851.GD1236@gnat.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-11/txt/msg00033.txt.bz2 On Fri, Oct 31, 2003 at 12:08:51PM -0800, Joel Brobecker wrote: > Hello, > > We encountered the following problem when using GNAT to compile > the following pasted at the end of this message. Sorry the program > is in Ada instead of C, but I couldn't reproduce it with C. > > The problem is when the user tries to print the type of My_Str. > GDB should return a string, but instead we got: > > Attempt to take contents of a non-pointer value > > After investigating, I found that the stabs generated by the compiler > contained the following entries: > > .stabs "s5:(0,97)=xsstring___XUP:",128,0,5,-476 > .stabs "R6b:(0,97)",128,0,12,-484 > > (R6b is a variable that GDB ends up using in place of My_Str for reasons > that are related to the encoding used by GNAT). > > So when GDB reads the type information for R6b, it finds that it is > of type number (0,97), which should mean the same type as s5. > Unfortunately, GDB forgot to save a reference to the type associated > to type (0,97) in the type_vector when processing the type of variable > named "s5". So later on, when GDB tries to compute the type of "R6b", > it doesn't find type (0,97) and therefore assumes it will be defined > later, and hence creates a empty type object which it hopes will be > filled in later. > > As a consequence, when the ada mode tries to print the type of R6b, > it trips over the unexpected symbol type code, and bails out with > the error message above. > > The attached patch fixes this particular case. > > 2003-10-31 J. Brobecker > > * stabsread.c (read_type): Save a reference to types that are defined > as cross references to other types. > > Tested on x86-linux, no regression. > > Ok to apply? No patch? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer