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