From ab91a760248e910de3351da8c59ff193d48cb54d Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 19 Jul 2021 19:04:34 +0200 Subject: [PATCH] gdb/xtensa: don't supply loop registers if they are not present When parsing a core file on hardware configurations without the zero-overhead loop option (e.g. ESP32-S2 chip), GDB used to assert while trying to call 'raw_supply' for lbeg, lend, lcount registers, even though they were not set. This was because regnum == -1 was used to indicate "supply all registers" and lbeg_regnum == -1 was used to indicate "lbeg register not present", and regnum == lbeg_regnum check was considered successful. --- gdb/xtensa-tdep.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c index e413ea4ff50..11791c82210 100644 --- a/gdb/xtensa-tdep.c +++ b/gdb/xtensa-tdep.c @@ -833,13 +833,16 @@ xtensa_supply_gregset (const struct regset *regset, if (regnum == tdep->ws_regnum || regnum == -1) rc->raw_supply (tdep->ws_regnum, (char *) ®s->windowstart); - if (regnum == tdep->lbeg_regnum || regnum == -1) + if (tdep->lbeg_regnum != -1 && + (regnum == tdep->lbeg_regnum || regnum == -1)) rc->raw_supply (tdep->lbeg_regnum, (char *) ®s->lbeg); - if (regnum == tdep->lend_regnum || regnum == -1) + if (regnum == tdep->lend_regnum != -1 && + (regnum == tdep->lend_regnum || regnum == -1)) rc->raw_supply (tdep->lend_regnum, (char *) ®s->lend); - if (regnum == tdep->lcount_regnum || regnum == -1) + if (tdep->lcount_regnum != -1 && + (regnum == tdep->lcount_regnum || regnum == -1)) rc->raw_supply (tdep->lcount_regnum, (char *) ®s->lcount); if (regnum == tdep->sar_regnum || regnum == -1)