(clh 9)
authorTom Tromey <tromey@redhat.com>
Mon, 23 Sep 2013 18:07:46 +0000 (18:07 +0000)
committerTom Tromey <tromey@redhat.com>
Mon, 23 Sep 2013 18:07:46 +0000 (18:07 +0000)
gdb/ChangeLog
gdb/linespec.c
gdb/testsuite/lib/mi-support.exp

index c0ec10fbc1cbe64e35188389fd6934fd1f0712f2..6158bd6cef4c549b83a25dc8fa3e0496b7911542 100644 (file)
@@ -1,3 +1,13 @@
+2013-09-23  Tom Tromey  <tromey@redhat.com>
+
+       * linespec.c (struct minsym_and_objfile): Remove.
+       (minsym_and_objfile_d): Remove.
+       (struct linespec, struct collect_info, linespec_parse_basic)
+       (convert_linespec_to_sals, linespec_parser_delete, decode_objc)
+       (compare_msymbols, find_method, find_function_symbols)
+       (find_linespec_symbols, struct collect_minsyms, compare_msyms)
+       (add_minsym, search_minsyms_for_name): Update.
+
 2013-09-23  Andrew Burgess  <aburgess@broadcom.com>
 
        * regcache.c: Add include of valprint.h.
index b1a80634dc7b8c432d0e989f8759280909994fdd..8b7f3bd61492b067484e764056742179cff944f6 100644 (file)
@@ -61,16 +61,9 @@ struct address_entry
   CORE_ADDR addr;
 };
 
-/* A helper struct which just holds a minimal symbol and the object
-   file from which it came.  */
+typedef struct bound_minimal_symbol bound_minimal_symbol_d;
 
-typedef struct minsym_and_objfile
-{
-  struct minimal_symbol *minsym;
-  struct objfile *objfile;
-} minsym_and_objfile_d;
-
-DEF_VEC_O (minsym_and_objfile_d);
+DEF_VEC_O (bound_minimal_symbol_d);
 
 /* An enumeration of possible signs for a line offset.  */
 enum offset_relative_sign
@@ -132,7 +125,7 @@ struct linespec
   /* A list of matching function symbols and minimal symbols.  Both lists
      may be NULL if no matching symbols were found.  */
   VEC (symbolp) *function_symbols;
-  VEC (minsym_and_objfile_d) *minimal_symbols;
+  VEC (bound_minimal_symbol_d) *minimal_symbols;
 
   /* The name of a label and matching symbols.  */
 
@@ -220,7 +213,7 @@ struct collect_info
   struct
   {
     VEC (symbolp) *symbols;
-    VEC (minsym_and_objfile_d) *minimal_symbols;
+    VEC (bound_minimal_symbol_d) *minimal_symbols;
   } result;
 };
 
