aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/valops.c11
-rw-r--r--gdb/value.h6
3 files changed, 21 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0dc93bf..b9e971a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Make some lval_funcs methods to default on NULL.
+ * valops.c (value_fetch_lazy): Check if lval_computed read method is
+ NULL.
+ (value_assign): Check if lval_computed write method is NULL.
+ * value.h (struct lval_funcs): Comment NULL values for read and write
+ methods.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Display @entry parameter values (without references).
* dwarf2expr.c (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
New functions.
diff --git a/gdb/valops.c b/gdb/valops.c
index 32d71cd..e88e9dc 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -1110,7 +1110,8 @@ value_fetch_lazy (struct value *val)
watchpoints from trying to watch the saved frame pointer. */
value_free_to_mark (mark);
}
- else if (VALUE_LVAL (val) == lval_computed)
+ else if (VALUE_LVAL (val) == lval_computed
+ && value_computed_funcs (val)->read != NULL)
value_computed_funcs (val)->read (val);
else if (value_optimized_out (val))
/* Keep it optimized out. */;
@@ -1381,9 +1382,13 @@ value_assign (struct value *toval, struct value *fromval)
{
const struct lval_funcs *funcs = value_computed_funcs (toval);
- funcs->write (toval, fromval);
+ if (funcs->write != NULL)
+ {
+ funcs->write (toval, fromval);
+ break;
+ }
}
- break;
+ /* Fall through. */
default:
error (_("Left operand of assignment is not an lvalue."));
diff --git a/gdb/value.h b/gdb/value.h
index 5d61a0b..83c94fc 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -156,13 +156,15 @@ struct lval_funcs
{
/* Fill in VALUE's contents. This is used to "un-lazy" values. If
a problem arises in obtaining VALUE's bits, this function should
- call 'error'. */
+ call 'error'. If it is NULL value_fetch_lazy on "un-lazy"
+ non-optimized-out value is an internal error. */
void (*read) (struct value *v);
/* Handle an assignment TOVAL = FROMVAL by writing the value of
FROMVAL to TOVAL's location. The contents of TOVAL have not yet
been updated. If a problem arises in doing so, this function
- should call 'error'. */
+ should call 'error'. If it is NULL such TOVAL assignment is an error as
+ TOVAL is not considered as an lvalue. */
void (*write) (struct value *toval, struct value *fromval);
/* Check the validity of some bits in VALUE. This should return 1