* inftarg.c (child_thread_alive): New function to see if a
[deliverable/binutils-gdb.git] / gdb / valprint.c
index 7826cf72488cc3c8f9d223655215930f6f456047..d4c86969837cd46d82e92430a37fe79c274705f1 100644 (file)
@@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "obstack.h"
 #include "language.h"
 #include "demangle.h"
+#include "annotate.h"
 
 #include <errno.h>
 
@@ -60,8 +61,8 @@ set_output_radix PARAMS ((char *, int, struct cmd_list_element *));
 static void
 set_output_radix_1 PARAMS ((int, unsigned));
 
-static void
-value_print_array_elements PARAMS ((value, GDB_FILE *, int, enum val_prettyprint));
+static void value_print_array_elements PARAMS ((value_ptr, GDB_FILE *, int,
+                                               enum val_prettyprint));
 
 /* Maximum number of chars to print for a string pointer value or vector
    contents, or UINT_MAX for no limit.  Note that "set print elements 0"
@@ -136,8 +137,7 @@ val_print (type, valaddr, address, stream, format, deref_ref, recurse, pretty)
 
   /* Ensure that the type is complete and not just a stub.  If the type is
      only a stub and we can't find and substitute its complete type, then
-     print appropriate string and return.  Typical types that my be stubs
-     are structs, unions, and C++ methods. */
+     print appropriate string and return.  */
 
   check_stub_type (type);
   if (TYPE_FLAGS (type) & TYPE_FLAG_STUB)
@@ -158,7 +158,7 @@ val_print (type, valaddr, address, stream, format, deref_ref, recurse, pretty)
 
 int
 value_print (val, stream, format, pretty)
-     value val;
+     value_ptr val;
      GDB_FILE *stream;
      int format;
      enum val_prettyprint pretty;
@@ -315,8 +315,10 @@ val_print_type_code_int (type, valaddr, stream)
    printf() that supports "ll" in the format string.  We handle these by seeing
    if the number is actually a long, and if not we just bail out and print the
    number in hex.  The format chars b,h,w,g are from
-   print_scalar_formatted().  USE_LOCAL says whether or not to call the
-   local formatting routine to get the format.  */
+   print_scalar_formatted().  If USE_LOCAL, format it according to the current
+   language (this should be used for most integers which GDB prints, the
+   exception is things like protocols where the format of the integer is
+   a protocol thing, not a user-visible thing).  */
 
 void
 print_longest (stream, format, use_local, val_long)
@@ -601,7 +603,9 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
   elttype = TYPE_TARGET_TYPE (type);
   eltlen = TYPE_LENGTH (elttype);
   len = TYPE_LENGTH (type) / eltlen;
-             
+
+  annotate_array_section_begin (i, elttype);
+
   for (; i < len && things_printed < print_max; i++)
     {
       if (i != 0)
@@ -617,7 +621,7 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
            }
        }
       wrap_here (n_spaces (2 + 2 * recurse));
-      
+
       rep1 = i + 1;
       reps = 1;
       while ((rep1 < len) && 
@@ -626,12 +630,15 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
          ++reps;
          ++rep1;
        }
-      
+
       if (reps > repeat_count_threshold)
        {
          val_print (elttype, valaddr + i * eltlen, 0, stream, format,
                     deref_ref, recurse + 1, pretty);
+         annotate_elt_rep (reps);
          fprintf_filtered (stream, " <repeats %u times>", reps);
+         annotate_elt_rep_end ();
+
          i = rep1 - 1;
          things_printed += repeat_count_threshold;
        }
@@ -639,9 +646,11 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
        {
          val_print (elttype, valaddr + i * eltlen, 0, stream, format,
                     deref_ref, recurse + 1, pretty);
+         annotate_elt ();
          things_printed++;
        }
     }
+  annotate_array_section_end ();
   if (i < len)
     {
       fprintf_filtered (stream, "...");
@@ -650,7 +659,7 @@ val_print_array_elements (type, valaddr, address, stream, format, deref_ref,
 
 static void
 value_print_array_elements (val, stream, format, pretty)
-     value val;
+     value_ptr val;
      GDB_FILE *stream;
      int format;
      enum val_prettyprint pretty;
@@ -798,7 +807,12 @@ val_print_string (addr, len, stream)
            ++addr;
            ++bufptr;
            if (bufptr[-1] == '\0')
-             break;
+             {
+               /* We don't care about any error which happened after
+                  the NULL terminator.  */
+               errcode = 0;
+               break;
+             }
          }
       }
   } while (errcode == 0                                        /* no error */
@@ -849,13 +863,13 @@ val_print_string (addr, len, stream)
       if (errcode == EIO)
        {
          fprintf_filtered (stream, " <Address ");
-         print_address_numeric (addr, stream);
+         print_address_numeric (addr, 1, stream);
          fprintf_filtered (stream, " out of bounds>");
        }
       else
        {
          fprintf_filtered (stream, " <Error reading address ");
-         print_address_numeric (addr, stream);
+         print_address_numeric (addr, 1, stream);
          fprintf_filtered (stream, ": %s>", safe_strerror (errcode));
        }
     }
This page took 0.024831 seconds and 4 git commands to generate.