summaryrefslogtreecommitdiffstats
path: root/gdb
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2001-12-29 19:38:16 +0000
committerMark Kettenis <kettenis@gnu.org>2001-12-29 19:38:16 +0000
commitec80a8ea8b066ab117939b77a6539f85de19b85f (patch)
tree0aefe429c9060b1a2a8aa33ce5af14933a315cd1 /gdb
parent428721aaa3be621b3c63dc823dfbd993eb2bf942 (diff)
downloadppe42-binutils-ec80a8ea8b066ab117939b77a6539f85de19b85f.tar.gz
ppe42-binutils-ec80a8ea8b066ab117939b77a6539f85de19b85f.zip
* i386-tdep.c (i386_push_dummy_frame): Don't write back the
modified frame pointer until the old frame pointer has been saved.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/i386-tdep.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ccbdf4308d..5e6ed003a9 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2001-12-29 Mark Kettenis <kettenis@gnu.org>
+
+ * i386-tdep.c (i386_push_dummy_frame): Don't write back the
+ modified frame pointer until the old frame pointer has been saved.
+
2001-12-30 Andrew Cagney <ac131313@redhat.com>
* arch-utils.c (initialize_current_architecture): Test byte_order
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 0a1472d872..524a6ff558 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -769,18 +769,20 @@ void
i386_push_dummy_frame (void)
{
CORE_ADDR sp = read_register (SP_REGNUM);
+ CORE_ADDR fp;
int regnum;
char regbuf[MAX_REGISTER_RAW_SIZE];
sp = push_word (sp, read_register (PC_REGNUM));
sp = push_word (sp, read_register (FP_REGNUM));
- write_register (FP_REGNUM, sp);
+ fp = sp;
for (regnum = 0; regnum < NUM_REGS; regnum++)
{
read_register_gen (regnum, regbuf);
sp = push_bytes (sp, regbuf, REGISTER_RAW_SIZE (regnum));
}
write_register (SP_REGNUM, sp);
+ write_register (FP_REGNUM, fp);
}
/* Insert the (relative) function address into the call sequence
OpenPOWER on IntegriCloud