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.
This commit is contained in:
Ivan Grokhotkov
2021-07-19 19:04:34 +02:00
committed by Alexey Lapshin
parent 945f35c160
commit ab91a76024

View File

@@ -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 *) &regs->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 *) &regs->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 *) &regs->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 *) &regs->lcount);
if (regnum == tdep->sar_regnum || regnum == -1)