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