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