* arm-wince-tdep.c: New.
	* config/arm/wince.mt (DEPRECATED_TM_FILE): Use tm-arm.h.
	(MT_CFLAGS): Delete.
	(TM_CLIBS): Delete.
	(TDEPFILES): Add arm-wince-tdep.o, corelow.o, solib.o,
	solib-legacy.o, solib-svr4.o, and remove wince.o.
	* configure.tgt (arm*-*-mingw32ce*): Add.
	* signals/signals.c [HAVE_SIGNAL_H]: Check.
	(do_target_signal_to_host): Silence 'not used' warning.
	* config/arm/tm-wince.h: Remove.

gdb/gdbserver/

	* gdbserver/configure.ac: Add errno checking.
	(AC_CHECK_HEADERS): Add errno.h, fcntl.h, signal.h,
	sys/file.h and malloc.h.
	(AC_CHECK_DECLS): Add perror.
	(srv_mingwce): Handle.
	* gdbserver/configure.srv (i[34567]86-*-cygwin*): Add
	win32-i386-low.o to srv_tgtobj.
	(i[34567]86-*-mingw*): Likewise.
	(arm*-*-mingw32ce*): Add case.
	* gdbreplay.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
	HAVE_FCNTL_H, HAVE_ERRNO_H, HAVE_MALLOC_H]: Check.
	[__MINGW32CE__] (strerror): New function.
	[__MINGW32CE__] (errno): Define to GetLastError.
	[__MINGW32CE__] (COUNTOF): New macro.
	(remote_open): Remove extra close call.
	* mem-break.c (delete_breakpoint_at): New function.
	* mem-break.h (delete_breakpoint_at): Declare.
	* remote-utils.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
	HAVE_FCNTL_H, HAVE_UNISTD_H, HAVE_ERRNO_H]: Check.
	[USE_WIN32API] (read, write): Add char* casts.
	* server.c [HAVE_UNISTD_H, HAVE_SIGNAL_H]: Check.
	* server.h: Include wincecompat.h on Windows CE.
	[HAVE_ERRNO_H]: Check.
	(perror): Declare if not declared.
	* utils.c: Add stdlib.h, errno.h and malloc.h includes.
	(perror_with_name): Remove errno declaration.
	* wincecompat.h: New.
	* wincecompat.c: New.
	* win32-low.h: New.
	* win32-arm-low.c: New.
	* win32-i386-low.c: New.
	(win32-low.c): Include mem-break.h and win32-low.h, and winnt.h.
	(OUTMSG2): Make it safe.
	(_T): New macro.
	(COUNTOF): New macro.
	(NUM_REGS): Get it from the low target.
	(CONTEXT_EXTENDED_REGISTERS, CONTEXT_FLOATING_POINT,
	CONTEXT_DEBUG_REGISTERS): Add fallbacks to 0.
	(thread_rec): Let low target handle debug registers.
	(child_add_thread): Likewise.
	(child_init_thread_list): Likewise.
	(continue_one_thread): Likewise.
	(regptr): New.
	(do_child_fetch_inferior_registers): Move to ...
	* win32-i386-low.c: ... here, and rename to ...
	(do_fetch_inferior_registers): ... this.
	* win32-low.c (child_fetch_inferior_registers):
	Go through the low target.
	(do_child_store_inferior_registers): Use regptr.
	(strwinerror): New function.
	(win32_create_inferior): Handle Windows CE.
	Use strwinerror instead of strerror on Windows error
	codes.  Add program to the error output.
	Don't close the main thread handle on Windows CE.
	(win32_attach): Use coredll.dll on Windows CE.
	(win32_kill): Close current process and current
	thread handles.
	(win32_detach): Use coredll.dll on Windows CE.
	(win32_resume): Let low target handle debug registers, and
	step request.
	(handle_exception): Add/Remove initial breakpoint.  Avoid
	non-existant WSTOPSIG on Windows CE.
	(win32_read_inferior_memory): Cast to remove warning.
	(win32_arch_string): Go through the low target.
	(initialize_low): Call set_breakpoint_data with the low
	target's breakpoint.
	* win32-low.c (dr, FLAG_TRACE_BIT, FCS_REGNUM,
	FOP_REGNUM, mappings): Move to ...
	* win32-i386-low.c: ... here.
	* win32-low.c (win32_thread_info): Move to ...
	* win32-low.h: ... here.
	* Makefile.in (SFILES): Add win32-low.c, win32-i386-low.c,
	win32-arm-low.c and wincecompat.c.
	(all:): Add $EXEEXT.
	(install-only:): Likewise.
	(gdbserver:): Likewise.
	(gdbreplay:): Likewise.
	* config.in: Regenerate.
	* configure: Regenerate.
This commit is contained in:
Pedro Alves 2007-03-29 01:06:48 +00:00
parent a7b7bc0d0e
commit 68070c10c7
23 changed files with 938 additions and 43 deletions

View file

@ -1,3 +1,16 @@
2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt>
* arm-wince-tdep.c: New.
* config/arm/wince.mt (DEPRECATED_TM_FILE): Use tm-arm.h.
(MT_CFLAGS): Delete.
(TM_CLIBS): Delete.
(TDEPFILES): Add arm-wince-tdep.o, corelow.o, solib.o,
solib-legacy.o, solib-svr4.o, and remove wince.o.
* configure.tgt (arm*-*-mingw32ce*): Add.
* signals/signals.c [HAVE_SIGNAL_H]: Check.
(do_target_signal_to_host): Silence 'not used' warning.
* config/arm/tm-wince.h: Remove.
2007-03-28 Ulrich Weigand <uweigand@de.ibm.com> 2007-03-28 Ulrich Weigand <uweigand@de.ibm.com>
* arch-utils.c (legacy_pc_in_sigtramp): Remove. * arch-utils.c (legacy_pc_in_sigtramp): Remove.

