gdbserver: make thread_info non-POD

Add a constructor and a destructor.  The constructor takes care of the
initialization that happened in add_thread, while the destructor takes
care of the freeing that happened in free_one_thread.  This is needed to
make target_waitstatus non-POD, as thread_info contains a member of that
type.

Change-Id: I1db321b4de9dd233ede0d5c101950f1d6f1d13b7
This commit is contained in:
Simon Marchi
2021-09-28 16:02:29 -04:00
committed by Simon Marchi
parent add3db9182
commit d2f325df0b
2 changed files with 18 additions and 14 deletions

View File

@@ -29,20 +29,31 @@ struct regcache;
struct thread_info
{
thread_info (ptid_t id, void *target_data)
: id (id), target_data (target_data)
{
this->last_status.kind = TARGET_WAITKIND_IGNORE;
}
~thread_info ()
{
free_register_cache (this->regcache_data);
}
/* The id of this thread. */
ptid_t id;
void *target_data;
struct regcache *regcache_data;
struct regcache *regcache_data = nullptr;
/* The last resume GDB requested on this thread. */
enum resume_kind last_resume_kind;
enum resume_kind last_resume_kind = resume_continue;
/* The last wait status reported for this thread. */
struct target_waitstatus last_status;
/* True if LAST_STATUS hasn't been reported to GDB yet. */
int status_pending_p;
int status_pending_p = 0;
/* Given `while-stepping', a thread may be collecting data for more
than one tracepoint simultaneously. E.g.:
@@ -67,10 +78,10 @@ struct thread_info
tracepoint actions this thread is now collecting; NULL if empty.
Each item in the list holds the current step of the while-stepping
action. */
struct wstep_state *while_stepping;
struct wstep_state *while_stepping = nullptr;
/* Branch trace target information for this thread. */
struct btrace_target_info *btrace;
struct btrace_target_info *btrace = nullptr;
};
extern std::list<thread_info *> all_threads;