Multi-arch EXTRA_STACK_ALIGNMENT_NEEDED (nee NO_EXTRA_ALIGNMENT_NEEDED).

This commit is contained in:
Andrew Cagney
2000-08-04 03:17:57 +00:00
parent f6e6b40ff5
commit 0a49d05ee0
6 changed files with 47 additions and 19 deletions

View File

@ -1,3 +1,16 @@
Wed Aug 2 21:15:26 2000 Andrew Cagney <cagney@b1.cygnus.com>
* gdbarch.sh (EXTRA_STACK_ALIGNMENT_NEEDED): Add.
* gdbarch.h, gdbarch.c: Regenerate.
* valops.c (hand_function_call): Replace #ifndef
NO_EXTRA_ALIGNMENT_NEEDED with if EXTRA_STACK_ALIGNMENT_NEEDED.
* d10v-tdep.c (d10v_gdbarch_init): Set
extra_stack_alignment_needed to 0.
* config/d10v/tm-d10v.h (NO_EXTRA_ALIGNMENT_NEEDED): Delete.
* config/pa/tm-hppa.h (EXTRA_STACK_ALIGNMENT_NEEDED): Replace
NO_EXTRA_ALIGNMENT_NEEDED.
2000-08-03 Stephane Carrez <Stephane.Carrez@worldnet.fr> 2000-08-03 Stephane Carrez <Stephane.Carrez@worldnet.fr>
* MAINTAINERS (m68hc11): Stephane Carrez is maintainer. * MAINTAINERS (m68hc11): Stephane Carrez is maintainer.

View File

@ -106,7 +106,7 @@ extern CORE_ADDR saved_pc_after_call (struct frame_info *);
On hppa the sp must always be kept 64-bit aligned */ On hppa the sp must always be kept 64-bit aligned */
#define STACK_ALIGN(arg) ( ((arg)%8) ? (((arg)+7)&-8) : (arg)) #define STACK_ALIGN(arg) ( ((arg)%8) ? (((arg)+7)&-8) : (arg))
#define NO_EXTRA_ALIGNMENT_NEEDED 1 #define EXTRA_STACK_ALIGNMENT_NEEDED 0
/* Sequence of bytes for breakpoint instruction. */ /* Sequence of bytes for breakpoint instruction. */

View File

@ -1603,6 +1603,7 @@ d10v_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_stack_align (gdbarch, d10v_stack_align); set_gdbarch_stack_align (gdbarch, d10v_stack_align);
set_gdbarch_register_sim_regno (gdbarch, d10v_register_sim_regno); set_gdbarch_register_sim_regno (gdbarch, d10v_register_sim_regno);
set_gdbarch_extra_stack_alignment_needed (gdbarch, 0);
return gdbarch; return gdbarch;
} }

View File

@ -1114,6 +1114,19 @@ extern void set_gdbarch_stack_align (struct gdbarch *gdbarch, gdbarch_stack_alig
#endif #endif
#endif #endif
/* Default (value) for non- multi-arch platforms. */
#if (!GDB_MULTI_ARCH) && !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
#define EXTRA_STACK_ALIGNMENT_NEEDED (1)
#endif
extern int gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch);
extern void set_gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch, int extra_stack_alignment_needed);
#if GDB_MULTI_ARCH
#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
#define EXTRA_STACK_ALIGNMENT_NEEDED (gdbarch_extra_stack_alignment_needed (current_gdbarch))
#endif
#endif
#if defined (REG_STRUCT_HAS_ADDR) #if defined (REG_STRUCT_HAS_ADDR)
/* Legacy for systems yet to multi-arch REG_STRUCT_HAS_ADDR */ /* Legacy for systems yet to multi-arch REG_STRUCT_HAS_ADDR */
#define REG_STRUCT_HAS_ADDR_P() (1) #define REG_STRUCT_HAS_ADDR_P() (1)

View File

@ -426,6 +426,7 @@ f:2:SAVED_PC_AFTER_CALL:CORE_ADDR:saved_pc_after_call:struct frame_info *frame:f
f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0 f:2:FRAME_NUM_ARGS:int:frame_num_args:struct frame_info *frame:frame::0:0
# #
F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0 F:2:STACK_ALIGN:CORE_ADDR:stack_align:CORE_ADDR sp:sp::0:0
v:1:EXTRA_STACK_ALIGNMENT_NEEDED:int:extra_stack_alignment_needed::::0:1::0:::
F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0 F:2:REG_STRUCT_HAS_ADDR:int:reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type::0:0
F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0 F:2:SAVE_DUMMY_FRAME_TOS:void:save_dummy_frame_tos:CORE_ADDR sp:sp::0:0
# #

View File

@ -1581,15 +1581,15 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
} }
} }
/* elz: on HPPA no need for this extra alignment, maybe it is needed /* elz: on HPPA no need for this extra alignment, maybe it is needed
on other architectures. This is because all the alignment is taken care on other architectures. This is because all the alignment is
of in the above code (ifdef REG_STRUCT_HAS_ADDR) and in taken care of in the above code (ifdef REG_STRUCT_HAS_ADDR) and
hppa_push_arguments */ in hppa_push_arguments */
#ifndef NO_EXTRA_ALIGNMENT_NEEDED if (EXTRA_STACK_ALIGNMENT_NEEDED)
{
/* MVS 11/22/96: I think at least some of this stack_align code is /* MVS 11/22/96: I think at least some of this stack_align code
really broken. Better to let PUSH_ARGUMENTS adjust the stack in is really broken. Better to let PUSH_ARGUMENTS adjust the
a target-defined manner. */ stack in a target-defined manner. */
if (STACK_ALIGN_P () && INNER_THAN (1, 2)) if (STACK_ALIGN_P () && INNER_THAN (1, 2))
{ {
/* If stack grows down, we must leave a hole at the top. */ /* If stack grows down, we must leave a hole at the top. */
@ -1601,7 +1601,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name);
len += CALL_DUMMY_STACK_ADJUST; len += CALL_DUMMY_STACK_ADJUST;
sp -= STACK_ALIGN (len) - len; sp -= STACK_ALIGN (len) - len;
} }
#endif /* NO_EXTRA_ALIGNMENT_NEEDED */ }
sp = PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr); sp = PUSH_ARGUMENTS (nargs, args, sp, struct_return, struct_addr);