diff options
author | aburgess <aburgess> | 2013-07-30 15:05:00 +0000 |
---|---|---|
committer | aburgess <aburgess> | 2013-07-30 15:05:00 +0000 |
commit | fe870957318b688c9f8788863a3447a88262f3d5 (patch) | |
tree | 65caf6f14d751eed04f1b3da688da77ed17b8a21 /gdb/value.c | |
parent | 19dbd794eaea44916da1de106ae42a5d1e4523e0 (diff) | |
download | gdb-fe870957318b688c9f8788863a3447a88262f3d5.tar.gz |
value_fetch_lazy, ensure parent is not lazy and check parent for validity.
http://sourceware.org/ml/gdb-patches/2013-07/msg00316.html
gdb/ChangeLog
* value.c (value_fetch_lazy): Ensure parent value is not lazy
before checking which bits of the parent, not the child, value are
valid.
gdb/testsuite/ChangeLog
* gdb.dwarf2/pieces-optimized-out.exp: New file.
* gdb.dwarf2/pieces-optimized-out.c: New file.
* gdb.dwarf2/pieces-optimized-out.S: New file.
Diffstat (limited to 'gdb/value.c')
-rw-r--r-- | gdb/value.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gdb/value.c b/gdb/value.c index 04f325f9760..8e0f8c4dcc0 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -3433,7 +3433,10 @@ value_fetch_lazy (struct value *val) LONGEST offset = value_offset (val); LONGEST num; - if (!value_bits_valid (val, + if (value_lazy (parent)) + value_fetch_lazy (parent); + + if (!value_bits_valid (parent, TARGET_CHAR_BIT * offset + value_bitpos (val), value_bitsize (val))) error (_("value has been optimized out")); |