This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH]: minor fix for async



I'd like to suggest this change, replacing a void pointer field
(which is sometimes used to hold an integer) with a union.  
This will prevent problems on hosts where an integer and a pointer
are not the same size.

2000-03-23  Michael Snyder  <msnyder@seadog.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.
        (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.

Index: ChangeLog
===================================================================
RCS file: /cvs/src/src/gdb/ChangeLog,v
retrieving revision 1.170
diff -c -r1.170 ChangeLog
*** ChangeLog	2000/03/23 23:43:19	1.170
--- ChangeLog	2000/03/24 00:14:45
***************
*** 1,3 ****
--- 1,16 ----
+ 2000-03-23  Michael Snyder  <msnyder@seadog.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.
+ 	(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.
+ 
  2000-03-23  Fernando Nasser  <fnasser@cygnus.com>
  
  	From David Whedon <dwhedon@gordian.com>
Index: defs.h
===================================================================
RCS file: /cvs/src/src/gdb/defs.h,v
retrieving revision 1.12
diff -c -r1.12 defs.h
*** defs.h	2000/03/14 02:37:25	1.12
--- defs.h	2000/03/24 00:14:45
***************
*** 650,656 ****
  struct continuation_arg
    {
      struct continuation_arg *next;
!     void *data;
    };
  
  struct continuation
--- 650,660 ----
  struct continuation_arg
    {
      struct continuation_arg *next;
!     union continuation_data {
!       void *pointer;
!       int   integer;
!       long  longint;
!     } data;
    };
  
  struct continuation
Index: event-top.c
===================================================================
RCS file: /cvs/src/src/gdb/event-top.c,v
retrieving revision 1.4
diff -c -r1.4 event-top.c
*** event-top.c	2000/03/19 12:30:38	1.4
--- event-top.c	2000/03/24 00:14:45
***************
*** 525,532 ****
  	(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;
        add_continuation (command_line_handler_continuation, arg1);
      }
  
--- 525,532 ----
  	(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
        arg1->next = arg2;
        arg2->next = NULL;
!       arg1->data.integer = time_at_cmd_start;
!       arg2->data.integer = space_at_cmd_start;
        add_continuation (command_line_handler_continuation, arg1);
      }
  
***************
*** 572,579 ****
    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;
  
    bpstat_do_actions (&stop_bpstat);
    /*do_cleanups (old_chain); *//*?????FIXME????? */
--- 572,579 ----
    extern int display_time;
    extern int display_space;
  
!   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????? */
Index: infcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/infcmd.c,v
retrieving revision 1.2
diff -c -r1.2 infcmd.c
*** infcmd.c	2000/02/23 15:53:33	1.2
--- infcmd.c	2000/03/24 00:14:45
***************
*** 576,602 ****
  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).  */
  #if defined (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);
  }
  
  /* Do just one step operation. If count >1 we will have to set up a
--- 576,602 ----
  step_1_continuation (arg)
       struct continuation_arg *arg;
  {
!   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 ();
  #endif
!       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,672 ****
        arg3 =
  	(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
        arg1->next = arg2;
!       arg1->data = (PTR) skip_subroutines;
        arg2->next = arg3;
!       arg2->data = (PTR) single_inst;
        arg3->next = NULL;
!       arg3->data = (PTR) count;
        add_intermediate_continuation (step_1_continuation, arg1);
        proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
      }
--- 662,672 ----
        arg3 =
  	(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
        arg1->next = arg2;
!       arg1->data.integer = skip_subroutines;
        arg2->next = arg3;
!       arg2->data.integer = single_inst;
        arg3->next = NULL;
!       arg3->data.integer = count;
        add_intermediate_continuation (step_1_continuation, arg1);
        proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
      }
***************
*** 1108,1116 ****
    struct breakpoint *breakpoint;
    struct cleanup *cleanups;
  
!   breakpoint = (struct breakpoint *) arg->data;
!   function = (struct symbol *) (arg->next)->data;
!   cleanups = (struct cleanup *) (arg->next->next)->data;
  
    if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
        && function != 0)
--- 1108,1116 ----
    struct breakpoint *breakpoint;
    struct cleanup *cleanups;
  
!   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,1233 ****
        arg1->next = arg2;
        arg2->next = arg3;
        arg3->next = NULL;
!       arg1->data = (PTR) breakpoint;
!       arg2->data = (PTR) function;
!       arg3->data = (PTR) old_chain;
        add_continuation (finish_command_continuation, arg1);
      }
  
--- 1225,1233 ----
        arg1->next = arg2;
        arg2->next = arg3;
        arg3->next = NULL;
!       arg1->data.pointer = breakpoint;
!       arg2->data.pointer = function;
!       arg3->data.pointer = old_chain;
        add_continuation (finish_command_continuation, arg1);
      }
  
Index: breakpoint.c
===================================================================
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.4
diff -c -r1.4 breakpoint.c
*** breakpoint.c	2000/03/21 20:41:39	1.4
--- breakpoint.c	2000/03/24 00:14:46
***************
*** 5686,5692 ****
  {
    struct cleanup *cleanups;
  
!   cleanups = (struct cleanup *) arg->data;
    do_exec_cleanups (cleanups);
  }
  
--- 5686,5692 ----
  {
    struct cleanup *cleanups;
  
!   cleanups = (struct cleanup *) arg->data.pointer;
    do_exec_cleanups (cleanups);
  }
  
***************
*** 5750,5757 ****
           the exec_cleanup_chain. */
        arg1 =
  	(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
!       arg1->next = NULL;
!       arg1->data = (PTR) old_chain;
  
        add_continuation (until_break_command_continuation, arg1);
      }
--- 5750,5757 ----
           the exec_cleanup_chain. */
        arg1 =
  	(struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
!       arg1->next         = NULL;
!       arg1->data.pointer = old_chain;
  
        add_continuation (until_break_command_continuation, arg1);
      }
Index: utils.c
===================================================================
RCS file: /cvs/src/src/gdb/utils.c,v
retrieving revision 1.5
diff -c -r1.5 utils.c
*** utils.c	2000/03/20 22:15:58	1.5
--- utils.c	2000/03/24 00:14:46
***************
*** 456,462 ****
      }
  }
  
! /* Add a continuation to the continuation list, the gloabl list
     intermediate_continuation. The new continuation will be added at the front.*/
  void
  add_intermediate_continuation (continuation_hook, arg_list)
--- 456,462 ----
      }
  }
  
! /* 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)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]