* objfiles.h (ALL_PRIMARY_SYMTABS): Define.
authorDaniel Jacobowitz <drow@false.org>
Sun, 21 Jan 2007 16:55:49 +0000 (16:55 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sun, 21 Jan 2007 16:55:49 +0000 (16:55 +0000)
* ada-lang.c (symtab_for_sym, ada_lookup_symbol_list)
(ada_lookup_symbol): Use ALL_PRIMARY_SYMTABS.
* cp-support.c (make_symbol_overload_list_qualified): Likewise.
* symtab.c (lookup_symbol_aux_block, lookup_symbol_aux_symtabs)
(basic_lookup_transparent_type, find_pc_sect_symtab, search_symbols)
(make_symbol_completion_list): Likewise.

gdb/ChangeLog
gdb/ada-lang.c
gdb/cp-support.c
gdb/objfiles.h
gdb/symtab.c

index 66cd6c7b4ee7151b8ba5d2efe9751374ce852b04..9752b2bfeada7b1fef343d82d66e16f23e20b3ce 100644 (file)
@@ -1,3 +1,14 @@
+2007-01-21  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * objfiles.h (ALL_PRIMARY_SYMTABS): Define.
+
+       * ada-lang.c (symtab_for_sym, ada_lookup_symbol_list)
+       (ada_lookup_symbol): Use ALL_PRIMARY_SYMTABS.
+       * cp-support.c (make_symbol_overload_list_qualified): Likewise.
+       * symtab.c (lookup_symbol_aux_block, lookup_symbol_aux_symtabs)
+       (basic_lookup_transparent_type, find_pc_sect_symtab, search_symbols)
+       (make_symbol_completion_list): Likewise.
+
 2007-01-21  Jan Kratochvil  <jan.kratochvil@redhat.com>
            Daniel Jacobowitz  <dan@codesourcery.com>
 
index 982a4bb94d4b41b8a9d9bd513747feb252c7390e..79a5460fa6c48383c267caa77a8ae1392095d5bb 100644 (file)
@@ -4120,7 +4120,7 @@ symtab_for_sym (struct symbol *sym)
   struct dict_iterator iter;
   int j;
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     switch (SYMBOL_CLASS (sym))
       {
@@ -4549,11 +4549,9 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
   /* Now add symbols from all global blocks: symbol tables, minimal symbol
      tables, and psymtab's.  */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     QUIT;
-    if (!s->primary)
-      continue;
     bv = BLOCKVECTOR (s);
     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
     ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
@@ -4619,11 +4617,9 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
   if (num_defns_collected (&symbol_list_obstack) == 0)
     {
 
-      ALL_SYMTABS (objfile, s)
+      ALL_PRIMARY_SYMTABS (objfile, s)
       {
         QUIT;
-        if (!s->primary)
-          continue;
         bv = BLOCKVECTOR (s);
         block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
         ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
@@ -4703,7 +4699,7 @@ ada_lookup_symbol (const char *name, const struct block *block0,
 
           /* Search the list of symtabs for one which contains the
              address of the start of this block.  */
-          ALL_SYMTABS (objfile, s)
+          ALL_PRIMARY_SYMTABS (objfile, s)
           {
             bv = BLOCKVECTOR (s);
             b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
index 7c3f8abd5964ad95e2ceebabff6f6df41eec22bc..e694ad6aa3141efe740eaa538d369055773a7ce2 100644 (file)
@@ -750,7 +750,7 @@ make_symbol_overload_list_qualified (const char *func_name)
   /* Go through the symtabs and check the externs and statics for
      symbols which match.  */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     QUIT;
     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
@@ -764,7 +764,7 @@ make_symbol_overload_list_qualified (const char *func_name)
     }
   }
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     QUIT;
     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);
index 6072348477f7bbdd38f35b50c0e2a2c09aceafd0..7b3cf0789a3623f1272ce3fb99475fa8f02b5fea 100644 (file)
@@ -603,6 +603,14 @@ extern void *objfile_data (struct objfile *objfile,
   ALL_OBJFILES (objfile)        \
     ALL_OBJFILE_SYMTABS (objfile, s)
 
+/* Traverse all symtabs in all objfiles, skipping included files
+   (which share a blockvector with their primary symtab).  */
+
+#define ALL_PRIMARY_SYMTABS(objfile, s) \
+  ALL_OBJFILES (objfile)               \
+    ALL_OBJFILE_SYMTABS (objfile, s)   \
+      if ((s)->primary)
+
 /* Traverse all psymtabs in all objfiles.  */
 
 #define        ALL_PSYMTABS(objfile, p) \
index e00edf78f0350db26b8601fc17970b7ca84629d7..f12834dd1cd12131643613855484f9b9147eeee7 100644 (file)
@@ -1269,7 +1269,7 @@ lookup_symbol_aux_block (const char *name, const char *linkage_name,
        {
          /* Search the list of symtabs for one which contains the
             address of the start of this block.  */
-         ALL_SYMTABS (objfile, s)
+         ALL_PRIMARY_SYMTABS (objfile, s)
            {
              bv = BLOCKVECTOR (s);
              b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@@ -1304,7 +1304,7 @@ lookup_symbol_aux_symtabs (int block_index,
   const struct block *block;
   struct symtab *s;
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
     block = BLOCKVECTOR_BLOCK (bv, block_index);
@@ -1719,7 +1719,7 @@ basic_lookup_transparent_type (const char *name)
      of the desired name as a global, then do psymtab-to-symtab
      conversion on the fly and return the found symbol.  */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
     block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@@ -1767,7 +1767,7 @@ basic_lookup_transparent_type (const char *name)
      conversion on the fly and return the found symbol.
    */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
     block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
@@ -1944,7 +1944,7 @@ find_pc_sect_symtab (CORE_ADDR pc, asection *section)
      It also happens for objfiles that have their functions reordered.
      For these, the symtab we are looking for is not necessarily read in.  */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
     b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@@ -2897,7 +2897,6 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
   struct symtab *s;
   struct partial_symtab *ps;
   struct blockvector *bv;
-  struct blockvector *prev_bv = 0;
   struct block *b;
   int i = 0;
   struct dict_iterator iter;
@@ -3079,15 +3078,9 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
       }
     }
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     bv = BLOCKVECTOR (s);
-    /* Often many files share a blockvector.
-       Scan each blockvector only once so that
-       we don't get every symbol many times.
-       It happens that the first symtab in the list
-       for any given blockvector is the main file.  */
-    if (bv != prev_bv)
       for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
        {
          struct symbol_search *prevtail = tail;
@@ -3139,7 +3132,6 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
                tail = sort_search_symbols (prevtail, nfound);
            }
        }
-    prev_bv = bv;
   }
 
   /* If there are no eyes, avoid all contact.  I mean, if there are
@@ -3704,7 +3696,7 @@ make_symbol_completion_list (char *text, char *word)
   /* Go through the symtabs and check the externs and statics for
      symbols which match.  */
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     QUIT;
     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
@@ -3714,7 +3706,7 @@ make_symbol_completion_list (char *text, char *word)
       }
   }
 
-  ALL_SYMTABS (objfile, s)
+  ALL_PRIMARY_SYMTABS (objfile, s)
   {
     QUIT;
     b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);