projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rename common to gdbsupport
[deliverable/binutils-gdb.git]
/
gdb
/
auto-load.c
diff --git
a/gdb/auto-load.c
b/gdb/auto-load.c
index b79341faf6f0a554128a6ea1abfae415695b3d80..7e417994e8f17a9a67cec5312c9149f513916c0f 100644
(file)
--- a/
gdb/auto-load.c
+++ b/
gdb/auto-load.c
@@
-1,6
+1,6
@@
/* GDB routines for supporting auto-loaded scripts.
/* GDB routines for supporting auto-loaded scripts.
- Copyright (C) 2012-201
8
Free Software Foundation, Inc.
+ Copyright (C) 2012-201
9
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-25,7
+25,7
@@
#include "ui-out.h"
#include "filenames.h"
#include "command.h"
#include "ui-out.h"
#include "filenames.h"
#include "command.h"
-#include "observ
er
.h"
+#include "observ
able
.h"
#include "objfiles.h"
#include "cli/cli-script.h"
#include "gdbcmd.h"
#include "objfiles.h"
#include "cli/cli-script.h"
#include "gdbcmd.h"
@@
-36,10
+36,11
@@
#include "completer.h"
#include "fnmatch.h"
#include "top.h"
#include "completer.h"
#include "fnmatch.h"
#include "top.h"
-#include "filestuff.h"
+#include "
gdbsupport/
filestuff.h"
#include "extension.h"
#include "gdb/section-scripts.h"
#include <algorithm>
#include "extension.h"
#include "gdb/section-scripts.h"
#include <algorithm>
+#include "gdbsupport/pathstuff.h"
/* The section to look in for auto-loaded scripts (in file formats that
support sections).
/* The section to look in for auto-loaded scripts (in file formats that
support sections).
@@
-168,19
+169,15
@@
static char *auto_load_safe_path;
/* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
by tilde_expand and possibly each entries has added its gdb_realpath
counterpart. */
/* Vector of directory elements of AUTO_LOAD_SAFE_PATH with each one normalized
by tilde_expand and possibly each entries has added its gdb_realpath
counterpart. */
-st
atic VEC (char_ptr) *
auto_load_safe_path_vec;
+st
d::vector<gdb::unique_xmalloc_ptr<char>>
auto_load_safe_path_vec;
/* Expand $datadir and $debugdir in STRING according to the rules of
/* Expand $datadir and $debugdir in STRING according to the rules of
- substitute_path_component. Return vector from dirnames_to_char_ptr_vec,
- this vector must be freed by free_char_ptr_vec by the caller. */
+ substitute_path_component. */
-static
VEC (char_ptr) *
+static
std::vector<gdb::unique_xmalloc_ptr<char>>
auto_load_expand_dir_vars (const char *string)
{
auto_load_expand_dir_vars (const char *string)
{
- VEC (char_ptr) *dir_vec;
- char *s;
-
- s = xstrdup (string);
+ char *s = xstrdup (string);
substitute_path_component (&s, "$datadir", gdb_datadir);
substitute_path_component (&s, "$debugdir", debug_file_directory);
substitute_path_component (&s, "$datadir", gdb_datadir);
substitute_path_component (&s, "$debugdir", debug_file_directory);
@@
-188,7
+185,8
@@
auto_load_expand_dir_vars (const char *string)
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Expanded $-variables to \"%s\".\n"), s);
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Expanded $-variables to \"%s\".\n"), s);
- dir_vec = dirnames_to_char_ptr_vec (s);
+ std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec
+ = dirnames_to_char_ptr_vec (s);
xfree(s);
return dir_vec;
xfree(s);
return dir_vec;
@@
-199,54
+197,49
@@
auto_load_expand_dir_vars (const char *string)
static void
auto_load_safe_path_vec_update (void)
{
static void
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);
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 = auto_load_expand_dir_vars (auto_load_safe_path);
auto_load_safe_path_vec = auto_load_expand_dir_vars (auto_load_safe_path);
-
len = VEC_length (char_ptr, auto_load_safe_path_vec
);
+
size_t len = auto_load_safe_path_vec.size (
);
/* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
element. */
/* Apply tilde_expand and gdb_realpath to each AUTO_LOAD_SAFE_PATH_VEC
element. */
- for (
ix = 0; ix < len; ix
++)
+ for (
size_t i = 0; i < len; i
++)
{
{
-
char *dir = VEC_index (char_ptr, auto_load_safe_path_vec, ix)
;
-
char *expanded = tilde_expand (dir
);
- gdb::unique_xmalloc_ptr<char> real_path = gdb_realpath (expanded);
+
gdb::unique_xmalloc_ptr<char> &in_vec = auto_load_safe_path_vec[i]
;
+
gdb::unique_xmalloc_ptr<char> expanded (tilde_expand (in_vec.get ())
);
+ gdb::unique_xmalloc_ptr<char> real_path = gdb_realpath (expanded
.get ()
);
- /* Ensure the current entry is at least tilde_expand-ed. */
- VEC_replace (char_ptr, auto_load_safe_path_vec, ix, expanded);
+ /* Ensure the current entry is at least tilde_expand-ed. ORIGINAL makes
+ sure we free the original string. */
+ gdb::unique_xmalloc_ptr<char> original = std::move (in_vec);
+ in_vec = std::move (expanded);
if (debug_auto_load)
{
if (debug_auto_load)
{
- if (strcmp (
expanded, dir
) == 0)
+ if (strcmp (
in_vec.get (), original.get ()
) == 0)
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Using directory \"%s\".\n"),
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Using directory \"%s\".\n"),
-
expanded
);
+
in_vec.get ()
);
else
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Resolved directory \"%s\" "
"as \"%s\".\n"),
else
fprintf_unfiltered (gdb_stdlog,
_("auto-load: Resolved directory \"%s\" "
"as \"%s\".\n"),
-
dir, expanded
);
+
original.get (), in_vec.get ()
);
}
}
- xfree (dir);
/* If gdb_realpath returns a different content, append it. */
/* If gdb_realpath returns a different content, append it. */
- if (strcmp (real_path.get (),
expanded
) != 0)
+ if (strcmp (real_path.get (),
in_vec.get ()
) != 0)
{
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog,
_("auto-load: And canonicalized as \"%s\".\n"),
real_path.get ());
{
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog,
_("auto-load: And canonicalized as \"%s\".\n"),
real_path.get ());
- VEC_safe_push (char_ptr, auto_load_safe_path_vec,
- real_path.release ());
+ auto_load_safe_path_vec.push_back (std::move (real_path));
}
}
}
}
}
}
@@
-425,13
+418,14
@@
static int
filename_is_in_auto_load_safe_path_vec (const char *filename,
gdb::unique_xmalloc_ptr<char> *filename_realp)
{
filename_is_in_auto_load_safe_path_vec (const char *filename,
gdb::unique_xmalloc_ptr<char> *filename_realp)
{
- char *pattern;
- int ix;
+ const char *pattern = NULL;
- for (ix = 0; VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern);
- ++ix)
- if (*filename_realp == NULL && filename_is_in_pattern (filename, pattern))
- break;
+ for (const gdb::unique_xmalloc_ptr<char> &p : auto_load_safe_path_vec)
+ if (*filename_realp == NULL && filename_is_in_pattern (filename, p.get ()))
+ {
+ pattern = p.get ();
+ break;
+ }
if (pattern == NULL)
{
if (pattern == NULL)
{
@@
-446,10
+440,12
@@
filename_is_in_auto_load_safe_path_vec (const char *filename,
}
if (strcmp (filename_realp->get (), filename) != 0)
}
if (strcmp (filename_realp->get (), filename) != 0)
- for (ix = 0;
- VEC_iterate (char_ptr, auto_load_safe_path_vec, ix, pattern); ++ix)
- if (filename_is_in_pattern (filename_realp->get (), pattern))
- break;
+ for (const gdb::unique_xmalloc_ptr<char> &p : auto_load_safe_path_vec)
+ if (filename_is_in_pattern (filename_realp->get (), p.get ()))
+ {
+ pattern = p.get ();
+ break;
+ }
}
if (pattern != NULL)
}
if (pattern != NULL)
@@
-531,18
+527,21
@@
For more information about this security protection see the\n\
struct auto_load_pspace_info
{
struct auto_load_pspace_info
{
+ auto_load_pspace_info () = default;
+ ~auto_load_pspace_info ();
+
/* For each program space we keep track of loaded scripts, both when
specified as file names and as scripts to be executed directly. */
/* For each program space we keep track of loaded scripts, both when
specified as file names and as scripts to be executed directly. */
- struct htab *loaded_script_files;
- struct htab *loaded_script_texts;
+ struct htab *loaded_script_files
= nullptr
;
+ struct htab *loaded_script_texts
= nullptr
;
/* Non-zero if we've issued the warning about an auto-load script not being
supported. We only want to issue this warning once. */
/* Non-zero if we've issued the warning about an auto-load script not being
supported. We only want to issue this warning once. */
-
int unsupported_script_warning_printed
;
+
bool unsupported_script_warning_printed = false
;
/* Non-zero if we've issued the warning about an auto-load script not being
found. We only want to issue this warning once. */
/* Non-zero if we've issued the warning about an auto-load script not being
found. We only want to issue this warning once. */
-
int script_not_found_warning_printed
;
+
bool script_not_found_warning_printed = false
;
};
/* Objects of this type are stored in the loaded_script hash table. */
};
/* Objects of this type are stored in the loaded_script hash table. */
@@
-563,18
+562,15
@@
struct loaded_script
};
/* Per-program-space data key. */
};
/* Per-program-space data key. */
-static const struct program_space_data *auto_load_pspace_data;
+static const struct program_space_key<struct auto_load_pspace_info>
+ auto_load_pspace_data;
-static void
-auto_load_pspace_data_cleanup (struct program_space *pspace, void *arg)
+auto_load_pspace_info::~auto_load_pspace_info ()
{
{
- struct auto_load_pspace_info *info = (struct auto_load_pspace_info *) arg;
-
- if (info->loaded_script_files)
- htab_delete (info->loaded_script_files);
- if (info->loaded_script_texts)
- htab_delete (info->loaded_script_texts);
- xfree (info);
+ if (loaded_script_files)
+ htab_delete (loaded_script_files);
+ if (loaded_script_texts)
+ htab_delete (loaded_script_texts);
}
/* Get the current autoload data. If none is found yet, add it now. This
}
/* Get the current autoload data. If none is found yet, add it now. This
@@
-585,13
+581,9
@@
get_auto_load_pspace_data (struct program_space *pspace)
{
struct auto_load_pspace_info *info;
{
struct auto_load_pspace_info *info;
- info = ((struct auto_load_pspace_info *)
- program_space_data (pspace, auto_load_pspace_data));
+ info = auto_load_pspace_data.get (pspace);
if (info == NULL)
if (info == NULL)
- {
- info = XCNEW (struct auto_load_pspace_info);
- set_program_space_data (pspace, auto_load_pspace_data, info);
- }
+ info = auto_load_pspace_data.emplace (pspace);
return info;
}
return info;
}
@@
-636,8
+628,8
@@
init_loaded_scripts_info (struct auto_load_pspace_info *pspace_info)
eq_loaded_script_entry,
xfree);
eq_loaded_script_entry,
xfree);
- pspace_info->unsupported_script_warning_printed =
FALSE
;
- pspace_info->script_not_found_warning_printed =
FALSE
;
+ pspace_info->unsupported_script_warning_printed =
false
;
+ pspace_info->script_not_found_warning_printed =
false
;
}
/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
}
/* Wrapper on get_auto_load_pspace_data to also allocate the hash table
@@
-751,17
+743,9
@@
clear_section_scripts (void)
struct program_space *pspace = current_program_space;
struct auto_load_pspace_info *info;
struct program_space *pspace = current_program_space;
struct auto_load_pspace_info *info;
- info = ((struct auto_load_pspace_info *)
- program_space_data (pspace, auto_load_pspace_data));
+ info = auto_load_pspace_data.get (pspace);
if (info != NULL && info->loaded_script_files != NULL)
if (info != NULL && info->loaded_script_files != NULL)
- {
- htab_delete (info->loaded_script_files);
- htab_delete (info->loaded_script_texts);
- info->loaded_script_files = NULL;
- info->loaded_script_texts = NULL;
- info->unsupported_script_warning_printed = FALSE;
- info->script_not_found_warning_printed = FALSE;
- }
+ auto_load_pspace_data.clear (pspace);
}
/* Look for the auto-load script in LANGUAGE associated with OBJFILE where
}
/* Look for the auto-load script in LANGUAGE associated with OBJFILE where
@@
-772,50
+756,38
@@
static int
auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
const struct extension_language_defn *language)
{
auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
const struct extension_language_defn *language)
{
- char *filename, *debugfile;
- int len, retval;
- struct cleanup *cleanups;
+ const char *debugfile;
+ int retval;
const char *suffix = ext_lang_auto_load_suffix (language);
const char *suffix = ext_lang_auto_load_suffix (language);
- len = strlen (realname);
- filename = (char *) xmalloc (len + strlen (suffix) + 1);
- memcpy (filename, realname, len);
- strcpy (filename + len, suffix);
-
- cleanups = make_cleanup (xfree, filename);
+ std::string filename = std::string (realname) + suffix;
- gdb_file_up input = gdb_fopen_cloexec (filename, "r");
- debugfile = filename;
+ gdb_file_up input = gdb_fopen_cloexec (filename
.c_str ()
, "r");
+ debugfile = filename
.c_str ()
;
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
debugfile, input ? _("exists") : _("does not exist"));
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
debugfile, input ? _("exists") : _("does not exist"));
+ std::string debugfile_holder;
if (!input)
{
if (!input)
{
- VEC (char_ptr) *vec;
- int ix;
- char *dir;
-
/* Also try the same file in a subdirectory of gdb's data
directory. */
/* Also try the same file in a subdirectory of gdb's data
directory. */
- vec = auto_load_expand_dir_vars (auto_load_dir);
-
make_cleanup_free_char_ptr_vec (vec
);
+ std::vector<gdb::unique_xmalloc_ptr<char>> vec
+
= auto_load_expand_dir_vars (auto_load_dir
);
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
"scripts-directory' path \"%s\".\n"),
auto_load_dir);
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Searching 'set auto-load "
"scripts-directory' path \"%s\".\n"),
auto_load_dir);
- for (
ix = 0; VEC_iterate (char_ptr, vec, ix, dir); ++ix
)
+ for (
const gdb::unique_xmalloc_ptr<char> &dir : vec
)
{
{
- debugfile = (char *) xmalloc (strlen (dir) + strlen (filename) + 1);
- strcpy (debugfile, dir);
-
/* FILENAME is absolute, so we don't need a "/" here. */
/* FILENAME is absolute, so we don't need a "/" here. */
- strcat (debugfile, filename);
+ debugfile_holder = dir.get () + filename;
+ debugfile = debugfile_holder.c_str ();
- make_cleanup (xfree, debugfile);
input = gdb_fopen_cloexec (debugfile, "r");
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
input = gdb_fopen_cloexec (debugfile, "r");
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
@@
-868,7
+840,6
@@
auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
else
retval = 0;
else
retval = 0;
- do_cleanups (cleanups);
return retval;
}
return retval;
}
@@
-1403,7
+1374,7
@@
of file %s.\n\
Use `info auto-load %s-scripts [REGEXP]' to list them."),
offset, section_name, objfile_name (objfile),
ext_lang_name (language));
Use `info auto-load %s-scripts [REGEXP]' to list them."),
offset, section_name, objfile_name (objfile),
ext_lang_name (language));
- pspace_info->unsupported_script_warning_printed =
1
;
+ pspace_info->unsupported_script_warning_printed =
true
;
}
}
}
}
@@
-1425,7
+1396,7
@@
of file %s.\n\
Use `info auto-load %s-scripts [REGEXP]' to list them."),
offset, section_name, objfile_name (objfile),
ext_lang_name (language));
Use `info auto-load %s-scripts [REGEXP]' to list them."),
offset, section_name, objfile_name (objfile),
ext_lang_name (language));
- pspace_info->script_not_found_warning_printed =
1
;
+ pspace_info->script_not_found_warning_printed =
true
;
}
}
}
}
@@
-1555,11
+1526,7
@@
_initialize_auto_load (void)
char *guile_name_help;
const char *suffix;
char *guile_name_help;
const char *suffix;
- auto_load_pspace_data
- = register_program_space_data_with_cleanup (NULL,
- auto_load_pspace_data_cleanup);
-
- observer_attach_new_objfile (auto_load_new_objfile);
+ gdb::observers::new_objfile.attach (auto_load_new_objfile);
add_setshow_boolean_cmd ("gdb-scripts", class_support,
&auto_load_gdb_scripts, _("\
add_setshow_boolean_cmd ("gdb-scripts", class_support,
&auto_load_gdb_scripts, _("\
@@
-1568,7
+1535,7
@@
Show whether auto-loading of canned sequences of commands scripts is enabled."),
_("\
If enabled, canned sequences of commands are loaded when the debugger reads\n\
an executable or shared library.\n\
_("\
If enabled, canned sequences of commands are loaded when the debugger reads\n\
an executable or shared library.\n\
-This option
s
has security implications for untrusted inferiors."),
+This option has security implications for untrusted inferiors."),
NULL, show_auto_load_gdb_scripts,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
NULL, show_auto_load_gdb_scripts,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
@@
-1586,7
+1553,7
@@
Show whether auto-loading .gdbinit script in current directory is enabled."),
If enabled, canned sequences of commands are loaded when debugger starts\n\
from .gdbinit file in current directory. Such files are deprecated,\n\
use a script associated with inferior executable file instead.\n\
If enabled, canned sequences of commands are loaded when debugger starts\n\
from .gdbinit file in current directory. Such files are deprecated,\n\
use a script associated with inferior executable file instead.\n\
-This option
s
has security implications for untrusted inferiors."),
+This option has security implications for untrusted inferiors."),
NULL, show_auto_load_local_gdbinit,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
NULL, show_auto_load_local_gdbinit,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
@@
-1664,12
+1631,12
@@
Setting this parameter to '/' (without the quotes) allows any file\n\
for the 'set auto-load ...' options. Each path entry can be also shell\n\
wildcard pattern; '*' does not match directory separator.\n\
This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
for the 'set auto-load ...' options. Each path entry can be also shell\n\
wildcard pattern; '*' does not match directory separator.\n\
This option is ignored for the kinds of files having 'set auto-load ... off'.\n\
-This option
s
has security implications for untrusted inferiors."),
+This option has security implications for untrusted inferiors."),
set_auto_load_safe_path,
show_auto_load_safe_path,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
set_auto_load_safe_path,
show_auto_load_safe_path,
auto_load_set_cmdlist_get (),
auto_load_show_cmdlist_get ());
-
observer_attach_gdb_datadir_changed
(auto_load_gdb_datadir_changed);
+
gdb::observers::gdb_datadir_changed.attach
(auto_load_gdb_datadir_changed);
cmd = add_cmd ("add-auto-load-safe-path", class_support,
add_auto_load_safe_path,
cmd = add_cmd ("add-auto-load-safe-path", class_support,
add_auto_load_safe_path,
This page took
0.03019 seconds
and
4
git commands to generate.