This is the mail archive of the gdb-patches@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]

[PATCH] Convert float_info to print_float_info on i386 target


Subject says it all.  I'm just wondering whether I should use
frame_register_read to read registers.  Andrew?

Checked in anyway.

Mark

Index: ChangeLog
from  Mark Kettenis  <kettenis@elgar.kettenis.dyndns.org>

	* i387-tdep.h (i387_print_float_info): New prototype.
	* i387-tdep.c (print_i387_value, print_i387_ext,
	print_i387_status_word, print_i387_control_word): Add `struct
	ui_file *' argument and use it for output.
	(i387_print_float_info): Renamed from i387_float_info.  Add
	`struct gdbarch *' and `struct ui_file *' arguments and use the
	latter for output.
	* i386-tdep.c: Include "i387-tdep.h".
	(i386_gdbarch_init): Set print_float_info.
	* config/i386/tm-i386.h (i387_float_info): Remove prototype.
	(FLOAT_INFO): Remove define.

Index: i386-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-tdep.c,v
retrieving revision 1.78
diff -u -p -r1.78 i386-tdep.c
--- i386-tdep.c 13 Aug 2002 21:54:18 -0000 1.78
+++ i386-tdep.c 15 Aug 2002 17:34:44 -0000
@@ -38,6 +38,7 @@
 #include "gdb_assert.h"
 
 #include "i386-tdep.h"
+#include "i387-tdep.h"
 
 /* Names of the registers.  The first 10 registers match the register
    numbering scheme used by GCC for stabs and DWARF.  */