@@ -340,7 +333,7 @@ static void find_linespec_symbols (struct linespec_state *self,
                                   VEC (symtab_ptr) *file_symtabs,
                                   const char *name,
                                   VEC (symbolp) **symbols,
-                                  VEC (minsym_and_objfile_d) **minsyms);
+                                  VEC (bound_minimal_symbol_d) **minsyms);
 
 static struct line_offset
      linespec_parse_variable (struct linespec_state *self,
@@ -1587,7 +1580,7 @@ linespec_parse_basic (linespec_parser *parser)
   char *name;
   linespec_token token;
   VEC (symbolp) *symbols, *labels;
-  VEC (minsym_and_objfile_d) *minimal_symbols;
+  VEC (bound_minimal_symbol_d) *minimal_symbols;
   struct cleanup *cleanup;
 
   /* Get the next token.  */
@@ -2026,7 +2019,7 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
       int i;
       struct symtab_and_line sal;
       struct symbol *sym;
-      minsym_and_objfile_d *elem;
+      bound_minimal_symbol_d *elem;
       struct program_space *pspace;
 
       if (ls->function_symbols != NULL)
@@ -2051,12 +2044,13 @@ convert_linespec_to_sals (struct linespec_state *state, linespec_p ls)
       if (ls->minimal_symbols != NULL)
        {
          /* Sort minimal symbols by program space, too.  */
-         qsort (VEC_address (minsym_and_objfile_d, ls->minimal_symbols),
-                VEC_length (minsym_and_objfile_d, ls->minimal_symbols),
-                sizeof (minsym_and_objfile_d), compare_msymbols);
+         qsort (VEC_address (bound_minimal_symbol_d, ls->minimal_symbols),
+                VEC_length (bound_minimal_symbol_d, ls->minimal_symbols),
+                sizeof (bound_minimal_symbol_d), compare_msymbols);
 
          for (i = 0;
-              VEC_iterate (minsym_and_objfile_d, ls->minimal_symbols, i, elem);
+              VEC_iterate (bound_minimal_symbol_d, ls->minimal_symbols,
+                           i, elem);
               ++i)
            {
              pspace = elem->objfile->pspace;
@@ -2407,7 +2401,7 @@ linespec_parser_delete (void *arg)
     VEC_free (symbolp, PARSER_RESULT (parser)->function_symbols);
 
   if (PARSER_RESULT (parser)->minimal_symbols != NULL)
-    VEC_free (minsym_and_objfile_d, PARSER_RESULT (parser)->minimal_symbols);
+    VEC_free (bound_minimal_symbol_d, PARSER_RESULT (parser)->minimal_symbols);
 
   if (PARSER_RESULT (parser)->labels.label_symbols != NULL)
     VEC_free (symbolp, PARSER_RESULT (parser)->labels.label_symbols);
@@ -2636,7 +2630,7 @@ decode_objc (struct linespec_state *self, linespec_p ls, char **argptr)
   add_all_symbol_names_from_pspace (&info, NULL, symbol_names);
 
   if (!VEC_empty (symbolp, info.result.symbols)
-      || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
+      || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
     {
       char *saved_arg;
 
@@ -2794,8 +2788,8 @@ compare_symbols (const void *a, const void *b)
 static int
 compare_msymbols (const void *a, const void *b)
 {
-  const struct minsym_and_objfile *sa = a;
-  const struct minsym_and_objfile *sb = b;
+  const struct bound_minimal_symbol *sa = a;
+  const struct bound_minimal_symbol *sb = b;
   uintptr_t uia, uib;
 
   uia = (uintptr_t) sa->objfile->pspace;
@@ -2872,7 +2866,7 @@ static void
 find_method (struct linespec_state *self, VEC (symtab_ptr) *file_symtabs,
             const char *class_name, const char *method_name,
             VEC (symbolp) *sym_classes, VEC (symbolp) **symbols,
-            VEC (minsym_and_objfile_d) **minsyms)
+            VEC (bound_minimal_symbol_d) **minsyms)
 {
   struct symbol *sym;
   struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
@@ -2945,7 +2939,7 @@ find_method (struct linespec_state *self, VEC (symtab_ptr) *file_symtabs,
     }
 
   if (!VEC_empty (symbolp, info.result.symbols)
-      || !VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
+      || !VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
     {
       *symbols = info.result.symbols;
       *minsyms = info.result.minimal_symbols;
@@ -3046,7 +3040,7 @@ static void
 find_function_symbols (struct linespec_state *state,
                       VEC (symtab_ptr) *file_symtabs, const char *name,
                       VEC (symbolp) **symbols,
-                      VEC (minsym_and_objfile_d) **minsyms)
+                      VEC (bound_minimal_symbol_d) **minsyms)
 {
   struct collect_info info;
   VEC (const_char_ptr) *symbol_names = NULL;
@@ -3075,9 +3069,9 @@ find_function_symbols (struct linespec_state *state,
   else
     *symbols = info.result.symbols;
 
-  if (VEC_empty (minsym_and_objfile_d, info.result.minimal_symbols))
+  if (VEC_empty (bound_minimal_symbol_d, info.result.minimal_symbols))
     {
-      VEC_free (minsym_and_objfile_d, info.result.minimal_symbols);
+      VEC_free (bound_minimal_symbol_d, info.result.minimal_symbols);
       *minsyms = NULL;
     }
   else
@@ -3092,7 +3086,7 @@ find_linespec_symbols (struct linespec_state *state,
                       VEC (symtab_ptr) *file_symtabs,
                       const char *name,
                       VEC (symbolp) **symbols,
-                      VEC (minsym_and_objfile_d) **minsyms)
+                      VEC (bound_minimal_symbol_d) **minsyms)
 {
   struct cleanup *cleanup;
   char *canon;
@@ -3132,7 +3126,7 @@ find_linespec_symbols (struct linespec_state *state,
      the name into class and method names and searching the class and its
      baseclasses.  */
   if (VEC_empty (symbolp, *symbols)
-      && VEC_empty (minsym_and_objfile_d, *minsyms))
+      && VEC_empty (bound_minimal_symbol_d, *minsyms))
     {
       char *klass, *method;
       const char *last, *p, *scope_op;
@@ -3449,7 +3443,7 @@ struct collect_minsyms
   int list_mode;
 
   /* The resulting symbols.  */
-  VEC (minsym_and_objfile_d) *msyms;
+  VEC (bound_minimal_symbol_d) *msyms;
 };
 
 /* A helper function to classify a minimal_symbol_type according to
@@ -3481,8 +3475,8 @@ classify_mtype (enum minimal_symbol_type t)
 static int
 compare_msyms (const void *a, const void *b)
 {
-  const minsym_and_objfile_d *moa = a;
-  const minsym_and_objfile_d *mob = b;
+  const bound_minimal_symbol_d *moa = a;
+  const bound_minimal_symbol_d *mob = b;
   enum minimal_symbol_type ta = MSYMBOL_TYPE (moa->minsym);
   enum minimal_symbol_type tb = MSYMBOL_TYPE (mob->minsym);
 
@@ -3496,7 +3490,7 @@ static void
 add_minsym (struct minimal_symbol *minsym, void *d)
 {
   struct collect_minsyms *info = d;
-  minsym_and_objfile_d mo;
+  bound_minimal_symbol_d mo;
 
   /* Exclude data symbols when looking for breakpoint locations.   */
   if (!info->list_mode)
@@ -3523,7 +3517,7 @@ add_minsym (struct minimal_symbol *minsym, void *d)
 
   mo.minsym = minsym;
   mo.objfile = info->objfile;
-  VEC_safe_push (minsym_and_objfile_d, info->msyms, &mo);
+  VEC_safe_push (bound_minimal_symbol_d, info->msyms, &mo);
 }
 
 /* Search minimal symbols in all objfiles for NAME.  If SEARCH_PSPACE
@@ -3553,7 +3547,7 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
     local.funfirstline = info->state->funfirstline;
     local.list_mode = info->state->list_mode;
 
-    cleanup = make_cleanup (VEC_cleanup (minsym_and_objfile_d),
+    cleanup = make_cleanup (VEC_cleanup (bound_minimal_symbol_d),
                            &local.msyms);
 
     ALL_OBJFILES (objfile)
@@ -3562,31 +3556,31 @@ search_minsyms_for_name (struct collect_info *info, const char *name,
       iterate_over_minimal_symbols (objfile, name, add_minsym, &local);
     }
 
-    if (!VEC_empty (minsym_and_objfile_d, local.msyms))
+    if (!VEC_empty (bound_minimal_symbol_d, local.msyms))
       {
        int classification;
        int ix;
-       minsym_and_objfile_d *item;
+       bound_minimal_symbol_d *item;
 
-       qsort (VEC_address (minsym_and_objfile_d, local.msyms),
-              VEC_length (minsym_and_objfile_d, local.msyms),
-              sizeof (minsym_and_objfile_d),
+       qsort (VEC_address (bound_minimal_symbol_d, local.msyms),
+              VEC_length (bound_minimal_symbol_d, local.msyms),
+              sizeof (bound_minimal_symbol_d),
               compare_msyms);
 
        /* Now the minsyms are in classification order.  So, we walk
           over them and process just the minsyms with the same
           classification as the very first minsym in the list.  */
-       item = VEC_index (minsym_and_objfile_d, local.msyms, 0);
+       item = VEC_index (bound_minimal_symbol_d, local.msyms, 0);
        classification = classify_mtype (MSYMBOL_TYPE (item->minsym));
 
        for (ix = 0;
-            VEC_iterate (minsym_and_objfile_d, local.msyms, ix, item);
+            VEC_iterate (bound_minimal_symbol_d, local.msyms, ix, item);
             ++ix)
          {
            if (classify_mtype (MSYMBOL_TYPE (item->minsym)) != classification)
              break;
 
-           VEC_safe_push (minsym_and_objfile_d,
+           VEC_safe_push (bound_minimal_symbol_d,
                           info->result.minimal_symbols, item);
          }
       }
index 86a0fd6030b1b0bf4bc49c78bc64b105db7cf534..e24cf06c34c6bcb56110e0b0a934ae7788b31761 100644 (file)
@@ -2264,6 +2264,9 @@ namespace eval ::varobj_tree {
       error "tree does not contain enough elements"
     }
 
+variable _root_idx
+      set _root_idx 0
+
     # Create root node and process the tree.
     array set root [list language $language]
     array set root [list obj_name "root"]