2004-08-04 Andrew Cagney <cagney@gnu.org>
* Back out accidently committed change.
This commit is contained in:
parent
7ab3286fbe
commit
f37b123d33
@ -1,3 +1,7 @@
|
||||
2004-08-04 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
* Back out accidently committed change.
|
||||
|
||||
2004-08-04 Jim Blandy <jimb@redhat.com>
|
||||
|
||||
Use a fixed register numbering when communicating with the PowerPC
|
||||
|
@ -172,9 +172,9 @@ all: run $(TARGETLIB) $(GDB_OBJ)
|
||||
# Headers outside sim/ppc.
|
||||
ANSIDECL_H = $(srcroot)/include/ansidecl.h
|
||||
BFD_H = ../../bfd/bfd.h
|
||||
DEFS_H = $(srcroot)/gdb/defs.h
|
||||
GDB_CALLBACK_H = $(srcroot)/include/gdb/callback.h
|
||||
GDB_REMOTE_SIM_H = $(srcroot)/include/gdb/remote-sim.h
|
||||
GDB_SIM_PPC_H = $(srcroot)/include/gdb/sim-ppc.h
|
||||
COMMON_SIM_BASE_H = $(srcroot)/sim/common/sim-base.h
|
||||
COMMON_SIM_BASICS_H = $(srcroot)/sim/common/sim-basics.h
|
||||
COMMON_SIM_FPU_H = $(srcroot)/sim/common/sim-fpu.h
|
||||
@ -597,7 +597,7 @@ model.o: model.c $(CPU_H) $(MON_H)
|
||||
|
||||
events.o: events.c $(BASICS_H) $(EVENTS_H)
|
||||
|
||||
sim_calls.o: sim_calls.c $(PSIM_H) $(OPTIONS_H) $(REGISTERS_H) $(BFD_H) $(GDB_CALLBACK_H) $(GDB_REMOTE_SIM_H) $(GDB_SIM_PPC_H)
|
||||
sim_calls.o: sim_calls.c $(PSIM_H) $(OPTIONS_H) $(DEFS_H) $(BFD_H) $(GDB_CALLBACK_H) $(GDB_REMOTE_SIM_H)
|
||||
|
||||
spreg.o: spreg.c $(BASICS_H) $(SPREG_H)
|
||||
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
#include "psim.h"
|
||||
#include "options.h"
|
||||
#include "registers.h"
|
||||
|
||||
#undef printf_filtered /* blow away the mapping */
|
||||
|
||||
@ -41,10 +40,10 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "defs.h"
|
||||
#include "bfd.h"
|
||||
#include "gdb/callback.h"
|
||||
#include "gdb/remote-sim.h"
|
||||
#include "gdb/sim-ppc.h"
|
||||
|
||||
/* Define the rate at which the simulator should poll the host
|
||||
for a quit. */
|
||||
@ -60,6 +59,29 @@ static psim *simulator;
|
||||
static device *root_device;
|
||||
static host_callback *callbacks;
|
||||
|
||||
/* We use GDB's gdbarch_register_name function to map GDB register
|
||||
numbers onto names, which we can then look up in the register
|
||||
table. Since the `set architecture' command can select a new
|
||||
processor variant at run-time, the meanings of the register numbers
|
||||
can change, so we need to make sure the sim uses the same
|
||||
name/number mapping that GDB uses.
|
||||
|
||||
(We don't use the REGISTER_NAME macro, which is a wrapper for
|
||||
gdbarch_register_name. We #include GDB's "defs.h", which tries to
|
||||
#include GDB's "config.h", but gets ours instead, and REGISTER_NAME
|
||||
ends up not getting defined. Simpler to just use
|
||||
gdbarch_register_name directly.)
|
||||
|
||||
We used to just use the REGISTER_NAMES macro from GDB's
|
||||
target-dependent header files, which expanded into an initializer
|
||||
for an array of strings. That was kind of nice, because it meant
|
||||
that libsim.a had only a compile-time dependency on GDB; using
|
||||
gdbarch_register_name directly means that there are now link-time
|
||||
and run-time dependencies too.
|
||||
|
||||
Perhaps the host_callback structure could provide a function for
|
||||
retrieving register names; that would be cleaner. */
|
||||
|
||||
SIM_DESC
|
||||
sim_open (SIM_OPEN_KIND kind,
|
||||
host_callback *callback,
|
||||
@ -155,82 +177,6 @@ sim_write (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)
|
||||
}
|
||||
|
||||
|
||||
/* A table mapping register numbers (as received from GDB) to register
|
||||
names. This table does not handle special-purpose registers: the
|
||||
SPR whose number is N is assigned the register number
|
||||
sim_ppc_spr0_regnum + N. */
|
||||
static const char *gdb_register_name_table[] = {
|
||||
|
||||
/* General-purpose registers: 0 .. 31. */
|
||||
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
||||
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
|
||||
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
|
||||
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
|
||||
|
||||
/* Floating-point registers: 32 .. 63. */
|
||||
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
|
||||
"f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
|
||||
"f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
|
||||
"f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
|
||||
|
||||
/* Altivec registers: 64 .. 95. */
|
||||
"vr0", "vr1", "vr2", "vr3", "vr4", "vr5", "vr6", "vr7",
|
||||
"vr8", "vr9", "vr10", "vr11", "vr12", "vr13", "vr14", "vr15",
|
||||
"vr16", "vr17", "vr18", "vr19", "vr20", "vr21", "vr22", "vr23",
|
||||
"vr24", "vr25", "vr26", "vr27", "vr28", "vr29", "vr30", "vr31",
|
||||
|
||||
/* SPE APU GPR upper halves: 96 .. 127. */
|
||||
"rh0", "rh1", "rh2", "rh3", "rh4", "rh5", "rh6", "rh7",
|
||||
"rh8", "rh9", "rh10", "rh11", "rh12", "rh13", "rh14", "rh15",
|
||||
"rh16", "rh17", "rh18", "rh19", "rh20", "rh21", "rh22", "rh23",
|
||||
"rh24", "rh25", "rh26", "rh27", "rh28", "rh29", "rh30", "rh31",
|
||||
|
||||
/* SPE APU full 64-bit vector registers: 128 .. 159. */
|
||||
"ev0", "ev1", "ev2", "ev3", "ev4", "ev5", "ev6", "ev7",
|
||||
"ev8", "ev9", "ev10", "ev11", "ev12", "ev13", "ev14", "ev15",
|
||||
"ev16", "ev17", "ev18", "ev19", "ev20", "ev21", "ev22", "ev23",
|
||||
"ev24", "ev25", "ev26", "ev27", "ev28", "ev29", "ev30", "ev31",
|
||||
|
||||
/* Segment registers: 160 .. 175. */
|
||||
"sr0", "sr1", "sr2", "sr3", "sr4", "sr5", "sr6", "sr7",
|
||||
"sr8", "sr9", "sr10", "sr11", "sr12", "sr13", "sr14", "sr15",
|
||||
|
||||
/* Miscellaneous (not special-purpose!) registers: 176 .. 181. */
|
||||
"pc", "ps", "cr", "fpscr", "acc", "vscr"
|
||||
};
|
||||
|
||||
enum {
|
||||
gdb_register_name_table_size = (sizeof (gdb_register_name_table)
|
||||
/ sizeof (gdb_register_name_table[0])),
|
||||
};
|
||||
|
||||
|
||||
/* Return the name of the register whose number is REGNUM, or zero if
|
||||
REGNUM is an invalid register number. */
|
||||
static const char *
|
||||
gdb_register_name (int regnum)
|
||||
{
|
||||
/* Is it a special-purpose register? */
|
||||
if (sim_ppc_spr0_regnum <= regnum
|
||||
&& regnum < sim_ppc_spr0_regnum + sim_ppc_num_sprs)
|
||||
{
|
||||
int spr = regnum - sim_ppc_spr0_regnum;
|
||||
if (spr_is_valid (spr))
|
||||
return spr_name (spr);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Is it a valid non-SPR register number? */
|
||||
else if (0 <= regnum && regnum < gdb_register_name_table_size)
|
||||
return gdb_register_name_table[regnum];
|
||||
|
||||
/* Not a valid register number at all. */
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
|
||||
{
|
||||
@ -240,11 +186,15 @@ sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
|
||||
return 0;
|
||||
}
|
||||
|
||||
regname = gdb_register_name (regno);
|
||||
|
||||
/* Occasionally, GDB will pass invalid register numbers to us; it
|
||||
wants us to ignore them. */
|
||||
if (! regname)
|
||||
/* GDB will sometimes ask for the contents of a register named "";
|
||||
we ignore such requests, and leave garbage in *BUF. In GDB
|
||||
terms, the empty string means "the register with this number is
|
||||
not present in the currently selected architecture variant."
|
||||
That's following the kludge we're using for the MIPS processors.
|
||||
But there are loops that just walk through the entire list of
|
||||
names and try to get everything. */
|
||||
regname = gdbarch_register_name (current_gdbarch, regno);
|
||||
if (! regname || regname[0] == '\0')
|
||||
return -1;
|
||||
|
||||
TRACE(trace_gdb, ("sim_fetch_register(regno=%d(%s), buf=0x%lx)\n",
|
||||
@ -262,11 +212,9 @@ sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
|
||||
if (simulator == NULL)
|
||||
return 0;
|
||||
|
||||
regname = gdb_register_name (regno);
|
||||
|
||||
/* Occasionally, GDB will pass invalid register numbers to us; it
|
||||
wants us to ignore them. */
|
||||
if (! regname)
|
||||
/* See comments in sim_fetch_register, above. */
|
||||
regname = gdbarch_register_name (current_gdbarch, regno);
|
||||
if (! regname || regname[0] == '\0')
|
||||
return -1;
|
||||
|
||||
TRACE(trace_gdb, ("sim_store_register(regno=%d(%s), buf=0x%lx)\n",
|
||||
|
Loading…
x
Reference in New Issue
Block a user