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