From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10202 invoked by alias); 4 Dec 2003 05:20:32 -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 10139 invoked from network); 4 Dec 2003 05:20:31 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by sources.redhat.com with SMTP; 4 Dec 2003 05:20:31 -0000 Received: by localhost.redhat.com (Postfix, from userid 469) id E51281A42DB; Thu, 4 Dec 2003 00:20:30 -0500 (EST) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16334.50206.868506.409948@localhost.redhat.com> Date: Thu, 04 Dec 2003 05:20:00 -0000 To: Joel Brobecker Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA] stabs: remember types that cross reference another type In-Reply-To: <20031103225952.GA2412@gnat.com> References: <20031031200851.GD1236@gnat.com> <20031103225952.GA2412@gnat.com> X-SW-Source: 2003-12/txt/msg00106.txt.bz2 Joel Brobecker writes: > [Rhaaaa, resending, with the patch this time. Thanks Daniel!] > > 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? > Yes, but the comment before that loop you are changing needs some revamping. Reading it, it really looks like it is a useless/obsoleted thing we are doing here, while now it's not the case anymore. I mean, it is useful. elena