summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <jsm@polyomino.org.uk>2011-09-23 14:50:26 +0000
committerJoseph Myers <jsm@polyomino.org.uk>2011-09-23 14:50:26 +0000
commitf7b0a07b2cb854ea5d188a548a2fab3880cf6193 (patch)
tree4f80f7191e4963fb473088392fa6cf2bb8a1d42a
parenta241a5aac63217dea24f79fd8c65adb5eadf092d (diff)
downloadgdb-f7b0a07b2cb854ea5d188a548a2fab3880cf6193.tar.gz
PR gdb/13079
* i386-tdep.c (i386_frame_align): New. (i386_gdbarch_init): Use i386_frame_align.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/i386-tdep.c10
2 files changed, 16 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 677459cb97e..0838f02e274 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-23 Joseph Myers <joseph@codesourcery.com>
+
+ PR gdb/13079
+ * i386-tdep.c (i386_frame_align): New.
+ (i386_gdbarch_init): Use i386_frame_align.
+
2011-09-23 Yao Qi <yao@codesourcery.com>
* i386-linux-nat.c (i386_linux_resume): Use read_memory_unsigned_integer
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 5fb2efb0deb..98dfd02278c 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -2228,6 +2228,15 @@ i386_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
/* See the end of i386_push_dummy_call. */
return frame_id_build (fp + 8, get_frame_pc (this_frame));
}
+
+/* _Decimal128 function return values need 16-byte alignment on the
+ stack. */
+
+static CORE_ADDR
+i386_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
+{
+ return sp & -(CORE_ADDR)16;
+}
/* Figure out where the longjmp will land. Slurp the args out of the
@@ -7316,6 +7325,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
/* Call dummy code. */
set_gdbarch_push_dummy_call (gdbarch, i386_push_dummy_call);
+ set_gdbarch_frame_align (gdbarch, i386_frame_align);
set_gdbarch_convert_register_p (gdbarch, i386_convert_register_p);
set_gdbarch_register_to_value (gdbarch, i386_register_to_value);