gdb/
New option "set debug auto-load". * NEWS: New commands "set debug auto-load" and "show debug auto-load". * auto-load.c (debug_auto_load, show_debug_auto_load: New. (auto_load_safe_path_vec_update) (filename_is_in_auto_load_safe_path_vec): Call fprintf_unfiltered if DEBUG_AUTO_LOAD. (file_is_auto_load_safe): New parameters debug_fmt and .... Call fprintf_unfiltered if DEBUG_AUTO_LOAD. (source_gdb_script_for_objfile): Extend the file_is_auto_load_safe caller by explanatory string. (_initialize_auto_load): Register "set debug auto-load". * auto-load.h (file_is_auto_load_safe): New parameters debug_fmt and .... * linux-thread-db.c (try_thread_db_load_from_pdir_1) (try_thread_db_load_from_dir): Extend the file_is_auto_load_safe caller by explanatory string. * main.c (captured_main): Likewise. * python/py-auto-load.c (gdbpy_load_auto_script_for_objfile) (source_section_scripts): Likewise. gdb/doc/ New option "set debug auto-load". * gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode. (auto-load verbose mode): New node.
This commit is contained in:
parent
bccbefd2aa
commit
4dc84fd109
9 changed files with 179 additions and 16 deletions
|
@ -1,3 +1,25 @@
|
|||
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
New option "set debug auto-load".
|
||||
* NEWS: New commands "set debug auto-load" and "show debug auto-load".
|
||||
* auto-load.c (debug_auto_load, show_debug_auto_load: New.
|
||||
(auto_load_safe_path_vec_update)
|
||||
(filename_is_in_auto_load_safe_path_vec): Call fprintf_unfiltered
|
||||
if DEBUG_AUTO_LOAD.
|
||||
(file_is_auto_load_safe): New parameters debug_fmt and ....
|
||||
Call fprintf_unfiltered if DEBUG_AUTO_LOAD.
|
||||
(source_gdb_script_for_objfile): Extend the file_is_auto_load_safe
|
||||
caller by explanatory string.
|
||||
(_initialize_auto_load): Register "set debug auto-load".
|
||||
* auto-load.h (file_is_auto_load_safe): New parameters debug_fmt
|
||||
and ....
|
||||
* linux-thread-db.c (try_thread_db_load_from_pdir_1)
|
||||
(try_thread_db_load_from_dir): Extend the file_is_auto_load_safe caller
|
||||
by explanatory string.
|
||||
* main.c (captured_main): Likewise.
|
||||
* python/py-auto-load.c (gdbpy_load_auto_script_for_objfile)
|
||||
(source_section_scripts): Likewise.
|
||||
|
||||
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
New option "set auto-load safe-path".
|
||||
|
|
4
gdb/NEWS
4
gdb/NEWS
|
@ -159,6 +159,10 @@ show auto-load safe-path
|
|||
Set a list of directories from which it is safe to auto-load files.
|
||||
The delimiter (':' above) may differ according to the host platform.
|
||||
|
||||
set debug auto-load on|off
|
||||
show debug auto-load
|
||||
Control display of debugging info for auto-loading the files above.
|
||||
|
||||
* New remote packets
|
||||
|
||||
z0/z1 conditional breakpoints extension
|
||||
|
|
|
@ -43,6 +43,20 @@
|
|||
static void source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
|
||||
const char *filename);
|
||||
|
||||
/* Value of the 'set debug auto-load' configuration variable. */
|
||||
static int debug_auto_load = 0;
|
||||
|
||||
/* "show" command for the debug_auto_load configuration variable. */
|
||||
|
||||
static void
|
||||
show_debug_auto_load (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
fprintf_filtered (file, _("Debugging output for files "
|
||||
"of 'set auto-load ...' is %s.\n"),
|
||||
value);
|
||||
}
|
||||
|
||||
/* User-settable option to enable/disable auto-loading of GDB_AUTO_FILE_NAME
|
||||
scripts:
|
||||
set auto-load gdb-scripts on|off
|
||||
|
@ -112,6 +126,11 @@ auto_load_safe_path_vec_update (void)
|
|||
unsigned len;
|
||||
int ix;
|
||||
|
||||
if (debug_auto_load)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
_("auto-load: Updating directories of \"%s\".\n"),
|
||||
auto_load_safe_path);
|
||||
|
||||
free_char_ptr_vec (auto_load_safe_path_vec);
|
||||
|
||||
auto_load_safe_path_vec = dirnames_to_char_ptr_vec (auto_load_safe_path);
|
||||
|
@ -126,14 +145,34 @@ auto_load_safe_path_vec_update (void)
|
|||
char *real_path = gdb_realpath (expanded);
|
||||
|
||||
/* Ensure the current entry is at least tilde_expand-ed. */
|
||||
xfree (dir);
|
||||
VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
|
||||
|
||||
if (debug_auto_load)
|
||||
{
|
||||
if (strcmp (expanded, dir) == 0)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
_("auto-load: Using directory \"%s\".\n"),
|
||||
expanded);
|
||||
else
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
_("auto-load: Resolved directory \"%s\" "
|
||||
"as \"%s\".\n"),
|
||||
dir, expanded);
|
||||
}
|
||||
xfree (dir);
|
||||
|
||||
/* If gdb_realpath returns a different content, append it. */
|
||||
if (strcmp (real_path, expanded) == 0)
|
||||
xfree (real_path);
|
||||
else
|
||||
VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
|
||||
{
|
||||
VEC_safe_push (char_ptr, auto_load_safe_path_vec, real_path);
|
||||
|
||||
if (debug_auto_load)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
_("auto-load: And canonicalized as \"%s\".\n"),
|
||||
real_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -217,16 +256,30 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
|
|||
if (dir == NULL)
|
||||
{
|
||||
if (*filename_realp == NULL)
|
||||
*filename_realp = gdb_realpath (filename);
|
||||
{
|
||||
*filename_realp = gdb_realpath (filename);
|
||||
if (debug_auto_load && strcmp (*filename_realp, filename) != 0)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
_("auto-load: Resolved "
|
||||
"file \"%s\" as \"%s\".\n"),
|
||||
filename, *filename_realp);
|
||||
}
|
||||
|
||||
for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
|
||||
++ix)
|
||||
if (filename_is_in_dir (*filename_realp, dir))
|
||||
break;
|
||||
if (strcmp (*filename_realp, filename) != 0)
|
||||
for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, dir);
|
||||
++ix)
|
||||
if (filename_is_in_dir (*filename_realp, dir))
|
||||
break;
|
||||
}
|
||||
|
||||
if (dir != NULL)
|
||||
return 1;
|
||||
{
|
||||
if (debug_auto_load)
|
||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
|
||||
"directory \"%s\".\n"),
|
||||
filename, dir);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -240,11 +293,20 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
|
|||
directory. */
|
||||
|
||||
int
|
||||
file_is_auto_load_safe (const char *filename)
|
||||
file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
|
||||
{
|
||||
char *filename_real = NULL;
|
||||
struct cleanup *back_to;
|
||||
|
||||
if (debug_auto_load)
|
||||
{
|
||||
va_list debug_args;
|
||||
|
||||
va_start (debug_args, debug_fmt);
|
||||
vfprintf_unfiltered (gdb_stdlog, debug_fmt, debug_args);
|
||||
va_end (debug_args);
|
||||
}
|
||||
|
||||
back_to = make_cleanup (free_current_contents, &filename_real);
|
||||
|
||||
if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
|
||||
|
@ -281,7 +343,10 @@ source_gdb_script_for_objfile (struct objfile *objfile, FILE *file,
|
|||
struct auto_load_pspace_info *pspace_info;
|
||||
volatile struct gdb_exception e;
|
||||
|
||||
is_safe = file_is_auto_load_safe (filename);
|
||||
is_safe = file_is_auto_load_safe (filename, _("auto-load: Loading canned "
|
||||
"sequences of commands script "
|
||||
"\"%s\" for objfile \"%s\".\n"),
|
||||
filename, objfile->name);
|
||||
|
||||
/* Add this script to the hash table too so "info auto-load gdb-scripts"
|
||||
can print it. */
|
||||
|
@ -975,4 +1040,13 @@ See the commands 'set auto-load safe-path' and 'show auto-load safe-path' to\n\
|
|||
access the current full list setting."),
|
||||
&cmdlist);
|
||||
set_cmd_completer (cmd, filename_completer);
|
||||
|
||||
add_setshow_boolean_cmd ("auto-load", class_maintenance,
|
||||
&debug_auto_load, _("\
|
||||
Set auto-load verifications debugging."), _("\
|
||||
Show auto-load verifications debugging."), _("\
|
||||
When non-zero, debugging output for files of 'set auto-load ...'\n\
|
||||
is displayed."),
|
||||
NULL, show_debug_auto_load,
|
||||
&setdebuglist, &showdebuglist);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ extern struct cmd_list_element **auto_load_set_cmdlist_get (void);
|
|||
extern struct cmd_list_element **auto_load_show_cmdlist_get (void);
|
||||
extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
|
||||
|
||||
extern int file_is_auto_load_safe (const char *filename);
|
||||
extern int file_is_auto_load_safe (const char *filename,
|
||||
const char *debug_fmt, ...);
|
||||
|
||||
#endif /* AUTO_LOAD_H */
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
New option "set debug auto-load".
|
||||
* gdb.texinfo (Auto-loading): New menu item for auto-load verbose mode.
|
||||
(auto-load verbose mode): New node.
|
||||
|
||||
2012-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
New option "set auto-load safe-path".
|
||||
|
|
|
@ -20978,6 +20978,7 @@ These are @value{GDBN} control commands for the auto-loading:
|
|||
* libthread_db.so.1 file:: @samp{set/show/info auto-load libthread-db}
|
||||
* objfile-gdb.gdb file:: @samp{set/show/info auto-load gdb-script}
|
||||
* Auto-loading safe path:: @samp{set/show/info auto-load safe-path}
|
||||
* Auto-loading verbose mode:: @samp{set/show debug auto-load}
|
||||
@xref{Python Auto-loading}.
|
||||
@end menu
|
||||
|
||||
|
@ -21176,6 +21177,45 @@ entries again. @value{GDBN} already canonicalizes most of the filenames on its
|
|||
own before starting the comparison so a canonical form of directories is
|
||||
recommended to be entered.
|
||||
|
||||
@node Auto-loading verbose mode
|
||||
@subsection Displaying files tried for auto-load
|
||||
@cindex auto-loading verbose mode
|
||||
|
||||
For better visibility of all the file locations where you can place scripts to
|
||||
be auto-loaded with inferior --- or to protect yourself against accidental
|
||||
execution of untrusted scripts --- @value{GDBN} provides a feature for printing
|
||||
all the files attempted to be loaded. Both existing and non-existing files may
|
||||
be printed.
|
||||
|
||||
For example the list of directories from which it is safe to auto-load files
|
||||
(@pxref{Auto-loading safe path}) applies also to canonicalized filenames which
|
||||
may not be too obvious while setting it up.
|
||||
|
||||
@smallexample
|
||||
(gdb) set debug auto-load ues
|
||||
(gdb) file ~/src/t/true
|
||||
auto-load: Loading canned sequences of commands script "/tmp/true-gdb.gdb"
|
||||
for objfile "/tmp/true".
|
||||
auto-load: Updating directories of "/usr:/opt".
|
||||
auto-load: Using directory "/usr".
|
||||
auto-load: Using directory "/opt".
|
||||
warning: File "/tmp/true-gdb.gdb" auto-loading has been declined
|
||||
by your `auto-load safe-path' set to "/usr:/opt".
|
||||
@end smallexample
|
||||
|
||||
@table @code
|
||||
@anchor{set debug auto-load}
|
||||
@kindex set debug auto-load
|
||||
@item set debug auto-load [on|off]
|
||||
Set whether to print the filenames attempted to be auto-loaded.
|
||||
|
||||
@anchor{show debug auto-load}
|
||||
@kindex show debug auto-load
|
||||
@item show debug auto-load
|
||||
Show whether printing of the filenames attempted to be auto-loaded is turned
|
||||
on or off.
|
||||
@end table
|
||||
|
||||
@node Messages/Warnings
|
||||
@section Optional Warnings and Messages
|
||||
|
||||
|
|
|
@ -870,7 +870,9 @@ try_thread_db_load_from_pdir_1 (struct objfile *obj)
|
|||
gdb_assert (cp != NULL);
|
||||
strcpy (cp + 1, LIBTHREAD_DB_SO);
|
||||
|
||||
if (!file_is_auto_load_safe (path))
|
||||
if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
|
||||
"library \"%s\" from $pdir.\n"),
|
||||
path))
|
||||
result = 0;
|
||||
else
|
||||
result = try_thread_db_load (path);
|
||||
|
@ -940,7 +942,10 @@ try_thread_db_load_from_dir (const char *dir, size_t dir_len)
|
|||
path[dir_len] = '/';
|
||||
strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
|
||||
|
||||
if (!file_is_auto_load_safe (path))
|
||||
if (!file_is_auto_load_safe (path, _("auto-load: Loading libthread-db "
|
||||
"library \"%s\" from explicit "
|
||||
"directory.\n"),
|
||||
path))
|
||||
result = 0;
|
||||
else
|
||||
result = try_thread_db_load (path);
|
||||
|
|
|
@ -945,7 +945,10 @@ captured_main (void *data)
|
|||
auto_load_local_gdbinit_pathname = gdb_realpath (local_gdbinit);
|
||||
|
||||
if (!inhibit_gdbinit && auto_load_local_gdbinit
|
||||
&& file_is_auto_load_safe (local_gdbinit))
|
||||
&& file_is_auto_load_safe (local_gdbinit,
|
||||
_("auto-load: Loading .gdbinit "
|
||||
"file \"%s\".\n"),
|
||||
local_gdbinit))
|
||||
{
|
||||
auto_load_local_gdbinit_loaded = 1;
|
||||
|
||||
|
|
|
@ -75,7 +75,10 @@ gdbpy_load_auto_script_for_objfile (struct objfile *objfile, FILE *file,
|
|||
int is_safe;
|
||||
struct auto_load_pspace_info *pspace_info;
|
||||
|
||||
is_safe = file_is_auto_load_safe (filename);
|
||||
is_safe = file_is_auto_load_safe (filename,
|
||||
_("auto-load: Loading Python script \"%s\" "
|
||||
"by extension for objfile \"%s\".\n"),
|
||||
filename, objfile->name);
|
||||
|
||||
/* Add this script to the hash table too so "info auto-load python-scripts"
|
||||
can print it. */
|
||||
|
@ -153,7 +156,12 @@ source_section_scripts (struct objfile *objfile, const char *source_name,
|
|||
make_cleanup_fclose (stream);
|
||||
make_cleanup (xfree, full_path);
|
||||
|
||||
if (!file_is_auto_load_safe (full_path))
|
||||
if (!file_is_auto_load_safe (full_path,
|
||||
_("auto-load: Loading Python script "
|
||||
"\"%s\" from section \"%s\" of "
|
||||
"objfile \"%s\".\n"),
|
||||
full_path, GDBPY_AUTO_SECTION_NAME,
|
||||
objfile->name))
|
||||
opened = 0;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue