From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20394 invoked by alias); 6 Dec 2006 20:15:51 -0000 Received: (qmail 20385 invoked by uid 22791); 6 Dec 2006 20:15:50 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 06 Dec 2006 20:15:44 +0000 Received: (qmail 9957 invoked from network); 6 Dec 2006 20:15:43 -0000 Received: from unknown (HELO localhost) (jimb@127.0.0.2) by mail.codesourcery.com with ESMTPA; 6 Dec 2006 20:15:43 -0000 To: gdb-patches@sourceware.org Subject: Re: Now I know why we used to swap builtin_type_void. References: <20061206195227.GA9228@nevyn.them.org> From: Jim Blandy Date: Wed, 06 Dec 2006 20:15:00 -0000 In-Reply-To: <20061206195227.GA9228@nevyn.them.org> (Daniel Jacobowitz's message of "Wed, 6 Dec 2006 14:52:27 -0500") Message-ID: User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-IsSubscribed: yes 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: 2006-12/txt/msg00075.txt.bz2 Daniel Jacobowitz writes: > (top-gdb) p *builtin_type_void_data_ptr > $24 = {pointer_type = 0x0, reference_type = 0x0, chain = 0x7b50d0, > instance_flags = 0, length = 8, main_type = 0x7b5100} > (top-gdb) p current_gdbarch.ptr_bit > $25 = 32 > > Because we didn't swap out "void", we followed the cached pointer link > in builtin_type_void when we tried to create a pointer to void. My > initial default gdbarch was 64-bit, because I built a 64-bit GDB > binary. So the cached pointer type is 64-bit. > > This is a mess. I think we may need to revert the builtin_type_void > patch unless you have a better idea. I've committed the following: gdb/ChangeLog: 2006-12-06 Jim Blandy * gdbtypes.c: Revert 2006-12-05 change, and explain why. Index: gdb/gdbtypes.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtypes.c,v retrieving revision 1.107 diff -u -r1.107 gdbtypes.c --- gdb/gdbtypes.c 6 Dec 2006 00:57:04 -0000 1.107 +++ gdb/gdbtypes.c 6 Dec 2006 20:14:57 -0000 @@ -3297,6 +3297,10 @@ static void build_gdbtypes (void) { + builtin_type_void = + init_type (TYPE_CODE_VOID, 1, + 0, + "void", (struct objfile *) NULL); builtin_type_char = init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT, (TYPE_FLAG_NOSIGN @@ -3646,10 +3650,9 @@ { struct cmd_list_element *c; - builtin_type_void = - init_type (TYPE_CODE_VOID, 1, - 0, - "void", (struct objfile *) NULL); + /* FIXME: Why don't the following types need to be arch-swapped? + See the comment at the top of the calls to + DEPRECATED_REGISTER_GDBARCH_SWAP below. */ builtin_type_int0 = init_type (TYPE_CODE_INT, 0 / 8, 0, @@ -3701,7 +3704,14 @@ /* FIXME - For the moment, handle types by swapping them in and out. Should be using the per-architecture data-pointer and a large - struct. */ + struct. + + Note that any type T that we might create a 'T *' type for must + be arch-swapped: we cache a type's 'T *' type in the pointer_type + field, so if we change architectures but don't swap T, then + lookup_pointer_type will start handing out pointer types made for + a different architecture. */ + DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void); DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_char); DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_short); DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_int); @@ -3744,7 +3754,8 @@ deprecated_register_gdbarch_swap (NULL, 0, build_gdbtypes); /* Note: These types do not need to be swapped - they are target - neutral. */ + neutral. FIXME: Are you sure? See the comment above the calls + to DEPRECATED_REGISTER_GDBARCH_SWAP above. */ builtin_type_ieee_single_big = init_type (TYPE_CODE_FLT, floatformat_ieee_single_big.totalsize / 8, 0, "builtin_type_ieee_single_big", NULL);