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