From 82bf32bc61ee1f2652fa848fe37b4e18429661c5 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 24 Sep 2013 14:03:43 +0000 Subject: [PATCH] Support .dwp with the name of symlinked binary file gdb/ 2013-09-24 Jan Kratochvil * dwarf2read.c (open_and_init_dwp_file): Try open_dwp_file also with objfile->original_name. gdb/testsuite/ 2013-09-24 Jan Kratochvil * gdb.dwarf2/dwp-symlink.c: New file. * gdb.dwarf2/dwp-symlink.exp: New file. --- gdb/ChangeLog | 5 ++ gdb/dwarf2read.c | 13 +++- gdb/testsuite/ChangeLog | 5 ++ gdb/testsuite/gdb.dwarf2/dwp-symlink.c | 22 +++++++ gdb/testsuite/gdb.dwarf2/dwp-symlink.exp | 77 ++++++++++++++++++++++++ 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 gdb/testsuite/gdb.dwarf2/dwp-symlink.c create mode 100644 gdb/testsuite/gdb.dwarf2/dwp-symlink.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 87bd03074c3..872baeda1e9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2013-09-24 Jan Kratochvil + + * dwarf2read.c (open_and_init_dwp_file): Try open_dwp_file also with + objfile->original_name. + 2013-09-24 Jan Kratochvil Pass down original filename for objfile. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index fc57db16ddc..14d9a32a007 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9648,10 +9648,21 @@ open_and_init_dwp_file (void) bfd *dbfd; struct cleanup *cleanups; - dwp_name = xstrprintf ("%s.dwp", objfile_name (dwarf2_per_objfile->objfile)); + /* 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); dbfd = open_dwp_file (dwp_name); + if (dbfd == NULL + && strcmp (objfile->original_name, objfile_name (objfile)) != 0) + { + /* Try to find .dwp for the binary file after gdb_realpath resolving. */ + dwp_name = xstrprintf ("%s.dwp", objfile_name (objfile)); + make_cleanup (xfree, dwp_name); + dbfd = open_dwp_file (dwp_name); + } + if (dbfd == NULL) { if (dwarf2_read_debug) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7f91ee81cbd..86fedd0a617 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-24 Jan Kratochvil + + * gdb.dwarf2/dwp-symlink.c: New file. + * gdb.dwarf2/dwp-symlink.exp: New file. + 2013-09-20 Doug Evans * lib/dwarf.exp (build_executable_from_fission_assembler): New proc. diff --git a/gdb/testsuite/gdb.dwarf2/dwp-symlink.c b/gdb/testsuite/gdb.dwarf2/dwp-symlink.c new file mode 100644 index 00000000000..5be12fb6c5e --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dwp-symlink.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2013 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 . */ + +int +main (int argc, char **argv) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp b/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp new file mode 100644 index 00000000000..ad0522b4839 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dwp-symlink.exp @@ -0,0 +1,77 @@ +# Copyright 2013 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 . + +standard_testfile + +if [is_remote host] { + untested "remote host" + return 0 +} + +file delete [standard_output_file ${testfile}.dwp] +if [file exists [standard_output_file ${testfile}.dwp]] { + unsupported "dwp file cannot be deleted" + return 0 +} +if { [build_executable ${testfile}.exp ${testfile} ${srcfile}] == -1 } { + return -1 +} +if ![file exists [standard_output_file ${testfile}.dwp]] { + unsupported "testsuite run does not produce dwp files" + return 0 +} + +set thelink "${testfile}-thelink" + +file delete [standard_output_file ${thelink}] +file delete [standard_output_file ${thelink}.dwp] +# file link is only Tcl 8.4+. +exec "ln" "-sf" "${testfile}" "[standard_output_file $thelink]" +if ![file exists [standard_output_file $thelink]] { + unsupported "host does not support symbolic links (binary symlink is missing)" + return 0 +} +if [file exists [standard_output_file $thelink.dwp]] { + unsupported "host does not support symbolic links (we tried to delete a file and it is still there)" + return 0 +} + +clean_restart "$testfile" + +gdb_test "ptype main" {type = int \(int, char \*\*\)} "binary default, dwp default" + +clean_restart "$thelink" + +gdb_test "ptype main" {type = int \(int, char \*\*\)} "binary symlink, dwp default" + +gdb_exit +file rename [standard_output_file ${testfile}.dwp] [standard_output_file ${thelink}.dwp] +if [file exists [standard_output_file ${testfile}.dwp]] { + unsupported "host does not support symbolic links (binary symlink exists)" + return 0 +} +if ![file exists [standard_output_file ${thelink}.dwp]] { + unsupported "host does not support symbolic links (dwp symlink is missing)" + return 0 +} + +clean_restart "$testfile" + +# This case cannot work. +gdb_test "ptype main" {type = int \(\)} "binary default, dwp at symlink" + +clean_restart "$thelink" + +gdb_test "ptype main" {type = int \(int, char \*\*\)} "binary symlink, dwp at symlink" -- 2.30.2