From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26586 invoked by alias); 23 Apr 2011 05:15:52 -0000 Received: (qmail 26569 invoked by uid 22791); 23 Apr 2011 05:15:50 -0000 X-SWARE-Spam-Status: No, hits=-5.5 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,TW_BJ,TW_FN,TW_GD,TW_YM,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 23 Apr 2011 05:15:28 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p3N5FSM3019301 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 23 Apr 2011 01:15:28 -0400 Received: from host1.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p3N5FQwV019266 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 23 Apr 2011 01:15:27 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p3N5FQTe012345; Sat, 23 Apr 2011 07:15:26 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p3N5FPKd012344; Sat, 23 Apr 2011 07:15:25 +0200 Date: Sat, 23 Apr 2011 05:15:00 -0000 From: Jan Kratochvil To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [patch+7.3] gdbindex regression: stabs forgotten Message-ID: <20110423051525.GB6190@host1.jankratochvil.net> References: <20110409152300.GA13143@host1.jankratochvil.net> <20110417163126.GA23189@host1.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-04/txt/msg00421.txt.bz2 On Mon, 18 Apr 2011 19:31:21 +0200, Tom Tromey wrote: > >>>>> "Jan" == Jan Kratochvil writes: > Jan> /* If we have not read psymbols, but we have a function capable of > Jan> reading them, then that is an indication that they are in fact > Jan> available. */ > Jan> - if ((objfile->flags & OBJF_PSYMTABS_READ) == 0) > Jan> - return objfile->sf->sym_read_psymbols != NULL; > Jan> + if ((objfile->flags & OBJF_PSYMTABS_READ) == 0 > Jan> + && objfile->sf->sym_read_psymbols != NULL) > Jan> + return 1; > > I think this change requires an update to the comment and also maybe to > the corresponding comment in symfile.h. ISTM the current code matches the comment better. Updated incl. symfile.h. Thanks, Jan gdb/ 2011-04-23 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. gdb/testsuite/ 2011-04-17 Jan Kratochvil * gdb.base/gdbindex-stabs-dwarf.c: New file. * gdb.base/gdbindex-stabs.c: New file. * gdb.base/gdbindex-stabs.exp: New file. --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -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 { --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -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); } --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -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 *); --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbindex-stabs-dwarf.c @@ -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 . */ + +extern void stabs_function (void); + +int +main (void) +{ + stabs_function (); + return 0; +} --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbindex-stabs.c @@ -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 . */ + +void +stabs_function (void) /* marker-here */ +{ +} --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbindex-stabs.exp @@ -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 . + +# 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 .*"