diff options
author | Yao Qi <yao.qi@linaro.org> | 2016-12-06 14:25:51 +0000 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2016-12-06 14:25:51 +0000 |
commit | 7c2ba67e6ab10879968c938aefd4d0d0b4ce79bc (patch) | |
tree | f654ea7bb52fc5b536c17d212c6065ba2704932c /gdb/frame.c | |
parent | 5e359a63b7a39e0ff0f750ca8fc97d27b14c0ef7 (diff) | |
download | fsf-binutils-gdb-7c2ba67e6ab10879968c938aefd4d0d0b4ce79bc.zip fsf-binutils-gdb-7c2ba67e6ab10879968c938aefd4d0d0b4ce79bc.tar.gz fsf-binutils-gdb-7c2ba67e6ab10879968c938aefd4d0d0b4ce79bc.tar.bz2 |
Assert on lval_register
This patch adds asserts where the value's lval must be lval_register.
This triggers an error in frame_register_unwind because VALUE_REGNUM
is used but value's lval is not lval_register.
This also reveals a design issue in frame_register_unwind, that is
arguments addrp and realnump are mutually exclusive, we either use
addrp (for lval_memory), or use realnump (for lval_register). This
can be done in a separate patch.
gdb:
2016-12-06 Yao Qi <yao.qi@linaro.org>
* frame.c (frame_register_unwind): Set *realnump if *lvalp is
lval_register.
* value.c (deprecated_value_next_frame_id_hack): Assert
value->lval is lval_register.
(deprecated_value_regnum_hack): Likewise.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r-- | gdb/frame.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gdb/frame.c b/gdb/frame.c index 5414cb3..00001bc 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1107,7 +1107,10 @@ frame_register_unwind (struct frame_info *frame, int regnum, *unavailablep = !value_entirely_available (value); *lvalp = VALUE_LVAL (value); *addrp = value_address (value); - *realnump = VALUE_REGNUM (value); + if (*lvalp == lval_register) + *realnump = VALUE_REGNUM (value); + else + *realnump = -1; if (bufferp) { |