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