gdb: xtensa: fix test for privileged register number
authorMax Filippov <jcmvbkbc@gmail.com>
Tue, 21 Feb 2017 23:41:31 +0000 (15:41 -0800)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 27 Mar 2017 20:00:55 +0000 (13:00 -0700)
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.

gdb/ChangeLog
gdb/xtensa-tdep.c

index 2faf4897a596f57f75861da396ab9399cc6bda2a..2cebe10b027ccc052860f2e01eac74c4638d556f 100644 (file)
@@ -1,3 +1,9 @@
+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
index 0000155b52bad9953547142c026550a85a005b2d..2338ac10ea5be0ec49a95afef00d81e3c728c9fb 100644 (file)
@@ -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;