aboutsummaryrefslogtreecommitdiff
path: root/gdb/auxv.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-04-21 12:41:29 -0600
committerTom Tromey <tom@tromey.com>2019-05-08 16:01:48 -0600
commite9b89e2d01043108283df02261ed718aae705bc8 (patch)
treebcc5a004d2648e30f05a6787966fc93de3492b0d /gdb/auxv.c
parent8c42777cd8e1557ffb29fe9c172edd8cc1de14b7 (diff)
downloadgdb-e9b89e2d01043108283df02261ed718aae705bc8.zip
gdb-e9b89e2d01043108283df02261ed718aae705bc8.tar.gz
gdb-e9b89e2d01043108283df02261ed718aae705bc8.tar.bz2
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.
Diffstat (limited to 'gdb/auxv.c')
-rw-r--r--gdb/auxv.c35
1 files changed, 5 insertions, 30 deletions
diff --git a/gdb/auxv.c b/gdb/auxv.c
index 13caa93..5e0ff26 100644
--- a/gdb/auxv.c
+++ b/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);