diff options
Diffstat (limited to 'gdb/aarch64-tdep.c')
-rw-r--r-- | gdb/aarch64-tdep.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index aeca305..ea93e9a 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -149,6 +149,8 @@ static const char *const aarch64_mte_register_names[] = "tag_ctl" }; +static int aarch64_stack_frame_destroyed_p (struct gdbarch *, CORE_ADDR); + /* AArch64 prologue cache structure. */ struct aarch64_prologue_cache { @@ -1000,7 +1002,10 @@ aarch64_make_prologue_cache_1 (frame_info_ptr this_frame, if (unwound_fp == 0) return; - cache->prev_sp = unwound_fp + cache->framesize; + cache->prev_sp = unwound_fp; + if (!aarch64_stack_frame_destroyed_p (get_frame_arch (this_frame), + cache->prev_pc)) + cache->prev_sp += cache->framesize; /* Calculate actual addresses of saved registers using offsets determined by aarch64_analyze_prologue. */ |