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