This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit] Fix MIPS mdebug support from a 64-bit host
- From: Daniel Jacobowitz <drow at false dot org>
- To: gdb-patches at sourceware dot org
- Date: Wed, 15 Mar 2006 11:31:08 -0500
- Subject: [commit] Fix MIPS mdebug support from a 64-bit host
If CORE_ADDR is a 64-bit type for whatever reason, and the target
is MIPS, we need to sign extend target addresses into CORE_ADDR
variables - if we're inconsistent, they won't match up with
the symbol table and PC. There's one place in the mdebug
decoding code where we forgot about this rule.
Obvious fix committed.
--
Daniel Jacobowitz
CodeSourcery
2006-03-15 Daniel Jacobowitz <dan@codesourcery.com>
* mips-mdebug-tdep.c (compare_pdr_entries): Use bfd_get_signed_32
for code addresses.
(non_heuristic_proc_desc): Likewise.
Index: src/gdb/mips-mdebug-tdep.c
===================================================================
--- src.orig/gdb/mips-mdebug-tdep.c 2006-03-14 16:29:14.000000000 -0500
+++ src/gdb/mips-mdebug-tdep.c 2006-03-14 16:32:45.000000000 -0500
@@ -2,8 +2,8 @@
the GNU Debugger.
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
- Foundation, Inc.
+ 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006
+ Free Software Foundation, Inc.
This file is part of GDB.
@@ -63,8 +63,8 @@ static bfd *the_bfd;
static int
compare_pdr_entries (const void *a, const void *b)
{
- CORE_ADDR lhs = bfd_get_32 (the_bfd, (bfd_byte *) a);
- CORE_ADDR rhs = bfd_get_32 (the_bfd, (bfd_byte *) b);
+ CORE_ADDR lhs = bfd_get_signed_32 (the_bfd, (bfd_byte *) a);
+ CORE_ADDR rhs = bfd_get_signed_32 (the_bfd, (bfd_byte *) b);
if (lhs < rhs)
return -1;
@@ -215,17 +215,17 @@ non_heuristic_proc_desc (CORE_ADDR pc, C
PROC_LOW_ADDR (proc_desc) = pdr_pc;
PROC_FRAME_OFFSET (proc_desc)
- = bfd_get_32 (sec->objfile->obfd, ptr + 20);
+ = bfd_get_signed_32 (sec->objfile->obfd, ptr + 20);
PROC_FRAME_REG (proc_desc) = bfd_get_32 (sec->objfile->obfd,
ptr + 24);
PROC_REG_MASK (proc_desc) = bfd_get_32 (sec->objfile->obfd,
ptr + 4);
PROC_FREG_MASK (proc_desc) = bfd_get_32 (sec->objfile->obfd,
ptr + 12);
- PROC_REG_OFFSET (proc_desc) = bfd_get_32 (sec->objfile->obfd,
- ptr + 8);
+ PROC_REG_OFFSET (proc_desc)
+ = bfd_get_signed_32 (sec->objfile->obfd, ptr + 8);
PROC_FREG_OFFSET (proc_desc)
- = bfd_get_32 (sec->objfile->obfd, ptr + 16);
+ = bfd_get_signed_32 (sec->objfile->obfd, ptr + 16);
PROC_PC_REG (proc_desc) = bfd_get_32 (sec->objfile->obfd,
ptr + 28);
proc_desc->pdr.isym = (long) sym;