* 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.
This commit is contained in:
Jan Kratochvil 2011-04-25 19:38:16 +00:00
parent 1ae0d051e5
commit 3e03848b6c
8 changed files with 115 additions and 10 deletions

View File

@ -1,3 +1,11 @@
2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* 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-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* defs.h (ENUM_BITFIELD): Remove.

View File

@ -1396,7 +1396,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
{

View File

@ -906,11 +906,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);
}

View File

@ -321,10 +321,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 *);

View File

@ -1,3 +1,9 @@
2011-04-25 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/gdbindex-stabs-dwarf.c: New file.
* gdb.base/gdbindex-stabs.c: New file.
* gdb.base/gdbindex-stabs.exp: New file.
2011-04-25 Yao Qi <yao@codesourcery.com>
* gdb.dwarf2/dw2-double-set-die-type.S: Replace comment char `#'

View File

@ -0,0 +1,25 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
extern void stabs_function (void);
int
main (void)
{
stabs_function ();
return 0;
}

View File

@ -0,0 +1,21 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
void
stabs_function (void) /* marker-here */
{
}

View File

@ -0,0 +1,36 @@
# Copyright (C) 2011 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# This problem is reproducible only when using `gdb/cc-with-index.sh'.
set testfile gdbindex-stabs
set executable ${testfile}
set binfile ${objdir}/${subdir}/${executable}
set srcfile_stabs ${testfile}.c
set srcfile_dwarf ${testfile}-dwarf.c
set objfile_stabs ${testfile}.o
set objfile_dwarf ${testfile}-dwarf.o
if {[gdb_compile "${srcdir}/${subdir}/${srcfile_stabs}" ${objfile_stabs} object {additional_flags=-gstabs}] != ""
|| [gdb_compile "${srcdir}/${subdir}/${srcfile_dwarf}" ${objfile_dwarf} object {additional_flags=-gdwarf-2}] != ""
|| [gdb_compile "${objfile_stabs} ${objfile_dwarf}" ${binfile} executable {nodebug}] != ""} {
untested ${testfile}.exp
return -1
}
clean_restart ${executable}
# FAIL was: No line number known for stabs_function.
gdb_test "list stabs_function" " marker-here .*"