OSDN Git Service

* generic/gdbtk-stack.c (gdb_block_args): Remove deprecated values
authorKeith Seitz <keiths@redhat.com>
Mon, 14 Jul 2008 23:43:36 +0000 (23:43 +0000)
committerKeith Seitz <keiths@redhat.com>
Mon, 14 Jul 2008 23:43:36 +0000 (23:43 +0000)
        LOC_LOCAL_ARG, LOC_COMPUTED_ARG, LOC_REGPARM, LOC_BASEARG_ARG, and
        LOC_BASEARG.
        (gdb_get_blocks): Likewise.
        (gdb_get_vars_command): Likewise.
        Fix type-punned pointer error introduced on 03-07.

        * generic/gdbtk-cmds.c (gdbtk_load_asm): Use paddress instead
        of deprecated_print_address_numeric.
        (gdb_stop): Update use of target_stop.

        * generic/gdbtk.h (gdbtk_get_ptid): Declare new function.
        * generic/gdbtk-hooks.c (gdbtk_wait): Save inferior's ptid.
        (gdbtk_get_ptid): Define new function.
        * generic/gdbtk-varobj.c (variable_update): Update for recent
        varobj_update API change.
        * generic/gdbtk-wrapper.h (GDB_varobj_update): Likewise.
        * generic/gdbtk-wrapper.c (GDB_varobj_update): Likewise.
        (wrap_varobj_update): Likewise.

        * library/targetselection.itb (init_target_db): Initialize
        preferences here instead of ...
        (_init): ... here.
        (_init_prefs): Define gdb/load/default-portname, too.

gdb/gdbtk/ChangeLog
gdb/gdbtk/generic/gdbtk-cmds.c
gdb/gdbtk/generic/gdbtk-hooks.c
gdb/gdbtk/generic/gdbtk-stack.c
gdb/gdbtk/generic/gdbtk-varobj.c
gdb/gdbtk/generic/gdbtk-wrapper.c
gdb/gdbtk/generic/gdbtk-wrapper.h
gdb/gdbtk/generic/gdbtk.h
gdb/gdbtk/library/targetselection.itb

index 2645ff4..6df5d05 100644 (file)
@@ -1,3 +1,30 @@
+2008-07-14  Keith Seitz  <keiths@redhat.com>
+
+       * generic/gdbtk-stack.c (gdb_block_args): Remove deprecated values
+       LOC_LOCAL_ARG, LOC_COMPUTED_ARG, LOC_REGPARM, LOC_BASEARG_ARG, and
+       LOC_BASEARG.
+       (gdb_get_blocks): Likewise.
+       (gdb_get_vars_command): Likewise.
+       Fix type-punned pointer error introduced on 03-07.
+
+       * generic/gdbtk-cmds.c (gdbtk_load_asm): Use paddress instead
+       of deprecated_print_address_numeric.
+       (gdb_stop): Update use of target_stop.
+
+       * generic/gdbtk.h (gdbtk_get_ptid): Declare new function.
+       * generic/gdbtk-hooks.c (gdbtk_wait): Save inferior's ptid.
+       (gdbtk_get_ptid): Define new function.
+       * generic/gdbtk-varobj.c (variable_update): Update for recent
+       varobj_update API change.
+       * generic/gdbtk-wrapper.h (GDB_varobj_update): Likewise.
+       * generic/gdbtk-wrapper.c (GDB_varobj_update): Likewise.
+       (wrap_varobj_update): Likewise.
+
+       * library/targetselection.itb (init_target_db): Initialize
+       preferences here instead of ...
+       (_init): ... here.
+       (_init_prefs): Define gdb/load/default-portname, too.
+
 2008-05-12  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * Update uses of val_print functions with additional language argument.
index 043da9f..1d6effe 100644 (file)
@@ -42,6 +42,7 @@
 #include "varobj.h"
 #include "exceptions.h"
 #include "language.h"
+#include "target.h"
 
 /* tcl header files includes varargs.h unless HAS_STDARG is defined,
    but gdb uses stdarg.h, so make sure HAS_STDARG is defined.  */
