diff options
author | Tom Tromey <tromey@adacore.com> | 2020-04-08 14:33:35 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-04-08 14:47:57 -0600 |
commit | ae1f8880758d8087ad9fdb137d45c4abc1137b52 (patch) | |
tree | ed4414c3a897650c246b2d9c972f00ffe90721f0 /gdb | |
parent | 55a1e039f9d5e2ae144b64f52f2034e4f9177336 (diff) | |
download | binutils-ae1f8880758d8087ad9fdb137d45c4abc1137b52.zip binutils-ae1f8880758d8087ad9fdb137d45c4abc1137b52.tar.gz binutils-ae1f8880758d8087ad9fdb137d45c4abc1137b52.tar.bz2 |
Share windows_thread_info between gdb and gdbserver
This introduces a new file, nat/windows-nat.h, which holds the
definition of windows_thread_info. This is now shared between gdb and
gdbserver.
Note that the two implementations different slightly. gdb had a
couple of fields ("name" and "reload_context") that gdbserver did not;
while gdbserver had one field ("base_context") that gdb did not, plus
better comments. The new file preserves all the fields, and the
comments.
gdb/ChangeLog
2020-04-08 Tom Tromey <tromey@adacore.com>
* windows-nat.c (struct windows_thread_info): Remove.
* nat/windows-nat.h: New file.
gdbserver/ChangeLog
2020-04-08 Tom Tromey <tromey@adacore.com>
* win32-low.h (struct windows_thread_info): Remove.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/nat/windows-nat.h | 66 | ||||
-rw-r--r-- | gdb/windows-nat.c | 20 |
3 files changed, 72 insertions, 19 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1c46aaf..c2e6d60 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2020-04-08 Tom Tromey <tromey@adacore.com> + * windows-nat.c (struct windows_thread_info): Remove. + * nat/windows-nat.h: New file. + +2020-04-08 Tom Tromey <tromey@adacore.com> + * windows-nat.c (struct windows_thread_info) <tid>: Rename from "id". (thread_rec, windows_add_thread, windows_delete_thread) (windows_continue): Update. diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h new file mode 100644 index 0000000..71df097 --- /dev/null +++ b/gdb/nat/windows-nat.h @@ -0,0 +1,66 @@ +/* Internal interfaces for the Windows code + Copyright (C) 1995-2020 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef NAT_WINDOWS_NAT_H +#define NAT_WINDOWS_NAT_H + +#include <windows.h> + +/* Thread information structure used to track extra information about + each thread. */ +struct windows_thread_info +{ + /* The Win32 thread identifier. */ + DWORD tid; + + /* The handle to the thread. */ + HANDLE h; + + /* Thread Information Block address. */ + CORE_ADDR thread_local_base; + + /* Non zero if SuspendThread was called on this thread. */ + int suspended; + +#ifdef _WIN32_WCE + /* The context as retrieved right after suspending the thread. */ + CONTEXT base_context; +#endif + + /* The context of the thread, including any manipulations. */ + union + { + CONTEXT context; +#ifdef __x86_64__ + WOW64_CONTEXT wow64_context; +#endif + }; + + /* Whether debug registers changed since we last set CONTEXT back to + the thread. */ + int debug_registers_changed; + + /* Nonzero if CONTEXT is invalidated and must be re-read from the + inferior thread. */ + int reload_context; + + /* The name of the thread, allocated by xmalloc. */ + char *name; +}; + +#endif diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 837359e..9368396 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -70,6 +70,7 @@ #include "gdbsupport/gdb_tilde_expand.h" #include "gdbsupport/pathstuff.h" #include "gdbsupport/gdb_wait.h" +#include "nat/windows-nat.h" #define STATUS_WX86_BREAKPOINT 0x4000001F #define STATUS_WX86_SINGLE_STEP 0x4000001E @@ -244,25 +245,6 @@ static unsigned long cygwin_get_dr7 (void); static enum gdb_signal last_sig = GDB_SIGNAL_0; /* Set if a signal was received from the debugged process. */ -/* Thread information structure used to track information that is - not available in gdb's thread structure. */ -struct windows_thread_info - { - DWORD tid; - HANDLE h; - CORE_ADDR thread_local_base; - char *name; - int suspended; - int reload_context; - union - { - CONTEXT context; -#ifdef __x86_64__ - WOW64_CONTEXT wow64_context; -#endif - }; - }; - static std::vector<windows_thread_info *> thread_list; /* The process and thread handles for the above context. */ |