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