@@ -567,8 +568,8 @@ gdb_stop (ClientData clientData, Tcl_Interp *interp,
     }
   else
     {
-      if (target_stop != target_ignore)
-       target_stop ();
+      if (target_ignore != (void (*) (void)) current_target.to_stop)
+       target_stop (gdbtk_get_ptid ());
       else
        quit_flag = 1;          /* hope something sees this */
     }
@@ -1889,7 +1890,7 @@ gdbtk_load_asm (ClientData clientData, CORE_ADDR pc,
   for (i = 0; i < 3; i++)
     Tcl_SetObjLength (client_data->result_obj[i], 0);
 
-  deprecated_print_address_numeric (pc, 1, gdb_stdout);
+  fputs_filtered (paddress (pc), gdb_stdout);
   gdb_flush (gdb_stdout);
 
   result_ptr->obj_ptr = client_data->result_obj[1];
index e9118d1..a34acff 100644 (file)
@@ -1,6 +1,6 @@
 /* Startup code for Insight.
 
-   Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 200, 2002, 2003, 2004
+   Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 200, 2002, 2003, 2004, 2008
    Free Software Foundation, Inc.
 
    Written by Stu Grossman <grossman@cygnus.com> of Cygnus Support.
@@ -111,6 +111,8 @@ long gdbtk_read (struct ui_file *, char *, long);
 void gdbtk_fputs (const char *, struct ui_file *);
 static int gdbtk_load_hash (const char *, unsigned long);
 
+static ptid_t gdbtk_ptid;
+
 /*
  * gdbtk_add_hooks - add all the hooks to gdb.  This will get called by the
  * startup code to fill in the hooks needed by core gdb.
@@ -665,6 +667,7 @@ gdbtk_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
   gdbtk_start_timer ();
   ptid = target_wait (ptid, ourstatus);
   gdbtk_stop_timer ();
+  gdbtk_ptid = ptid;
 
   return ptid;
 }
@@ -836,3 +839,9 @@ gdbtk_architecture_changed (void)
 {
   Tcl_Eval (gdbtk_interp, "gdbtk_tcl_architecture_changed");
 }
+
+ptid_t
+gdbtk_get_ptid (void)
+{
+  return gdbtk_ptid;
+}
index bc5bcfb..b41c9d7 100644 (file)
@@ -1,5 +1,5 @@
 /* Tcl/Tk command definitions for Insight - Stack.
-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2008 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -116,16 +116,11 @@ gdb_block_vars (ClientData clientData, Tcl_Interp *interp,
                {
                case LOC_ARG:             /* argument              */
                case LOC_REF_ARG:         /* reference arg         */
-               case LOC_REGPARM:         /* register arg          */
                case LOC_REGPARM_ADDR:    /* indirect register arg */
-               case LOC_LOCAL_ARG:       /* stack arg             */
-               case LOC_BASEREG_ARG:     /* basereg arg           */
                case LOC_LOCAL:           /* stack local           */
-               case LOC_BASEREG:         /* basereg local         */
                case LOC_STATIC:          /* static                */
                case LOC_REGISTER:        /* register              */
                case LOC_COMPUTED:        /* computed location     */
-               case LOC_COMPUTED_ARG:    /* computed location arg */
                  Tcl_ListObjAppendElement (interp, result_ptr->obj_ptr,
                                            Tcl_NewStringObj (DEPRECATED_SYMBOL_NAME (sym),
                                                              -1));
@@ -196,14 +191,9 @@ gdb_get_blocks (ClientData clientData, Tcl_Interp *interp,
 
                case LOC_ARG:             /* argument              */
                case LOC_REF_ARG:         /* reference arg         */
-               case LOC_REGPARM:         /* register arg          */
                case LOC_REGPARM_ADDR:    /* indirect register arg */
-               case LOC_LOCAL_ARG:       /* stack arg             */
-               case LOC_BASEREG_ARG:     /* basereg arg           */
-               case LOC_COMPUTED_ARG:    /* computed location arg */
 
                case LOC_LOCAL:           /* stack local           */
-               case LOC_BASEREG:         /* basereg local         */
                case LOC_STATIC:          /* static                */
                case LOC_REGISTER:        /* register              */
                case LOC_COMPUTED:        /* computed location     */
@@ -295,7 +285,7 @@ gdb_get_vars_command (ClientData clientData, Tcl_Interp *interp,
       return TCL_ERROR;
     }
 
-  arguments = *(int*) clientData;
+  arguments = *(int*) &clientData;
 
   /* Initialize the result pointer to an empty list. */
 
@@ -344,17 +334,12 @@ gdb_get_vars_command (ClientData clientData, Tcl_Interp *interp,
              break;
            case LOC_ARG:       /* argument              */
            case LOC_REF_ARG:   /* reference arg         */
-           case LOC_REGPARM:   /* register arg          */
            case LOC_REGPARM_ADDR:      /* indirect register arg */
-           case LOC_LOCAL_ARG: /* stack arg             */
-           case LOC_BASEREG_ARG:       /* basereg arg           */
-           case LOC_COMPUTED_ARG:      /* computed location arg */
              if (arguments)
                Tcl_ListObjAppendElement (interp, result_ptr->obj_ptr,
                                          Tcl_NewStringObj (DEPRECATED_SYMBOL_NAME (sym), -1));
              break;
            case LOC_LOCAL:     /* stack local           */
-           case LOC_BASEREG:   /* basereg local         */
            case LOC_STATIC:    /* static                */
            case LOC_REGISTER:  /* register              */
            case LOC_COMPUTED:  /* computed location     */
index 776c6bf..a527cd4 100644 (file)
@@ -440,28 +440,34 @@ variable_children (Tcl_Interp *interp, struct varobj *var)
 static Tcl_Obj *
 variable_update (Tcl_Interp *interp, struct varobj **var)
 {
+  int i;
   Tcl_Obj *changed;
-  struct varobj **changelist;
-  struct varobj **vc;
-  int result;
-
-  /* varobj_update() throws an error for a non-root variable
-     and otherwise it returns a value < 0 if the variable is
-     not in scope, not valid anymore or has changed type.  */
-  if (GDB_varobj_update (var, &changelist, 1, &result) != GDB_OK || result < 0)
+  VEC (varobj_update_result) *changes;
+  varobj_update_result *r;
+
+  if (GDB_varobj_update (var, 1, &changes) != GDB_OK)
     return Tcl_NewStringObj ("-1", -1);
 
-  changed = Tcl_NewListObj (0, NULL);  
-  vc = changelist;
-  while (*vc != NULL)
+  changed = Tcl_NewListObj (0, NULL);
+  for (i = 0; VEC_iterate (varobj_update_result, changes, i, r); ++i)
     {
-      /* Add changed variable object to result list */
-      Tcl_ListObjAppendElement (NULL, changed,
-                               Tcl_NewStringObj (varobj_get_objname (*vc), -1));
-      vc++;
+      switch (r->status)
+       {
+       case VAROBJ_IN_SCOPE:
+         {
+           Tcl_Obj *var
+             =  Tcl_NewStringObj (varobj_get_objname (r->varobj), -1);
+           Tcl_ListObjAppendElement (NULL, changed, var);
+         }
+         break;
+
+       case VAROBJ_NOT_IN_SCOPE:
+       case VAROBJ_INVALID:
+         /* These need to be (re-)implemented in the UI */
+         break;
+       }
     }
 
-  xfree (changelist);
   return changed;
 }
 
index a950fde..b2252fb 100644 (file)
@@ -1,5 +1,5 @@
 /* longjmp-free interface between gdb and gdbtk.
-   Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2002, 2008 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -83,9 +83,8 @@ gdb_result GDB_find_relative_frame (struct frame_info *fi,
 
 gdb_result GDB_get_current_frame (struct frame_info **result);
 
-gdb_result GDB_varobj_update (struct varobj **varp,
-                             struct varobj ***changelist, int explicit,
-                             int *result);
+gdb_result GDB_varobj_update (struct varobj **varp, int explicit,
+                             VEC (varobj_update_result) **changes);
 
 /*
  * Private functions for this file
@@ -730,21 +729,20 @@ wrap_get_current_frame (char *opaque_arg)
 }
 
 gdb_result
-GDB_varobj_update (struct varobj **varp, struct varobj ***changelist,
-                  int explicit, int *result)
+GDB_varobj_update (struct varobj **varp, int explicit,
+                  VEC (varobj_update_result) **changes)
 {
   struct gdb_wrapper_arguments args;
   gdb_result r;
 
   args.args[0].ptr = varp;
-  args.args[1].ptr = changelist;
-  args.args[2].integer = explicit;
+  args.args[1].integer = explicit;
 
   r = call_wrapped_function ((catch_errors_ftype *) wrap_varobj_update, &args);
   if (r != GDB_OK)
     return r;
 
-  *result = args.result.integer;
+  *changes = args.result.ptr;
   return GDB_OK;
 }
 
@@ -753,9 +751,7 @@ static int wrap_varobj_update (char *opaque_arg)
   struct gdb_wrapper_arguments **args
     = (struct gdb_wrapper_arguments **) opaque_arg;
   struct varobj **varp = (struct varobj **) (*args)->args[0].ptr;
-  struct varobj ***changelist = (struct varobj ***) (*args)->args[1].ptr;
-  int explicit = (*args)->args[2].integer;
-
-  (*args)->result.integer = varobj_update (varp, changelist, explicit);
+  int explicit = (*args)->args[1].integer;
+  (*args)->result.ptr = varobj_update (varp, explicit);
   return 1;
 }
index 57d7eab..e9d290f 100644 (file)
@@ -1,5 +1,5 @@
 /* longjmp-free interface between gdb and gdbtk.
-   Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2002, 2008 Free Software Foundation, Inc.
 
 This file is part of GDB.  It contains routines to safely call common gdb
 functions without the fear of longjmp'ing.
@@ -21,6 +21,8 @@ Boston, MA 02110-1301, USA.  */
 
 #ifndef GDBTK_WRAPPER_H
 #define GDBTK_WRAPPER_H
+#include "vec.h"
+
 /* Use this struct used to pass arguments to wrapper routines. We assume
    (arbitrarily) that no gdb function takes more than ten arguments. */
 struct gdb_wrapper_arguments {
@@ -88,8 +90,7 @@ extern gdb_result GDB_find_relative_frame (struct frame_info *fi,
                                           int *start,
                                           struct frame_info **result);
 extern gdb_result GDB_get_current_frame (struct frame_info **result);
-extern gdb_result GDB_varobj_update (struct varobj **varp,
-                                    struct varobj ***changelist, int explicit,
-                                    int *result);
+extern gdb_result GDB_varobj_update (struct varobj **varp, int explicit,
+                                    VEC (varobj_update_result) **changes);
 #endif /* GDBTK_WRAPPER_H */
 
index 5e2fdbb..e5e5d1d 100644 (file)
@@ -1,5 +1,5 @@
 /* Tcl/Tk interface routines header file.
-   Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2003
+   Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2003, 2008
    Free Software Foundation, Inc.
 
    Written by Stu Grossman <grossman@cygnus.com> of Cygnus Support.
@@ -98,6 +98,7 @@ typedef struct gdbtk_result
 gdbtk_result;
 
 struct target_ops;
+struct ptid_t;
 
 /* These defines give the allowed values for the gdbtk_result.flags field. */
 
@@ -161,6 +162,7 @@ extern void gdbtk_fputs (const char *, struct ui_file *);
 extern struct ui_file *gdbtk_fileopen (void);
 extern struct ui_file *gdbtk_fileopenin (void);
 extern int gdbtk_disable_fputs;
+extern ptid_t gdbtk_get_ptid (void);
 
 #ifdef _WIN32
 extern void close_bfds ();
index 9e547da..7f9d531 100644 (file)
@@ -44,6 +44,11 @@ itcl::body TargetSelection::init_target_db {} {
   }
   set db_inited 1
 
+  # We really need to have the preferences defined, too,
+  # otherwise set_target and company won't work properly
+  # unless the user has first opened a TargetSelection dialog.
+  _init_prefs
+
   # Target Database
   # Set the following members:
   # TARGET,pretty-name: Name to display to user
@@ -323,6 +328,7 @@ itcl::body TargetSelection::_init_prefs {} {
   pref define gdb/load/default-port [default_port]
   pref define gdb/load/default-hostname ""
   pref define gdb/load/default-after_attaching {}
+  pref define gdb/load/default-portname 32767
 }
 
 itcl::body TargetSelection::_init_target {} {
@@ -371,7 +377,6 @@ itcl::body TargetSelection::_init {} {
   set trace_inited 1
 
   init_target_db       ;# initialize database
-  _init_prefs  ;# initialize load prefs 
   _init_target ;# initialize target prefs
   set_saved