aboutsummaryrefslogtreecommitdiff
path: root/gdb/source.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/source.c')
-rw-r--r--gdb/source.c77
1 files changed, 11 insertions, 66 deletions
diff --git a/gdb/source.c b/gdb/source.c
index 2090326..dda5d1b 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -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;
-}
/* Create and initialize the table S->line_charpos that records
the positions of the lines in the source file, which is assumed