84
gdb/arm-wince-tdep.c Normal file
View file

@ -0,0 +1,84 @@
/* Target-dependent code for Windows CE running on ARM processors,
for GDB.
Copyright (C) 2007 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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "osabi.h"
#include "solib-svr4.h"
#include "target.h"
#include "gdb_string.h"
#include "arm-tdep.h"
static const char arm_wince_le_breakpoint[] = { 0x10, 0x00, 0x00, 0xe6 };
/* Description of the longjmp buffer. */
#define ARM_WINCE_JB_ELEMENT_SIZE INT_REGISTER_SIZE
#define ARM_WINCE_JB_PC 21
static void
arm_wince_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
tdep->arm_breakpoint = arm_wince_le_breakpoint;
tdep->arm_breakpoint_size = sizeof (arm_wince_le_breakpoint);
tdep->struct_return = pcc_struct_return;
tdep->fp_model = ARM_FLOAT_SOFT_VFP;
tdep->jb_pc = ARM_WINCE_JB_PC;
tdep->jb_elt_size = ARM_WINCE_JB_ELEMENT_SIZE;
/* On ARM WinCE char defaults to signed. */
set_gdbarch_char_signed (gdbarch, 1);
set_solib_svr4_fetch_link_map_offsets
(gdbarch, svr4_ilp32_fetch_link_map_offsets);
/* Shared library handling. */
set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
}
static enum gdb_osabi
arm_wince_osabi_sniffer (bfd *abfd)
{
const char *target_name = bfd_get_target (abfd);
if (strcmp (target_name, "pei-arm-wince-little") == 0)
return GDB_OSABI_WINCE;
return GDB_OSABI_UNKNOWN;
}
/* Provide a prototype to silence -Wmissing-prototypes. */
void _initialize_arm_wince_tdep (void);
void
_initialize_arm_wince_tdep (void)
{
gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_coff_flavour,
arm_wince_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_WINCE,
arm_wince_init_abi);
}

View file

@ -1,5 +1,4 @@
# Target: Acorn RISC machine (ARM) with simulator # Target: ARM based machine running Windows CE (win32)
TDEPFILES= arm-tdep.o wince.o DEPRECATED_TM_FILE= tm-arm.h
DEPRECATED_TM_FILE= tm-wince.h TDEPFILES= arm-tdep.o arm-wince-tdep.o corelow.o \
MT_CFLAGS=-DARM -U_X86_ -U_M_IX86 -U__i386__ -U__i486__ -U__i586__ -U__i686__ -DUNICODE -D_WIN32_WCE -DWINCE_STUB='"${target_alias}-stub.exe"' solib.o solib-legacy.o solib-svr4.o
TM_CLIBS=-lrapi

View file

@ -54,7 +54,10 @@ alpha*-*-*) gdb_target=alpha ;;
# mn10300 / am33 liunux # mn10300 / am33 liunux
am33_2.0*-*-linux*) gdb_target=linux ;; am33_2.0*-*-linux*) gdb_target=linux ;;
arm*-wince-pe) gdb_target=wince ;; arm*-wince-pe | arm*-*-mingw32ce*)
gdb_target=wince
build_gdbserver=yes
;;
arm*-*-linux*) gdb_target=linux arm*-*-linux*) gdb_target=linux
build_gdbserver=yes build_gdbserver=yes
;; ;;

View file

