X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=gdb%2Fsparc-tdep.c;h=33145e319d22fe50c363251b17fbb9be733328d2;hb=7b6bb8daaceb9ecf3f42dea57ae82733d6a3b2f6;hp=a2bae9f0f5890cae485bd561fba47fc034838abb;hpb=a9789a6b9df7e25448473dc45c47b64c980f04b5;p=thirdparty%2Fbinutils-gdb.git diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index a2bae9f0f58..33145e319d2 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for SPARC. - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GDB. @@ -63,7 +63,7 @@ struct regset; sparc64-tdep.c; don't add any here. */ /* The SPARC Floating-Point Quad-Precision format is similar to - big-endian IA-64 Quad-recision format. */ + big-endian IA-64 Quad-Precision format. */ #define floatformats_sparc_quad floatformats_ia64_quad /* The stack pointer is offset from the stack frame by a BIAS of 2047 @@ -221,7 +221,11 @@ sparc_floating_p (const struct type *type) return 0; } -/* Check whether TYPE is "Structure or Union". */ +/* Check whether TYPE is "Structure or Union". + + In terms of Ada subprogram calls, arrays are treated the same as + struct and union types. So this function also returns non-zero + for array types. */ static int sparc_structure_or_union_p (const struct type *type) @@ -230,6 +234,7 @@ sparc_structure_or_union_p (const struct type *type) { case TYPE_CODE_STRUCT: case TYPE_CODE_UNION: + case TYPE_CODE_ARRAY: return 1; default: break; @@ -393,6 +398,13 @@ sparc32_pseudo_register_write (struct gdbarch *gdbarch, } +static CORE_ADDR +sparc32_frame_align (struct gdbarch *gdbarch, CORE_ADDR address) +{ + /* The ABI requires double-word alignment. */ + return address & ~0x7; +} + static CORE_ADDR sparc32_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funcaddr, @@ -1402,6 +1414,7 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) set_gdbarch_fp0_regnum (gdbarch, SPARC_F0_REGNUM); /* %f0 */ /* Call dummy code. */ + set_gdbarch_frame_align (gdbarch, sparc32_frame_align); set_gdbarch_call_dummy_location (gdbarch, ON_STACK); set_gdbarch_push_dummy_code (gdbarch, sparc32_push_dummy_code); set_gdbarch_push_dummy_call (gdbarch, sparc32_push_dummy_call);