# Mappings from configuration triplets to gdbserver build options.
# This is invoked from the autoconf-generated configure script, to
# produce the appropriate Makefile substitutions.

# This file sets the following shell variables:
#   srv_regobj		The register protocol appropriate for this target.
#   srv_tgtobj		Any other target-specific modules appropriate
#			for this target.
#   srv_hostio_err	The object implementing the hostio_last_error
#			target method.
#   srv_xmlfiles	All XML files which should be available for
#			gdbserver in this configuration.
#
# In addition, on GNU/Linux the following shell variables will be set:
#   srv_linux_regsets	Set to "yes" if ptrace(PTRACE_GETREGS) and friends
#			may be available on this platform;  unset otherwise.
#			They will only be used if <sys/ptrace.h> defines
#			PTRACE_GETREGS.
#   srv_linux_usrregs	Set to "yes" if we can get at registers via
#			PTRACE_PEEKUSR / PTRACE_POKEUSR.

# Default hostio_last_error implementation
srv_hostio_err_objs="hostio-errno.o"

# Input is taken from the "${target}" variable.

case "${target}" in
  arm*-*-linux*)	srv_regobj="reg-arm.o arm-with-iwmmxt.o"
			srv_tgtobj="linux-low.o linux-arm-low.o"
			srv_xmlfiles="arm-with-iwmmxt.xml"
			srv_xmlfiles="${srv_xmlfiles} arm-core.xml"
			srv_xmlfiles="${srv_xmlfiles} xscale-iwmmxt.xml"
			srv_linux_usrregs=yes
			srv_linux_regsets=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"
			# hostio_last_error implementation is in win32-low.c
			srv_hostio_err_objs=""
			srv_mingw=yes
			srv_mingwce=yes
			;;
  crisv32-*-linux*)	srv_regobj=reg-crisv32.o
			srv_tgtobj="linux-low.o linux-crisv32-low.o"
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  cris-*-linux*)	srv_regobj=reg-cris.o
			srv_tgtobj="linux-low.o linux-cris-low.o"
			srv_linux_usrregs=yes
			srv_linux_thread_db=yes
			;;
  i[34567]86-*-cygwin*)	srv_regobj=reg-i386.o
			srv_tgtobj="win32-low.o win32-i386-low.o"
			;;
  i[34567]86-*-linux*)	srv_regobj=reg-i386-linux.o
			srv_tgtobj="linux-low.o linux-i386-low.o i387-fp.o"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  i[34567]86-*-mingw*)	srv_regobj=reg-i386.o
			srv_tgtobj="win32-low.o win32-i386-low.o"
			srv_mingw=yes
			;;
  ia64-*-linux*)	srv_regobj=reg-ia64.o
			srv_tgtobj="linux-low.o linux-ia64-low.o"
			srv_linux_usrregs=yes
			;;
  m32r*-*-linux*)	srv_regobj=reg-m32r.o
			srv_tgtobj="linux-low.o linux-m32r-low.o"
			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
			;;
  m68*-*-linux*)	srv_regobj=reg-m68k.o
			srv_tgtobj="linux-low.o linux-m68k-low.o"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  m68*-*-uclinux*)	srv_regobj=reg-m68k.o
			srv_tgtobj="linux-low.o linux-m68k-low.o"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  mips*64*-*-linux*)	srv_regobj=mips64-linux.o
			srv_tgtobj="linux-low.o linux-mips-low.o"
			srv_xmlfiles="mips64-linux.xml"
			srv_xmlfiles="${srv_xmlfiles} mips64-cpu.xml"
			srv_xmlfiles="${srv_xmlfiles} mips64-cp0.xml"
			srv_xmlfiles="${srv_xmlfiles} mips64-fpu.xml"
			srv_linux_regsets=yes
			srv_linux_usrregs=yes
			srv_linux_thread_db=yes
			;;
  mips*-*-linux*)	srv_regobj=mips-linux.o
			srv_tgtobj="linux-low.o linux-mips-low.o"
			srv_xmlfiles="mips-linux.xml"
			srv_xmlfiles="${srv_xmlfiles} mips-cpu.xml"
			srv_xmlfiles="${srv_xmlfiles} mips-cp0.xml"
			srv_xmlfiles="${srv_xmlfiles} mips-fpu.xml"
			srv_linux_regsets=yes
			srv_linux_usrregs=yes
			srv_linux_thread_db=yes
			;;
  powerpc*-*-linux*)	srv_regobj="powerpc-32l.o"
			srv_regobj="${srv_regobj} powerpc-altivec32l.o"
			srv_regobj="${srv_regobj} powerpc-e500l.o"
			srv_regobj="${srv_regobj} powerpc-64l.o"
			srv_regobj="${srv_regobj} powerpc-altivec64l.o"
			srv_tgtobj="linux-low.o linux-ppc-low.o"
			srv_xmlfiles="rs6000/powerpc-32l.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec32l.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power-altivec.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power-core.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power-linux.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power-fpu.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-e500l.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power-spe.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-64l.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-altivec64l.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power64-core.xml"
			srv_xmlfiles="${srv_xmlfiles} rs6000/power64-linux.xml"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  s390*-*-linux*)	srv_regobj="reg-s390.o reg-s390x.o"
			srv_tgtobj="linux-low.o linux-s390-low.o"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  sh*-*-linux*)		srv_regobj=reg-sh.o
			srv_tgtobj="linux-low.o linux-sh-low.o"
			srv_linux_usrregs=yes
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  spu*-*-*)		srv_regobj=reg-spu.o
			srv_tgtobj="spu-low.o"
			;;
  x86_64-*-linux*)	srv_regobj=reg-x86-64-linux.o
			srv_tgtobj="linux-low.o linux-x86-64-low.o i387-fp.o"
			srv_linux_regsets=yes
			srv_linux_thread_db=yes
			;;
  xscale*-*-linux*)	srv_regobj=reg-arm.o
			srv_tgtobj="linux-low.o linux-arm-low.o"
			srv_linux_usrregs=yes
			srv_linux_thread_db=yes
			;;
  xtensa*-*-linux*)	srv_regobj=reg-xtensa.o
			srv_tgtobj="linux-low.o linux-xtensa-low.o"
			srv_linux_regsets=yes
			;;
  *)			echo "Error: target not supported by gdbserver."
			exit 1
			;;
esac
