summaryrefslogtreecommitdiff
path: root/gdb/gdbarch.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2000-08-04 04:00:44 +0000
committerAndrew Cagney <cagney@redhat.com>2000-08-04 04:00:44 +0000
commitc9d69853c442feae0a499dddba064070fdc0756d (patch)
tree96fa9e69df01ce25c83f23a8d0fa9d18ff9f9a1e /gdb/gdbarch.c
parentb92948b3fa3c785f8f058f19d91508551647f9c2 (diff)
downloadgdb-c9d69853c442feae0a499dddba064070fdc0756d.tar.gz
Missing GDBARCH updates for EXTRA_STACK_ALIGNMENT needed.
Diffstat (limited to 'gdb/gdbarch.c')
-rw-r--r--gdb/gdbarch.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 9a6813be614..d679f93f365 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -225,6 +225,7 @@ struct gdbarch
gdbarch_saved_pc_after_call_ftype *saved_pc_after_call;
gdbarch_frame_num_args_ftype *frame_num_args;
gdbarch_stack_align_ftype *stack_align;
+ int extra_stack_alignment_needed;
gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr;
gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos;
const struct floatformat * float_format;
@@ -350,6 +351,7 @@ struct gdbarch startup_gdbarch =
0,
0,
0,
+ 0,
/* startup_gdbarch() */
};
@@ -410,6 +412,7 @@ gdbarch_alloc (const struct gdbarch_info *info,
gdbarch->remote_translate_xfer_address = generic_remote_translate_xfer_address;
gdbarch->frame_args_skip = -1;
gdbarch->frameless_function_invocation = generic_frameless_function_invocation_not;
+ gdbarch->extra_stack_alignment_needed = 1;
/* gdbarch_alloc() */
return gdbarch;
@@ -663,6 +666,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
&& (gdbarch->frame_num_args == 0))
internal_error ("gdbarch: verify_gdbarch: frame_num_args invalid");
/* Skip verify of stack_align, has predicate */
+ /* Skip verify of extra_stack_alignment_needed, invalid_p == 0 */
/* Skip verify of reg_struct_has_addr, has predicate */
/* Skip verify of save_dummy_frame_tos, has predicate */
if (gdbarch->float_format == 0)
@@ -1261,6 +1265,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
"STACK_ALIGN(sp)",
XSTRING (STACK_ALIGN (sp)));
#endif
+#ifdef EXTRA_STACK_ALIGNMENT_NEEDED
+ fprintf_unfiltered (file,
+ "gdbarch_dump: EXTRA_STACK_ALIGNMENT_NEEDED # %s\n",
+ XSTRING (EXTRA_STACK_ALIGNMENT_NEEDED));
+#endif
#ifdef REG_STRUCT_HAS_ADDR
fprintf_unfiltered (file,
"gdbarch_dump: %s # %s\n",
@@ -1906,6 +1915,11 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file)
(long) current_gdbarch->stack_align
/*STACK_ALIGN ()*/);
#endif
+#ifdef EXTRA_STACK_ALIGNMENT_NEEDED
+ fprintf_unfiltered (file,
+ "gdbarch_dump: EXTRA_STACK_ALIGNMENT_NEEDED = %ld\n",
+ (long) EXTRA_STACK_ALIGNMENT_NEEDED);
+#endif
#ifdef REG_STRUCT_HAS_ADDR
if (GDB_MULTI_ARCH)
fprintf_unfiltered (file,
@@ -3608,6 +3622,22 @@ set_gdbarch_stack_align (struct gdbarch *gdbarch,
}
int
+gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch)
+{
+ /* Skip verify of extra_stack_alignment_needed, invalid_p == 0 */
+ if (gdbarch_debug >= 2)
+ fprintf_unfiltered (gdb_stdlog, "gdbarch_extra_stack_alignment_needed called\n");
+ return gdbarch->extra_stack_alignment_needed;
+}
+
+void
+set_gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch,
+ int extra_stack_alignment_needed)
+{
+ gdbarch->extra_stack_alignment_needed = extra_stack_alignment_needed;
+}
+
+int
gdbarch_reg_struct_has_addr_p (struct gdbarch *gdbarch)
{
return gdbarch->reg_struct_has_addr != 0;