This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [rfc] [06/09] Get rid of current_gdbarch (trivial replacements)
- From: Markus Deuling <deuling at de dot ibm dot com>
- To: GDB Patches <gdb-patches at sourceware dot org>
- Cc: Ulrich Weigand <uweigand at de dot ibm dot com>
- Date: Wed, 07 Nov 2007 07:53:52 +0100
- Subject: Re: [rfc] [06/09] Get rid of current_gdbarch (trivial replacements)
- References: <200711051602.lA5G2Nl2006992@d12av02.megacenter.de.ibm.com>
Ulrich Weigand schrieb:
Markus Deuling wrote:
* shnbsd-tdep.c (shnbsd_supply_gregset, shnbsd_collect_gregset): Use
get_regcache_arch to get at the current architecture by regcache.
* xstormy16-tdep.c (xstormy16_frame_prev_register): Use get_frame_arch
to get at the current architecture by frame_info.
* fbsd-nat.c (fbsd_make_corefile_notes): Use get_regcache_arch to get
at the current architecture by regcache.
* gnu-v3-abi.c (gnuv3_skip_trampoline): Use get_frame_arch to get at
the current architecture by frame_info.
(build_gdb_vtable_type): Replace current_gdbarch by gdbarch.
* aix-thread.c (special_register_p): Add gdbarch as parameter.
(fetch_regs_kernel_thread, store_regs_kernel_thread): Add gdbarch to
caller of special_register_p.
This is OK, except that
We use this function as the gdbarch per-architecture data
initialization function. We assume that the gdbarch framework
calls the per-architecture data initialization functions after it
- sets current_gdbarch to the new architecture. */
+ sets gdbarch to the new architecture. */
after this change the comment no longer makes sense, as there is
no particular assumption about current_gdbarch left in the code.
You should simply remove the sentence starting with "We assume ...".
Bye,
Ulrich
I've corrected the comments and committed following patch.
Thank you very much.
--
Markus Deuling
GNU Toolchain for Linux on Cell BE
deuling@de.ibm.com
diff -urpN src/gdb/aix-thread.c dev/gdb/aix-thread.c
--- src/gdb/aix-thread.c 2007-10-08 14:58:04.000000000 +0200
+++ dev/gdb/aix-thread.c 2007-11-06 08:59:57.000000000 +0100
@@ -1060,11 +1060,11 @@ supply_fprs (struct regcache *regcache,
/* Predicate to test whether given register number is a "special" register. */
static int
-special_register_p (int regno)
+special_register_p (struct gdbarch *gdbarch, int regno)
{
- struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- return regno == gdbarch_pc_regnum (current_gdbarch)
+ return regno == gdbarch_pc_regnum (gdbarch)
|| regno == tdep->ppc_ps_regnum
|| regno == tdep->ppc_cr_regnum
|| regno == tdep->ppc_lr_regnum
@@ -1237,7 +1237,7 @@ fetch_regs_kernel_thread (struct regcach
/* Special-purpose registers. */
- if (regno == -1 || special_register_p (regno))
+ if (regno == -1 || special_register_p (gdbarch, regno))
{
if (arch64)
{
@@ -1554,7 +1554,7 @@ store_regs_kernel_thread (const struct r
/* Special-purpose registers. */
- if (regno == -1 || special_register_p (regno))
+ if (regno == -1 || special_register_p (gdbarch, regno))
{
if (arch64)
{
diff -urpN src/gdb/fbsd-nat.c dev/gdb/fbsd-nat.c
--- src/gdb/fbsd-nat.c 2007-08-23 20:08:31.000000000 +0200
+++ dev/gdb/fbsd-nat.c 2007-11-06 08:59:57.000000000 +0100
@@ -143,8 +143,8 @@ fbsd_find_memory_regions (int (*func) (C
char *
fbsd_make_corefile_notes (bfd *obfd, int *note_size)
{
- struct gdbarch *gdbarch = current_gdbarch;
const struct regcache *regcache = get_current_regcache ();
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
gregset_t gregs;
fpregset_t fpregs;
char *note_data = NULL;
diff -urpN src/gdb/gnu-v3-abi.c dev/gdb/gnu-v3-abi.c
--- src/gdb/gnu-v3-abi.c 2007-09-23 18:25:05.000000000 +0200
+++ dev/gdb/gnu-v3-abi.c 2007-11-06 09:01:01.000000000 +0100
@@ -98,9 +98,7 @@ enum {
described above, laid out appropriately for ARCH.
We use this function as the gdbarch per-architecture data
- initialization function. We assume that the gdbarch framework
- calls the per-architecture data initialization functions after it
- sets current_gdbarch to the new architecture. */
+ initialization function. */
static void *
build_gdb_vtable_type (struct gdbarch *arch)
{
@@ -116,7 +114,7 @@ build_gdb_vtable_type (struct gdbarch *a
/* ARCH can't give us the true ptrdiff_t type, so we guess. */
struct type *ptrdiff_type
= init_type (TYPE_CODE_INT,
- gdbarch_ptr_bit (current_gdbarch) / TARGET_CHAR_BIT, 0,
+ gdbarch_ptr_bit (arch) / TARGET_CHAR_BIT, 0,
"ptrdiff_t", 0);
/* We assume no padding is necessary, since GDB doesn't know
@@ -680,12 +678,12 @@ static CORE_ADDR
gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
{
CORE_ADDR real_stop_pc, method_stop_pc;
+ struct gdbarch *gdbarch = get_frame_arch (frame);
struct minimal_symbol *thunk_sym, *fn_sym;
struct obj_section *section;
char *thunk_name, *fn_name;
- real_stop_pc = gdbarch_skip_trampoline_code
- (current_gdbarch, frame, stop_pc);
+ real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
if (real_stop_pc == 0)
real_stop_pc = stop_pc;
@@ -709,7 +707,7 @@ gnuv3_skip_trampoline (struct frame_info
method_stop_pc = SYMBOL_VALUE_ADDRESS (fn_sym);
real_stop_pc = gdbarch_skip_trampoline_code
- (current_gdbarch, frame, method_stop_pc);
+ (gdbarch, frame, method_stop_pc);
if (real_stop_pc == 0)
real_stop_pc = method_stop_pc;
diff -urpN src/gdb/shnbsd-tdep.c dev/gdb/shnbsd-tdep.c
--- src/gdb/shnbsd-tdep.c 2007-08-23 20:08:38.000000000 +0200
+++ dev/gdb/shnbsd-tdep.c 2007-11-06 08:59:57.000000000 +0100
@@ -67,14 +67,14 @@ shnbsd_supply_gregset (const struct regs
struct regcache *regcache,
int regnum, const void *gregs, size_t len)
{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
const gdb_byte *regs = gregs;
int i;
gdb_assert (len >= SHNBSD_SIZEOF_GREGS);
- if (regnum == gdbarch_pc_regnum (current_gdbarch) || regnum == -1)
- regcache_raw_supply (regcache,
- gdbarch_pc_regnum (current_gdbarch),
+ if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
+ regcache_raw_supply (regcache, gdbarch_pc_regnum (gdbarch),
regs + (0 * 4));
if (regnum == SR_REGNUM || regnum == -1)
@@ -106,13 +106,14 @@ shnbsd_collect_gregset (const struct reg
const struct regcache *regcache,
int regnum, void *gregs, size_t len)
{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
gdb_byte *regs = gregs;
int i;
gdb_assert (len >= SHNBSD_SIZEOF_GREGS);
- if (regnum == gdbarch_pc_regnum (current_gdbarch) || regnum == -1)
- regcache_raw_collect (regcache, gdbarch_pc_regnum (current_gdbarch),
+ if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
+ regcache_raw_collect (regcache, gdbarch_pc_regnum (gdbarch),
regs + (0 * 4));
if (regnum == SR_REGNUM || regnum == -1)
diff -urpN src/gdb/xstormy16-tdep.c dev/gdb/xstormy16-tdep.c
--- src/gdb/xstormy16-tdep.c 2007-11-05 05:32:22.000000000 +0100
+++ dev/gdb/xstormy16-tdep.c 2007-11-06 08:59:57.000000000 +0100
@@ -705,7 +705,7 @@ xstormy16_frame_prev_register (struct fr
{
/* Read the value in from memory. */
read_memory (*addrp, valuep,
- register_size (current_gdbarch, regnum));
+ register_size (get_frame_arch (next_frame), regnum));
}
return;
}