gdbserver: remove support for ARM/WinCE
This port has been unmaintained for years, remove it. gdbserver/ChangeLog: * Makefile.in (SFILES): Remove win32-arm-low.cc, wincecompat.cc. * configure.srv: Remove mingw32ce cases. * server.h, win32-low.cc: Remove __MINGW32CE__-guarded code. * win32-low.h (to_back_slashes): Remove. * win32-arm-low.cc, wincecompat.cc, wincecompat.h: Remove. Change-Id: Ib75c0b55b0ab7caca38bbeff5f2fa9397a8e7e8d
This commit is contained in:
parent
96c16e2b7f
commit
84b300de36
|
@ -1,3 +1,11 @@
|
|||
2020-06-12 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* Makefile.in (SFILES): Remove win32-arm-low.cc, wincecompat.cc.
|
||||
* configure.srv: Remove mingw32ce cases.
|
||||
* server.h, win32-low.cc: Remove __MINGW32CE__-guarded code.
|
||||
* win32-low.h (to_back_slashes): Remove.
|
||||
* win32-arm-low.cc, wincecompat.cc, wincecompat.h: Remove.
|
||||
|
||||
2020-06-12 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* Makefile.in (SFILES): linux-tile-low.cc.
|
||||
|
|
|
@ -202,10 +202,8 @@ SFILES = \
|
|||
$(srcdir)/target.cc \
|
||||
$(srcdir)/thread-db.cc \
|
||||
$(srcdir)/utils.cc \
|
||||
$(srcdir)/win32-arm-low.cc \
|
||||
$(srcdir)/win32-i386-low.cc \
|
||||
$(srcdir)/win32-low.cc \
|
||||
$(srcdir)/wincecompat.cc \
|
||||
$(srcdir)/x86-low.cc \
|
||||
$(srcdir)/../gdb/alloc.c \
|
||||
$(srcdir)/../gdb/arch/arm.c \
|
||||
|
|
|
@ -73,14 +73,6 @@ case "${gdbserver_host}" in
|
|||
srv_linux_regsets=yes
|
||||
srv_linux_thread_db=yes
|
||||
;;
|
||||
arm*-*-mingw32ce*) srv_regobj=reg-arm.o
|
||||
srv_tgtobj="win32-low.o windows-nat.o win32-arm-low.o"
|
||||
srv_tgtobj="${srv_tgtobj} wincecompat.o"
|
||||
# hostio_last_error implementation is in win32-low.c
|
||||
srv_hostio_err_objs=""
|
||||
srv_mingw=yes
|
||||
srv_mingwce=yes
|
||||
;;
|
||||
i[34567]86-*-cygwin*) srv_regobj=""
|
||||
srv_tgtobj="x86-low.o nat/x86-dregs.o win32-low.o"
|
||||
srv_tgtobj="${srv_tgtobj} win32-i386-low.o"
|
||||
|
@ -102,18 +94,6 @@ case "${gdbserver_host}" in
|
|||
ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o"
|
||||
ipa_obj="${ipa_obj} arch/i386-ipa.o"
|
||||
;;
|
||||
i[34567]86-*-mingw32ce*)
|
||||
srv_regobj=""
|
||||
srv_tgtobj="x86-low.o nat/x86-dregs.o win32-low.o"
|
||||
srv_tgtobj="${srv_tgtobj} win32-i386-low.o"
|
||||
srv_tgtobj="${srv_tgtobj} nat/windows-nat.o"
|
||||
srv_tgtobj="${srv_tgtobj} arch/i386.o"
|
||||
srv_tgtobj="${srv_tgtobj} wincecompat.o"
|
||||
# hostio_last_error implementation is in win32-low.c
|
||||
srv_hostio_err_objs=""
|
||||
srv_mingw=yes
|
||||
srv_mingwce=yes
|
||||
;;
|
||||
i[34567]86-*-mingw*) srv_regobj=""
|
||||
srv_tgtobj="x86-low.o nat/x86-dregs.o win32-low.o"
|
||||
srv_tgtobj="${srv_tgtobj} win32-i386-low.o"
|
||||
|
|
|
@ -31,10 +31,6 @@
|
|||
|
||||
gdb_static_assert (sizeof (CORE_ADDR) >= sizeof (void *));
|
||||
|
||||
#ifdef __MINGW32CE__
|
||||
#include "wincecompat.h"
|
||||
#endif
|
||||
|
||||
#include "gdbsupport/version.h"
|
||||
|
||||
#if !HAVE_DECL_PERROR
|
||||
|
|
|
@ -1,168 +0,0 @@
|
|||
/* Copyright (C) 2007-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/>. */
|
||||
|
||||
#include "server.h"
|
||||
#include "win32-low.h"
|
||||
|
||||
using namespace windows_nat;
|
||||
|
||||
#ifndef CONTEXT_FLOATING_POINT
|
||||
#define CONTEXT_FLOATING_POINT 0
|
||||
#endif
|
||||
|
||||
/* Defined in auto-generated file reg-arm.c. */
|
||||
void init_registers_arm (void);
|
||||
extern const struct target_desc *tdesc_arm;
|
||||
|
||||
static void
|
||||
arm_get_thread_context (windows_thread_info *th)
|
||||
{
|
||||
th->context.ContextFlags = \
|
||||
CONTEXT_FULL | \
|
||||
CONTEXT_FLOATING_POINT;
|
||||
|
||||
GetThreadContext (th->h, &th->context);
|
||||
}
|
||||
|
||||
#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
|
||||
static const int mappings[] = {
|
||||
context_offset (R0),
|
||||
context_offset (R1),
|
||||
context_offset (R2),
|
||||
context_offset (R3),
|
||||
context_offset (R4),
|
||||
context_offset (R5),
|
||||
context_offset (R6),
|
||||
context_offset (R7),
|
||||
context_offset (R8),
|
||||
context_offset (R9),
|
||||
context_offset (R10),
|
||||
context_offset (R11),
|
||||
context_offset (R12),
|
||||
context_offset (Sp),
|
||||
context_offset (Lr),
|
||||
context_offset (Pc),
|
||||
-1, /* f0 */
|
||||
-1, /* f1 */
|
||||
-1, /* f2 */
|
||||
-1, /* f3 */
|
||||
-1, /* f4 */
|
||||
-1, /* f5 */
|
||||
-1, /* f6 */
|
||||
-1, /* f7 */
|
||||
-1, /* fps */
|
||||
context_offset (Psr),
|
||||
};
|
||||
#undef context_offset
|
||||
|
||||
/* Return a pointer into a CONTEXT field indexed by gdb register number.
|
||||
Return a pointer to an dummy register holding zero if there is no
|
||||
corresponding CONTEXT field for the given register number. */
|
||||
static char *
|
||||
regptr (CONTEXT* c, int r)
|
||||
{
|
||||
if (mappings[r] < 0)
|
||||
{
|
||||
static ULONG zero;
|
||||
/* Always force value to zero, in case the user tried to write
|
||||
to this register before. */
|
||||
zero = 0;
|
||||
return (char *) &zero;
|
||||
}
|
||||
else
|
||||
return (char *) c + mappings[r];
|
||||
}
|
||||
|
||||
/* Fetch register from gdbserver regcache data. */
|
||||
static void
|
||||
arm_fetch_inferior_register (struct regcache *regcache,
|
||||
windows_thread_info *th, int r)
|
||||
{
|
||||
char *context_offset = regptr (&th->context, r);
|
||||
supply_register (regcache, r, context_offset);
|
||||
}
|
||||
|
||||
/* Store a new register value into the thread context of TH. */
|
||||
static void
|
||||
arm_store_inferior_register (struct regcache *regcache,
|
||||
windows_thread_info *th, int r)
|
||||
{
|
||||
collect_register (regcache, r, regptr (&th->context, r));
|
||||
}
|
||||
|
||||
static void
|
||||
arm_arch_setup (void)
|
||||
{
|
||||
init_registers_arm ();
|
||||
win32_tdesc = tdesc_arm;
|
||||
}
|
||||
|
||||
/* Implement win32_target_ops "num_regs" method. */
|
||||
|
||||
static int
|
||||
arm_num_regs (void)
|
||||
{
|
||||
return sizeof (mappings) / sizeof (mappings[0]),
|
||||
}
|
||||
|
||||
/* Correct in either endianness. We do not support Thumb yet. */
|
||||
static const unsigned long arm_wince_breakpoint = 0xe6000010;
|
||||
#define arm_wince_breakpoint_len 4
|
||||
|
||||
/* Implement win32_target_ops "get_pc" method. */
|
||||
|
||||
static CORE_ADDR
|
||||
arm_win32_get_pc (struct regcache *regcache)
|
||||
{
|
||||
uint32_t pc;
|
||||
|
||||
collect_register_by_name (regcache, "pc", &pc);
|
||||
return (CORE_ADDR) pc;
|
||||
}
|
||||
|
||||
/* Implement win32_target_ops "set_pc" method. */
|
||||
|
||||
static void
|
||||
arm_win32_set_pc (struct regcache *regcache, CORE_ADDR pc)
|
||||
{
|
||||
uint32_t newpc = pc;
|
||||
|
||||
supply_register_by_name (regcache, "pc", &newpc);
|
||||
}
|
||||
|
||||
struct win32_target_ops the_low_target = {
|
||||
arm_arch_setup,
|
||||
arm_num_regs,
|
||||
NULL, /* initial_stuff */
|
||||
arm_get_thread_context,
|
||||
NULL, /* prepare_to_resume */
|
||||
NULL, /* thread_added */
|
||||
arm_fetch_inferior_register,
|
||||
arm_store_inferior_register,
|
||||
NULL, /* single_step */
|
||||
(const unsigned char *) &arm_wince_breakpoint,
|
||||
arm_wince_breakpoint_len,
|
||||
0,
|
||||
arm_win32_get_pc,
|
||||
arm_win32_set_pc,
|
||||
/* Watchpoint related functions. See target.h for comments. */
|
||||
NULL, /* supports_z_point_type */
|
||||
NULL, /* insert_point */
|
||||
NULL, /* remove_point */
|
||||
NULL, /* stopped_by_watchpoint */
|
||||
NULL /* stopped_data_address */
|
||||
};
|
|
@ -1421,69 +1421,39 @@ get_child_debug_event (DWORD *continue_status,
|
|||
goto gotevent;
|
||||
}
|
||||
|
||||
#ifndef _WIN32_WCE
|
||||
attaching = 0;
|
||||
#else
|
||||
if (attaching)
|
||||
{
|
||||
/* WinCE doesn't set an initial breakpoint automatically. To
|
||||
stop the inferior, we flush all currently pending debug
|
||||
events -- the thread list and the dll list are always
|
||||
reported immediatelly without delay, then, we suspend all
|
||||
threads and pretend we saw a trap at the current PC of the
|
||||
main thread.
|
||||
{
|
||||
gdb::optional<pending_stop> stop = fetch_pending_stop (debug_threads);
|
||||
if (stop.has_value ())
|
||||
{
|
||||
*ourstatus = stop->status;
|
||||
current_event = stop->event;
|
||||
ptid = debug_event_ptid (¤t_event);
|
||||
current_thread = find_thread_ptid (ptid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
Contrary to desktop Windows, Windows CE *does* report the dll
|
||||
names on LOAD_DLL_DEBUG_EVENTs resulting from a
|
||||
DebugActiveProcess call. This limits the way we can detect
|
||||
if all the dlls have already been reported. If we get a real
|
||||
debug event before leaving attaching, the worst that will
|
||||
happen is the user will see a spurious breakpoint. */
|
||||
/* Keep the wait time low enough for comfortable remote
|
||||
interruption, but high enough so gdbserver doesn't become a
|
||||
bottleneck. */
|
||||
if (!wait_for_debug_event (¤t_event, 250))
|
||||
{
|
||||
DWORD e = GetLastError();
|
||||
|
||||
current_event.dwDebugEventCode = 0;
|
||||
if (!wait_for_debug_event (¤t_event, 0))
|
||||
{
|
||||
OUTMSG2(("no attach events left\n"));
|
||||
fake_breakpoint_event ();
|
||||
attaching = 0;
|
||||
}
|
||||
else
|
||||
OUTMSG2(("got attach event\n"));
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
gdb::optional<pending_stop> stop = fetch_pending_stop (debug_threads);
|
||||
if (stop.has_value ())
|
||||
{
|
||||
*ourstatus = stop->status;
|
||||
current_event = stop->event;
|
||||
ptid = debug_event_ptid (¤t_event);
|
||||
current_thread = find_thread_ptid (ptid);
|
||||
return 1;
|
||||
}
|
||||
if (e == ERROR_PIPE_NOT_CONNECTED)
|
||||
{
|
||||
/* This will happen if the loader fails to succesfully
|
||||
load the application, e.g., if the main executable
|
||||
tries to pull in a non-existing export from a
|
||||
DLL. */
|
||||
ourstatus->kind = TARGET_WAITKIND_EXITED;
|
||||
ourstatus->value.integer = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Keep the wait time low enough for comfortable remote
|
||||
interruption, but high enough so gdbserver doesn't become a
|
||||
bottleneck. */
|
||||
if (!wait_for_debug_event (¤t_event, 250))
|
||||
{
|
||||
DWORD e = GetLastError();
|
||||
|
||||
if (e == ERROR_PIPE_NOT_CONNECTED)
|
||||
{
|
||||
/* This will happen if the loader fails to succesfully
|
||||
load the application, e.g., if the main executable
|
||||
tries to pull in a non-existing export from a
|
||||
DLL. */
|
||||
ourstatus->kind = TARGET_WAITKIND_EXITED;
|
||||
ourstatus->value.integer = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
gotevent:
|
||||
|
||||
|
@ -1534,19 +1504,6 @@ get_child_debug_event (DWORD *continue_status,
|
|||
main_thread_id,
|
||||
current_event.u.CreateProcessInfo.hThread,
|
||||
current_event.u.CreateProcessInfo.lpThreadLocalBase);
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
if (!attaching)
|
||||
{
|
||||
/* Windows CE doesn't set the initial breakpoint
|
||||
automatically like the desktop versions of Windows do.
|
||||
We add it explicitly here. It will be removed as soon as
|
||||
it is hit. */
|
||||
set_breakpoint_at ((CORE_ADDR) (long) current_event.u
|
||||
.CreateProcessInfo.lpStartAddress,
|
||||
auto_delete_breakpoint);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case EXIT_PROCESS_DEBUG_EVENT:
|
||||
|
|
|
@ -183,8 +183,4 @@ extern void win32_require_context (windows_nat::windows_thread_info *th);
|
|||
of GetLastError. */
|
||||
extern char * strwinerror (DWORD error);
|
||||
|
||||
/* in wincecompat.c */
|
||||
|
||||
extern void to_back_slashes (char *);
|
||||
|
||||
#endif /* GDBSERVER_WIN32_LOW_H */
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
/* Compatibility routines for Windows CE.
|
||||
Copyright (C) 2007-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/>. */
|
||||
|
||||
#include "server.h"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
void
|
||||
perror (const char *s)
|
||||
{
|
||||
if (s && *s)
|
||||
fprintf (stderr, "%s: %s\n", s, strwinerror (GetLastError ()));
|
||||
else
|
||||
fprintf (stderr, "%s\n", strwinerror (GetLastError ()));
|
||||
}
|
||||
|
||||
void
|
||||
to_back_slashes (char *path)
|
||||
{
|
||||
for (; *path; ++path)
|
||||
if ('/' == *path)
|
||||
*path = '\\';
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
/* Compatibility routines for Windows CE.
|
||||
Copyright (C) 2007-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 GDBSERVER_WINCECOMPAT_H
|
||||
#define GDBSERVER_WINCECOMPAT_H
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define errno (GetLastError ())
|
||||
|
||||
/* in win32-low.c */
|
||||
extern char * strwinerror (DWORD error);
|
||||
#define strerror strwinerror
|
||||
|
||||
#endif /* GDBSERVER_WINCECOMPAT_H */
|
Loading…
Reference in New Issue