gdb: convert auto-load to new-style debug macros
Function file_is_auto_load_safe was taking a format string and varargs just to output a debug print. This is probably because that function is used in linux-thread-db.c and main.c, but debug_auto_load is static in auto-load.c. I simplified that, making debug_auto_load visible outside of auto-load.c, and making the callers of file_is_auto_load_safe output the debug print themselves. This file uses _() for internationalization of the debug messages. This is not necessary, as these are mostly messages for GDB developers, and it's not used in other files anyway. So I removed them. The rest is pretty much standard. gdb/ChangeLog: * auto-load.h (debug_auto_load): Move here. (auto_load_debug_printf): New. * auto-load.c: Use auto_load_debug_printf. (debug_auto_load): Move to header. * linux-thread-db.c (try_thread_db_load): Use auto_load_debug_printf. * main.c (captured_main_1): Likewise. Change-Id: I468dc2a1d24b7dbf171f55181a11abbfafe70ba1
This commit is contained in:
parent
d3abc0cee0
commit
a59902a7c1
@ -1,3 +1,13 @@
|
|||||||
|
2021-01-21 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
|
* auto-load.h (debug_auto_load): Move here.
|
||||||
|
(auto_load_debug_printf): New.
|
||||||
|
* auto-load.c: Use auto_load_debug_printf.
|
||||||
|
(debug_auto_load): Move to header.
|
||||||
|
* linux-thread-db.c (try_thread_db_load): Use
|
||||||
|
auto_load_debug_printf.
|
||||||
|
* main.c (captured_main_1): Likewise.
|
||||||
|
|
||||||
2021-01-21 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-01-21 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* f-valprint.c (f77_array_offset_tbl): Remove.
|
* f-valprint.c (f77_array_offset_tbl): Remove.
|
||||||
|
146
gdb/auto-load.c
146
gdb/auto-load.c
@ -61,8 +61,9 @@ static void maybe_print_script_not_found_warning
|
|||||||
const struct extension_language_defn *language,
|
const struct extension_language_defn *language,
|
||||||
const char *section_name, unsigned offset);
|
const char *section_name, unsigned offset);
|
||||||
|
|
||||||
/* Value of the 'set debug auto-load' configuration variable. */
|
/* See auto-load.h. */
|
||||||
static bool debug_auto_load = false;
|
|
||||||
|
bool debug_auto_load = false;
|
||||||
|
|
||||||
/* "show" command for the debug_auto_load configuration variable. */
|
/* "show" command for the debug_auto_load configuration variable. */
|
||||||
|
|
||||||
@ -183,8 +184,7 @@ auto_load_expand_dir_vars (const char *string)
|
|||||||
substitute_path_component (&s, "$debugdir", debug_file_directory);
|
substitute_path_component (&s, "$debugdir", debug_file_directory);
|
||||||
|
|
||||||
if (debug_auto_load && strcmp (s, string) != 0)
|
if (debug_auto_load && strcmp (s, string) != 0)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
auto_load_debug_printf ("Expanded $-variables to \"%s\".", s);
|
||||||
_("auto-load: Expanded $-variables to \"%s\".\n"), s);
|
|
||||||
|
|
||||||
std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
|
std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
|
||||||
= dirnames_to_char_ptr_vec (s);
|
= dirnames_to_char_ptr_vec (s);
|
||||||
@ -198,10 +198,8 @@ auto_load_expand_dir_vars (const char *string)
|
|||||||
static void
|
static void
|
||||||
auto_load_safe_path_vec_update (void)
|
auto_load_safe_path_vec_update (void)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("Updating directories of \"%s\".",
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
auto_load_safe_path);
|
||||||
_("auto-load: Updating directories of \"%s\".\n"),
|
|
||||||
auto_load_safe_path);
|
|
||||||
|
|
||||||
auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
|
auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
|
||||||
size_t len = auto_load_safe_path_vec.size ();
|
size_t len = auto_load_safe_path_vec.size ();
|
||||||
@ -222,23 +220,18 @@ auto_load_safe_path_vec_update (void)
|
|||||||
if (debug_auto_load)
|
if (debug_auto_load)
|
||||||
{
|
{
|
||||||
if (strcmp (in_vec.get (), original.get ()) == 0)
|
if (strcmp (in_vec.get (), original.get ()) == 0)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
auto_load_debug_printf ("Using directory \"%s\".",
|
||||||
_("auto-load: Using directory \"%s\".\n"),
|
in_vec.get ());
|
||||||
in_vec.get ());
|
|
||||||
else
|
else
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
auto_load_debug_printf ("Resolved directory \"%s\" as \"%s\".",
|
||||||
_("auto-load: Resolved directory \"%s\" "
|
original.get (), in_vec.get ());
|
||||||
"as \"%s\".\n"),
|
|
||||||
original.get (), in_vec.get ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If gdb_realpath returns a different content, append it. */
|
/* If gdb_realpath returns a different content, append it. */
|
||||||
if (strcmp (real_path.get (), in_vec.get ()) != 0)
|
if (strcmp (real_path.get (), in_vec.get ()) != 0)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("And canonicalized as \"%s\".",
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
real_path.get ());
|
||||||
_("auto-load: And canonicalized as \"%s\".\n"),
|
|
||||||
real_path.get ());
|
|
||||||
|
|
||||||
auto_load_safe_path_vec.push_back (std::move (real_path));
|
auto_load_safe_path_vec.push_back (std::move (real_path));
|
||||||
}
|
}
|
||||||
@ -338,10 +331,8 @@ filename_is_in_pattern_1 (char *filename, char *pattern)
|
|||||||
size_t pattern_len = strlen (pattern);
|
size_t pattern_len = strlen (pattern);
|
||||||
size_t filename_len = strlen (filename);
|
size_t filename_len = strlen (filename);
|
||||||
|
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("Matching file \"%s\" to pattern \"%s\"",
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Matching file \"%s\" "
|
filename, pattern);
|
||||||
"to pattern \"%s\"\n"),
|
|
||||||
filename, pattern);
|
|
||||||
|
|
||||||
/* Trim trailing slashes ("/") from PATTERN. Even for "d:\" paths as
|
/* Trim trailing slashes ("/") from PATTERN. Even for "d:\" paths as
|
||||||
trailing slashes are trimmed also from FILENAME it still matches
|
trailing slashes are trimmed also from FILENAME it still matches
|
||||||
@ -355,9 +346,7 @@ filename_is_in_pattern_1 (char *filename, char *pattern)
|
|||||||
IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename. */
|
IS_DIR_SEPARATOR character, such as the 'C:\x.exe' filename. */
|
||||||
if (pattern_len == 0)
|
if (pattern_len == 0)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("Matched - empty pattern");
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
|
||||||
_("auto-load: Matched - empty pattern\n"));
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,20 +359,15 @@ filename_is_in_pattern_1 (char *filename, char *pattern)
|
|||||||
filename[filename_len] = '\0';
|
filename[filename_len] = '\0';
|
||||||
if (filename_len == 0)
|
if (filename_len == 0)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("Not matched - pattern \"%s\".", pattern);
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
|
||||||
_("auto-load: Not matched - pattern \"%s\".\n"),
|
|
||||||
pattern);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gdb_filename_fnmatch (pattern, filename, FNM_FILE_NAME | FNM_NOESCAPE)
|
if (gdb_filename_fnmatch (pattern, filename, FNM_FILE_NAME | FNM_NOESCAPE)
|
||||||
== 0)
|
== 0)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("Matched - file \"%s\" to pattern \"%s\".",
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Matched - file "
|
filename, pattern);
|
||||||
"\"%s\" to pattern \"%s\".\n"),
|
|
||||||
filename, pattern);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,10 +418,8 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
|
|||||||
{
|
{
|
||||||
*filename_realp = gdb_realpath (filename);
|
*filename_realp = gdb_realpath (filename);
|
||||||
if (debug_auto_load && strcmp (filename_realp->get (), filename) != 0)
|
if (debug_auto_load && strcmp (filename_realp->get (), filename) != 0)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
auto_load_debug_printf ("Resolved file \"%s\" as \"%s\".",
|
||||||
_("auto-load: Resolved "
|
filename, filename_realp->get ());
|
||||||
"file \"%s\" as \"%s\".\n"),
|
|
||||||
filename, filename_realp->get ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp (filename_realp->get (), filename) != 0)
|
if (strcmp (filename_realp->get (), filename) != 0)
|
||||||
@ -451,10 +433,8 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
|
|||||||
|
|
||||||
if (pattern != NULL)
|
if (pattern != NULL)
|
||||||
{
|
{
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf ("File \"%s\" matches directory \"%s\".",
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: File \"%s\" matches "
|
filename, pattern);
|
||||||
"directory \"%s\".\n"),
|
|
||||||
filename, pattern);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -464,20 +444,11 @@ filename_is_in_auto_load_safe_path_vec (const char *filename,
|
|||||||
/* See auto-load.h. */
|
/* See auto-load.h. */
|
||||||
|
|
||||||
bool
|
bool
|
||||||
file_is_auto_load_safe (const char *filename, const char *debug_fmt, ...)
|
file_is_auto_load_safe (const char *filename)
|
||||||
{
|
{
|
||||||
gdb::unique_xmalloc_ptr<char> filename_real;
|
gdb::unique_xmalloc_ptr<char> filename_real;
|
||||||
static bool advice_printed = false;
|
static bool advice_printed = false;
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
|
if (filename_is_in_auto_load_safe_path_vec (filename, &filename_real))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -766,9 +737,10 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
|
|||||||
|
|
||||||
gdb_file_up input = gdb_fopen_cloexec (filename.c_str (), "r");
|
gdb_file_up input = gdb_fopen_cloexec (filename.c_str (), "r");
|
||||||
debugfile = filename.c_str ();
|
debugfile = filename.c_str ();
|
||||||
if (debug_auto_load)
|
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
|
auto_load_debug_printf ("Attempted file \"%s\" %s.",
|
||||||
debugfile, input ? _("exists") : _("does not exist"));
|
debugfile,
|
||||||
|
input != nullptr ? "exists" : "does not exist");
|
||||||
|
|
||||||
std::string debugfile_holder;
|
std::string debugfile_holder;
|
||||||
if (!input)
|
if (!input)
|
||||||
@ -779,10 +751,9 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
|
|||||||
std::vector<gdb::unique_xmalloc_ptr<char>> vec
|
std::vector<gdb::unique_xmalloc_ptr<char>> vec
|
||||||
= auto_load_expand_dir_vars (auto_load_dir);
|
= auto_load_expand_dir_vars (auto_load_dir);
|
||||||
|
|
||||||
if (debug_auto_load)
|
auto_load_debug_printf
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
|
("Searching 'set auto-load scripts-directory' path \"%s\".",
|
||||||
"scripts-directory' path \"%s\".\n"),
|
auto_load_dir);
|
||||||
auto_load_dir);
|
|
||||||
|
|
||||||
/* Convert Windows file name from c:/dir/file to /c/dir/file. */
|
/* Convert Windows file name from c:/dir/file to /c/dir/file. */
|
||||||
if (HAS_DRIVE_SPEC (debugfile))
|
if (HAS_DRIVE_SPEC (debugfile))
|
||||||
@ -796,11 +767,13 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
|
|||||||
debugfile = debugfile_holder.c_str ();
|
debugfile = debugfile_holder.c_str ();
|
||||||
|
|
||||||
input = gdb_fopen_cloexec (debugfile, "r");
|
input = gdb_fopen_cloexec (debugfile, "r");
|
||||||
if (debug_auto_load)
|
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
|
auto_load_debug_printf ("Attempted file \"%s\" %s.",
|
||||||
"\"%s\" %s.\n"),
|
debugfile,
|
||||||
debugfile,
|
(input != nullptr
|
||||||
input ? _("exists") : _("does not exist"));
|
? "exists"
|
||||||
|
: "does not exist"));
|
||||||
|
|
||||||
if (input != NULL)
|
if (input != NULL)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -810,12 +783,11 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
|
|||||||
{
|
{
|
||||||
struct auto_load_pspace_info *pspace_info;
|
struct auto_load_pspace_info *pspace_info;
|
||||||
|
|
||||||
bool is_safe
|
auto_load_debug_printf
|
||||||
= file_is_auto_load_safe (debugfile,
|
("Loading %s script \"%s\" by extension for objfile \"%s\".",
|
||||||
_("auto-load: Loading %s script \"%s\""
|
ext_lang_name (language), debugfile, objfile_name (objfile));
|
||||||
" by extension for objfile \"%s\".\n"),
|
|
||||||
ext_lang_name (language),
|
bool is_safe = file_is_auto_load_safe (debugfile);
|
||||||
debugfile, objfile_name (objfile));
|
|
||||||
|
|
||||||
/* Add this script to the hash table too so
|
/* Add this script to the hash table too so
|
||||||
"info auto-load ${lang}-scripts" can print it. */
|
"info auto-load ${lang}-scripts" can print it. */
|
||||||
@ -871,10 +843,11 @@ auto_load_objfile_script (struct objfile *objfile,
|
|||||||
{
|
{
|
||||||
len -= lexe;
|
len -= lexe;
|
||||||
realname.get ()[len] = '\0';
|
realname.get ()[len] = '\0';
|
||||||
if (debug_auto_load)
|
|
||||||
fprintf_unfiltered (gdb_stdlog, _("auto-load: Stripped .exe suffix, "
|
auto_load_debug_printf
|
||||||
"retrying with \"%s\".\n"),
|
("auto-load: Stripped .exe suffix, retrying with \"%s\".",
|
||||||
realname.get ());
|
realname.get ());
|
||||||
|
|
||||||
auto_load_objfile_script_1 (objfile, realname.get (), language);
|
auto_load_objfile_script_1 (objfile, realname.get (), language);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -917,13 +890,12 @@ source_script_file (struct auto_load_pspace_info *pspace_info,
|
|||||||
|
|
||||||
if (opened)
|
if (opened)
|
||||||
{
|
{
|
||||||
if (!file_is_auto_load_safe (opened->full_path.get (),
|
auto_load_debug_printf
|
||||||
_("auto-load: Loading %s script "
|
("Loading %s script \"%s\" from section \"%s\" of objfile \"%s\".",
|
||||||
"\"%s\" from section \"%s\" of "
|
ext_lang_name (language), opened->full_path.get (),
|
||||||
"objfile \"%s\".\n"),
|
section_name, objfile_name (objfile));
|
||||||
ext_lang_name (language),
|
|
||||||
opened->full_path.get (),
|
if (!file_is_auto_load_safe (opened->full_path.get ()))
|
||||||
section_name, objfile_name (objfile)))
|
|
||||||
opened.reset ();
|
opened.reset ();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1018,13 +990,11 @@ of file %ps."),
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_safe
|
auto_load_debug_printf
|
||||||
= file_is_auto_load_safe (objfile_name (objfile),
|
("Loading %s script \"%s\" from section \"%s\" of objfile \"%s\".",
|
||||||
_("auto-load: Loading %s script "
|
ext_lang_name (language), name, section_name, objfile_name (objfile));
|
||||||
"\"%s\" from section \"%s\" of "
|
|
||||||
"objfile \"%s\".\n"),
|
bool is_safe = file_is_auto_load_safe (objfile_name (objfile));
|
||||||
ext_lang_name (language), name,
|
|
||||||
section_name, objfile_name (objfile));
|
|
||||||
|
|
||||||
bool in_hash_table
|
bool in_hash_table
|
||||||
= maybe_add_script_text (pspace_info, is_safe, name, language);
|
= maybe_add_script_text (pspace_info, is_safe, name, language);
|
||||||
|
@ -25,6 +25,15 @@ struct program_space;
|
|||||||
struct auto_load_pspace_info;
|
struct auto_load_pspace_info;
|
||||||
struct extension_language_defn;
|
struct extension_language_defn;
|
||||||
|
|
||||||
|
/* Value of the 'set debug auto-load' configuration variable. */
|
||||||
|
|
||||||
|
extern bool debug_auto_load;
|
||||||
|
|
||||||
|
/* Print an "auto-load" debug statement. */
|
||||||
|
|
||||||
|
#define auto_load_debug_printf(fmt, ...) \
|
||||||
|
debug_prefixed_printf_cond (debug_auto_load, "auto-load", fmt, ##__VA_ARGS__)
|
||||||
|
|
||||||
extern bool global_auto_load;
|
extern bool global_auto_load;
|
||||||
|
|
||||||
extern bool auto_load_local_gdbinit;
|
extern bool auto_load_local_gdbinit;
|
||||||
@ -52,9 +61,7 @@ extern struct cmd_list_element **auto_load_info_cmdlist_get (void);
|
|||||||
even if the caller would quietly skip non-existing file in unsafe
|
even if the caller would quietly skip non-existing file in unsafe
|
||||||
directory. */
|
directory. */
|
||||||
|
|
||||||
extern bool file_is_auto_load_safe (const char *filename,
|
extern bool file_is_auto_load_safe (const char *filename);
|
||||||
const char *debug_fmt, ...)
|
|
||||||
ATTRIBUTE_PRINTF (2, 3);
|
|
||||||
|
|
||||||
/* Return true if auto-loading gdb scripts is enabled. */
|
/* Return true if auto-loading gdb scripts is enabled. */
|
||||||
|
|
||||||
|
@ -976,10 +976,11 @@ try_thread_db_load (const char *library, bool check_auto_load_safe)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
|
auto_load_debug_printf
|
||||||
"library \"%s\" from explicit "
|
("Loading libthread-db library \"%s\" from explicit directory.",
|
||||||
"directory.\n"),
|
library);
|
||||||
library))
|
|
||||||
|
if (!file_is_auto_load_safe (library))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
gdb/main.c
16
gdb/main.c
@ -1185,15 +1185,17 @@ captured_main_1 (struct captured_main_args *context)
|
|||||||
auto_load_local_gdbinit_pathname
|
auto_load_local_gdbinit_pathname
|
||||||
= gdb_realpath (local_gdbinit.c_str ()).release ();
|
= gdb_realpath (local_gdbinit.c_str ()).release ();
|
||||||
|
|
||||||
if (!inhibit_gdbinit && auto_load_local_gdbinit
|
if (!inhibit_gdbinit && auto_load_local_gdbinit)
|
||||||
&& file_is_auto_load_safe (local_gdbinit.c_str (),
|
|
||||||
_("auto-load: Loading .gdbinit "
|
|
||||||
"file \"%s\".\n"),
|
|
||||||
local_gdbinit.c_str ()))
|
|
||||||
{
|
{
|
||||||
auto_load_local_gdbinit_loaded = 1;
|
auto_load_debug_printf ("Loading .gdbinit file \"%s\".",
|
||||||
|
local_gdbinit.c_str ());
|
||||||
|
|
||||||
ret = catch_command_errors (source_script, local_gdbinit.c_str (), 0);
|
if (file_is_auto_load_safe (local_gdbinit.c_str ()))
|
||||||
|
{
|
||||||
|
auto_load_local_gdbinit_loaded = 1;
|
||||||
|
|
||||||
|
ret = catch_command_errors (source_script, local_gdbinit.c_str (), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user