This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC] Fix source path lookup immediately after substitute-path


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 ();
 }
 
 
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. */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]