2004-02-26 Jeff Johnston <jjohnstn@redhat.com>
authorJeff Johnston <jjohnstn@redhat.com>
Fri, 27 Feb 2004 00:01:14 +0000 (00:01 +0000)
committerJeff Johnston <jjohnstn@redhat.com>
Fri, 27 Feb 2004 00:01:14 +0000 (00:01 +0000)
        * valprint.h (print_hex_chars, print_char_chars): New prototypes.
        * valprint.c (print_hex_chars): Change from static to external.
        (print_char_chars): New function.
        * printcmd.c (print_scalar_formatted): For integer and enum types
        that are longer than LONGEST, perform processing via appropriate
        print_*_chars routines.

gdb/ChangeLog
gdb/printcmd.c
gdb/valprint.c
gdb/valprint.h

index d9df03c..9c4a0ae 100644 (file)
@@ -1,3 +1,12 @@
+2004-02-26  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * valprint.h (print_hex_chars, print_char_chars): New prototypes.
+       * valprint.c (print_hex_chars): Change from static to external.
+       (print_char_chars): New function.
+       * printcmd.c (print_scalar_formatted): For integer and enum types
+       that are longer than LONGEST, perform processing via appropriate
+       print_*_chars routines.
+
 2004-02-26  Andrew Cagney  <cagney@redhat.com>
 
        * Makefile.in: Update dependencies.
index a93ddbf..9734ec1 100644 (file)
@@ -350,6 +350,33 @@ print_scalar_formatted (void *valaddr, struct type *type, int format, int size,
   LONGEST val_long = 0;
   unsigned int len = TYPE_LENGTH (type);
 
+  if (len > sizeof(LONGEST) &&
+      (TYPE_CODE (type) == TYPE_CODE_INT
+       || TYPE_CODE (type) == TYPE_CODE_ENUM))
+    {
+      switch (format)
+       {
+       case 'o':
+         print_octal_chars (stream, valaddr, len);
+         return;
+       case 'u':
+       case 'd':
+         print_decimal_chars (stream, valaddr, len);
+         return;
+       case 't':
+         print_binary_chars (stream, valaddr, len);
+         return;
+       case 'x':
+         print_hex_chars (stream, valaddr, len);
+         return;
+       case 'c':
+         print_char_chars (stream, valaddr, len);
+         return;
+       default:
+         break;
+       };
+    }
+
   if (format != 'f')
     val_long = unpack_long (type, valaddr);
 
index 0aaf8f5..294e09f 100644 (file)
@@ -42,9 +42,6 @@
 static int partial_memory_read (CORE_ADDR memaddr, char *myaddr,
                                int len, int *errnoptr);
 
-static void print_hex_chars (struct ui_file *, unsigned char *,
-                            unsigned int);
-
 static void show_print (char *, int);
 
 static void set_print (char *, int);
@@ -846,7 +843,7 @@ print_decimal_chars (struct ui_file *stream, unsigned char *valaddr,
 
 /* VALADDR points to an integer of LEN bytes.  Print it in hex on stream.  */
 
-static void
+void
 print_hex_chars (struct ui_file *stream, unsigned char *valaddr, unsigned len)
 {
   unsigned char *p;
@@ -875,6 +872,40 @@ print_hex_chars (struct ui_file *stream, unsigned char *valaddr, unsigned len)
   fputs_filtered (local_hex_format_suffix (), stream);
 }
 
+/* VALADDR points to a char integer of LEN bytes.  Print it out in appropriate language form on stream.  
+   Omit any leading zero chars.  */
+
+void
+print_char_chars (struct ui_file *stream, unsigned char *valaddr, unsigned len)
+{
+  unsigned char *p;
+
+  if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+    {
+      p = valaddr;
+      while (p < valaddr + len - 1 && *p == 0)
+       ++p;
+
+      while (p < valaddr + len)
+       {
+         LA_EMIT_CHAR (*p, stream, '\'');
+         ++p;
+       }
+    }
+  else
+    {
+      p = valaddr + len - 1;
+      while (p > valaddr && *p == 0)
+       --p;
+
+      while (p >= valaddr)
+       {
+         LA_EMIT_CHAR (*p, stream, '\'');
+         --p;
+       }
+    }
+}
+
 /*  Called by various <lang>_val_print routines to print elements of an
    array in the form "<elem1>, <elem2>, <elem3>, ...".
 
index 4e2d166..647b4bd 100644 (file)
@@ -63,4 +63,10 @@ extern void print_octal_chars (struct ui_file *, unsigned char *,
 
 extern void print_decimal_chars (struct ui_file *, unsigned char *,
                                 unsigned int);
+
+extern void print_hex_chars (struct ui_file *, unsigned char *,
+                            unsigned int);
+
+extern void print_char_chars (struct ui_file *, unsigned char *,
+                             unsigned int);
 #endif