PR exp/9514:
[deliverable/binutils-gdb.git] / gdb / auto-load.c
CommitLineData
e2207b9a
JK
1/* GDB routines for supporting auto-loaded scripts.
2
3 Copyright (C) 2012 Free Software Foundation, Inc.
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"
21#include "auto-load.h"
22#include "progspace.h"
23#include "python/python.h"
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 "exceptions.h"
31#include "cli/cli-script.h"
32#include "gdbcmd.h"
33#include "cli/cli-decode.h"
34#include "cli/cli-setshow.h"
bccbefd2
JK
35#include "gdb_vecs.h"
36#include "readline/tilde.h"
37#include "completer.h"
6dea1fbd 38#include "observer.h"
bf88dd68
JK
39
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"
43
44static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
45 const char *filename);
46
4dc84fd1
JK
47/* Value of the 'set debug auto-load' configuration variable. */
48static int debug_auto_load = 0;
49
50/* "show" command for the debug_auto_load configuration variable. */
51
52static void
53show_debug_auto_load (struct ui_file *file, int from_tty,
54 struct cmd_list_element *c, const char *value)
55{
56 fprintf_filtered (file, _("Debugging output for files "
57 "of 'set auto-load ...' is %s.\n"),
58 value);
59}
60
bf88dd68
JK
61/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
62 scripts:
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. */
66static int auto_load_gdb_scripts = 1;
67
68/* "show" command for the auto_load_gdb_scripts configuration variable. */
69
70static void
71show_auto_load_gdb_scripts (struct ui_file *file, int from_tty,
72 struct cmd_list_element *c, const char *value)
73{
74 fprintf_filtered (file, _("Auto-loading of canned sequences of commands "
75 "scripts is %s.\n"),
76 value);
77}
e2207b9a
JK
78
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,
81 false otherwise.
82
bf88dd68 83 Both auto_load_scripts && global_auto_load must be true to enable
e2207b9a
JK
84 auto-loading.
85
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. */
bf88dd68
JK
89int global_auto_load = 1;
90
91/* Auto-load .gdbinit file from the current directory? */
92int auto_load_local_gdbinit = 1;
93
94/* Absolute pathname to the current directory .gdbinit, if it exists. */
95char *auto_load_local_gdbinit_pathname = NULL;
96
97/* Boolean value if AUTO_LOAD_LOCAL_GDBINIT_PATHNAME has been loaded. */
98int auto_load_local_gdbinit_loaded = 0;
99
100/* "show" command for the auto_load_local_gdbinit configuration variable. */
101
102static void
103show_auto_load_local_gdbinit (struct ui_file *file, int from_tty,
104 struct cmd_list_element *c, const char *value)
105{
106 fprintf_filtered (file, _("Auto-loading of .gdbinit script from current "
107 "directory is %s.\n"),
108 value);
109}
110
7349ff92
JK
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. */
114static char *auto_load_dir;
115
116/* "set" command for the auto_load_dir configuration variable. */
117
118static void
119set_auto_load_dir (char *args, int from_tty, struct cmd_list_element *c)
120{
121 /* Setting the variable to "" resets it to the compile time defaults. */
122 if (auto_load_dir[0] == '\0')
123 {
124 xfree (auto_load_dir);
125 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
126 }
127}
128
129/* "show" command for the auto_load_dir configuration variable. */
130
131static void
132show_auto_load_dir (struct ui_file *file, int from_tty,
133 struct cmd_list_element *c, const char *value)
134{
135 fprintf_filtered (file, _("List of directories from which to load "
136 "auto-loaded scripts is %s.\n"),
137 value);
138}
139
bccbefd2
JK
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. */
143static char *auto_load_safe_path;
144
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
147 counterpart. */
148static VEC (char_ptr) *auto_load_safe_path_vec;
149
1564a261
JK
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. */
153
154static VEC (char_ptr) *
155auto_load_expand_dir_vars (const char *string)
156{
157 VEC (char_ptr) *dir_vec;
158 char *s;
159
160 s = xstrdup (string);
161 substitute_path_component (&s, "$datadir", gdb_datadir);
162 substitute_path_component (&s, "$debugdir", debug_file_directory);
163
164 if (debug_auto_load && strcmp (s, string) != 0)
165 fprintf_unfiltered (gdb_stdlog,
166 _("auto-load: Expanded $-variables to \"%s\".\n"), s);
167
168 dir_vec = dirnames_to_char_ptr_vec (s);
169 xfree(s);
170
171 return dir_vec;
172}
173
bccbefd2
JK
174/* Update auto_load_safe_path_vec from current AUTO_LOAD_SAFE_PATH. */
175
176static void
177auto_load_safe_path_vec_update (void)
178{
179 VEC (char_ptr) *dir_vec = NULL;
180 unsigned len;
181 int ix;
182
4dc84fd1
JK
183 if (debug_auto_load)
184 fprintf_unfiltered (gdb_stdlog,
185 _("auto-load: Updating directories of \"%s\".\n"),
186 auto_load_safe_path);
187
bccbefd2
JK
188 free_char_ptr_vec (auto_load_safe_path_vec);
189
1564a261 190 auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
bccbefd2
JK
191 len = VEC_length (char_ptr, auto_load_safe_path_vec);
192
193 /* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
194 element. */
195 for (ix = 0; ix < len; ix++)
196 {
197 char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix);
1564a261
JK
198 char *expanded = tilde_expand (dir);
199 char *real_path = gdb_realpath (expanded);
bccbefd2 200
1564a261 201 /* Ensure the current entry is at least tilde_expand-ed. */
bccbefd2
JK
202 VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
203
4dc84fd1
JK
204 if (debug_auto_load)
205 {
206 if (strcmp (expanded, dir) == 0)
207 fprintf_unfiltered (gdb_stdlog,
208 _("auto-load: Using directory \"%s\".\n"),
209 expanded);
210 else
211 fprintf_unfiltered (gdb_stdlog,
212 _("auto-load: Resolved directory \"%s\" "
213 "as \"%s\".\n"),
214 dir, expanded);
215 }
216 xfree (dir);
217
bccbefd2
JK
218 /* If gdb_realpath returns a different content, append it. */
219 if (strcmp (real_path, expanded) == 0)
220 xfree (real_path);
221 else
4dc84fd1
JK
222 {
223 VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
224
225 if (debug_auto_load)
226 fprintf_unfiltered (gdb_stdlog,
227 _("auto-load: And canonicalized as \"%s\".\n"),
228 real_path);
229 }
bccbefd2
JK
230 }
231}
232
aff139ff 233/* Variable gdb_datadir has been set. Update content depending on $datadir. */
6dea1fbd
JK
234
235static void
236auto_load_gdb_datadir_changed (void)
237{
238 auto_load_safe_path_vec_update ();
239}
240
bccbefd2
JK
241/* "set" command for the auto_load_safe_path configuration variable. */
242
243static void
244set_auto_load_safe_path (char *args, int from_tty, struct cmd_list_element *c)
245{
6dea1fbd 246 /* Setting the variable to "" resets it to the compile time defaults. */
af2c1515
JK
247 if (auto_load_safe_path[0] == '\0')
248 {
249 xfree (auto_load_safe_path);
6dea1fbd 250 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
af2c1515
JK
251 }
252
bccbefd2
JK
253 auto_load_safe_path_vec_update ();
254}
255
256/* "show" command for the auto_load_safe_path configuration variable. */
257
258static void
259show_auto_load_safe_path (struct ui_file *file, int from_tty,
260 struct cmd_list_element *c, const char *value)
261{
f7bfa992
JK
262 const char *cs;
263
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. */
267
268 for (cs = value; *cs && (*cs == DIRNAME_SEPARATOR || IS_DIR_SEPARATOR (*cs));
269 cs++);
270 if (*cs == 0)
bccbefd2
JK
271 fprintf_filtered (file, _("Auto-load files are safe to load from any "
272 "directory.\n"));
273 else
274 fprintf_filtered (file, _("List of directories from which it is safe to "
275 "auto-load files is %s.\n"),
276 value);
277}
278
279/* "add-auto-load-safe-path" command for the auto_load_safe_path configuration
280 variable. */
281
282static void
283add_auto_load_safe_path (char *args, int from_tty)
284{
285 char *s;
286
287 if (args == NULL || *args == 0)
288 error (_("\
af2c1515
JK
289Directory argument required.\n\
290Use 'set auto-load safe-path /' for disabling the auto-load safe-path security.\
291"));
bccbefd2
JK
292
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;
296
297 auto_load_safe_path_vec_update ();
298}
299
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
302 done here. */
303
304static ATTRIBUTE_PURE int
305filename_is_in_dir (const char *filename, const char *dir)
306{
307 size_t dir_len = strlen (dir);
308
309 while (dir_len && IS_DIR_SEPARATOR (dir[dir_len - 1]))
310 dir_len--;
311
1ef71717
JK
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. */
315 if (dir_len == 0)
316 return 1;
317
bccbefd2
JK
318 return (filename_ncmp (dir, filename, dir_len) == 0
319 && (IS_DIR_SEPARATOR (filename[dir_len])
320 || filename[dir_len] == '\0'));
321}
322
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. */
328
329static int
330filename_is_in_auto_load_safe_path_vec (const char *filename,
331 char **filename_realp)
332{
333 char *dir;
334 int ix;
335
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))
338 break;
339
340 if (dir == NULL)
341 {
342 if (*filename_realp == NULL)
4dc84fd1
JK
343 {
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);
350 }
bccbefd2 351
4dc84fd1
JK
352 if (strcmp (*filename_realp, filename) != 0)
353 for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
354 ++ix)
355 if (filename_is_in_dir (*filename_realp, dir))
356 break;
bccbefd2
JK
357 }
358
359 if (dir != NULL)
4dc84fd1
JK
360 {
361 if (debug_auto_load)
362 fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
363 "directory \"%s\".\n"),
364 filename, dir);
365 return 1;
366 }
bccbefd2
JK
367
368 return 0;
369}
370
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.
374
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
377 directory. */
378
379int
4dc84fd1 380file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
bccbefd2
JK
381{
382 char *filename_real = NULL;
383 struct cleanup *back_to;
384
4dc84fd1
JK
385 if (debug_auto_load)
386 {
387 va_list debug_args;
388
389 va_start (debug_args, debug_fmt);
390 vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
391 va_end (debug_args);
392 }
393
bccbefd2
JK
394 back_to = make_cleanup (free_current_contents, &filename_real);
395
396 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
397 {
398 do_cleanups (back_to);
399 return 1;
400 }
401
402 auto_load_safe_path_vec_update ();
403 if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
404 {
405 do_cleanups (back_to);
406 return 1;
407 }
408
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);
412
413 do_cleanups (back_to);
414 return 0;
415}
416
bf88dd68
JK
417/* Definition of script language for GDB canned sequences of commands. */
418
419static const struct script_language script_language_gdb
420 = { GDB_AUTO_FILE_NAME, source_gdb_script_for_objfile };
421
422static void
423source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
424 const char *filename)
425{
bccbefd2 426 int is_safe;
bf88dd68
JK
427 struct auto_load_pspace_info *pspace_info;
428 volatile struct gdb_exception e;
429
4dc84fd1
JK
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);
bccbefd2 434
bf88dd68
JK
435 /* Add this script to the hash table too so "info auto-load gdb-scripts"
436 can print it. */
437 pspace_info = get_auto_load_pspace_data_for_loading (current_program_space);
bccbefd2
JK
438 maybe_add_script (pspace_info, is_safe, filename, filename,
439 &script_language_gdb);
440
441 if (!is_safe)
442 return;
bf88dd68
JK
443
444 TRY_CATCH (e, RETURN_MASK_ALL)
445 {
446 script_from_file (file, filename);
447 }
448 exception_print (gdb_stderr, e);
449}
e2207b9a
JK
450
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
454 loaded this way. */
455
456struct auto_load_pspace_info
457{
458 /* For each program space we keep track of loaded scripts. */
459 struct htab *loaded_scripts;
460
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;
464};
465
466/* Objects of this type are stored in the loaded script hash table. */
467
468struct loaded_script
469{
470 /* Name as provided by the objfile. */
471 const char *name;
bf88dd68 472
e2207b9a
JK
473 /* Full path name or NULL if script wasn't found (or was otherwise
474 inaccessible). */
475 const char *full_path;
bf88dd68 476
bccbefd2
JK
477 /* Non-zero if this script has been loaded. */
478 int loaded;
479
bf88dd68 480 const struct script_language *language;
e2207b9a
JK
481};
482
483/* Per-program-space data key. */
484static const struct program_space_data *auto_load_pspace_data;
485
486static void
487auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
488{
489 struct auto_load_pspace_info *info;
490
491 info = program_space_data (pspace, auto_load_pspace_data);
492 if (info != NULL)
493 {
494 if (info->loaded_scripts)
495 htab_delete (info->loaded_scripts);
496 xfree (info);
497 }
498}
499
500/* Get the current autoload data. If none is found yet, add it now. This
501 function always returns a valid object. */
502
503static struct auto_load_pspace_info *
504get_auto_load_pspace_data (struct program_space *pspace)
505{
506 struct auto_load_pspace_info *info;
507
508 info = program_space_data (pspace, auto_load_pspace_data);
509 if (info == NULL)
510 {
511 info = XZALLOC (struct auto_load_pspace_info);
512 set_program_space_data (pspace, auto_load_pspace_data, info);
513 }
514
515 return info;
516}
517
518/* Hash function for the loaded script hash. */
519
520static hashval_t
521hash_loaded_script_entry (const void *data)
522{
523 const struct loaded_script *e = data;
524
bf88dd68 525 return htab_hash_string (e->name) ^ htab_hash_pointer (e->language);
e2207b9a
JK
526}
527
528/* Equality function for the loaded script hash. */
529
530static int
531eq_loaded_script_entry (const void *a, const void *b)
532{
533 const struct loaded_script *ea = a;
534 const struct loaded_script *eb = b;
535
bf88dd68 536 return strcmp (ea->name, eb->name) == 0 && ea->language == eb->language;
e2207b9a
JK
537}
538
539/* Initialize the table to track loaded scripts.
540 Each entry is hashed by the full path name. */
541
542static void
543init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
544{
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
547 easily. */
548
549 pspace_info->loaded_scripts = htab_create (31,
550 hash_loaded_script_entry,
551 eq_loaded_script_entry,
552 xfree);
553
554 pspace_info->script_not_found_warning_printed = FALSE;
555}
556
557/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
558 for loading scripts. */
559
560struct auto_load_pspace_info *
561get_auto_load_pspace_data_for_loading (struct program_space *pspace)
562{
563 struct auto_load_pspace_info *info;
564
565 info = get_auto_load_pspace_data (pspace);
566 if (info->loaded_scripts == NULL)
567 init_loaded_scripts_info (info);
568
569 return info;
570}
571
bccbefd2
JK
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
bf88dd68 575 true if the script was already in the hash table. */
e2207b9a
JK
576
577int
bccbefd2 578maybe_add_script (struct auto_load_pspace_info *pspace_info, int loaded,
bf88dd68
JK
579 const char *name, const char *full_path,
580 const struct script_language *language)
e2207b9a
JK
581{
582 struct htab *htab = pspace_info->loaded_scripts;
583 struct loaded_script **slot, entry;
584 int in_hash_table;
585
586 entry.name = name;
bf88dd68 587 entry.language = language;
e2207b9a
JK
588 slot = (struct loaded_script **) htab_find_slot (htab, &entry, INSERT);
589 in_hash_table = *slot != NULL;
590
591 /* If this script is not in the hash table, add it. */
592
593 if (! in_hash_table)
594 {
595 char *p;
596
597 /* Allocate all space in one chunk so it's easier to free. */
598 *slot = xmalloc (sizeof (**slot)
599 + strlen (name) + 1
600 + (full_path != NULL ? (strlen (full_path) + 1) : 0));
601 p = ((char*) *slot) + sizeof (**slot);
602 strcpy (p, name);
603 (*slot)->name = p;
604 if (full_path != NULL)
605 {
606 p += strlen (p) + 1;
607 strcpy (p, full_path);
608 (*slot)->full_path = p;
609 }
610 else
611 (*slot)->full_path = NULL;
bccbefd2 612 (*slot)->loaded = loaded;
bf88dd68 613 (*slot)->language = language;
e2207b9a
JK
614 }
615
616 return in_hash_table;
617}
618
619/* Clear the table of loaded section scripts. */
620
621static void
622clear_section_scripts (void)
623{
624 struct program_space *pspace = current_program_space;
625 struct auto_load_pspace_info *info;
626
627 info = program_space_data (pspace, auto_load_pspace_data);
628 if (info != NULL && info->loaded_scripts != NULL)
629 {
630 htab_delete (info->loaded_scripts);
631 info->loaded_scripts = NULL;
632 info->script_not_found_warning_printed = FALSE;
633 }
634}
635
bf88dd68
JK
636/* Look for the auto-load script in LANGUAGE associated with OBJFILE and load
637 it. */
e2207b9a
JK
638
639void
bf88dd68
JK
640auto_load_objfile_script (struct objfile *objfile,
641 const struct script_language *language)
e2207b9a
JK
642{
643 char *realname;
644 char *filename, *debugfile;
645 int len;
646 FILE *input;
647 struct cleanup *cleanups;
648
649 realname = gdb_realpath (objfile->name);
650 len = strlen (realname);
bf88dd68 651 filename = xmalloc (len + strlen (language->suffix) + 1);
e2207b9a 652 memcpy (filename, realname, len);
bf88dd68 653 strcpy (filename + len, language->suffix);
e2207b9a
JK
654
655 cleanups = make_cleanup (xfree, filename);
656 make_cleanup (xfree, realname);
657
658 input = fopen (filename, "r");
659 debugfile = filename;
7349ff92
JK
660 if (debug_auto_load)
661 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
662 debugfile, input ? _("exists") : _("does not exist"));
e2207b9a 663
7349ff92 664 if (!input)
e2207b9a 665 {
7349ff92
JK
666 VEC (char_ptr) *vec;
667 int ix;
668 char *dir;
669
e2207b9a
JK
670 /* Also try the same file in a subdirectory of gdb's data
671 directory. */
7349ff92 672
1564a261 673 vec = auto_load_expand_dir_vars (auto_load_dir);
7349ff92
JK
674 make_cleanup_free_char_ptr_vec (vec);
675
676 if (debug_auto_load)
677 fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
678 "scripts-directory' path \"%s\".\n"),
679 auto_load_dir);
680
681 for (ix = 0; VEC_iterate (char_ptr, vec, ix, dir); ++ix)
682 {
1564a261
JK
683 debugfile = xmalloc (strlen (dir) + strlen (filename) + 1);
684 strcpy (debugfile, dir);
7349ff92
JK
685
686 /* FILENAME is absolute, so we don't need a "/" here. */
687 strcat (debugfile, filename);
688
689 make_cleanup (xfree, debugfile);
690 input = fopen (debugfile, "r");
691 if (debug_auto_load)
692 fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
693 "\"%s\" %s.\n"),
694 debugfile,
695 input ? _("exists") : _("does not exist"));
696 if (input != NULL)
697 break;
698 }
e2207b9a
JK
699 }
700
701 if (input)
702 {
e2207b9a
JK
703 make_cleanup_fclose (input);
704
e2207b9a
JK
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
709 loads anyway. */
bf88dd68 710 language->source_script_for_objfile (objfile, input, debugfile);
e2207b9a
JK
711 }
712
713 do_cleanups (cleanups);
714}
715
bf88dd68
JK
716/* Load any auto-loaded scripts for OBJFILE. */
717
718void
719load_auto_scripts_for_objfile (struct objfile *objfile)
720{
721 if (!global_auto_load)
722 return;
723
724 if (auto_load_gdb_scripts)
725 auto_load_objfile_script (objfile, &script_language_gdb);
726
727 gdbpy_load_auto_scripts_for_objfile (objfile);
728}
729
e2207b9a
JK
730/* This is a new_objfile observer callback to auto-load scripts.
731
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 */
735
736static void
737auto_load_new_objfile (struct objfile *objfile)
738{
739 if (!objfile)
740 {
741 /* OBJFILE is NULL when loading a new "main" symbol-file. */
742 clear_section_scripts ();
743 return;
744 }
745
746 load_auto_scripts_for_objfile (objfile);
747}
748
749/* Collect scripts to be printed in a vec. */
750
751typedef struct loaded_script *loaded_script_ptr;
752DEF_VEC_P (loaded_script_ptr);
753
bf88dd68
JK
754struct collect_matching_scripts_data
755{
756 VEC (loaded_script_ptr) **scripts_p;
757
758 const struct script_language *language;
759};
760
e2207b9a
JK
761/* Traversal function for htab_traverse.
762 Collect the entry if it matches the regexp. */
763
764static int
765collect_matching_scripts (void **slot, void *info)
766{
767 struct loaded_script *script = *slot;
bf88dd68 768 struct collect_matching_scripts_data *data = info;
e2207b9a 769
bf88dd68
JK
770 if (script->language == data->language && re_exec (script->name))
771 VEC_safe_push (loaded_script_ptr, *data->scripts_p, script);
e2207b9a
JK
772
773 return 1;
774}
775
776/* Print SCRIPT. */
777
778static void
779print_script (struct loaded_script *script)
780{
781 struct ui_out *uiout = current_uiout;
782 struct cleanup *chain;
783
784 chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
785
bccbefd2 786 ui_out_field_string (uiout, "loaded", script->loaded ? "Yes" : "No");
e2207b9a
JK
787 ui_out_field_string (uiout, "script", script->name);
788 ui_out_text (uiout, "\n");
789
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)
793 {
794 ui_out_text (uiout, "\tfull name: ");
795 ui_out_field_string (uiout, "full_path", script->full_path);
796 ui_out_text (uiout, "\n");
797 }
798
799 do_cleanups (chain);
800}
801
802/* Helper for info_auto_load_scripts to sort the scripts by name. */
803
804static int
805sort_scripts_by_name (const void *ap, const void *bp)
806{
807 const struct loaded_script *a = *(const struct loaded_script **) ap;
808 const struct loaded_script *b = *(const struct loaded_script **) bp;
809
810 return FILENAME_CMP (a->name, b->name);
811}
812
bf88dd68
JK
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. */
816char auto_load_info_scripts_pattern_nl[] = "";
e2207b9a 817
bf88dd68
JK
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. */
821
822void
823auto_load_info_scripts (char *pattern, int from_tty,
824 const struct script_language *language)
e2207b9a
JK
825{
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;
830 int nr_scripts;
831
832 dont_repeat ();
833
834 pspace_info = get_auto_load_pspace_data (current_program_space);
835
836 if (pattern && *pattern)
837 {
838 char *re_err = re_comp (pattern);
839
840 if (re_err)
841 error (_("Invalid regexp: %s"), re_err);
842 }
843 else
844 {
845 re_comp ("");
846 }
847
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. */
851
852 scripts = VEC_alloc (loaded_script_ptr, 10);
853 script_chain = make_cleanup (VEC_cleanup (loaded_script_ptr), &scripts);
854
855 if (pspace_info != NULL && pspace_info->loaded_scripts != NULL)
856 {
bf88dd68
JK
857 struct collect_matching_scripts_data data = { &scripts, language };
858
e2207b9a
JK
859 immediate_quit++;
860 /* Pass a pointer to scripts as VEC_safe_push can realloc space. */
861 htab_traverse_noresize (pspace_info->loaded_scripts,
bf88dd68 862 collect_matching_scripts, &data);
e2207b9a
JK
863 immediate_quit--;
864 }
865
866 nr_scripts = VEC_length (loaded_script_ptr, scripts);
bf88dd68
JK
867
868 /* Table header shifted right by preceding "gdb-scripts: " would not match
869 its columns. */
870 if (nr_scripts > 0 && pattern == auto_load_info_scripts_pattern_nl)
871 ui_out_text (uiout, "\n");
872
e2207b9a
JK
873 make_cleanup_ui_out_table_begin_end (uiout, 2, nr_scripts,
874 "AutoLoadedScriptsTable");
875
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);
879
880 if (nr_scripts > 0)
881 {
882 int i;
883 loaded_script_ptr script;
884
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);
890 }
891
892 do_cleanups (script_chain);
893
894 if (nr_scripts == 0)
895 {
896 if (pattern && *pattern)
897 ui_out_message (uiout, 0, "No auto-load scripts matching %s.\n",
898 pattern);
899 else
900 ui_out_message (uiout, 0, "No auto-load scripts.\n");
901 }
902}
903
bf88dd68
JK
904/* Wrapper for "info auto-load gdb-scripts". */
905
906static void
907info_auto_load_gdb_scripts (char *pattern, int from_tty)
908{
909 auto_load_info_scripts (pattern, from_tty, &script_language_gdb);
910}
911
912/* Implement 'info auto-load local-gdbinit'. */
913
914static void
915info_auto_load_local_gdbinit (char *args, int from_tty)
916{
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);
922 else
923 printf_filtered (_("Local .gdbinit file \"%s\" has not been loaded.\n"),
924 auto_load_local_gdbinit_pathname);
925}
926
e2207b9a
JK
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
929 of PSPACE_INFO. */
930
931int
932script_not_found_warning_print (struct auto_load_pspace_info *pspace_info)
933{
934 int retval = !pspace_info->script_not_found_warning_printed;
935
936 pspace_info->script_not_found_warning_printed = 1;
937
938 return retval;
939}
940
bf88dd68
JK
941/* The only valid "set auto-load" argument is off|0|no|disable. */
942
943static void
944set_auto_load_cmd (char *args, int from_tty)
945{
946 struct cmd_list_element *list;
947 size_t length;
948
949 /* See parse_binary_operation in use by the sub-commands. */
950
951 length = args ? strlen (args) : 0;
952
953 while (length > 0 && (args[length - 1] == ' ' || args[length - 1] == '\t'))
954 length--;
955
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."));
962
963 for (list = *auto_load_set_cmdlist_get (); list != NULL; list = list->next)
964 if (list->var_type == var_boolean)
965 {
966 gdb_assert (list->type == set_cmd);
967 do_setshow_command (args, from_tty, list);
968 }
969}
970
971/* Initialize "set auto-load " commands prefix and return it. */
972
973struct cmd_list_element **
974auto_load_set_cmdlist_get (void)
975{
976 static struct cmd_list_element *retval;
977
978 if (retval == NULL)
979 add_prefix_cmd ("auto-load", class_maintenance, set_auto_load_cmd, _("\
980Auto-loading specific settings.\n\
981Configure various auto-load-specific variables such as\n\
982automatic loading of Python scripts."),
983 &retval, "set auto-load ",
984 1/*allow-unknown*/, &setlist);
985
986 return &retval;
987}
988
989/* Command "show auto-load" displays summary of all the current
990 "show auto-load " settings. */
991
992static void
993show_auto_load_cmd (char *args, int from_tty)
994{
995 cmd_show_list (*auto_load_show_cmdlist_get (), from_tty, "");
996}
997
998/* Initialize "show auto-load " commands prefix and return it. */
999
1000struct cmd_list_element **
1001auto_load_show_cmdlist_get (void)
1002{
1003 static struct cmd_list_element *retval;
1004
1005 if (retval == NULL)
1006 add_prefix_cmd ("auto-load", class_maintenance, show_auto_load_cmd, _("\
1007Show auto-loading specific settings.\n\
1008Show configuration of various auto-load-specific variables such as\n\
1009automatic loading of Python scripts."),
1010 &retval, "show auto-load ",
1011 0/*allow-unknown*/, &showlist);
1012
1013 return &retval;
1014}
1015
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. */
1019
1020static void
1021info_auto_load_cmd (char *args, int from_tty)
1022{
1023 struct cmd_list_element *list;
1024 struct cleanup *infolist_chain;
1025 struct ui_out *uiout = current_uiout;
1026
1027 infolist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "infolist");
1028
1029 for (list = *auto_load_info_cmdlist_get (); list != NULL; list = list->next)
1030 {
1031 struct cleanup *option_chain
1032 = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
1033
1034 gdb_assert (!list->prefixlist);
1035 gdb_assert (list->type == not_set_cmd);
1036
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);
1040
1041 /* Close the tuple. */
1042 do_cleanups (option_chain);
1043 }
1044
1045 /* Close the tuple. */
1046 do_cleanups (infolist_chain);
1047}
1048
1049/* Initialize "info auto-load " commands prefix and return it. */
1050
1051struct cmd_list_element **
1052auto_load_info_cmdlist_get (void)
1053{
1054 static struct cmd_list_element *retval;
1055
1056 if (retval == NULL)
1057 add_prefix_cmd ("auto-load", class_info, info_auto_load_cmd, _("\
1058Print current status of auto-loaded files.\n\
1059Print whether various files like Python scripts or .gdbinit files have been\n\
1060found and/or loaded."),
1061 &retval, "info auto-load ",
1062 0/*allow-unknown*/, &infolist);
1063
1064 return &retval;
1065}
1066
e2207b9a
JK
1067void _initialize_auto_load (void);
1068
1069void
1070_initialize_auto_load (void)
1071{
bccbefd2
JK
1072 struct cmd_list_element *cmd;
1073
e2207b9a
JK
1074 auto_load_pspace_data
1075 = register_program_space_data_with_cleanup (auto_load_pspace_data_cleanup);
1076
1077 observer_attach_new_objfile (auto_load_new_objfile);
1078
bf88dd68
JK
1079 add_setshow_boolean_cmd ("gdb-scripts", class_support,
1080 &auto_load_gdb_scripts, _("\
1081Enable or disable auto-loading of canned sequences of commands scripts."), _("\
1082Show whether auto-loading of canned sequences of commands scripts is enabled."),
1083 _("\
1084If enabled, canned sequences of commands are loaded when the debugger reads\n\
1085an executable or shared library.\n\
1086This 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 ());
1090
1091 add_cmd ("gdb-scripts", class_info, info_auto_load_gdb_scripts,
1092 _("Print the list of automatically loaded sequences of commands.\n\
1093Usage: info auto-load gdb-scripts [REGEXP]"),
1094 auto_load_info_cmdlist_get ());
1095
1096 add_setshow_boolean_cmd ("local-gdbinit", class_support,
1097 &auto_load_local_gdbinit, _("\
1098Enable or disable auto-loading of .gdbinit script in current directory."), _("\
1099Show whether auto-loading .gdbinit script in current directory is enabled."),
1100 _("\
1101If enabled, canned sequences of commands are loaded when debugger starts\n\
1102from .gdbinit file in current directory. Such files are deprecated,\n\
1103use a script associated with inferior executable file instead.\n\
1104This 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 ());
1108
1109 add_cmd ("local-gdbinit", class_info, info_auto_load_local_gdbinit,
1110 _("Print whether current directory .gdbinit file has been loaded.\n\
1111Usage: info auto-load local-gdbinit"),
1112 auto_load_info_cmdlist_get ());
bccbefd2 1113
7349ff92
JK
1114 auto_load_dir = xstrdup (AUTO_LOAD_DIR);
1115 add_setshow_optional_filename_cmd ("scripts-directory", class_support,
1116 &auto_load_dir, _("\
1117Set the list of directories from which to load auto-loaded scripts."), _("\
1118Show the list of directories from which to load auto-loaded scripts."), _("\
1119Automatically loaded Python scripts and GDB scripts are located in one of the\n\
1120directories listed by this option. This option is ignored for the kinds of\n\
1121scripts having 'set auto-load ... off'. Directories listed here need to be\n\
1122present 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 ());
1126
6dea1fbd 1127 auto_load_safe_path = xstrdup (AUTO_LOAD_SAFE_PATH);
bccbefd2
JK
1128 auto_load_safe_path_vec_update ();
1129 add_setshow_optional_filename_cmd ("safe-path", class_support,
1130 &auto_load_safe_path, _("\
1131Set the list of directories from which it is safe to auto-load files."), _("\
1132Show the list of directories from which it is safe to auto-load files."), _("\
1133Various files loaded automatically for the 'set auto-load ...' options must\n\
1134be located in one of the directories listed by this option. Warning will be\n\
af2c1515
JK
1135printed and file will not be used otherwise.\n\
1136Setting this parameter to an empty list resets it to its default value.\n\
1137Setting this parameter to '/' (without the quotes) allows any file\n\
1138for the 'set auto-load ...' options.\n\
bccbefd2
JK
1139This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
1140This 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 ());
6dea1fbd 1145 observer_attach_gdb_datadir_changed (auto_load_gdb_datadir_changed);
bccbefd2
JK
1146
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\
1151See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
1152access the current full list setting."),
1153 &cmdlist);
1154 set_cmd_completer (cmd, filename_completer);
4dc84fd1
JK
1155
1156 add_setshow_boolean_cmd ("auto-load", class_maintenance,
1157 &debug_auto_load, _("\
1158Set auto-load verifications debugging."), _("\
1159Show auto-load verifications debugging."), _("\
1160When non-zero, debugging output for files of 'set auto-load ...'\n\
1161is displayed."),
1162 NULL, show_debug_auto_load,
1163 &setdebuglist, &showdebuglist);
e2207b9a 1164}
This page took 0.106707 seconds and 4 git commands to generate.