[COMMIT] New 64-bit SPARC frame base address convention
Mark Kettenis
kettenis@gnu.org
Wed Mar 9 22:08:00 GMT 2005
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);
More information about the Gdb-patches
mailing list