diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2019-08-23 08:18:54 -0700 |
---|---|---|
committer | Sandra Loosemore <sandra@codesourcery.com> | 2019-08-23 08:18:54 -0700 |
commit | de8af80891ff0eee61cd219b316e176e9ae88e91 (patch) | |
tree | 86e11f1ea91c9ef4a6228c42c3b9db0b4972d505 /gdb/nios2-tdep.c | |
parent | 09f7b0de537d465fc8ed9f9433e348c1bc78aab2 (diff) | |
download | gdb-de8af80891ff0eee61cd219b316e176e9ae88e91.zip gdb-de8af80891ff0eee61cd219b316e176e9ae88e91.tar.gz gdb-de8af80891ff0eee61cd219b316e176e9ae88e91.tar.bz2 |
Fix bug in nios2 prologue analysis.
The nios2 prologue analyzer was mistakenly using an unsigned int field
to represent a 32-bit signed value. This caused problems with an
incorrect conversion being applied to negative values when they were
automatically promoted for addition to a 64-bit CORE_ADDR value.
This patch fixes test failures in gdb.base/large-frame.exp and
gdb.dwarf2/dw2-ref-missing-frame.exp. Normally the nios2 backend
prefers to use the dwarf2 unwinder so the prologue analyzer is only
invoked if there is no dwarf2 information.
2019-08-23 Sandra Loosemore <sandra@codesourcery.com>
gdb/
* nios2-tdep.c (struct reg_value): Improve comments. Make
the offset field signed.
Diffstat (limited to 'gdb/nios2-tdep.c')
-rw-r--r-- | gdb/nios2-tdep.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gdb/nios2-tdep.c b/gdb/nios2-tdep.c index 2a21c33..8d685d4 100644 --- a/gdb/nios2-tdep.c +++ b/gdb/nios2-tdep.c @@ -58,13 +58,15 @@ static int nios2_debug = 0; analysis; see the reg_value and reg_saved tables in struct nios2_unwind_cache, respectively. */ -/* struct reg_value is used to record that a register has the same value - as reg at the given offset from the start of a function. */ +/* struct reg_value is used to record that a register has reg's initial + value at the start of a function plus the given constant offset. + If reg == 0, then the value is just the offset. + If reg < 0, then the value is unknown. */ struct reg_value { int reg; - unsigned int offset; + int offset; }; /* struct reg_saved is used to record that a register value has been saved at |