gdb
[deliverable/binutils-gdb.git] / gdb / source.c
index 209032657163b85a3b87500e082c1c62a0ef80e8..dda5d1bb6d0e58401410b4769b8c0809d9be4c03 100644 (file)
@@ -46,6 +46,8 @@
 #include "ui-out.h"
 #include "readline/readline.h"
 
+#include "psymtab.h"
+
 
 #define OPEN_MODE (O_RDONLY | O_BINARY)
 #define FDOPEN_MODE FOPEN_RB
@@ -229,8 +231,6 @@ select_source_symtab (struct symtab *s)
 {
   struct symtabs_and_lines sals;
   struct symtab_and_line sal;
-  struct partial_symtab *ps;
-  struct partial_symtab *cs_pst = 0;
   struct objfile *ofp;
 
   if (s)
@@ -281,33 +281,13 @@ select_source_symtab (struct symtab *s)
   if (current_source_symtab)
     return;
 
-  /* How about the partial symbol tables?  */
-
   ALL_OBJFILES (ofp)
-    {
-      for (ps = ofp->psymtabs; ps != NULL; ps = ps->next)
-       {
-         const char *name = ps->filename;
-         int len = strlen (name);
-         if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
-             || strcmp (name, "<<C++-namespaces>>") == 0)))
-           cs_pst = ps;
-       }
-    }
-  if (cs_pst)
-    {
-      if (cs_pst->readin)
-       {
-         internal_error (__FILE__, __LINE__,
-                         _("select_source_symtab: "
-                         "readin pst found and no symtabs."));
-       }
-      else
-       {
-         current_source_pspace = current_program_space;
-         current_source_symtab = PSYMTAB_TO_SYMTAB (cs_pst);
-       }
-    }
+  {
+    if (ofp->sf)
+      s = ofp->sf->qf->find_last_source_symtab (ofp);
+    if (s)
+      current_source_symtab = s;
+  }
   if (current_source_symtab)
     return;
 
@@ -332,7 +312,6 @@ forget_cached_source_info (void)
   struct program_space *pspace;
   struct symtab *s;
   struct objfile *objfile;
-  struct partial_symtab *pst;
 
   ALL_PSPACES (pspace)
     ALL_PSPACE_OBJFILES (pspace, objfile)
@@ -351,14 +330,8 @@ forget_cached_source_info (void)
            }
        }
 
-      ALL_OBJFILE_PSYMTABS (objfile, pst)
-      {
-       if (pst->fullname != NULL)
-         {
-           xfree (pst->fullname);
-           pst->fullname = NULL;
-         }
-      }
+      if (objfile->sf)
+       objfile->sf->qf->forget_cached_source_info (objfile);
     }
 
   last_source_visited = NULL;
@@ -964,7 +937,7 @@ rewrite_source_path (const char *path)
      An invalid file descriptor is returned. ( the return value is negative ) 
      FULLNAME is set to NULL.  */
 
-static int
+int
 find_and_open_source (const char *filename,
                      const char *dirname,
                      char **fullname)
@@ -1094,34 +1067,6 @@ symtab_to_fullname (struct symtab *s)
 
   return NULL;
 }
-
-/* Finds the fullname that a partial_symtab represents.
-
-   If this functions finds the fullname, it will save it in ps->fullname
-   and it will also return the value.
-
-   If this function fails to find the file that this partial_symtab represents,
-   NULL will be returned and ps->fullname will be set to NULL.  */
-char *
-psymtab_to_fullname (struct partial_symtab *ps)
-{
-  int r;
-
-  if (!ps)
-    return NULL;
-
-  /* Don't check ps->fullname here, the file could have been
-     deleted/moved/..., look for it again */
-  r = find_and_open_source (ps->filename, ps->dirname, &ps->fullname);
-
-  if (r >= 0)
-    {
-      close (r);
-      return ps->fullname;
-    }
-
-  return NULL;
-}
 \f
 /* Create and initialize the table S->line_charpos that records
    the positions of the lines in the source file, which is assumed
This page took 0.025636 seconds and 4 git commands to generate.