PR symtab/19914 fix handling of dwp + split debug

PR symtab/19914
	* dwarf2read.c (open_and_init_dwp_file): Look at backlink if objfile
	is separate debug file.

	testsuite/
	* gdb.dwarf2/dwp-sepdebug.c: New file.
	* gdb.dwarf2/dwp-sepdebug.exp: New file.
This commit is contained in:
Doug Evans 2016-05-03 16:30:58 -07:00
parent a1ec3d244a
commit 6c4474237a
5 changed files with 93 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2016-05-03 Yunlian Jiang <yunlian@google.com>
Doug Evans <dje@google.com>
PR symtab/19914
* dwarf2read.c (open_and_init_dwp_file): Look at backlink if objfile
is separate debug file.
2016-05-03 Don Breazeal <donb@codesourcery.com>
* serial.h (gdb_pipe): Fix argument names in comment.

View File

@ -10838,12 +10838,26 @@ open_and_init_dwp_file (void)
struct dwp_file *dwp_file;
char *dwp_name;
bfd *dbfd;
struct cleanup *cleanups;
struct cleanup *cleanups = make_cleanup (null_cleanup, 0);
/* Try to find first .dwp for the binary file before any symbolic links
resolving. */
dwp_name = xstrprintf ("%s.dwp", objfile->original_name);
cleanups = make_cleanup (xfree, dwp_name);
/* If the objfile is a debug file, find the name of the real binary
file and get the name of dwp file from there. */
if (objfile->separate_debug_objfile_backlink != NULL)
{
struct objfile *backlink = objfile->separate_debug_objfile_backlink;
const char *backlink_basename = lbasename (backlink->original_name);
char *debug_dirname = ldirname (objfile->original_name);
make_cleanup (xfree, debug_dirname);
dwp_name = xstrprintf ("%s%s%s.dwp", debug_dirname,
SLASH_STRING, backlink_basename);
}
else
dwp_name = xstrprintf ("%s.dwp", objfile->original_name);
make_cleanup (xfree, dwp_name);
dbfd = open_dwp_file (dwp_name);
if (dbfd == NULL

View File

@ -1,3 +1,10 @@
2016-05-03 Yunlian Jiang <yunlian@google.com>
Doug Evans <dje@google.com>
PR symtab/19914
* gdb.dwarf2/dwp-sepdebug.c: New file.
* gdb.dwarf2/dwp-sepdebug.exp: New file.
2016-05-02 Simon Marchi <simon.marchi@ericsson.com>
* gdb.base/detach.exp: Remove is_remote check.

View File

@ -0,0 +1,22 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2016 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/>. */
int
main (int argc, char **argv)
{
return 0;
}

View File

@ -0,0 +1,40 @@
# Copyright 2016 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/>.
standard_testfile
if { [build_executable ${testfile}.exp ${testfile} ${srcfile}] == -1 } {
return -1
}
if ![remote_file host exists [standard_output_file ${testfile}.dwp]] {
unsupported "testsuite run does not produce dwp files"
return 0
}
# Note: the procedure gdb_gnu_strip_debug will produce an executable called
# ${binfile}, which is just like the executable ($binfile) but without
# the debuginfo. Instead $binfile has a .gnu_debuglink section which contains
# the name of a debuginfo only file. This file will be stored in the
# gdb.base/ subdirectory.
if [gdb_gnu_strip_debug $binfile$EXEEXT] {
# check that you have a recent version of strip and objcopy installed
unsupported "cannot produce separate debug info files"
return -1
}
clean_restart "$testfile"
gdb_test "ptype main" {type = int \(int, char \*\*\)}