diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-01-12 16:10:05 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2011-01-12 16:10:05 +0000 |
commit | 41e8491fdf450e560451afb71c2d6c20708f78d6 (patch) | |
tree | 918ed00c8129ba9d9919af78235b8a462f2ee45c /gdb/ada-lang.c | |
parent | b716877b54891ba162293f5ec6b6cd222f711e4d (diff) | |
download | gdb-41e8491fdf450e560451afb71c2d6c20708f78d6.zip gdb-41e8491fdf450e560451afb71c2d6c20708f78d6.tar.gz gdb-41e8491fdf450e560451afb71c2d6c20708f78d6.tar.bz2 |
gdb/
Make value allocations more lazy.
* ada-lang.c (coerce_unspec_val_to_type): Use allocate_value_lazy
instead of allocate_value and set_value_lazy when possible.
* dwarf2loc.c (dwarf2_evaluate_loc_desc_full): Use allocate_value_lazy
instead of allocate_value and set_value_lazy.
* findvar.c (value_of_register_lazy): Likewise.
(read_var_value): Remove V preallocation, call just check_typedef in
advance. Move allocate_value to LOC_CONST, LOC_LABEL,
LOC_CONST_BYTES. Use allocate_value_lazy in LOC_STATIC, LOC_ARG,
LOC_REF_ARG, LOC_LOCAL, LOC_BLOCK. Set ADDR instead of
set_value_address and break in LOC_BLOCK. Use allocate_value_lazy and
remove lval_memory set in LOC_REGPARM_ADDR. Use allocate_value_lazy
in LOC_UNRESOLVED and LOC_OPTIMIZED_OUT. Add setting lval_memory at
the end, remove set_value_lazy there.
* valarith.c (value_subscripted_rvalue): Use allocate_value_lazy
instead of allocate_value and set_value_lazy when possible.
* valops.c (value_fetch_lazy): Do nop for value_optimized_out VAL.
* value.c (allocate_computed_value): Use allocate_value_lazy instead
of allocate_value and set_value_lazy.
(value_from_contents_and_address): Use allocate_value_lazy instead of
allocate_value and set_value_lazy when possible.
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r-- | gdb/ada-lang.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 73de1a0..890e091 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -556,17 +556,19 @@ coerce_unspec_val_to_type (struct value *val, struct type *type) trying to allocate some memory for it. */ check_size (type); - result = allocate_value (type); + if (value_lazy (val) + || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))) + result = allocate_value_lazy (type); + else + { + result = allocate_value (type); + memcpy (value_contents_raw (result), value_contents (val), + TYPE_LENGTH (type)); + } set_value_component_location (result, val); set_value_bitsize (result, value_bitsize (val)); set_value_bitpos (result, value_bitpos (val)); set_value_address (result, value_address (val)); - if (value_lazy (val) - || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))) - set_value_lazy (result, 1); - else - memcpy (value_contents_raw (result), value_contents (val), - TYPE_LENGTH (type)); return result; } } |