From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19423 invoked by alias); 9 Mar 2004 17:11:20 -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 19409 invoked from network); 9 Mar 2004 17:11:18 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 9 Mar 2004 17:11:18 -0000 Received: from drow by nevyn.them.org with local (Exim 4.30 #1 (Debian)) id 1B0klC-0004kZ-60 for ; Tue, 09 Mar 2004 12:11:18 -0500 Date: Tue, 09 Mar 2004 17:11:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [rfa/arm] Fix some structs.exp failures Message-ID: <20040309171118.GF27765@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20040302171658.GA24060@nevyn.them.org> <200403031729.i23HTi021640@pc960.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200403031729.i23HTi021640@pc960.cambridge.arm.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2004-03.o/txt/msg00204.txt On Wed, Mar 03, 2004 at 05:29:44PM +0000, Richard Earnshaw wrote: > > structs.exp uses "typedef float tf". A structure type that would otherwise > > be returned by reference is returned by value, because GDB doesn't realize > > that it counts as a floating-point-like structure. > > > > OK? > > > > -- > > Daniel Jacobowitz > > MontaVista Software Debian GNU/Linux Developer > > > > 2004-03-02 Daniel Jacobowitz > > > > * arm-tdep.c (arm_use_struct_convention): Look through typedefs. > > I think this is OK, but it's hard to be sure: check_typedef is completely > undocumented -- no mention in the internals documentation, and not even a > comment in gdbtypes.[ch]. I can take a hint :) Here's what I checked in. Note that there actually is a comment right above check_typedef. It's not very clear, though, and another little function has gotten in the way. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2004-03-09 Daniel Jacobowitz * arm-tdep.c (arm_use_struct_convention): Look through typedefs. * gdbtypes.c (check_typedef): Update comments. Index: gdbtypes.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.c,v retrieving revision 1.81 diff -u -p -r1.81 gdbtypes.c --- gdbtypes.c 15 Feb 2004 15:22:06 -0000 1.81 +++ gdbtypes.c 9 Mar 2004 17:06:06 -0000 @@ -1343,6 +1343,12 @@ get_destructor_fn_field (struct type *t, return 0; } +static void +stub_noname_complaint (void) +{ + complaint (&symfile_complaints, "stub type has NULL name"); +} + /* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989. If this is a stubbed struct (i.e. declared as struct foo *), see if @@ -1356,11 +1362,10 @@ get_destructor_fn_field (struct type *t, This used to be coded as a macro, but I don't think it is called often enough to merit such treatment. */ -static void -stub_noname_complaint (void) -{ - complaint (&symfile_complaints, "stub type has NULL name"); -} +/* Find the real type of TYPE. This function returns the real type, after + removing all layers of typedefs and completing opaque or stub types. + Completion changes the TYPE argument, but stripping of typedefs does + not. */ struct type * check_typedef (struct type *type) Index: arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.166 diff -u -p -r1.166 arm-tdep.c --- arm-tdep.c 9 Mar 2004 15:44:26 -0000 1.166 +++ arm-tdep.c 9 Mar 2004 17:06:07 -0000 @@ -2173,6 +2173,8 @@ arm_use_struct_convention (int gcc_p, st int nRc; enum type_code code; + CHECK_TYPEDEF (type); + /* In the ARM ABI, "integer" like aggregate types are returned in registers. For an aggregate type to be integer like, its size must be less than or equal to DEPRECATED_REGISTER_SIZE and the @@ -2230,7 +2232,7 @@ arm_use_struct_convention (int gcc_p, st for (i = 0; i < TYPE_NFIELDS (type); i++) { enum type_code field_type_code; - field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i)); + field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i))); /* Is it a floating point type field? */ if (field_type_code == TYPE_CODE_FLT) From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19423 invoked by alias); 9 Mar 2004 17:11:20 -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 19409 invoked from network); 9 Mar 2004 17:11:18 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 9 Mar 2004 17:11:18 -0000 Received: from drow by nevyn.them.org with local (Exim 4.30 #1 (Debian)) id 1B0klC-0004kZ-60 for ; Tue, 09 Mar 2004 12:11:18 -0500 Date: Fri, 19 Mar 2004 00:09:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: Re: [rfa/arm] Fix some structs.exp failures Message-ID: <20040309171118.GF27765@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com References: <20040302171658.GA24060@nevyn.them.org> <200403031729.i23HTi021640@pc960.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200403031729.i23HTi021640@pc960.cambridge.arm.com> User-Agent: Mutt/1.5.1i X-SW-Source: 2004-03/txt/msg00204.txt.bz2 Message-ID: <20040319000900.5YR7zDdGltSy1bLM0TAnq0EiBTPDFpNyFfYH3AMT_bY@z> On Wed, Mar 03, 2004 at 05:29:44PM +0000, Richard Earnshaw wrote: > > structs.exp uses "typedef float tf". A structure type that would otherwise > > be returned by reference is returned by value, because GDB doesn't realize > > that it counts as a floating-point-like structure. > > > > OK? > > > > -- > > Daniel Jacobowitz > > MontaVista Software Debian GNU/Linux Developer > > > > 2004-03-02 Daniel Jacobowitz > > > > * arm-tdep.c (arm_use_struct_convention): Look through typedefs. > > I think this is OK, but it's hard to be sure: check_typedef is completely > undocumented -- no mention in the internals documentation, and not even a > comment in gdbtypes.[ch]. I can take a hint :) Here's what I checked in. Note that there actually is a comment right above check_typedef. It's not very clear, though, and another little function has gotten in the way. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2004-03-09 Daniel Jacobowitz * arm-tdep.c (arm_use_struct_convention): Look through typedefs. * gdbtypes.c (check_typedef): Update comments. Index: gdbtypes.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.c,v retrieving revision 1.81 diff -u -p -r1.81 gdbtypes.c --- gdbtypes.c 15 Feb 2004 15:22:06 -0000 1.81 +++ gdbtypes.c 9 Mar 2004 17:06:06 -0000 @@ -1343,6 +1343,12 @@ get_destructor_fn_field (struct type *t, return 0; } +static void +stub_noname_complaint (void) +{ + complaint (&symfile_complaints, "stub type has NULL name"); +} + /* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989. If this is a stubbed struct (i.e. declared as struct foo *), see if @@ -1356,11 +1362,10 @@ get_destructor_fn_field (struct type *t, This used to be coded as a macro, but I don't think it is called often enough to merit such treatment. */ -static void -stub_noname_complaint (void) -{ - complaint (&symfile_complaints, "stub type has NULL name"); -} +/* Find the real type of TYPE. This function returns the real type, after + removing all layers of typedefs and completing opaque or stub types. + Completion changes the TYPE argument, but stripping of typedefs does + not. */ struct type * check_typedef (struct type *type) Index: arm-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/arm-tdep.c,v retrieving revision 1.166 diff -u -p -r1.166 arm-tdep.c --- arm-tdep.c 9 Mar 2004 15:44:26 -0000 1.166 +++ arm-tdep.c 9 Mar 2004 17:06:07 -0000 @@ -2173,6 +2173,8 @@ arm_use_struct_convention (int gcc_p, st int nRc; enum type_code code; + CHECK_TYPEDEF (type); + /* In the ARM ABI, "integer" like aggregate types are returned in registers. For an aggregate type to be integer like, its size must be less than or equal to DEPRECATED_REGISTER_SIZE and the @@ -2230,7 +2232,7 @@ arm_use_struct_convention (int gcc_p, st for (i = 0; i < TYPE_NFIELDS (type); i++) { enum type_code field_type_code; - field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i)); + field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i))); /* Is it a floating point type field? */ if (field_type_code == TYPE_CODE_FLT)