@ -1,3 +1,85 @@
2007-03-29 Pedro Alves <pedro_alves@portugalmail.pt>
* gdbserver/configure.ac: Add errno checking.
(AC_CHECK_HEADERS): Add errno.h, fcntl.h, signal.h,
sys/file.h and malloc.h.
(AC_CHECK_DECLS): Add perror.
(srv_mingwce): Handle.
* gdbserver/configure.srv (i[34567]86-*-cygwin*): Add
win32-i386-low.o to srv_tgtobj.
(i[34567]86-*-mingw*): Likewise.
(arm*-*-mingw32ce*): Add case.
* gdbreplay.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
HAVE_FCNTL_H, HAVE_ERRNO_H, HAVE_MALLOC_H]: Check.
[__MINGW32CE__] (strerror): New function.
[__MINGW32CE__] (errno): Define to GetLastError.
[__MINGW32CE__] (COUNTOF): New macro.
(remote_open): Remove extra close call.
* mem-break.c (delete_breakpoint_at): New function.
* mem-break.h (delete_breakpoint_at): Declare.
* remote-utils.c [HAVE_SYS_FILE_H, HAVE_SIGNAL_H,
HAVE_FCNTL_H, HAVE_UNISTD_H, HAVE_ERRNO_H]: Check.
[USE_WIN32API] (read, write): Add char* casts.
* server.c [HAVE_UNISTD_H, HAVE_SIGNAL_H]: Check.
* server.h: Include wincecompat.h on Windows CE.
[HAVE_ERRNO_H]: Check.
(perror): Declare if not declared.
* utils.c: Add stdlib.h, errno.h and malloc.h includes.
(perror_with_name): Remove errno declaration.
* wincecompat.h: New.
* wincecompat.c: New.
* win32-low.h: New.
* win32-arm-low.c: New.
* win32-i386-low.c: New.
(win32-low.c): Include mem-break.h and win32-low.h, and winnt.h.
(OUTMSG2): Make it safe.
(_T): New macro.
(COUNTOF): New macro.
(NUM_REGS): Get it from the low target.
(CONTEXT_EXTENDED_REGISTERS, CONTEXT_FLOATING_POINT,
CONTEXT_DEBUG_REGISTERS): Add fallbacks to 0.
(thread_rec): Let low target handle debug registers.
(child_add_thread): Likewise.
(child_init_thread_list): Likewise.
(continue_one_thread): Likewise.
(regptr): New.
(do_child_fetch_inferior_registers): Move to ...
* win32-i386-low.c: ... here, and rename to ...
(do_fetch_inferior_registers): ... this.
* win32-low.c (child_fetch_inferior_registers):
Go through the low target.
(do_child_store_inferior_registers): Use regptr.
(strwinerror): New function.
(win32_create_inferior): Handle Windows CE.
Use strwinerror instead of strerror on Windows error
codes. Add program to the error output.
Don't close the main thread handle on Windows CE.
(win32_attach): Use coredll.dll on Windows CE.
(win32_kill): Close current process and current
thread handles.
(win32_detach): Use coredll.dll on Windows CE.
(win32_resume): Let low target handle debug registers, and
step request.
(handle_exception): Add/Remove initial breakpoint. Avoid
non-existant WSTOPSIG on Windows CE.
(win32_read_inferior_memory): Cast to remove warning.
(win32_arch_string): Go through the low target.
(initialize_low): Call set_breakpoint_data with the low
target's breakpoint.
* win32-low.c (dr, FLAG_TRACE_BIT, FCS_REGNUM,
FOP_REGNUM, mappings): Move to ...
* win32-i386-low.c: ... here.
* win32-low.c (win32_thread_info): Move to ...
* win32-low.h: ... here.
* Makefile.in (SFILES): Add win32-low.c, win32-i386-low.c,
win32-arm-low.c and wincecompat.c.
(all:): Add $EXEEXT.
(install-only:): Likewise.
(gdbserver:): Likewise.
(gdbreplay:): Likewise.
* config.in: Regenerate.
* configure: Regenerate.
2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt> 2007-03-28 Pedro Alves <pedro_alves@portugalmail.pt>
* win32-low.c: Rename typedef thread_info to * win32-low.c: Rename typedef thread_info to

View file

