From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16695 invoked by alias); 17 Apr 2011 16:32:00 -0000 Received: (qmail 16683 invoked by uid 22791); 17 Apr 2011 16:31:59 -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; Sun, 17 Apr 2011 16:31:31 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p3HGVTYX003725 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 17 Apr 2011 12:31:31 -0400 Received: from host1.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id p3HGVR1J019871 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 17 Apr 2011 12:31:29 -0400 Received: from host1.jankratochvil.net (localhost [127.0.0.1]) by host1.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p3HGVREM026734; Sun, 17 Apr 2011 18:31:27 +0200 Received: (from jkratoch@localhost) by host1.jankratochvil.net (8.14.4/8.14.4/Submit) id p3HGVQ76026733; Sun, 17 Apr 2011 18:31:26 +0200 Date: Sun, 17 Apr 2011 16:32:00 -0000 From: Jan Kratochvil To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: [patch+7.3] gdbindex regression: stabs forgotten [Fix crash of gdb save-index on a STABS file] Message-ID: <20110417163126.GA23189@host1.jankratochvil.net> References: <20110409152300.GA13143@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/msg00265.txt.bz2 On Thu, 14 Apr 2011 22:44:28 +0200, Tom Tromey wrote: > >>>>> "Jan" == Jan Kratochvil writes: > > Jan> There are some concerns what is a file uses both DWARF and STABS, > Jan> it may possibly currently have a regression with .gdb_index. But > Jan> that is unrelated to this patch. > > I think it should all work. At least, I designed it to. [...] > On the reader side, the code in elfread.c is written to read STABS > first -- and skip using the index if any are found. This handles the > problem that an objfile can only have one set of quick functions. I do not see it implemented. This is a regression. No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu and with cc-with-index.sh (where it turns FAIL->PASS). Thanks, Jan gdb/ 2011-04-17 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. 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 @@ -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 { --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -909,8 +909,9 @@ objfile_has_partial_symbols (struct objfile *objfile) /* 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 ((objfile->flags & OBJF_PSYMTABS_READ) == 0 + && objfile->sf->sym_read_psymbols != NULL) + return 1; return objfile->sf->qf->has_symbols (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 .*"