This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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);
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]