aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/breakpoint.c6
-rw-r--r--gdb/defs.h6
-rw-r--r--gdb/event-top.c8
-rw-r--r--gdb/infcmd.c56
-rw-r--r--gdb/utils.c2
6 files changed, 54 insertions, 37 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3dd1efa..d783c20 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,16 @@
+2000-03-30 Michael Snyder <msnyder@cleaver.cygnus.com>
+
+ * defs.h (struct continuation_arg): make 'data' a union, to avoid
+ casting problems when int and pointer are not the same size.
+ * event-top.c (command_handler): use data as a union.
+ (command_line_handler_continuation): ditto.
+ * infcmd.c (step_1_continuation): use data as a union. Re-indent.
+ (step_once): ditto. (finish_command_continuation): ditto.
+ (finish_command): ditto.
+ * breakpoint.c (until_break_command): use data as a union.
+ (until_break_command_continuation): ditto.
+ * utils.c (add_intermediate_continuation): fix typo in comment.
+
Thu Mar 30 12:09:50 2000 Andrew Cagney <cagney@b1.cygnus.com>
* gdbarch.h, gdbarch.c: Re-indent. Remove FIXMEs.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 1efa23b..89b1590 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5708,7 +5708,7 @@ until_break_command_continuation (struct continuation_arg *arg)
{
struct cleanup *cleanups;
- cleanups = (struct cleanup *) arg->data;
+ cleanups = (struct cleanup *) arg->data.pointer;
do_exec_cleanups (cleanups);
}
@@ -5772,8 +5772,8 @@ until_break_command (arg, from_tty)
the exec_cleanup_chain. */
arg1 =
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
- arg1->next = NULL;
- arg1->data = (PTR) old_chain;
+ arg1->next = NULL;
+ arg1->data.pointer = old_chain;
add_continuation (until_break_command_continuation, arg1);
}
diff --git a/gdb/defs.h b/gdb/defs.h
index 737ef1c..0270ddd 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -650,7 +650,11 @@ extern void free_command_lines (struct command_line **);
struct continuation_arg
{
struct continuation_arg *next;
- void *data;
+ union continuation_data {
+ void *pointer;
+ int integer;
+ long longint;
+ } data;
};
struct continuation
diff --git a/gdb/event-top.c b/gdb/event-top.c
index d9a0a7c..622b70f 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -525,8 +525,8 @@ command_handler (char *command)
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
arg1->next = arg2;
arg2->next = NULL;
- arg1->data = (void *) time_at_cmd_start;
- arg2->data = (void *) space_at_cmd_start;
+ arg1->data.integer = time_at_cmd_start;
+ arg2->data.integer = space_at_cmd_start;
add_continuation (command_line_handler_continuation, arg1);
}
@@ -572,8 +572,8 @@ command_line_handler_continuation (struct continuation_arg *arg)
extern int display_time;
extern int display_space;
- long time_at_cmd_start = (long) arg->data;
- long space_at_cmd_start = (long) arg->next->data;
+ long time_at_cmd_start = arg->data.longint;
+ long space_at_cmd_start = arg->next->data.longint;
bpstat_do_actions (&stop_bpstat);
/*do_cleanups (old_chain); *//*?????FIXME????? */
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 84bc920..06439d0 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -576,27 +576,27 @@ static void
step_1_continuation (arg)
struct continuation_arg *arg;
{
- int count;
- int skip_subroutines;
- int single_inst;
-
- skip_subroutines = (int) arg->data;
- single_inst = (int) (arg->next)->data;
- count = (int) ((arg->next)->next)->data;
-
- if (stop_step)
- {
- /* FIXME: On nexti, this may have already been done (when we hit the
- step resume break, I think). Probably this should be moved to
- wait_for_inferior (near the top). */
+ int count;
+ int skip_subroutines;
+ int single_inst;
+
+ skip_subroutines = arg->data.integer;
+ single_inst = arg->next->data.integer;
+ count = arg->next->next->data.integer;
+
+ if (stop_step)
+ {
+ /* FIXME: On nexti, this may have already been done (when we hit the
+ step resume break, I think). Probably this should be moved to
+ wait_for_inferior (near the top). */
#if defined (SHIFT_INST_REGS)
- SHIFT_INST_REGS ();
+ SHIFT_INST_REGS ();
#endif
- step_once (skip_subroutines, single_inst, count - 1);
- }
- else
- if (!single_inst || skip_subroutines)
- do_exec_cleanups (ALL_CLEANUPS);
+ step_once (skip_subroutines, single_inst, count - 1);
+ }
+ else
+ if (!single_inst || skip_subroutines)
+ do_exec_cleanups (ALL_CLEANUPS);
}
/* Do just one step operation. If count >1 we will have to set up a
@@ -662,11 +662,11 @@ which has no line number information.\n", name);
arg3 =
(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
arg1->next = arg2;
- arg1->data = (PTR) skip_subroutines;
+ arg1->data.integer = skip_subroutines;
arg2->next = arg3;
- arg2->data = (PTR) single_inst;
+ arg2->data.integer = single_inst;
arg3->next = NULL;
- arg3->data = (PTR) count;
+ arg3->data.integer = count;
add_intermediate_continuation (step_1_continuation, arg1);
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
}
@@ -1108,9 +1108,9 @@ finish_command_continuation (arg)
struct breakpoint *breakpoint;
struct cleanup *cleanups;
- breakpoint = (struct breakpoint *) arg->data;
- function = (struct symbol *) (arg->next)->data;
- cleanups = (struct cleanup *) (arg->next->next)->data;
+ breakpoint = (struct breakpoint *) arg->data.pointer;
+ function = (struct symbol *) arg->next->data.pointer;
+ cleanups = (struct cleanup *) arg->next->next->data.pointer;
if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
&& function != 0)
@@ -1225,9 +1225,9 @@ finish_command (arg, from_tty)
arg1->next = arg2;
arg2->next = arg3;
arg3->next = NULL;
- arg1->data = (PTR) breakpoint;
- arg2->data = (PTR) function;
- arg3->data = (PTR) old_chain;
+ arg1->data.pointer = breakpoint;
+ arg2->data.pointer = function;
+ arg3->data.pointer = old_chain;
add_continuation (finish_command_continuation, arg1);
}
diff --git a/gdb/utils.c b/gdb/utils.c
index 824dabe..1e08155 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -456,7 +456,7 @@ discard_all_continuations ()
}
}
-/* Add a continuation to the continuation list, the gloabl list
+/* Add a continuation to the continuation list, the global list
intermediate_continuation. The new continuation will be added at the front.*/
void
add_intermediate_continuation (continuation_hook, arg_list)