diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a1059aef8d7..728ed8ca414 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2018-05-09 Max Filippov + + * xtensa-linux-tdep.c (xtensa-tdep.h): New include. + (xtensa_linux_init_abi): Limit tdep->num_regs by + tdep->num_nopriv_regs. + * xtensa-tdep.c (xtensa_derive_tdep): Calculate + tdep->num_nopriv_regs and only copy it to tdep->num_regs if it's + not initialized. + 2018-05-08 Simon Marchi * unittests/string_view-selftests.c: Define GNULIB_NAMESPACE. diff --git a/gdb/xtensa-linux-tdep.c b/gdb/xtensa-linux-tdep.c index a9b30c73f7b..b62085de2fc 100644 --- a/gdb/xtensa-linux-tdep.c +++ b/gdb/xtensa-linux-tdep.c @@ -18,6 +18,7 @@ along with this program. If not, see . */ #include "defs.h" +#include "xtensa-tdep.h" #include "osabi.h" #include "linux-tdep.h" #include "solib-svr4.h" @@ -97,6 +98,11 @@ xtensa_linux_gdb_signal_to_target (struct gdbarch *gdbarch, static void xtensa_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + if (tdep->num_nopriv_regs < tdep->num_regs) + tdep->num_regs = tdep->num_nopriv_regs; + linux_init_abi (info, gdbarch); set_solib_svr4_fetch_link_map_offsets diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c index a1ecf5f56a4..01f96165dc8 100644 --- a/gdb/xtensa-tdep.c +++ b/gdb/xtensa-tdep.c @@ -3145,16 +3145,12 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep) max_size = rmap->byte_size; if (rmap->mask != 0 && tdep->num_regs == 0) tdep->num_regs = n; - /* Find out out how to deal with priveleged registers. - - if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0 - && tdep->num_nopriv_regs == 0) - tdep->num_nopriv_regs = n; - */ if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0 - && tdep->num_regs == 0) - tdep->num_regs = n; + && tdep->num_nopriv_regs == 0) + tdep->num_nopriv_regs = n; } + if (tdep->num_regs == 0) + tdep->num_regs = tdep->num_nopriv_regs; /* Number of pseudo registers. */ tdep->num_pseudo_regs = n - tdep->num_regs;