diff options
author | Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | 2022-11-04 09:46:34 +0100 |
---|---|---|
committer | Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> | 2022-11-21 15:33:14 +0100 |
commit | 4d9fd8683fd48f081cb205afed07ba69f9aed134 (patch) | |
tree | e82bebe6b3019e4f8fe15455c31b517fb9eeb155 | |
parent | 84f9fbe90e5429adb9dee68f04f44c92fa9e2345 (diff) | |
download | gdb-4d9fd8683fd48f081cb205afed07ba69f9aed134.zip gdb-4d9fd8683fd48f081cb205afed07ba69f9aed134.tar.gz gdb-4d9fd8683fd48f081cb205afed07ba69f9aed134.tar.bz2 |
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 <torbjorn.svensson@foss.st.com>
-rw-r--r-- | gdb/arm-tdep.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 7cb3f5f..124a94d 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; } |