* i386-tdep.c (i386_analyze_stack_align): Add handling of two
other possible code sequences that perform a stack realignment.
This commit is contained in:
parent
6df5070e3f
commit
ade5215683
2 changed files with 19 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2006-12-31 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* i386-tdep.c (i386_analyze_stack_align): Add handling of two
|
||||||
|
other possible code sequences that perform a stack realignment.
|
||||||
|
|
||||||
2006-12-31 Mark Kettenis <kettenis@gnu.org>
|
2006-12-31 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
* sparc64-tdep.h (SPARC64_PSTATE_AG, SPARC64_PSTATE_IE)
|
* sparc64-tdep.h (SPARC64_PSTATE_AG, SPARC64_PSTATE_IE)
|
||||||
|
|
|
@ -497,15 +497,27 @@ static CORE_ADDR
|
||||||
i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
|
i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
|
||||||
struct i386_frame_cache *cache)
|
struct i386_frame_cache *cache)
|
||||||
{
|
{
|
||||||
static const gdb_byte insns[10] = {
|
static const gdb_byte insns_ecx[10] = {
|
||||||
0x8d, 0x4c, 0x24, 0x04, /* leal 4(%esp), %ecx */
|
0x8d, 0x4c, 0x24, 0x04, /* leal 4(%esp), %ecx */
|
||||||
0x83, 0xe4, 0xf0, /* andl $-16, %esp */
|
0x83, 0xe4, 0xf0, /* andl $-16, %esp */
|
||||||
0xff, 0x71, 0xfc /* pushl -4(%ecx) */
|
0xff, 0x71, 0xfc /* pushl -4(%ecx) */
|
||||||
};
|
};
|
||||||
|
static const gdb_byte insns_edx[10] = {
|
||||||
|
0x8d, 0x54, 0x24, 0x04, /* leal 4(%esp), %edx */
|
||||||
|
0x83, 0xe4, 0xf0, /* andl $-16, %esp */
|
||||||
|
0xff, 0x72, 0xfc /* pushl -4(%edx) */
|
||||||
|
};
|
||||||
|
static const gdb_byte insns_eax[10] = {
|
||||||
|
0x8d, 0x44, 0x24, 0x04, /* leal 4(%esp), %eax */
|
||||||
|
0x83, 0xe4, 0xf0, /* andl $-16, %esp */
|
||||||
|
0xff, 0x70, 0xfc /* pushl -4(%eax) */
|
||||||
|
};
|
||||||
gdb_byte buf[10];
|
gdb_byte buf[10];
|
||||||
|
|
||||||
if (target_read_memory (pc, buf, sizeof buf)
|
if (target_read_memory (pc, buf, sizeof buf)
|
||||||
|| memcmp (buf, insns, sizeof buf) != 0)
|
|| (memcmp (buf, insns_ecx, sizeof buf) != 0
|
||||||
|
&& memcmp (buf, insns_edx, sizeof buf) != 0
|
||||||
|
&& memcmp (buf, insns_eax, sizeof buf) != 0))
|
||||||
return pc;
|
return pc;
|
||||||
|
|
||||||
if (current_pc > pc + 4)
|
if (current_pc > pc + 4)
|
||||||
|
|
Loading…
Add table
Reference in a new issue