2003-05-02 Andrew Cagney <cagney@redhat.com>

* sentinel-frame.c (sentinel_frame_prev_register): Replace
	REGISTER_BYTE with register_offset_hack.
	* regcache.c (init_regcache_descr): When REGISTER_BYTE_P, check
	that REGISTER_BYTE is consistent with the regcache.
	* gdbarch.sh (REGISTER_BYTE): Add a predicate.
	* gdbarch.h, gdbarch.c: Regenerate.
This commit is contained in:
Andrew Cagney 2003-05-04 17:34:51 +00:00
parent 54ff590850
commit 46654a5bcc
6 changed files with 73 additions and 12 deletions

View File

@ -1,3 +1,12 @@
2003-05-04 Andrew Cagney <cagney@redhat.com>
* sentinel-frame.c (sentinel_frame_prev_register): Replace
REGISTER_BYTE with register_offset_hack.
* regcache.c (init_regcache_descr): When REGISTER_BYTE_P, check
that REGISTER_BYTE is consistent with the regcache.
* gdbarch.sh (REGISTER_BYTE): Add a predicate.
* gdbarch.h, gdbarch.c: Regenerate.
2003-05-04 Mark Kettenis <kettenis@gnu.org>
* i387-tdep.c (fxsave_offset): Add entries for %xmm8-%xmm15.

View File

