This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [rfc/rfa] multi-arch *_REG_TO_REGNUM()
- To: Andrew Cagney <ac131313 at cygnus dot com>
- Subject: Re: [rfc/rfa] multi-arch *_REG_TO_REGNUM()
- From: Michael Snyder <msnyder at redhat dot com>
- Date: Fri, 01 Dec 2000 17:49:26 -0800
- CC: GDB Patches <gdb-patches at sourceware dot cygnus dot com>
- Organization: Red Hat, Inc.
- References: <3A25F04A.DD2D108@cygnus.com>
Andrew Cagney wrote:
>
> Hello,
>
> The attatched multi-arches all the existing .*_REG_TO_REGNUM() macros.
> In addition it adds a new DWARF2_REG_TO_REGNUM() (I know the s390 port
> needs this) and documents the ones that were missing from
> gdbint.texinfo.
I think this is a great idea, and I hope you
put it in ASAP, 'cause I need it for several
ports I'm working on. ;-)
> ---------------------------------------------------------------
> Thu Nov 30 16:33:36 2000 Andrew Cagney <cagney@b1.cygnus.com>
>
> * gdbarch.sh (STAB_REG_TO_REGNUM, ECOFF_REG_TO_REGNUM,
> DWARF_REG_TO_REGNUM, SDB_REG_TO_REGNUM, DWARF2_REG_TO_REGNUM):
> Add.
> * gdbarch.h, gdbarch.c: Regenerate.
> * arch-utils.c (no_op_reg_to_regnum): New function.
> * arch-utils.h (no_op_reg_to_regnum): Declare.
>
> * dwarfread.c (DWARF_REG_TO_REGNUM), coffread.c
> (SDB_REG_TO_REGNUM), stabsread.h (STAB_REG_TO_REGNUM),
> mdebugread.c (ECOFF_REG_TO_REGNUM): Delete macro.
>
> * config/mips/tm-mips.h (ECOFF_REG_TO_REGNUM, STAB_REG_TO_REGNUM):
> Delete. Moved to mips-tdep.c.
> * mips-tdep.c (mips_ecoff_reg_to_regnum, mips_stab_reg_to_regnum):
> New functions.
> (mips_gdbarch_init): Add ``mips_ecoff_reg_to_regnum'' and
> ``mips_stab_reg_to_regnum'' to multi-arch vector.
>
> Index: doc/ChangeLog
> Thu Nov 30 16:57:19 2000 Andrew Cagney <cagney@b1.cygnus.com>
>
> * gdbint.texinfo (ECOFF_REG_TO_REGNUM, DWARF_REG_TO_REGNUM,
> DWARF2_REG_TO_REGNUM): Document.
>
> Index: arch-utils.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/arch-utils.c,v
> retrieving revision 1.16
> diff -p -r1.16 arch-utils.c
> *** arch-utils.c 2000/10/27 19:17:56 1.16
> --- arch-utils.c 2000/11/30 06:08:53
> *************** default_convert_from_func_ptr_addr (CORE
> *** 233,238 ****
> --- 233,244 ----
> return addr;
> }
>
> + int
> + no_op_reg_to_regnum (int reg)
> + {
> + return reg;
> + }
> +
> /* Functions to manipulate the endianness of the target. */
>
> #ifdef TARGET_BYTE_ORDER_SELECTABLE
> Index: arch-utils.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/arch-utils.h,v
> retrieving revision 1.10
> diff -p -r1.10 arch-utils.h
> *** arch-utils.h 2000/10/26 07:41:25 1.10
> --- arch-utils.h 2000/11/30 06:08:53
> *************** extern int default_register_sim_regno (i
> *** 97,100 ****
> --- 97,104 ----
>
> extern CORE_ADDR default_convert_from_func_ptr_addr (CORE_ADDR addr);
>
> + /* No-op conversion of reg to regnum. */
> +
> + extern int no_op_reg_to_regnum (int reg);
> +
> #endif
> Index: coffread.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/coffread.c,v
> retrieving revision 1.12
> diff -p -r1.12 coffread.c
> *** coffread.c 2000/10/24 21:13:08 1.12
> --- coffread.c 2000/11/30 06:09:04
> *************** struct coff_symfile_info
> *** 68,81 ****
>
> #define SDB_TYPE(type) (BTYPE(type) | (type & N_TMASK))
>
> - /* Convert from an sdb register number to an internal gdb register number.
> - This should be defined in tm.h, if REGISTER_NAMES is not set up
> - to map one to one onto the sdb register numbers. */
> -
> - #ifndef SDB_REG_TO_REGNUM
> - #define SDB_REG_TO_REGNUM(value) (value)
> - #endif
> -
> /* Core address of start and end of text of current source file.
> This comes from a ".text" symbol where x_nlinno > 0. */
>
> --- 68,73 ----
> Index: dwarfread.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/dwarfread.c,v
> retrieving revision 1.3
> diff -p -r1.3 dwarfread.c
> *** dwarfread.c 2000/07/30 01:48:25 1.3
> --- dwarfread.c 2000/11/30 06:09:09
> *************** typedef unsigned int DIE_REF; /* Referen
> *** 189,199 ****
> #define CHILL_PRODUCER "GNU Chill "
> #endif
>
> - /* Provide a default mapping from a DWARF register number to a gdb REGNUM. */
> - #ifndef DWARF_REG_TO_REGNUM
> - #define DWARF_REG_TO_REGNUM(num) (num)
> - #endif
> -
> /* Flags to target_to_host() that tell whether or not the data object is
> expected to be signed. Used, for example, when fetching a signed
> integer in the target environment which is used as a signed integer
> --- 189,194 ----
> Index: gdbarch.sh
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbarch.sh,v
> retrieving revision 1.48
> diff -p -r1.48 gdbarch.sh
> *** gdbarch.sh 2000/11/08 23:58:46 1.48
> --- gdbarch.sh 2000/11/30 06:09:23
> *************** v:2:PC_REGNUM:int:pc_regnum::::0:-1
> *** 371,376 ****
> --- 371,387 ----
> v:2:FP0_REGNUM:int:fp0_regnum::::0:-1::0
> v:2:NPC_REGNUM:int:npc_regnum::::0:-1::0
> v:2:NNPC_REGNUM:int:nnpc_regnum::::0:-1::0
> + # Convert stab register number (from \`r\' declaration) to a gdb REGNUM.
> + f:2:STAB_REG_TO_REGNUM:int:stab_reg_to_regnum:int stab_regnr:stab_regnr:::no_op_reg_to_regnum::0
> + # Provide a default mapping from a ecoff register number to a gdb REGNUM.
> + f:2:ECOFF_REG_TO_REGNUM:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr:::no_op_reg_to_regnum::0
> + # Provide a default mapping from a DWARF register number to a gdb REGNUM.
> + f:2:DWARF_REG_TO_REGNUM:int:dwarf_reg_to_regnum:int dwarf_regnr:dwarf_regnr:::no_op_reg_to_regnum::0
> + # Convert from an sdb register number to an internal gdb register number.
> + # This should be defined in tm.h, if REGISTER_NAMES is not set up
> + # to map one to one onto the sdb register numbers.
> + f:2:SDB_REG_TO_REGNUM:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr:::no_op_reg_to_regnum::0
> + f:2:DWARF2_REG_TO_REGNUM:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr:::no_op_reg_to_regnum::0
> 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_BYTES:int:register_bytes::::0:-1
> Index: mdebugread.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mdebugread.c,v
> retrieving revision 1.7
> diff -p -r1.7 mdebugread.c
> *** mdebugread.c 2000/09/24 04:42:12 1.7
> --- mdebugread.c 2000/11/30 06:09:37
> *************** typedef struct mips_extra_func_info
> *** 93,103 ****
>
> extern void _initialize_mdebugread (void);
>
> - /* Provide a default mapping from a ecoff register number to a gdb REGNUM. */
> - #ifndef ECOFF_REG_TO_REGNUM
> - #define ECOFF_REG_TO_REGNUM(num) (num)
> - #endif
> -
> /* Provide a way to test if we have both ECOFF and ELF symbol tables.
> We use this define in order to know whether we should override a
> symbol's ECOFF section with its ELF section. This is necessary in
> --- 93,98 ----
> Index: mips-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mips-tdep.c,v
> retrieving revision 1.34
> diff -p -r1.34 mips-tdep.c
> *** mips-tdep.c 2000/10/30 21:50:57 1.34
> --- mips-tdep.c 2000/11/30 06:09:44
> *************** mips_saved_pc_after_call (struct frame_i
> *** 3812,3817 ****
> --- 3812,3840 ----
> }
>
>
> + /* Convert a dbx stab register number (from `r' declaration) to a gdb
> + REGNUM */
> +
> + static int
> + mips_stab_reg_to_regnum (int num)
> + {
> + if (num < 32)
> + return num;
> + else
> + return num + FP0_REGNUM - 38;
> + }
> +
> + /* Convert a ecoff register number to a gdb REGNUM */
> +
> + static int
> + mips_ecoff_reg_to_regnum (int num)
> + {
> + if (num < 32)
> + return num;
> + else
> + return num + FP0_REGNUM - 32;
> + }
> +
> static struct gdbarch *
> mips_gdbarch_init (struct gdbarch_info info,
> struct gdbarch_list *arches)
> *************** mips_gdbarch_init (struct gdbarch_info i
> *** 4052,4057 ****
> --- 4075,4084 ----
> set_gdbarch_write_fp (gdbarch, generic_target_write_fp);
> set_gdbarch_read_sp (gdbarch, generic_target_read_sp);
> set_gdbarch_write_sp (gdbarch, generic_target_write_sp);
> +
> + /* Map debug register numbers onto internal register numbers. */
> + set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
> + set_gdbarch_ecoff_reg_to_regnum (gdbarch, mips_ecoff_reg_to_regnum);
>
> /* Initialize a frame */
> set_gdbarch_init_extra_frame_info (gdbarch, mips_init_extra_frame_info);
> Index: stabsread.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/stabsread.h,v
> retrieving revision 1.3
> diff -p -r1.3 stabsread.h
> *** stabsread.h 2000/06/04 00:41:09 1.3
> --- stabsread.h 2000/11/30 06:09:46
> ***************
> *** 30,41 ****
> #define EXTERN extern
> #endif
>
> - /* Convert stab register number (from `r' declaration) to a gdb REGNUM. */
> -
> - #ifndef STAB_REG_TO_REGNUM
> - #define STAB_REG_TO_REGNUM(VALUE) (VALUE)
> - #endif
> -
> /* Hash table of global symbols whose values are not known yet.
> They are chained thru the SYMBOL_VALUE_CHAIN, since we don't
> have the correct data for that slot yet.
> --- 30,35 ----
> Index: config/mips/tm-mips.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/config/mips/tm-mips.h,v
> retrieving revision 1.15
> diff -p -r1.15 tm-mips.h
> *** tm-mips.h 2000/10/27 15:02:42 1.15
> --- tm-mips.h 2000/11/30 06:09:49
> *************** extern void mips_print_extra_frame_info
> *** 437,450 ****
> #define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv)
> extern struct frame_info *setup_arbitrary_frame (int, CORE_ADDR *);
>
> - /* Convert a dbx stab register number (from `r' declaration) to a gdb REGNUM */
> -
> - #define STAB_REG_TO_REGNUM(num) ((num) < 32 ? (num) : (num)+FP0_REGNUM-38)
> -
> - /* Convert a ecoff register number to a gdb REGNUM */
> -
> - #define ECOFF_REG_TO_REGNUM(num) ((num) < 32 ? (num) : (num)+FP0_REGNUM-32)
> -
> /* Select the default mips disassembler */
>
> #define TM_PRINT_INSN_MACH 0
> --- 437,442 ----
> Index: doc/gdbint.texinfo
> ===================================================================
> RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v
> retrieving revision 1.16
> diff -p -r1.16 gdbint.texinfo
> *** gdbint.texinfo 2000/11/24 11:02:59 1.16
> --- gdbint.texinfo 2000/11/30 06:10:08
> *************** library in which breakpoints cannot be s
> *** 1640,1645 ****
> --- 1640,1657 ----
> @item DO_REGISTERS_INFO
> If defined, use this to print the value of a register or all registers.
>
> + @item DWARF_REG_TO_REGNUM
> + Convert DWARF register number into @value{GDBN} regnum. If not defined,
> + no conversion will be performed.
> +
> + @item DWARF2_REG_TO_REGNUM
> + Convert DWARF2 register number into @value{GDBN} regnum. If not
> + defined, no conversion will be performed.
> +
> + @item ECOFF_REG_TO_REGNUM
> + Convert ECOFF register number into @value{GDBN} regnum. If not defined,
> + no conversion will be performed.
> +
> @item END_OF_TEXT_DEFAULT
> This is an expression that should designate the end of the text section
> (? FIXME ?)