From: Daniel Jacobowitz <drow@false.org>
To: gdb-patches@sourceware.org
Subject: [RFC] Fix source path lookup immediately after substitute-path
Date: Tue, 22 Sep 2009 19:06:00 -0000 [thread overview]
Message-ID: <20090922190632.GA31949@caradoc.them.org> (raw)
I've been frustrated several times by this routine. For the test I
compiled 'main.c' to 'main', then moved main.c into another directory.
+list main
1 main.c: No such file or directory.
in main.c
All is well so far.
+set substitute-path /scratch/dan/eabi44 /scratch/dan/eabi44/backup
+list main
1 in main.c
Where's my file? Maybe if I prod GDB it'll look again.
+dir
+list main
1 in main.c
Nope! Still can't find it!
+dir /no
Warning: /no: No such file or directory.
+list main
1 int main(){}
I discovered, by reading the source, that "dir" with a directory or
listing another source file would do the trick. There are two
different functions to invalidate cached source directory locations.
Some places call one but not the other; some call both; some
("set substitute-path" for instance) call neither. This patch
combines the two functions and makes them be reliably called.
I spent a little while trying to write a portable test case for this
and eventually gave up.
Any thoughts on this patch? May I include it in 7.0?
--
Daniel Jacobowitz
CodeSourcery
2009-09-22 Daniel Jacobowitz <dan@codesourcery.com>
gdb/
* source.c (forget_cached_source_info): Clear last_source_visited.
(init_last_source_visited): Delete.
(directory_command): Do not clear last_source_visited. Call
forget_cached_source_info only if required.
(unset_substitute_path_command, set_substitute_path_command): Call
forget_cached_source_info.
* mi/mi-cmd-env.c (mi_cmd_env_dir): Do not call
init_last_source_visited.
* defs.h (init_last_source_visited): Delete declaration.
Index: source.c
===================================================================
--- source.c (revision 262056)
+++ source.c (working copy)
@@ -345,6 +345,8 @@ forget_cached_source_info (void)
}
}
}
+
+ last_source_visited = NULL;
}
void
@@ -357,12 +359,6 @@ init_source_path (void)
forget_cached_source_info ();
}
-void
-init_last_source_visited (void)
-{
- last_source_visited = NULL;
-}
-
/* Add zero or more directories to the front of the source path. */
void
@@ -381,11 +377,10 @@ directory_command (char *dirname, int fr
else
{
mod_path (dirname, &source_path);
- last_source_visited = NULL;
+ forget_cached_source_info ();
}
if (from_tty)
show_directories ((char *) 0, from_tty);
- forget_cached_source_info ();
}
/* Add a path given with the -d command line switch.
@@ -1884,6 +1879,8 @@ unset_substitute_path_command (char *arg
if (from != NULL && !rule_found)
error (_("No substitution rule defined for `%s'"), from);
+
+ forget_cached_source_info ();
}
/* Add a new source path substitution rule. */
@@ -1922,6 +1919,7 @@ set_substitute_path_command (char *args,
/* Insert the new substitution rule. */
add_substitute_path_rule (argv[0], argv[1]);
+ forget_cached_source_info ();
}
\f
Index: mi/mi-cmd-env.c
===================================================================
--- mi/mi-cmd-env.c (revision 262056)
+++ mi/mi-cmd-env.c (working copy)
@@ -232,7 +232,6 @@ mi_cmd_env_dir (char *command, char **ar
for (i = argc - 1; i >= 0; --i)
env_mod_path (argv[i], &source_path);
- init_last_source_visited ();
ui_out_field_string (uiout, "source-path", source_path);
forget_cached_source_info ();
Index: defs.h
===================================================================
--- defs.h (revision 262056)
+++ defs.h (working copy)
@@ -636,8 +636,6 @@ extern char *source_path;
extern void init_source_path (void);
-extern void init_last_source_visited (void);
-
/* From exec.c */
/* Take over the 'find_mapped_memory' vector from exec.c. */
next reply other threads:[~2009-09-22 19:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-22 19:06 Daniel Jacobowitz [this message]
2009-09-22 21:21 ` Joel Brobecker
2009-09-22 21:45 ` Daniel Jacobowitz
2009-09-22 22:03 ` Joel Brobecker
2009-09-22 22:12 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090922190632.GA31949@caradoc.them.org \
--to=drow@false.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox