* config/i386/tm-i386.h (PARM_BOUNDARY, CALL_DUMMY,
[deliverable/binutils-gdb.git] / gdb / buildsym.c
index e30f98a0252c48d156fd068ffed485a8850c6f48..5078935fefebb98e2eb2615bb904857fb0bcae54 100644 (file)
@@ -1,6 +1,6 @@
 /* Support routines for building symbol tables in GDB's internal format.
    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "complaints.h"
 #include "gdb_string.h"
 #include "expression.h"                /* For "enum exp_opcode" used by... */
-#include "language.h"          /* For "longest_local_hex_string_custom" */
+#include "language.h"          /* For "local_hex_string" */
 #include "bcache.h"
+#include "filenames.h"         /* For DOSish file names */
+#include "macrotab.h"
 /* Ask buildsym.h to define the vars it normally declares `extern'.  */
 #define        EXTERN
 /**/
@@ -191,6 +193,9 @@ really_free_pendings (PTR dummy)
       xfree ((void *) next);
     }
   global_symbols = NULL;
+
+  if (pending_macros)
+    free_macro_table (pending_macros);
 }
 
 /* This function is called to discard any pending blocks. */
@@ -274,9 +279,8 @@ finish_block (struct symbol *symbol, struct pending **listhead,
             parameter symbols. */
          int nparams = 0, iparams;
          struct symbol *sym;
-         for (i = 0; i < BLOCK_NSYMS (block); i++)
+         ALL_BLOCK_SYMBOLS (block, i, sym)
            {
-             sym = BLOCK_SYM (block, i);
              switch (SYMBOL_CLASS (sym))
                {
                case LOC_ARG:
@@ -322,6 +326,7 @@ finish_block (struct symbol *symbol, struct pending **listhead,
                    case LOC_BASEREG_ARG:
                    case LOC_LOCAL_ARG:
                      TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
+                     TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
                      iparams++;
                      break;
                    case LOC_UNDEF:
@@ -508,7 +513,7 @@ make_blockvector (struct objfile *objfile)
                = BLOCK_START (BLOCKVECTOR_BLOCK (blockvector, i));
 
              complain (&blockvector_complaint,
-                       longest_local_hex_string ((LONGEST) start));
+                       local_hex_string ((LONGEST) start));
            }
        }
     }
@@ -532,7 +537,7 @@ start_subfile (char *name, char *dirname)
 
   for (subfile = subfiles; subfile; subfile = subfile->next)
     {
-      if (STREQ (subfile->name, name))
+      if (FILENAME_CMP (subfile->name, name) == 0)
        {
          current_subfile = subfile;
          return;
@@ -882,7 +887,8 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
   if (pending_blocks == NULL
       && file_symbols == NULL
       && global_symbols == NULL
-      && have_line_numbers == 0)
+      && have_line_numbers == 0
+      && pending_macros == NULL)
     {
       /* Ignore symtabs that have no functions with real debugging
          info.  */
@@ -943,6 +949,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
 
          /* Fill in its components.  */
          symtab->blockvector = blockvector;
+          symtab->macro_table = pending_macros;
          if (subfile->line_vector)
            {
              /* Reallocate the line table on the symbol obstack */
@@ -1021,6 +1028,7 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
 
   last_source_file = NULL;
   current_subfile = NULL;
+  pending_macros = NULL;
 
   return symtab;
 }
@@ -1111,6 +1119,7 @@ buildsym_init (void)
   file_symbols = NULL;
   global_symbols = NULL;
   pending_blocks = NULL;
+  pending_macros = NULL;
 }
 
 /* Initialize anything that needs initializing when a completely new
This page took 0.027448 seconds and 4 git commands to generate.