This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[COMMIT] New 64-bit SPARC frame base address convention
- From: Mark Kettenis <kettenis at gnu dot org>
- To: gdb-patches at sources dot redhat dot com
- Date: Wed, 9 Mar 2005 23:08:32 +0100 (CET)
- Subject: [COMMIT] New 64-bit SPARC frame base address convention
This realigns the base address used in frame IDs with the convention
used by GCC for DWARF2 CFI. This also changes the address printed by
"info frame". I think the new value is more appropriate, but if
people disagree, it can be adjusted.
Mark
Index: ChangeLog
from Mark Kettenis <kettenis@gnu.org>
* sparc-tdep.c (sparc_frame_cache): Adjust cached frame base
address for 64-bit code.
(sparc_unwind_dummy_id): Likewise.
* sparc64-tdep.c (sparc64_frame_prev_register): Adjust for new
frame base address convention.
(sparc64_push_dummy_call): Likewise.
* sparc64nbsd-tdep.c: Update copyright year.
(sparc64nbsd_sigcontext_frame_cache): Adjust cached frame base
address for 64-bit code.
(sparc64nbsd_init_abi): Tweak comment.
* sparc64obsd-tdep.c: Update copyright year.
(sparc64obsd_frame_cache): Adjust cached frame base address for
64-bit code.
(sparc64obsd_init_abi): Tweak comment.
Index: sparc-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc-tdep.c,v
retrieving revision 1.160
diff -u -p -r1.160 sparc-tdep.c
--- sparc-tdep.c 7 Feb 2005 00:09:55 -0000 1.160
+++ sparc-tdep.c 9 Mar 2005 22:04:31 -0000
@@ -673,6 +673,9 @@ sparc_frame_cache (struct frame_info *ne
frame_unwind_register_unsigned (next_frame, SPARC_FP_REGNUM);
}
+ if (cache->base & 1)
+ cache->base += BIAS;
+
return cache;
}
@@ -859,6 +862,8 @@ sparc_unwind_dummy_id (struct gdbarch *g
CORE_ADDR sp;
sp = frame_unwind_register_unsigned (next_frame, SPARC_SP_REGNUM);
+ if (sp & 1)
+ sp += BIAS;
return frame_id_build (sp, frame_pc_unwind (next_frame));
}
Index: sparc64-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc64-tdep.c,v
retrieving revision 1.19
diff -u -p -r1.19 sparc64-tdep.c
--- sparc64-tdep.c 5 Mar 2005 20:58:14 -0000 1.19
+++ sparc64-tdep.c 9 Mar 2005 22:04:32 -0000
@@ -526,7 +526,7 @@ sparc64_frame_prev_register (struct fram
{
*optimizedp = 0;
*lvalp = lval_memory;
- *addrp = cache->base + BIAS + (regnum - SPARC_L0_REGNUM) * 8;
+ *addrp = cache->base + (regnum - SPARC_L0_REGNUM) * 8;
*realnump = -1;
if (valuep)
{
@@ -572,7 +572,7 @@ sparc64_frame_base_address (struct frame
struct sparc_frame_cache *cache =
sparc64_frame_cache (next_frame, this_cache);
- return cache->base + BIAS;
+ return cache->base;
}
static const struct frame_base sparc64_frame_base =
@@ -973,7 +973,7 @@ sparc64_push_dummy_call (struct gdbarch
/* Finally, update the stack pointer. */
regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp);
- return sp;
+ return sp + BIAS;
}
Index: sparc64nbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc64nbsd-tdep.c,v
retrieving revision 1.13
diff -u -p -r1.13 sparc64nbsd-tdep.c
--- sparc64nbsd-tdep.c 31 Oct 2004 19:52:47 -0000 1.13
+++ sparc64nbsd-tdep.c 9 Mar 2005 22:04:32 -0000
@@ -1,6 +1,6 @@
/* Target-dependent code for NetBSD/sparc64.
- Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Based on code contributed by Wasabi Systems, Inc.
This file is part of GDB.
@@ -161,12 +161,14 @@ sparc64nbsd_sigcontext_frame_cache (stru
initialized under the assumption that we're frameless. */
cache->frameless_p = 0;
addr = frame_unwind_register_unsigned (next_frame, SPARC_FP_REGNUM);
+ if (addr & 1)
+ addr += BIAS;
cache->base = addr;
}
/* We find the appropriate instance of `struct sigcontext' at a
fixed offset in the signal frame. */
- addr = cache->base + BIAS + 128 + 8;
+ addr = cache->base + 128 + 8;
cache->saved_regs = sparc64nbsd_sigcontext_saved_regs (addr, next_frame);
return cache;
@@ -237,13 +239,13 @@ sparc64nbsd_init_abi (struct gdbarch_inf
sparc64_init_abi (info, gdbarch);
- /* NetBSD/sparc64 has SVR4-style shared libraries... */
+ /* NetBSD/sparc64 has SVR4-style shared libraries. */
set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_lp64_fetch_link_map_offsets);
}
-
+
/* Provide a prototype to silence -Wmissing-prototypes. */
void _initialize_sparc64nbsd_tdep (void);
Index: sparc64obsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/sparc64obsd-tdep.c,v
retrieving revision 1.12
diff -u -p -r1.12 sparc64obsd-tdep.c
--- sparc64obsd-tdep.c 31 Oct 2004 19:52:47 -0000 1.12
+++ sparc64obsd-tdep.c 9 Mar 2005 22:04:33 -0000
@@ -1,6 +1,6 @@
/* Target-dependent code for OpenBSD/sparc64.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright 2004, 2005 Free Software Foundation, Inc.
This file is part of GDB.
@@ -133,12 +133,14 @@ sparc64obsd_frame_cache (struct frame_in
initialized under the assumption that we're frameless. */
cache->frameless_p = 0;
addr = frame_unwind_register_unsigned (next_frame, SPARC_FP_REGNUM);
+ if (addr & 1)
+ addr += BIAS;
cache->base = addr;
}
/* We find the appropriate instance of `struct sigcontext' at a
fixed offset in the signal frame. */
- addr = cache->base + BIAS + 128 + 16;
+ addr = cache->base + 128 + 16;
cache->saved_regs = sparc64nbsd_sigcontext_saved_regs (addr, next_frame);
return cache;
@@ -201,13 +203,13 @@ sparc64obsd_init_abi (struct gdbarch_inf
sparc64_init_abi (info, gdbarch);
- /* OpenBSD/sparc64 has SVR4-style shared libraries... */
+ /* OpenBSD/sparc64 has SVR4-style shared libraries. */
set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_lp64_fetch_link_map_offsets);
}
-
+
/* Provide a prototype to silence -Wmissing-prototypes. */
void _initialize_sparc64obsd_tdep (void);