aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/ppc-linux-nat.c73
2 files changed, 46 insertions, 38 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c527976..5bbf94c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@
+2002-02-18 Elena Zannoni <ezannoni@redhat.com>
+
+ * ppc-linux-nat.c: Update copyright.
+ (fetch_register, store_register): Add tid parameter, don't compute
+ tid here.
+ (fetch_ppc_registers, store_ppc_registers): Add tid
+ parameter. Pass it along to callees.
+ (fetch_inferior_registers, store_inferior_registers): Compute tid
+ here, and pass it to calleed functions.
+ (fill_gregset, supply_fpregset): Clean up formatting.
+
2002-02-18 Richard Earnshaw <rearnsha@arm.com>
* arm-tdep.c (arm_gdbarch_init): Initialize coerce_float_to_double.
diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
index dac59d4..baad6bb 100644
--- a/gdb/ppc-linux-nat.c
+++ b/gdb/ppc-linux-nat.c
@@ -1,5 +1,5 @@
/* PPC linux native support.
- Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001
+ Copyright 1988, 1989, 1991, 1992, 1994, 1996, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of GDB.
@@ -16,7 +16,8 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "frame.h"
@@ -109,14 +110,13 @@ ppc_ptrace_cannot_fetch_store_register (int regno)
}
static void
-fetch_register (int regno)
+fetch_register (int tid, int regno)
{
/* This isn't really an address. But ptrace thinks of it as one. */
char mess[128]; /* For messages */
register int i;
unsigned int offset; /* Offset of registers within the u area. */
char *buf = alloca (MAX_REGISTER_RAW_SIZE);
- int tid;
CORE_ADDR regaddr = ppc_register_u_addr (regno);
if (regaddr == -1)
@@ -126,10 +126,6 @@ fetch_register (int regno)
return;
}
- /* Overload thread id onto process id */
- if ((tid = TIDGET (inferior_ptid)) == 0)
- tid = PIDGET (inferior_ptid); /* no thread id, just use process id */
-
for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
{
errno = 0;
@@ -147,13 +143,13 @@ fetch_register (int regno)
}
static void
-fetch_ppc_registers (void)
+fetch_ppc_registers (int tid)
{
int i;
int last_register = gdbarch_tdep (current_gdbarch)->ppc_mq_regnum;
for (i = 0; i <= last_register; i++)
- fetch_register (i);
+ fetch_register (tid, i);
}
/* Fetch registers from the child process. Fetch all registers if
@@ -162,22 +158,28 @@ fetch_ppc_registers (void)
void
fetch_inferior_registers (int regno)
{
- if (regno == -1)
- fetch_ppc_registers ();
+ /* Overload thread id onto process id */
+ int tid = TIDGET (inferior_ptid);
+
+ /* No thread id, just use process id */
+ if (tid == 0)
+ tid = PIDGET (inferior_ptid);
+
+ if (regno == -1)
+ fetch_ppc_registers (tid);
else
- fetch_register (regno);
+ fetch_register (tid, regno);
}
/* Store one register. */
static void
-store_register (int regno)
+store_register (int tid, int regno)
{
/* This isn't really an address. But ptrace thinks of it as one. */
CORE_ADDR regaddr = ppc_register_u_addr (regno);
char mess[128]; /* For messages */
register int i;
unsigned int offset; /* Offset of registers within the u area. */
- int tid;
char *buf = alloca (MAX_REGISTER_RAW_SIZE);
if (regaddr == -1)
@@ -185,10 +187,6 @@ store_register (int regno)
return;
}
- /* Overload thread id onto process id */
- if ((tid = TIDGET (inferior_ptid)) == 0)
- tid = PIDGET (inferior_ptid); /* no thread id, just use process id */
-
regcache_collect (regno, buf);
for (i = 0; i < REGISTER_RAW_SIZE (regno); i += sizeof (PTRACE_XFER_TYPE))
{
@@ -206,22 +204,29 @@ store_register (int regno)
}
static void
-store_ppc_registers (void)
+store_ppc_registers (int tid)
{
int i;
int last_register = gdbarch_tdep (current_gdbarch)->ppc_mq_regnum;
for (i = 0; i <= last_register; i++)
- store_register (i);
+ store_register (tid, i);
}
void
store_inferior_registers (int regno)
{
+ /* Overload thread id onto process id */
+ int tid = TIDGET (inferior_ptid);
+
+ /* No thread id, just use process id */
+ if (tid == 0)
+ tid = PIDGET (inferior_ptid);
+
if (regno >= 0)
- store_register (regno);
+ store_register (tid, regno);
else
- store_ppc_registers ();
+ store_ppc_registers (tid);
}
void
@@ -258,23 +263,17 @@ fill_gregset (gdb_gregset_t *gregsetp, int regno)
if ((regno == -1) || regno == PC_REGNUM)
regcache_collect (PC_REGNUM, regp + PT_NIP);
- if ((regno == -1)
- || regno == tdep->ppc_lr_regnum)
+ if ((regno == -1) || regno == tdep->ppc_lr_regnum)
regcache_collect (tdep->ppc_lr_regnum, regp + PT_LNK);
- if ((regno == -1)
- || regno == tdep->ppc_cr_regnum)
+ if ((regno == -1) || regno == tdep->ppc_cr_regnum)
regcache_collect (tdep->ppc_cr_regnum, regp + PT_CCR);
- if ((regno == -1)
- || regno == tdep->ppc_xer_regnum)
+ if ((regno == -1) || regno == tdep->ppc_xer_regnum)
regcache_collect (tdep->ppc_xer_regnum, regp + PT_XER);
- if ((regno == -1)
- || regno == tdep->ppc_ctr_regnum)
+ if ((regno == -1) || regno == tdep->ppc_ctr_regnum)
regcache_collect (tdep->ppc_ctr_regnum, regp + PT_CTR);
- if ((regno == -1)
- || regno == tdep->ppc_mq_regnum)
+ if ((regno == -1) || regno == tdep->ppc_mq_regnum)
regcache_collect (tdep->ppc_mq_regnum, regp + PT_MQ);
- if ((regno == -1)
- || regno == tdep->ppc_ps_regnum)
+ if ((regno == -1) || regno == tdep->ppc_ps_regnum)
regcache_collect (tdep->ppc_ps_regnum, regp + PT_MSR);
}
@@ -283,9 +282,7 @@ supply_fpregset (gdb_fpregset_t * fpregsetp)
{
int regi;
for (regi = 0; regi < 32; regi++)
- {
- supply_register (FP0_REGNUM + regi, (char *) (*fpregsetp + regi));
- }
+ supply_register (FP0_REGNUM + regi, (char *) (*fpregsetp + regi));
}
/* Given a pointer to a floating point register set in /proc format