diff options
author | aburgess <aburgess> | 2012-09-21 17:17:18 +0000 |
---|---|---|
committer | aburgess <aburgess> | 2012-09-21 17:17:18 +0000 |
commit | 6f8aebfd5e1ee271e6546d15f567d75aa092aefd (patch) | |
tree | e321d1e4cdbedf32a35b72efc0d1672ab4c826f2 /gdb/findvar.c | |
parent | 2807575223e4d2d0fe4aa0239b7e61a9988bc081 (diff) | |
download | gdb-6f8aebfd5e1ee271e6546d15f567d75aa092aefd.tar.gz |
http://sourceware.org/ml/gdb-patches/2012-08/msg00715.html
gdb/ChangeLog
* findvar.c (read_frame_register_value): Mark the result value as
optimized out if any of the input registers have been optimized out.
gdb/testsuite/ChangeLog
* gdb.dwarf2/dw2-op-out-param.S: New file.
* gdb.dwarf2/dw2-op-out-param.exp: New file.
Diffstat (limited to 'gdb/findvar.c')
-rw-r--r-- | gdb/findvar.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gdb/findvar.c b/gdb/findvar.c index 66bcebee348..ec9dde7810d 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -677,7 +677,10 @@ default_value_from_register (struct type *type, int regnum, /* VALUE must be an lval_register value. If regnum is the value's associated register number, and len the length of the values type, read one or more registers in FRAME, starting with register REGNUM, - until we've read LEN bytes. */ + until we've read LEN bytes. + + If any of the registers we try to read are optimized out, then mark the + complete resulting value as optimized out. */ void read_frame_register_value (struct value *value, struct frame_info *frame) @@ -703,6 +706,12 @@ read_frame_register_value (struct value *value, struct frame_info *frame) struct value *regval = get_frame_register_value (frame, regnum); int reg_len = TYPE_LENGTH (value_type (regval)) - reg_offset; + if (value_optimized_out (regval)) + { + set_value_optimized_out (value, 1); + break; + } + /* If the register length is larger than the number of bytes remaining to copy, then only copy the appropriate bytes. */ if (reg_len > len) |