* gdbtypes.c (check_typedef): Document that this function can
[platform/upstream/binutils.git] / gdb / source.c
1 /* List lines of source files for GDB, the GNU debugger.
2    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
4    2009, 2010, 2011 Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 #include "defs.h"
22 #include "arch-utils.h"
23 #include "symtab.h"
24 #include "expression.h"
25 #include "language.h"
26 #include "command.h"
27 #include "source.h"
28 #include "gdbcmd.h"
29 #include "frame.h"
30 #include "value.h"
31 #include "gdb_assert.h"
32
33 #include <sys/types.h>
34 #include "gdb_string.h"
35 #include "gdb_stat.h"
36 #include <fcntl.h>
37 #include "gdbcore.h"
38 #include "gdb_regex.h"
39 #include "symfile.h"
40 #include "objfiles.h"
41 #include "annotate.h"
42 #include "gdbtypes.h"
43 #include "linespec.h"
44 #include "filenames.h"          /* for DOSish file names */
45 #include "completer.h"
46 #include "ui-out.h"
47 #include "readline/readline.h"
48
49 #include "psymtab.h"
50
51
52 #define OPEN_MODE (O_RDONLY | O_BINARY)
53 #define FDOPEN_MODE FOPEN_RB
54
55 /* Prototypes for exported functions.  */
56
57 void _initialize_source (void);
58
59 /* Prototypes for local functions.  */
60
61 static int get_filename_and_charpos (struct symtab *, char **);
62
63 static void reverse_search_command (char *, int);
64
65 static void forward_search_command (char *, int);
66
67 static void line_info (char *, int);
68
69 static void source_info (char *, int);
70
71 /* Path of directories to search for source files.
72    Same format as the PATH environment variable's value.  */
73
74 char *source_path;
75
76 /* Support for source path substitution commands.  */
77
78 struct substitute_path_rule
79 {
80   char *from;
81   char *to;
82   struct substitute_path_rule *next;
83 };
84
85 static struct substitute_path_rule *substitute_path_rules = NULL;
86
87 /* Symtab of default file for listing lines of.  */
88
89 static struct symtab *current_source_symtab;
90
91 /* Default next line to list.  */
92
93 static int current_source_line;
94
95 static struct program_space *current_source_pspace;
96
97 /* Default number of lines to print with commands like "list".
98    This is based on guessing how many long (i.e. more than chars_per_line
99    characters) lines there will be.  To be completely correct, "list"
100    and friends should be rewritten to count characters and see where
101    things are wrapping, but that would be a fair amount of work.  */
102
103 int lines_to_list = 10;
104 static void
105 show_lines_to_list (struct ui_file *file, int from_tty,
106                     struct cmd_list_element *c, const char *value)
107 {
108   fprintf_filtered (file,
109                     _("Number of source lines gdb "
110                       "will list by default is %s.\n"),
111                     value);
112 }
113
114 /* Line number of last line printed.  Default for various commands.
115    current_source_line is usually, but not always, the same as this.  */
116
117 static int last_line_listed;
118
119 /* First line number listed by last listing command.  */
120
121 static int first_line_listed;
122
123 /* Saves the name of the last source file visited and a possible error code.
124    Used to prevent repeating annoying "No such file or directories" msgs.  */
125
126 static struct symtab *last_source_visited = NULL;
127 static int last_source_error = 0;
128 \f
129 /* Return the first line listed by print_source_lines.
130    Used by command interpreters to request listing from
131    a previous point.  */
132
133 int
134 get_first_line_listed (void)
135 {
136   return first_line_listed;
137 }
138
139 /* Return the default number of lines to print with commands like the
140    cli "list".  The caller of print_source_lines must use this to
141    calculate the end line and use it in the call to print_source_lines
142    as it does not automatically use this value.  */
143
144 int
145 get_lines_to_list (void)
146 {
147   return lines_to_list;
148 }
149
150 /* Return the current source file for listing and next line to list.
151    NOTE: The returned sal pc and end fields are not valid.  */
152    
153 struct symtab_and_line
154 get_current_source_symtab_and_line (void)
155 {
156   struct symtab_and_line cursal = { 0 };
157
158   cursal.pspace = current_source_pspace;
159   cursal.symtab = current_source_symtab;
160   cursal.line = current_source_line;
161   cursal.pc = 0;
162   cursal.end = 0;
163   
164   return cursal;
165 }
166
167 /* If the current source file for listing is not set, try and get a default.
168    Usually called before get_current_source_symtab_and_line() is called.
169    It may err out if a default cannot be determined.
170    We must be cautious about where it is called, as it can recurse as the
171    process of determining a new default may call the caller!
172    Use get_current_source_symtab_and_line only to get whatever
173    we have without erroring out or trying to get a default.  */
174    
175 void
176 set_default_source_symtab_and_line (void)
177 {
178   if (!have_full_symbols () && !have_partial_symbols ())
179     error (_("No symbol table is loaded.  Use the \"file\" command."));
180
181   /* Pull in a current source symtab if necessary.  */
182   if (current_source_symtab == 0)
183     select_source_symtab (0);
184 }
185
186 /* Return the current default file for listing and next line to list
187    (the returned sal pc and end fields are not valid.)
188    and set the current default to whatever is in SAL.
189    NOTE: The returned sal pc and end fields are not valid.  */
190    
191 struct symtab_and_line
192 set_current_source_symtab_and_line (const struct symtab_and_line *sal)
193 {
194   struct symtab_and_line cursal = { 0 };
195
196   cursal.pspace = current_source_pspace;
197   cursal.symtab = current_source_symtab;
198   cursal.line = current_source_line;
199   cursal.pc = 0;
200   cursal.end = 0;
201
202   current_source_pspace = sal->pspace;
203   current_source_symtab = sal->symtab;
204   current_source_line = sal->line;
205
206   return cursal;
207 }
208
209 /* Reset any information stored about a default file and line to print.  */
210
211 void
212 clear_current_source_symtab_and_line (void)
213 {
214   current_source_symtab = 0;
215   current_source_line = 0;
216 }
217
218 /* Set the source file default for the "list" command to be S.
219
220    If S is NULL, and we don't have a default, find one.  This
221    should only be called when the user actually tries to use the
222    default, since we produce an error if we can't find a reasonable
223    default.  Also, since this can cause symbols to be read, doing it
224    before we need to would make things slower than necessary.  */
225
226 void
227 select_source_symtab (struct symtab *s)
228 {
229   struct symtabs_and_lines sals;
230   struct symtab_and_line sal;
231   struct objfile *ofp;
232
233   if (s)
234     {
235       current_source_symtab = s;
236       current_source_line = 1;
237       current_source_pspace = SYMTAB_PSPACE (s);
238       return;
239     }
240
241   if (current_source_symtab)
242     return;
243
244   /* Make the default place to list be the function `main'
245      if one exists.  */
246   if (lookup_symbol (main_name (), 0, VAR_DOMAIN, 0))
247     {
248       sals = decode_line_spec (main_name (), 1);
249       sal = sals.sals[0];
250       xfree (sals.sals);
251       current_source_pspace = sal.pspace;
252       current_source_symtab = sal.symtab;
253       current_source_line = max (sal.line - (lines_to_list - 1), 1);
254       if (current_source_symtab)
255         return;
256     }
257
258   /* Alright; find the last file in the symtab list (ignoring .h's
259      and namespace symtabs).  */
260
261   current_source_line = 1;
262
263   ALL_OBJFILES (ofp)
264     {
265       for (s = ofp->symtabs; s; s = s->next)
266         {
267           const char *name = s->filename;
268           int len = strlen (name);
269
270           if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
271               || strcmp (name, "<<C++-namespaces>>") == 0)))
272             {
273               current_source_pspace = current_program_space;
274               current_source_symtab = s;
275             }
276         }
277     }
278
279   if (current_source_symtab)
280     return;
281
282   ALL_OBJFILES (ofp)
283   {
284     if (ofp->sf)
285       s = ofp->sf->qf->find_last_source_symtab (ofp);
286     if (s)
287       current_source_symtab = s;
288   }
289   if (current_source_symtab)
290     return;
291
292   error (_("Can't find a default source file"));
293 }
294 \f
295 /* Handler for "set directories path-list" command.
296    "set dir mumble" doesn't prepend paths, it resets the entire
297    path list.  The theory is that set(show(dir)) should be a no-op.  */
298
299 static void
300 set_directories_command (char *args, int from_tty, struct cmd_list_element *c)
301 {
302   /* This is the value that was set.
303      It needs to be processed to maintain $cdir:$cwd and remove dups.  */
304   char *set_path = source_path;
305
306   /* We preserve the invariant that $cdir:$cwd begins life at the end of
307      the list by calling init_source_path.  If they appear earlier in
308      SET_PATH then mod_path will move them appropriately.
309      mod_path will also remove duplicates.  */
310   init_source_path ();
311   if (*set_path != '\0')
312     mod_path (set_path, &source_path);
313
314   xfree (set_path);
315 }
316
317 /* Print the list of source directories.
318    This is used by the "ld" command, so it has the signature of a command
319    function.  */
320
321 static void
322 show_directories_1 (char *ignore, int from_tty)
323 {
324   puts_filtered ("Source directories searched: ");
325   puts_filtered (source_path);
326   puts_filtered ("\n");
327 }
328
329 /* Handler for "show directories" command.  */
330
331 static void
332 show_directories_command (struct ui_file *file, int from_tty,
333                           struct cmd_list_element *c, const char *value)
334 {
335   show_directories_1 (NULL, from_tty);
336 }
337
338 /* Forget line positions and file names for the symtabs in a
339    particular objfile.  */
340
341 void
342 forget_cached_source_info_for_objfile (struct objfile *objfile)
343 {
344   struct symtab *s;
345
346   ALL_OBJFILE_SYMTABS (objfile, s)
347     {
348       if (s->line_charpos != NULL)
349         {
350           xfree (s->line_charpos);
351           s->line_charpos = NULL;
352         }
353       if (s->fullname != NULL)
354         {
355           xfree (s->fullname);
356           s->fullname = NULL;
357         }
358     }
359
360   if (objfile->sf)
361     objfile->sf->qf->forget_cached_source_info (objfile);
362 }
363
364 /* Forget what we learned about line positions in source files, and
365    which directories contain them; must check again now since files
366    may be found in a different directory now.  */
367
368 void
369 forget_cached_source_info (void)
370 {
371   struct program_space *pspace;
372   struct objfile *objfile;
373
374   ALL_PSPACES (pspace)
375     ALL_PSPACE_OBJFILES (pspace, objfile)
376     {
377       forget_cached_source_info_for_objfile (objfile);
378     }
379
380   last_source_visited = NULL;
381 }
382
383 void
384 init_source_path (void)
385 {
386   char buf[20];
387
388   sprintf (buf, "$cdir%c$cwd", DIRNAME_SEPARATOR);
389   source_path = xstrdup (buf);
390   forget_cached_source_info ();
391 }
392
393 /* Add zero or more directories to the front of the source path.  */
394
395 void
396 directory_command (char *dirname, int from_tty)
397 {
398   dont_repeat ();
399   /* FIXME, this goes to "delete dir"...  */
400   if (dirname == 0)
401     {
402       if (!from_tty || query (_("Reinitialize source path to empty? ")))
403         {
404           xfree (source_path);
405           init_source_path ();
406         }
407     }
408   else
409     {
410       mod_path (dirname, &source_path);
411       forget_cached_source_info ();
412     }
413   if (from_tty)
414     show_directories_1 ((char *) 0, from_tty);
415 }
416
417 /* Add a path given with the -d command line switch.
418    This will not be quoted so we must not treat spaces as separators.  */
419
420 void
421 directory_switch (char *dirname, int from_tty)
422 {
423   add_path (dirname, &source_path, 0);
424 }
425
426 /* Add zero or more directories to the front of an arbitrary path.  */
427
428 void
429 mod_path (char *dirname, char **which_path)
430 {
431   add_path (dirname, which_path, 1);
432 }
433
434 /* Workhorse of mod_path.  Takes an extra argument to determine
435    if dirname should be parsed for separators that indicate multiple
436    directories.  This allows for interfaces that pre-parse the dirname
437    and allow specification of traditional separator characters such
438    as space or tab.  */
439
440 void
441 add_path (char *dirname, char **which_path, int parse_separators)
442 {
443   char *old = *which_path;
444   int prefix = 0;
445   char **argv = NULL;
446   char *arg;
447   int argv_index = 0;
448
449   if (dirname == 0)
450     return;
451
452   if (parse_separators)
453     {
454       /* This will properly parse the space and tab separators
455          and any quotes that may exist.  DIRNAME_SEPARATOR will
456          be dealt with later.  */
457       argv = gdb_buildargv (dirname);
458       make_cleanup_freeargv (argv);
459
460       arg = argv[0];
461     }
462   else
463     {
464       arg = xstrdup (dirname);
465       make_cleanup (xfree, arg);
466     }
467
468   do
469     {
470       char *name = arg;
471       char *p;
472       struct stat st;
473
474       {
475         char *separator = NULL;
476
477         /* Spaces and tabs will have been removed by buildargv().
478            The directories will there be split into a list but
479            each entry may still contain DIRNAME_SEPARATOR.  */
480         if (parse_separators)
481           separator = strchr (name, DIRNAME_SEPARATOR);
482
483         if (separator == 0)
484           p = arg = name + strlen (name);
485         else
486           {
487             p = separator;
488             arg = p + 1;
489             while (*arg == DIRNAME_SEPARATOR)
490               ++arg;
491           }
492
493         /* If there are no more directories in this argument then start
494            on the next argument next time round the loop (if any).  */
495         if (*arg == '\0')
496           arg = parse_separators ? argv[++argv_index] : NULL;
497       }
498
499       /* name is the start of the directory.
500          p is the separator (or null) following the end.  */
501
502       while (!(IS_DIR_SEPARATOR (*name) && p <= name + 1)       /* "/" */
503 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
504       /* On MS-DOS and MS-Windows, h:\ is different from h: */
505              && !(p == name + 3 && name[1] == ':')              /* "d:/" */
506 #endif
507              && IS_DIR_SEPARATOR (p[-1]))
508         /* Sigh.  "foo/" => "foo" */
509         --p;
510       *p = '\0';
511
512       while (p > name && p[-1] == '.')
513         {
514           if (p - name == 1)
515             {
516               /* "." => getwd ().  */
517               name = current_directory;
518               goto append;
519             }
520           else if (p > name + 1 && IS_DIR_SEPARATOR (p[-2]))
521             {
522               if (p - name == 2)
523                 {
524                   /* "/." => "/".  */
525                   *--p = '\0';
526                   goto append;
527                 }
528               else
529                 {
530                   /* "...foo/." => "...foo".  */
531                   p -= 2;
532                   *p = '\0';
533                   continue;
534                 }
535             }
536           else
537             break;
538         }
539
540       if (name[0] == '~')
541         name = tilde_expand (name);
542 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
543       else if (IS_ABSOLUTE_PATH (name) && p == name + 2) /* "d:" => "d:." */
544         name = concat (name, ".", (char *)NULL);
545 #endif
546       else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$')
547         name = concat (current_directory, SLASH_STRING, name, (char *)NULL);
548       else
549         name = savestring (name, p - name);
550       make_cleanup (xfree, name);
551
552       /* Unless it's a variable, check existence.  */
553       if (name[0] != '$')
554         {
555           /* These are warnings, not errors, since we don't want a
556              non-existent directory in a .gdbinit file to stop processing
557              of the .gdbinit file.
558
559              Whether they get added to the path is more debatable.  Current
560              answer is yes, in case the user wants to go make the directory
561              or whatever.  If the directory continues to not exist/not be
562              a directory/etc, then having them in the path should be
563              harmless.  */
564           if (stat (name, &st) < 0)
565             {
566               int save_errno = errno;
567
568               fprintf_unfiltered (gdb_stderr, "Warning: ");
569               print_sys_errmsg (name, save_errno);
570             }
571           else if ((st.st_mode & S_IFMT) != S_IFDIR)
572             warning (_("%s is not a directory."), name);
573         }
574
575     append:
576       {
577         unsigned int len = strlen (name);
578
579         p = *which_path;
580         while (1)
581           {
582             /* FIXME: we should use realpath() or its work-alike
583                before comparing.  Then all the code above which
584                removes excess slashes and dots could simply go away.  */
585             if (!filename_ncmp (p, name, len)
586                 && (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR))
587               {
588                 /* Found it in the search path, remove old copy.  */
589                 if (p > *which_path)
590                   p--;          /* Back over leading separator.  */
591                 if (prefix > p - *which_path)
592                   goto skip_dup;        /* Same dir twice in one cmd.  */
593                 strcpy (p, &p[len + 1]);        /* Copy from next \0 or  : */
594               }
595             p = strchr (p, DIRNAME_SEPARATOR);
596             if (p != 0)
597               ++p;
598             else
599               break;
600           }
601         if (p == 0)
602           {
603             char tinybuf[2];
604
605             tinybuf[0] = DIRNAME_SEPARATOR;
606             tinybuf[1] = '\0';
607
608             /* If we have already tacked on a name(s) in this command,
609                be sure they stay on the front as we tack on some
610                more.  */
611             if (prefix)
612               {
613                 char *temp, c;
614
615                 c = old[prefix];
616                 old[prefix] = '\0';
617                 temp = concat (old, tinybuf, name, (char *)NULL);
618                 old[prefix] = c;
619                 *which_path = concat (temp, "", &old[prefix], (char *) NULL);
620                 prefix = strlen (temp);
621                 xfree (temp);
622               }
623             else
624               {
625                 *which_path = concat (name, (old[0] ? tinybuf : old),
626                                       old, (char *)NULL);
627                 prefix = strlen (name);
628               }
629             xfree (old);
630             old = *which_path;
631           }
632       }
633     skip_dup:
634       ;
635     }
636   while (arg != NULL);
637 }
638
639
640 static void
641 source_info (char *ignore, int from_tty)
642 {
643   struct symtab *s = current_source_symtab;
644
645   if (!s)
646     {
647       printf_filtered (_("No current source file.\n"));
648       return;
649     }
650   printf_filtered (_("Current source file is %s\n"), s->filename);
651   if (s->dirname)
652     printf_filtered (_("Compilation directory is %s\n"), s->dirname);
653   if (s->fullname)
654     printf_filtered (_("Located in %s\n"), s->fullname);
655   if (s->nlines)
656     printf_filtered (_("Contains %d line%s.\n"), s->nlines,
657                      s->nlines == 1 ? "" : "s");
658
659   printf_filtered (_("Source language is %s.\n"), language_str (s->language));
660   printf_filtered (_("Compiled with %s debugging format.\n"), s->debugformat);
661   printf_filtered (_("%s preprocessor macro info.\n"),
662                    s->macro_table ? "Includes" : "Does not include");
663 }
664 \f
665
666 /* Return True if the file NAME exists and is a regular file.  */
667 static int
668 is_regular_file (const char *name)
669 {
670   struct stat st;
671   const int status = stat (name, &st);
672
673   /* Stat should never fail except when the file does not exist.
674      If stat fails, analyze the source of error and return True
675      unless the file does not exist, to avoid returning false results
676      on obscure systems where stat does not work as expected.  */
677
678   if (status != 0)
679     return (errno != ENOENT);
680
681   return S_ISREG (st.st_mode);
682 }
683
684 /* Open a file named STRING, searching path PATH (dir names sep by some char)
685    using mode MODE in the calls to open.  You cannot use this function to
686    create files (O_CREAT).
687
688    OPTS specifies the function behaviour in specific cases.
689
690    If OPF_TRY_CWD_FIRST, try to open ./STRING before searching PATH.
691    (ie pretend the first element of PATH is ".").  This also indicates
692    that a slash in STRING disables searching of the path (this is
693    so that "exec-file ./foo" or "symbol-file ./foo" insures that you
694    get that particular version of foo or an error message).
695
696    If OPTS has OPF_SEARCH_IN_PATH set, absolute names will also be
697    searched in path (we usually want this for source files but not for
698    executables).
699
700    If FILENAME_OPENED is non-null, set it to a newly allocated string naming
701    the actual file opened (this string will always start with a "/").  We
702    have to take special pains to avoid doubling the "/" between the directory
703    and the file, sigh!  Emacs gets confuzzed by this when we print the
704    source file name!!! 
705
706    If a file is found, return the descriptor.
707    Otherwise, return -1, with errno set for the last name we tried to open.  */
708
709 /*  >>>> This should only allow files of certain types,
710     >>>>  eg executable, non-directory.  */
711 int
712 openp (const char *path, int opts, const char *string,
713        int mode, char **filename_opened)
714 {
715   int fd;
716   char *filename;
717   const char *p;
718   const char *p1;
719   int len;
720   int alloclen;
721
722   /* The open syscall MODE parameter is not specified.  */
723   gdb_assert ((mode & O_CREAT) == 0);
724   gdb_assert (string != NULL);
725
726   /* A file with an empty name cannot possibly exist.  Report a failure
727      without further checking.
728
729      This is an optimization which also defends us against buggy
730      implementations of the "stat" function.  For instance, we have
731      noticed that a MinGW debugger built on Windows XP 32bits crashes
732      when the debugger is started with an empty argument.  */
733   if (string[0] == '\0')
734     {
735       errno = ENOENT;
736       return -1;
737     }
738
739   if (!path)
740     path = ".";
741
742   mode |= O_BINARY;
743
744   if ((opts & OPF_TRY_CWD_FIRST) || IS_ABSOLUTE_PATH (string))
745     {
746       int i;
747
748       if (is_regular_file (string))
749         {
750           filename = alloca (strlen (string) + 1);
751           strcpy (filename, string);
752           fd = open (filename, mode);
753           if (fd >= 0)
754             goto done;
755         }
756       else
757         {
758           filename = NULL;
759           fd = -1;
760         }
761
762       if (!(opts & OPF_SEARCH_IN_PATH))
763         for (i = 0; string[i]; i++)
764           if (IS_DIR_SEPARATOR (string[i]))
765             goto done;
766     }
767
768   /* For dos paths, d:/foo -> /foo, and d:foo -> foo.  */
769   if (HAS_DRIVE_SPEC (string))
770     string = STRIP_DRIVE_SPEC (string);
771
772   /* /foo => foo, to avoid multiple slashes that Emacs doesn't like.  */
773   while (IS_DIR_SEPARATOR(string[0]))
774     string++;
775
776   /* ./foo => foo */
777   while (string[0] == '.' && IS_DIR_SEPARATOR (string[1]))
778     string += 2;
779
780   alloclen = strlen (path) + strlen (string) + 2;
781   filename = alloca (alloclen);
782   fd = -1;
783   for (p = path; p; p = p1 ? p1 + 1 : 0)
784     {
785       p1 = strchr (p, DIRNAME_SEPARATOR);
786       if (p1)
787         len = p1 - p;
788       else
789         len = strlen (p);
790
791       if (len == 4 && p[0] == '$' && p[1] == 'c'
792           && p[2] == 'w' && p[3] == 'd')
793         {
794           /* Name is $cwd -- insert current directory name instead.  */
795           int newlen;
796
797           /* First, realloc the filename buffer if too short.  */
798           len = strlen (current_directory);
799           newlen = len + strlen (string) + 2;
800           if (newlen > alloclen)
801             {
802               alloclen = newlen;
803               filename = alloca (alloclen);
804             }
805           strcpy (filename, current_directory);
806         }
807       else
808         {
809           /* Normal file name in path -- just use it.  */
810           strncpy (filename, p, len);
811           filename[len] = 0;
812
813           /* Don't search $cdir.  It's also a magic path like $cwd, but we
814              don't have enough information to expand it.  The user *could*
815              have an actual directory named '$cdir' but handling that would
816              be confusing, it would mean different things in different
817              contexts.  If the user really has '$cdir' one can use './$cdir'.
818              We can get $cdir when loading scripts.  When loading source files
819              $cdir must have already been expanded to the correct value.  */
820           if (strcmp (filename, "$cdir") == 0)
821             continue;
822         }
823
824       /* Remove trailing slashes.  */
825       while (len > 0 && IS_DIR_SEPARATOR (filename[len - 1]))
826         filename[--len] = 0;
827
828       strcat (filename + len, SLASH_STRING);
829       strcat (filename, string);
830
831       if (is_regular_file (filename))
832         {
833           fd = open (filename, mode);
834           if (fd >= 0)
835             break;
836         }
837     }
838
839 done:
840   if (filename_opened)
841     {
842       /* If a file was opened, canonicalize its filename.  Use xfullpath
843          rather than gdb_realpath to avoid resolving the basename part
844          of filenames when the associated file is a symbolic link.  This
845          fixes a potential inconsistency between the filenames known to
846          GDB and the filenames it prints in the annotations.  */
847       if (fd < 0)
848         *filename_opened = NULL;
849       else if (IS_ABSOLUTE_PATH (filename))
850         *filename_opened = xfullpath (filename);
851       else
852         {
853           /* Beware the // my son, the Emacs barfs, the botch that catch...  */
854
855           char *f = concat (current_directory,
856                             IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])
857                             ? "" : SLASH_STRING,
858                             filename, (char *)NULL);
859
860           *filename_opened = xfullpath (f);
861           xfree (f);
862         }
863     }
864
865   return fd;
866 }
867
868
869 /* This is essentially a convenience, for clients that want the behaviour
870    of openp, using source_path, but that really don't want the file to be
871    opened but want instead just to know what the full pathname is (as
872    qualified against source_path).
873
874    The current working directory is searched first.
875
876    If the file was found, this function returns 1, and FULL_PATHNAME is
877    set to the fully-qualified pathname.
878
879    Else, this functions returns 0, and FULL_PATHNAME is set to NULL.  */
880 int
881 source_full_path_of (const char *filename, char **full_pathname)
882 {
883   int fd;
884
885   fd = openp (source_path, OPF_TRY_CWD_FIRST | OPF_SEARCH_IN_PATH, filename,
886               O_RDONLY, full_pathname);
887   if (fd < 0)
888     {
889       *full_pathname = NULL;
890       return 0;
891     }
892
893   close (fd);
894   return 1;
895 }
896
897 /* Return non-zero if RULE matches PATH, that is if the rule can be
898    applied to PATH.  */
899
900 static int
901 substitute_path_rule_matches (const struct substitute_path_rule *rule,
902                               const char *path)
903 {
904   const int from_len = strlen (rule->from);
905   const int path_len = strlen (path);
906   char *path_start;
907
908   if (path_len < from_len)
909     return 0;
910
911   /* The substitution rules are anchored at the start of the path,
912      so the path should start with rule->from.  There is no filename
913      comparison routine, so we need to extract the first FROM_LEN
914      characters from PATH first and use that to do the comparison.  */
915
916   path_start = alloca (from_len + 1);
917   strncpy (path_start, path, from_len);
918   path_start[from_len] = '\0';
919
920   if (FILENAME_CMP (path_start, rule->from) != 0)
921     return 0;
922
923   /* Make sure that the region in the path that matches the substitution
924      rule is immediately followed by a directory separator (or the end of
925      string character).  */
926   
927   if (path[from_len] != '\0' && !IS_DIR_SEPARATOR (path[from_len]))
928     return 0;
929
930   return 1;
931 }
932
933 /* Find the substitute-path rule that applies to PATH and return it.
934    Return NULL if no rule applies.  */
935
936 static struct substitute_path_rule *
937 get_substitute_path_rule (const char *path)
938 {
939   struct substitute_path_rule *rule = substitute_path_rules;
940
941   while (rule != NULL && !substitute_path_rule_matches (rule, path))
942     rule = rule->next;
943
944   return rule;
945 }
946
947 /* If the user specified a source path substitution rule that applies
948    to PATH, then apply it and return the new path.  This new path must
949    be deallocated afterwards.
950    
951    Return NULL if no substitution rule was specified by the user,
952    or if no rule applied to the given PATH.  */
953    
954 static char *
955 rewrite_source_path (const char *path)
956 {
957   const struct substitute_path_rule *rule = get_substitute_path_rule (path);
958   char *new_path;
959   int from_len;
960   
961   if (rule == NULL)
962     return NULL;
963
964   from_len = strlen (rule->from);
965
966   /* Compute the rewritten path and return it.  */
967
968   new_path =
969     (char *) xmalloc (strlen (path) + 1 + strlen (rule->to) - from_len);
970   strcpy (new_path, rule->to);
971   strcat (new_path, path + from_len);
972
973   return new_path;
974 }
975
976 /* This function is capable of finding the absolute path to a
977    source file, and opening it, provided you give it a FILENAME.  Both the
978    DIRNAME and FULLNAME are only added suggestions on where to find the file.
979
980    FILENAME should be the filename to open.
981    DIRNAME is the compilation directory of a particular source file.
982            Only some debug formats provide this info.
983    FULLNAME can be the last known absolute path to the file in question.
984      Space for the path must have been malloc'd.  If a path substitution
985      is applied we free the old value and set a new one.
986
987    On Success 
988      A valid file descriptor is returned (the return value is positive).
989      FULLNAME is set to the absolute path to the file just opened.
990      The caller is responsible for freeing FULLNAME.
991
992    On Failure
993      An invalid file descriptor is returned (the return value is negative).
994      FULLNAME is set to NULL.  */
995
996 int
997 find_and_open_source (const char *filename,
998                       const char *dirname,
999                       char **fullname)
1000 {
1001   char *path = source_path;
1002   const char *p;
1003   int result;
1004
1005   /* Quick way out if we already know its full name.  */
1006
1007   if (*fullname)
1008     {
1009       /* The user may have requested that source paths be rewritten
1010          according to substitution rules he provided.  If a substitution
1011          rule applies to this path, then apply it.  */
1012       char *rewritten_fullname = rewrite_source_path (*fullname);
1013
1014       if (rewritten_fullname != NULL)
1015         {
1016           xfree (*fullname);
1017           *fullname = rewritten_fullname;
1018         }
1019
1020       result = open (*fullname, OPEN_MODE);
1021       if (result >= 0)
1022         return result;
1023       /* Didn't work -- free old one, try again.  */
1024       xfree (*fullname);
1025       *fullname = NULL;
1026     }
1027
1028   if (dirname != NULL)
1029     {
1030       /* If necessary, rewrite the compilation directory name according
1031          to the source path substitution rules specified by the user.  */
1032
1033       char *rewritten_dirname = rewrite_source_path (dirname);
1034
1035       if (rewritten_dirname != NULL)
1036         {
1037           make_cleanup (xfree, rewritten_dirname);
1038           dirname = rewritten_dirname;
1039         }
1040       
1041       /* Replace a path entry of $cdir with the compilation directory
1042          name.  */
1043 #define cdir_len        5
1044       /* We cast strstr's result in case an ANSIhole has made it const,
1045          which produces a "required warning" when assigned to a nonconst.  */
1046       p = (char *) strstr (source_path, "$cdir");
1047       if (p && (p == path || p[-1] == DIRNAME_SEPARATOR)
1048           && (p[cdir_len] == DIRNAME_SEPARATOR || p[cdir_len] == '\0'))
1049         {
1050           int len;
1051
1052           path = (char *)
1053             alloca (strlen (source_path) + 1 + strlen (dirname) + 1);
1054           len = p - source_path;
1055           strncpy (path, source_path, len);     /* Before $cdir */
1056           strcpy (path + len, dirname);         /* new stuff */
1057           strcat (path + len, source_path + len + cdir_len);    /* After
1058                                                                    $cdir */
1059         }
1060     }
1061
1062   if (IS_ABSOLUTE_PATH (filename))
1063     {
1064       /* If filename is absolute path, try the source path
1065          substitution on it.  */
1066       char *rewritten_filename = rewrite_source_path (filename);
1067
1068       if (rewritten_filename != NULL)
1069         {
1070           make_cleanup (xfree, rewritten_filename);
1071           filename = rewritten_filename;
1072         }
1073     }
1074
1075   result = openp (path, OPF_SEARCH_IN_PATH, filename, OPEN_MODE, fullname);
1076   if (result < 0)
1077     {
1078       /* Didn't work.  Try using just the basename.  */
1079       p = lbasename (filename);
1080       if (p != filename)
1081         result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, fullname);
1082     }
1083
1084   return result;
1085 }
1086
1087 /* Open a source file given a symtab S.  Returns a file descriptor or
1088    negative number for error.  
1089    
1090    This function is a convience function to find_and_open_source.  */
1091
1092 int
1093 open_source_file (struct symtab *s)
1094 {
1095   if (!s)
1096     return -1;
1097
1098   return find_and_open_source (s->filename, s->dirname, &s->fullname);
1099 }
1100
1101 /* Finds the fullname that a symtab represents.
1102
1103    If this functions finds the fullname, it will save it in s->fullname
1104    and it will also return the value.
1105
1106    If this function fails to find the file that this symtab represents,
1107    NULL will be returned and s->fullname will be set to NULL.  */
1108 char *
1109 symtab_to_fullname (struct symtab *s)
1110 {
1111   int r;
1112
1113   if (!s)
1114     return NULL;
1115
1116   /* Don't check s->fullname here, the file could have been 
1117      deleted/moved/..., look for it again.  */
1118   r = find_and_open_source (s->filename, s->dirname, &s->fullname);
1119
1120   if (r >= 0)
1121     {
1122       close (r);
1123       return s->fullname;
1124     }
1125
1126   return NULL;
1127 }
1128 \f
1129 /* Create and initialize the table S->line_charpos that records
1130    the positions of the lines in the source file, which is assumed
1131    to be open on descriptor DESC.
1132    All set S->nlines to the number of such lines.  */
1133
1134 void
1135 find_source_lines (struct symtab *s, int desc)
1136 {
1137   struct stat st;
1138   char *data, *p, *end;
1139   int nlines = 0;
1140   int lines_allocated = 1000;
1141   int *line_charpos;
1142   long mtime = 0;
1143   int size;
1144
1145   gdb_assert (s);
1146   line_charpos = (int *) xmalloc (lines_allocated * sizeof (int));
1147   if (fstat (desc, &st) < 0)
1148     perror_with_name (s->filename);
1149
1150   if (s->objfile && s->objfile->obfd)
1151     mtime = s->objfile->mtime;
1152   else if (exec_bfd)
1153     mtime = exec_bfd_mtime;
1154
1155   if (mtime && mtime < st.st_mtime)
1156     warning (_("Source file is more recent than executable."));
1157
1158   {
1159     struct cleanup *old_cleanups;
1160
1161     /* st_size might be a large type, but we only support source files whose 
1162        size fits in an int.  */
1163     size = (int) st.st_size;
1164
1165     /* Use malloc, not alloca, because this may be pretty large, and we may
1166        run into various kinds of limits on stack size.  */
1167     data = (char *) xmalloc (size);
1168     old_cleanups = make_cleanup (xfree, data);
1169
1170     /* Reassign `size' to result of read for systems where \r\n -> \n.  */
1171     size = myread (desc, data, size);
1172     if (size < 0)
1173       perror_with_name (s->filename);
1174     end = data + size;
1175     p = data;
1176     line_charpos[0] = 0;
1177     nlines = 1;
1178     while (p != end)
1179       {
1180         if (*p++ == '\n'
1181         /* A newline at the end does not start a new line.  */
1182             && p != end)
1183           {
1184             if (nlines == lines_allocated)
1185               {
1186                 lines_allocated *= 2;
1187                 line_charpos =
1188                   (int *) xrealloc ((char *) line_charpos,
1189                                     sizeof (int) * lines_allocated);
1190               }
1191             line_charpos[nlines++] = p - data;
1192           }
1193       }
1194     do_cleanups (old_cleanups);
1195   }
1196
1197   s->nlines = nlines;
1198   s->line_charpos =
1199     (int *) xrealloc ((char *) line_charpos, nlines * sizeof (int));
1200
1201 }
1202
1203 \f
1204
1205 /* Get full pathname and line number positions for a symtab.
1206    Return nonzero if line numbers may have changed.
1207    Set *FULLNAME to actual name of the file as found by `openp',
1208    or to 0 if the file is not found.  */
1209
1210 static int
1211 get_filename_and_charpos (struct symtab *s, char **fullname)
1212 {
1213   int desc, linenums_changed = 0;
1214   struct cleanup *cleanups;
1215
1216   desc = open_source_file (s);
1217   if (desc < 0)
1218     {
1219       if (fullname)
1220         *fullname = NULL;
1221       return 0;
1222     }
1223   cleanups = make_cleanup_close (desc);
1224   if (fullname)
1225     *fullname = s->fullname;
1226   if (s->line_charpos == 0)
1227     linenums_changed = 1;
1228   if (linenums_changed)
1229     find_source_lines (s, desc);
1230   do_cleanups (cleanups);
1231   return linenums_changed;
1232 }
1233
1234 /* Print text describing the full name of the source file S
1235    and the line number LINE and its corresponding character position.
1236    The text starts with two Ctrl-z so that the Emacs-GDB interface
1237    can easily find it.
1238
1239    MID_STATEMENT is nonzero if the PC is not at the beginning of that line.
1240
1241    Return 1 if successful, 0 if could not find the file.  */
1242
1243 int
1244 identify_source_line (struct symtab *s, int line, int mid_statement,
1245                       CORE_ADDR pc)
1246 {
1247   if (s->line_charpos == 0)
1248     get_filename_and_charpos (s, (char **) NULL);
1249   if (s->fullname == 0)
1250     return 0;
1251   if (line > s->nlines)
1252     /* Don't index off the end of the line_charpos array.  */
1253     return 0;
1254   annotate_source (s->fullname, line, s->line_charpos[line - 1],
1255                    mid_statement, get_objfile_arch (s->objfile), pc);
1256
1257   current_source_line = line;
1258   first_line_listed = line;
1259   last_line_listed = line;
1260   current_source_symtab = s;
1261   return 1;
1262 }
1263 \f
1264
1265 /* Print source lines from the file of symtab S,
1266    starting with line number LINE and stopping before line number STOPLINE.  */
1267
1268 static void print_source_lines_base (struct symtab *s, int line, int stopline,
1269                                      int noerror);
1270 static void
1271 print_source_lines_base (struct symtab *s, int line, int stopline, int noerror)
1272 {
1273   int c;
1274   int desc;
1275   int noprint = 0;
1276   FILE *stream;
1277   int nlines = stopline - line;
1278   struct cleanup *cleanup;
1279   struct ui_out *uiout = current_uiout;
1280
1281   /* Regardless of whether we can open the file, set current_source_symtab.  */
1282   current_source_symtab = s;
1283   current_source_line = line;
1284   first_line_listed = line;
1285
1286   /* If printing of source lines is disabled, just print file and line
1287      number.  */
1288   if (ui_out_test_flags (uiout, ui_source_list))
1289     {
1290       /* Only prints "No such file or directory" once.  */
1291       if ((s != last_source_visited) || (!last_source_error))
1292         {
1293           last_source_visited = s;
1294           desc = open_source_file (s);
1295         }
1296       else
1297         {
1298           desc = last_source_error;
1299           noerror = 1;
1300         }
1301     }
1302   else
1303     {
1304       desc = last_source_error;
1305       noerror = 1;
1306       noprint = 1;
1307     }
1308
1309   if (desc < 0 || noprint)
1310     {
1311       last_source_error = desc;
1312
1313       if (!noerror)
1314         {
1315           char *name = alloca (strlen (s->filename) + 100);
1316           sprintf (name, "%d\t%s", line, s->filename);
1317           print_sys_errmsg (name, errno);
1318         }
1319       else
1320         ui_out_field_int (uiout, "line", line);
1321       ui_out_text (uiout, "\tin ");
1322       ui_out_field_string (uiout, "file", s->filename);
1323       ui_out_text (uiout, "\n");
1324
1325       return;
1326     }
1327
1328   last_source_error = 0;
1329
1330   if (s->line_charpos == 0)
1331     find_source_lines (s, desc);
1332
1333   if (line < 1 || line > s->nlines)
1334     {
1335       close (desc);
1336       error (_("Line number %d out of range; %s has %d lines."),
1337              line, s->filename, s->nlines);
1338     }
1339
1340   if (lseek (desc, s->line_charpos[line - 1], 0) < 0)
1341     {
1342       close (desc);
1343       perror_with_name (s->filename);
1344     }
1345
1346   stream = fdopen (desc, FDOPEN_MODE);
1347   clearerr (stream);
1348   cleanup = make_cleanup_fclose (stream);
1349
1350   while (nlines-- > 0)
1351     {
1352       char buf[20];
1353
1354       c = fgetc (stream);
1355       if (c == EOF)
1356         break;
1357       last_line_listed = current_source_line;
1358       sprintf (buf, "%d\t", current_source_line++);
1359       ui_out_text (uiout, buf);
1360       do
1361         {
1362           if (c < 040 && c != '\t' && c != '\n' && c != '\r')
1363             {
1364               sprintf (buf, "^%c", c + 0100);
1365               ui_out_text (uiout, buf);
1366             }
1367           else if (c == 0177)
1368             ui_out_text (uiout, "^?");
1369           else if (c == '\r')
1370             {
1371               /* Skip a \r character, but only before a \n.  */
1372               int c1 = fgetc (stream);
1373
1374               if (c1 != '\n')
1375                 printf_filtered ("^%c", c + 0100);
1376               if (c1 != EOF)
1377                 ungetc (c1, stream);
1378             }
1379           else
1380             {
1381               sprintf (buf, "%c", c);
1382               ui_out_text (uiout, buf);
1383             }
1384         }
1385       while (c != '\n' && (c = fgetc (stream)) >= 0);
1386     }
1387
1388   do_cleanups (cleanup);
1389 }
1390 \f
1391 /* Show source lines from the file of symtab S, starting with line
1392    number LINE and stopping before line number STOPLINE.  If this is
1393    not the command line version, then the source is shown in the source
1394    window otherwise it is simply printed.  */
1395
1396 void
1397 print_source_lines (struct symtab *s, int line, int stopline, int noerror)
1398 {
1399   print_source_lines_base (s, line, stopline, noerror);
1400 }
1401 \f
1402 /* Print info on range of pc's in a specified line.  */
1403
1404 static void
1405 line_info (char *arg, int from_tty)
1406 {
1407   struct symtabs_and_lines sals;
1408   struct symtab_and_line sal;
1409   CORE_ADDR start_pc, end_pc;
1410   int i;
1411
1412   init_sal (&sal);              /* initialize to zeroes */
1413
1414   if (arg == 0)
1415     {
1416       sal.symtab = current_source_symtab;
1417       sal.line = last_line_listed;
1418       sals.nelts = 1;
1419       sals.sals = (struct symtab_and_line *)
1420         xmalloc (sizeof (struct symtab_and_line));
1421       sals.sals[0] = sal;
1422     }
1423   else
1424     {
1425       sals = decode_line_spec_1 (arg, 0);
1426
1427       dont_repeat ();
1428     }
1429
1430   /* C++  More than one line may have been specified, as when the user
1431      specifies an overloaded function name.  Print info on them all.  */
1432   for (i = 0; i < sals.nelts; i++)
1433     {
1434       sal = sals.sals[i];
1435
1436       if (sal.symtab == 0)
1437         {
1438           struct gdbarch *gdbarch = get_current_arch ();
1439
1440           printf_filtered (_("No line number information available"));
1441           if (sal.pc != 0)
1442             {
1443               /* This is useful for "info line *0x7f34".  If we can't tell the
1444                  user about a source line, at least let them have the symbolic
1445                  address.  */
1446               printf_filtered (" for address ");
1447               wrap_here ("  ");
1448               print_address (gdbarch, sal.pc, gdb_stdout);
1449             }
1450           else
1451             printf_filtered (".");
1452           printf_filtered ("\n");
1453         }
1454       else if (sal.line > 0
1455                && find_line_pc_range (sal, &start_pc, &end_pc))
1456         {
1457           struct gdbarch *gdbarch = get_objfile_arch (sal.symtab->objfile);
1458
1459           if (start_pc == end_pc)
1460             {
1461               printf_filtered ("Line %d of \"%s\"",
1462                                sal.line, sal.symtab->filename);
1463               wrap_here ("  ");
1464               printf_filtered (" is at address ");
1465               print_address (gdbarch, start_pc, gdb_stdout);
1466               wrap_here ("  ");
1467               printf_filtered (" but contains no code.\n");
1468             }
1469           else
1470             {
1471               printf_filtered ("Line %d of \"%s\"",
1472                                sal.line, sal.symtab->filename);
1473               wrap_here ("  ");
1474               printf_filtered (" starts at address ");
1475               print_address (gdbarch, start_pc, gdb_stdout);
1476               wrap_here ("  ");
1477               printf_filtered (" and ends at ");
1478               print_address (gdbarch, end_pc, gdb_stdout);
1479               printf_filtered (".\n");
1480             }
1481
1482           /* x/i should display this line's code.  */
1483           set_next_address (gdbarch, start_pc);
1484
1485           /* Repeating "info line" should do the following line.  */
1486           last_line_listed = sal.line + 1;
1487
1488           /* If this is the only line, show the source code.  If it could
1489              not find the file, don't do anything special.  */
1490           if (annotation_level && sals.nelts == 1)
1491             identify_source_line (sal.symtab, sal.line, 0, start_pc);
1492         }
1493       else
1494         /* Is there any case in which we get here, and have an address
1495            which the user would want to see?  If we have debugging symbols
1496            and no line numbers?  */
1497         printf_filtered (_("Line number %d is out of range for \"%s\".\n"),
1498                          sal.line, sal.symtab->filename);
1499     }
1500   xfree (sals.sals);
1501 }
1502 \f
1503 /* Commands to search the source file for a regexp.  */
1504
1505 static void
1506 forward_search_command (char *regex, int from_tty)
1507 {
1508   int c;
1509   int desc;
1510   FILE *stream;
1511   int line;
1512   char *msg;
1513   struct cleanup *cleanups;
1514
1515   line = last_line_listed + 1;
1516
1517   msg = (char *) re_comp (regex);
1518   if (msg)
1519     error (("%s"), msg);
1520
1521   if (current_source_symtab == 0)
1522     select_source_symtab (0);
1523
1524   desc = open_source_file (current_source_symtab);
1525   if (desc < 0)
1526     perror_with_name (current_source_symtab->filename);
1527   cleanups = make_cleanup_close (desc);
1528
1529   if (current_source_symtab->line_charpos == 0)
1530     find_source_lines (current_source_symtab, desc);
1531
1532   if (line < 1 || line > current_source_symtab->nlines)
1533     error (_("Expression not found"));
1534
1535   if (lseek (desc, current_source_symtab->line_charpos[line - 1], 0) < 0)
1536     perror_with_name (current_source_symtab->filename);
1537
1538   discard_cleanups (cleanups);
1539   stream = fdopen (desc, FDOPEN_MODE);
1540   clearerr (stream);
1541   cleanups = make_cleanup_fclose (stream);
1542   while (1)
1543     {
1544       static char *buf = NULL;
1545       char *p;
1546       int cursize, newsize;
1547
1548       cursize = 256;
1549       buf = xmalloc (cursize);
1550       p = buf;
1551
1552       c = getc (stream);
1553       if (c == EOF)
1554         break;
1555       do
1556         {
1557           *p++ = c;
1558           if (p - buf == cursize)
1559             {
1560               newsize = cursize + cursize / 2;
1561               buf = xrealloc (buf, newsize);
1562               p = buf + cursize;
1563               cursize = newsize;
1564             }
1565         }
1566       while (c != '\n' && (c = getc (stream)) >= 0);
1567
1568       /* Remove the \r, if any, at the end of the line, otherwise
1569          regular expressions that end with $ or \n won't work.  */
1570       if (p - buf > 1 && p[-2] == '\r')
1571         {
1572           p--;
1573           p[-1] = '\n';
1574         }
1575
1576       /* We now have a source line in buf, null terminate and match.  */
1577       *p = 0;
1578       if (re_exec (buf) > 0)
1579         {
1580           /* Match!  */
1581           do_cleanups (cleanups);
1582           print_source_lines (current_source_symtab, line, line + 1, 0);
1583           set_internalvar_integer (lookup_internalvar ("_"), line);
1584           current_source_line = max (line - lines_to_list / 2, 1);
1585           return;
1586         }
1587       line++;
1588     }
1589
1590   printf_filtered (_("Expression not found\n"));
1591   do_cleanups (cleanups);
1592 }
1593
1594 static void
1595 reverse_search_command (char *regex, int from_tty)
1596 {
1597   int c;
1598   int desc;
1599   FILE *stream;
1600   int line;
1601   char *msg;
1602   struct cleanup *cleanups;
1603
1604   line = last_line_listed - 1;
1605
1606   msg = (char *) re_comp (regex);
1607   if (msg)
1608     error (("%s"), msg);
1609
1610   if (current_source_symtab == 0)
1611     select_source_symtab (0);
1612
1613   desc = open_source_file (current_source_symtab);
1614   if (desc < 0)
1615     perror_with_name (current_source_symtab->filename);
1616   cleanups = make_cleanup_close (desc);
1617
1618   if (current_source_symtab->line_charpos == 0)
1619     find_source_lines (current_source_symtab, desc);
1620
1621   if (line < 1 || line > current_source_symtab->nlines)
1622     error (_("Expression not found"));
1623
1624   if (lseek (desc, current_source_symtab->line_charpos[line - 1], 0) < 0)
1625     perror_with_name (current_source_symtab->filename);
1626
1627   discard_cleanups (cleanups);
1628   stream = fdopen (desc, FDOPEN_MODE);
1629   clearerr (stream);
1630   cleanups = make_cleanup_fclose (stream);
1631   while (line > 1)
1632     {
1633 /* FIXME!!!  We walk right off the end of buf if we get a long line!!!  */
1634       char buf[4096];           /* Should be reasonable???  */
1635       char *p = buf;
1636
1637       c = getc (stream);
1638       if (c == EOF)
1639         break;
1640       do
1641         {
1642           *p++ = c;
1643         }
1644       while (c != '\n' && (c = getc (stream)) >= 0);
1645
1646       /* Remove the \r, if any, at the end of the line, otherwise
1647          regular expressions that end with $ or \n won't work.  */
1648       if (p - buf > 1 && p[-2] == '\r')
1649         {
1650           p--;
1651           p[-1] = '\n';
1652         }
1653
1654       /* We now have a source line in buf; null terminate and match.  */
1655       *p = 0;
1656       if (re_exec (buf) > 0)
1657         {
1658           /* Match!  */
1659           do_cleanups (cleanups);
1660           print_source_lines (current_source_symtab, line, line + 1, 0);
1661           set_internalvar_integer (lookup_internalvar ("_"), line);
1662           current_source_line = max (line - lines_to_list / 2, 1);
1663           return;
1664         }
1665       line--;
1666       if (fseek (stream, current_source_symtab->line_charpos[line - 1], 0) < 0)
1667         {
1668           do_cleanups (cleanups);
1669           perror_with_name (current_source_symtab->filename);
1670         }
1671     }
1672
1673   printf_filtered (_("Expression not found\n"));
1674   do_cleanups (cleanups);
1675   return;
1676 }
1677
1678 /* If the last character of PATH is a directory separator, then strip it.  */
1679
1680 static void
1681 strip_trailing_directory_separator (char *path)
1682 {
1683   const int last = strlen (path) - 1;
1684
1685   if (last < 0)
1686     return;  /* No stripping is needed if PATH is the empty string.  */
1687
1688   if (IS_DIR_SEPARATOR (path[last]))
1689     path[last] = '\0';
1690 }
1691
1692 /* Return the path substitution rule that matches FROM.
1693    Return NULL if no rule matches.  */
1694
1695 static struct substitute_path_rule *
1696 find_substitute_path_rule (const char *from)
1697 {
1698   struct substitute_path_rule *rule = substitute_path_rules;
1699
1700   while (rule != NULL)
1701     {
1702       if (FILENAME_CMP (rule->from, from) == 0)
1703         return rule;
1704       rule = rule->next;
1705     }
1706
1707   return NULL;
1708 }
1709
1710 /* Add a new substitute-path rule at the end of the current list of rules.
1711    The new rule will replace FROM into TO.  */
1712
1713 void
1714 add_substitute_path_rule (char *from, char *to)
1715 {
1716   struct substitute_path_rule *rule;
1717   struct substitute_path_rule *new_rule;
1718
1719   new_rule = xmalloc (sizeof (struct substitute_path_rule));
1720   new_rule->from = xstrdup (from);
1721   new_rule->to = xstrdup (to);
1722   new_rule->next = NULL;
1723
1724   /* If the list of rules are empty, then insert the new rule
1725      at the head of the list.  */
1726
1727   if (substitute_path_rules == NULL)
1728     {
1729       substitute_path_rules = new_rule;
1730       return;
1731     }
1732
1733   /* Otherwise, skip to the last rule in our list and then append
1734      the new rule.  */
1735
1736   rule = substitute_path_rules;
1737   while (rule->next != NULL)
1738     rule = rule->next;
1739
1740   rule->next = new_rule;
1741 }
1742
1743 /* Remove the given source path substitution rule from the current list
1744    of rules.  The memory allocated for that rule is also deallocated.  */
1745
1746 static void
1747 delete_substitute_path_rule (struct substitute_path_rule *rule)
1748 {
1749   if (rule == substitute_path_rules)
1750     substitute_path_rules = rule->next;
1751   else
1752     {
1753       struct substitute_path_rule *prev = substitute_path_rules;
1754
1755       while (prev != NULL && prev->next != rule)
1756         prev = prev->next;
1757
1758       gdb_assert (prev != NULL);
1759
1760       prev->next = rule->next;
1761     }
1762
1763   xfree (rule->from);
1764   xfree (rule->to);
1765   xfree (rule);
1766 }
1767
1768 /* Implement the "show substitute-path" command.  */
1769
1770 static void
1771 show_substitute_path_command (char *args, int from_tty)
1772 {
1773   struct substitute_path_rule *rule = substitute_path_rules;
1774   char **argv;
1775   char *from = NULL;
1776   
1777   argv = gdb_buildargv (args);
1778   make_cleanup_freeargv (argv);
1779
1780   /* We expect zero or one argument.  */
1781
1782   if (argv != NULL && argv[0] != NULL && argv[1] != NULL)
1783     error (_("Too many arguments in command"));
1784
1785   if (argv != NULL && argv[0] != NULL)
1786     from = argv[0];
1787
1788   /* Print the substitution rules.  */
1789
1790   if (from != NULL)
1791     printf_filtered
1792       (_("Source path substitution rule matching `%s':\n"), from);
1793   else
1794     printf_filtered (_("List of all source path substitution rules:\n"));
1795
1796   while (rule != NULL)
1797     {
1798       if (from == NULL || FILENAME_CMP (rule->from, from) == 0)
1799         printf_filtered ("  `%s' -> `%s'.\n", rule->from, rule->to);
1800       rule = rule->next;
1801     }
1802 }
1803
1804 /* Implement the "unset substitute-path" command.  */
1805
1806 static void
1807 unset_substitute_path_command (char *args, int from_tty)
1808 {
1809   struct substitute_path_rule *rule = substitute_path_rules;
1810   char **argv = gdb_buildargv (args);
1811   char *from = NULL;
1812   int rule_found = 0;
1813
1814   /* This function takes either 0 or 1 argument.  */
1815
1816   make_cleanup_freeargv (argv);
1817   if (argv != NULL && argv[0] != NULL && argv[1] != NULL)
1818     error (_("Incorrect usage, too many arguments in command"));
1819
1820   if (argv != NULL && argv[0] != NULL)
1821     from = argv[0];
1822
1823   /* If the user asked for all the rules to be deleted, ask him
1824      to confirm and give him a chance to abort before the action
1825      is performed.  */
1826
1827   if (from == NULL
1828       && !query (_("Delete all source path substitution rules? ")))
1829     error (_("Canceled"));
1830
1831   /* Delete the rule matching the argument.  No argument means that
1832      all rules should be deleted.  */
1833
1834   while (rule != NULL)
1835     {
1836       struct substitute_path_rule *next = rule->next;
1837
1838       if (from == NULL || FILENAME_CMP (from, rule->from) == 0)
1839         {
1840           delete_substitute_path_rule (rule);
1841           rule_found = 1;
1842         }
1843
1844       rule = next;
1845     }
1846   
1847   /* If the user asked for a specific rule to be deleted but
1848      we could not find it, then report an error.  */
1849
1850   if (from != NULL && !rule_found)
1851     error (_("No substitution rule defined for `%s'"), from);
1852
1853   forget_cached_source_info ();
1854 }
1855
1856 /* Add a new source path substitution rule.  */
1857
1858 static void
1859 set_substitute_path_command (char *args, int from_tty)
1860 {
1861   char **argv;
1862   struct substitute_path_rule *rule;
1863   
1864   argv = gdb_buildargv (args);
1865   make_cleanup_freeargv (argv);
1866
1867   if (argv == NULL || argv[0] == NULL || argv [1] == NULL)
1868     error (_("Incorrect usage, too few arguments in command"));
1869
1870   if (argv[2] != NULL)
1871     error (_("Incorrect usage, too many arguments in command"));
1872
1873   if (*(argv[0]) == '\0')
1874     error (_("First argument must be at least one character long"));
1875
1876   /* Strip any trailing directory separator character in either FROM
1877      or TO.  The substitution rule already implicitly contains them.  */
1878   strip_trailing_directory_separator (argv[0]);
1879   strip_trailing_directory_separator (argv[1]);
1880
1881   /* If a rule with the same "from" was previously defined, then
1882      delete it.  This new rule replaces it.  */
1883
1884   rule = find_substitute_path_rule (argv[0]);
1885   if (rule != NULL)
1886     delete_substitute_path_rule (rule);
1887       
1888   /* Insert the new substitution rule.  */
1889
1890   add_substitute_path_rule (argv[0], argv[1]);
1891   forget_cached_source_info ();
1892 }
1893
1894 \f
1895 void
1896 _initialize_source (void)
1897 {
1898   struct cmd_list_element *c;
1899
1900   current_source_symtab = 0;
1901   init_source_path ();
1902
1903   /* The intention is to use POSIX Basic Regular Expressions.
1904      Always use the GNU regex routine for consistency across all hosts.
1905      Our current GNU regex.c does not have all the POSIX features, so this is
1906      just an approximation.  */
1907   re_set_syntax (RE_SYNTAX_GREP);
1908
1909   c = add_cmd ("directory", class_files, directory_command, _("\
1910 Add directory DIR to beginning of search path for source files.\n\
1911 Forget cached info on source file locations and line positions.\n\
1912 DIR can also be $cwd for the current working directory, or $cdir for the\n\
1913 directory in which the source file was compiled into object code.\n\
1914 With no argument, reset the search path to $cdir:$cwd, the default."),
1915                &cmdlist);
1916
1917   if (dbx_commands)
1918     add_com_alias ("use", "directory", class_files, 0);
1919
1920   set_cmd_completer (c, filename_completer);
1921
1922   add_setshow_optional_filename_cmd ("directories",
1923                                      class_files,
1924                                      &source_path,
1925                                      _("\
1926 Set the search path for finding source files."),
1927                                      _("\
1928 Show the search path for finding source files."),
1929                                      _("\
1930 $cwd in the path means the current working directory.\n\
1931 $cdir in the path means the compilation directory of the source file.\n\
1932 GDB ensures the search path always ends with $cdir:$cwd by\n\
1933 appending these directories if necessary.\n\
1934 Setting the value to an empty string sets it to $cdir:$cwd, the default."),
1935                             set_directories_command,
1936                             show_directories_command,
1937                             &setlist, &showlist);
1938
1939   if (xdb_commands)
1940     {
1941       add_com_alias ("D", "directory", class_files, 0);
1942       add_cmd ("ld", no_class, show_directories_1, _("\
1943 Current search path for finding source files.\n\
1944 $cwd in the path means the current working directory.\n\
1945 $cdir in the path means the compilation directory of the source file."),
1946                &cmdlist);
1947     }
1948
1949   add_info ("source", source_info,
1950             _("Information about the current source file."));
1951
1952   add_info ("line", line_info, _("\
1953 Core addresses of the code for a source line.\n\
1954 Line can be specified as\n\
1955   LINENUM, to list around that line in current file,\n\
1956   FILE:LINENUM, to list around that line in that file,\n\
1957   FUNCTION, to list around beginning of that function,\n\
1958   FILE:FUNCTION, to distinguish among like-named static functions.\n\
1959 Default is to describe the last source line that was listed.\n\n\
1960 This sets the default address for \"x\" to the line's first instruction\n\
1961 so that \"x/i\" suffices to start examining the machine code.\n\
1962 The address is also stored as the value of \"$_\"."));
1963
1964   add_com ("forward-search", class_files, forward_search_command, _("\
1965 Search for regular expression (see regex(3)) from last line listed.\n\
1966 The matching line number is also stored as the value of \"$_\"."));
1967   add_com_alias ("search", "forward-search", class_files, 0);
1968
1969   add_com ("reverse-search", class_files, reverse_search_command, _("\
1970 Search backward for regular expression (see regex(3)) from last line listed.\n\
1971 The matching line number is also stored as the value of \"$_\"."));
1972   add_com_alias ("rev", "reverse-search", class_files, 1);
1973
1974   if (xdb_commands)
1975     {
1976       add_com_alias ("/", "forward-search", class_files, 0);
1977       add_com_alias ("?", "reverse-search", class_files, 0);
1978     }
1979
1980   add_setshow_integer_cmd ("listsize", class_support, &lines_to_list, _("\
1981 Set number of source lines gdb will list by default."), _("\
1982 Show number of source lines gdb will list by default."), NULL,
1983                             NULL,
1984                             show_lines_to_list,
1985                             &setlist, &showlist);
1986
1987   add_cmd ("substitute-path", class_files, set_substitute_path_command,
1988            _("\
1989 Usage: set substitute-path FROM TO\n\
1990 Add a substitution rule replacing FROM into TO in source file names.\n\
1991 If a substitution rule was previously set for FROM, the old rule\n\
1992 is replaced by the new one."),
1993            &setlist);
1994
1995   add_cmd ("substitute-path", class_files, unset_substitute_path_command,
1996            _("\
1997 Usage: unset substitute-path [FROM]\n\
1998 Delete the rule for substituting FROM in source file names.  If FROM\n\
1999 is not specified, all substituting rules are deleted.\n\
2000 If the debugger cannot find a rule for FROM, it will display a warning."),
2001            &unsetlist);
2002
2003   add_cmd ("substitute-path", class_files, show_substitute_path_command,
2004            _("\
2005 Usage: show substitute-path [FROM]\n\
2006 Print the rule for substituting FROM in source file names. If FROM\n\
2007 is not specified, print all substitution rules."),
2008            &showlist);
2009 }