From: Jan Kratochvil Date: Mon, 25 Apr 2011 21:25:18 +0000 (+0000) Subject: gdb/ X-Git-Tag: gdb_7_3-2011-07-26-release~175 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c02c59a9cd4f577de589f3e4f2076b224e82ece;p=thirdparty%2Fbinutils-gdb.git gdb/ * elfread.c (elf_symfile_read): Protect dwarf2_initialize_objfile by !objfile_has_partial_symbols. New comment. * objfiles.c (objfile_has_partial_symbols): Call HAS_SYMBOLS if SYM_READ_PSYMBOLS is not present. Extend the comment. * symfile.h (struct sym_fns): Extend the sym_read_psymbols comment. gdb/testsuite/ * gdb.base/gdbindex-stabs-dwarf.c: New file. * gdb.base/gdbindex-stabs.c: New file. * gdb.base/gdbindex-stabs.exp: New file. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 12c280b355d..ebdd64f6acc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2011-04-25 Jan Kratochvil + + * elfread.c (elf_symfile_read): Protect dwarf2_initialize_objfile by + !objfile_has_partial_symbols. New comment. + * objfiles.c (objfile_has_partial_symbols): Call HAS_SYMBOLS if + SYM_READ_PSYMBOLS is not present. Extend the comment. + * symfile.h (struct sym_fns): Extend the sym_read_psymbols comment. + 2011-04-21 Pierre Muller * gdb_wchar.h (USE_INTERMEDIATE_ENCODING_FUNCTION): New macro. diff --git a/gdb/elfread.c b/gdb/elfread.c index b9cfa136fe4..29081c4f986 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -1375,7 +1375,12 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags) if (dwarf2_has_info (objfile)) { - if (dwarf2_initialize_objfile (objfile)) + /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF debug + information present in OBJFILE. If there is such debug info present + never use .gdb_index. */ + + if (!objfile_has_partial_symbols (objfile) + && dwarf2_initialize_objfile (objfile)) objfile->sf = &elf_sym_fns_gdb_index; else { diff --git a/gdb/objfiles.c b/gdb/objfiles.c index f3259dd6b02..7b0c450ccb2 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -909,11 +909,15 @@ objfile_has_partial_symbols (struct objfile *objfile) { if (!objfile->sf) return 0; - /* If we have not read psymbols, but we have a function capable of - reading them, then that is an indication that they are in fact - available. */ - if ((objfile->flags & OBJF_PSYMTABS_READ) == 0) - return objfile->sf->sym_read_psymbols != NULL; + + /* If we have not read psymbols, but we have a function capable of reading + them, then that is an indication that they are in fact available. Without + this function the symbols may have been already read in but they also may + not be present in this objfile. */ + if ((objfile->flags & OBJF_PSYMTABS_READ) == 0 + && objfile->sf->sym_read_psymbols != NULL) + return 1; + return objfile->sf->qf->has_symbols (objfile); } diff --git a/gdb/symfile.h b/gdb/symfile.h index 19e3fd5cbf0..dad032031bb 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -320,10 +320,10 @@ struct sym_fns void (*sym_read) (struct objfile *, int); - /* Read the partial symbols for an objfile. This may be NULL, in - which case gdb assumes that sym_read already read the partial - symbols. This may only be non-NULL if the objfile actually does - have debuginfo available. */ + /* Read the partial symbols for an objfile. This may be NULL, in which case + gdb has to check other ways if this objfile has any symbols. This may + only be non-NULL if the objfile actually does have debuginfo available. + */ void (*sym_read_psymbols) (struct objfile *); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c0911007cd6..32615f6b6fd 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-04-25 Jan Kratochvil + + * gdb.base/gdbindex-stabs-dwarf.c: New file. + * gdb.base/gdbindex-stabs.c: New file. + * gdb.base/gdbindex-stabs.exp: New file. + 2011-04-20 Jan Kratochvil * gdb.cp/cpcompletion.exp (complete class methods)