mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
Fix gdbserver build for x86-64 Windows
I broke the gdbserver build on x86-64 Windows a little while back. Previously, I could not build this configuration, but today I found out that if I configure with: --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 using the Fedora 34 tools, it will in fact build. I'm not certain, but maybe the gnulib update helped with this. This patch fixes the build. I'm checking it in.
This commit is contained in:
parent
8e6afe4013
commit
801eb70f9a
@ -85,7 +85,7 @@ win32_get_current_dr (int dr)
|
||||
case DR: \
|
||||
return th->wow64_context.Dr ## DR
|
||||
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
{
|
||||
switch (dr)
|
||||
{
|
||||
@ -245,7 +245,7 @@ i386_get_thread_context (windows_thread_info *th)
|
||||
|
||||
again:
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
th->wow64_context.ContextFlags = (CONTEXT_FULL
|
||||
| CONTEXT_FLOATING_POINT
|
||||
| CONTEXT_DEBUG_REGISTERS
|
||||
@ -259,7 +259,7 @@ i386_get_thread_context (windows_thread_info *th)
|
||||
|
||||
BOOL ret;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
ret = Wow64GetThreadContext (th->h, &th->wow64_context);
|
||||
else
|
||||
#endif
|
||||
@ -288,7 +288,7 @@ i386_prepare_to_resume (windows_thread_info *th)
|
||||
win32_require_context (th);
|
||||
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
{
|
||||
th->wow64_context.Dr0 = dr->dr_mirror[0];
|
||||
th->wow64_context.Dr1 = dr->dr_mirror[1];
|
||||
@ -324,7 +324,7 @@ static void
|
||||
i386_single_step (windows_thread_info *th)
|
||||
{
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
th->wow64_context.EFlags |= FLAG_TRACE_BIT;
|
||||
else
|
||||
#endif
|
||||
@ -466,7 +466,7 @@ i386_fetch_inferior_register (struct regcache *regcache,
|
||||
{
|
||||
const int *mappings;
|
||||
#ifdef __x86_64__
|
||||
if (!wow64_process)
|
||||
if (!windows_process.wow64_process)
|
||||
mappings = amd64_mappings;
|
||||
else
|
||||
#endif
|
||||
@ -474,7 +474,7 @@ i386_fetch_inferior_register (struct regcache *regcache,
|
||||
|
||||
char *context_offset;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
context_offset = (char *) &th->wow64_context + mappings[r];
|
||||
else
|
||||
#endif
|
||||
@ -502,7 +502,7 @@ i386_store_inferior_register (struct regcache *regcache,
|
||||
{
|
||||
const int *mappings;
|
||||
#ifdef __x86_64__
|
||||
if (!wow64_process)
|
||||
if (!windows_process.wow64_process)
|
||||
mappings = amd64_mappings;
|
||||
else
|
||||
#endif
|
||||
@ -510,7 +510,7 @@ i386_store_inferior_register (struct regcache *regcache,
|
||||
|
||||
char *context_offset;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
context_offset = (char *) &th->wow64_context + mappings[r];
|
||||
else
|
||||
#endif
|
||||
@ -550,7 +550,7 @@ i386_win32_num_regs (void)
|
||||
{
|
||||
int num_regs;
|
||||
#ifdef __x86_64__
|
||||
if (!wow64_process)
|
||||
if (!windows_process.wow64_process)
|
||||
num_regs = sizeof (amd64_mappings) / sizeof (amd64_mappings[0]);
|
||||
else
|
||||
#endif
|
||||
|
@ -38,7 +38,8 @@
|
||||
|
||||
using namespace windows_nat;
|
||||
|
||||
static windows_process_info windows_process;
|
||||
/* See win32-low.h. */
|
||||
windows_process_info windows_process;
|
||||
|
||||
#ifndef USE_WIN32API
|
||||
#include <sys/cygwin.h>
|
||||
@ -113,7 +114,7 @@ static void
|
||||
win32_get_thread_context (windows_thread_info *th)
|
||||
{
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
memset (&th->wow64_context, 0, sizeof (WOW64_CONTEXT));
|
||||
else
|
||||
#endif
|
||||
@ -127,7 +128,7 @@ static void
|
||||
win32_set_thread_context (windows_thread_info *th)
|
||||
{
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
Wow64SetThreadContext (th->h, &th->wow64_context);
|
||||
else
|
||||
#endif
|
||||
@ -150,7 +151,7 @@ win32_require_context (windows_thread_info *th)
|
||||
{
|
||||
DWORD context_flags;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
context_flags = th->wow64_context.ContextFlags;
|
||||
else
|
||||
#endif
|
||||
@ -192,7 +193,7 @@ child_add_thread (DWORD pid, DWORD tid, HANDLE h, void *tlb)
|
||||
#ifdef __x86_64__
|
||||
/* For WOW64 processes, this is actually the pointer to the 64bit TIB,
|
||||
and the 32bit TIB is exactly 2 pages after it. */
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
base += 2 * 4096; /* page size = 4096 */
|
||||
#endif
|
||||
th = new windows_thread_info (tid, h, base);
|
||||
@ -354,19 +355,20 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached)
|
||||
error ("Check if WOW64 process failed (error %d): %s\n",
|
||||
(int) err, strwinerror (err));
|
||||
}
|
||||
wow64_process = wow64;
|
||||
windows_process.wow64_process = wow64;
|
||||
|
||||
if (wow64_process
|
||||
if (windows_process.wow64_process
|
||||
&& (Wow64GetThreadContext == nullptr
|
||||
|| Wow64SetThreadContext == nullptr))
|
||||
error ("WOW64 debugging is not supported on this system.\n");
|
||||
|
||||
ignore_first_breakpoint = !attached && wow64_process;
|
||||
windows_process.ignore_first_breakpoint
|
||||
= !attached && windows_process.wow64_process;
|
||||
#endif
|
||||
|
||||
proc = add_process (pid, attached);
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
proc->tdesc = wow64_win32_tdesc;
|
||||
else
|
||||
#endif
|
||||
@ -440,7 +442,7 @@ continue_one_thread (thread_info *thread, int thread_id)
|
||||
{
|
||||
DWORD *context_flags;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
context_flags = &th->wow64_context.ContextFlags;
|
||||
else
|
||||
#endif
|
||||
@ -913,7 +915,7 @@ win32_process_target::resume (thread_resume *resume_info, size_t n)
|
||||
|
||||
DWORD *context_flags;
|
||||
#ifdef __x86_64__
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
context_flags = &th->wow64_context.ContextFlags;
|
||||
else
|
||||
#endif
|
||||
@ -1419,19 +1421,22 @@ win32_process_target::qxfer_siginfo (const char *annex,
|
||||
|
||||
#ifdef __x86_64__
|
||||
EXCEPTION_RECORD32 er32;
|
||||
if (wow64_process)
|
||||
if (windows_process.wow64_process)
|
||||
{
|
||||
buf = (char *) &er32;
|
||||
bufsize = sizeof (er32);
|
||||
|
||||
er32.ExceptionCode = siginfo_er.ExceptionCode;
|
||||
er32.ExceptionFlags = siginfo_er.ExceptionFlags;
|
||||
er32.ExceptionRecord = (uintptr_t) siginfo_er.ExceptionRecord;
|
||||
er32.ExceptionAddress = (uintptr_t) siginfo_er.ExceptionAddress;
|
||||
er32.NumberParameters = siginfo_er.NumberParameters;
|
||||
er32.ExceptionCode = windows_process.siginfo_er.ExceptionCode;
|
||||
er32.ExceptionFlags = windows_process.siginfo_er.ExceptionFlags;
|
||||
er32.ExceptionRecord
|
||||
= (uintptr_t) windows_process.siginfo_er.ExceptionRecord;
|
||||
er32.ExceptionAddress
|
||||
= (uintptr_t) windows_process.siginfo_er.ExceptionAddress;
|
||||
er32.NumberParameters = windows_process.siginfo_er.NumberParameters;
|
||||
int i;
|
||||
for (i = 0; i < EXCEPTION_MAXIMUM_PARAMETERS; i++)
|
||||
er32.ExceptionInformation[i] = siginfo_er.ExceptionInformation[i];
|
||||
er32.ExceptionInformation[i]
|
||||
= windows_process.siginfo_er.ExceptionInformation[i];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -162,6 +162,9 @@ class win32_process_target : public process_stratum_target
|
||||
const char *thread_name (ptid_t thread) override;
|
||||
};
|
||||
|
||||
/* The sole Windows process. */
|
||||
extern windows_nat::windows_process_info windows_process;
|
||||
|
||||
/* Retrieve the context for this thread, if not already retrieved. */
|
||||
extern void win32_require_context (windows_nat::windows_thread_info *th);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user