This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Multi-arching FLOAT_INFO


> 
> Have a look at REGISTER_NAME() vs REGISTER_NAMES and 
> legacy_register_name.  There is no reason for you fixing anything other 
> than the arm.
> 
> As for FLOAT_INFO, file a bug report indicating that it is deprecated. 
> I'll also ARI it.

Something like this then...

	* gdbarch.sh (DO_FLOAT_INFO): Add rule.
	* gdbarch.c gdbarch.h: Regenerate.
	* arch-utils.c (default_float_info): New function.
	* arch-utils.h (default_float_info): Prototype it.
	* infcmd.c (float_info): Call DO_FLOAT_INFO.
	* doc/gdbint.texinfo (FLOAT_INFO): Mark as deprecated.
	(DO_FLOAT_INFO): Document it.

	* arm-tdep.c (arm_float_info): Add comment.
	* config/arm/tm-arm.h (FLOAT_INFO): Delete.
	(DO_FLOAT_INFO): Define.


Index: arch-utils.c
===================================================================
RCS file: /cvs/src/src/gdb/arch-utils.c,v
retrieving revision 1.48
diff -p -r1.48 arch-utils.c
*** arch-utils.c	2002/01/29 03:51:14	1.48
--- arch-utils.c	2002/02/05 10:25:19
*************** default_double_format (struct gdbarch *g
*** 225,230 ****
--- 225,243 ----
      }
  }
  
+ void
+ default_float_info (void)
+ {
+ #ifdef FLOAT_INFO
+ #if GDB_MULTI_ARCH
+ #error "FLOAT_INFO defined in multi-arch"
+ #endif
+   FLOAT_INFO;
+ #else
+   printf_filtered ("No floating point info available for this processor.\n");
+ #endif
+ }
+ 
  /* Misc helper functions for targets. */
  
  int
Index: arch-utils.h
===================================================================
RCS file: /cvs/src/src/gdb/arch-utils.h,v
retrieving revision 1.27
diff -p -r1.27 arch-utils.h
*** arch-utils.h	2001/12/19 14:14:52	1.27
--- arch-utils.h	2002/02/05 10:25:19
*************** extern int generic_in_solib_call_trampol
*** 138,143 ****
--- 138,145 ----
  
  extern int generic_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc);
  
+ extern void default_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);
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.32
diff -p -r1.32 arm-tdep.c
*** arm-tdep.c	2002/02/04 11:55:35	1.32
--- arm-tdep.c	2002/02/05 10:25:20
*************** print_fpu_flags (int flags)
*** 1559,1564 ****
--- 1559,1566 ----
    putchar ('\n');
  }
  
