* amd64-tdep.c (amd64_analyze_prologue): Recognize both variations of
"mov %rsp,%rbp".
This commit is contained in:
parent
8c7a0b00aa
commit
50f1ae7b0c
@ -1,3 +1,8 @@
|
|||||||
|
2012-04-06 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
|
* amd64-tdep.c (amd64_analyze_prologue): Recognize both variations of
|
||||||
|
"mov %rsp,%rbp".
|
||||||
|
|
||||||
2012-04-05 Kevin Buettner <kevinb@redhat.com>
|
2012-04-05 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
* v850-tdep.c (E_NUM_OF_V850_REGS, E_NUM_OF_V850E_REGS): Fix
|
* v850-tdep.c (E_NUM_OF_V850_REGS, E_NUM_OF_V850E_REGS): Fix
|
||||||
|
@ -1865,7 +1865,7 @@ amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
|
|||||||
We will handle only functions beginning with:
|
We will handle only functions beginning with:
|
||||||
|
|
||||||
pushq %rbp 0x55
|
pushq %rbp 0x55
|
||||||
movq %rsp, %rbp 0x48 0x89 0xe5
|
movq %rsp, %rbp 0x48 0x89 0xe5 (or 0x48 0x8b 0xec)
|
||||||
|
|
||||||
Any function that doesn't start with this sequence will be assumed
|
Any function that doesn't start with this sequence will be assumed
|
||||||
to have no prologue and thus no valid frame pointer in %rbp. */
|
to have no prologue and thus no valid frame pointer in %rbp. */
|
||||||
@ -1876,7 +1876,9 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
|
|||||||
struct amd64_frame_cache *cache)
|
struct amd64_frame_cache *cache)
|
||||||
{
|
{
|
||||||
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
||||||
static gdb_byte proto[3] = { 0x48, 0x89, 0xe5 }; /* movq %rsp, %rbp */
|
/* There are two variations of movq %rsp, %rbp. */
|
||||||
|
static const gdb_byte mov_rsp_rbp_1[3] = { 0x48, 0x89, 0xe5 };
|
||||||
|
static const gdb_byte mov_rsp_rbp_2[3] = { 0x48, 0x8b, 0xec };
|
||||||
gdb_byte buf[3];
|
gdb_byte buf[3];
|
||||||
gdb_byte op;
|
gdb_byte op;
|
||||||
|
|
||||||
@ -1900,7 +1902,8 @@ amd64_analyze_prologue (struct gdbarch *gdbarch,
|
|||||||
|
|
||||||
/* Check for `movq %rsp, %rbp'. */
|
/* Check for `movq %rsp, %rbp'. */
|
||||||
read_memory (pc + 1, buf, 3);
|
read_memory (pc + 1, buf, 3);
|
||||||
if (memcmp (buf, proto, 3) != 0)
|
if (memcmp (buf, mov_rsp_rbp_1, 3) != 0
|
||||||
|
&& memcmp (buf, mov_rsp_rbp_2, 3) != 0)
|
||||||
return pc + 1;
|
return pc + 1;
|
||||||
|
|
||||||
/* OK, we actually have a frame. */
|
/* OK, we actually have a frame. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user