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