@ -128,7 +128,9 @@ SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \
$(srcdir)/linux-m68k-low.c $(srcdir)/linux-mips-low.c \ $(srcdir)/linux-m68k-low.c $(srcdir)/linux-mips-low.c \
$(srcdir)/linux-ppc-low.c $(srcdir)/linux-ppc64-low.c \ $(srcdir)/linux-ppc-low.c $(srcdir)/linux-ppc64-low.c \
$(srcdir)/linux-s390-low.c \ $(srcdir)/linux-s390-low.c \
$(srcdir)/linux-sh-low.c $(srcdir)/linux-x86-64-low.c $(srcdir)/linux-sh-low.c $(srcdir)/linux-x86-64-low.c \
$(srcdir)/win32-arm-low.c $(srcdir)/win32-i386-low.c \
$(srcdir)/win32-low.c $(srcdir)/wincecompat.c
DEPFILES = @GDBSERVER_DEPFILES@ DEPFILES = @GDBSERVER_DEPFILES@
@ -154,7 +156,7 @@ XML_BUILTIN = @srv_xmlbuiltin@
.c.o: .c.o:
${CC} -c ${INTERNAL_CFLAGS} $< ${CC} -c ${INTERNAL_CFLAGS} $<
all: gdbserver gdbreplay all: gdbserver$(EXEEXT) gdbreplay$(EXEEXT)
# Traditionally "install" depends on "all". But it may be useful # Traditionally "install" depends on "all". But it may be useful
# not to; for example, if the user has made some trivial change to a # not to; for example, if the user has made some trivial change to a
@ -166,7 +168,7 @@ install-only:
n=`echo gdbserver | sed '$(program_transform_name)'`; \ n=`echo gdbserver | sed '$(program_transform_name)'`; \
if [ x$$n = x ]; then n=gdbserver; else true; fi; \ if [ x$$n = x ]; then n=gdbserver; else true; fi; \
$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir); \ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(bindir); \
$(INSTALL_PROGRAM) gdbserver $(DESTDIR)$(bindir)/$$n; \ $(INSTALL_PROGRAM) gdbserver$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT); \
$(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(man1dir); \ $(SHELL) $(srcdir)/../../mkinstalldirs $(DESTDIR)$(man1dir); \
$(INSTALL_DATA) $(srcdir)/gdbserver.1 $(DESTDIR)$(man1dir)/$$n.1 $(INSTALL_DATA) $(srcdir)/gdbserver.1 $(DESTDIR)$(man1dir)/$$n.1
@ -184,14 +186,14 @@ html:
install-html: install-html:
clean-info: clean-info:
gdbserver: $(OBS) ${ADD_DEPS} ${CDEPS} gdbserver$(EXEEXT): $(OBS) ${ADD_DEPS} ${CDEPS}
rm -f gdbserver rm -f gdbserver$(EXEEXT)
${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbserver $(OBS) \ ${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbserver$(EXEEXT) $(OBS) \
$(GDBSERVER_LIBS) $(XM_CLIBS) $(GDBSERVER_LIBS) $(XM_CLIBS)
gdbreplay: gdbreplay.o gdbreplay$(EXEEXT): gdbreplay.o
rm -f gdbreplay rm -f gdbreplay$(EXEEXT)
${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbreplay gdbreplay.o \ ${CC-LD} $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) -o gdbreplay$(EXEEXT) gdbreplay.o \
$(XM_CLIBS) $(XM_CLIBS)
# Put the proper machine-specific files first, so M-. on a machine # Put the proper machine-specific files first, so M-. on a machine

View file

@ -3,6 +3,10 @@
/* Define to 1 if you have the <arpa/inet.h> header file. */ /* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H #undef HAVE_ARPA_INET_H
/* Define to 1 if you have the declaration of `perror', and to 0 if you don't.
*/
#undef HAVE_DECL_PERROR
/* Define to 1 if you have the declaration of `strerror', and to 0 if you /* Define to 1 if you have the declaration of `strerror', and to 0 if you
don't. */ don't. */
#undef HAVE_DECL_STRERROR #undef HAVE_DECL_STRERROR
@ -10,6 +14,15 @@
/* Define if <sys/procfs.h> has elf_fpregset_t. */ /* Define if <sys/procfs.h> has elf_fpregset_t. */
#undef HAVE_ELF_FPREGSET_T #undef HAVE_ELF_FPREGSET_T
/* Define if errno is available */
#undef HAVE_ERRNO
/* Define to 1 if you have the <errno.h> header file. */
#undef HAVE_ERRNO_H
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
/* Define to 1 if you have the <inttypes.h> header file. */ /* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H #undef HAVE_INTTYPES_H
@ -25,6 +38,9 @@
/* Define if <sys/procfs.h> has lwpid_t. */ /* Define if <sys/procfs.h> has lwpid_t. */
#undef HAVE_LWPID_T #undef HAVE_LWPID_T
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H #undef HAVE_MEMORY_H
@ -56,6 +72,9 @@
/* Define to 1 if you have the <sgtty.h> header file. */ /* Define to 1 if you have the <sgtty.h> header file. */
#undef HAVE_SGTTY_H #undef HAVE_SGTTY_H
/* Define to 1 if you have the <signal.h> header file. */
#undef HAVE_SIGNAL_H
/* Define to 1 if the system has the type `socklen_t'. */ /* Define to 1 if the system has the type `socklen_t'. */
#undef HAVE_SOCKLEN_T #undef HAVE_SOCKLEN_T
@ -71,6 +90,9 @@
/* Define to 1 if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H #undef HAVE_STRING_H
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/ioctl.h> header file. */ /* Define to 1 if you have the <sys/ioctl.h> header file. */
#undef HAVE_SYS_IOCTL_H #undef HAVE_SYS_IOCTL_H
@ -110,6 +132,9 @@
/* Define to 1 if you have the <unistd.h> header file. */ /* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H #undef HAVE_UNISTD_H
/* Checking if errno must be defined */
#undef MUST_DEFINE_ERRNO
/* Define to the address where bug reports for this package should be sent. */ /* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT #undef PACKAGE_BUGREPORT

View file

@ -2938,7 +2938,12 @@ done
for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h proc_service.h sys/procfs.h thread_db.h linux/elf.h stdlib.h unistd.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h sys/wait.h
for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h proc_service.h sys/procfs.h thread_db.h linux/elf.h stdlib.h unistd.h errno.h fcntl.h signal.h sys/file.h malloc.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h sys/wait.h
do do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if eval "test \"\${$as_ac_Header+set}\" = set"; then if eval "test \"\${$as_ac_Header+set}\" = set"; then
@ -3088,6 +3093,124 @@ fi
done done
have_errno=no
echo "$as_me:$LINENO: checking for errno" >&5
echo $ECHO_N "checking for errno... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#if HAVE_ERRNO_H
#include <errno.h>
#endif
int
main ()
{
static int x; x = errno;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
echo "$as_me:$LINENO: result: yes - in errno.h" >&5
echo "${ECHO_T}yes - in errno.h" >&6;
cat >>confdefs.h <<\_ACEOF
#define HAVE_ERRNO 1
_ACEOF
have_errno=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test $have_errno = no; then
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#if HAVE_ERRNO_H
#include <errno.h>
#endif
int
main ()
{
extern int errno; static int x; x = errno;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
echo "$as_me:$LINENO: result: yes - must define" >&5
echo "${ECHO_T}yes - must define" >&6;
cat >>confdefs.h <<\_ACEOF
#define HAVE_ERRNO 1
_ACEOF
cat >>confdefs.h <<\_ACEOF
#define MUST_DEFINE_ERRNO 1
_ACEOF
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: checking whether strerror is declared" >&5 echo "$as_me:$LINENO: checking whether strerror is declared" >&5
echo $ECHO_N "checking whether strerror is declared... $ECHO_C" >&6 echo $ECHO_N "checking whether strerror is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_strerror+set}" = set; then if test "${ac_cv_have_decl_strerror+set}" = set; then
@ -3157,6 +3280,76 @@ else
_ACEOF _ACEOF
fi
echo "$as_me:$LINENO: checking whether perror is declared" >&5
echo $ECHO_N "checking whether perror is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_perror+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
int
main ()
{
#ifndef perror
char *p = (char *) perror;
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_have_decl_perror=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_have_decl_perror=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: $ac_cv_have_decl_perror" >&5
echo "${ECHO_T}$ac_cv_have_decl_perror" >&6
if test $ac_cv_have_decl_perror = yes; then
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_PERROR 1
_ACEOF
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_PERROR 0
_ACEOF
fi fi
@ -3270,8 +3463,13 @@ esac
. ${srcdir}/configure.srv . ${srcdir}/configure.srv
if test "${srv_mingw}" = "yes"; then if test "${srv_mingwce}" = "yes"; then
LIBS="$LIBS -lws2"
elif test "${srv_mingw}" = "yes"; then
LIBS="$LIBS -lwsock32" LIBS="$LIBS -lwsock32"
fi
if test "${srv_mingw}" = "yes"; then
cat >>confdefs.h <<\_ACEOF cat >>confdefs.h <<\_ACEOF
#define USE_WIN32API 1 #define USE_WIN32API 1

View file

@ -39,10 +39,27 @@ AC_HEADER_STDC
AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl proc_service.h sys/procfs.h thread_db.h linux/elf.h dnl
stdlib.h unistd.h dnl stdlib.h unistd.h dnl
errno.h fcntl.h signal.h sys/file.h malloc.h dnl
sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
netinet/tcp.h arpa/inet.h sys/wait.h) netinet/tcp.h arpa/inet.h sys/wait.h)
AC_CHECK_DECLS(strerror) have_errno=no
AC_MSG_CHECKING(for errno)
AC_TRY_LINK([
#if HAVE_ERRNO_H
#include <errno.h>
#endif], [static int x; x = errno;],
[AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) have_errno=yes])
if test $have_errno = no; then
AC_TRY_LINK([
#if HAVE_ERRNO_H
#include <errno.h>
#endif], [extern int errno; static int x; x = errno;],
[AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO, 1, [Define if errno is available]) AC_DEFINE(MUST_DEFINE_ERRNO, 1, [Checking if errno must be defined])],
[AC_MSG_RESULT(no)])
fi
AC_CHECK_DECLS([strerror, perror])
AC_CHECK_TYPES(socklen_t, [], [], AC_CHECK_TYPES(socklen_t, [], [],
[#include <sys/types.h> [#include <sys/types.h>
@ -68,8 +85,13 @@ esac
. ${srcdir}/configure.srv . ${srcdir}/configure.srv
if test "${srv_mingw}" = "yes"; then if test "${srv_mingwce}" = "yes"; then
LIBS="$LIBS -lws2"
elif test "${srv_mingw}" = "yes"; then
LIBS="$LIBS -lwsock32" LIBS="$LIBS -lwsock32"
fi
if test "${srv_mingw}" = "yes"; then
AC_DEFINE(USE_WIN32API, 1, AC_DEFINE(USE_WIN32API, 1,
[Define if we should use the Windows API, instead of the [Define if we should use the Windows API, instead of the
POSIX API. On Windows, we use the Windows API when POSIX API. On Windows, we use the Windows API when

View file

@ -44,7 +44,7 @@ case "${target}" in
srv_linux_thread_db=yes srv_linux_thread_db=yes
;; ;;
i[34567]86-*-cygwin*) srv_regobj=reg-i386.o i[34567]86-*-cygwin*) srv_regobj=reg-i386.o
srv_tgtobj="win32-low.o" srv_tgtobj="win32-low.o win32-i386-low.o"
;; ;;
i[34567]86-*-linux*) srv_regobj=reg-i386-linux.o i[34567]86-*-linux*) srv_regobj=reg-i386-linux.o
srv_tgtobj="linux-low.o linux-i386-low.o i387-fp.o" srv_tgtobj="linux-low.o linux-i386-low.o i387-fp.o"
@ -52,8 +52,14 @@ case "${target}" in
srv_linux_regsets=yes srv_linux_regsets=yes
srv_linux_thread_db=yes srv_linux_thread_db=yes
;; ;;
arm*-*-mingw32ce*) srv_regobj=reg-arm.o
srv_tgtobj="win32-low.o win32-arm-low.o"
srv_tgtobj="${srv_tgtobj} wincecompat.o"
srv_mingw=yes
srv_mingwce=yes
;;
i[34567]86-*-mingw*) srv_regobj=reg-i386.o i[34567]86-*-mingw*) srv_regobj=reg-i386.o
srv_tgtobj="win32-low.o" srv_tgtobj="win32-low.o win32-i386-low.o"
srv_mingw=yes srv_mingw=yes
;; ;;
ia64-*-linux*) srv_regobj=reg-ia64.o ia64-*-linux*) srv_regobj=reg-ia64.o

View file

@ -22,12 +22,19 @@
#include "config.h" #include "config.h"
#include <stdio.h> #include <stdio.h>
#if HAVE_SYS_FILE_H
#include <sys/file.h> #include <sys/file.h>
#endif
#if HAVE_SIGNAL_H
#include <signal.h> #include <signal.h>
#endif
#include <ctype.h> #include <ctype.h>
#if HAVE_FCNTL_H
#include <fcntl.h> #include <fcntl.h>
#endif
#if HAVE_ERRNO_H
#include <errno.h> #include <errno.h>
#endif
#ifdef HAVE_STDLIB_H #ifdef HAVE_STDLIB_H
#include <stdlib.h> #include <stdlib.h>
#endif #endif
@ -49,6 +56,9 @@
#if HAVE_NETINET_TCP_H #if HAVE_NETINET_TCP_H
#include <netinet/tcp.h> #include <netinet/tcp.h>
#endif #endif
#if HAVE_MALLOC_H
#include <malloc.h>
#endif
#if USE_WIN32API #if USE_WIN32API
#include <winsock.h> #include <winsock.h>
@ -63,6 +73,57 @@ typedef int socklen_t;
static int remote_desc; static int remote_desc;
#ifdef __MINGW32CE__
#ifndef COUNTOF
#define COUNTOF(STR) (sizeof (STR) / sizeof ((STR)[0]))
#endif
#define errno (GetLastError ())
char *
strerror (DWORD error)
{
static char buf[1024];
WCHAR *msgbuf;
DWORD lasterr = GetLastError ();
DWORD chars = FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
error,
0, /* Default language */
(LPVOID)&msgbuf,
0,
NULL);
if (chars != 0)
{
/* If there is an \r\n appended, zap it. */
if (chars >= 2
&& msgbuf[chars - 2] == '\r'
&& msgbuf[chars - 1] == '\n')
{
chars -= 2;
msgbuf[chars] = 0;
}
if (chars > ((COUNTOF (buf)) - 1))
{
chars = COUNTOF (buf) - 1;
msgbuf [chars] = 0;
}
wcstombs (buf, msgbuf, chars + 1);
LocalFree (msgbuf);
}
else
sprintf (buf, "unknown win32 error (%ld)", error);
SetLastError (lasterr);
return buf;
}
#endif /* __MINGW32CE__ */
/* Print the system error message for errno, and also mention STRING /* Print the system error message for errno, and also mention STRING
as the file name for which the error was encountered. as the file name for which the error was encountered.
Then return to command level. */ Then return to command level. */
@ -178,8 +239,6 @@ remote_open (char *name)
setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY, setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
(char *) &tmp, sizeof (tmp)); (char *) &tmp, sizeof (tmp));
close (tmp_desc); /* No longer need this */
#ifndef USE_WIN32API #ifndef USE_WIN32API
close (tmp_desc); /* No longer need this */ close (tmp_desc); /* No longer need this */

