Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Nov 2012 01:21:17 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242936 - head/contrib/gdb/gdb
Message-ID:  <201211130121.qAD1LHGn052773@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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  <dan@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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211130121.qAD1LHGn052773>