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:
Simon Marchi 2020-06-12 16:06:45 -04:00
parent 96c16e2b7f
commit 84b300de36
9 changed files with 37 additions and 338 deletions

View File

@ -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.

View File

@ -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 \

View File

@ -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"

View File

@ -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

View File

@ -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 */
};

View File

@ -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 (&current_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 (&current_event, 250))
{
DWORD e = GetLastError();
current_event.dwDebugEventCode = 0;
if (!wait_for_debug_event (&current_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 (&current_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 (&current_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:

View File

@ -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 */

View File

@ -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 = '\\';
}

View File

@ -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 */