* arch-utils.h (generic_register_size): Declare.

(generic_register_raw_size, generic_register_virtual_size): Delete
declarations.
* arch-utils.c (generic_register_raw_size): Delete.
(generic_register_size): New function.
(generic_register_virtual_size): Delete.

* gdbarch.sh (REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE): Make
default generic_register_size.
* gdbarch.h, gdbarch.c: Re-generate.

* d10v-tdep.c (d10v_gdbarch_init): Use generic_register_size for
register_virtual_size.
* x86-64-tdep.c (x86_64_gdbarch_init): Ditto.
* rs6000-tdep.c (rs6000_gdbarch_init): Ditto.

* gdbint.texinfo (Target Architecture Definition): Mention
defaults for REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE.
(Target Architecture Definition): Mention same.  Add references to
web pages.
This commit is contained in:
Andrew Cagney
2002-05-12 02:16:05 +00:00
parent 451fbdda72
commit b2e75d7899
11 changed files with 63 additions and 34 deletions

View File

@ -1,3 +1,21 @@
2002-05-11 Andrew Cagney <ac131313@redhat.com>
* arch-utils.h (generic_register_size): Declare.
(generic_register_raw_size, generic_register_virtual_size): Delete
declarations.
* arch-utils.c (generic_register_raw_size): Delete.
(generic_register_size): New function.
(generic_register_virtual_size): Delete.
* gdbarch.sh (REGISTER_RAW_SIZE, REGISTER_VIRTUAL_SIZE): Make
default generic_register_size.
* gdbarch.h, gdbarch.c: Re-generate.
* d10v-tdep.c (d10v_gdbarch_init): Use generic_register_size for
register_virtual_size.
* x86-64-tdep.c (x86_64_gdbarch_init): Ditto.
* rs6000-tdep.c (rs6000_gdbarch_init): Ditto.
2002-05-11 Andrew Cagney <ac131313@redhat.com> 2002-05-11 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (gdbarch_data): Add gdbarch parameter. * gdbarch.sh (gdbarch_data): Add gdbarch parameter.

View File

@ -401,21 +401,13 @@ legacy_virtual_frame_pointer (CORE_ADDR pc,
*frame_offset = 0; *frame_offset = 0;
} }
/* Assume the world is flat. Every register is large enough to fit a /* Assume the world is sane, every register's virtual and real size
target integer. */ is identical. */
int int
generic_register_raw_size (int regnum) generic_register_size (int regnum)
{ {
gdb_assert (regnum >= 0 && regnum < NUM_REGS + NUM_PSEUDO_REGS); gdb_assert (regnum >= 0 && regnum < NUM_REGS + NUM_PSEUDO_REGS);
return TARGET_INT_BIT / HOST_CHAR_BIT;
}
/* Assume the virtual size corresponds to the virtual type. */
int
generic_register_virtual_size (int regnum)
{
return TYPE_LENGTH (REGISTER_VIRTUAL_TYPE (regnum)); return TYPE_LENGTH (REGISTER_VIRTUAL_TYPE (regnum));
} }

View File

@ -149,13 +149,10 @@ extern int generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc
extern void default_print_float_info (void); extern void default_print_float_info (void);
/* Assume all registers are the same size and a size identical to that /* Assume that the world is sane, a registers raw and virtual size
of the integer type. */ both match its type. */
extern int generic_register_raw_size (int regnum);
/* Assume the virtual size of registers corresponds to the virtual type. */ extern int generic_register_size (int regnum);
extern int generic_register_virtual_size (int regnum);
/* Prop up old targets that use various IN_SIGTRAMP() macros. */ /* Prop up old targets that use various IN_SIGTRAMP() macros. */
extern int legacy_pc_in_sigtramp (CORE_ADDR pc, char *name); extern int legacy_pc_in_sigtramp (CORE_ADDR pc, char *name);

View File

@ -1486,7 +1486,7 @@ d10v_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_register_byte (gdbarch, d10v_register_byte); set_gdbarch_register_byte (gdbarch, d10v_register_byte);
set_gdbarch_register_raw_size (gdbarch, d10v_register_raw_size); set_gdbarch_register_raw_size (gdbarch, d10v_register_raw_size);
set_gdbarch_max_register_raw_size (gdbarch, 8); set_gdbarch_max_register_raw_size (gdbarch, 8);
set_gdbarch_register_virtual_size (gdbarch, generic_register_virtual_size); set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
set_gdbarch_max_register_virtual_size (gdbarch, 8); set_gdbarch_max_register_virtual_size (gdbarch, 8);
set_gdbarch_register_virtual_type (gdbarch, d10v_register_virtual_type); set_gdbarch_register_virtual_type (gdbarch, d10v_register_virtual_type);

View File

@ -1,3 +1,10 @@
2002-05-11 Andrew Cagney <ac131313@redhat.com>
* gdbint.texinfo (Target Architecture Definition): Mention
defaults for REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE.
(Target Architecture Definition): Mention same. Add references to
web pages.
2002-05-08 Michael Snyder <msnyder@redhat.com> 2002-05-08 Michael Snyder <msnyder@redhat.com>
* stabs.texinfo (Attributes): Document new "vector" attribute. * stabs.texinfo (Attributes): Document new "vector" attribute.

