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.
This commit is contained in:
Michael Chastain 2000-12-08 01:52:41 +00:00
parent df38a86eec
commit 7c721b2a2a
2 changed files with 34 additions and 21 deletions

View file

@ -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.

View file

@ -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 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 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.
(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.)
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.
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 contain a pointer to the
register name table; that would be cleaner. */
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;