2004-08-04 Andrew Cagney <cagney@gnu.org>
authorAndrew Cagney <cagney@redhat.com>
Wed, 4 Aug 2004 18:09:34 +0000 (18:09 +0000)
committerAndrew Cagney <cagney@redhat.com>
Wed, 4 Aug 2004 18:09:34 +0000 (18:09 +0000)
* Back out accidently committed change.

sim/ppc/ChangeLog
sim/ppc/Makefile.in
sim/ppc/sim_calls.c

index d75acc87da75d60534c085d4af8de39693c34f79..6f124d72a8b8d0da5b3c7c36511d98c46f549cdc 100644 (file)
@@ -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
index ffddb1da4c09dab1cb92ee3309baf4dd96f3f616..5e00a43c3a811c37120d3d94530d8e5f7cf60b15 100644 (file)
@@ -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)
 
index b5cb72d6ee1ef81152f4af8d8f8a24f09f6c94a8..040ce83320291cab7967a139a0bdadc13068ace0 100644 (file)
@@ -25,7 +25,6 @@
 
 #include "psim.h"
 #include "options.h"
-#include "registers.h"
 
 #undef printf_filtered /* blow away the mapping */
 
 #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",