aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 677459c..0838f02 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 5fb2efb..98dfd02 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);