diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 677459cb97..0838f02e27 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2011-09-23 Joseph Myers + + PR gdb/13079 + * i386-tdep.c (i386_frame_align): New. + (i386_gdbarch_init): Use i386_frame_align. + 2011-09-23 Yao Qi * 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 5fb2efb0de..98dfd02278 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);