2003-05-14 Elena Zannoni <ezannoni@redhat.com>
[deliverable/binutils-gdb.git] / gdb / symmisc.c
index 8c4902542ce7194110343b9a26949f9000748144..3b57e5fa41dc4580c7da6d16fcaeab9f26c26f01 100644 (file)
@@ -33,6 +33,7 @@
 #include "language.h"
 #include "bcache.h"
 #include "block.h"
+#include "gdb_regex.h"
 
 #include "gdb_string.h"
 #include <readline/readline.h>
@@ -98,7 +99,7 @@ free_symtab_block (struct objfile *objfile, struct block *b)
       for (sym = BLOCK_BUCKET (b, i); sym; sym = next_sym)
        {
          next_sym = sym->hash_next;
-         xmfree (objfile->md, SYMBOL_NAME (sym));
+         xmfree (objfile->md, DEPRECATED_SYMBOL_NAME (sym));
          xmfree (objfile->md, sym);
        }
     }
@@ -312,7 +313,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
       return;
     }
   for (index = 0, msymbol = objfile->msymbols;
-       SYMBOL_NAME (msymbol) != NULL; msymbol++, index++)
+       DEPRECATED_SYMBOL_NAME (msymbol) != NULL; msymbol++, index++)
     {
       switch (msymbol->type)
        {
@@ -349,7 +350,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
        }
       fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
       print_address_numeric (SYMBOL_VALUE_ADDRESS (msymbol), 1, outfile);
-      fprintf_filtered (outfile, " %s", SYMBOL_NAME (msymbol));
+      fprintf_filtered (outfile, " %s", DEPRECATED_SYMBOL_NAME (msymbol));
       if (SYMBOL_BFD_SECTION (msymbol))
        fprintf_filtered (outfile, " section %s",
                          bfd_section_name (objfile->obfd,
@@ -505,7 +506,7 @@ dump_symtab (struct objfile *objfile, struct symtab *symtab,
          print_address_numeric (BLOCK_END (b), 1, outfile);
          if (BLOCK_FUNCTION (b))
            {
-             fprintf_filtered (outfile, ", function %s", SYMBOL_NAME (BLOCK_FUNCTION (b)));
+             fprintf_filtered (outfile, ", function %s", DEPRECATED_SYMBOL_NAME (BLOCK_FUNCTION (b)));
              if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
                {
                  fprintf_filtered (outfile, ", %s",
@@ -598,7 +599,7 @@ print_symbol (void *args)
   struct ui_file *outfile = ((struct print_symbol_args *) args)->outfile;
 
   print_spaces (depth, outfile);
-  if (SYMBOL_NAMESPACE (symbol) == LABEL_NAMESPACE)
+  if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
     {
       fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol));
       print_address_numeric (SYMBOL_VALUE_ADDRESS (symbol), 1, outfile);
@@ -610,7 +611,7 @@ print_symbol (void *args)
        fprintf_filtered (outfile, "\n");
       return 1;
     }
-  if (SYMBOL_NAMESPACE (symbol) == STRUCT_NAMESPACE)
+  if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
     {
       if (TYPE_TAG_NAME (SYMBOL_TYPE (symbol)))
        {
@@ -623,7 +624,7 @@ print_symbol (void *args)
                          ? "enum"
                     : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
                        ? "struct" : "union")),
-                           SYMBOL_NAME (symbol));
+                           DEPRECATED_SYMBOL_NAME (symbol));
          LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth);
        }
       fprintf_filtered (outfile, ";\n");
@@ -752,6 +753,11 @@ print_symbol (void *args)
                               SYMBOL_BFD_SECTION (symbol)));
          break;
 
+       case LOC_COMPUTED:
+       case LOC_COMPUTED_ARG:
+         fprintf_filtered (outfile, "computed at runtime");
+         break;
+
        case LOC_UNRESOLVED:
          fprintf_filtered (outfile, "unresolved");
          break;
