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