Use new and delete for windows_thread_info
This adds a constructor, destructor, and member initializers to windows_thread_info, and changes gdb and gdbserver to use new and delete. gdb/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * windows-nat.c (windows_add_thread): Use new. (windows_init_thread_list, windows_delete_thread): Use delete. (get_windows_debug_event): Update. * nat/windows-nat.h (struct windows_thread_info): Add constructor, destructor, and initializers. gdbserver/ChangeLog 2020-04-08 Tom Tromey <tromey@adacore.com> * win32-low.c (child_add_thread): Use new. (delete_thread_info): Use delete.
This commit is contained in:
parent
ae1f888075
commit
e9534bd257
|
@ -1,3 +1,11 @@
|
||||||
|
2020-04-08 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
|
* windows-nat.c (windows_add_thread): Use new.
|
||||||
|
(windows_init_thread_list, windows_delete_thread): Use delete.
|
||||||
|
(get_windows_debug_event): Update.
|
||||||
|
* nat/windows-nat.h (struct windows_thread_info): Add constructor,
|
||||||
|
destructor, and initializers.
|
||||||
|
|
||||||
2020-04-08 Tom Tromey <tromey@adacore.com>
|
2020-04-08 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
* windows-nat.c (struct windows_thread_info): Remove.
|
* windows-nat.c (struct windows_thread_info): Remove.
|
||||||
|
|
|
@ -25,6 +25,20 @@
|
||||||
each thread. */
|
each thread. */
|
||||||
struct windows_thread_info
|
struct windows_thread_info
|
||||||
{
|
{
|
||||||
|
windows_thread_info (DWORD tid_, HANDLE h_, CORE_ADDR tlb)
|
||||||
|
: tid (tid_),
|
||||||
|
h (h_),
|
||||||
|
thread_local_base (tlb)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~windows_thread_info ()
|
||||||
|
{
|
||||||
|
xfree (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
DISABLE_COPY_AND_ASSIGN (windows_thread_info);
|
||||||
|
|
||||||
/* The Win32 thread identifier. */
|
/* The Win32 thread identifier. */
|
||||||
DWORD tid;
|
DWORD tid;
|
||||||
|
|
||||||
|
@ -35,17 +49,17 @@ struct windows_thread_info
|
||||||
CORE_ADDR thread_local_base;
|
CORE_ADDR thread_local_base;
|
||||||
|
|
||||||
/* Non zero if SuspendThread was called on this thread. */
|
/* Non zero if SuspendThread was called on this thread. */
|
||||||
int suspended;
|
int suspended = 0;
|
||||||
|
|
||||||
#ifdef _WIN32_WCE
|
#ifdef _WIN32_WCE
|
||||||
/* The context as retrieved right after suspending the thread. */
|
/* The context as retrieved right after suspending the thread. */
|
||||||
CONTEXT base_context;
|
CONTEXT base_context {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The context of the thread, including any manipulations. */
|
/* The context of the thread, including any manipulations. */
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
CONTEXT context;
|
CONTEXT context {};
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
WOW64_CONTEXT wow64_context;
|
WOW64_CONTEXT wow64_context;
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,14 +67,14 @@ struct windows_thread_info
|
||||||
|
|
||||||
/* Whether debug registers changed since we last set CONTEXT back to
|
/* Whether debug registers changed since we last set CONTEXT back to
|
||||||
the thread. */
|
the thread. */
|
||||||
int debug_registers_changed;
|
int debug_registers_changed = 0;
|
||||||
|
|
||||||
/* Nonzero if CONTEXT is invalidated and must be re-read from the
|
/* Nonzero if CONTEXT is invalidated and must be re-read from the
|
||||||
inferior thread. */
|
inferior thread. */
|
||||||
int reload_context;
|
int reload_context = 0;
|
||||||
|
|
||||||
/* The name of the thread, allocated by xmalloc. */
|
/* The name of the thread, allocated by xmalloc. */
|
||||||
char *name;
|
char *name = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -468,16 +468,14 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb, bool main_thread_p)
|
||||||
if ((th = thread_rec (id, FALSE)))
|
if ((th = thread_rec (id, FALSE)))
|
||||||
return th;
|
return th;
|
||||||
|
|
||||||
th = XCNEW (windows_thread_info);
|
CORE_ADDR base = (CORE_ADDR) (uintptr_t) tlb;
|
||||||
th->tid = id;
|
|
||||||
th->h = h;
|
|
||||||
th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb;
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
/* For WOW64 processes, this is actually the pointer to the 64bit TIB,
|
/* For WOW64 processes, this is actually the pointer to the 64bit TIB,
|
||||||
and the 32bit TIB is exactly 2 pages after it. */
|
and the 32bit TIB is exactly 2 pages after it. */
|
||||||
if (wow64_process)
|
if (wow64_process)
|
||||||
th->thread_local_base += 0x2000;
|
base += 0x2000;
|
||||||
#endif
|
#endif
|
||||||
|
th = new windows_thread_info (id, h, base);
|
||||||
thread_list.push_back (th);
|
thread_list.push_back (th);
|
||||||
|
|
||||||
/* Add this new thread to the list of threads.
|
/* Add this new thread to the list of threads.
|
||||||
|
@ -536,7 +534,7 @@ windows_init_thread_list (void)
|
||||||
init_thread_list ();
|
init_thread_list ();
|
||||||
|
|
||||||
for (windows_thread_info *here : thread_list)
|
for (windows_thread_info *here : thread_list)
|
||||||
xfree (here);
|
delete here;
|
||||||
|
|
||||||
thread_list.clear ();
|
thread_list.clear ();
|
||||||
}
|
}
|
||||||
|
@ -581,8 +579,7 @@ windows_delete_thread (ptid_t ptid, DWORD exit_code, bool main_thread_p)
|
||||||
|
|
||||||
if (iter != thread_list.end ())
|
if (iter != thread_list.end ())
|
||||||
{
|
{
|
||||||
xfree ((*iter)->name);
|
delete *iter;
|
||||||
xfree (*iter);
|
|
||||||
thread_list.erase (iter);
|
thread_list.erase (iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1718,7 +1715,7 @@ windows_nat_target::get_windows_debug_event (int pid,
|
||||||
BOOL debug_event;
|
BOOL debug_event;
|
||||||
DWORD continue_status, event_code;
|
DWORD continue_status, event_code;
|
||||||
windows_thread_info *th;
|
windows_thread_info *th;
|
||||||
static windows_thread_info dummy_thread_info;
|
static windows_thread_info dummy_thread_info (0, 0, 0);
|
||||||
DWORD thread_id = 0;
|
DWORD thread_id = 0;
|
||||||
|
|
||||||
last_sig = GDB_SIGNAL_0;
|
last_sig = GDB_SIGNAL_0;
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2020-04-08 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
|
* win32-low.c (child_add_thread): Use new.
|
||||||
|
(delete_thread_info): Use delete.
|
||||||
|
|
||||||
2020-04-08 Tom Tromey <tromey@adacore.com>
|
2020-04-08 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
* win32-low.h (struct windows_thread_info): Remove.
|
* win32-low.h (struct windows_thread_info): Remove.
|
||||||
|
|
|
@ -212,10 +212,7 @@ child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb)
|
||||||
if ((th = thread_rec (ptid, FALSE)))
|
if ((th = thread_rec (ptid, FALSE)))
|
||||||
return th;
|
return th;
|
||||||
|
|
||||||
th = XCNEW (windows_thread_info);
|
th = new windows_thread_info (tid, h, (CORE_ADDR) (uintptr_t) tlb);
|
||||||
th->tid = tid;
|
|
||||||
th->h = h;
|
|
||||||
th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb;
|
|
||||||
|
|
||||||
add_thread (ptid, th);
|
add_thread (ptid, th);
|
||||||
|
|
||||||
|
@ -233,7 +230,7 @@ delete_thread_info (thread_info *thread)
|
||||||
|
|
||||||
remove_thread (thread);
|
remove_thread (thread);
|
||||||
CloseHandle (th->h);
|
CloseHandle (th->h);
|
||||||
free (th);
|
delete th;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Delete a thread from the list of threads. */
|
/* Delete a thread from the list of threads. */
|
||||||
|
|
Loading…
Reference in New Issue