Author: emaste
Date: Tue Nov 13 01:21:17 2012
New Revision: 242936
URL: http://svnweb.freebsd.org/changeset/base/242936

Log:
  Set optimized_out instead of reporting an error.
  
  This provides a better display when debugging code compiled with
  optimization on.
  
  GDB git revision e8395b4efd184f745070afb953f451f99e922be7 (prior to GDB's
  switch to GPLv3), modified for the interfaces provided by GDB 6.1.1.
  
  2005-02-28  Daniel Jacobowitz  <d...@codesourcery.com>
  
   * dwarf2loc.c (loclist_read_variable): Set optimized_out
   instead of reporting an error.
   * valprint.c (value_check_printable): New function.
   (common_val_print): New function.  Use value_check_printable.
   (value_print): Use value_check_printable.
   * value.h (common_val_print): Add prototype.
   * c-valprint.c (c_val_print): Use common_val_print.
   * cp-valprint.c (cp_print_value_fields): Likewise.
   (cp_print_hpacc_virtual_table_entries): Likewise.
   * f-valprint.c (f_val_print): Likewise.
   * jv-valprint.c (java_value_print, java_print_value_fields):
   Likewise.
   * scm-valprint.c (scm_value_print): Likewise.
   * stack.c (print_frame_args): Likewise.
   * varobj.c (c_value_of_variable): Likewise.
   * p-valprint.c (pascal_val_print, pascal_value_print): Likewise.
   (pascal_object_print_value_fields): Likewise.  Update call to
   pascal_object_print_static_field.
   (pascal_object_print_static_field): Remove TYPE argument.  Use
   common_val_print.
  
  Sponsored by: ADARA Networks
  MFC after:    1 month

Modified:
  head/contrib/gdb/gdb/c-valprint.c
  head/contrib/gdb/gdb/cp-valprint.c
  head/contrib/gdb/gdb/dwarf2loc.c
  head/contrib/gdb/gdb/f-valprint.c
  head/contrib/gdb/gdb/jv-valprint.c
  head/contrib/gdb/gdb/p-valprint.c
  head/contrib/gdb/gdb/scm-valprint.c
  head/contrib/gdb/gdb/stack.c
  head/contrib/gdb/gdb/valprint.c
  head/contrib/gdb/gdb/value.h
  head/contrib/gdb/gdb/varobj.c

Modified: head/contrib/gdb/gdb/c-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/c-valprint.c   Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/c-valprint.c   Tue Nov 13 01:21:17 2012        
(r242936)
@@ -232,9 +232,8 @@ c_val_print (struct type *type, char *va
                      wtype = TYPE_TARGET_TYPE (type);
                    }
                  vt_val = value_at (wtype, vt_address, NULL);
-                 val_print (VALUE_TYPE (vt_val), VALUE_CONTENTS (vt_val), 0,
-                            VALUE_ADDRESS (vt_val), stream, format,
-                            deref_ref, recurse + 1, pretty);
+                 common_val_print (vt_val, stream, format,
+                                   deref_ref, recurse + 1, pretty);
                  if (pretty)
                    {
                      fprintf_filtered (stream, "\n");
@@ -283,15 +282,8 @@ c_val_print (struct type *type, char *va
               unpack_pointer (lookup_pointer_type (builtin_type_void),
                               valaddr + embedded_offset),
               NULL);
-             val_print (VALUE_TYPE (deref_val),
-                        VALUE_CONTENTS (deref_val),
-                        0,
-                        VALUE_ADDRESS (deref_val),
-                        stream,
-                        format,
-                        deref_ref,
-                        recurse,
-                        pretty);
+             common_val_print (deref_val, stream, format, deref_ref,
+                               recurse, pretty);
            }
          else
            fputs_filtered ("???", stream);

Modified: head/contrib/gdb/gdb/cp-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/cp-valprint.c  Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/cp-valprint.c  Tue Nov 13 01:21:17 2012        
(r242936)
@@ -361,8 +361,7 @@ cp_print_value_fields (struct type *type
                    (TYPE_FIELD_TYPE (type, i), 
                     unpack_field_as_long (type, valaddr + offset, i));
 
-                 val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v),
-                            0, 0, stream, format, 0, recurse + 1, pretty);
+                 common_val_print (v, stream, format, 0, recurse + 1, pretty);
                }
            }
          else
