* 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:
Joel Brobecker 2006-12-31 14:50:37 +00:00
parent 6df5070e3f
commit ade5215683
2 changed files with 19 additions and 2 deletions

View File

@ -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>
* sparc64-tdep.h (SPARC64_PSTATE_AG, SPARC64_PSTATE_IE)

View File

@ -497,15 +497,27 @@ static CORE_ADDR
i386_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc,
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 */
0x83, 0xe4, 0xf0, /* andl $-16, %esp */
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];
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;
if (current_pc > pc + 4)