diff options
author | Michael Chastain <mec@google.com> | 2000-12-08 01:52:41 +0000 |
---|---|---|
committer | Michael Chastain <mec@google.com> | 2000-12-08 01:52:41 +0000 |
commit | 7c721b2a2a3499fbe6559ddd2ec5910983171ed4 (patch) | |
tree | 34f78d84d5be6f355371da45392613adcb7c1f54 /sim/ppc | |
parent | df38a86eec9c83314d6f859af839a7fe3aa1881a (diff) | |
download | binutils-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/ChangeLog | 7 | ||||
-rw-r--r-- | sim/ppc/sim_calls.c | 54 |
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; |