This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[rfc] [04/12] Get rid of current_gdbarch in frame.c
- From: Markus Deuling <deuling at de dot ibm dot com>
- To: GDB Patches <gdb-patches at sourceware dot org>, Ulrich Weigand <uweigand at de dot ibm dot com>
- Date: Fri, 03 Aug 2007 14:10:08 +0200
- Subject: [rfc] [04/12] Get rid of current_gdbarch in frame.c
Hi,
this patch gets rid of some of the current_gdbarch's in frame.c
Is this ok to commit?
ChangeLog:
* frame.c (frame_pc_unwind, frame_save_as_regcache, frame_sp_unwind)
(frame_register_unwind, get_prev_frame_1, inside_main_func): Use FRAME
or REGCACHE to recognize current architecture.
--
Markus Deuling
GNU Toolchain for Linux on Cell BE
deuling@de.ibm.com
diff -urpN src/gdb/frame.c dev/gdb/frame.c
--- src/gdb/frame.c 2007-06-19 05:22:04.000000000 +0200
+++ dev/gdb/frame.c 2007-08-02 08:51:19.000000000 +0200
@@ -426,6 +426,8 @@ frame_find_by_id (struct frame_id id)
CORE_ADDR
frame_pc_unwind (struct frame_info *this_frame)
{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+
if (!this_frame->prev_pc.p)
{
CORE_ADDR pc;
@@ -437,7 +439,7 @@ frame_pc_unwind (struct frame_info *this
/* A per-frame unwinder, prefer it. */
pc = this_frame->unwind->prev_pc (this_frame->next,
&this_frame->prologue_cache);
- else if (gdbarch_unwind_pc_p (current_gdbarch))
+ else if (gdbarch_unwind_pc_p (gdbarch))
{
/* The right way. The `pure' way. The one true way. This
method depends solely on the register-unwind code to
@@ -455,7 +457,7 @@ frame_pc_unwind (struct frame_info *this
frame. This is all in stark contrast to the old
FRAME_SAVED_PC which would try to directly handle all the
different ways that a PC could be unwound. */
- pc = gdbarch_unwind_pc (current_gdbarch, this_frame);
+ pc = gdbarch_unwind_pc (gdbarch, this_frame);
}
else
internal_error (__FILE__, __LINE__, _("No unwind_pc method"));
@@ -504,7 +506,8 @@ do_frame_register_read (void *src, int r
struct regcache *
frame_save_as_regcache (struct frame_info *this_frame)
{
- struct regcache *regcache = regcache_xmalloc (current_gdbarch);
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+ struct regcache *regcache = regcache_xmalloc (gdbarch);
struct cleanup *cleanups = make_cleanup_regcache_xfree (regcache);
regcache_save (regcache, do_frame_register_read, this_frame);
discard_cleanups (cleanups);
@@ -603,7 +606,7 @@ frame_register_unwind (struct frame_info
int i;
const unsigned char *buf = bufferp;
fprintf_unfiltered (gdb_stdlog, "[");
- for (i = 0; i < register_size (current_gdbarch, regnum); i++)
+ for (i = 0; i < register_size (get_frame_arch (frame), regnum); i++)
fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
fprintf_unfiltered (gdb_stdlog, "]");
}
@@ -1135,6 +1138,7 @@ frame_register_unwind_location (struct f
static struct frame_info *
get_prev_frame_1 (struct frame_info *this_frame)
{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
struct frame_info *prev_frame;
struct frame_id this_id;
@@ -1229,7 +1233,7 @@ get_prev_frame_1 (struct frame_info *thi
method set the same lval and location information as
frame_register_unwind. */
if (this_frame->level > 0
- && gdbarch_pc_regnum (current_gdbarch) >= 0
+ && gdbarch_pc_regnum (gdbarch) >= 0
&& get_frame_type (this_frame) == NORMAL_FRAME
&& get_frame_type (this_frame->next) == NORMAL_FRAME)
{
@@ -1238,10 +1242,10 @@ get_prev_frame_1 (struct frame_info *thi
CORE_ADDR addr, naddr;
frame_register_unwind_location (this_frame,
- gdbarch_pc_regnum (current_gdbarch),
+ gdbarch_pc_regnum (gdbarch),
&optimized, &lval, &addr, &realnum);
frame_register_unwind_location (get_next_frame (this_frame),
- gdbarch_pc_regnum (current_gdbarch),
+ gdbarch_pc_regnum (gdbarch),
&optimized, &nlval, &naddr, &realnum);
if (lval == lval_memory && lval == nlval && addr == naddr)
@@ -1338,7 +1342,7 @@ inside_main_func (struct frame_info *thi
return 0;
/* Make certain that the code, and not descriptor, address is
returned. */
- maddr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
+ maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
SYMBOL_VALUE_ADDRESS (msymbol),
¤t_target);
return maddr == get_frame_func (this_frame);
@@ -1721,17 +1725,18 @@ get_frame_sp (struct frame_info *this_fr
CORE_ADDR
frame_sp_unwind (struct frame_info *next_frame)
{
+ struct gdbarch *gdbarch = get_frame_arch (next_frame);
/* Normality - an architecture that provides a way of obtaining any
frame inner-most address. */
- if (gdbarch_unwind_sp_p (current_gdbarch))
- return gdbarch_unwind_sp (current_gdbarch, next_frame);
+ if (gdbarch_unwind_sp_p (gdbarch))
+ return gdbarch_unwind_sp (gdbarch, next_frame);
/* Now things are really are grim. Hope that the value returned by
the gdbarch_sp_regnum register is meaningful. */
- if (gdbarch_sp_regnum (current_gdbarch) >= 0)
+ if (gdbarch_sp_regnum (gdbarch) >= 0)
{
ULONGEST sp;
frame_unwind_unsigned_register (next_frame,
- gdbarch_sp_regnum (current_gdbarch), &sp);
+ gdbarch_sp_regnum (gdbarch), &sp);
return sp;
}
internal_error (__FILE__, __LINE__, _("Missing unwind SP method"));