mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:54:41 +08:00
* x86-64-tdep.c (x86_64_frame_cache): Don't bail out if %rbp is
zero. Reorganize code a bit.
This commit is contained in:
parent
fdec90e86d
commit
35883a3f2f
@ -1,3 +1,8 @@
|
||||
2003-11-28 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* x86-64-tdep.c (x86_64_frame_cache): Don't bail out if %rbp is
|
||||
zero. Reorganize code a bit.
|
||||
|
||||
2003-11-27 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* dwarf2-frame.c: Fix another comment.
|
||||
|
@ -1061,14 +1061,6 @@ x86_64_frame_cache (struct frame_info *next_frame, void **this_cache)
|
||||
cache = x86_64_alloc_frame_cache ();
|
||||
*this_cache = cache;
|
||||
|
||||
frame_unwind_register (next_frame, X86_64_RBP_REGNUM, buf);
|
||||
cache->base = extract_unsigned_integer (buf, 8);
|
||||
if (cache->base == 0)
|
||||
return cache;
|
||||
|
||||
/* For normal frames, %rip is stored at 8(%rbp). */
|
||||
cache->saved_regs[X86_64_RIP_REGNUM] = 8;
|
||||
|
||||
cache->pc = frame_func_unwind (next_frame);
|
||||
if (cache->pc != 0)
|
||||
x86_64_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
|
||||
@ -1086,11 +1078,21 @@ x86_64_frame_cache (struct frame_info *next_frame, void **this_cache)
|
||||
frame_unwind_register (next_frame, X86_64_RSP_REGNUM, buf);
|
||||
cache->base = extract_unsigned_integer (buf, 8) + cache->sp_offset;
|
||||
}
|
||||
else
|
||||
{
|
||||
frame_unwind_register (next_frame, X86_64_RBP_REGNUM, buf);
|
||||
cache->base = extract_unsigned_integer (buf, 8);
|
||||
}
|
||||
|
||||
/* Now that we have the base address for the stack frame we can
|
||||
calculate the value of %rsp in the calling frame. */
|
||||
cache->saved_sp = cache->base + 16;
|
||||
|
||||
/* For normal frames, %rip is stored at 8(%rbp). If we don't have a
|
||||
frame we find it at the same offset from the reconstructed base
|
||||
address. */
|
||||
cache->saved_regs[X86_64_RIP_REGNUM] = 8;
|
||||
|
||||
/* Adjust all the saved registers such that they contain addresses
|
||||
instead of offsets. */
|
||||
for (i = 0; i < X86_64_NUM_SAVED_REGS; i++)
|
||||
|
Loading…
Reference in New Issue
Block a user