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