From: Mark Kettenis Date: Mon, 18 Aug 2003 17:14:16 +0000 (+0000) Subject: * i386-tdep.c (i386_analyze_register_saves): Handle register saves X-Git-Tag: gdb_6_0-2003-10-04-release~98 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=42a131713b077e31dacf463f3559ea173f751086;p=thirdparty%2Fbinutils-gdb.git * i386-tdep.c (i386_analyze_register_saves): Handle register saves at the start of a frameless function. This probably fixes PR backtrace/1338. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b3ca723fc73..8a0467ef0d5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2003-08-18 Mark Kettenis + + * i386-tdep.c (i386_analyze_register_saves): Handle register saves + at the start of a frameless function. This probably fixes PR + backtrace/1338. + 2003-08-18 Michal Ludvig * config/i386/nm-x86-64linux.h (LINUX_CHILD_POST_STARTUP_INFERIOR): diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index 8017cfcc07a..6cf4f947ebd 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -571,23 +571,22 @@ static CORE_ADDR i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache) { - if (cache->locals >= 0) - { - CORE_ADDR offset; - unsigned char op; - int i; + CORE_ADDR offset = 0; + unsigned char op; + int i; - offset = - 4 - cache->locals; - for (i = 0; i < 8 && pc < current_pc; i++) - { - op = read_memory_unsigned_integer (pc, 1); - if (op < 0x50 || op > 0x57) - break; + if (cache->locals > 0) + offset -= cache->locals; + for (i = 0; i < 8 && pc < current_pc; i++) + { + op = read_memory_unsigned_integer (pc, 1); + if (op < 0x50 || op > 0x57) + break; - cache->saved_regs[op - 0x50] = offset; - offset -= 4; - pc++; - } + offset -= 4; + cache->saved_regs[op - 0x50] = offset; + cache->sp_offset += 4; + pc++; } return pc;