diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f4f5b54b7f..87575c8061 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2019-06-14 Tom Tromey + + * source.c (find_and_open_source): Respect basenames_may_differ. + 2019-06-14 Andrew Burgess * annotate.c (annotate_breakpoints_invalid): Make use of diff --git a/gdb/source.c b/gdb/source.c index 00052e67cb..02df15a1ae 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -987,7 +987,10 @@ find_and_open_source (const char *filename, result = gdb_open_cloexec (fullname->get (), OPEN_MODE, 0); if (result >= 0) { - *fullname = gdb_realpath (fullname->get ()); + if (basenames_may_differ) + *fullname = gdb_realpath (fullname->get ()); + else + *fullname = gdb_abspath (fullname->get ()); return scoped_fd (result); } @@ -1031,15 +1034,16 @@ find_and_open_source (const char *filename, if (rewritten_filename != NULL) filename = rewritten_filename.get (); - result = openp (path, OPF_SEARCH_IN_PATH | OPF_RETURN_REALPATH, filename, - OPEN_MODE, fullname); + openp_flags flags = OPF_SEARCH_IN_PATH; + if (basenames_may_differ) + flags |= OPF_RETURN_REALPATH; + result = openp (path, flags, filename, OPEN_MODE, fullname); if (result < 0) { /* Didn't work. Try using just the basename. */ p = lbasename (filename); if (p != filename) - result = openp (path, OPF_SEARCH_IN_PATH | OPF_RETURN_REALPATH, p, - OPEN_MODE, fullname); + result = openp (path, flags, p, OPEN_MODE, fullname); } return scoped_fd (result); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8219486242..4d89669264 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-06-14 Tom Tromey + + * gdb.base/annotate-symlink.exp: New file. + 2019-06-14 Tom Tromey * gdb.ada/set_wstr.exp: Add reassignment test. diff --git a/gdb/testsuite/gdb.base/annotate-symlink.exp b/gdb/testsuite/gdb.base/annotate-symlink.exp new file mode 100644 index 0000000000..6dba2fe823 --- /dev/null +++ b/gdb/testsuite/gdb.base/annotate-symlink.exp @@ -0,0 +1,51 @@ +# Copyright (C) 2019 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 realname-expand.c realname-expand-real.c + +if [is_remote host] { + unsupported "compiling on a remote host does not support a filename with directory." + return 0 +} + +set srcdirabs [file join [pwd] $srcdir] +set srcfilelink [standard_output_file realname-expand-link.c] + +remote_exec build "ln -sf ${srcdirabs}/${subdir}/${srcfile2} $srcfilelink" + +if { [file type $srcfilelink] != "link" } { + unsupported "target directory cannot have symbolic links" + return -1 +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcfilelink}" "${binfile}" \ + executable {debug}] != "" } { + untested "failed to compile" + return -1 +} + +clean_restart ${testfile} + +if {![runto_main]} { + unsupported "failed to run to main" + return -1 +} + +gdb_breakpoint func message + +gdb_test_no_output "set annotate 1" + +gdb_test "continue" \ + "Breakpoint .* func .*realname-expand-link.c:$decimal\r\n\032\032.*realname-expand-link.c:.*"