diff options
author | Tom Tromey <tom@tromey.com> | 2018-07-23 19:47:39 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-11-09 16:04:03 -0700 |
commit | eefce37f62d87a65f63e12e421a3f727b2685e9d (patch) | |
tree | 65202f942e850bde312cebcdf8d59a5b9aef1ace | |
parent | 2179fbc36d23f29a83fb3dfcac0fc7d1fb31b8e8 (diff) | |
download | binutils-eefce37f62d87a65f63e12e421a3f727b2685e9d.zip binutils-eefce37f62d87a65f63e12e421a3f727b2685e9d.tar.gz binutils-eefce37f62d87a65f63e12e421a3f727b2685e9d.tar.bz2 |
Remove a VEC from remote.c
This removes the VEC from remote_g_packet_data, replacing it with a
std::vector. This is a bit odd in that this object is never
destroyed, and is obstack-allocated. I believe a gdbarch is never
destroyed, so this seemed ok.
Tested by the buildbot.
gdb/ChangeLog
2018-11-09 Tom Tromey <tom@tromey.com>
* remote.c (remote_g_packet_guess_s): Remove typedef and DEF_VEC.
(struct remote_g_packet_data): Derive from allocate_on_obstack.
<guesses>: Now a std::vector.
(remote_g_packet_data_init, register_remote_g_packet_guess):
Update.
(remote_read_description_p): Update. Return bool.
(remote_target::read_description): Update.
(struct remote_g_packet_guess): Add constructor.
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/remote.c | 51 |
2 files changed, 32 insertions, 30 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2284038..b8ca2ff 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,16 @@ 2018-11-09 Tom Tromey <tom@tromey.com> + * remote.c (remote_g_packet_guess_s): Remove typedef and DEF_VEC. + (struct remote_g_packet_data): Derive from allocate_on_obstack. + <guesses>: Now a std::vector. + (remote_g_packet_data_init, register_remote_g_packet_guess): + Update. + (remote_read_description_p): Update. Return bool. + (remote_target::read_description): Update. + (struct remote_g_packet_guess): Add constructor. + +2018-11-09 Tom Tromey <tom@tromey.com> + * common/scoped_fd.h (class scoped_fd): Add move constructor and move assignment operator. * psymtab.c (psymtab_to_fullname): Update. diff --git a/gdb/remote.c b/gdb/remote.c index c53553a..6004509 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -1030,7 +1030,7 @@ static ptid_t read_ptid (const char *buf, const char **obuf); static void remote_async_inferior_event_handler (gdb_client_data); -static int remote_read_description_p (struct target_ops *target); +static bool remote_read_description_p (struct target_ops *target); static void remote_console_output (char *msg); @@ -11617,15 +11617,19 @@ remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) struct remote_g_packet_guess { + remote_g_packet_guess (int bytes_, const struct target_desc *tdesc_) + : bytes (bytes_), + tdesc (tdesc_) + { + } + int bytes; const struct target_desc *tdesc; }; -typedef struct remote_g_packet_guess remote_g_packet_guess_s; -DEF_VEC_O(remote_g_packet_guess_s); -struct remote_g_packet_data +struct remote_g_packet_data : public allocate_on_obstack { - VEC(remote_g_packet_guess_s) *guesses; + std::vector<remote_g_packet_guess> guesses; }; static struct gdbarch_data *remote_g_packet_data_handle; @@ -11633,7 +11637,7 @@ static struct gdbarch_data *remote_g_packet_data_handle; static void * remote_g_packet_data_init (struct obstack *obstack) { - return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data); + return new (obstack) remote_g_packet_data; } void @@ -11643,38 +11647,29 @@ register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes, struct remote_g_packet_data *data = ((struct remote_g_packet_data *) gdbarch_data (gdbarch, remote_g_packet_data_handle)); - struct remote_g_packet_guess new_guess, *guess; - int ix; gdb_assert (tdesc != NULL); - for (ix = 0; - VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess); - ix++) - if (guess->bytes == bytes) + for (const remote_g_packet_guess &guess : data->guesses) + if (guess.bytes == bytes) internal_error (__FILE__, __LINE__, _("Duplicate g packet description added for size %d"), bytes); - new_guess.bytes = bytes; - new_guess.tdesc = tdesc; - VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess); + data->guesses.emplace_back (bytes, tdesc); } -/* Return 1 if remote_read_description would do anything on this target - and architecture, 0 otherwise. */ +/* Return true if remote_read_description would do anything on this target + and architecture, false otherwise. */ -static int +static bool remote_read_description_p (struct target_ops *target) { struct remote_g_packet_data *data = ((struct remote_g_packet_data *) gdbarch_data (target_gdbarch (), remote_g_packet_data_handle)); - if (!VEC_empty (remote_g_packet_guess_s, data->guesses)) - return 1; - - return 0; + return !data->guesses.empty (); } const struct target_desc * @@ -11689,17 +11684,13 @@ remote_target::read_description () if (!target_has_execution || inferior_ptid == null_ptid) return beneath ()->read_description (); - if (!VEC_empty (remote_g_packet_guess_s, data->guesses)) + if (!data->guesses.empty ()) { - struct remote_g_packet_guess *guess; - int ix; int bytes = send_g_packet (); - for (ix = 0; - VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess); - ix++) - if (guess->bytes == bytes) - return guess->tdesc; + for (const remote_g_packet_guess &guess : data->guesses) + if (guess.bytes == bytes) + return guess.tdesc; /* We discard the g packet. A minor optimization would be to hold on to it, and fill the register cache once we have selected |