aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2017-02-21 15:41:31 -0800
committerMax Filippov <jcmvbkbc@gmail.com>2017-03-27 13:00:55 -0700
commit0d0bf81a6729478563c3851ccfca435222ddfa25 (patch)
treee58a00716f61038160423aef6b22ceaf663e4616 /gdb
parent1a09b50a463ad005946849540da136b5cbe6237b (diff)
downloadgdb-0d0bf81a6729478563c3851ccfca435222ddfa25.zip
gdb-0d0bf81a6729478563c3851ccfca435222ddfa25.tar.gz
gdb-0d0bf81a6729478563c3851ccfca435222ddfa25.tar.bz2
gdb: xtensa: fix test for privileged register number
There are no a0-a15 pseudoregisters at the top of the register set in call0 registers layout. All registers above gdbarch_num_regs (gdbarch) are privileged. Treat them as such. This fixes the following gdb assertion seen when 'finish' command is invoked: regcache.c:649: internal-error: register_status regcache_raw_read(regcache*, int, gdb_byte*): Assertion `regnum >= 0 && regnum < regcache->descr->nr_raw_registers' failed. gdb/ 2017-03-27 Max Filippov <jcmvbkbc@gmail.com> * xtensa-tdep.c (xtensa_pseudo_register_read): Treat all registers above gdbarch_num_regs (gdbarch) as privileged in call0 ABI.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/xtensa-tdep.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2faf489..2cebe10 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2017-03-27 Max Filippov <jcmvbkbc@gmail.com>
+ * xtensa-tdep.c (xtensa_pseudo_register_read): Treat all
+ registers above gdbarch_num_regs (gdbarch) as privileged in
+ call0 ABI.
+
+2017-03-27 Max Filippov <jcmvbkbc@gmail.com>
+
* xtensa-linux-nat.c (fill_gregset): Call regcache_raw_collect
for a single specified register or for all registers in
a0_base..a0_base + C0_NREGS range.
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index 0000155..2338ac1 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -578,7 +578,8 @@ xtensa_pseudo_register_read (struct gdbarch *gdbarch,
/* We have to find out how to deal with priveleged registers.
Let's treat them as pseudo-registers, but we cannot read/write them. */
- else if (regnum < gdbarch_tdep (gdbarch)->a0_base)
+ else if (gdbarch_tdep (gdbarch)->call_abi == CallAbiCall0Only
+ || regnum < gdbarch_tdep (gdbarch)->a0_base)
{
buffer[0] = (gdb_byte)0;
buffer[1] = (gdb_byte)0;