aboutsummaryrefslogtreecommitdiff
path: root/sim/ppc
diff options
context:
space:
mode:
authorMichael Chastain <mec@google.com>2000-12-08 01:52:41 +0000
committerMichael Chastain <mec@google.com>2000-12-08 01:52:41 +0000
commit7c721b2a2a3499fbe6559ddd2ec5910983171ed4 (patch)
tree34f78d84d5be6f355371da45392613adcb7c1f54 /sim/ppc
parentdf38a86eec9c83314d6f859af839a7fe3aa1881a (diff)
downloadbinutils-7c721b2a2a3499fbe6559ddd2ec5910983171ed4.zip
binutils-7c721b2a2a3499fbe6559ddd2ec5910983171ed4.tar.gz
binutils-7c721b2a2a3499fbe6559ddd2ec5910983171ed4.tar.bz2
2000-11-15 Jim Blandy <jimb@redhat.com>
* sim_calls.c: Doc fix. (sim_fetch_register, sim_store_register): Call gdbarch_register_name directly, instead of going through REGISTER_NAME macro.
Diffstat (limited to 'sim/ppc')
-rw-r--r--sim/ppc/ChangeLog7
-rw-r--r--sim/ppc/sim_calls.c54
2 files changed, 37 insertions, 24 deletions
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog
index 7e7f8bd..48b6a72 100644
--- a/sim/ppc/ChangeLog
+++ b/sim/ppc/ChangeLog
@@ -1,3 +1,10 @@
+2000-11-15 Jim Blandy <jimb@redhat.com>
+
+ * sim_calls.c: Doc fix.
+ (sim_fetch_register, sim_store_register): Call
+ gdbarch_register_name directly, instead of going through
+ REGISTER_NAME macro.
+
2000-10-24 Geoff Keating <geoffk@cygnus.com>
* ppc-instructions (lfsux): Correct XO field of lfsux instruction.
diff --git a/sim/ppc/sim_calls.c b/sim/ppc/sim_calls.c
index 15df3c5..b6defa0 100644
--- a/sim/ppc/sim_calls.c
+++ b/sim/ppc/sim_calls.c
@@ -59,22 +59,28 @@ static psim *simulator;
static device *root_device;
static host_callback *callbacks;
-/* We use GDB's reg_names array to map GDB register numbers onto
- names, which we can then look up in the register table.
-
- We used to just use the REGISTER_NAMES macro, from GDB's
- target-dependent header files. That was kind of nice, because it
- meant that libsim.a had only a compile-time dependency on GDB;
- using reg_names directly means that there are now link-time and
- run-time dependencies too.
-
- However, the GDB PPC back-end now modifies the reg_names array when
- the user runs the `set processor' command, which affects the
- meanings of the register numbers. So the sim needs to see the
- register names GDB is actually using.
-
- Perhaps the host_callback structure could contain a pointer to the
- register name table; that would be cleaner. */
+/* 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,
@@ -181,13 +187,13 @@ sim_fetch_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
}
/* GDB will sometimes ask for the contents of a register named "";
- we ignore such requests, and leave garbage in *BUF. In
- REG_NAMES, 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 = REGISTER_NAME (regno);
+ 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;
@@ -208,7 +214,7 @@ sim_store_register (SIM_DESC sd, int regno, unsigned char *buf, int length)
return 0;
/* See comments in sim_fetch_register, above. */
- regname = REGISTER_NAME (regno);
+ regname = gdbarch_register_name (current_gdbarch, regno);
if (! regname || regname[0] == '\0')
return -1;