View File

@ -2496,8 +2496,13 @@ C@t{++} reference type.
@emph{Maintainer's note: The way GDB manipulates registers is undergoing @emph{Maintainer's note: The way GDB manipulates registers is undergoing
significant change. Many of the macros and functions refered to in the significant change. Many of the macros and functions refered to in the
sections below are likely to be made obsolete. See the file @file{TODO} section below are likely to be made obsolete. For instance, instead of
for more up-to-date information.} having different raw and virtual register sizes, an architecture can
define pseudo-registers that map onto the raw registers.
See the @uref{http://www.gnu.org/software/gdb/bugs/, Bug Tracking
Database} and @uref{http://sources.redhat.com/gdb/current/ari, ARI
Index} for more up-to-date information.}
Some architectures use one representation for a value when it lives in a Some architectures use one representation for a value when it lives in a
register, but use a different representation when it lives in memory. register, but use a different representation when it lives in memory.
@ -3175,12 +3180,14 @@ Return non-zero if @var{reg} uses different raw and virtual formats.
@item REGISTER_RAW_SIZE (@var{reg}) @item REGISTER_RAW_SIZE (@var{reg})
@findex REGISTER_RAW_SIZE @findex REGISTER_RAW_SIZE
Return the raw size of @var{reg}. Return the raw size of @var{reg}; defaults to the size of the register's
virtual type.
@xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}. @xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}.
@item REGISTER_VIRTUAL_SIZE (@var{reg}) @item REGISTER_VIRTUAL_SIZE (@var{reg})
@findex REGISTER_VIRTUAL_SIZE @findex REGISTER_VIRTUAL_SIZE
Return the virtual size of @var{reg}. Return the virtual size of @var{reg}; defaults to the size of the
register's virtual type.
@xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}. @xref{Target Architecture Definition, , Using Different Register and Memory Data Representations}.
@item REGISTER_VIRTUAL_TYPE (@var{reg}) @item REGISTER_VIRTUAL_TYPE (@var{reg})

View File

@ -312,9 +312,9 @@ struct gdbarch startup_gdbarch =
0, 0,
0, 0,
0, 0,
generic_register_raw_size, generic_register_size,
0, 0,
generic_register_virtual_size, generic_register_size,
0, 0,
0, 0,
0, 0,
@ -479,7 +479,9 @@ gdbarch_alloc (const struct gdbarch_info *info,
current_gdbarch->register_name = legacy_register_name; current_gdbarch->register_name = legacy_register_name;
current_gdbarch->register_size = -1; current_gdbarch->register_size = -1;
current_gdbarch->register_bytes = -1; current_gdbarch->register_bytes = -1;
current_gdbarch->register_raw_size = generic_register_size;
current_gdbarch->max_register_raw_size = -1; current_gdbarch->max_register_raw_size = -1;
current_gdbarch->register_virtual_size = generic_register_size;
current_gdbarch->max_register_virtual_size = -1; current_gdbarch->max_register_virtual_size = -1;
current_gdbarch->do_registers_info = do_registers_info; current_gdbarch->do_registers_info = do_registers_info;
current_gdbarch->print_float_info = default_print_float_info; current_gdbarch->print_float_info = default_print_float_info;
@ -615,15 +617,11 @@ verify_gdbarch (struct gdbarch *gdbarch)
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
&& (gdbarch->register_byte == 0)) && (gdbarch->register_byte == 0))
fprintf_unfiltered (log, "\n\tregister_byte"); fprintf_unfiltered (log, "\n\tregister_byte");
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) /* Skip verify of register_raw_size, invalid_p == 0 */
&& (gdbarch->register_raw_size == 0))
fprintf_unfiltered (log, "\n\tregister_raw_size");
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
&& (gdbarch->max_register_raw_size == -1)) && (gdbarch->max_register_raw_size == -1))
fprintf_unfiltered (log, "\n\tmax_register_raw_size"); fprintf_unfiltered (log, "\n\tmax_register_raw_size");
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) /* Skip verify of register_virtual_size, invalid_p == 0 */
&& (gdbarch->register_virtual_size == 0))
fprintf_unfiltered (log, "\n\tregister_virtual_size");
if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)
&& (gdbarch->max_register_virtual_size == -1)) && (gdbarch->max_register_virtual_size == -1))
fprintf_unfiltered (log, "\n\tmax_register_virtual_size"); fprintf_unfiltered (log, "\n\tmax_register_virtual_size");

View File

