[sparc] inferior SEGV while calling Ada subprogram

gdb/ChangeLog:

        * sparc-tdep.c (sparc32_frame_align): New function.
        (sparc32_gdbarch_init): Set the frame_align gdbarch method.
        * sparc64-tdep.c (sparc64_frame_align): New function.
        (sparc64_gdbarch_init): Set the frame_align gdbarch method.
This commit is contained in:
Joel Brobecker 2010-10-01 15:55:14 +00:00
parent bacff3ab9c
commit 49a45ecfd2
3 changed files with 23 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2010-10-01 Joel Brobecker <brobecker@adacore.com>
* sparc-tdep.c (sparc32_frame_align): New function.
(sparc32_gdbarch_init): Set the frame_align gdbarch method.
* sparc64-tdep.c (sparc64_frame_align): New function.
(sparc64_gdbarch_init): Set the frame_align gdbarch method.
2010-09-30 H.J. Lu <hongjiu.lu@intel.com>
* defs.h (MAX_REGISTER_SIZE): Set to 64.

View File

@ -398,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,
@ -1407,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);

View File

@ -937,6 +937,13 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
return sp;
}
static CORE_ADDR
sparc64_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
{
/* The ABI requires 16-byte alignment. */
return address & ~0xf;
}
static CORE_ADDR
sparc64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
struct regcache *regcache, CORE_ADDR bp_addr,
@ -1136,6 +1143,7 @@ sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_pc_regnum (gdbarch, SPARC64_PC_REGNUM); /* %pc */
/* Call dummy code. */
set_gdbarch_frame_align (gdbarch, sparc64_frame_align);
set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
set_gdbarch_push_dummy_code (gdbarch, NULL);
set_gdbarch_push_dummy_call (gdbarch, sparc64_push_dummy_call);