From: Mark Kettenis Date: Wed, 9 Mar 2005 22:08:13 +0000 (+0000) Subject: * sparc-tdep.c (sparc_frame_cache): Adjust cached frame base X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5b2d44a05d619213499bea50fb4044707eaa159d;p=binutils-gdb.git * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bed4021e316..eb480af2c37 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2005-03-09 Mark Kettenis + + * 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. + 2005-03-09 Corinna Vinschen * exceptions.h (TRY_CATCH): Define setjmp/sigsetjmp macro safe. diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index 0bcdd48402d..f9ded35d1d0 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -673,6 +673,9 @@ sparc_frame_cache (struct frame_info *next_frame, void **this_cache) 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 *gdbarch, struct frame_info *next_frame) 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)); } diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c index fbef9a9707c..f8087b409bd 100644 --- a/gdb/sparc64-tdep.c +++ b/gdb/sparc64-tdep.c @@ -526,7 +526,7 @@ sparc64_frame_prev_register (struct frame_info *next_frame, void **this_cache, { *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_info *next_frame, void **this_cache) 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 *gdbarch, struct value *function, /* Finally, update the stack pointer. */ regcache_cooked_write_unsigned (regcache, SPARC_SP_REGNUM, sp); - return sp; + return sp + BIAS; } diff --git a/gdb/sparc64nbsd-tdep.c b/gdb/sparc64nbsd-tdep.c index e02ee3ae6d9..7d4b1933767 100644 --- a/gdb/sparc64nbsd-tdep.c +++ b/gdb/sparc64nbsd-tdep.c @@ -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 (struct frame_info *next_frame, 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_info info, struct gdbarch *gdbarch) 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); diff --git a/gdb/sparc64obsd-tdep.c b/gdb/sparc64obsd-tdep.c index 18e0416c94b..194655645e5 100644 --- a/gdb/sparc64obsd-tdep.c +++ b/gdb/sparc64obsd-tdep.c @@ -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_info *next_frame, void **this_cache) 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_info info, struct gdbarch *gdbarch) 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);