Constify add_info
[deliverable/binutils-gdb.git] / gdb / auto-load.c
CommitLineData
e2207b9a
JK
1/* GDB routines for supporting auto-loaded scripts.
2
61baf725 3 Copyright (C) 2012-2017 Free Software Foundation, Inc.
e2207b9a
JK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20#include "defs.h"
9f050062 21#include <ctype.h>
e2207b9a
JK
22#include "auto-load.h"
23#include "progspace.h"
e2207b9a
JK
24#include "gdb_regex.h"
25#include "ui-out.h"
26#include "filenames.h"
27#include "command.h"
28#include "observer.h"
29#include "objfiles.h"
bf88dd68
JK
30#include "cli/cli-script.h"
31#include "gdbcmd.h"
5b2bf947 32#include "cli/cli-cmds.h"
bf88dd68
JK
33#include "cli/cli-decode.h"
34#include "cli/cli-setshow.h"
bccbefd2
JK
35#include "readline/tilde.h"
36#include "completer.h"
202cbf1c 37#include "fnmatch.h"
9a950c7c 38#include "top.h"
614c279d 39#include "filestuff.h"
6dddc817 40#include "extension.h"
ed3ef339 41#include "gdb/section-scripts.h"
6a1b9516 42#include <algorithm>
bf88dd68 43
5b2bf947
DE
44/* The section to look in for auto-loaded scripts (in file formats that
45 support sections).
46 Each entry in this section is a record that begins with a leading byte
47 identifying the record type.
48 At the moment we only support one record type: A leading byte of 1,
49 followed by the path of a python script to load. */
50#define AUTO_SECTION_NAME ".debug_gdb_scripts"
51
9f050062
DE
52static void maybe_print_unsupported_script_warning
53 (struct auto_load_pspace_info *, struct objfile *objfile,
54 const struct extension_language_defn *language,
55 const char *section_name, unsigned offset);
6dddc817 56
9f050062
DE
57static void maybe_print_script_not_found_warning
58 (struct auto_load_pspace_info *, struct objfile *objfile,
59 const struct extension_language_defn *language,
60 const char *section_name, unsigned offset);
bf88dd68 61
4dc84fd1
JK
62/* Value of the 'set debug auto-load' configuration variable. */
63static int debug_auto_load = 0;
64
65/* "show" command for the debug_auto_load configuration variable. */
66
67static void
68show_debug_auto_load (struct ui_file *file, int from_tty,
69 struct cmd_list_element *c, const char *value)
70{
71 fprintf_filtered (file, _("Debugging output for files "
72 "of 'set auto-load ...' is %s.\n"),
73 value);
74}
75
bf88dd68
JK
76/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
77 scripts:
78 set auto-load gdb-scripts on|off
79 This is true if we should auto-load associated scripts when an objfile
80 is opened, false otherwise. */
81static int auto_load_gdb_scripts = 1;
82
83/* "show" command for the auto_load_gdb_scripts configuration variable. */
84
85static void
86show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
87 struct cmd_list_element *c, const char *value)
88{
89 fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
90 "scripts is %s.\n"),
91 value);
92}
e2207b9a 93
5b2bf947
DE
94/* Return non-zero if auto-loading gdb scripts is enabled. */
95
6dddc817
DE
96int
97auto_load_gdb_scripts_enabled (const struct extension_language_defn *extlang)
5b2bf947
DE
98{
99 return auto_load_gdb_scripts;
100}
101
e2207b9a
JK
102/* Internal-use flag to enable/disable auto-loading.
103 This is true if we should auto-load python code when an objfile is opened,
104 false otherwise.
105
bf88dd68 106 Both auto_load_scripts && global_auto_load must be true to enable
e2207b9a
JK
107 auto-loading.
108
109 This flag exists to facilitate deferring auto-loading during start-up
110 until after ./.gdbinit has been read; it may augment the search directories
111 used to find the scripts. */
bf88dd68
JK
112int global_auto_load = 1;
113
114/* Auto-load .gdbinit file from the current directory? */
115int auto_load_local_gdbinit = 1;
116
117/* Absolute pathname to the current directory .gdbinit, if it exists. */
118char *auto_load_local_gdbinit_pathname = NULL;
119
120/* Boolean value if AUTO_LOAD_LOCAL_GDBINIT_PATHNAME has been loaded. */
121int auto_load_local_gdbinit_loaded = 0;
122
123/* "show" command for the auto_load_local_gdbinit configuration variable. */
124
125static void
126show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
127 struct cmd_list_element *c, const char *value)
128{
129 fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
130 "directory is %s.\n"),
131 value);
132}
133
7349ff92
JK
134/* Directory list from which to load auto-loaded scripts. It is not checked
135 for absolute paths but they are strongly recommended. It is initialized by
136 _initialize_auto_load. */
137static char *auto_load_dir;
138
139/* "set" command for the auto_load_dir configuration variable. */
140
141static void
142set_auto_load_dir (char *args, int from_tty, struct cmd_list_element *c)
143{
144 /* Setting the variable to "" resets it to the compile time defaults. */
145 if (auto_load_dir[0] == '\0')
146 {
147 xfree (auto_load_dir);
148 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
149 }
150}
151
152/* "show" command for the auto_load_dir configuration variable. */
153
154static void
155show_auto_load_dir (struct ui_file *file, int from_tty,
156 struct cmd_list_element *c, const char *value)
157{
158 fprintf_filtered (file, _("List of directories from which to load "
159 "auto-loaded scripts is %s.\n"),
160 value);
161}
162
bccbefd2
JK
163/* Directory list safe to hold auto-loaded files. It is not checked for
164 absolute paths but they are strongly recommended. It is initialized by
165 _initialize_auto_load. */
166static char *auto_load_safe_path;
167
168/* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
169 by tilde_expand and possibly each entries has added its gdb_realpath
170 counterpart. */
171static VEC (char_ptr) *auto_load_safe_path_vec;
172
1564a261
JK
173/* Expand $datadir and $debugdir in STRING according to the rules of
174 substitute_path_component. Return vector from dirnames_to_char_ptr_vec,
175 this vector must be freed by free_char_ptr_vec by the caller. */
176
177static VEC (char_ptr) *
178auto_load_expand_dir_vars (const char *string)
179{
180 VEC (char_ptr) *dir_vec;
181 char *s;
182
183 s = xstrdup (string);
184 substitute_path_component (&s, "$datadir", gdb_datadir);
185 substitute_path_component (&s, "$debugdir", debug_file_directory);
186
187 if (debug_auto_load && strcmp (s, string) != 0)
188 fprintf_unfiltered (gdb_stdlog,
189 _("auto-load: Expanded $-variables to \"%s\".\n"), s);
190
191 dir_vec = dirnames_to_char_ptr_vec (s);
192 xfree(s);
193
194 return dir_vec;
195}
196
bccbefd2
JK
197/* Update auto_load_safe_path_vec from current AUTO_LOAD_SAFE_PATH. */
198
199static void
200auto_load_safe_path_vec_update (void)
201{
bccbefd2
JK
202 unsigned len;
203 int ix;
204
4dc84fd1
JK
205 if (debug_auto_load)
206 fprintf_unfiltered (gdb_stdlog,
207 _("auto-load: Updating directories of \"%s\".\n"),
208 auto_load_safe_path);
209
bccbefd2
JK
210 free_char_ptr_vec (auto_load_safe_path_vec);
211
1564a261 212 auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
bccbefd2
JK
213 len = VEC_length (char_ptr, auto_load_safe_path_vec);
214
215 /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
216 element. */
217 for (ix = 0; ix < len; ix++)
218 {
219 char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
1564a261 220 char *expanded = tilde_expand (dir);
14278e1f 221 gdb::unique_xmalloc_ptr<char> real_path = gdb_realpath (expanded);
bccbefd2 222
1564a261 223 /* Ensure the current entry is at least tilde_expand-ed. */
bccbefd2
JK
224 VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
225
4dc84fd1
JK
226 if (debug_auto_load)
227 {
228 if (strcmp (expanded, dir) == 0)
229 fprintf_unfiltered (gdb_stdlog,
230 _("auto-load: Using directory \"%s\".\n"),
231 expanded);
232 else
233 fprintf_unfiltered (gdb_stdlog,
234 _("auto-load: Resolved directory \"%s\" "
235 "as \"%s\".\n"),
236 dir, expanded);
237 }
238 xfree (dir);
239
bccbefd2 240 /* If gdb_realpath returns a different content, append it. */
14278e1f 241 if (strcmp (real_path.get (), expanded) != 0)
4dc84fd1 242 {
4dc84fd1
JK
243 if (debug_auto_load)
244 fprintf_unfiltered (gdb_stdlog,
245 _("auto-load: And canonicalized as \"%s\".\n"),
14278e1f
TT
246 real_path.get ());
247
248 VEC_safe_push (char_ptr, auto_load_safe_path_vec,
249 real_path.release ());
4dc84fd1 250 }
bccbefd2
JK
251 }
252}
253
aff139ff 254/* Variable gdb_datadir has been set. Update content depending on $datadir. */
6dea1fbd
JK
255
256static void
257auto_load_gdb_datadir_changed (void)
258{
259 auto_load_safe_path_vec_update ();
260}
261
bccbefd2
JK
262/* "set" command for the auto_load_safe_path configuration variable. */
263
264static void
265set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
266{
6dea1fbd 267 /* Setting the variable to "" resets it to the compile time defaults. */
af2c1515
JK
268 if (auto_load_safe_path[0] == '\0')
269 {
270 xfree (auto_load_safe_path);
6dea1fbd 271 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
af2c1515
JK
272 }
273
bccbefd2
JK
274 auto_load_safe_path_vec_update ();
275}
276
277/* "show" command for the auto_load_safe_path configuration variable. */
278
279static void
280show_auto_load_safe_path (struct ui_file *file, int from_tty,
281 struct cmd_list_element *c, const char *value)
282{
f7bfa992
JK
283 const char *cs;
284
285 /* Check if user has entered either "/" or for example ":".
286 But while more complicate content like ":/foo" would still also
287 permit any location do not hide those. */
288
289 for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
290 cs++);
291 if (*cs == 0)
bccbefd2
JK
292 fprintf_filtered (file, _("Auto-load files are safe to load from any "
293 "directory.\n"));
294 else
295 fprintf_filtered (file, _("List of directories from which it is safe to "
296 "auto-load files is %s.\n"),
297 value);
298}
299
300/* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
301 variable. */
302
303static void
304add_auto_load_safe_path (char *args, int from_tty)
305{
306 char *s;
307
308 if (args == NULL || *args == 0)
309 error (_("\
af2c1515
JK
310Directory argument required.\n\
311Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
312"));
bccbefd2
JK
313
314 s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
315 xfree (auto_load_safe_path);
316 auto_load_safe_path = s;
317
318 auto_load_safe_path_vec_update ();
319}
320
f10c5b19
JK
321/* "add-auto-load-scripts-directory" command for the auto_load_dir configuration
322 variable. */
323
324static void
325add_auto_load_dir (char *args, int from_tty)
326{
327 char *s;
328
329 if (args == NULL || *args == 0)
330 error (_("Directory argument required."));
331
332 s = xstrprintf ("%s%c%s", auto_load_dir, DIRNAME_SEPARATOR, args);
333 xfree (auto_load_dir);
334 auto_load_dir = s;
335}
336
202cbf1c
JK
337/* Implementation for filename_is_in_pattern overwriting the caller's FILENAME
338 and PATTERN. */
bccbefd2 339
202cbf1c
JK
340static int
341filename_is_in_pattern_1 (char *filename, char *pattern)
bccbefd2 342{
202cbf1c
JK
343 size_t pattern_len = strlen (pattern);
344 size_t filename_len = strlen (filename);
345
346 if (debug_auto_load)
347 fprintf_unfiltered (gdb_stdlog, _("auto-load: Matching file \"%s\" "
348 "to pattern \"%s\"\n"),
349 filename, pattern);
bccbefd2 350
202cbf1c
JK
351 /* Trim trailing slashes ("/") from PATTERN. Even for "d:\" paths as
352 trailing slashes are trimmed also from FILENAME it still matches
353 correctly. */
354 while (pattern_len && IS_DIR_SEPARATOR (pattern[pattern_len - 1]))
355 pattern_len--;
356 pattern[pattern_len] = '\0';
bccbefd2 357
1ef71717
JK
358 /* Ensure auto_load_safe_path "/" matches any FILENAME. On MS-Windows
359 platform FILENAME even after gdb_realpath does not have to start with
360 IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename. */
202cbf1c
JK
361 if (pattern_len == 0)
362 {
363 if (debug_auto_load)
364 fprintf_unfiltered (gdb_stdlog,
365 _("auto-load: Matched - empty pattern\n"));
366 return 1;
367 }
368
369 for (;;)
370 {
371 /* Trim trailing slashes ("/"). PATTERN also has slashes trimmed the
372 same way so they will match. */
373 while (filename_len && IS_DIR_SEPARATOR (filename[filename_len - 1]))
374 filename_len--;
375 filename[filename_len] = '\0';
376 if (filename_len == 0)
377 {
378 if (debug_auto_load)
379 fprintf_unfiltered (gdb_stdlog,
380 _("auto-load: Not matched - pattern \"%s\".\n"),
381 pattern);
382 return 0;
383 }
384
385 if (gdb_filename_fnmatch (pattern, filename, FNM_FILE_NAME | FNM_NOESCAPE)
386 == 0)
387 {
388 if (debug_auto_load)
389 fprintf_unfiltered (gdb_stdlog, _("auto-load: Matched - file "
390 "\"%s\" to pattern \"%s\".\n"),
391 filename, pattern);
392 return 1;
393 }
394
395 /* Trim trailing FILENAME component. */
396 while (filename_len > 0 && !IS_DIR_SEPARATOR (filename[filename_len - 1]))
397 filename_len--;
398 }
399}
400
401/* Return 1 if FILENAME matches PATTERN or if FILENAME resides in
402 a subdirectory of a directory that matches PATTERN. Return 0 otherwise.
403 gdb_realpath normalization is never done here. */
404
405static ATTRIBUTE_PURE int
406filename_is_in_pattern (const char *filename, const char *pattern)
407{
408 char *filename_copy, *pattern_copy;
409
224c3ddb 410 filename_copy = (char *) alloca (strlen (filename) + 1);
202cbf1c 411 strcpy (filename_copy, filename);
224c3ddb 412 pattern_copy = (char *) alloca (strlen (pattern) + 1);
202cbf1c 413 strcpy (pattern_copy, pattern);
1ef71717 414
202cbf1c 415 return filename_is_in_pattern_1 (filename_copy, pattern_copy);
bccbefd2
JK
416}
417
418/* Return 1 if FILENAME belongs to one of directory components of
419 AUTO_LOAD_SAFE_PATH_VEC. Return 0 otherwise.
420 auto_load_safe_path_vec_update is never called.
14278e1f 421 *FILENAME_REALP may be updated by gdb_realpath of FILENAME. */
bccbefd2
JK
422
423static int
424filename_is_in_auto_load_safe_path_vec (const char *filename,
14278e1f 425 gdb::unique_xmalloc_ptr<char> *filename_realp)
bccbefd2 426{
202cbf1c 427 char *pattern;
bccbefd2
JK
428 int ix;
429
202cbf1c
JK
430 for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern);
431 ++ix)
432 if (*filename_realp == NULL && filename_is_in_pattern (filename, pattern))
bccbefd2
JK
433 break;
434
202cbf1c 435 if (pattern == NULL)
bccbefd2
JK
436 {
437 if (*filename_realp == NULL)
4dc84fd1
JK
438 {
439 *filename_realp = gdb_realpath (filename);
14278e1f 440 if (debug_auto_load && strcmp (filename_realp->get (), filename) != 0)
4dc84fd1
JK
441 fprintf_unfiltered (gdb_stdlog,
442 _("auto-load: Resolved "
443 "file \"%s\" as \"%s\".\n"),
14278e1f 444 filename, filename_realp->get ());
4dc84fd1 445 }
bccbefd2 446
14278e1f 447 if (strcmp (filename_realp->get (), filename) != 0)
202cbf1c
JK
448 for (ix = 0;
449 VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern); ++ix)
14278e1f 450 if (filename_is_in_pattern (filename_realp->get (), pattern))
4dc84fd1 451 break;
bccbefd2
JK
452 }
453
202cbf1c 454 if (pattern != NULL)
4dc84fd1
JK
455 {
456 if (debug_auto_load)
457 fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
458 "directory \"%s\".\n"),
202cbf1c 459 filename, pattern);
4dc84fd1
JK
460 return 1;
461 }
bccbefd2
JK
462
463 return 0;
464}
465
466/* Return 1 if FILENAME is located in one of the directories of
467 AUTO_LOAD_SAFE_PATH. Otherwise call warning and return 0. FILENAME does
468 not have to be an absolute path.
469
470 Existence of FILENAME is not checked. Function will still give a warning
471 even if the caller would quietly skip non-existing file in unsafe
472 directory. */
473
474int
4dc84fd1 475file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
bccbefd2 476{
14278e1f 477 gdb::unique_xmalloc_ptr<char> filename_real;
9a950c7c 478 static int advice_printed = 0;
bccbefd2 479
4dc84fd1
JK
480 if (debug_auto_load)
481 {
482 va_list debug_args;
483
484 va_start (debug_args, debug_fmt);
485 vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
486 va_end (debug_args);
487 }
488
bccbefd2 489 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
14278e1f 490 return 1;
bccbefd2
JK
491
492 auto_load_safe_path_vec_update ();
493 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
14278e1f 494 return 1;
bccbefd2
JK
495
496 warning (_("File \"%s\" auto-loading has been declined by your "
497 "`auto-load safe-path' set to \"%s\"."),
14278e1f 498 filename_real.get (), auto_load_safe_path);
bccbefd2 499
9a950c7c
JK
500 if (!advice_printed)
501 {
502 const char *homedir = getenv ("HOME");
9a950c7c
JK
503
504 if (homedir == NULL)
505 homedir = "$HOME";
14278e1f 506 std::string homeinit = string_printf ("%s/%s", homedir, gdbinit);
9a950c7c
JK
507
508 printf_filtered (_("\
509To enable execution of this file add\n\
510\tadd-auto-load-safe-path %s\n\
511line to your configuration file \"%s\".\n\
512To completely disable this security protection add\n\
513\tset auto-load safe-path /\n\
514line to your configuration file \"%s\".\n\
515For more information about this security protection see the\n\
516\"Auto-loading safe path\" section in the GDB manual. E.g., run from the shell:\n\
517\tinfo \"(gdb)Auto-loading safe path\"\n"),
14278e1f
TT
518 filename_real.get (),
519 homeinit.c_str (), homeinit.c_str ());
9a950c7c
JK
520 advice_printed = 1;
521 }
522
bccbefd2
JK
523 return 0;
524}
525
e2207b9a
JK
526/* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
527 the same script. There's no point in loading the script multiple times,
528 and there can be a lot of objfiles and scripts, so we keep track of scripts
529 loaded this way. */
530
531struct auto_load_pspace_info
532{
9f050062
DE
533 /* For each program space we keep track of loaded scripts, both when
534 specified as file names and as scripts to be executed directly. */
535 struct htab *loaded_script_files;
536 struct htab *loaded_script_texts;
e2207b9a 537
6dddc817
DE
538 /* Non-zero if we've issued the warning about an auto-load script not being
539 supported. We only want to issue this warning once. */
540 int unsupported_script_warning_printed;
541
e2207b9a
JK
542 /* Non-zero if we've issued the warning about an auto-load script not being
543 found. We only want to issue this warning once. */
544 int script_not_found_warning_printed;
545};
546
9f050062 547/* Objects of this type are stored in the loaded_script hash table. */
e2207b9a
JK
548
549struct loaded_script
550{
551 /* Name as provided by the objfile. */
552 const char *name;
bf88dd68 553
e2207b9a 554 /* Full path name or NULL if script wasn't found (or was otherwise
9f050062 555 inaccessible), or NULL for loaded_script_texts. */
e2207b9a 556 const char *full_path;
bf88dd68 557
bccbefd2
JK
558 /* Non-zero if this script has been loaded. */
559 int loaded;
560
6dddc817 561 const struct extension_language_defn *language;
e2207b9a
JK
562};
563
564/* Per-program-space data key. */
565static const struct program_space_data *auto_load_pspace_data;
566
567static void
568auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
569{
9a3c8263 570 struct auto_load_pspace_info *info = (struct auto_load_pspace_info *) arg;
e2207b9a 571
9f050062
DE
572 if (info->loaded_script_files)
573 htab_delete (info->loaded_script_files);
574 if (info->loaded_script_texts)
575 htab_delete (info->loaded_script_texts);
487ad57c 576 xfree (info);
e2207b9a
JK
577}
578
579/* Get the current autoload data. If none is found yet, add it now. This
580 function always returns a valid object. */
581
582static struct auto_load_pspace_info *
583get_auto_load_pspace_data (struct program_space *pspace)
584{
585 struct auto_load_pspace_info *info;
586
9a3c8263
SM
587 info = ((struct auto_load_pspace_info *)
588 program_space_data (pspace, auto_load_pspace_data));
e2207b9a
JK
589 if (info == NULL)
590 {
41bf6aca 591 info = XCNEW (struct auto_load_pspace_info);
e2207b9a
JK
592 set_program_space_data (pspace, auto_load_pspace_data, info);
593 }
594
595 return info;
596}
597
598/* Hash function for the loaded script hash. */
599
600static hashval_t
601hash_loaded_script_entry (const void *data)
602{
9a3c8263 603 const struct loaded_script *e = (const struct loaded_script *) data;
e2207b9a 604
bf88dd68 605 return htab_hash_string (e->name) ^ htab_hash_pointer (e->language);
e2207b9a
JK
606}
607
608/* Equality function for the loaded script hash. */
609
610static int
611eq_loaded_script_entry (const void *a, const void *b)
612{
9a3c8263
SM
613 const struct loaded_script *ea = (const struct loaded_script *) a;
614 const struct loaded_script *eb = (const struct loaded_script *) b;
e2207b9a 615
bf88dd68 616 return strcmp (ea->name, eb->name) == 0 && ea->language == eb->language;
e2207b9a
JK
617}
618
619/* Initialize the table to track loaded scripts.
620 Each entry is hashed by the full path name. */
621
622static void
623init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
624{
625 /* Choose 31 as the starting size of the hash table, somewhat arbitrarily.
626 Space for each entry is obtained with one malloc so we can free them
627 easily. */
628
9f050062
DE
629 pspace_info->loaded_script_files = htab_create (31,
630 hash_loaded_script_entry,
631 eq_loaded_script_entry,
632 xfree);
633 pspace_info->loaded_script_texts = htab_create (31,
634 hash_loaded_script_entry,
635 eq_loaded_script_entry,
636 xfree);
e2207b9a 637
6dddc817 638 pspace_info->unsupported_script_warning_printed = FALSE;
e2207b9a
JK
639 pspace_info->script_not_found_warning_printed = FALSE;
640}
641
642/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
643 for loading scripts. */
644
645struct auto_load_pspace_info *
646get_auto_load_pspace_data_for_loading (struct program_space *pspace)
647{
648 struct auto_load_pspace_info *info;
649
650 info = get_auto_load_pspace_data (pspace);
9f050062 651 if (info->loaded_script_files == NULL)
e2207b9a
JK
652 init_loaded_scripts_info (info);
653
654 return info;
655}
656
9f050062
DE
657/* Add script file NAME in LANGUAGE to hash table of PSPACE_INFO.
658 LOADED 1 if the script has been (is going to) be loaded, 0 otherwise
659 (such as if it has not been found).
660 FULL_PATH is NULL if the script wasn't found.
661 The result is true if the script was already in the hash table. */
e2207b9a 662
6dddc817 663static int
9f050062
DE
664maybe_add_script_file (struct auto_load_pspace_info *pspace_info, int loaded,
665 const char *name, const char *full_path,
666 const struct extension_language_defn *language)
e2207b9a 667{
9f050062 668 struct htab *htab = pspace_info->loaded_script_files;
e2207b9a
JK
669 struct loaded_script **slot, entry;
670 int in_hash_table;
671
672 entry.name = name;
bf88dd68 673 entry.language = language;
e2207b9a
JK
674 slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
675 in_hash_table = *slot != NULL;
676
677 /* If this script is not in the hash table, add it. */
678
9f050062 679 if (!in_hash_table)
e2207b9a
JK
680 {
681 char *p;
682
683 /* Allocate all space in one chunk so it's easier to free. */
224c3ddb
SM
684 *slot = ((struct loaded_script *)
685 xmalloc (sizeof (**slot)
686 + strlen (name) + 1
687 + (full_path != NULL ? (strlen (full_path) + 1) : 0)));
e2207b9a
JK
688 p = ((char*) *slot) + sizeof (**slot);
689 strcpy (p, name);
690 (*slot)->name = p;
691 if (full_path != NULL)
692 {
693 p += strlen (p) + 1;
694 strcpy (p, full_path);
695 (*slot)->full_path = p;
696 }
697 else
698 (*slot)->full_path = NULL;
bccbefd2 699 (*slot)->loaded = loaded;
bf88dd68 700 (*slot)->language = language;
e2207b9a
JK
701 }
702
703 return in_hash_table;
704}
705
9f050062
DE
706/* Add script contents NAME in LANGUAGE to hash table of PSPACE_INFO.
707 LOADED 1 if the script has been (is going to) be loaded, 0 otherwise
708 (such as if it has not been found).
709 The result is true if the script was already in the hash table. */
710
711static int
712maybe_add_script_text (struct auto_load_pspace_info *pspace_info,
713 int loaded, const char *name,
714 const struct extension_language_defn *language)
715{
716 struct htab *htab = pspace_info->loaded_script_texts;
717 struct loaded_script **slot, entry;
718 int in_hash_table;
719
720 entry.name = name;
721 entry.language = language;
722 slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
723 in_hash_table = *slot != NULL;
724
725 /* If this script is not in the hash table, add it. */
726
727 if (!in_hash_table)
728 {
729 char *p;
730
731 /* Allocate all space in one chunk so it's easier to free. */
224c3ddb
SM
732 *slot = ((struct loaded_script *)
733 xmalloc (sizeof (**slot) + strlen (name) + 1));
9f050062
DE
734 p = ((char*) *slot) + sizeof (**slot);
735 strcpy (p, name);
736 (*slot)->name = p;
737 (*slot)->full_path = NULL;
738 (*slot)->loaded = loaded;
739 (*slot)->language = language;
740 }
741
742 return in_hash_table;
743}
744
e2207b9a
JK
745/* Clear the table of loaded section scripts. */
746
747static void
748clear_section_scripts (void)
749{
750 struct program_space *pspace = current_program_space;
751 struct auto_load_pspace_info *info;
752
9a3c8263
SM
753 info = ((struct auto_load_pspace_info *)
754 program_space_data (pspace, auto_load_pspace_data));
9f050062 755 if (info != NULL && info->loaded_script_files != NULL)
e2207b9a 756 {
9f050062
DE
757 htab_delete (info->loaded_script_files);
758 htab_delete (info->loaded_script_texts);
759 info->loaded_script_files = NULL;
760 info->loaded_script_texts = NULL;
6dddc817 761 info->unsupported_script_warning_printed = FALSE;
e2207b9a
JK
762 info->script_not_found_warning_printed = FALSE;
763 }
764}
765
e9687799
JK
766/* Look for the auto-load script in LANGUAGE associated with OBJFILE where
767 OBJFILE's gdb_realpath is REALNAME and load it. Return 1 if we found any
768 matching script, return 0 otherwise. */
e2207b9a 769
e9687799
JK
770static int
771auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
6dddc817 772 const struct extension_language_defn *language)
e2207b9a 773{
e2207b9a 774 char *filename, *debugfile;
e9687799 775 int len, retval;
e2207b9a 776 struct cleanup *cleanups;
6dddc817 777 const char *suffix = ext_lang_auto_load_suffix (language);
e2207b9a 778
e2207b9a 779 len = strlen (realname);
224c3ddb 780 filename = (char *) xmalloc (len + strlen (suffix) + 1);
e2207b9a 781 memcpy (filename, realname, len);
6dddc817 782 strcpy (filename + len, suffix);
e2207b9a
JK
783
784 cleanups = make_cleanup (xfree, filename);
e2207b9a 785
d419f42d 786 gdb_file_up input = gdb_fopen_cloexec (filename, "r");
e2207b9a 787 debugfile = filename;
7349ff92
JK
788 if (debug_auto_load)
789 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
790 debugfile, input ? _("exists") : _("does not exist"));
e2207b9a 791
7349ff92 792 if (!input)
e2207b9a 793 {
7349ff92
JK
794 VEC (char_ptr) *vec;
795 int ix;
796 char *dir;
797
e2207b9a
JK
798 /* Also try the same file in a subdirectory of gdb's data
799 directory. */
7349ff92 800
1564a261 801 vec = auto_load_expand_dir_vars (auto_load_dir);
7349ff92
JK
802 make_cleanup_free_char_ptr_vec (vec);
803
804 if (debug_auto_load)
805 fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
806 "scripts-directory' path \"%s\".\n"),
807 auto_load_dir);
808
809 for (ix = 0; VEC_iterate (char_ptr, vec, ix, dir); ++ix)
810 {
224c3ddb 811 debugfile = (char *) xmalloc (strlen (dir) + strlen (filename) + 1);
1564a261 812 strcpy (debugfile, dir);
7349ff92
JK
813
814 /* FILENAME is absolute, so we don't need a "/" here. */
815 strcat (debugfile, filename);
816
817 make_cleanup (xfree, debugfile);
614c279d 818 input = gdb_fopen_cloexec (debugfile, "r");
7349ff92
JK
819 if (debug_auto_load)
820 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
821 "\"%s\" %s.\n"),
822 debugfile,
823 input ? _("exists") : _("does not exist"));
824 if (input != NULL)
825 break;
826 }
e2207b9a
JK
827 }
828
829 if (input)
830 {
5b2bf947
DE
831 int is_safe;
832 struct auto_load_pspace_info *pspace_info;
833
5b2bf947 834 is_safe
849c862e 835 = file_is_auto_load_safe (debugfile,
5b2bf947
DE
836 _("auto-load: Loading %s script \"%s\""
837 " by extension for objfile \"%s\".\n"),
6dddc817 838 ext_lang_name (language),
849c862e 839 debugfile, objfile_name (objfile));
5b2bf947
DE
840
841 /* Add this script to the hash table too so
842 "info auto-load ${lang}-scripts" can print it. */
843 pspace_info
844 = get_auto_load_pspace_data_for_loading (current_program_space);
9f050062
DE
845 maybe_add_script_file (pspace_info, is_safe, debugfile, debugfile,
846 language);
5b2bf947 847
e2207b9a
JK
848 /* To preserve existing behaviour we don't check for whether the
849 script was already in the table, and always load it.
850 It's highly unlikely that we'd ever load it twice,
851 and these scripts are required to be idempotent under multiple
852 loads anyway. */
5b2bf947 853 if (is_safe)
6dddc817
DE
854 {
855 objfile_script_sourcer_func *sourcer
856 = ext_lang_objfile_script_sourcer (language);
857
858 /* We shouldn't get here if support for the language isn't
859 compiled in. And the extension language is required to implement
860 this function. */
861 gdb_assert (sourcer != NULL);
d419f42d 862 sourcer (language, objfile, input.get (), debugfile);
6dddc817 863 }
e9687799
JK
864
865 retval = 1;
866 }
867 else
868 retval = 0;
869
870 do_cleanups (cleanups);
871 return retval;
872}
873
874/* Look for the auto-load script in LANGUAGE associated with OBJFILE and load
875 it. */
876
6dddc817 877void
e9687799 878auto_load_objfile_script (struct objfile *objfile,
6dddc817 879 const struct extension_language_defn *language)
e9687799 880{
14278e1f
TT
881 gdb::unique_xmalloc_ptr<char> realname
882 = gdb_realpath (objfile_name (objfile));
e9687799 883
14278e1f 884 if (!auto_load_objfile_script_1 (objfile, realname.get (), language))
e9687799
JK
885 {
886 /* For Windows/DOS .exe executables, strip the .exe suffix, so that
887 FOO-gdb.gdb could be used for FOO.exe, and try again. */
888
14278e1f 889 size_t len = strlen (realname.get ());
e9687799
JK
890 const size_t lexe = sizeof (".exe") - 1;
891
14278e1f 892 if (len > lexe && strcasecmp (realname.get () + len - lexe, ".exe") == 0)
e9687799
JK
893 {
894 len -= lexe;
14278e1f 895 realname.get ()[len] = '\0';
e9687799
JK
896 if (debug_auto_load)
897 fprintf_unfiltered (gdb_stdlog, _("auto-load: Stripped .exe suffix, "
898 "retrying with \"%s\".\n"),
14278e1f
TT
899 realname.get ());
900 auto_load_objfile_script_1 (objfile, realname.get (), language);
e9687799 901 }
e2207b9a 902 }
e2207b9a
JK
903}
904
9f050062
DE
905/* Subroutine of source_section_scripts to simplify it.
906 Load FILE as a script in extension language LANGUAGE.
907 The script is from section SECTION_NAME in OBJFILE at offset OFFSET. */
908
909static void
910source_script_file (struct auto_load_pspace_info *pspace_info,
911 struct objfile *objfile,
912 const struct extension_language_defn *language,
913 const char *section_name, unsigned int offset,
914 const char *file)
915{
ed166945 916 int in_hash_table;
9f050062
DE
917 objfile_script_sourcer_func *sourcer;
918
919 /* Skip this script if support is not compiled in. */
920 sourcer = ext_lang_objfile_script_sourcer (language);
921 if (sourcer == NULL)
922 {
923 /* We don't throw an error, the program is still debuggable. */
924 maybe_print_unsupported_script_warning (pspace_info, objfile, language,
925 section_name, offset);
926 /* We *could* still try to open it, but there's no point. */
927 maybe_add_script_file (pspace_info, 0, file, NULL, language);
928 return;
929 }
930
931 /* Skip this script if auto-loading it has been disabled. */
932 if (!ext_lang_auto_load_enabled (language))
933 {
934 /* No message is printed, just skip it. */
935 return;
936 }
937
ed166945
TT
938 gdb::optional<open_script> opened = find_and_open_script (file,
939 1 /*search_path*/);
9f050062 940
9f050062
DE
941 if (opened)
942 {
ed166945 943 if (!file_is_auto_load_safe (opened->full_path.get (),
9f050062
DE
944 _("auto-load: Loading %s script "
945 "\"%s\" from section \"%s\" of "
946 "objfile \"%s\".\n"),
ed166945
TT
947 ext_lang_name (language),
948 opened->full_path.get (),
9f050062 949 section_name, objfile_name (objfile)))
ed166945 950 opened.reset ();
9f050062
DE
951 }
952 else
953 {
9f050062
DE
954 /* If one script isn't found it's not uncommon for more to not be
955 found either. We don't want to print a message for each script,
956 too much noise. Instead, we print the warning once and tell the
957 user how to find the list of scripts that weren't loaded.
958 We don't throw an error, the program is still debuggable.
959
960 IWBN if complaints.c were more general-purpose. */
961
962 maybe_print_script_not_found_warning (pspace_info, objfile, language,
963 section_name, offset);
964 }
965
ed166945
TT
966 in_hash_table = maybe_add_script_file (pspace_info, bool (opened), file,
967 (opened
968 ? opened->full_path.get ()
969 : NULL),
9f050062
DE
970 language);
971
972 /* If this file is not currently loaded, load it. */
973 if (opened && !in_hash_table)
ed166945
TT
974 sourcer (language, objfile, opened->stream.get (),
975 opened->full_path.get ());
9f050062
DE
976}
977
978/* Subroutine of source_section_scripts to simplify it.
979 Execute SCRIPT as a script in extension language LANG.
980 The script is from section SECTION_NAME in OBJFILE at offset OFFSET. */
981
982static void
983execute_script_contents (struct auto_load_pspace_info *pspace_info,
984 struct objfile *objfile,
985 const struct extension_language_defn *language,
986 const char *section_name, unsigned int offset,
987 const char *script)
988{
989 objfile_script_executor_func *executor;
990 const char *newline, *script_text;
870f88f7 991 char *name;
9f050062
DE
992 int is_safe, in_hash_table;
993 struct cleanup *cleanups;
994
995 cleanups = make_cleanup (null_cleanup, NULL);
996
997 /* The first line of the script is the name of the script.
998 It must not contain any kind of space character. */
999 name = NULL;
1000 newline = strchr (script, '\n');
1001 if (newline != NULL)
1002 {
1003 char *buf, *p;
1004
1005 /* Put the name in a buffer and validate it. */
1006 buf = xstrndup (script, newline - script);
1007 make_cleanup (xfree, buf);
1008 for (p = buf; *p != '\0'; ++p)
1009 {
1010 if (isspace (*p))
1011 break;
1012 }
1013 /* We don't allow nameless scripts, they're not helpful to the user. */
1014 if (p != buf && *p == '\0')
1015 name = buf;
1016 }
1017 if (name == NULL)
1018 {
1019 /* We don't throw an error, the program is still debuggable. */
1020 warning (_("\
1021Missing/bad script name in entry at offset %u in section %s\n\
1022of file %s."),
1023 offset, section_name, objfile_name (objfile));
1024 do_cleanups (cleanups);
1025 return;
1026 }
1027 script_text = newline + 1;
1028
1029 /* Skip this script if support is not compiled in. */
1030 executor = ext_lang_objfile_script_executor (language);
1031 if (executor == NULL)
1032 {
1033 /* We don't throw an error, the program is still debuggable. */
1034 maybe_print_unsupported_script_warning (pspace_info, objfile, language,
1035 section_name, offset);
1036 maybe_add_script_text (pspace_info, 0, name, language);
1037 do_cleanups (cleanups);
1038 return;
1039 }
1040
1041 /* Skip this script if auto-loading it has been disabled. */
1042 if (!ext_lang_auto_load_enabled (language))
1043 {
1044 /* No message is printed, just skip it. */
1045 do_cleanups (cleanups);
1046 return;
1047 }
1048
1049 is_safe = file_is_auto_load_safe (objfile_name (objfile),
1050 _("auto-load: Loading %s script "
1051 "\"%s\" from section \"%s\" of "
1052 "objfile \"%s\".\n"),
1053 ext_lang_name (language), name,
1054 section_name, objfile_name (objfile));
1055
1056 in_hash_table = maybe_add_script_text (pspace_info, is_safe, name, language);
1057
1058 /* If this file is not currently loaded, load it. */
1059 if (is_safe && !in_hash_table)
1060 executor (language, objfile, name, script_text);
1061
1062 do_cleanups (cleanups);
1063}
1064
5b2bf947
DE
1065/* Load scripts specified in OBJFILE.
1066 START,END delimit a buffer containing a list of nul-terminated
1067 file names.
1068 SECTION_NAME is used in error messages.
1069
9f050062
DE
1070 Scripts specified as file names are found per normal "source -s" command
1071 processing. First the script is looked for in $cwd. If not found there
1072 the source search path is used.
5b2bf947 1073
9f050062
DE
1074 The section contains a list of path names of script files to load or
1075 actual script contents. Each entry is nul-terminated. */
5b2bf947
DE
1076
1077static void
1078source_section_scripts (struct objfile *objfile, const char *section_name,
1079 const char *start, const char *end)
1080{
1081 const char *p;
1082 struct auto_load_pspace_info *pspace_info;
1083
1084 pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
1085
1086 for (p = start; p < end; ++p)
1087 {
9f050062 1088 const char *entry;
ed3ef339 1089 const struct extension_language_defn *language;
9f050062
DE
1090 unsigned int offset = p - start;
1091 int code = *p;
5b2bf947 1092
9f050062 1093 switch (code)
5b2bf947 1094 {
ed3ef339 1095 case SECTION_SCRIPT_ID_PYTHON_FILE:
9f050062 1096 case SECTION_SCRIPT_ID_PYTHON_TEXT:
ed3ef339
DE
1097 language = get_ext_lang_defn (EXT_LANG_PYTHON);
1098 break;
1099 case SECTION_SCRIPT_ID_SCHEME_FILE:
9f050062 1100 case SECTION_SCRIPT_ID_SCHEME_TEXT:
ed3ef339
DE
1101 language = get_ext_lang_defn (EXT_LANG_GUILE);
1102 break;
1103 default:
5b2bf947
DE
1104 warning (_("Invalid entry in %s section"), section_name);
1105 /* We could try various heuristics to find the next valid entry,
1106 but it's safer to just punt. */
ed3ef339 1107 return;
5b2bf947 1108 }
9f050062 1109 entry = ++p;
5b2bf947
DE
1110
1111 while (p < end && *p != '\0')
1112 ++p;
1113 if (p == end)
1114 {
9f050062
DE
1115 warning (_("Non-nul-terminated entry in %s at offset %u"),
1116 section_name, offset);
1117 /* Don't load/execute it. */
5b2bf947
DE
1118 break;
1119 }
6dddc817 1120
9f050062 1121 switch (code)
6dddc817 1122 {
9f050062
DE
1123 case SECTION_SCRIPT_ID_PYTHON_FILE:
1124 case SECTION_SCRIPT_ID_SCHEME_FILE:
1125 if (p == entry)
6dddc817 1126 {
9f050062
DE
1127 warning (_("Empty entry in %s at offset %u"),
1128 section_name, offset);
1129 continue;
6dddc817 1130 }
9f050062
DE
1131 source_script_file (pspace_info, objfile, language,
1132 section_name, offset, entry);
1133 break;
1134 case SECTION_SCRIPT_ID_PYTHON_TEXT:
1135 case SECTION_SCRIPT_ID_SCHEME_TEXT:
1136 execute_script_contents (pspace_info, objfile, language,
1137 section_name, offset, entry);
1138 break;
5b2bf947 1139 }
5b2bf947
DE
1140 }
1141}
1142
1143/* Load scripts specified in section SECTION_NAME of OBJFILE. */
1144
1145static void
1146auto_load_section_scripts (struct objfile *objfile, const char *section_name)
1147{
1148 bfd *abfd = objfile->obfd;
1149 asection *scripts_sect;
1150 bfd_byte *data = NULL;
1151
1152 scripts_sect = bfd_get_section_by_name (abfd, section_name);
ec13808e
JK
1153 if (scripts_sect == NULL
1154 || (bfd_get_section_flags (abfd, scripts_sect) & SEC_HAS_CONTENTS) == 0)
5b2bf947
DE
1155 return;
1156
1157 if (!bfd_get_full_section_contents (abfd, scripts_sect, &data))
1158 warning (_("Couldn't read %s section of %s"),
1159 section_name, bfd_get_filename (abfd));
1160 else
1161 {
1162 struct cleanup *cleanups;
1163 char *p = (char *) data;
1164
1165 cleanups = make_cleanup (xfree, p);
1166 source_section_scripts (objfile, section_name, p,
1167 p + bfd_get_section_size (scripts_sect));
1168 do_cleanups (cleanups);
1169 }
1170}
1171
bf88dd68
JK
1172/* Load any auto-loaded scripts for OBJFILE. */
1173
1174void
1175load_auto_scripts_for_objfile (struct objfile *objfile)
1176{
c47cf547
DE
1177 /* Return immediately if auto-loading has been globally disabled.
1178 This is to handle sequencing of operations during gdb startup.
5fbae7d1
GB
1179 Also return immediately if OBJFILE was not created from a file
1180 on the local filesystem. */
1181 if (!global_auto_load
1182 || (objfile->flags & OBJF_NOT_FILENAME) != 0
1183 || is_target_filename (objfile->original_name))
bf88dd68
JK
1184 return;
1185
6dddc817
DE
1186 /* Load any extension language scripts for this objfile.
1187 E.g., foo-gdb.gdb, foo-gdb.py. */
1188 auto_load_ext_lang_scripts_for_objfile (objfile);
bf88dd68 1189
c47cf547 1190 /* Load any scripts mentioned in AUTO_SECTION_NAME (.debug_gdb_scripts). */
5b2bf947 1191 auto_load_section_scripts (objfile, AUTO_SECTION_NAME);
bf88dd68
JK
1192}
1193
e2207b9a
JK
1194/* This is a new_objfile observer callback to auto-load scripts.
1195
1196 Two flavors of auto-loaded scripts are supported.
1197 1) based on the path to the objfile
1198 2) from .debug_gdb_scripts section */
1199
1200static void
1201auto_load_new_objfile (struct objfile *objfile)
1202{
1203 if (!objfile)
1204 {
1205 /* OBJFILE is NULL when loading a new "main" symbol-file. */
1206 clear_section_scripts ();
1207 return;
1208 }
1209
1210 load_auto_scripts_for_objfile (objfile);
1211}
1212
1213/* Collect scripts to be printed in a vec. */
1214
bf88dd68
JK
1215struct collect_matching_scripts_data
1216{
6a1b9516
SM
1217 collect_matching_scripts_data (std::vector<loaded_script *> *scripts_p_,
1218 const extension_language_defn *language_)
1219 : scripts_p (scripts_p_), language (language_)
1220 {}
bf88dd68 1221
6a1b9516 1222 std::vector<loaded_script *> *scripts_p;
6dddc817 1223 const struct extension_language_defn *language;
bf88dd68
JK
1224};
1225
e2207b9a
JK
1226/* Traversal function for htab_traverse.
1227 Collect the entry if it matches the regexp. */
1228
1229static int
1230collect_matching_scripts (void **slot, void *info)
1231{
9a3c8263
SM
1232 struct loaded_script *script = (struct loaded_script *) *slot;
1233 struct collect_matching_scripts_data *data
1234 = (struct collect_matching_scripts_data *) info;
e2207b9a 1235
bf88dd68 1236 if (script->language == data->language && re_exec (script->name))
6a1b9516 1237 data->scripts_p->push_back (script);
e2207b9a
JK
1238
1239 return 1;
1240}
1241
1242/* Print SCRIPT. */
1243
1244static void
1245print_script (struct loaded_script *script)
1246{
1247 struct ui_out *uiout = current_uiout;
e2207b9a 1248
2e783024 1249 ui_out_emit_tuple tuple_emitter (uiout, NULL);
e2207b9a 1250
112e8700
SM
1251 uiout->field_string ("loaded", script->loaded ? "Yes" : "No");
1252 uiout->field_string ("script", script->name);
1253 uiout->text ("\n");
e2207b9a
JK
1254
1255 /* If the name isn't the full path, print it too. */
1256 if (script->full_path != NULL
1257 && strcmp (script->name, script->full_path) != 0)
1258 {
112e8700
SM
1259 uiout->text ("\tfull name: ");
1260 uiout->field_string ("full_path", script->full_path);
1261 uiout->text ("\n");
e2207b9a 1262 }
e2207b9a
JK
1263}
1264
1265/* Helper for info_auto_load_scripts to sort the scripts by name. */
1266
6a1b9516
SM
1267static bool
1268sort_scripts_by_name (loaded_script *a, loaded_script *b)
e2207b9a 1269{
6a1b9516 1270 return FILENAME_CMP (a->name, b->name) < 0;
e2207b9a
JK
1271}
1272
bf88dd68
JK
1273/* Special internal GDB value of auto_load_info_scripts's PATTERN identify
1274 the "info auto-load XXX" command has been executed through the general
1275 "info auto-load" invocation. Extra newline will be printed if needed. */
1276char auto_load_info_scripts_pattern_nl[] = "";
e2207b9a 1277
9f050062
DE
1278/* Subroutine of auto_load_info_scripts to simplify it.
1279 Print SCRIPTS. */
1280
1281static void
6a1b9516 1282print_scripts (const std::vector<loaded_script *> &scripts)
9f050062 1283{
6a1b9516 1284 for (loaded_script *script : scripts)
9f050062
DE
1285 print_script (script);
1286}
1287
bf88dd68
JK
1288/* Implementation for "info auto-load gdb-scripts"
1289 (and "info auto-load python-scripts"). List scripts in LANGUAGE matching
1290 PATTERN. FROM_TTY is the usual GDB boolean for user interactivity. */
1291
1292void
1d12d88f 1293auto_load_info_scripts (const char *pattern, int from_tty,
6dddc817 1294 const struct extension_language_defn *language)
e2207b9a
JK
1295{
1296 struct ui_out *uiout = current_uiout;
1297 struct auto_load_pspace_info *pspace_info;
e2207b9a
JK
1298
1299 dont_repeat ();
1300
1301 pspace_info = get_auto_load_pspace_data (current_program_space);
1302
1303 if (pattern && *pattern)
1304 {
1305 char *re_err = re_comp (pattern);
1306
1307 if (re_err)
1308 error (_("Invalid regexp: %s"), re_err);
1309 }
1310 else
1311 {
1312 re_comp ("");
1313 }
1314
1315 /* We need to know the number of rows before we build the table.
1316 Plus we want to sort the scripts by name.
1317 So first traverse the hash table collecting the matching scripts. */
1318
6a1b9516 1319 std::vector<loaded_script *> script_files, script_texts;
9f050062
DE
1320
1321 if (pspace_info != NULL && pspace_info->loaded_script_files != NULL)
1322 {
6a1b9516 1323 collect_matching_scripts_data data (&script_files, language);
9f050062
DE
1324
1325 /* Pass a pointer to scripts as VEC_safe_push can realloc space. */
1326 htab_traverse_noresize (pspace_info->loaded_script_files,
1327 collect_matching_scripts, &data);
6a1b9516
SM
1328
1329 std::sort (script_files.begin (), script_files.end (),
1330 sort_scripts_by_name);
9f050062 1331 }
e2207b9a 1332
9f050062 1333 if (pspace_info != NULL && pspace_info->loaded_script_texts != NULL)
e2207b9a 1334 {
6a1b9516 1335 collect_matching_scripts_data data (&script_texts, language);
bf88dd68 1336
e2207b9a 1337 /* Pass a pointer to scripts as VEC_safe_push can realloc space. */
9f050062 1338 htab_traverse_noresize (pspace_info->loaded_script_texts,
bf88dd68 1339 collect_matching_scripts, &data);
6a1b9516
SM
1340
1341 std::sort (script_texts.begin (), script_texts.end (),
1342 sort_scripts_by_name);
e2207b9a
JK
1343 }
1344
6a1b9516 1345 int nr_scripts = script_files.size () + script_texts.size ();
bf88dd68
JK
1346
1347 /* Table header shifted right by preceding "gdb-scripts: " would not match
1348 its columns. */
1349 if (nr_scripts > 0 && pattern == auto_load_info_scripts_pattern_nl)
112e8700 1350 uiout->text ("\n");
bf88dd68 1351
4a2b031d
TT
1352 {
1353 ui_out_emit_table table_emitter (uiout, 2, nr_scripts,
1354 "AutoLoadedScriptsTable");
e2207b9a 1355
4a2b031d
TT
1356 uiout->table_header (7, ui_left, "loaded", "Loaded");
1357 uiout->table_header (70, ui_left, "script", "Script");
1358 uiout->table_body ();
e2207b9a 1359
4a2b031d
TT
1360 print_scripts (script_files);
1361 print_scripts (script_texts);
1362 }
e2207b9a 1363
e2207b9a
JK
1364 if (nr_scripts == 0)
1365 {
1366 if (pattern && *pattern)
112e8700 1367 uiout->message ("No auto-load scripts matching %s.\n", pattern);
e2207b9a 1368 else
112e8700 1369 uiout->message ("No auto-load scripts.\n");
e2207b9a
JK
1370 }
1371}
1372
bf88dd68
JK
1373/* Wrapper for "info auto-load gdb-scripts". */
1374
1375static void
1d12d88f 1376info_auto_load_gdb_scripts (const char *pattern, int from_tty)
bf88dd68 1377{
6dddc817 1378 auto_load_info_scripts (pattern, from_tty, &extension_language_gdb);
bf88dd68
JK
1379}
1380
1381/* Implement 'info auto-load local-gdbinit'. */
1382
1383static void
1384info_auto_load_local_gdbinit (char *args, int from_tty)
1385{
1386 if (auto_load_local_gdbinit_pathname == NULL)
1387 printf_filtered (_("Local .gdbinit file was not found.\n"));
1388 else if (auto_load_local_gdbinit_loaded)
1389 printf_filtered (_("Local .gdbinit file \"%s\" has been loaded.\n"),
1390 auto_load_local_gdbinit_pathname);
1391 else
1392 printf_filtered (_("Local .gdbinit file \"%s\" has not been loaded.\n"),
1393 auto_load_local_gdbinit_pathname);
1394}
1395
9f050062
DE
1396/* Print an "unsupported script" warning if it has not already been printed.
1397 The script is in language LANGUAGE at offset OFFSET in section SECTION_NAME
1398 of OBJFILE. */
6dddc817 1399
9f050062
DE
1400static void
1401maybe_print_unsupported_script_warning
1402 (struct auto_load_pspace_info *pspace_info,
1403 struct objfile *objfile, const struct extension_language_defn *language,
1404 const char *section_name, unsigned offset)
6dddc817 1405{
9f050062
DE
1406 if (!pspace_info->unsupported_script_warning_printed)
1407 {
1408 warning (_("\
1409Unsupported auto-load script at offset %u in section %s\n\
1410of file %s.\n\
1411Use `info auto-load %s-scripts [REGEXP]' to list them."),
1412 offset, section_name, objfile_name (objfile),
1413 ext_lang_name (language));
1414 pspace_info->unsupported_script_warning_printed = 1;
1415 }
6dddc817
DE
1416}
1417
e2207b9a
JK
1418/* Return non-zero if SCRIPT_NOT_FOUND_WARNING_PRINTED of PSPACE_INFO was unset
1419 before calling this function. Always set SCRIPT_NOT_FOUND_WARNING_PRINTED
1420 of PSPACE_INFO. */
1421
9f050062
DE
1422static void
1423maybe_print_script_not_found_warning
1424 (struct auto_load_pspace_info *pspace_info,
1425 struct objfile *objfile, const struct extension_language_defn *language,
1426 const char *section_name, unsigned offset)
e2207b9a 1427{
9f050062
DE
1428 if (!pspace_info->script_not_found_warning_printed)
1429 {
1430 warning (_("\
1431Missing auto-load script at offset %u in section %s\n\
1432of file %s.\n\
1433Use `info auto-load %s-scripts [REGEXP]' to list them."),
1434 offset, section_name, objfile_name (objfile),
1435 ext_lang_name (language));
1436 pspace_info->script_not_found_warning_printed = 1;
1437 }
e2207b9a
JK
1438}
1439
bf88dd68
JK
1440/* The only valid "set auto-load" argument is off|0|no|disable. */
1441
1442static void
981a3fb3 1443set_auto_load_cmd (const char *args, int from_tty)
bf88dd68
JK
1444{
1445 struct cmd_list_element *list;
1446 size_t length;
1447
1448 /* See parse_binary_operation in use by the sub-commands. */
1449
1450 length = args ? strlen (args) : 0;
1451
1452 while (length > 0 && (args[length - 1] == ' ' || args[length - 1] == '\t'))
1453 length--;
1454
1455 if (length == 0 || (strncmp (args, "off", length) != 0
1456 && strncmp (args, "0", length) != 0
1457 && strncmp (args, "no", length) != 0
1458 && strncmp (args, "disable", length) != 0))
1459 error (_("Valid is only global 'set auto-load no'; "
1460 "otherwise check the auto-load sub-commands."));
1461
1462 for (list = *auto_load_set_cmdlist_get (); list != NULL; list = list->next)
1463 if (list->var_type == var_boolean)
1464 {
1465 gdb_assert (list->type == set_cmd);
5b9afe8a 1466 do_set_command (args, from_tty, list);
bf88dd68
JK
1467 }
1468}
1469
1470/* Initialize "set auto-load " commands prefix and return it. */
1471
1472struct cmd_list_element **
1473auto_load_set_cmdlist_get (void)
1474{
1475 static struct cmd_list_element *retval;
1476
1477 if (retval == NULL)
1478 add_prefix_cmd ("auto-load", class_maintenance, set_auto_load_cmd, _("\
1479Auto-loading specific settings.\n\
1480Configure various auto-load-specific variables such as\n\
1481automatic loading of Python scripts."),
1482 &retval, "set auto-load ",
1483 1/*allow-unknown*/, &setlist);
1484
1485 return &retval;
1486}
1487
1488/* Command "show auto-load" displays summary of all the current
1489 "show auto-load " settings. */
1490
1491static void
981a3fb3 1492show_auto_load_cmd (const char *args, int from_tty)
bf88dd68
JK
1493{
1494 cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, "");
1495}
1496
1497/* Initialize "show auto-load " commands prefix and return it. */
1498
1499struct cmd_list_element **
1500auto_load_show_cmdlist_get (void)
1501{
1502 static struct cmd_list_element *retval;
1503
1504 if (retval == NULL)
1505 add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\
1506Show auto-loading specific settings.\n\
1507Show configuration of various auto-load-specific variables such as\n\
1508automatic loading of Python scripts."),
1509 &retval, "show auto-load ",
1510 0/*allow-unknown*/, &showlist);
1511
1512 return &retval;
1513}
1514
1515/* Command "info auto-load" displays whether the various auto-load files have
1516 been loaded. This is reimplementation of cmd_show_list which inserts
1517 newlines at proper places. */
1518
1519static void
981a3fb3 1520info_auto_load_cmd (const char *args, int from_tty)
bf88dd68
JK
1521{
1522 struct cmd_list_element *list;
1523 struct cleanup *infolist_chain;
1524 struct ui_out *uiout = current_uiout;
1525
2e783024 1526 ui_out_emit_tuple tuple_emitter (uiout, "infolist");
bf88dd68
JK
1527
1528 for (list = *auto_load_info_cmdlist_get (); list != NULL; list = list->next)
1529 {
2e783024 1530 ui_out_emit_tuple option_emitter (uiout, "option");
bf88dd68
JK
1531
1532 gdb_assert (!list->prefixlist);
1533 gdb_assert (list->type == not_set_cmd);
1534
112e8700
SM
1535 uiout->field_string ("name", list->name);
1536 uiout->text (": ");
bf88dd68 1537 cmd_func (list, auto_load_info_scripts_pattern_nl, from_tty);
bf88dd68 1538 }
bf88dd68
JK
1539}
1540
1541/* Initialize "info auto-load " commands prefix and return it. */
1542
1543struct cmd_list_element **
1544auto_load_info_cmdlist_get (void)
1545{
1546 static struct cmd_list_element *retval;
1547
1548 if (retval == NULL)
1549 add_prefix_cmd ("auto-load", class_info, info_auto_load_cmd, _("\
1550Print current status of auto-loaded files.\n\
1551Print whether various files like Python scripts or .gdbinit files have been\n\
1552found and/or loaded."),
1553 &retval, "info auto-load ",
1554 0/*allow-unknown*/, &infolist);
1555
1556 return &retval;
1557}
1558
e2207b9a
JK
1559void
1560_initialize_auto_load (void)
1561{
bccbefd2 1562 struct cmd_list_element *cmd;
6dddc817 1563 char *scripts_directory_help, *gdb_name_help, *python_name_help;
ed3ef339
DE
1564 char *guile_name_help;
1565 const char *suffix;
bccbefd2 1566
e2207b9a 1567 auto_load_pspace_data
8e260fc0
TT
1568 = register_program_space_data_with_cleanup (NULL,
1569 auto_load_pspace_data_cleanup);
e2207b9a
JK
1570
1571 observer_attach_new_objfile (auto_load_new_objfile);
1572
bf88dd68
JK
1573 add_setshow_boolean_cmd ("gdb-scripts", class_support,
1574 &auto_load_gdb_scripts, _("\
1575Enable or disable auto-loading of canned sequences of commands scripts."), _("\
1576Show whether auto-loading of canned sequences of commands scripts is enabled."),
1577 _("\
1578If enabled, canned sequences of commands are loaded when the debugger reads\n\
1579an executable or shared library.\n\
1580This options has security implications for untrusted inferiors."),
1581 NULL, show_auto_load_gdb_scripts,
1582 auto_load_set_cmdlist_get (),
1583 auto_load_show_cmdlist_get ());
1584
1585 add_cmd ("gdb-scripts", class_info, info_auto_load_gdb_scripts,
1586 _("Print the list of automatically loaded sequences of commands.\n\
1587Usage: info auto-load gdb-scripts [REGEXP]"),
1588 auto_load_info_cmdlist_get ());
1589
1590 add_setshow_boolean_cmd ("local-gdbinit", class_support,
1591 &auto_load_local_gdbinit, _("\
1592Enable or disable auto-loading of .gdbinit script in current directory."), _("\
1593Show whether auto-loading .gdbinit script in current directory is enabled."),
1594 _("\
1595If enabled, canned sequences of commands are loaded when debugger starts\n\
1596from .gdbinit file in current directory. Such files are deprecated,\n\
1597use a script associated with inferior executable file instead.\n\
1598This options has security implications for untrusted inferiors."),
1599 NULL, show_auto_load_local_gdbinit,
1600 auto_load_set_cmdlist_get (),
1601 auto_load_show_cmdlist_get ());
1602
1603 add_cmd ("local-gdbinit", class_info, info_auto_load_local_gdbinit,
1604 _("Print whether current directory .gdbinit file has been loaded.\n\
1605Usage: info auto-load local-gdbinit"),
1606 auto_load_info_cmdlist_get ());
bccbefd2 1607
7349ff92 1608 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
6dddc817 1609
ed3ef339 1610 suffix = ext_lang_auto_load_suffix (get_ext_lang_defn (EXT_LANG_GDB));
6dddc817
DE
1611 gdb_name_help
1612 = xstrprintf (_("\
1613GDB scripts: OBJFILE%s\n"),
ed3ef339 1614 suffix);
6dddc817 1615 python_name_help = NULL;
9a950c7c 1616#ifdef HAVE_PYTHON
ed3ef339 1617 suffix = ext_lang_auto_load_suffix (get_ext_lang_defn (EXT_LANG_PYTHON));
6dddc817
DE
1618 python_name_help
1619 = xstrprintf (_("\
1620Python scripts: OBJFILE%s\n"),
ed3ef339
DE
1621 suffix);
1622#endif
1623 guile_name_help = NULL;
1624#ifdef HAVE_GUILE
1625 suffix = ext_lang_auto_load_suffix (get_ext_lang_defn (EXT_LANG_GUILE));
1626 guile_name_help
1627 = xstrprintf (_("\
1628Guile scripts: OBJFILE%s\n"),
1629 suffix);
9a950c7c 1630#endif
6dddc817
DE
1631 scripts_directory_help
1632 = xstrprintf (_("\
1633Automatically loaded scripts are located in one of the directories listed\n\
1634by this option.\n\
1635\n\
1636Script names:\n\
ed3ef339 1637%s%s%s\
6dddc817 1638\n\
9a950c7c
JK
1639This option is ignored for the kinds of scripts \
1640having 'set auto-load ... off'.\n\
1641Directories listed here need to be present also \
1642in the 'set auto-load safe-path'\n\
6dddc817
DE
1643option."),
1644 gdb_name_help,
ed3ef339
DE
1645 python_name_help ? python_name_help : "",
1646 guile_name_help ? guile_name_help : "");
6dddc817 1647
7349ff92
JK
1648 add_setshow_optional_filename_cmd ("scripts-directory", class_support,
1649 &auto_load_dir, _("\
1650Set the list of directories from which to load auto-loaded scripts."), _("\
9a950c7c
JK
1651Show the list of directories from which to load auto-loaded scripts."),
1652 scripts_directory_help,
7349ff92
JK
1653 set_auto_load_dir, show_auto_load_dir,
1654 auto_load_set_cmdlist_get (),
1655 auto_load_show_cmdlist_get ());
9a950c7c 1656 xfree (scripts_directory_help);
6dddc817
DE
1657 xfree (python_name_help);
1658 xfree (gdb_name_help);
ed3ef339 1659 xfree (guile_name_help);
7349ff92 1660
6dea1fbd 1661 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
bccbefd2
JK
1662 auto_load_safe_path_vec_update ();
1663 add_setshow_optional_filename_cmd ("safe-path", class_support,
1664 &auto_load_safe_path, _("\
9a950c7c
JK
1665Set the list of files and directories that are safe for auto-loading."), _("\
1666Show the list of files and directories that are safe for auto-loading."), _("\
bccbefd2
JK
1667Various files loaded automatically for the 'set auto-load ...' options must\n\
1668be located in one of the directories listed by this option. Warning will be\n\
af2c1515 1669printed and file will not be used otherwise.\n\
9a950c7c 1670You can mix both directory and filename entries.\n\
af2c1515
JK
1671Setting this parameter to an empty list resets it to its default value.\n\
1672Setting this parameter to '/' (without the quotes) allows any file\n\
9a950c7c 1673for the 'set auto-load ...' options. Each path entry can be also shell\n\
202cbf1c 1674wildcard pattern; '*' does not match directory separator.\n\
bccbefd2
JK
1675This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
1676This options has security implications for untrusted inferiors."),
1677 set_auto_load_safe_path,
1678 show_auto_load_safe_path,
1679 auto_load_set_cmdlist_get (),
1680 auto_load_show_cmdlist_get ());
6dea1fbd 1681 observer_attach_gdb_datadir_changed (auto_load_gdb_datadir_changed);
bccbefd2
JK
1682
1683 cmd = add_cmd ("add-auto-load-safe-path", class_support,
1684 add_auto_load_safe_path,
1685 _("Add entries to the list of directories from which it is safe "
1686 "to auto-load files.\n\
1687See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
1688access the current full list setting."),
1689 &cmdlist);
1690 set_cmd_completer (cmd, filename_completer);
4dc84fd1 1691
f10c5b19
JK
1692 cmd = add_cmd ("add-auto-load-scripts-directory", class_support,
1693 add_auto_load_dir,
1694 _("Add entries to the list of directories from which to load "
1695 "auto-loaded scripts.\n\
1696See the commands 'set auto-load scripts-directory' and\n\
1697'show auto-load scripts-directory' to access the current full list setting."),
1698 &cmdlist);
1699 set_cmd_completer (cmd, filename_completer);
1700
4dc84fd1
JK
1701 add_setshow_boolean_cmd ("auto-load", class_maintenance,
1702 &debug_auto_load, _("\
1703Set auto-load verifications debugging."), _("\
1704Show auto-load verifications debugging."), _("\
1705When non-zero, debugging output for files of 'set auto-load ...'\n\
1706is displayed."),
1707 NULL, show_debug_auto_load,
1708 &setdebuglist, &showdebuglist);
e2207b9a 1709}
This page took 0.481146 seconds and 4 git commands to generate.