@@ -826,28 +832,28 @@ print_partial_symbols (struct partial_symbol **p, int count, char *what,
   fprintf_filtered (outfile, "  %s partial symbols:\n", what);
   while (count-- > 0)
     {
-      fprintf_filtered (outfile, "    `%s'", SYMBOL_NAME (*p));
+      fprintf_filtered (outfile, "    `%s'", DEPRECATED_SYMBOL_NAME (*p));
       if (SYMBOL_DEMANGLED_NAME (*p) != NULL)
        {
          fprintf_filtered (outfile, "  `%s'", SYMBOL_DEMANGLED_NAME (*p));
        }
       fputs_filtered (", ", outfile);
-      switch (SYMBOL_NAMESPACE (*p))
+      switch (SYMBOL_DOMAIN (*p))
        {
-       case UNDEF_NAMESPACE:
-         fputs_filtered ("undefined namespace, ", outfile);
+       case UNDEF_DOMAIN:
+         fputs_filtered ("undefined domain, ", outfile);
          break;
-       case VAR_NAMESPACE:
+       case VAR_DOMAIN:
          /* This is the usual thing -- don't print it */
          break;
-       case STRUCT_NAMESPACE:
-         fputs_filtered ("struct namespace, ", outfile);
+       case STRUCT_DOMAIN:
+         fputs_filtered ("struct domain, ", outfile);
          break;
-       case LABEL_NAMESPACE:
-         fputs_filtered ("label namespace, ", outfile);
+       case LABEL_DOMAIN:
+         fputs_filtered ("label domain, ", outfile);
          break;
        default:
-         fputs_filtered ("<invalid namespace>, ", outfile);
+         fputs_filtered ("<invalid domain>, ", outfile);
          break;
        }
       switch (SYMBOL_CLASS (*p))
@@ -903,6 +909,10 @@ print_partial_symbols (struct partial_symbol **p, int count, char *what,
        case LOC_OPTIMIZED_OUT:
          fputs_filtered ("optimized out", outfile);
          break;
+       case LOC_COMPUTED:
+       case LOC_COMPUTED_ARG:
+         fputs_filtered ("computed at runtime", outfile);
+         break;
        default:
          fputs_filtered ("<invalid location>", outfile);
          break;
@@ -976,6 +986,145 @@ maintenance_print_objfiles (char *ignore, int from_tty)
   immediate_quit--;
 }
 
+
+/* List all the symbol tables whose names match REGEXP (optional).  */
+void
+maintenance_info_symtabs (char *regexp, int from_tty)
+{
+  struct objfile *objfile;
+
+  if (regexp)
+    re_comp (regexp);
+
+  ALL_OBJFILES (objfile)
+    {
+      struct symtab *symtab;
+      
+      /* We don't want to print anything for this objfile until we
+         actually find a symtab whose name matches.  */
+      int printed_objfile_start = 0;
+
+      ALL_OBJFILE_SYMTABS (objfile, symtab)
+        if (! regexp
+            || re_exec (symtab->filename))
+          {
+            if (! printed_objfile_start)
+              {
+                printf_filtered ("{ objfile %s ", objfile->name);
+                wrap_here ("  ");
+                printf_filtered ("((struct objfile *) %p)\n", objfile);
+                printed_objfile_start = 1;
+              }
+
+            printf_filtered ("  { symtab %s ", symtab->filename);
+            wrap_here ("    ");
+            printf_filtered ("((struct symtab *) %p)\n", symtab);
+            printf_filtered ("    dirname %s\n",
+                             symtab->dirname ? symtab->dirname : "(null)");
+            printf_filtered ("    fullname %s\n",
+                             symtab->fullname ? symtab->fullname : "(null)");
+            printf_filtered ("    blockvector ((struct blockvector *) %p)%s\n",
+                             symtab->blockvector,
+                             symtab->primary ? " (primary)" : "");
+            printf_filtered ("    debugformat %s\n", symtab->debugformat);
+            printf_filtered ("  }\n");
+          }
+
+      if (printed_objfile_start)
+        printf_filtered ("}\n");
+    }
+}
+
+
+/* List all the partial symbol tables whose names match REGEXP (optional).  */
+void
+maintenance_info_psymtabs (char *regexp, int from_tty)
+{
+  struct objfile *objfile;
+
+  if (regexp)
+    re_comp (regexp);
+
+  ALL_OBJFILES (objfile)
+    {
+      struct partial_symtab *psymtab;
+
+      /* We don't want to print anything for this objfile until we
+         actually find a symtab whose name matches.  */
+      int printed_objfile_start = 0;
+
+      ALL_OBJFILE_PSYMTABS (objfile, psymtab)
+        if (! regexp
+            || re_exec (psymtab->filename))
+          {
+            if (! printed_objfile_start)
+              {
+                printf_filtered ("{ objfile %s ", objfile->name);
+                wrap_here ("  ");
+                printf_filtered ("((struct objfile *) %p)\n", objfile);
+                printed_objfile_start = 1;
+              }
+
+            printf_filtered ("  { psymtab %s ", psymtab->filename);
+            wrap_here ("    ");
+            printf_filtered ("((struct partial_symtab *) %p)\n", psymtab);
+            printf_filtered ("    readin %s\n",
+                             psymtab->readin ? "yes" : "no");
+            printf_filtered ("    fullname %s\n",
+                             psymtab->fullname ? psymtab->fullname : "(null)");
+            printf_filtered ("    text addresses ");
+            print_address_numeric (psymtab->textlow, 1, gdb_stdout);
+            printf_filtered (" -- ");
+            print_address_numeric (psymtab->texthigh, 1, gdb_stdout);
+            printf_filtered ("\n");
+            printf_filtered ("    globals ");
+            if (psymtab->n_global_syms)
+              {
+                printf_filtered ("(* (struct partial_symbol **) %p @ %d)\n",
+                                 (psymtab->objfile->global_psymbols.list
+                                  + psymtab->globals_offset),
+                                 psymtab->n_global_syms);
+              }
+            else
+              printf_filtered ("(none)\n");
+            printf_filtered ("    statics ");
+            if (psymtab->n_static_syms)
+              {
+                printf_filtered ("(* (struct partial_symbol **) %p @ %d)\n",
+                                 (psymtab->objfile->static_psymbols.list
+                                  + psymtab->statics_offset),
+                                 psymtab->n_static_syms);
+              }
+            else
+              printf_filtered ("(none)\n");
+            printf_filtered ("    dependencies ");
+            if (psymtab->number_of_dependencies)
+              {
+                int i;
+
+                printf_filtered ("{\n");
+                for (i = 0; i < psymtab->number_of_dependencies; i++)
+                  {
+                    struct partial_symtab *dep = psymtab->dependencies[i];
+
+                    /* Note the string concatenation there --- no comma.  */
+                    printf_filtered ("      psymtab %s "
+                                     "((struct partial_symtab *) %p)\n",
+                                     dep->filename, dep);
+                  }
+                printf_filtered ("    }\n");
+              }
+            else
+              printf_filtered ("(none)\n");
+            printf_filtered ("  }\n");
+          }
+
+      if (printed_objfile_start)
+        printf_filtered ("}\n");
+    }
+}
+
+
 /* Check consistency of psymtabs and symtabs.  */
 
 void
@@ -1001,12 +1150,12 @@ maintenance_check_symtabs (char *ignore, int from_tty)
     length = ps->n_static_syms;
     while (length--)
       {
-       sym = lookup_block_symbol (b, SYMBOL_NAME (*psym),
-                                  NULL, SYMBOL_NAMESPACE (*psym));
+       sym = lookup_block_symbol (b, DEPRECATED_SYMBOL_NAME (*psym),
+                                  NULL, SYMBOL_DOMAIN (*psym));
        if (!sym)
          {
            printf_filtered ("Static symbol `");
-           puts_filtered (SYMBOL_NAME (*psym));
+           puts_filtered (DEPRECATED_SYMBOL_NAME (*psym));
            printf_filtered ("' only found in ");
            puts_filtered (ps->filename);
            printf_filtered (" psymtab\n");
@@ -1018,12 +1167,12 @@ maintenance_check_symtabs (char *ignore, int from_tty)
     length = ps->n_global_syms;
     while (length--)
       {
-       sym = lookup_block_symbol (b, SYMBOL_NAME (*psym),
-                                  NULL, SYMBOL_NAMESPACE (*psym));
+       sym = lookup_block_symbol (b, DEPRECATED_SYMBOL_NAME (*psym),
+                                  NULL, SYMBOL_DOMAIN (*psym));
        if (!sym)
          {
            printf_filtered ("Global symbol `");
-           puts_filtered (SYMBOL_NAME (*psym));
+           puts_filtered (DEPRECATED_SYMBOL_NAME (*psym));
            printf_filtered ("' only found in ");
            puts_filtered (ps->filename);
            printf_filtered (" psymtab\n");
This page took 0.031037 seconds and 4 git commands to generate.