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