Convert auxv.c to type-safe registry API
This changes auxv.c to use the type-safe registry API. gdb/ChangeLog 2019-05-08 Tom Tromey <tom@tromey.com> * auxv.c (auxv_inferior_data): Move. Change type. (auxv_inferior_data_cleanup): Remove. (invalidate_auxv_cache_inf): Rewrite. (get_auxv_inferior_data, _initialize_auxv): Update.
This commit is contained in:
parent
8c42777cd8
commit
e9b89e2d01
|
@ -1,3 +1,10 @@
|
|||
2019-05-08 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* auxv.c (auxv_inferior_data): Move. Change type.
|
||||
(auxv_inferior_data_cleanup): Remove.
|
||||
(invalidate_auxv_cache_inf): Rewrite.
|
||||
(get_auxv_inferior_data, _initialize_auxv): Update.
|
||||
|
||||
2019-05-08 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* symfile-debug.c (struct debug_sym_fns_data): Add initializers.
|
||||
|
|
35
gdb/auxv.c
35
gdb/auxv.c
|
@ -293,9 +293,6 @@ target_auxv_parse (gdb_byte **readptr,
|
|||
}
|
||||
|
||||
|
||||
/* Per-inferior data key for auxv. */
|
||||
static const struct inferior_data *auxv_inferior_data;
|
||||
|
||||
/* Auxiliary Vector information structure. This is used by GDB
|
||||
for caching purposes for each inferior. This helps reduce the
|
||||
overhead of transfering data from a remote target to the local host. */
|
||||
|
@ -304,32 +301,15 @@ struct auxv_info
|
|||
gdb::optional<gdb::byte_vector> data;
|
||||
};
|
||||
|
||||
/* Handles the cleanup of the auxv cache for inferior INF. ARG is ignored.
|
||||
Frees whatever allocated space there is to be freed and sets INF's auxv cache
|
||||
data pointer to NULL.
|
||||
|
||||
This function is called when the following events occur: inferior_appeared,
|
||||
inferior_exit and executable_changed. */
|
||||
|
||||
static void
|
||||
auxv_inferior_data_cleanup (struct inferior *inf, void *arg)
|
||||
{
|
||||
struct auxv_info *info;
|
||||
|
||||
info = (struct auxv_info *) inferior_data (inf, auxv_inferior_data);
|
||||
if (info != NULL)
|
||||
{
|
||||
delete info;
|
||||
set_inferior_data (inf, auxv_inferior_data, NULL);
|
||||
}
|
||||
}
|
||||
/* Per-inferior data key for auxv. */
|
||||
static const struct inferior_key<auxv_info> auxv_inferior_data;
|
||||
|
||||
/* Invalidate INF's auxv cache. */
|
||||
|
||||
static void
|
||||
invalidate_auxv_cache_inf (struct inferior *inf)
|
||||
{
|
||||
auxv_inferior_data_cleanup (inf, NULL);
|
||||
auxv_inferior_data.clear (inf);
|
||||
}
|
||||
|
||||
/* Invalidate current inferior's auxv cache. */
|
||||
|
@ -350,12 +330,11 @@ get_auxv_inferior_data (struct target_ops *ops)
|
|||
struct auxv_info *info;
|
||||
struct inferior *inf = current_inferior ();
|
||||
|
||||
info = (struct auxv_info *) inferior_data (inf, auxv_inferior_data);
|
||||
info = auxv_inferior_data.get (inf);
|
||||
if (info == NULL)
|
||||
{
|
||||
info = new auxv_info;
|
||||
info = auxv_inferior_data.emplace (inf);
|
||||
info->data = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL);
|
||||
set_inferior_data (inf, auxv_inferior_data, info);
|
||||
}
|
||||
|
||||
return info;
|
||||
|
@ -574,10 +553,6 @@ _initialize_auxv (void)
|
|||
_("Display the inferior's auxiliary vector.\n\
|
||||
This is information provided by the operating system at program startup."));
|
||||
|
||||
/* Set an auxv cache per-inferior. */
|
||||
auxv_inferior_data
|
||||
= register_inferior_data_with_cleanup (NULL, auxv_inferior_data_cleanup);
|
||||
|
||||
/* Observers used to invalidate the auxv cache when needed. */
|
||||
gdb::observers::inferior_exit.attach (invalidate_auxv_cache_inf);
|
||||
gdb::observers::inferior_appeared.attach (invalidate_auxv_cache_inf);
|
||||
|
|
Loading…
Reference in New Issue