aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/nat/windows-nat.c40
-rw-r--r--gdb/nat/windows-nat.h20
-rw-r--r--gdb/windows-nat.c40
-rw-r--r--gdbserver/win32-low.cc9
4 files changed, 49 insertions, 60 deletions
diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c
index a82aa89..9fdef46 100644
--- a/gdb/nat/windows-nat.c
+++ b/gdb/nat/windows-nat.c
@@ -19,6 +19,7 @@
#include "gdbsupport/common-defs.h"
#include "nat/windows-nat.h"
#include "gdbsupport/common-debug.h"
+#include "target/target.h"
#ifdef __CYGWIN__
#define __USEWIDE
@@ -162,6 +163,45 @@ get_image_name (HANDLE h, void *address, int unicode)
return buf;
}
+/* See nat/windows-nat.h. */
+
+bool
+windows_process_info::handle_ms_vc_exception (const EXCEPTION_RECORD *rec)
+{
+ if (rec->NumberParameters >= 3
+ && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000)
+ {
+ DWORD named_thread_id;
+ windows_thread_info *named_thread;
+ CORE_ADDR thread_name_target;
+
+ thread_name_target = rec->ExceptionInformation[1];
+ named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]);
+
+ if (named_thread_id == (DWORD) -1)
+ named_thread_id = current_event.dwThreadId;
+
+ named_thread = thread_rec (ptid_t (current_event.dwProcessId,
+ named_thread_id, 0),
+ DONT_INVALIDATE_CONTEXT);
+ if (named_thread != NULL)
+ {
+ int thread_name_len;
+ gdb::unique_xmalloc_ptr<char> thread_name
+ = target_read_string (thread_name_target, 1025, &thread_name_len);
+ if (thread_name_len > 0)
+ {
+ thread_name.get ()[thread_name_len - 1] = '\0';
+ named_thread->name = std::move (thread_name);
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
/* The exception thrown by a program to tell the debugger the name of
a thread. The exception record contains an ID of a thread and a
name to give it. This exception has no documented name, but MSDN
diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h
index 7f76ba0..522e267 100644
--- a/gdb/nat/windows-nat.h
+++ b/gdb/nat/windows-nat.h
@@ -92,7 +92,7 @@ struct windows_thread_info
adjustments if the registers are read multiple times. */
bool pc_adjusted = false;
- /* The name of the thread, allocated by xmalloc. */
+ /* The name of the thread. */
gdb::unique_xmalloc_ptr<char> name;
};
@@ -213,16 +213,6 @@ struct windows_process_info
void handle_unload_dll ();
- /* Handle MS_VC_EXCEPTION when processing a stop. MS_VC_EXCEPTION is
- somewhat undocumented but is used to tell the debugger the name of
- a thread.
-
- Return true if the exception was handled; return false otherwise.
-
- This function must be supplied by the embedding application. */
-
- bool handle_ms_vc_exception (const EXCEPTION_RECORD *rec);
-
/* When EXCEPTION_ACCESS_VIOLATION is processed, we give the embedding
application a chance to change it to be considered "unhandled".
This function must be supplied by the embedding application. If it
@@ -256,6 +246,14 @@ struct windows_process_info
private:
+ /* Handle MS_VC_EXCEPTION when processing a stop. MS_VC_EXCEPTION is
+ somewhat undocumented but is used to tell the debugger the name of
+ a thread.
+
+ Return true if the exception was handled; return false otherwise. */
+
+ bool handle_ms_vc_exception (const EXCEPTION_RECORD *rec);
+
/* Iterate over all DLLs currently mapped by our inferior, looking for
a DLL which is loaded at LOAD_ADDR. If found, add the DLL to our
list of solibs; otherwise do nothing. LOAD_ADDR NULL means add all
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 646ddda..581eb47 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -1055,46 +1055,6 @@ display_selectors (const char * args, int from_tty)
/* See nat/windows-nat.h. */
bool
-windows_nat::windows_process_info::handle_ms_vc_exception
- (const EXCEPTION_RECORD *rec)
-{
- if (rec->NumberParameters >= 3
- && (rec->ExceptionInformation[0] & 0xffffffff) == 0x1000)
- {
- DWORD named_thread_id;
- windows_thread_info *named_thread;
- CORE_ADDR thread_name_target;
-
- thread_name_target = rec->ExceptionInformation[1];
- named_thread_id = (DWORD) (0xffffffff & rec->ExceptionInformation[2]);
-
- if (named_thread_id == (DWORD) -1)
- named_thread_id = current_event.dwThreadId;
-
- named_thread = thread_rec (ptid_t (current_event.dwProcessId,
- named_thread_id, 0),
- DONT_INVALIDATE_CONTEXT);
- if (named_thread != NULL)
- {
- int thread_name_len;
- gdb::unique_xmalloc_ptr<char> thread_name
- = target_read_string (thread_name_target, 1025, &thread_name_len);
- if (thread_name_len > 0)
- {
- thread_name.get ()[thread_name_len - 1] = '\0';
- named_thread->name = std::move (thread_name);
- }
- }
-
- return true;
- }
-
- return false;
-}
-
-/* See nat/windows-nat.h. */
-
-bool
windows_nat::windows_process_info::handle_access_violation
(const EXCEPTION_RECORD *rec)
{
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 8437c69..8fde3e9 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -1042,15 +1042,6 @@ fake_breakpoint_event (void)
/* See nat/windows-nat.h. */
bool
-windows_nat::windows_process_info::handle_ms_vc_exception
- (const EXCEPTION_RECORD *rec)
-{
- return false;
-}
-
-/* See nat/windows-nat.h. */
-
-bool
windows_nat::windows_process_info::handle_access_violation
(const EXCEPTION_RECORD *rec)
{