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