Blob Blame History Raw
# Never terminate `bt full' on a problem of variable resolving (BZ 466901).

--- ./gdb/f-valprint.c	2008-11-06 22:05:16.000000000 +0100
+++ ./gdb/f-valprint.c	2008-11-06 22:09:10.000000000 +0100
@@ -611,8 +611,7 @@ info_common_command (char *comname, int 
       while (entry != NULL)
 	{
 	  printf_filtered ("%s = ", DEPRECATED_SYMBOL_NAME (entry->symbol));
-	  print_variable_value (entry->symbol, fi, gdb_stdout);
-	  printf_filtered ("\n");
+	  print_variable_value_nl (entry->symbol, fi, gdb_stdout);
 	  entry = entry->next;
 	}
     }
--- ./gdb/printcmd.c	2008-11-06 22:05:16.000000000 +0100
+++ ./gdb/printcmd.c	2008-11-06 22:06:55.000000000 +0100
@@ -42,6 +42,7 @@
 #include "block.h"
 #include "disasm.h"
 #include "dfp.h"
+#include "exceptions.h"
 
 #ifdef TUI
 #include "tui/tui.h"		/* For tui_active et.al.   */
@@ -1721,15 +1722,26 @@ disable_display_command (char *args, int
 
 
 /* Print the value in stack frame FRAME of a variable specified by a
-   struct symbol.  */
+   struct symbol.  Printed value gets terminated by a newline.  */
 
 void
-print_variable_value (struct symbol *var, struct frame_info *frame,
-		      struct ui_file *stream)
+print_variable_value_nl (struct symbol *var, struct frame_info *frame,
+			 struct ui_file *stream)
 {
-  struct value *val = read_var_value (var, frame);
+  struct value *val;
+  struct gdb_exception e;
 
-  value_print (val, stream, 0, Val_pretty_default);
+  TRY_CATCH (e, RETURN_MASK_ERROR)
+    {
+      val = read_var_value (var, frame);
+    }
+  if (e.reason < 0)
+    exception_print (stream, e);
+  else
+    {
+      value_print (val, stream, 0, Val_pretty_default);
+      fprintf_filtered (stream, "\n");
+    }
 }
 
 static void
--- ./gdb/stack.c	2008-11-06 22:05:16.000000000 +0100
+++ ./gdb/stack.c	2008-11-06 22:08:45.000000000 +0100
@@ -1412,8 +1412,7 @@ print_block_frame_locals (struct block *
 	    fputs_filtered ("\t", stream);
 	  fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
 	  fputs_filtered (" = ", stream);
-	  print_variable_value (sym, frame, stream);
-	  fprintf_filtered (stream, "\n");
+	  print_variable_value_nl (sym, frame, stream);
 	  break;
 
 	default:
@@ -1633,8 +1632,7 @@ print_frame_arg_vars (struct frame_info 
 
 	  sym2 = lookup_symbol (DEPRECATED_SYMBOL_NAME (sym),
 				b, VAR_DOMAIN, NULL, NULL);
-	  print_variable_value (sym2, frame, stream);
-	  fprintf_filtered (stream, "\n");
+	  print_variable_value_nl (sym2, frame, stream);
 	  break;
 
 	default:
--- ./gdb/value.h	2008-11-06 22:05:16.000000000 +0100
+++ ./gdb/value.h	2008-11-06 22:08:07.000000000 +0100
@@ -526,9 +526,9 @@ extern int common_val_print (struct valu
 extern int val_print_string (CORE_ADDR addr, int len, int width,
 			     struct ui_file *stream);
 
-extern void print_variable_value (struct symbol *var,
-				  struct frame_info *frame,
-				  struct ui_file *stream);
+extern void print_variable_value_nl (struct symbol *var,
+				     struct frame_info *frame,
+				     struct ui_file *stream);
 
 extern int check_field (struct value *, const char *);