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