From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10878 invoked by alias); 7 May 2002 00:01:38 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 10859 invoked from network); 7 May 2002 00:01:34 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 7 May 2002 00:01:34 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id RAA25997; Mon, 6 May 2002 17:01:33 -0700 (PDT) Message-ID: <3CD71654.7904493A@redhat.com> Date: Mon, 06 May 2002 17:01:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Andrew Cagney CC: gdb-patches@sources.redhat.com Subject: Re: [patch/rfc] default REGISTER_VIRTUAL_SIZE and REGISTER_RAW_SIZE toregister_size References: <3CD5EA35.9020104@cygnus.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-05/txt/msg00137.txt.bz2 Andrew Cagney wrote: > > Hello, > > For most architectures. The relationship: > > REGISTER_VIRTUAL_SIZE(N) > == REGISTER_RAW_SIZE(N) > == TYPE_LENGTH(REGISTER_VIRTUAL_TYPE(N) > > (the exception is the @$(*&@(^$*&^!@ MIPS ...). Surely this is also true for x87 regs? > Given this, the > attached patch changes the architecture vector so that it defaults both > to the register's type size. > > I think this is the logical conclusion to MichaelS's earlier patch that > provided defaults to each. > > Thoughts? I'll look to commit it in a week. If I understand it, it won't affect any target that explicitly sets these methods -- in which case I agree with the change. > ------------------------------------------------------------------------ > 2002-05-05 Andrew Cagney > > * 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. > > Index: arch-utils.c > =================================================================== > RCS file: /cvs/src/src/gdb/arch-utils.c,v > retrieving revision 1.55 > diff -u -r1.55 arch-utils.c > --- arch-utils.c 5 May 2002 01:15:12 -0000 1.55 > +++ arch-utils.c 6 May 2002 02:14:27 -0000 > @@ -401,21 +401,13 @@ > *frame_offset = 0; > } > > -/* Assume the world is flat. Every register is large enough to fit a > - target integer. */ > +/* Assume the world is sane, every register's virtual and real size > + is identical. */ > > int > -generic_register_raw_size (int regnum) > +generic_register_size (int regnum) > { > 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)); > } > > Index: arch-utils.h > =================================================================== > RCS file: /cvs/src/src/gdb/arch-utils.h,v > retrieving revision 1.30 > diff -u -r1.30 arch-utils.h > --- arch-utils.h 24 Apr 2002 16:28:14 -0000 1.30 > +++ arch-utils.h 6 May 2002 02:14:27 -0000 > @@ -149,13 +149,10 @@ > > extern void default_print_float_info (void); > > -/* Assume all registers are the same size and a size identical to that > - of the integer type. */ > -extern int generic_register_raw_size (int regnum); > +/* Assume that the world is sane, a registers raw and virtual size > + both match its type. */ > > -/* Assume the virtual size of registers corresponds to the virtual type. */ > - > -extern int generic_register_virtual_size (int regnum); > +extern int generic_register_size (int regnum); > > /* Prop up old targets that use various IN_SIGTRAMP() macros. */ > extern int legacy_pc_in_sigtramp (CORE_ADDR pc, char *name); > Index: d10v-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/d10v-tdep.c,v > retrieving revision 1.37 > diff -u -r1.37 d10v-tdep.c > --- d10v-tdep.c 18 Apr 2002 18:08:59 -0000 1.37 > +++ d10v-tdep.c 6 May 2002 02:14:28 -0000 > @@ -1486,7 +1486,7 @@ > set_gdbarch_register_byte (gdbarch, d10v_register_byte); > set_gdbarch_register_raw_size (gdbarch, d10v_register_raw_size); > 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_register_virtual_type (gdbarch, d10v_register_virtual_type); > > Index: gdbarch.c > =================================================================== > RCS file: /cvs/src/src/gdb/gdbarch.c,v > retrieving revision 1.122 > diff -u -r1.122 gdbarch.c > --- gdbarch.c 3 May 2002 21:05:35 -0000 1.122 > +++ gdbarch.c 6 May 2002 02:14:38 -0000 > @@ -311,9 +311,9 @@ > 0, > 0, > 0, > - generic_register_raw_size, > + generic_register_size, > 0, > - generic_register_virtual_size, > + generic_register_size, > 0, > 0, > 0, > @@ -475,7 +475,9 @@ > current_gdbarch->register_name = legacy_register_name; > current_gdbarch->register_size = -1; > current_gdbarch->register_bytes = -1; > + current_gdbarch->register_raw_size = generic_register_size; > current_gdbarch->max_register_raw_size = -1; > + current_gdbarch->register_virtual_size = generic_register_size; > current_gdbarch->max_register_virtual_size = -1; > current_gdbarch->do_registers_info = do_registers_info; > current_gdbarch->print_float_info = default_print_float_info; > @@ -611,15 +613,11 @@ > if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) > && (gdbarch->register_byte == 0)) > fprintf_unfiltered (log, "\n\tregister_byte"); > - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) > - && (gdbarch->register_raw_size == 0)) > - fprintf_unfiltered (log, "\n\tregister_raw_size"); > + /* Skip verify of register_raw_size, invalid_p == 0 */ > if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) > && (gdbarch->max_register_raw_size == -1)) > fprintf_unfiltered (log, "\n\tmax_register_raw_size"); > - if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) > - && (gdbarch->register_virtual_size == 0)) > - fprintf_unfiltered (log, "\n\tregister_virtual_size"); > + /* Skip verify of register_virtual_size, invalid_p == 0 */ > if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) > && (gdbarch->max_register_virtual_size == -1)) > fprintf_unfiltered (log, "\n\tmax_register_virtual_size"); > Index: gdbarch.h > =================================================================== > RCS file: /cvs/src/src/gdb/gdbarch.h,v > retrieving revision 1.91 > diff -u -r1.91 gdbarch.h > --- gdbarch.h 24 Apr 2002 16:28:15 -0000 1.91 > +++ gdbarch.h 6 May 2002 02:14:44 -0000 > @@ -720,6 +720,11 @@ > #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); > 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); > @@ -741,6 +746,11 @@ > #if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MAX_REGISTER_RAW_SIZE) > #define MAX_REGISTER_RAW_SIZE (gdbarch_max_register_raw_size (current_gdbarch)) > #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); > Index: gdbarch.sh > =================================================================== > RCS file: /cvs/src/src/gdb/gdbarch.sh,v > retrieving revision 1.133 > diff -u -r1.133 gdbarch.sh > --- gdbarch.sh 3 May 2002 21:05:36 -0000 1.133 > +++ gdbarch.sh 6 May 2002 02:14:47 -0000 > @@ -463,9 +463,9 @@ > v:2:REGISTER_SIZE:int:register_size::::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_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 > -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 > 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 > Index: rs6000-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/rs6000-tdep.c,v > retrieving revision 1.63 > diff -u -r1.63 rs6000-tdep.c > --- rs6000-tdep.c 30 Apr 2002 23:36:11 -0000 1.63 > +++ rs6000-tdep.c 6 May 2002 02:14:52 -0000 > @@ -2663,7 +2663,7 @@ > set_gdbarch_register_byte (gdbarch, rs6000_register_byte); > set_gdbarch_register_raw_size (gdbarch, rs6000_register_raw_size); > 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_register_virtual_type (gdbarch, rs6000_register_virtual_type); > set_gdbarch_do_registers_info (gdbarch, rs6000_do_registers_info); > Index: x86-64-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/x86-64-tdep.c,v > retrieving revision 1.16 > diff -u -r1.16 x86-64-tdep.c > --- x86-64-tdep.c 3 May 2002 10:52:00 -0000 1.16 > +++ x86-64-tdep.c 6 May 2002 02:14:56 -0000 > @@ -998,7 +998,7 @@ > for (i = 0, sum = 0; i < X86_64_NUM_REGS; i++) > sum += x86_64_register_info_table[i].size; > 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_register_virtual_type (gdbarch, x86_64_register_virtual_type); > Index: doc/ChangeLog > =================================================================== > RCS file: /cvs/src/src/gdb/doc/ChangeLog,v > retrieving revision 1.183 > diff -u -r1.183 ChangeLog > --- doc/ChangeLog 4 May 2002 19:57:22 -0000 1.183 > +++ doc/ChangeLog 6 May 2002 02:15:03 -0000 > @@ -1,3 +1,10 @@ > +2002-05-05 Andrew Cagney > + > + * 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-04 Andrew Cagney > > * gdbint.texinfo (Releasing GDB): Revise `Create a Release'. > Index: doc/gdbint.texinfo > =================================================================== > RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v > retrieving revision 1.81 > diff -u -r1.81 gdbint.texinfo > --- doc/gdbint.texinfo 4 May 2002 19:57:22 -0000 1.81 > +++ doc/gdbint.texinfo 6 May 2002 02:15:29 -0000 > @@ -2496,8 +2496,13 @@ > > @emph{Maintainer's note: The way GDB manipulates registers is undergoing > 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} > -for more up-to-date information.} > +section below are likely to be made obsolete. For instance, instead of > +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 > register, but use a different representation when it lives in memory. > @@ -3175,12 +3180,14 @@ > > @item REGISTER_RAW_SIZE (@var{reg}) > @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}. > > @item REGISTER_VIRTUAL_SIZE (@var{reg}) > @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}. > > @item REGISTER_VIRTUAL_TYPE (@var{reg})