From: Torbjörn SVENSSON Date: Fri, 4 Nov 2022 08:46:34 +0000 (+0100) Subject: gdb/arm: Update active msp/psp when switching stack X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4d9fd8683fd48f081cb205afed07ba69f9aed134;p=binutils-gdb.git gdb/arm: Update active msp/psp when switching stack For targets with secext, msp and psp can be seen as an alias for one of msp_s, msp_ns, psp_s or psp_ns. When switching active sp, the corresponding msp/psp needs to be switched too. Signed-off-by: Torbjörn SVENSSON --- diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 7cb3f5f3050..124a94dc87d 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -504,8 +504,23 @@ arm_cache_switch_prev_sp (struct arm_prologue_cache *cache, gdb_assert (arm_is_alternative_sp_register (tdep, sp_regnum)); if (tdep->have_sec_ext) - gdb_assert (sp_regnum != tdep->m_profile_msp_regnum - && sp_regnum != tdep->m_profile_psp_regnum); + { + gdb_assert (sp_regnum != tdep->m_profile_msp_regnum + && sp_regnum != tdep->m_profile_psp_regnum); + + if (sp_regnum == tdep->m_profile_msp_s_regnum + || sp_regnum == tdep->m_profile_psp_s_regnum) + { + cache->active_msp_regnum = tdep->m_profile_msp_s_regnum; + cache->active_psp_regnum = tdep->m_profile_psp_s_regnum; + } + else if (sp_regnum == tdep->m_profile_msp_ns_regnum + || sp_regnum == tdep->m_profile_psp_ns_regnum) + { + cache->active_msp_regnum = tdep->m_profile_msp_ns_regnum; + cache->active_psp_regnum = tdep->m_profile_psp_ns_regnum; + } + } cache->active_sp_regnum = sp_regnum; }