@@ -1487,6 +1488,8 @@ i386_gdbarch_init (struct gdbarch_info i
   set_gdbarch_max_register_raw_size (gdbarch, I386_MAX_REGISTER_SIZE);
   set_gdbarch_max_register_virtual_size (gdbarch, I386_MAX_REGISTER_SIZE);
   set_gdbarch_register_virtual_type (gdbarch, i386_register_virtual_type);
+
+  set_gdbarch_print_float_info (gdbarch, i387_print_float_info);
 
   set_gdbarch_get_longjmp_target (gdbarch, i386_get_longjmp_target);
 
Index: i387-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/i387-tdep.h,v
retrieving revision 1.1
diff -u -p -r1.1 i387-tdep.h
--- i387-tdep.h 11 May 2002 17:22:26 -0000 1.1
+++ i387-tdep.h 15 Aug 2002 17:34:44 -0000
@@ -21,6 +21,12 @@
 #ifndef I387_TDEP_H
 #define I387_TDEP_H
 
+/* Print out the i387 floating point state.  */
+
+extern void i387_print_float_info (struct gdbarch *gdbarch,
+				   struct ui_file *file,
+				   struct frame_info *frame);
+
 /* Fill register REGNUM in GDB's register array with the appropriate
    value from *FSAVE.  This function masks off any of the reserved
    bits in *FSAVE.  */
Index: i387-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i387-tdep.c,v
retrieving revision 1.18
diff -u -p -r1.18 i387-tdep.c
--- i387-tdep.c 12 May 2002 21:16:08 -0000 1.18
+++ i387-tdep.c 15 Aug 2002 17:34:44 -0000
@@ -160,7 +160,7 @@ print_387_status_word (unsigned int stat
 
 /* Print the floating point number specified by RAW.  */
 static void
-print_i387_value (char *raw)
+print_i387_value (char *raw, struct ui_file *file)
 {
   DOUBLEST value;
 
@@ -175,15 +175,15 @@ print_i387_value (char *raw)
      to print the value, 1 position for the sign, 1 for the decimal
      point, 19 for the digits and 6 for the exponent adds up to 27.  */
 #ifdef PRINTF_HAS_LONG_DOUBLE
-  printf_filtered (" %-+27.19Lg", (long double) value);
+  fprintf_filtered (file, " %-+27.19Lg", (long double) value);
 #else
-  printf_filtered (" %-+27.19g", (double) value);
+  fprintf_filtered (file, " %-+27.19g", (double) value);
 #endif
 }
 
 /* Print the classification for the register contents RAW.  */
 static void
-print_i387_ext (unsigned char *raw)
+print_i387_ext (unsigned char *raw, struct ui_file *file)
 {
   int sign;
   int integer;
@@ -201,119 +201,121 @@ print_i387_ext (unsigned char *raw)
     {
       if (fraction[0] == 0x00000000 && fraction[1] == 0x00000000)
 	/* Infinity.  */
-	printf_filtered (" %cInf", (sign ? '-' : '+'));
+	fprintf_filtered (file, " %cInf", (sign ? '-' : '+'));
       else if (sign && fraction[0] == 0x00000000 && fraction[1] == 0x40000000)
 	/* Real Indefinite (QNaN).  */
-	puts_unfiltered (" Real Indefinite (QNaN)");
+	fputs_unfiltered (" Real Indefinite (QNaN)", file);
       else if (fraction[1] & 0x40000000)
 	/* QNaN.  */
-	puts_filtered (" QNaN");
+	fputs_filtered (" QNaN", file);
       else
 	/* SNaN.  */
-	puts_filtered (" SNaN");
+	fputs_filtered (" SNaN", file);
     }
   else if (exponent < 0x7fff && exponent > 0x0000 && integer)
     /* Normal.  */
-    print_i387_value (raw);
+    print_i387_value (raw, file);
   else if (exponent == 0x0000)
     {
       /* Denormal or zero.  */
-      print_i387_value (raw);
+      print_i387_value (raw, file);
       
       if (integer)
 	/* Pseudo-denormal.  */
-	puts_filtered (" Pseudo-denormal");
+	fputs_filtered (" Pseudo-denormal", file);
       else if (fraction[0] || fraction[1])
 	/* Denormal.  */
-	puts_filtered (" Denormal");
+	fputs_filtered (" Denormal", file);
     }
   else
     /* Unsupported.  */
-    puts_filtered (" Unsupported");
+    fputs_filtered (" Unsupported", file);
 }
 
 /* Print the status word STATUS.  */
 static void
-print_i387_status_word (unsigned int status)
+print_i387_status_word (unsigned int status, struct ui_file *file)
 {
-  printf_filtered ("Status Word:         %s",
+  fprintf_filtered (file, "Status Word:         %s",
 		   local_hex_string_custom (status, "04"));
-  puts_filtered ("  ");
-  printf_filtered (" %s", (status & 0x0001) ? "IE" : "  ");
-  printf_filtered (" %s", (status & 0x0002) ? "DE" : "  ");
-  printf_filtered (" %s", (status & 0x0004) ? "ZE" : "  ");
-  printf_filtered (" %s", (status & 0x0008) ? "OE" : "  ");
-  printf_filtered (" %s", (status & 0x0010) ? "UE" : "  ");
-  printf_filtered (" %s", (status & 0x0020) ? "PE" : "  ");
-  puts_filtered ("  ");
-  printf_filtered (" %s", (status & 0x0080) ? "ES" : "  ");
-  puts_filtered ("  ");
-  printf_filtered (" %s", (status & 0x0040) ? "SF" : "  ");
-  puts_filtered ("  ");
-  printf_filtered (" %s", (status & 0x0100) ? "C0" : "  ");
-  printf_filtered (" %s", (status & 0x0200) ? "C1" : "  ");
-  printf_filtered (" %s", (status & 0x0400) ? "C2" : "  ");
-  printf_filtered (" %s", (status & 0x4000) ? "C3" : "  ");
+  fputs_filtered ("  ", file);
+  fprintf_filtered (file, " %s", (status & 0x0001) ? "IE" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0002) ? "DE" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0004) ? "ZE" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0008) ? "OE" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0010) ? "UE" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0020) ? "PE" : "  ");
+  fputs_filtered ("  ", file);
+  fprintf_filtered (file, " %s", (status & 0x0080) ? "ES" : "  ");
+  fputs_filtered ("  ", file);
+  fprintf_filtered (file, " %s", (status & 0x0040) ? "SF" : "  ");
+  fputs_filtered ("  ", file);
+  fprintf_filtered (file, " %s", (status & 0x0100) ? "C0" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0200) ? "C1" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x0400) ? "C2" : "  ");
+  fprintf_filtered (file, " %s", (status & 0x4000) ? "C3" : "  ");
 