@@ -426,8 +425,7 @@ cp_print_value_fields (struct type *type
       v = value_from_pointer (lookup_pointer_type (builtin_type_unsigned_long),
                              *(unsigned long *) (valaddr + offset));
 
-      val_print (VALUE_TYPE (v), VALUE_CONTENTS (v), 0, 0,
-                stream, format, 0, recurse + 1, pretty);
+      common_val_print (v, stream, format, 0, recurse + 1, pretty);
       fields_seen = 1;
 
       if (vtblprint)
@@ -791,8 +789,7 @@ cp_print_hpacc_virtual_table_entries (st
          VALUE_TYPE (vf) = VALUE_TYPE (v);     /* make it a pointer */
 
          /* print out the entry */
-         val_print (VALUE_TYPE (vf), VALUE_CONTENTS (vf), 0, 0,
-                    stream, format, 0, recurse + 1, pretty);
+         common_val_print (vf, stream, format, 0, recurse + 1, pretty);
          field_physname
            = TYPE_FN_FIELD_PHYSNAME (TYPE_FN_FIELDLIST1 (type, fn), oi);
          /* pai: (temp) FIXME Maybe this should be DMGL_ANSI */

Modified: head/contrib/gdb/gdb/dwarf2loc.c
==============================================================================
--- head/contrib/gdb/gdb/dwarf2loc.c    Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/dwarf2loc.c    Tue Nov 13 01:21:17 2012        
(r242936)
@@ -492,9 +492,14 @@ loclist_read_variable (struct symbol *sy
   data = find_location_expression (dlbaton, &size,
                                   frame ? get_frame_pc (frame) : 0);
   if (data == NULL)
-    error ("Variable \"%s\" is not available.", SYMBOL_NATURAL_NAME (symbol));
-
-  val = dwarf2_evaluate_loc_desc (symbol, frame, data, size, dlbaton->objfile);
+    {
+      val = allocate_value (SYMBOL_TYPE (symbol));
+      VALUE_LVAL (val) = not_lval;
+      VALUE_OPTIMIZED_OUT (val) = 1;
+    }
+  else
+    val = dwarf2_evaluate_loc_desc (symbol, frame, data, size,
+                                   dlbaton->objfile);
 
   return val;
 }

Modified: head/contrib/gdb/gdb/f-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/f-valprint.c   Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/f-valprint.c   Tue Nov 13 01:21:17 2012        
(r242936)
@@ -444,15 +444,8 @@ f_val_print (struct type *type, char *va
               unpack_pointer (lookup_pointer_type (builtin_type_void),
                               valaddr + embedded_offset),
               NULL);
-             val_print (VALUE_TYPE (deref_val),
-                        VALUE_CONTENTS (deref_val),
-                        0,
-                        VALUE_ADDRESS (deref_val),
-                        stream,
-                        format,
-                        deref_ref,
-                        recurse,
-                        pretty);
+             common_val_print (deref_val, stream, format, deref_ref, recurse,
+                               pretty);
            }
          else
            fputs_filtered ("???", stream);

Modified: head/contrib/gdb/gdb/jv-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/jv-valprint.c  Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/jv-valprint.c  Tue Nov 13 01:21:17 2012        
(r242936)
@@ -189,8 +189,7 @@ java_value_print (struct value *val, str
              else
                fprintf_filtered (stream, "%d..%d: ", i, i + reps - 1);
 
-             val_print (VALUE_TYPE (v), VALUE_CONTENTS (v), 0, 0,
-                        stream, format, 2, 1, pretty);
+             common_val_print (v, stream, format, 2, 1, pretty);
 
              things_printed++;
              i += reps;
@@ -242,8 +241,7 @@ java_value_print (struct value *val, str
       return 0;
     }
 
-  return (val_print (type, VALUE_CONTENTS (val), 0, address,
-                    stream, format, 1, 0, pretty));
+  return common_val_print (val, stream, format, 1, 0, pretty);
 }
 
 /* TYPE, VALADDR, ADDRESS, STREAM, RECURSE, and PRETTY have the
@@ -391,8 +389,7 @@ java_print_value_fields (struct type *ty
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
-                 val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0,
-                            0, stream, format, 0, recurse + 1, pretty);
+                 common_val_print (v, stream, format, 0, recurse + 1, pretty);
                }
            }
          else
@@ -411,9 +408,8 @@ java_print_value_fields (struct type *ty
                      struct type *t = check_typedef (VALUE_TYPE (v));
                      if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
                        v = value_addr (v);
-                     val_print (VALUE_TYPE (v),
-                                VALUE_CONTENTS (v), 0, VALUE_ADDRESS (v),
-                                stream, format, 0, recurse + 1, pretty);
+                     common_val_print (v, stream, format, 0, recurse + 1,
+                                       pretty);
                    }
                }
              else if (TYPE_FIELD_TYPE (type, i) == NULL)

Modified: head/contrib/gdb/gdb/p-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/p-valprint.c   Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/p-valprint.c   Tue Nov 13 01:21:17 2012        
(r242936)
@@ -238,9 +238,8 @@ pascal_val_print (struct type *type, cha
                      wtype = TYPE_TARGET_TYPE (type);
                    }
                  vt_val = value_at (wtype, vt_address, NULL);
-                 val_print (VALUE_TYPE (vt_val), VALUE_CONTENTS (vt_val), 0,
-                            VALUE_ADDRESS (vt_val), stream, format,
-                            deref_ref, recurse + 1, pretty);
+                 common_val_print (vt_val, stream, format, deref_ref,
+                                   recurse + 1, pretty);
                  if (pretty)
                    {
                      fprintf_filtered (stream, "\n");
@@ -291,10 +290,8 @@ pascal_val_print (struct type *type, cha
               unpack_pointer (lookup_pointer_type (builtin_type_void),
                               valaddr + embedded_offset),
               NULL);
-             val_print (VALUE_TYPE (deref_val),
-                        VALUE_CONTENTS (deref_val), 0,
-                        VALUE_ADDRESS (deref_val), stream, format,
-                        deref_ref, recurse + 1, pretty);
+             common_val_print (deref_val, stream, format, deref_ref,
+                               recurse + 1, pretty);
            }
          else
            fputs_filtered ("???", stream);
@@ -565,9 +562,7 @@ pascal_value_print (struct value *val, s
          fprintf_filtered (stream, ") ");
        }
     }
-  return val_print (type, VALUE_CONTENTS (val), VALUE_EMBEDDED_OFFSET (val),
-                   VALUE_ADDRESS (val) + VALUE_OFFSET (val),
-                   stream, format, 1, 0, pretty);
+  return common_val_print (val, stream, format, 1, 0, pretty);
 }
 
 
@@ -583,7 +578,7 @@ static int pascal_static_field_print;       /*
 static struct obstack dont_print_vb_obstack;
 static struct obstack dont_print_statmem_obstack;
 
-static void pascal_object_print_static_field (struct type *, struct value *,
+static void pascal_object_print_static_field (struct value *,
                                              struct ui_file *, int, int,
                                              enum val_prettyprint);
 
@@ -844,8 +839,7 @@ pascal_object_print_value_fields (struct
                  v = value_from_longest (TYPE_FIELD_TYPE (type, i),
                                   unpack_field_as_long (type, valaddr, i));
 
-                 val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0, 
0,
-                            stream, format, 0, recurse + 1, pretty);
+                 common_val_print (v, stream, format, 0, recurse + 1, pretty);
                }
            }
          else
@@ -864,9 +858,8 @@ pascal_object_print_value_fields (struct
                  if (v == NULL)
                    fputs_filtered ("<optimized out>", stream);
                  else
-                   pascal_object_print_static_field (TYPE_FIELD_TYPE (type, 
i), v,
-                                               stream, format, recurse + 1,
-                                                     pretty);
+                   pascal_object_print_static_field (v, stream, format,
+                                                     recurse + 1, pretty);
                }
              else
                {
@@ -1005,14 +998,16 @@ pascal_object_print_value (struct type *
    static member classes in an obstack and refuse to print them more
    than once.
 
-   VAL contains the value to print, TYPE, STREAM, RECURSE, and PRETTY
+   VAL contains the value to print, STREAM, RECURSE, and PRETTY
    have the same meanings as in c_val_print.  */
 
 static void
-pascal_object_print_static_field (struct type *type, struct value *val,
+pascal_object_print_static_field (struct value *val,
                                  struct ui_file *stream, int format,
                                  int recurse, enum val_prettyprint pretty)
 {
+  struct type *type = VALUE_TYPE (val);
+
   if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
     {
       CORE_ADDR *first_dont_print;
@@ -1041,8 +1036,7 @@ pascal_object_print_static_field (struct
                                  stream, format, recurse, pretty, NULL, 1);
       return;
     }
-  val_print (type, VALUE_CONTENTS (val), 0, VALUE_ADDRESS (val),
-            stream, format, 0, recurse, pretty);
+  common_val_print (val, stream, format, 0, recurse, pretty);
 }
 
 void

Modified: head/contrib/gdb/gdb/scm-valprint.c
==============================================================================
--- head/contrib/gdb/gdb/scm-valprint.c Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/scm-valprint.c Tue Nov 13 01:21:17 2012        
(r242936)
@@ -390,6 +390,5 @@ int
 scm_value_print (struct value *val, struct ui_file *stream, int format,
                 enum val_prettyprint pretty)
 {
-  return (val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), 0,
-                    VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
+  return (common_val_print (val, stream, format, 1, 0, pretty));
 }

Modified: head/contrib/gdb/gdb/stack.c
==============================================================================
--- head/contrib/gdb/gdb/stack.c        Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/stack.c        Tue Nov 13 01:21:17 2012        
(r242936)
@@ -354,9 +354,7 @@ print_frame_args (struct symbol *func, s
 
          if (val)
            {
-             val_print (VALUE_TYPE (val), VALUE_CONTENTS (val), 0,
-                        VALUE_ADDRESS (val),
-                        stb->stream, 0, 0, 2, Val_no_prettyprint);
+             common_val_print (val, stb->stream, 0, 0, 2, Val_no_prettyprint);
              ui_out_field_stream (uiout, "value", stb);
            }
          else

Modified: head/contrib/gdb/gdb/valprint.c
==============================================================================
--- head/contrib/gdb/gdb/valprint.c     Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/valprint.c     Tue Nov 13 01:21:17 2012        
(r242936)
@@ -150,25 +150,66 @@ val_print (struct type *type, char *vala
                        stream, format, deref_ref, recurse, pretty));
 }
 
-/* Print the value VAL in C-ish syntax on stream STREAM.
-   FORMAT is a format-letter, or 0 for print in natural format of data type.
-   If the object printed is a string pointer, returns
-   the number of string bytes printed.  */
+/* Check whether the value VAL is printable.  Return 1 if it is;
+   return 0 and print an appropriate error message to STREAM if it
+   is not.  */
 
-int
-value_print (struct value *val, struct ui_file *stream, int format,
-            enum val_prettyprint pretty)
+static int
+value_check_printable (struct value *val, struct ui_file *stream)
 {
   if (val == 0)
     {
-      printf_filtered ("<address of value unknown>");
+      fprintf_filtered (stream, "<address of value unknown>");
       return 0;
     }
+
   if (VALUE_OPTIMIZED_OUT (val))
     {
-      printf_filtered ("<value optimized out>");
+      fprintf_filtered (stream, "<value optimized out>");
       return 0;
     }
+
+  return 1;
+}
+
+/* Print the value VAL onto stream STREAM according to FORMAT (a
+   letter, or 0 for natural format using TYPE).
+
+   If DEREF_REF is nonzero, then dereference references, otherwise just print
+   them like pointers.
+
+   The PRETTY parameter controls prettyprinting.
+
+   If the data are a string pointer, returns the number of string characters
+   printed.
+
+   This is a preferable interface to val_print, above, because it uses
+   GDB's value mechanism.  */
+
+int
+common_val_print (struct value *val, struct ui_file *stream, int format,
+                 int deref_ref, int recurse, enum val_prettyprint pretty)
+{
+  if (!value_check_printable (val, stream))
+    return 0;
+
+  return val_print (VALUE_TYPE(val), VALUE_CONTENTS_ALL (val),
+                   VALUE_EMBEDDED_OFFSET (val), VALUE_ADDRESS (val),
+                   stream, format, deref_ref, recurse, pretty);
+}
+
+/* Print the value VAL in C-ish syntax on stream STREAM.
+   FORMAT is a format-letter, or 0 for print in natural format of data type.
+   If the object printed is a string pointer, returns
+   the number of string bytes printed.  */
+
+int
+value_print (struct value *val, struct ui_file *stream, int format,
+            enum val_prettyprint pretty)
+{
+  if (!value_check_printable (val, stream))
+    return 0;
+
   return LA_VALUE_PRINT (val, stream, format, pretty);
 }
 

Modified: head/contrib/gdb/gdb/value.h
==============================================================================
--- head/contrib/gdb/gdb/value.h        Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/value.h        Tue Nov 13 01:21:17 2012        
(r242936)
@@ -523,6 +523,11 @@ extern int val_print (struct type * type
                      int deref_ref, int recurse,
                      enum val_prettyprint pretty);
 
+extern int common_val_print (struct value *val,
+                            struct ui_file *stream, int format,
+                            int deref_ref, int recurse,
+                            enum val_prettyprint pretty);
+
 extern int val_print_string (CORE_ADDR addr, int len, int width, struct 
ui_file *stream);
 
 extern void print_variable_value (struct symbol * var,

Modified: head/contrib/gdb/gdb/varobj.c
==============================================================================
--- head/contrib/gdb/gdb/varobj.c       Mon Nov 12 22:38:54 2012        
(r242935)
+++ head/contrib/gdb/gdb/varobj.c       Tue Nov 13 01:21:17 2012        
(r242936)
@@ -2093,10 +2093,8 @@ c_value_of_variable (struct varobj *var)
 
            if (VALUE_LAZY (var->value))
              gdb_value_fetch_lazy (var->value);
-           val_print (VALUE_TYPE (var->value),
-                      VALUE_CONTENTS_RAW (var->value), 0,
-                      VALUE_ADDRESS (var->value), stb,
-                      format_code[(int) var->format], 1, 0, 0);
+           common_val_print (var->value, stb,
+                             format_code[(int) var->format], 1, 0, 0);
            thevalue = ui_file_xstrdup (stb, &dummy);
            do_cleanups (old_chain);
        return thevalue;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to