94 lines
3.0 KiB
Diff
94 lines
3.0 KiB
Diff
|
# 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 *);
|
|||
|
|