1 /* GDB routines for supporting auto-loaded scripts.
3 Copyright (C) 2012 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
21 #include "auto-load.h"
22 #include "progspace.h"
23 #include "python/python.h"
24 #include "gdb_regex.h"
26 #include "filenames.h"
30 #include "exceptions.h"
31 #include "cli/cli-script.h"
33 #include "cli/cli-decode.h"
34 #include "cli/cli-setshow.h"
36 #include "readline/tilde.h"
37 #include "completer.h"
40 /* The suffix of per-objfile scripts to auto-load as non-Python command files.
41 E.g. When the program loads libfoo.so, look for libfoo-gdb.gdb. */
42 #define GDB_AUTO_FILE_NAME "-gdb.gdb"
44 static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
45 const char *filename);
47 /* Value of the 'set debug auto-load' configuration variable. */
48 static int debug_auto_load = 0;
50 /* "show" command for the debug_auto_load configuration variable. */
53 show_debug_auto_load (struct ui_file *file, int from_tty,
54 struct cmd_list_element *c, const char *value)
56 fprintf_filtered (file, _("Debugging output for files "
57 "of 'set auto-load ...' is %s.\n"),
61 /* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
63 set auto-load gdb-scripts on|off
64 This is true if we should auto-load associated scripts when an objfile
65 is opened, false otherwise. */
66 static int auto_load_gdb_scripts = 1;
68 /* "show" command for the auto_load_gdb_scripts configuration variable. */
71 show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
72 struct cmd_list_element *c, const char *value)
74 fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
79 /* Internal-use flag to enable/disable auto-loading.
80 This is true if we should auto-load python code when an objfile is opened,
83 Both auto_load_scripts && global_auto_load must be true to enable
86 This flag exists to facilitate deferring auto-loading during start-up
87 until after ./.gdbinit has been read; it may augment the search directories
88 used to find the scripts. */
89 int global_auto_load = 1;
91 /* Auto-load .gdbinit file from the current directory? */
92 int auto_load_local_gdbinit = 1;
94 /* Absolute pathname to the current directory .gdbinit, if it exists. */
95 char *auto_load_local_gdbinit_pathname = NULL;
97 /* Boolean value if AUTO_LOAD_LOCAL_GDBINIT_PATHNAME has been loaded. */
98 int auto_load_local_gdbinit_loaded = 0;
100 /* "show" command for the auto_load_local_gdbinit configuration variable. */
103 show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
104 struct cmd_list_element *c, const char *value)
106 fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
107 "directory is %s.\n"),
111 /* Directory list from which to load auto-loaded scripts. It is not checked
112 for absolute paths but they are strongly recommended. It is initialized by
113 _initialize_auto_load. */
114 static char *auto_load_dir;
116 /* "set" command for the auto_load_dir configuration variable. */
119 set_auto_load_dir (char *args, int from_tty, struct cmd_list_element *c)
121 /* Setting the variable to "" resets it to the compile time defaults. */
122 if (auto_load_dir[0] == '\0')
124 xfree (auto_load_dir);
125 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
129 /* "show" command for the auto_load_dir configuration variable. */
132 show_auto_load_dir (struct ui_file *file, int from_tty,
133 struct cmd_list_element *c, const char *value)
135 fprintf_filtered (file, _("List of directories from which to load "
136 "auto-loaded scripts is %s.\n"),
140 /* Directory list safe to hold auto-loaded files. It is not checked for
141 absolute paths but they are strongly recommended. It is initialized by
142 _initialize_auto_load. */
143 static char *auto_load_safe_path;
145 /* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
146 by tilde_expand and possibly each entries has added its gdb_realpath
148 static VEC (char_ptr) *auto_load_safe_path_vec;
150 /* Expand $datadir and $debugdir in STRING according to the rules of
151 substitute_path_component. Return vector from dirnames_to_char_ptr_vec,
152 this vector must be freed by free_char_ptr_vec by the caller. */
154 static VEC (char_ptr) *
155 auto_load_expand_dir_vars (const char *string)
157 VEC (char_ptr) *dir_vec;
160 s = xstrdup (string);
161 substitute_path_component (&s, "$datadir", gdb_datadir);
162 substitute_path_component (&s, "$debugdir", debug_file_directory);
164 if (debug_auto_load && strcmp (s, string) != 0)
165 fprintf_unfiltered (gdb_stdlog,
166 _("auto-load: Expanded $-variables to \"%s\".\n"), s);
168 dir_vec = dirnames_to_char_ptr_vec (s);
174 /* Update auto_load_safe_path_vec from current AUTO_LOAD_SAFE_PATH. */
177 auto_load_safe_path_vec_update (void)
179 VEC (char_ptr) *dir_vec = NULL;
184 fprintf_unfiltered (gdb_stdlog,
185 _("auto-load: Updating directories of \"%s\".\n"),
186 auto_load_safe_path);
188 free_char_ptr_vec (auto_load_safe_path_vec);
190 auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
191 len = VEC_length (char_ptr, auto_load_safe_path_vec);
193 /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
195 for (ix = 0; ix < len; ix++)
197 char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
198 char *expanded = tilde_expand (dir);
199 char *real_path = gdb_realpath (expanded);
201 /* Ensure the current entry is at least tilde_expand-ed. */
202 VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
206 if (strcmp (expanded, dir) == 0)
207 fprintf_unfiltered (gdb_stdlog,
208 _("auto-load: Using directory \"%s\".\n"),
211 fprintf_unfiltered (gdb_stdlog,
212 _("auto-load: Resolved directory \"%s\" "
218 /* If gdb_realpath returns a different content, append it. */
219 if (strcmp (real_path, expanded) == 0)
223 VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
226 fprintf_unfiltered (gdb_stdlog,
227 _("auto-load: And canonicalized as \"%s\".\n"),
233 /* Variable gdb_datadir has been set. Update content depending on $datadir. */
236 auto_load_gdb_datadir_changed (void)
238 auto_load_safe_path_vec_update ();
241 /* "set" command for the auto_load_safe_path configuration variable. */
244 set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
246 /* Setting the variable to "" resets it to the compile time defaults. */
247 if (auto_load_safe_path[0] == '\0')
249 xfree (auto_load_safe_path);
250 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
253 auto_load_safe_path_vec_update ();
256 /* "show" command for the auto_load_safe_path configuration variable. */
259 show_auto_load_safe_path (struct ui_file *file, int from_tty,
260 struct cmd_list_element *c, const char *value)
264 /* Check if user has entered either "/" or for example ":".
265 But while more complicate content like ":/foo" would still also
266 permit any location do not hide those. */
268 for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
271 fprintf_filtered (file, _("Auto-load files are safe to load from any "
274 fprintf_filtered (file, _("List of directories from which it is safe to "
275 "auto-load files is %s.\n"),
279 /* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
283 add_auto_load_safe_path (char *args, int from_tty)
287 if (args == NULL || *args == 0)
289 Directory argument required.\n\
290 Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
293 s = xstrprintf ("%s%c%s", auto_load_safe_path, DIRNAME_SEPARATOR, args);
294 xfree (auto_load_safe_path);
295 auto_load_safe_path = s;
297 auto_load_safe_path_vec_update ();
300 /* Return 1 if FILENAME is equal to DIR or if FILENAME belongs to the
301 subdirectory DIR. Return 0 otherwise. gdb_realpath normalization is never
304 static ATTRIBUTE_PURE int
305 filename_is_in_dir (const char *filename, const char *dir)
307 size_t dir_len = strlen (dir);
309 while (dir_len && IS_DIR_SEPARATOR (dir[dir_len - 1]))
312 /* Ensure auto_load_safe_path "/" matches any FILENAME. On MS-Windows
313 platform FILENAME even after gdb_realpath does not have to start with
314 IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename. */
318 return (filename_ncmp (dir, filename, dir_len) == 0
319 && (IS_DIR_SEPARATOR (filename[dir_len])
320 || filename[dir_len] == '\0'));
323 /* Return 1 if FILENAME belongs to one of directory components of
324 AUTO_LOAD_SAFE_PATH_VEC. Return 0 otherwise.
325 auto_load_safe_path_vec_update is never called.
326 *FILENAME_REALP may be updated by gdb_realpath of FILENAME - it has to be
327 freed by the caller. */
330 filename_is_in_auto_load_safe_path_vec (const char *filename,
331 char **filename_realp)
336 for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir); ++ix)
337 if (*filename_realp == NULL && filename_is_in_dir (filename, dir))
342 if (*filename_realp == NULL)
344 *filename_realp = gdb_realpath (filename);
345 if (debug_auto_load && strcmp (*filename_realp, filename) != 0)
346 fprintf_unfiltered (gdb_stdlog,
347 _("auto-load: Resolved "
348 "file \"%s\" as \"%s\".\n"),
349 filename, *filename_realp);
352 if (strcmp (*filename_realp, filename) != 0)
353 for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
355 if (filename_is_in_dir (*filename_realp, dir))
362 fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
363 "directory \"%s\".\n"),
371 /* Return 1 if FILENAME is located in one of the directories of
372 AUTO_LOAD_SAFE_PATH. Otherwise call warning and return 0. FILENAME does
373 not have to be an absolute path.
375 Existence of FILENAME is not checked. Function will still give a warning
376 even if the caller would quietly skip non-existing file in unsafe
380 file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
382 char *filename_real = NULL;
383 struct cleanup *back_to;
389 va_start (debug_args, debug_fmt);
390 vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
394 back_to = make_cleanup (free_current_contents, &filename_real);
396 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
398 do_cleanups (back_to);
402 auto_load_safe_path_vec_update ();
403 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
405 do_cleanups (back_to);
409 warning (_("File \"%s\" auto-loading has been declined by your "
410 "`auto-load safe-path' set to \"%s\"."),
411 filename_real, auto_load_safe_path);
413 do_cleanups (back_to);
417 /* Definition of script language for GDB canned sequences of commands. */
419 static const struct script_language script_language_gdb
420 = { GDB_AUTO_FILE_NAME, source_gdb_script_for_objfile };
423 source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
424 const char *filename)
427 struct auto_load_pspace_info *pspace_info;
428 volatile struct gdb_exception e;
430 is_safe = file_is_auto_load_safe (filename, _("auto-load: Loading canned "
431 "sequences of commands script "
432 "\"%s\" for objfile \"%s\".\n"),
433 filename, objfile->name);
435 /* Add this script to the hash table too so "info auto-load gdb-scripts"
437 pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
438 maybe_add_script (pspace_info, is_safe, filename, filename,
439 &script_language_gdb);
444 TRY_CATCH (e, RETURN_MASK_ALL)
446 script_from_file (file, filename);
448 exception_print (gdb_stderr, e);
451 /* For scripts specified in .debug_gdb_scripts, multiple objfiles may load
452 the same script. There's no point in loading the script multiple times,
453 and there can be a lot of objfiles and scripts, so we keep track of scripts
456 struct auto_load_pspace_info
458 /* For each program space we keep track of loaded scripts. */
459 struct htab *loaded_scripts;
461 /* Non-zero if we've issued the warning about an auto-load script not being
462 found. We only want to issue this warning once. */
463 int script_not_found_warning_printed;
466 /* Objects of this type are stored in the loaded script hash table. */
470 /* Name as provided by the objfile. */
473 /* Full path name or NULL if script wasn't found (or was otherwise
475 const char *full_path;
477 /* Non-zero if this script has been loaded. */
480 const struct script_language *language;
483 /* Per-program-space data key. */
484 static const struct program_space_data *auto_load_pspace_data;
487 auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
489 struct auto_load_pspace_info *info;
491 info = program_space_data (pspace, auto_load_pspace_data);
494 if (info->loaded_scripts)
495 htab_delete (info->loaded_scripts);
500 /* Get the current autoload data. If none is found yet, add it now. This
501 function always returns a valid object. */
503 static struct auto_load_pspace_info *
504 get_auto_load_pspace_data (struct program_space *pspace)
506 struct auto_load_pspace_info *info;
508 info = program_space_data (pspace, auto_load_pspace_data);
511 info = XZALLOC (struct auto_load_pspace_info);
512 set_program_space_data (pspace, auto_load_pspace_data, info);
518 /* Hash function for the loaded script hash. */
521 hash_loaded_script_entry (const void *data)
523 const struct loaded_script *e = data;
525 return htab_hash_string (e->name) ^ htab_hash_pointer (e->language);
528 /* Equality function for the loaded script hash. */
531 eq_loaded_script_entry (const void *a, const void *b)
533 const struct loaded_script *ea = a;
534 const struct loaded_script *eb = b;
536 return strcmp (ea->name, eb->name) == 0 && ea->language == eb->language;
539 /* Initialize the table to track loaded scripts.
540 Each entry is hashed by the full path name. */
543 init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
545 /* Choose 31 as the starting size of the hash table, somewhat arbitrarily.
546 Space for each entry is obtained with one malloc so we can free them
549 pspace_info->loaded_scripts = htab_create (31,
550 hash_loaded_script_entry,
551 eq_loaded_script_entry,
554 pspace_info->script_not_found_warning_printed = FALSE;
557 /* Wrapper on get_auto_load_pspace_data to also allocate the hash table
558 for loading scripts. */
560 struct auto_load_pspace_info *
561 get_auto_load_pspace_data_for_loading (struct program_space *pspace)
563 struct auto_load_pspace_info *info;
565 info = get_auto_load_pspace_data (pspace);
566 if (info->loaded_scripts == NULL)
567 init_loaded_scripts_info (info);
572 /* Add script NAME in LANGUAGE to hash table of PSPACE_INFO. LOADED 1 if the
573 script has been (is going to) be loaded, 0 otherwise (such as if it has not
574 been found). FULL_PATH is NULL if the script wasn't found. The result is
575 true if the script was already in the hash table. */
578 maybe_add_script (struct auto_load_pspace_info *pspace_info, int loaded,
579 const char *name, const char *full_path,
580 const struct script_language *language)
582 struct htab *htab = pspace_info->loaded_scripts;
583 struct loaded_script **slot, entry;
587 entry.language = language;
588 slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
589 in_hash_table = *slot != NULL;
591 /* If this script is not in the hash table, add it. */
597 /* Allocate all space in one chunk so it's easier to free. */
598 *slot = xmalloc (sizeof (**slot)
600 + (full_path != NULL ? (strlen (full_path) + 1) : 0));
601 p = ((char*) *slot) + sizeof (**slot);
604 if (full_path != NULL)
607 strcpy (p, full_path);
608 (*slot)->full_path = p;
611 (*slot)->full_path = NULL;
612 (*slot)->loaded = loaded;
613 (*slot)->language = language;
616 return in_hash_table;
619 /* Clear the table of loaded section scripts. */
622 clear_section_scripts (void)
624 struct program_space *pspace = current_program_space;
625 struct auto_load_pspace_info *info;
627 info = program_space_data (pspace, auto_load_pspace_data);
628 if (info != NULL && info->loaded_scripts != NULL)
630 htab_delete (info->loaded_scripts);
631 info->loaded_scripts = NULL;
632 info->script_not_found_warning_printed = FALSE;
636 /* Look for the auto-load script in LANGUAGE associated with OBJFILE and load
640 auto_load_objfile_script (struct objfile *objfile,
641 const struct script_language *language)
644 char *filename, *debugfile;
647 struct cleanup *cleanups;
649 realname = gdb_realpath (objfile->name);
650 len = strlen (realname);
651 filename = xmalloc (len + strlen (language->suffix) + 1);
652 memcpy (filename, realname, len);
653 strcpy (filename + len, language->suffix);
655 cleanups = make_cleanup (xfree, filename);
656 make_cleanup (xfree, realname);
658 input = fopen (filename, "r");
659 debugfile = filename;
661 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
662 debugfile, input ? _("exists") : _("does not exist"));
670 /* Also try the same file in a subdirectory of gdb's data
673 vec = auto_load_expand_dir_vars (auto_load_dir);
674 make_cleanup_free_char_ptr_vec (vec);
677 fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
678 "scripts-directory' path \"%s\".\n"),
681 for (ix = 0; VEC_iterate (char_ptr, vec, ix, dir); ++ix)
683 debugfile = xmalloc (strlen (dir) + strlen (filename) + 1);
684 strcpy (debugfile, dir);
686 /* FILENAME is absolute, so we don't need a "/" here. */
687 strcat (debugfile, filename);
689 make_cleanup (xfree, debugfile);
690 input = fopen (debugfile, "r");
692 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
695 input ? _("exists") : _("does not exist"));
703 make_cleanup_fclose (input);
705 /* To preserve existing behaviour we don't check for whether the
706 script was already in the table, and always load it.
707 It's highly unlikely that we'd ever load it twice,
708 and these scripts are required to be idempotent under multiple
710 language->source_script_for_objfile (objfile, input, debugfile);
713 do_cleanups (cleanups);
716 /* Load any auto-loaded scripts for OBJFILE. */
719 load_auto_scripts_for_objfile (struct objfile *objfile)
721 if (!global_auto_load)
724 if (auto_load_gdb_scripts)
725 auto_load_objfile_script (objfile, &script_language_gdb);
727 gdbpy_load_auto_scripts_for_objfile (objfile);
730 /* This is a new_objfile observer callback to auto-load scripts.
732 Two flavors of auto-loaded scripts are supported.
733 1) based on the path to the objfile
734 2) from .debug_gdb_scripts section */
737 auto_load_new_objfile (struct objfile *objfile)
741 /* OBJFILE is NULL when loading a new "main" symbol-file. */
742 clear_section_scripts ();
746 load_auto_scripts_for_objfile (objfile);
749 /* Collect scripts to be printed in a vec. */
751 typedef struct loaded_script *loaded_script_ptr;
752 DEF_VEC_P (loaded_script_ptr);
754 struct collect_matching_scripts_data
756 VEC (loaded_script_ptr) **scripts_p;
758 const struct script_language *language;
761 /* Traversal function for htab_traverse.
762 Collect the entry if it matches the regexp. */
765 collect_matching_scripts (void **slot, void *info)
767 struct loaded_script *script = *slot;
768 struct collect_matching_scripts_data *data = info;
770 if (script->language == data->language && re_exec (script->name))
771 VEC_safe_push (loaded_script_ptr, *data->scripts_p, script);
779 print_script (struct loaded_script *script)
781 struct ui_out *uiout = current_uiout;
782 struct cleanup *chain;
784 chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
786 ui_out_field_string (uiout, "loaded", script->loaded ? "Yes" : "No");
787 ui_out_field_string (uiout, "script", script->name);
788 ui_out_text (uiout, "\n");
790 /* If the name isn't the full path, print it too. */
791 if (script->full_path != NULL
792 && strcmp (script->name, script->full_path) != 0)
794 ui_out_text (uiout, "\tfull name: ");
795 ui_out_field_string (uiout, "full_path", script->full_path);
796 ui_out_text (uiout, "\n");
802 /* Helper for info_auto_load_scripts to sort the scripts by name. */
805 sort_scripts_by_name (const void *ap, const void *bp)
807 const struct loaded_script *a = *(const struct loaded_script **) ap;
808 const struct loaded_script *b = *(const struct loaded_script **) bp;
810 return FILENAME_CMP (a->name, b->name);
813 /* Special internal GDB value of auto_load_info_scripts's PATTERN identify
814 the "info auto-load XXX" command has been executed through the general
815 "info auto-load" invocation. Extra newline will be printed if needed. */
816 char auto_load_info_scripts_pattern_nl[] = "";
818 /* Implementation for "info auto-load gdb-scripts"
819 (and "info auto-load python-scripts"). List scripts in LANGUAGE matching
820 PATTERN. FROM_TTY is the usual GDB boolean for user interactivity. */
823 auto_load_info_scripts (char *pattern, int from_tty,
824 const struct script_language *language)
826 struct ui_out *uiout = current_uiout;
827 struct auto_load_pspace_info *pspace_info;
828 struct cleanup *script_chain;
829 VEC (loaded_script_ptr) *scripts;
834 pspace_info = get_auto_load_pspace_data (current_program_space);
836 if (pattern && *pattern)
838 char *re_err = re_comp (pattern);
841 error (_("Invalid regexp: %s"), re_err);
848 /* We need to know the number of rows before we build the table.
849 Plus we want to sort the scripts by name.
850 So first traverse the hash table collecting the matching scripts. */
852 scripts = VEC_alloc (loaded_script_ptr, 10);
853 script_chain = make_cleanup (VEC_cleanup (loaded_script_ptr), &scripts);
855 if (pspace_info != NULL && pspace_info->loaded_scripts != NULL)
857 struct collect_matching_scripts_data data = { &scripts, language };
860 /* Pass a pointer to scripts as VEC_safe_push can realloc space. */
861 htab_traverse_noresize (pspace_info->loaded_scripts,
862 collect_matching_scripts, &data);
866 nr_scripts = VEC_length (loaded_script_ptr, scripts);
868 /* Table header shifted right by preceding "gdb-scripts: " would not match
870 if (nr_scripts > 0 && pattern == auto_load_info_scripts_pattern_nl)
871 ui_out_text (uiout, "\n");
873 make_cleanup_ui_out_table_begin_end (uiout, 2, nr_scripts,
874 "AutoLoadedScriptsTable");
876 ui_out_table_header (uiout, 7, ui_left, "loaded", "Loaded");
877 ui_out_table_header (uiout, 70, ui_left, "script", "Script");
878 ui_out_table_body (uiout);
883 loaded_script_ptr script;
885 qsort (VEC_address (loaded_script_ptr, scripts),
886 VEC_length (loaded_script_ptr, scripts),
887 sizeof (loaded_script_ptr), sort_scripts_by_name);
888 for (i = 0; VEC_iterate (loaded_script_ptr, scripts, i, script); ++i)
889 print_script (script);
892 do_cleanups (script_chain);
896 if (pattern && *pattern)
897 ui_out_message (uiout, 0, "No auto-load scripts matching %s.\n",
900 ui_out_message (uiout, 0, "No auto-load scripts.\n");
904 /* Wrapper for "info auto-load gdb-scripts". */
907 info_auto_load_gdb_scripts (char *pattern, int from_tty)
909 auto_load_info_scripts (pattern, from_tty, &script_language_gdb);
912 /* Implement 'info auto-load local-gdbinit'. */
915 info_auto_load_local_gdbinit (char *args, int from_tty)
917 if (auto_load_local_gdbinit_pathname == NULL)
918 printf_filtered (_("Local .gdbinit file was not found.\n"));
919 else if (auto_load_local_gdbinit_loaded)
920 printf_filtered (_("Local .gdbinit file \"%s\" has been loaded.\n"),
921 auto_load_local_gdbinit_pathname);
923 printf_filtered (_("Local .gdbinit file \"%s\" has not been loaded.\n"),
924 auto_load_local_gdbinit_pathname);
927 /* Return non-zero if SCRIPT_NOT_FOUND_WARNING_PRINTED of PSPACE_INFO was unset
928 before calling this function. Always set SCRIPT_NOT_FOUND_WARNING_PRINTED
932 script_not_found_warning_print (struct auto_load_pspace_info *pspace_info)
934 int retval = !pspace_info->script_not_found_warning_printed;
936 pspace_info->script_not_found_warning_printed = 1;
941 /* The only valid "set auto-load" argument is off|0|no|disable. */
944 set_auto_load_cmd (char *args, int from_tty)
946 struct cmd_list_element *list;
949 /* See parse_binary_operation in use by the sub-commands. */
951 length = args ? strlen (args) : 0;
953 while (length > 0 && (args[length - 1] == ' ' || args[length - 1] == '\t'))
956 if (length == 0 || (strncmp (args, "off", length) != 0
957 && strncmp (args, "0", length) != 0
958 && strncmp (args, "no", length) != 0
959 && strncmp (args, "disable", length) != 0))
960 error (_("Valid is only global 'set auto-load no'; "
961 "otherwise check the auto-load sub-commands."));
963 for (list = *auto_load_set_cmdlist_get (); list != NULL; list = list->next)
964 if (list->var_type == var_boolean)
966 gdb_assert (list->type == set_cmd);
967 do_setshow_command (args, from_tty, list);
971 /* Initialize "set auto-load " commands prefix and return it. */
973 struct cmd_list_element **
974 auto_load_set_cmdlist_get (void)
976 static struct cmd_list_element *retval;
979 add_prefix_cmd ("auto-load", class_maintenance, set_auto_load_cmd, _("\
980 Auto-loading specific settings.\n\
981 Configure various auto-load-specific variables such as\n\
982 automatic loading of Python scripts."),
983 &retval, "set auto-load ",
984 1/*allow-unknown*/, &setlist);
989 /* Command "show auto-load" displays summary of all the current
990 "show auto-load " settings. */
993 show_auto_load_cmd (char *args, int from_tty)
995 cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, "");
998 /* Initialize "show auto-load " commands prefix and return it. */
1000 struct cmd_list_element **
1001 auto_load_show_cmdlist_get (void)
1003 static struct cmd_list_element *retval;
1006 add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\
1007 Show auto-loading specific settings.\n\
1008 Show configuration of various auto-load-specific variables such as\n\
1009 automatic loading of Python scripts."),
1010 &retval, "show auto-load ",
1011 0/*allow-unknown*/, &showlist);
1016 /* Command "info auto-load" displays whether the various auto-load files have
1017 been loaded. This is reimplementation of cmd_show_list which inserts
1018 newlines at proper places. */
1021 info_auto_load_cmd (char *args, int from_tty)
1023 struct cmd_list_element *list;
1024 struct cleanup *infolist_chain;
1025 struct ui_out *uiout = current_uiout;
1027 infolist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "infolist");
1029 for (list = *auto_load_info_cmdlist_get (); list != NULL; list = list->next)
1031 struct cleanup *option_chain
1032 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
1034 gdb_assert (!list->prefixlist);
1035 gdb_assert (list->type == not_set_cmd);
1037 ui_out_field_string (uiout, "name", list->name);
1038 ui_out_text (uiout, ": ");
1039 cmd_func (list, auto_load_info_scripts_pattern_nl, from_tty);
1041 /* Close the tuple. */
1042 do_cleanups (option_chain);
1045 /* Close the tuple. */
1046 do_cleanups (infolist_chain);
1049 /* Initialize "info auto-load " commands prefix and return it. */
1051 struct cmd_list_element **
1052 auto_load_info_cmdlist_get (void)
1054 static struct cmd_list_element *retval;
1057 add_prefix_cmd ("auto-load", class_info, info_auto_load_cmd, _("\
1058 Print current status of auto-loaded files.\n\
1059 Print whether various files like Python scripts or .gdbinit files have been\n\
1060 found and/or loaded."),
1061 &retval, "info auto-load ",
1062 0/*allow-unknown*/, &infolist);
1067 void _initialize_auto_load (void);
1070 _initialize_auto_load (void)
1072 struct cmd_list_element *cmd;
1074 auto_load_pspace_data
1075 = register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup);
1077 observer_attach_new_objfile (auto_load_new_objfile);
1079 add_setshow_boolean_cmd ("gdb-scripts", class_support,
1080 &auto_load_gdb_scripts, _("\
1081 Enable or disable auto-loading of canned sequences of commands scripts."), _("\
1082 Show whether auto-loading of canned sequences of commands scripts is enabled."),
1084 If enabled, canned sequences of commands are loaded when the debugger reads\n\
1085 an executable or shared library.\n\
1086 This options has security implications for untrusted inferiors."),
1087 NULL, show_auto_load_gdb_scripts,
1088 auto_load_set_cmdlist_get (),
1089 auto_load_show_cmdlist_get ());
1091 add_cmd ("gdb-scripts", class_info, info_auto_load_gdb_scripts,
1092 _("Print the list of automatically loaded sequences of commands.\n\
1093 Usage: info auto-load gdb-scripts [REGEXP]"),
1094 auto_load_info_cmdlist_get ());
1096 add_setshow_boolean_cmd ("local-gdbinit", class_support,
1097 &auto_load_local_gdbinit, _("\
1098 Enable or disable auto-loading of .gdbinit script in current directory."), _("\
1099 Show whether auto-loading .gdbinit script in current directory is enabled."),
1101 If enabled, canned sequences of commands are loaded when debugger starts\n\
1102 from .gdbinit file in current directory. Such files are deprecated,\n\
1103 use a script associated with inferior executable file instead.\n\
1104 This options has security implications for untrusted inferiors."),
1105 NULL, show_auto_load_local_gdbinit,
1106 auto_load_set_cmdlist_get (),
1107 auto_load_show_cmdlist_get ());
1109 add_cmd ("local-gdbinit", class_info, info_auto_load_local_gdbinit,
1110 _("Print whether current directory .gdbinit file has been loaded.\n\
1111 Usage: info auto-load local-gdbinit"),
1112 auto_load_info_cmdlist_get ());
1114 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
1115 add_setshow_optional_filename_cmd ("scripts-directory", class_support,
1116 &auto_load_dir, _("\
1117 Set the list of directories from which to load auto-loaded scripts."), _("\
1118 Show the list of directories from which to load auto-loaded scripts."), _("\
1119 Automatically loaded Python scripts and GDB scripts are located in one of the\n\
1120 directories listed by this option. This option is ignored for the kinds of\n\
1121 scripts having 'set auto-load ... off'. Directories listed here need to be\n\
1122 present also in the 'set auto-load safe-path' option."),
1123 set_auto_load_dir, show_auto_load_dir,
1124 auto_load_set_cmdlist_get (),
1125 auto_load_show_cmdlist_get ());
1127 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
1128 auto_load_safe_path_vec_update ();
1129 add_setshow_optional_filename_cmd ("safe-path", class_support,
1130 &auto_load_safe_path, _("\
1131 Set the list of directories from which it is safe to auto-load files."), _("\
1132 Show the list of directories from which it is safe to auto-load files."), _("\
1133 Various files loaded automatically for the 'set auto-load ...' options must\n\
1134 be located in one of the directories listed by this option. Warning will be\n\
1135 printed and file will not be used otherwise.\n\
1136 Setting this parameter to an empty list resets it to its default value.\n\
1137 Setting this parameter to '/' (without the quotes) allows any file\n\
1138 for the 'set auto-load ...' options.\n\
1139 This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
1140 This options has security implications for untrusted inferiors."),
1141 set_auto_load_safe_path,
1142 show_auto_load_safe_path,
1143 auto_load_set_cmdlist_get (),
1144 auto_load_show_cmdlist_get ());
1145 observer_attach_gdb_datadir_changed (auto_load_gdb_datadir_changed);
1147 cmd = add_cmd ("add-auto-load-safe-path", class_support,
1148 add_auto_load_safe_path,
1149 _("Add entries to the list of directories from which it is safe "
1150 "to auto-load files.\n\
1151 See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
1152 access the current full list setting."),
1154 set_cmd_completer (cmd, filename_completer);
1156 add_setshow_boolean_cmd ("auto-load", class_maintenance,
1157 &debug_auto_load, _("\
1158 Set auto-load verifications debugging."), _("\
1159 Show auto-load verifications debugging."), _("\
1160 When non-zero, debugging output for files of 'set auto-load ...'\n\
1162 NULL, show_debug_auto_load,
1163 &setdebuglist, &showdebuglist);