+ /* Print interesting information about the floating point processor
+    (if present) or emulator.  */
  void
  arm_float_info (void)
  {
Index: gdbarch.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.c,v
retrieving revision 1.101
diff -p -r1.101 gdbarch.c
*** gdbarch.c	2002/02/04 11:55:34	1.101
--- gdbarch.c	2002/02/05 10:25:20
*************** struct gdbarch
*** 177,182 ****
--- 177,183 ----
    int max_register_virtual_size;
    gdbarch_register_virtual_type_ftype *register_virtual_type;
    gdbarch_do_registers_info_ftype *do_registers_info;
+   gdbarch_do_float_info_ftype *do_float_info;
    gdbarch_register_sim_regno_ftype *register_sim_regno;
    gdbarch_register_bytes_ok_ftype *register_bytes_ok;
    gdbarch_cannot_fetch_register_ftype *cannot_fetch_register;
*************** struct gdbarch startup_gdbarch =
*** 342,347 ****
--- 343,349 ----
    0,
    0,
    0,
+   0,
    generic_get_saved_register,
    0,
    0,
*************** gdbarch_alloc (const struct gdbarch_info
*** 474,479 ****
--- 476,482 ----
    current_gdbarch->max_register_raw_size = -1;
    current_gdbarch->max_register_virtual_size = -1;
    current_gdbarch->do_registers_info = do_registers_info;
+   current_gdbarch->do_float_info = default_float_info;
    current_gdbarch->register_sim_regno = default_register_sim_regno;
    current_gdbarch->cannot_fetch_register = cannot_register_not;
    current_gdbarch->cannot_store_register = cannot_register_not;
*************** verify_gdbarch (struct gdbarch *gdbarch)
*** 623,628 ****
--- 626,632 ----
        && (gdbarch->register_virtual_type == 0))
      fprintf_unfiltered (log, "\n\tregister_virtual_type");
    /* Skip verify of do_registers_info, invalid_p == 0 */
+   /* Skip verify of do_float_info, invalid_p == 0 */
    /* Skip verify of register_sim_regno, invalid_p == 0 */
    /* Skip verify of register_bytes_ok, has predicate */
    /* Skip verify of cannot_fetch_register, invalid_p == 0 */
*************** gdbarch_dump (struct gdbarch *gdbarch, s
*** 998,1003 ****
--- 1002,1021 ----
                        "gdbarch_dump: DECR_PC_AFTER_BREAK = %ld\n",
                        (long) DECR_PC_AFTER_BREAK);
  #endif
+ #ifdef DO_FLOAT_INFO
+ #if GDB_MULTI_ARCH
+   /* Macro might contain `[{}]' when not multi-arch */
+   fprintf_unfiltered (file,
+                       "gdbarch_dump: %s # %s\n",
+                       "DO_FLOAT_INFO()",
+                       XSTRING (DO_FLOAT_INFO ()));
+ #endif
+   if (GDB_MULTI_ARCH)
+     fprintf_unfiltered (file,
+                         "gdbarch_dump: DO_FLOAT_INFO = 0x%08lx\n",
+                         (long) current_gdbarch->do_float_info
+                         /*DO_FLOAT_INFO ()*/);
+ #endif
  #ifdef DO_REGISTERS_INFO
  #if GDB_MULTI_ARCH
    /* Macro might contain `[{}]' when not multi-arch */
*************** set_gdbarch_do_registers_info (struct gd
*** 2878,2883 ****
--- 2896,2919 ----
                                 gdbarch_do_registers_info_ftype do_registers_info)
  {
    gdbarch->do_registers_info = do_registers_info;
+ }
+ 
+ void
+ gdbarch_do_float_info (struct gdbarch *gdbarch)
+ {
+   if (gdbarch->do_float_info == 0)
+     internal_error (__FILE__, __LINE__,
+                     "gdbarch: gdbarch_do_float_info invalid");
+   if (gdbarch_debug >= 2)
+     fprintf_unfiltered (gdb_stdlog, "gdbarch_do_float_info called\n");
+   gdbarch->do_float_info ();
+ }
+ 
+ void
+ set_gdbarch_do_float_info (struct gdbarch *gdbarch,
+                            gdbarch_do_float_info_ftype do_float_info)
+ {
+   gdbarch->do_float_info = do_float_info;
  }
  
  int
Index: gdbarch.h
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.h,v
retrieving revision 1.76
diff -p -r1.76 gdbarch.h
*** gdbarch.h	2002/02/04 11:55:34	1.76
--- gdbarch.h	2002/02/05 10:25:20
*************** extern void set_gdbarch_do_registers_inf
*** 774,779 ****
--- 774,796 ----
  #endif
  #endif
  
+ /* Default (function) for non- multi-arch platforms. */
+ #if (!GDB_MULTI_ARCH) && !defined (DO_FLOAT_INFO)
+ #define DO_FLOAT_INFO() (default_float_info ())
+ #endif
+ 
+ typedef void (gdbarch_do_float_info_ftype) (void);
+ extern void gdbarch_do_float_info (struct gdbarch *gdbarch);
+ extern void set_gdbarch_do_float_info (struct gdbarch *gdbarch, gdbarch_do_float_info_ftype *do_float_info);
+ #if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DO_FLOAT_INFO)
+ #error "Non multi-arch definition of DO_FLOAT_INFO"
+ #endif
+ #if GDB_MULTI_ARCH
+ #if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DO_FLOAT_INFO)
+ #define DO_FLOAT_INFO() (gdbarch_do_float_info (current_gdbarch))
+ #endif
+ #endif
+ 
  /* MAP a GDB RAW register number onto a simulator register number.  See
     also include/...-sim.h. */
  
Index: gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.106
diff -p -r1.106 gdbarch.sh
*** gdbarch.sh	2002/02/04 11:55:34	1.106
--- gdbarch.sh	2002/02/05 10:25:20
*************** f:2:REGISTER_VIRTUAL_SIZE:int:register_v
*** 450,455 ****
--- 450,456 ----
  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
+ f:2:DO_FLOAT_INFO:void:do_float_info:void::::default_float_info::0
  # MAP a GDB RAW register number onto a simulator register number.  See
  # also include/...-sim.h.
  f:2:REGISTER_SIM_REGNO:int:register_sim_regno:int reg_nr:reg_nr:::default_register_sim_regno::0
Index: infcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/infcmd.c,v
retrieving revision 1.39
diff -p -r1.39 infcmd.c
*** infcmd.c	2002/01/29 03:08:25	1.39
--- infcmd.c	2002/02/05 10:25:21
*************** interrupt_target_command (char *args, in
*** 1846,1856 ****
  static void
  float_info (char *addr_exp, int from_tty)
  {
! #ifdef FLOAT_INFO
!   FLOAT_INFO;
! #else
!   printf_filtered ("No floating point info available for this processor.\n");
! #endif
  }
  
  /* ARGSUSED */
--- 1846,1852 ----
  static void
  float_info (char *addr_exp, int from_tty)
  {
!   DO_FLOAT_INFO ();
  }
  
  /* ARGSUSED */
Index: config/arm/tm-arm.h
===================================================================
RCS file: /cvs/src/src/gdb/config/arm/tm-arm.h,v
retrieving revision 1.21
diff -p -r1.21 tm-arm.h
*** tm-arm.h	2002/02/04 11:55:36	1.21
--- tm-arm.h	2002/02/05 10:25:21
*************** extern breakpoint_from_pc_fn arm_breakpo
*** 120,131 ****
  
  #define DECR_PC_AFTER_BREAK 0
  
! /* Code to execute to print interesting information about the floating
!    point processor (if any) or emulator.  No need to define if there
!    is nothing to do. */
! extern void arm_float_info (void);
! 
! #define FLOAT_INFO	{ arm_float_info (); }
  
  /* Say how long (ordinary) registers are.  This is a piece of bogosity
     used in push_word and a few other places; REGISTER_RAW_SIZE is the
--- 120,127 ----
  
  #define DECR_PC_AFTER_BREAK 0
  
! void arm_float_info (void);
! #define DO_FLOAT_INFO()	arm_float_info ()
  
  /* Say how long (ordinary) registers are.  This is a piece of bogosity
     used in push_word and a few other places; REGISTER_RAW_SIZE is the
Index: config/m68k/nm-apollo68b.h
===================================================================
RCS file: /cvs/src/src/gdb/config/m68k/nm-apollo68b.h,v
retrieving revision 1.2
diff -p -r1.2 nm-apollo68b.h
*** nm-apollo68b.h	2001/03/06 08:21:30	1.2
--- nm-apollo68b.h	2002/02/05 10:25:21
***************
*** 30,37 ****
  
  #define KERNEL_U_ADDR 0
  
- #undef FLOAT_INFO		/* No float info yet */
- 
  #define REGISTER_U_ADDR(addr, blockend, regno) \
  	(addr) = (6 + 4 * (regno))
  
--- 30,35 ----
Index: config/ns32k/nm-nbsd.h
===================================================================
RCS file: /cvs/src/src/gdb/config/ns32k/nm-nbsd.h,v
retrieving revision 1.3
diff -p -r1.3 nm-nbsd.h
*** nm-nbsd.h	2001/03/06 08:21:33	1.3
--- nm-nbsd.h	2002/02/05 10:25:21
***************
*** 26,32 ****
  #include "nm-nbsd.h"
  
  #if 0
! #define FLOAT_INFO	{ extern ns32k_float_info(); ns32k_float_info(); }
  #endif
  
  #define REGISTER_U_ADDR(addr, blockend, regno) \
--- 26,33 ----
  #include "nm-nbsd.h"
  
  #if 0
! extern ns32k_float_info()
! #define FLOAT_INFO()	ns32k_float_info ()
  #endif
  
  #define REGISTER_U_ADDR(addr, blockend, regno) \
Index: doc/gdbint.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdbint.texinfo,v
retrieving revision 1.63
diff -p -r1.63 gdbint.texinfo
*** gdbint.texinfo	2002/01/29 16:32:02	1.63
--- gdbint.texinfo	2002/02/05 10:25:22
*************** library in which breakpoints cannot be s
*** 2864,2869 ****
--- 2864,2874 ----
  @findex DO_REGISTERS_INFO
  If defined, use this to print the value of a register or all registers.
  
+ @item DO_FLOAT_INFO()
+ #findex DO_FLOAT_INFO
+ If defined, then the @samp{info float} command will print information about
+ the processor's floating point unit.
+ 
  @item DWARF_REG_TO_REGNUM
  @findex DWARF_REG_TO_REGNUM
  Convert DWARF register number into @value{GDBN} regnum.  If not defined,
*************** Predicate for @code{EXTRACT_STRUCT_VALUE
*** 2904,2911 ****
  
  @item FLOAT_INFO
  @findex FLOAT_INFO
! If defined, then the @samp{info float} command will print information about
! the processor's floating point unit.
  
  @item FP_REGNUM
  @findex FP_REGNUM
--- 2909,2915 ----
  
  @item FLOAT_INFO
  @findex FLOAT_INFO
! Deprecated in favor of @code{DO_FLOAT_INFO}.
  
  @item FP_REGNUM
  @findex FP_REGNUM

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]