From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6331 invoked by alias); 15 Feb 2008 11:02:02 -0000 Received: (qmail 6289 invoked by uid 22791); 15 Feb 2008 11:02:00 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate2.de.ibm.com (HELO mtagate2.de.ibm.com) (195.212.29.151) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 15 Feb 2008 11:01:39 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate2.de.ibm.com (8.13.8/8.13.8) with ESMTP id m1FB1a6v152210 for ; Fri, 15 Feb 2008 11:01:36 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.7) with ESMTP id m1FB1ZMj2302186 for ; Fri, 15 Feb 2008 12:01:35 +0100 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m1FB1ZlF017204 for ; Fri, 15 Feb 2008 11:01:35 GMT Received: from bbkeks.de.ibm.com (dyn-9-152-248-39.boeblingen.de.ibm.com [9.152.248.39]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id m1FB1YY3017160 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 Feb 2008 11:01:35 GMT Message-ID: <47B5709A.6050209@de.ibm.com> Date: Fri, 15 Feb 2008 11:02:00 -0000 From: Markus Deuling User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: GDB Patches CC: Ulrich Weigand Subject: [rfc] Replace some current_gdbarchs in *ppc* Content-Type: multipart/mixed; boundary="------------080506090401060101000909" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-02/txt/msg00251.txt.bz2 This is a multi-part message in MIME format. --------------080506090401060101000909 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1196 Hi, this patch replaces some current_gdbarchs in *ppc* targets. I tested this patch on PowerPC without regression. As I do not have an OpenBSD on PowerPC machine here maybe someone of you has and is willing to test it native? Thanks a lot! Is this patch ok to commit ? ChangeLog: * rs6000-nat.c (exec_one_dummy_insn, regmap): Add gdbarch as parameter and replace current_gdbarch by gdbarch. (store_register): Update call for exec_one_dummy_insn. (fetch_register, store_register): Update call of regmap. * ppcnbsd-nat.c (getregs_supplies, getfpregs_supplies): Add gdbarch as parameter and replace current_gdbarch by gdbarch. (ppcnbsd_store_inferior_registers): Use get_regcache_arch to get at the current architecture. Update call for getregs_supplies and getfpregs_supplies. (ppcnbsd_fetch_inferior_registers): Likewise. * ppcobsd-nat.c (getfpregs_supplies): Add gdbarch as parameter and replace current_gdbarch by gdbarch. (ppcobsd_fetch_registers, ppcobsd_store_registers): Use get_regcache_arch to get at the current architecture. Update call for getfpregs_supplies. Regards, Markus -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com --------------080506090401060101000909 Content-Type: text/plain; name="diff-ppc" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diff-ppc" Content-length: 7176 diff -urpN src.orig/gdb/ppcnbsd-nat.c src/gdb/ppcnbsd-nat.c --- src.orig/gdb/ppcnbsd-nat.c 2008-01-01 23:53:12.000000000 +0100 +++ src/gdb/ppcnbsd-nat.c 2008-02-15 11:00:18.000000000 +0100 @@ -41,9 +41,9 @@ /* Returns true if PT_GETREGS fetches this register. */ static int -getregs_supplies (int regnum) +getregs_supplies (struct gdbarch *gdbarch, int regnum) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); return ((regnum >= tdep->ppc_gp0_regnum && regnum < tdep->ppc_gp0_regnum + ppc_num_gprs) @@ -51,15 +51,15 @@ getregs_supplies (int regnum) || regnum == tdep->ppc_cr_regnum || regnum == tdep->ppc_xer_regnum || regnum == tdep->ppc_ctr_regnum - || regnum == gdbarch_pc_regnum (current_gdbarch)); + || regnum == gdbarch_pc_regnum (gdbarch)); } /* Like above, but for PT_GETFPREGS. */ static int -getfpregs_supplies (int regnum) +getfpregs_supplies (struct gdbarch *gdbarch, int regnum) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* FIXME: jimb/2004-05-05: Some PPC variants don't have floating point registers. Traditionally, GDB's register set has still @@ -71,7 +71,7 @@ getfpregs_supplies (int regnum) It's not clear to me how best to update this code, so this assert will alert the first person to encounter the NetBSD/E500 combination to the problem. */ - gdb_assert (ppc_floating_point_unit_p (current_gdbarch)); + gdb_assert (ppc_floating_point_unit_p (gdbarch)); return ((regnum >= tdep->ppc_fp0_regnum && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs) @@ -81,7 +81,9 @@ getfpregs_supplies (int regnum) static void ppcnbsd_fetch_inferior_registers (struct regcache *regcache, int regnum) { - if (regnum == -1 || getregs_supplies (regnum)) + struct gdbarch *gdbarch = get_regcache_arch (regcache); + + if (regnum == -1 || getregs_supplies (gdbarch, regnum)) { struct reg regs; @@ -93,7 +95,7 @@ ppcnbsd_fetch_inferior_registers (struct regnum, ®s, sizeof regs); } - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 || getfpregs_supplies (gdbarch, regnum)) { struct fpreg fpregs; @@ -109,7 +111,9 @@ ppcnbsd_fetch_inferior_registers (struct static void ppcnbsd_store_inferior_registers (struct regcache *regcache, int regnum) { - if (regnum == -1 || getregs_supplies (regnum)) + struct gdbarch *gdbarch = get_regcache_arch (regcache); + + if (regnum == -1 || getregs_supplies (gdbarch, regnum)) { struct reg regs; @@ -125,7 +129,7 @@ ppcnbsd_store_inferior_registers (struct perror_with_name (_("Couldn't write registers")); } - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 || getfpregs_supplies (gdbarch, regnum)) { struct fpreg fpregs; diff -urpN src.orig/gdb/ppcobsd-nat.c src/gdb/ppcobsd-nat.c --- src.orig/gdb/ppcobsd-nat.c 2008-01-01 23:53:12.000000000 +0100 +++ src/gdb/ppcobsd-nat.c 2008-02-15 11:04:53.000000000 +0100 @@ -45,9 +45,9 @@ /* Returns true if PT_GETFPREGS fetches this register. */ static int -getfpregs_supplies (int regnum) +getfpregs_supplies (struct gdbarch *gdbarch, int regnum) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); /* FIXME: jimb/2004-05-05: Some PPC variants don't have floating point registers. Traditionally, GDB's register set has still @@ -59,7 +59,7 @@ getfpregs_supplies (int regnum) It's not clear to me how best to update this code, so this assert will alert the first person to encounter the NetBSD/E500 combination to the problem. */ - gdb_assert (ppc_floating_point_unit_p (current_gdbarch)); + gdb_assert (ppc_floating_point_unit_p (gdbarch)); return ((regnum >= tdep->ppc_fp0_regnum && regnum < tdep->ppc_fp0_regnum + ppc_num_fprs) @@ -88,7 +88,8 @@ ppcobsd_fetch_registers (struct regcache #endif #ifdef PT_GETFPREGS - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 + || getfpregs_supplies (get_regcache_arch (regcache), regnum)) { struct fpreg fpregs; @@ -126,7 +127,8 @@ ppcobsd_store_registers (struct regcache perror_with_name (_("Couldn't write registers")); #ifdef PT_GETFPREGS - if (regnum == -1 || getfpregs_supplies (regnum)) + if (regnum == -1 + || getfpregs_supplies (get_regcache_arch (regcache), regnum)) { struct fpreg fpregs; diff -urpN src.orig/gdb/rs6000-nat.c src/gdb/rs6000-nat.c --- src.orig/gdb/rs6000-nat.c 2008-01-16 12:21:15.000000000 +0100 +++ src/gdb/rs6000-nat.c 2008-02-15 10:49:45.000000000 +0100 @@ -130,7 +130,7 @@ static int objfile_symbol_add (void *); static void vmap_symtab (struct vmap *); -static void exec_one_dummy_insn (void); +static void exec_one_dummy_insn (struct gdbarch *); extern void fixup_breakpoints (CORE_ADDR low, CORE_ADDR high, CORE_ADDR delta); @@ -140,9 +140,9 @@ extern void fixup_breakpoints (CORE_ADDR ISFLOAT to indicate whether REGNO is a floating point register. */ static int -regmap (int regno, int *isfloat) +regmap (struct gdbarch *gdbarch, int regno, int *isfloat) { - struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); *isfloat = 0; if (tdep->ppc_gp0_regnum <= regno @@ -155,7 +155,7 @@ regmap (int regno, int *isfloat) *isfloat = 1; return regno - tdep->ppc_fp0_regnum + FPR0; } - else if (regno == gdbarch_pc_regnum (current_gdbarch)) + else if (regno == gdbarch_pc_regnum (gdbarch)) return IAR; else if (regno == tdep->ppc_ps_regnum) return MSR; @@ -218,7 +218,7 @@ fetch_register (struct regcache *regcach /* Retrieved values may be -1, so infer errors from errno. */ errno = 0; - nr = regmap (regno, &isfloat); + nr = regmap (gdbarch, regno, &isfloat); /* Floating-point registers. */ if (isfloat) @@ -279,7 +279,7 @@ store_register (const struct regcache *r /* -1 can be a successful return value, so infer errors from errno. */ errno = 0; - nr = regmap (regno, &isfloat); + nr = regmap (gdbarch, regno, &isfloat); /* Floating-point registers. */ if (isfloat) @@ -303,7 +303,7 @@ store_register (const struct regcache *r Otherwise the following ptrace(2) calls will mess up user stack since kernel will get confused about the bottom of the stack (%sp). */ - exec_one_dummy_insn (); + exec_one_dummy_insn (gdbarch); /* The PT_WRITE_GPR operation is rather odd. For 32-bit inferiors, the register's value is passed by value, but for 64-bit inferiors, @@ -576,9 +576,9 @@ rs6000_wait (ptid_t ptid, struct target_ including u_area. */ static void -exec_one_dummy_insn (void) +exec_one_dummy_insn (struct gdbarch *gdbarch) { -#define DUMMY_INSN_ADDR gdbarch_tdep (current_gdbarch)->text_segment_base+0x200 +#define DUMMY_INSN_ADDR gdbarch_tdep (gdbarch)->text_segment_base+0x200 int ret, status, pid; CORE_ADDR prev_pc; --------------080506090401060101000909--