From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28674 invoked by alias); 17 Jun 2006 23:15:06 -0000 Received: (qmail 28665 invoked by uid 22791); 17 Jun 2006 23:15:05 -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; Sat, 17 Jun 2006 23:15:03 +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 k5HNEfuJ022151; Sun, 18 Jun 2006 01:14:41 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.13.6/8.13.6) with ESMTP id k5HNEfKN004737; Sun, 18 Jun 2006 01:14:41 +0200 (CEST) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.13.6/8.13.6/Submit) id k5HNEeqM013325; Sun, 18 Jun 2006 01:14:40 +0200 (CEST) Date: Sat, 17 Jun 2006 23:15:00 -0000 Message-Id: <200606172314.k5HNEeqM013325@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: msnyder@redhat.com CC: brobecker@adacore.com, gdb-patches@sources.redhat.com, fnf@specifics.com In-reply-to: <447E25F0.3010009@redhat.com> (message from Michael Snyder on Wed, 31 May 2006 16:25:36 -0700) Subject: Re: [RFA] mips, eabi64, addr_bit == 32 References: <447E25F0.3010009@redhat.com> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-06/txt/msg00246.txt.bz2 > Date: Wed, 31 May 2006 16:25:36 -0700 > From: Michael Snyder > > Disagreement between gcc and gdb about the size of an addr > causes numerous dwarf2-related complaints of the form: > > (gdb) advance foo^M > foo (a=dwarf2_read_address: Corrupted DWARF expression.^M > ) at > /opt/redhat/gnupro-06r1-1/sources/tools/cross/gdb/testsuite/gdb.base/advan\ce.c:6^M > 6 int b = a + 10;^M > (gdb) FAIL: gdb.base/advance.exp: advance function called as param Is this patch still on the table? It looks highly suspicious to me. I mean, you have 64-bit pointers, but 32-bit addresses? Shouldn't we just fix GCC to emit the correct debug info? > 2006-05-31 Michael Snyder > > * mips-tdep.c (mips_gdbarch_init): EABI64, addr_bit is 32. > (mips_write_pc): Difference between addr_bit and ptr_bit > requires sign_extension when setting $pc. > > Index: mips-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/mips-tdep.c,v > retrieving revision 1.393 > diff -p -r1.393 mips-tdep.c > *** mips-tdep.c 31 May 2006 23:15:50 -0000 1.393 > --- mips-tdep.c 31 May 2006 23:18:47 -0000 > *************** mips_unwind_dummy_id (struct gdbarch *gd > *** 838,843 **** > --- 838,847 ---- > static void > mips_write_pc (CORE_ADDR pc, ptid_t ptid) > { > + /* If addr_bit is 32, force sign extension. */ > + if (gdbarch_addr_bit (current_gdbarch) == 32) > + if ((pc & 0xffffffff80000000LL) == 0x80000000) > + pc |= 0xffffffff00000000LL; > write_register_pid (mips_regnum (current_gdbarch)->pc, pc, ptid); > } > > *************** mips_gdbarch_init (struct gdbarch_info i > *** 4976,4981 **** > --- 4980,4986 ---- > tdep->default_mask_address_p = 0; > set_gdbarch_long_bit (gdbarch, 64); > set_gdbarch_ptr_bit (gdbarch, 64); > + set_gdbarch_addr_bit (gdbarch, 32); > set_gdbarch_long_long_bit (gdbarch, 64); > break; > case MIPS_ABI_N32: