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