aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-09-08 15:26:08 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-09-08 15:26:08 +0000
commit8afd712c6f6c36b80754178aae94d74aa48ffcd5 (patch)
tree6aa7a9f983fca3aa6f1a69b888da0ab5314e2c20
parentb99b5f66e1d6f80624e8a28b8ebbf9235d50041e (diff)
downloadbinutils-8afd712c6f6c36b80754178aae94d74aa48ffcd5.zip
binutils-8afd712c6f6c36b80754178aae94d74aa48ffcd5.tar.gz
binutils-8afd712c6f6c36b80754178aae94d74aa48ffcd5.tar.bz2
gdb/
* findvar.c (read_var_value): Never return NULL, throw an error instead. Update the function comment. State symbol name in the error messages. * python/py-frame.c (frapy_read_var): Remove handling of NULL from read_var_value. * stack.c (print_frame_args): Likewise. * valops.c (value_of_variable): Likewise.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/findvar.c22
-rw-r--r--gdb/python/py-frame.c8
-rw-r--r--gdb/stack.c37
-rw-r--r--gdb/valops.c7
5 files changed, 41 insertions, 43 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e7f3da7..9f4697a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
2011-09-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * findvar.c (read_var_value): Never return NULL, throw an error
+ instead. Update the function comment. State symbol name in the error
+ messages.
+ * python/py-frame.c (frapy_read_var): Remove handling of NULL from
+ read_var_value.
+ * stack.c (print_frame_args): Likewise.
+ * valops.c (value_of_variable): Likewise.
+
+2011-09-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+
* stack.c (print_frame_args): New variable except. Wrap
read_var_value and common_val_print into TRY_CATCH.
diff --git a/gdb/findvar.c b/gdb/findvar.c
index 69dc5a0..8e986f1 100644
--- a/gdb/findvar.c
+++ b/gdb/findvar.c
@@ -409,7 +409,7 @@ symbol_read_needs_frame (struct symbol *sym)
/* Given a struct symbol for a variable,
and a stack frame id, read the value of the variable
and return a (pointer to a) struct value containing the value.
- If the variable cannot be found, return a zero pointer. */
+ If the variable cannot be found, throw error. */
struct value *
read_var_value (struct symbol *var, struct frame_info *frame)
@@ -477,7 +477,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
case LOC_ARG:
addr = get_frame_args_address (frame);
if (!addr)
- return 0;
+ error (_("Unknown argument list address for `%s'."),
+ SYMBOL_PRINT_NAME (var));
addr += SYMBOL_VALUE (var);
v = allocate_value_lazy (type);
break;
@@ -489,7 +490,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
argref = get_frame_args_address (frame);
if (!argref)
- return 0;
+ error (_("Unknown argument list address for `%s'."),
+ SYMBOL_PRINT_NAME (var));
argref += SYMBOL_VALUE (var);
ref = value_at (lookup_pointer_type (type), argref);
addr = value_as_address (ref);
@@ -504,7 +506,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
break;
case LOC_TYPEDEF:
- error (_("Cannot look up value of a typedef"));
+ error (_("Cannot look up value of a typedef `%s'."),
+ SYMBOL_PRINT_NAME (var));
break;
case LOC_BLOCK:
@@ -530,7 +533,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
frame);
if (regval == NULL)
- error (_("Value of register variable not available."));
+ error (_("Value of register variable not available for `%s'."),
+ SYMBOL_PRINT_NAME (var));
addr = value_as_address (regval);
v = allocate_value_lazy (type);
@@ -540,7 +544,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
regval = value_from_register (type, regno, frame);
if (regval == NULL)
- error (_("Value of register variable not available."));
+ error (_("Value of register variable not available for `%s'."),
+ SYMBOL_PRINT_NAME (var));
return regval;
}
}
@@ -561,7 +566,7 @@ read_var_value (struct symbol *var, struct frame_info *frame)
msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (var), NULL, NULL);
if (msym == NULL)
- return 0;
+ error (_("No global symbol \"%s\"."), SYMBOL_LINKAGE_NAME (var));
if (overlay_debugging)
addr = symbol_overlayed_address (SYMBOL_VALUE_ADDRESS (msym),
SYMBOL_OBJ_SECTION (msym));
@@ -580,7 +585,8 @@ read_var_value (struct symbol *var, struct frame_info *frame)
return allocate_optimized_out_value (type);
default:
- error (_("Cannot look up value of a botched symbol."));
+ error (_("Cannot look up value of a botched symbol `%s'."),
+ SYMBOL_PRINT_NAME (var));
break;
}
diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c
index 7efd13f..9143367 100644
--- a/gdb/python/py-frame.c
+++ b/gdb/python/py-frame.c
@@ -467,14 +467,6 @@ frapy_read_var (PyObject *self, PyObject *args)
}
GDB_PY_HANDLE_EXCEPTION (except);
- if (!val)
- {
- PyErr_Format (PyExc_ValueError,
- _("Variable cannot be found for symbol '%s'."),
- SYMBOL_NATURAL_NAME (var));
- return NULL;
- }
-
return value_to_value_object (val);
}
diff --git a/gdb/stack.c b/gdb/stack.c
index 3147f3e..15666ee 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -330,6 +330,9 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
TRY_CATCH (except, RETURN_MASK_ERROR)
{
+ const struct language_defn *language;
+ struct value_print_options opts;
+
/* Avoid value_print because it will deref ref parameters.
We just want to print their addresses. Print ??? for
args whose address we do not know. We pass 2 as
@@ -338,29 +341,21 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
recurse. */
val = read_var_value (sym, frame);
- annotate_arg_value (val == NULL ? NULL : value_type (val));
+ annotate_arg_value (value_type (val));
- if (val)
- {
- const struct language_defn *language;
- struct value_print_options opts;
-
- /* Use the appropriate language to display our symbol,
- unless the user forced the language to a specific
- language. */
- if (language_mode == language_mode_auto)
- language = language_def (SYMBOL_LANGUAGE (sym));
- else
- language = current_language;
-
- get_raw_print_options (&opts);
- opts.deref_ref = 0;
- opts.summary = summary;
- common_val_print (val, stb->stream, 2, &opts, language);
- ui_out_field_stream (uiout, "value", stb);
- }
+ /* Use the appropriate language to display our symbol,
+ unless the user forced the language to a specific
+ language. */
+ if (language_mode == language_mode_auto)
+ language = language_def (SYMBOL_LANGUAGE (sym));
else
- ui_out_text (uiout, "???");
+ language = current_language;
+
+ get_raw_print_options (&opts);
+ opts.deref_ref = 0;
+ opts.summary = summary;
+ common_val_print (val, stb->stream, 2, &opts, language);
+ ui_out_field_stream (uiout, "value", stb);
}
if (except.reason < 0)
{
diff --git a/gdb/valops.c b/gdb/valops.c
index 25e0fc3..32d71cd 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -1488,7 +1488,6 @@ value_repeat (struct value *arg1, int count)
struct value *
value_of_variable (struct symbol *var, struct block *b)
{
- struct value *val;
struct frame_info *frame;
if (!symbol_read_needs_frame (var))
@@ -1509,11 +1508,7 @@ value_of_variable (struct symbol *var, struct block *b)
}
}
- val = read_var_value (var, frame);
- if (!val)
- error (_("Address of symbol \"%s\" is unknown."), SYMBOL_PRINT_NAME (var));
-
- return val;
+ return read_var_value (var, frame);
}
struct value *