-  puts_filtered ("\n");
+  fputs_filtered ("\n", file);
 
-  printf_filtered ("                       TOP: %d\n", ((status >> 11) & 7));
+  fprintf_filtered (file,
+		    "                       TOP: %d\n", ((status >> 11) & 7));
 }
 
 /* Print the control word CONTROL.  */
 static void
-print_i387_control_word (unsigned int control)
+print_i387_control_word (unsigned int control, struct ui_file *file)
 {
-  printf_filtered ("Control Word:        %s",
+  fprintf_filtered (file, "Control Word:        %s",
 		   local_hex_string_custom (control, "04"));
-  puts_filtered ("  ");
-  printf_filtered (" %s", (control & 0x0001) ? "IM" : "  ");
-  printf_filtered (" %s", (control & 0x0002) ? "DM" : "  ");
-  printf_filtered (" %s", (control & 0x0004) ? "ZM" : "  ");
-  printf_filtered (" %s", (control & 0x0008) ? "OM" : "  ");
-  printf_filtered (" %s", (control & 0x0010) ? "UM" : "  ");
-  printf_filtered (" %s", (control & 0x0020) ? "PM" : "  ");
+  fputs_filtered ("  ", file);
+  fprintf_filtered (file, " %s", (control & 0x0001) ? "IM" : "  ");
+  fprintf_filtered (file, " %s", (control & 0x0002) ? "DM" : "  ");
+  fprintf_filtered (file, " %s", (control & 0x0004) ? "ZM" : "  ");
+  fprintf_filtered (file, " %s", (control & 0x0008) ? "OM" : "  ");
+  fprintf_filtered (file, " %s", (control & 0x0010) ? "UM" : "  ");
+  fprintf_filtered (file, " %s", (control & 0x0020) ? "PM" : "  ");
 
-  puts_filtered ("\n");
+  fputs_filtered ("\n", file);
 
-  puts_filtered ("                       PC: ");
+  fputs_filtered ("                       PC: ", file);
   switch ((control >> 8) & 3)
     {
     case 0:
-      puts_filtered ("Single Precision (24-bits)\n");
+      fputs_filtered ("Single Precision (24-bits)\n", file);
       break;
     case 1:
-      puts_filtered ("Reserved\n");
+      fputs_filtered ("Reserved\n", file);
       break;
     case 2:
-      puts_filtered ("Double Precision (53-bits)\n");
+      fputs_filtered ("Double Precision (53-bits)\n", file);
       break;
     case 3:
-      puts_filtered ("Extended Precision (64-bits)\n");
+      fputs_filtered ("Extended Precision (64-bits)\n", file);
       break;
     }
       
-  puts_filtered ("                       RC: ");
+  fputs_filtered ("                       RC: ", file);
   switch ((control >> 10) & 3)
     {
     case 0:
-      puts_filtered ("Round to nearest\n");
+      fputs_filtered ("Round to nearest\n", file);
       break;
     case 1:
-      puts_filtered ("Round down\n");
+      fputs_filtered ("Round down\n", file);
       break;
     case 2:
-      puts_filtered ("Round up\n");
+      fputs_filtered ("Round up\n", file);
       break;
     case 3:
-      puts_filtered ("Round toward zero\n");
+      fputs_filtered ("Round toward zero\n", file);
       break;
     }
 }
 
 /* Print out the i387 floating poin state.  */
 void
-i387_float_info (void)
+i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
+		       struct frame_info *frame)
 {
   unsigned int fctrl;
   unsigned int fstat;
@@ -343,50 +345,50 @@ i387_float_info (void)
       int tag = (ftag >> (fpreg * 2)) & 3;
       int i;
 
-      printf_filtered ("%sR%d: ", fpreg == top ? "=>" : "  ", fpreg);
+      fprintf_filtered (file, "%sR%d: ", fpreg == top ? "=>" : "  ", fpreg);
 
       switch (tag)
 	{
 	case 0:
-	  puts_filtered ("Valid   ");
+	  fputs_filtered ("Valid   ", file);
 	  break;
 	case 1:
-	  puts_filtered ("Zero    ");
+	  fputs_filtered ("Zero    ", file);
 	  break;
 	case 2:
-	  puts_filtered ("Special ");
+	  fputs_filtered ("Special ", file);
 	  break;
 	case 3:
-	  puts_filtered ("Empty   ");
+	  fputs_filtered ("Empty   ", file);
 	  break;
 	}
 
       read_register_gen ((fpreg + 8 - top) % 8 + FP0_REGNUM, raw);
 
-      puts_filtered ("0x");
+      fputs_filtered ("0x", file);
       for (i = 9; i >= 0; i--)
-	printf_filtered ("%02x", raw[i]);
+	fprintf_filtered (file, "%02x", raw[i]);
 
       if (tag != 3)
-	print_i387_ext (raw);
+	print_i387_ext (raw, file);
 
-      puts_filtered ("\n");
+      fputs_filtered ("\n", file);
     }
 
   puts_filtered ("\n");
 
