* symmisc.c (dump_symtab): Use catch_errors around print_symbol.
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 27 Aug 1993 22:55:04 +0000 (22:55 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 27 Aug 1993 22:55:04 +0000 (22:55 +0000)
Change calling sequence of print_symbol to fit catch_errors.

gdb/ChangeLog
gdb/symmisc.c

index d424b5ae2b2f619accda3f05990b1957290b8da2..d5f0a7d1ac7b03fd4d8af34a44146a7a0e13f3c2 100644 (file)
@@ -1,5 +1,8 @@
 Fri Aug 27 09:30:40 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)
 
+       * symmisc.c (dump_symtab): Use catch_errors around print_symbol.
+       Change calling sequence of print_symbol to fit catch_errors.
+
        * mips-tdep.c: Call reinit_frame_cache every time the user does
        "set heuristic-fence-post".
 
index e3336bb6fe78d49642cf31f68a3e8f00d0fa717c..fec7120f30f34a348cbf68bd1ea963a4894fbfc1 100644 (file)
@@ -64,8 +64,13 @@ block_depth PARAMS ((struct block *));
 static void
 print_partial_symbol PARAMS ((struct partial_symbol *, int, char *, FILE *));
 
-static void
-print_symbol PARAMS ((struct symbol *, int, FILE *));
+struct print_symbol_args {
+  struct symbol *symbol;
+  int depth;
+  FILE *outfile;
+};
+
+static int print_symbol PARAMS ((char *));
 
 static void
 free_symtab_block PARAMS ((struct objfile *, struct block *));
@@ -368,7 +373,12 @@ dump_symtab (objfile, symtab, outfile)
       blen = BLOCK_NSYMS (b);
       for (j = 0; j < blen; j++)
        {
-         print_symbol (BLOCK_SYM (b, j), depth + 1, outfile);
+         struct print_symbol_args s;
+         s.symbol = BLOCK_SYM (b, j);
+         s.depth = depth + 1;
+         s.outfile = outfile;
+         catch_errors (print_symbol, &s, "Error printing symbol:\n",
+                       RETURN_MASK_ERROR);
        }
     }
   fprintf (outfile, "\n");
@@ -425,12 +435,18 @@ maintenance_print_symbols (args, from_tty)
   do_cleanups (cleanups);
 }
 
-static void
-print_symbol (symbol, depth, outfile)
-     struct symbol *symbol;
-     int depth;
-     FILE *outfile;
+/* Print symbol ARGS->SYMBOL on ARGS->OUTFILE.  ARGS->DEPTH says how
+   far to indent.  ARGS is really a struct print_symbol_args *, but is
+   declared as char * to get it past catch_errors.  */
+
+static int
+print_symbol (args)
+     char *args;
 {
+  struct symbol *symbol = ((struct print_symbol_args *)args)->symbol;
+  int depth = ((struct print_symbol_args *)args)->depth;
+  FILE *outfile = ((struct print_symbol_args *)args)->outfile;
+
   print_spaces (depth, outfile);
   if (SYMBOL_NAMESPACE (symbol) == LABEL_NAMESPACE)
     {
@@ -500,28 +516,13 @@ print_symbol (symbol, depth, outfile)
          break;
 
        case LOC_ARG:
-         if (SYMBOL_BASEREG_VALID (symbol))
-           {
-             fprintf (outfile, "arg at 0x%lx from register %d,",
-                      SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
-           }
-         else
-           {
-             fprintf (outfile, "arg at 0x%lx,", SYMBOL_VALUE (symbol));
-           }
+         fprintf (outfile, "arg at 0x%lx,", SYMBOL_VALUE (symbol));
          break;
 
        case LOC_LOCAL_ARG:
-         if (SYMBOL_BASEREG_VALID (symbol))
-           {
-             fprintf (outfile, "arg at offset 0x%lx from register %d,",
-                      SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
-           }
-         else
-           {
-             fprintf (outfile, "arg at offset 0x%lx from fp,",
-                      SYMBOL_VALUE (symbol));
-           }
+         fprintf (outfile, "arg at offset 0x%lx from fp,",
+                  SYMBOL_VALUE (symbol));
+         break;
 
        case LOC_REF_ARG:
          fprintf (outfile, "reference arg at 0x%lx,", SYMBOL_VALUE (symbol));
@@ -536,15 +537,17 @@ print_symbol (symbol, depth, outfile)
          break;
 
        case LOC_LOCAL:
-         if (SYMBOL_BASEREG_VALID (symbol))
-           {
-             fprintf (outfile, "local at 0x%lx from register %d",
-                      SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
-           }
-         else
-           {
-             fprintf (outfile, "local at 0x%lx,", SYMBOL_VALUE (symbol));
-           }
+         fprintf (outfile, "local at 0x%lx,", SYMBOL_VALUE (symbol));
+         break;
+
+       case LOC_BASEREG:
+         fprintf (outfile, "local at 0x%lx from register %d",
+                  SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
+         break;
+
+       case LOC_BASEREG_ARG:
+         fprintf (outfile, "arg at 0x%lx from register %d,",
+                  SYMBOL_VALUE (symbol), SYMBOL_BASEREG (symbol));
          break;
 
        case LOC_TYPEDEF: