* Rename remote-es1800.c to remote-es.c
[deliverable/binutils-gdb.git] / gdb / buildsym.c
index 73ca9b24ce6b7e738cd944fc1234651b2ee3f774..6c8c807062f447513dd65026282061179cb1dc1a 100644 (file)
@@ -257,7 +257,8 @@ finish_block (symbol, listhead, old_blocks, start, end, objfile)
            {
              if (symbol)
                {
-                 complain (&innerblock_complaint, SYMBOL_NAME (symbol));
+                 complain (&innerblock_complaint,
+                           SYMBOL_SOURCE_NAME (symbol));
                }
              else
                {
@@ -371,7 +372,7 @@ start_subfile (name, dirname)
 
   for (subfile = subfiles; subfile; subfile = subfile->next)
     {
-      if (!strcmp (subfile->name, name))
+      if (STREQ (subfile->name, name))
        {
          current_subfile = subfile;
          return;
@@ -388,11 +389,29 @@ start_subfile (name, dirname)
   current_subfile = subfile;
 
   /* Save its name and compilation directory name */
-  subfile->name = strdup (name);
+  subfile->name = (name == NULL)? NULL : strdup (name);
   subfile->dirname = (dirname == NULL) ? NULL : strdup (dirname);
   
   /* Initialize line-number recording for this subfile.  */
   subfile->line_vector = NULL;
+
+  /* Default the source language to whatever can be deduced from
+     the filename.  If nothing can be deduced (such as for a C/C++
+     include file with a ".h" extension), then inherit whatever
+     language the previous subfile had.  This kludgery is necessary
+     because there is no standard way in some object formats to
+     record the source language.  Also, when symtabs are allocated
+     we try to deduce a language then as well, but it is too late
+     for us to use that information while reading symbols, since
+     symtabs aren't allocated until after all the symbols have
+     been processed for a given source file. */
+
+  subfile->language = deduce_language_from_filename (subfile->name);
+  if (subfile->language == language_unknown &&
+      subfile->next != NULL)
+    {
+      subfile->language = subfile->next->language;
+    }
 }
 
 /* For stabs readers, the first N_SO symbol is assumed to be the source
@@ -417,6 +436,24 @@ patch_subfile_names (subfile, name)
     {
       subfile->dirname = subfile->name;
       subfile->name = strdup (name);
+
+      /* Default the source language to whatever can be deduced from
+        the filename.  If nothing can be deduced (such as for a C/C++
+        include file with a ".h" extension), then inherit whatever
+        language the previous subfile had.  This kludgery is necessary
+        because there is no standard way in some object formats to
+        record the source language.  Also, when symtabs are allocated
+        we try to deduce a language then as well, but it is too late
+        for us to use that information while reading symbols, since
+        symtabs aren't allocated until after all the symbols have
+        been processed for a given source file. */
+
+      subfile->language = deduce_language_from_filename (subfile->name);
+      if (subfile->language == language_unknown &&
+         subfile->next != NULL)
+       {
+         subfile->language = subfile->next->language;
+       }
     }
 }
 
@@ -551,6 +588,8 @@ start_symtab (name, dirname, start_addr)
    for that file and put it in the list of all such.
 
    END_ADDR is the address of the end of the file's text.
+   SECTION is the section number (in objfile->section_offsets) of
+   the blockvector and linetable.
 
    Note that it is possible for end_symtab() to return NULL.  In particular,
    for the DWARF case at least, it will return NULL when it finds a
@@ -560,11 +599,12 @@ start_symtab (name, dirname, start_addr)
    because then gdb will never know about this empty file (FIXME). */
 
 struct symtab *
-end_symtab (end_addr, sort_pending, sort_linevec, objfile)
+end_symtab (end_addr, sort_pending, sort_linevec, objfile, section)
      CORE_ADDR end_addr;
      int sort_pending;
      int sort_linevec;
      struct objfile *objfile;
+     int section;
 {
   register struct symtab *symtab;
   register struct blockvector *blockvector;
@@ -694,6 +734,7 @@ end_symtab (end_addr, sort_pending, sort_linevec, objfile)
            {
              symtab->linetable = NULL;
            }
+         symtab->block_line_section = section;
          if (subfile->dirname)
            {
              /* Reallocate the dirname on the symbol obstack */
@@ -709,14 +750,18 @@ end_symtab (end_addr, sort_pending, sort_linevec, objfile)
          symtab->free_code = free_linetable;
          symtab->free_ptr = NULL;
 
-#ifdef IBM6000_TARGET
-         /* In case we need to duplicate symbol tables (to represent include
-            files), and in case our system needs relocation, we want to
-            relocate the main symbol table node only (for the main file,
-            not for the include files). */
+         /* Use whatever language we have been using for this subfile,
+            not the one that was deduced in allocate_symtab from the
+            filename.  We already did our own deducing when we created
+            the subfile, and we may have altered our opinion of what
+            language it is from things we found in the symbols. */
+         symtab->language = subfile->language;
 
-         symtab->nonreloc = TRUE;
-#endif
+         /* All symtabs for the main file and the subfiles share a
+            blockvector, so we need to clear primary for everything but
+            the main file.  */
+
+         symtab->primary = 0;
        }
       if (subfile->name != NULL)
        {
@@ -735,14 +780,11 @@ end_symtab (end_addr, sort_pending, sort_linevec, objfile)
       free ((PTR)subfile);
     }
 
-#ifdef IBM6000_TARGET
-  /* all include symbol tables are non-relocatable, except the main source
-     file's. */
+  /* Set this for the main source file.  */
   if (symtab)
     {
-      symtab->nonreloc = FALSE;
+      symtab->primary = 1;
     }
-#endif
 
   last_source_file = NULL;
   current_subfile = NULL;
This page took 0.024584 seconds and 4 git commands to generate.