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