74f680bfbd
466901), bugreported by Michal Babej. - Never terminate `bt full' on a problem of variable resolving (for BZ 466901).
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 *);
|
||
|