diff options
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 77 |
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 |