@ -643,7 +643,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of sdb_reg_to_regnum, invalid_p == 0 */
/* Skip verify of dwarf2_reg_to_regnum, invalid_p == 0 */
/* Skip verify of register_name, invalid_p == 0 */
/* Skip verify of register_byte, invalid_p == 0 */
/* Skip verify of register_byte, has predicate */
/* Skip verify of register_raw_size, invalid_p == 0 */
/* Skip verify of deprecated_max_register_raw_size, has predicate */
/* Skip verify of register_virtual_size, invalid_p == 0 */
@ -1975,6 +1975,15 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
fprintf_unfiltered (file,
"gdbarch_dump: push_dummy_code = 0x%08lx\n",
(long) current_gdbarch->push_dummy_code);
#ifdef REGISTER_BYTE_P
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
"REGISTER_BYTE_P()",
XSTRING (REGISTER_BYTE_P ()));
fprintf_unfiltered (file,
"gdbarch_dump: REGISTER_BYTE_P() = %d\n",
REGISTER_BYTE_P ());
#endif
#ifdef REGISTER_BYTE
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
@ -3317,6 +3326,13 @@ set_gdbarch_register_bytes (struct gdbarch *gdbarch,
gdbarch->register_bytes = register_bytes;
}
int
gdbarch_register_byte_p (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
return gdbarch->register_byte != generic_register_byte;
}
int
gdbarch_register_byte (struct gdbarch *gdbarch, int reg_nr)
{
@ -3324,6 +3340,7 @@ gdbarch_register_byte (struct gdbarch *gdbarch, int reg_nr)
if (gdbarch->register_byte == 0)
internal_error (__FILE__, __LINE__,
"gdbarch: gdbarch_register_byte invalid");
/* Ignore predicate (gdbarch->register_byte != generic_register_byte). */
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_register_byte called\n");
return gdbarch->register_byte (reg_nr);

View File

@ -739,6 +739,32 @@ extern void set_gdbarch_register_bytes (struct gdbarch *gdbarch, int register_by
#define REGISTER_BYTES (gdbarch_register_bytes (current_gdbarch))
#endif
/* NOTE: cagney/2002-05-02: This function with predicate has a valid
(callable) initial value. As a consequence, even when the predicate
is false, the corresponding function works. This simplifies the
migration process - old code, calling REGISTER_BYTE, doesn't need to
be modified. */
#if defined (REGISTER_BYTE)
/* Legacy for systems yet to multi-arch REGISTER_BYTE */
#if !defined (REGISTER_BYTE_P)
#define REGISTER_BYTE_P() (1)
#endif
#endif
/* Default predicate for non- multi-arch targets. */
#if (!GDB_MULTI_ARCH) && !defined (REGISTER_BYTE_P)
#define REGISTER_BYTE_P() (0)
#endif
extern int gdbarch_register_byte_p (struct gdbarch *gdbarch);
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTE_P)
#error "Non multi-arch definition of REGISTER_BYTE"
#endif
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTE_P)
#define REGISTER_BYTE_P() (gdbarch_register_byte_p (current_gdbarch))
#endif
/* Default (function) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (REGISTER_BYTE)
#define REGISTER_BYTE(reg_nr) (generic_register_byte (reg_nr))

View File

@ -474,7 +474,12 @@ f:2:DWARF2_REG_TO_REGNUM:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr:
f:2:REGISTER_NAME:const char *:register_name:int regnr:regnr:::legacy_register_name::0
v::REGISTER_SIZE:int:register_size
v::REGISTER_BYTES:int:register_bytes
f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::generic_register_byte:generic_register_byte::0
# NOTE: cagney/2002-05-02: This function with predicate has a valid
# (callable) initial value. As a consequence, even when the predicate
# is false, the corresponding function works. This simplifies the
# migration process - old code, calling REGISTER_BYTE, doesn't need to
# be modified.
F::REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::generic_register_byte:generic_register_byte
# The methods REGISTER_VIRTUAL_TYPE, MAX_REGISTER_RAW_SIZE,
# MAX_REGISTER_VIRTUAL_SIZE, MAX_REGISTER_RAW_SIZE,
# REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE are all being replaced

View File

@ -187,6 +187,12 @@ init_regcache_descr (struct gdbarch *gdbarch)
&& !gdbarch_pseudo_register_write_p (gdbarch)
&& !gdbarch_register_type_p (gdbarch))
{
/* NOTE: cagney/2003-05-02: Don't add a test for REGISTER_BYTE_P
to the above. Doing that would cause all the existing
architectures to revert back to the legacy regcache
mechanisms, and that is not a good thing. Instead just,
later, check that the register cache's layout is consistent
with REGISTER_BYTE. */
descr->legacy_p = 1;
init_legacy_regcache_descr (gdbarch, descr);
return descr;
@ -233,21 +239,19 @@ init_regcache_descr (struct gdbarch *gdbarch)
buffer. Ulgh! */
descr->sizeof_raw_registers = descr->sizeof_cooked_registers;
#if 0
/* Sanity check. Confirm that the assumptions about gdbarch are
true. The REGCACHE_DESCR_HANDLE is set before doing the checks
so that targets using the generic methods supplied by regcache
don't go into infinite recursion trying to, again, create the
regcache. */
set_gdbarch_data (gdbarch, regcache_descr_handle, descr);
/* Sanity check. Confirm that there is agreement between the
regcache and the target's redundant REGISTER_BYTE (new targets
should not even be defining it). */
for (i = 0; i < descr->nr_cooked_registers; i++)
{
if (REGISTER_BYTE_P ())
gdb_assert (descr->register_offset[i] == REGISTER_BYTE (i));
#if 0
gdb_assert (descr->sizeof_register[i] == REGISTER_RAW_SIZE (i));
gdb_assert (descr->sizeof_register[i] == REGISTER_VIRTUAL_SIZE (i));
gdb_assert (descr->register_offset[i] == REGISTER_BYTE (i));
#endif
}
/* gdb_assert (descr->sizeof_raw_registers == REGISTER_BYTES (i)); */
#endif
return descr;
}

View File

@ -56,7 +56,7 @@ sentinel_frame_prev_register (struct frame_info *next_frame,
onto the corresponding hardware register. */
*optimized = 0;
*lvalp = lval_register;
*addrp = REGISTER_BYTE (regnum);
*addrp = register_offset_hack (current_gdbarch, regnum);
*realnum = regnum;
/* If needed, find and return the value of the register. */