aboutsummaryrefslogtreecommitdiff
path: root/gdb/source.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2019-05-30 10:59:03 -0600
committerTom Tromey <tromey@adacore.com>2019-06-14 08:34:24 -0600
commita0c1ffedcf1988bc13fc5b6d57d3b74a17b60299 (patch)
treeb015514266cd1c0d63e1140d72d146a2d19ab55f /gdb/source.c
parent7c39e397aafaea64812f2611b061bdd50f30dce4 (diff)
downloadgdb-a0c1ffedcf1988bc13fc5b6d57d3b74a17b60299.zip
gdb-a0c1ffedcf1988bc13fc5b6d57d3b74a17b60299.tar.gz
gdb-a0c1ffedcf1988bc13fc5b6d57d3b74a17b60299.tar.bz2
Only compute realpath when basenames_may_differ is set
A user noted that, when sources are symlinked, gdb annotations will print the real path, rather than the name of the symlink. It seems to me that it is better to print the name of the file that was actually used in the build, unless there is some reason not to. This patch implements this, with the caveat that it will not work when basenames-may-differ is enabled. The way this mode is currently implemented, returning the symbolic (not real) path is not possible. While I think it would be good to redo the source file name cache and perhaps integrate it with class source_cache, I haven't done so here. Regression tested on x86-64 Fedora 29. gdb/ChangeLog 2019-06-14 Tom Tromey <tromey@adacore.com> * source.c (find_and_open_source): Respect basenames_may_differ. gdb/testsuite/ChangeLog 2019-06-14 Tom Tromey <tromey@adacore.com> * gdb.base/annotate-symlink.exp: New file.
Diffstat (limited to 'gdb/source.c')
-rw-r--r--gdb/source.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gdb/source.c b/gdb/source.c
index 00052e6..02df15a 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);