View file

@ -113,6 +113,14 @@ find_breakpoint_at (CORE_ADDR where)
return NULL; return NULL;
} }
void
delete_breakpoint_at (CORE_ADDR addr)
{
struct breakpoint *bp = find_breakpoint_at (addr);
if (bp != NULL)
delete_breakpoint (bp);
}
static void static void
reinsert_breakpoint_handler (CORE_ADDR stop_pc) reinsert_breakpoint_handler (CORE_ADDR stop_pc)
{ {

View file

@ -31,6 +31,11 @@
void set_breakpoint_at (CORE_ADDR where, void set_breakpoint_at (CORE_ADDR where,
void (*handler) (CORE_ADDR)); void (*handler) (CORE_ADDR));
/* Delete a breakpoint previously inserted at ADDR with
set_breakpoint_at. */
void delete_breakpoint_at (CORE_ADDR addr);
/* Create a reinsertion breakpoint at STOP_AT for the breakpoint /* Create a reinsertion breakpoint at STOP_AT for the breakpoint
currently at STOP_PC (and temporarily remove the breakpoint at currently at STOP_PC (and temporarily remove the breakpoint at
STOP_PC). */ STOP_PC). */

View file

@ -26,7 +26,9 @@
#if HAVE_SYS_IOCTL_H #if HAVE_SYS_IOCTL_H
#include <sys/ioctl.h> #include <sys/ioctl.h>
#endif #endif
#if HAVE_SYS_FILE_H
#include <sys/file.h> #include <sys/file.h>
#endif
#if HAVE_NETINET_IN_H #if HAVE_NETINET_IN_H
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
@ -42,15 +44,23 @@
#if HAVE_SYS_IOCTL_H #if HAVE_SYS_IOCTL_H
#include <sys/ioctl.h> #include <sys/ioctl.h>
#endif #endif
#if HAVE_SIGNAL_H
#include <signal.h> #include <signal.h>
#endif
#if HAVE_FCNTL_H
#include <fcntl.h> #include <fcntl.h>
#endif
#include <sys/time.h> #include <sys/time.h>
#if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif
#if HAVE_ARPA_INET_H #if HAVE_ARPA_INET_H
#include <arpa/inet.h> #include <arpa/inet.h>
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
#if HAVE_ERRNO_H
#include <errno.h> #include <errno.h>
#endif
#if USE_WIN32API #if USE_WIN32API
#include <winsock.h> #include <winsock.h>
@ -85,8 +95,8 @@ extern int using_threads;
extern int debug_threads; extern int debug_threads;
#ifdef USE_WIN32API #ifdef USE_WIN32API
# define read(fd, buf, len) recv (fd, buf, len, 0) # define read(fd, buf, len) recv (fd, (char *) buf, len, 0)
# define write(fd, buf, len) send (fd, buf, len, 0) # define write(fd, buf, len) send (fd, (char *) buf, len, 0)
#endif #endif
/* Open a connection to a remote debugger. /* Open a connection to a remote debugger.

View file

@ -21,8 +21,12 @@
#include "server.h" #include "server.h"
#if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif
#if HAVE_SIGNAL_H
#include <signal.h> #include <signal.h>
#endif
#if HAVE_SYS_WAIT_H #if HAVE_SYS_WAIT_H
#include <sys/wait.h> #include <sys/wait.h>
#endif #endif

View file

@ -24,10 +24,16 @@
#include "config.h" #include "config.h"
#ifdef __MINGW32CE__
#include "wincecompat.h"
#endif
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#ifdef HAVE_ERRNO_H
#include <errno.h> #include <errno.h>
#endif
#include <setjmp.h> #include <setjmp.h>
#ifdef HAVE_STRING_H #ifdef HAVE_STRING_H
@ -40,6 +46,12 @@ extern char *strerror (int); /* X3.159-1989 4.11.6.2 */
#endif #endif
#endif #endif
#if !HAVE_DECL_PERROR
#ifndef perror
extern void perror (const char *);
#endif
#endif
#ifndef ATTR_NORETURN #ifndef ATTR_NORETURN
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
#define ATTR_NORETURN __attribute__ ((noreturn)) #define ATTR_NORETURN __attribute__ ((noreturn))

View file

@ -22,6 +22,13 @@
#include "server.h" #include "server.h"
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
#if HAVE_ERRNO_H
#include <errno.h>
#endif
#if HAVE_MALLOC_H
#include <malloc.h>
#endif
/* Generally useful subroutines used throughout the program. */ /* Generally useful subroutines used throughout the program. */
@ -32,9 +39,6 @@
void void
perror_with_name (char *string) perror_with_name (char *string)
{ {
#ifndef STDC_HEADERS
extern int errno;
#endif
const char *err; const char *err;
char *combined; char *combined;

View file

@ -0,0 +1,76 @@
/* Copyright (C) 2007 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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include "server.h"
#include "win32-low.h"
/* Fetch register(s) from gdbserver regcache data. */
static void
do_fetch_inferior_registers (win32_thread_info *th, int r)
{
char *context_offset = regptr (&th->context, r);
supply_register (r, context_offset);
}
#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
static const unsigned char arm_wince_le_breakpoint[] =
{ 0x10, 0x00, 0x00, 0xe6 };
struct win32_target_ops the_low_target = {
mappings,
sizeof (mappings) / sizeof (mappings[0]),
NULL, /* initial_stuff */
NULL, /* store_debug_registers */
NULL, /* load_debug_registers */
do_fetch_inferior_registers,
NULL, /* single_step */
arm_wince_le_breakpoint,
sizeof (arm_wince_le_breakpoint) / sizeof (arm_wince_le_breakpoint[0]),
"arm" /* arch_string */
};

View file

@ -0,0 +1,152 @@
/* Copyright (C) 2007 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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include "server.h"
#include "win32-low.h"
#define FCS_REGNUM 27
#define FOP_REGNUM 31
#define FLAG_TRACE_BIT 0x100
static unsigned dr[8];
static void
initial_stuff (void)
{
memset (&dr, 0, sizeof (dr));
}
static void
store_debug_registers (win32_thread_info *th)
{
dr[0] = th->context.Dr0;
dr[1] = th->context.Dr1;
dr[2] = th->context.Dr2;
dr[3] = th->context.Dr3;
dr[6] = th->context.Dr6;
dr[7] = th->context.Dr7;
}
static void
load_debug_registers (win32_thread_info *th)
{
th->context.Dr0 = dr[0];
th->context.Dr1 = dr[1];
th->context.Dr2 = dr[2];
th->context.Dr3 = dr[3];
/* th->context.Dr6 = dr[6];
FIXME: should we set dr6 also ?? */
th->context.Dr7 = dr[7];
}
/* Fetch register(s) from gdbserver regcache data. */
static void
do_fetch_inferior_registers (win32_thread_info *th, int r)
{
char *context_offset = regptr (&th->context, r);
long l;
if (r == FCS_REGNUM)
{
l = *((long *) context_offset) & 0xffff;
supply_register (r, (char *) &l);
}
else if (r == FOP_REGNUM)
{
l = (*((long *) context_offset) >> 16) & ((1 << 11) - 1);
supply_register (r, (char *) &l);
}
else
supply_register (r, context_offset);
}
static void
single_step (win32_thread_info *th)
{
th->context.EFlags |= FLAG_TRACE_BIT;
}
/* An array of offset mappings into a Win32 Context structure.
This is a one-to-one mapping which is indexed by gdb's register
numbers. It retrieves an offset into the context structure where
the 4 byte register is located.
An offset value of -1 indicates that Win32 does not provide this
register in it's CONTEXT structure. In this case regptr will return
a pointer into a dummy register. */
#define context_offset(x) ((int)&(((CONTEXT *)NULL)->x))
static const int mappings[] = {
context_offset (Eax),
context_offset (Ecx),
context_offset (Edx),
context_offset (Ebx),
context_offset (Esp),
context_offset (Ebp),
context_offset (Esi),
context_offset (Edi),
context_offset (Eip),
context_offset (EFlags),
context_offset (SegCs),
context_offset (SegSs),
context_offset (SegDs),
context_offset (SegEs),
context_offset (SegFs),
context_offset (SegGs),
context_offset (FloatSave.RegisterArea[0 * 10]),
context_offset (FloatSave.RegisterArea[1 * 10]),
context_offset (FloatSave.RegisterArea[2 * 10]),
context_offset (FloatSave.RegisterArea[3 * 10]),
context_offset (FloatSave.RegisterArea[4 * 10]),
context_offset (FloatSave.RegisterArea[5 * 10]),
context_offset (FloatSave.RegisterArea[6 * 10]),
context_offset (FloatSave.RegisterArea[7 * 10]),
context_offset (FloatSave.ControlWord),
context_offset (FloatSave.StatusWord),
context_offset (FloatSave.TagWord),
context_offset (FloatSave.ErrorSelector),
context_offset (FloatSave.ErrorOffset),
context_offset (FloatSave.DataSelector),
context_offset (FloatSave.DataOffset),
context_offset (FloatSave.ErrorSelector),
/* XMM0-7 */
context_offset (ExtendedRegisters[10 * 16]),
context_offset (ExtendedRegisters[11 * 16]),
context_offset (ExtendedRegisters[12 * 16]),
context_offset (ExtendedRegisters[13 * 16]),
context_offset (ExtendedRegisters[14 * 16]),
context_offset (ExtendedRegisters[15 * 16]),
context_offset (ExtendedRegisters[16 * 16]),
context_offset (ExtendedRegisters[17 * 16]),
/* MXCSR */
context_offset (ExtendedRegisters[24])
};
#undef context_offset
struct win32_target_ops the_low_target = {
mappings,
sizeof (mappings) / sizeof (mappings[0]),
initial_stuff,
store_debug_registers,
load_debug_registers,
do_fetch_inferior_registers,
single_step,
(const char*)NULL, /* breakpoint */
0, /* breakpoint_len */
"i386" /* arch_string */
};

87
gdb/gdbserver/win32-low.h Normal file
View file

@ -0,0 +1,87 @@
/* Internal interfaces for the Win32 specific target code for gdbserver.
Copyright (C) 2007 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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include <windows.h>
/* Thread information structure used to track extra information about
each thread. */
typedef struct win32_thread_info
{
DWORD tid;
HANDLE h;
int suspend_count;
CONTEXT context;
} win32_thread_info;
struct win32_target_ops
{
/* An array of offset mappings into a Win32 Context structure.
This is a one-to-one mapping which is indexed by gdb's register
numbers. It retrieves an offset into the context structure where
the 4 byte register is located.
An offset value of -1 indicates that Win32 does not provide this
register in it's CONTEXT structure. In this case regptr will return
a pointer into a dummy register. */
const int *regmap;
/* The number of elements of regmap. */
int num_regs;
void (*initial_stuff) (void);
void (*store_debug_registers) (win32_thread_info *);
void (*load_debug_registers) (win32_thread_info *);
/* Fetch register(s) from gdbserver regcache data. */
void (*fetch_inferior_registers) (win32_thread_info *th, int r);
void (*single_step) (win32_thread_info *th);
const unsigned char *breakpoint;
int breakpoint_len;
/* What string to report to GDB when it asks for the architecture,
or NULL not to answer. */
const char *arch_string;
};
extern struct win32_target_ops the_low_target;
/* in win32-low.c */
/* 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. */
extern char * regptr (CONTEXT* c, int r);
/* Map the Windows error number in ERROR to a locale-dependent error
message string and return a pointer to it. Typically, the values
for ERROR come from GetLastError.
The string pointed to shall not be modified by the application,
but may be overwritten by a subsequent call to strwinerror
The strwinerror function does not change the current setting
of GetLastError. */
extern char * strwinerror (DWORD error);
/* in wincecompat.c */
extern void to_back_slashes (char *);

View file

@ -0,0 +1,41 @@
/* Compatibility routines for Windows CE.
Copyright (C) 2007 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 2 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, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include "server.h"
#include <stdio.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,5 +1,5 @@
/* Definitions to target GDB for Windows CE target /* Compatibility routines for Windows CE.
Copyright 2000, 2007 Free Software Foundation, Inc. Copyright (C) 2007 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -15,20 +15,18 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02111-1307, USA. */ Boston, MA 02110-1301, USA. */
#ifndef TM_WINCE_H #ifndef WINCECOMPAT_H
#define TM_WINCE_H #define WINCECOMPAT_H
#include "arm/tm-arm.h" #include <windows.h>
#undef SOFTWARE_SINGLE_STEP_P #define errno (GetLastError ())
#define SOFTWARE_SINGLE_STEP_P() 1
#undef SOFTWARE_SINGLE_STEP /* in win32-low.c */
#define SOFTWARE_SINGLE_STEP(sig, bp_p) wince_software_single_step (sig, bp_p) extern char * strwinerror (DWORD error);
#define strerror strwinerror
void wince_software_single_step (unsigned int, int); #endif
#endif /* TM_WINCE_H */

View file

@ -28,7 +28,9 @@
#include "gdb_string.h" #include "gdb_string.h"
#endif #endif
#ifdef HAVE_SIGNAL_H
#include <signal.h> #include <signal.h>
#endif
/* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest /* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest
_available_ realtime signal, not the lowest supported; glibc takes _available_ realtime signal, not the lowest supported; glibc takes
@ -519,6 +521,9 @@ do_target_signal_to_host (enum target_signal oursig,
int *oursig_ok) int *oursig_ok)
{ {
int retsig; int retsig;
/* Silence the 'not used' warning, for targets that
do not support signals. */
(void) retsig;
*oursig_ok = 1; *oursig_ok = 1;
switch (oursig) switch (oursig)