@ -720,6 +720,11 @@ extern void set_gdbarch_register_byte (struct gdbarch *gdbarch, gdbarch_register
#endif #endif
#endif #endif
/* Default (function) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (REGISTER_RAW_SIZE)
#define REGISTER_RAW_SIZE(reg_nr) (generic_register_size (reg_nr))
#endif
typedef int (gdbarch_register_raw_size_ftype) (int reg_nr); typedef int (gdbarch_register_raw_size_ftype) (int reg_nr);
extern int gdbarch_register_raw_size (struct gdbarch *gdbarch, int reg_nr); extern int gdbarch_register_raw_size (struct gdbarch *gdbarch, int reg_nr);
extern void set_gdbarch_register_raw_size (struct gdbarch *gdbarch, gdbarch_register_raw_size_ftype *register_raw_size); extern void set_gdbarch_register_raw_size (struct gdbarch *gdbarch, gdbarch_register_raw_size_ftype *register_raw_size);
@ -743,6 +748,11 @@ extern void set_gdbarch_max_register_raw_size (struct gdbarch *gdbarch, int max_
#endif #endif
#endif #endif
/* Default (function) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (REGISTER_VIRTUAL_SIZE)
#define REGISTER_VIRTUAL_SIZE(reg_nr) (generic_register_size (reg_nr))
#endif
typedef int (gdbarch_register_virtual_size_ftype) (int reg_nr); typedef int (gdbarch_register_virtual_size_ftype) (int reg_nr);
extern int gdbarch_register_virtual_size (struct gdbarch *gdbarch, int reg_nr); extern int gdbarch_register_virtual_size (struct gdbarch *gdbarch, int reg_nr);
extern void set_gdbarch_register_virtual_size (struct gdbarch *gdbarch, gdbarch_register_virtual_size_ftype *register_virtual_size); extern void set_gdbarch_register_virtual_size (struct gdbarch *gdbarch, gdbarch_register_virtual_size_ftype *register_virtual_size);

View File

@ -463,9 +463,9 @@ f:2:REGISTER_NAME:char *:register_name:int regnr:regnr:::legacy_register_name::0
v:2:REGISTER_SIZE:int:register_size::::0:-1 v:2:REGISTER_SIZE:int:register_size::::0:-1
v:2:REGISTER_BYTES:int:register_bytes::::0:-1 v:2:REGISTER_BYTES:int:register_bytes::::0:-1
f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0 f:2:REGISTER_BYTE:int:register_byte:int reg_nr:reg_nr::0:0
f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::generic_register_raw_size:0 f:2:REGISTER_RAW_SIZE:int:register_raw_size:int reg_nr:reg_nr::generic_register_size:generic_register_size::0
v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1 v:2:MAX_REGISTER_RAW_SIZE:int:max_register_raw_size::::0:-1
f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::generic_register_virtual_size:0 f:2:REGISTER_VIRTUAL_SIZE:int:register_virtual_size:int reg_nr:reg_nr::generic_register_size:generic_register_size::0
v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1 v:2:MAX_REGISTER_VIRTUAL_SIZE:int:max_register_virtual_size::::0:-1
f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0 f:2:REGISTER_VIRTUAL_TYPE:struct type *:register_virtual_type:int reg_nr:reg_nr::0:0
f:2:DO_REGISTERS_INFO:void:do_registers_info:int reg_nr, int fpregs:reg_nr, fpregs:::do_registers_info::0 f:2:DO_REGISTERS_INFO:void:do_registers_info:int reg_nr, int fpregs:reg_nr, fpregs:::do_registers_info::0

View File

@ -2663,7 +2663,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_register_byte (gdbarch, rs6000_register_byte); set_gdbarch_register_byte (gdbarch, rs6000_register_byte);
set_gdbarch_register_raw_size (gdbarch, rs6000_register_raw_size); set_gdbarch_register_raw_size (gdbarch, rs6000_register_raw_size);
set_gdbarch_max_register_raw_size (gdbarch, 16); set_gdbarch_max_register_raw_size (gdbarch, 16);
set_gdbarch_register_virtual_size (gdbarch, generic_register_virtual_size); set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
set_gdbarch_max_register_virtual_size (gdbarch, 16); set_gdbarch_max_register_virtual_size (gdbarch, 16);
set_gdbarch_register_virtual_type (gdbarch, rs6000_register_virtual_type); set_gdbarch_register_virtual_type (gdbarch, rs6000_register_virtual_type);
set_gdbarch_do_registers_info (gdbarch, rs6000_do_registers_info); set_gdbarch_do_registers_info (gdbarch, rs6000_do_registers_info);

View File

@ -1002,7 +1002,7 @@ x86_64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
for (i = 0, sum = 0; i < X86_64_NUM_REGS; i++) for (i = 0, sum = 0; i < X86_64_NUM_REGS; i++)
sum += x86_64_register_info_table[i].size; sum += x86_64_register_info_table[i].size;
set_gdbarch_register_bytes (gdbarch, sum); set_gdbarch_register_bytes (gdbarch, sum);
set_gdbarch_register_virtual_size (gdbarch, generic_register_virtual_size); set_gdbarch_register_virtual_size (gdbarch, generic_register_size);
set_gdbarch_max_register_virtual_size (gdbarch, 16); set_gdbarch_max_register_virtual_size (gdbarch, 16);
set_gdbarch_register_virtual_type (gdbarch, x86_64_register_virtual_type); set_gdbarch_register_virtual_type (gdbarch, x86_64_register_virtual_type);