-  print_i387_status_word (fstat);
-  print_i387_control_word (fctrl);
-  printf_filtered ("Tag Word:            %s\n",
-		   local_hex_string_custom (ftag, "04"));
-  printf_filtered ("Instruction Pointer: %s:",
-		   local_hex_string_custom (fiseg, "02"));
-  printf_filtered ("%s\n", local_hex_string_custom (fioff, "08"));
-  printf_filtered ("Operand Pointer:     %s:",
-		   local_hex_string_custom (foseg, "02"));
-  printf_filtered ("%s\n", local_hex_string_custom (fooff, "08"));
-  printf_filtered ("Opcode:              %s\n",
-		   local_hex_string_custom (fop ? (fop | 0xd800) : 0, "04"));
+  print_i387_status_word (fstat, file);
+  print_i387_control_word (fctrl, file);
+  fprintf_filtered (file, "Tag Word:            %s\n",
+		    local_hex_string_custom (ftag, "04"));
+  fprintf_filtered (file, "Instruction Pointer: %s:",
+		    local_hex_string_custom (fiseg, "02"));
+  fprintf_filtered (file, "%s\n", local_hex_string_custom (fioff, "08"));
+  fprintf_filtered (file, "Operand Pointer:     %s:",
+		    local_hex_string_custom (foseg, "02"));
+  fprintf_filtered (file, "%s\n", local_hex_string_custom (fooff, "08"));
+  fprintf_filtered (file, "Opcode:              %s\n",
+		    local_hex_string_custom (fop ? (fop | 0xd800) : 0, "04"));
 }
 
 /* FIXME: kettenis/2000-05-21: Right now more than a few i386 targets
Index: config/i386/tm-i386.h
===================================================================
RCS file: /cvs/src/src/gdb/config/i386/tm-i386.h,v
retrieving revision 1.42
diff -u -p -r1.42 tm-i386.h
--- config/i386/tm-i386.h 30 Jun 2002 18:55:19 -0000 1.42
+++ config/i386/tm-i386.h 15 Aug 2002 17:34:44 -0000
@@ -26,11 +26,6 @@
 
 #include "regcache.h"
 
-/* Print out the i387 floating point state.  */
-extern void i387_float_info (void);
-#define FLOAT_INFO { i387_float_info (); }
-
-
 /* FIXME: kettenis/2000-06-12: These do not belong here.  */
 extern void print_387_control_word (unsigned int);
 extern void print_387_status_word (unsigned int);


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