diff options
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/dwarf2loc.c | 17 | ||||
-rw-r--r-- | gdb/findvar.c | 5 | ||||
-rw-r--r-- | gdb/value.c | 12 | ||||
-rw-r--r-- | gdb/value.h | 2 |
5 files changed, 28 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 60452ba..8ed7eaf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2011-07-12 Jan Kratochvil <jan.kratochvil@redhat.com> + Code cleanup making also optimized out values lazy. + * dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use + allocate_optimized_out_value. Twice. + (loclist_read_variable) Use allocate_optimized_out_value. Once. + * findvar.c (read_var_value): Likewise. + * value.c (allocate_optimized_out_value): New function. + * value.h (allocate_optimized_out_value): New declaration. + +2011-07-12 Jan Kratochvil <jan.kratochvil@redhat.com> + Fix occasional crash of CTRL-C during DWARF read in. * dwarf2read.c (dwarf2_mark_helper): Return on NULL CU. diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index baac1c6..101ce1c 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -1094,12 +1094,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, invalid_synthetic_pointer (); if (size == 0) - { - retval = allocate_value (type); - VALUE_LVAL (retval) = not_lval; - set_value_optimized_out (retval, 1); - return retval; - } + return allocate_optimized_out_value (type); baton.frame = frame; baton.per_cu = per_cu; @@ -1247,9 +1242,7 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame, case DWARF_VALUE_OPTIMIZED_OUT: do_cleanups (value_chain); - retval = allocate_value (type); - VALUE_LVAL (retval) = not_lval; - set_value_optimized_out (retval, 1); + retval = allocate_optimized_out_value (type); break; /* DWARF_VALUE_IMPLICIT_POINTER was converted to a pieced @@ -2829,11 +2822,7 @@ loclist_read_variable (struct symbol *symbol, struct frame_info *frame) data = dwarf2_find_location_expression (dlbaton, &size, pc); if (data == NULL) - { - val = allocate_value (SYMBOL_TYPE (symbol)); - VALUE_LVAL (val) = not_lval; - set_value_optimized_out (val, 1); - } + val = allocate_optimized_out_value (SYMBOL_TYPE (symbol)); else val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, data, size, dlbaton->per_cu); diff --git a/gdb/findvar.c b/gdb/findvar.c index 2b361efe..a700c02 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -577,10 +577,7 @@ read_var_value (struct symbol *var, struct frame_info *frame) break; case LOC_OPTIMIZED_OUT: - v = allocate_value_lazy (type); - VALUE_LVAL (v) = not_lval; - set_value_optimized_out (v, 1); - return v; + return allocate_optimized_out_value (type); default: error (_("Cannot look up value of a botched symbol.")); diff --git a/gdb/value.c b/gdb/value.c index ccd29c8..f308f3d 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -728,6 +728,18 @@ allocate_computed_value (struct type *type, return v; } +/* Allocate NOT_LVAL value for type TYPE being OPTIMIZED_OUT. */ + +struct value * +allocate_optimized_out_value (struct type *type) +{ + struct value *retval = allocate_value_lazy (type); + + set_value_optimized_out (retval, 1); + + return retval; +} + /* Accessor methods. */ struct value * diff --git a/gdb/value.h b/gdb/value.h index 03ca36b..3079831 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -207,6 +207,8 @@ extern struct value *allocate_computed_value (struct type *type, struct lval_funcs *funcs, void *closure); +extern struct value *allocate_optimized_out_value (struct type *type); + /* If VALUE is lval_computed, return its lval_funcs structure. */ extern struct lval_funcs *value_computed_funcs (struct value *value); |