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:
Tom Tromey 2019-04-21 12:41:29 -06:00
parent 8c42777cd8
commit e9b89e2d01
2 changed files with 12 additions and 30 deletions

View File

@ -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.

View File

@ -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);