# Mapping of configurations into GDB host definitions.  This is
# invoked from the autoconf generated configure script.

# This file sets the following shell variables:
#  gdb_host_cpu			generic name of host's CPU
#  gdb_host			name of GDB host definition to use
#  gdb_host_float_format	host's float floatformat, or 0
#  gdb_host_double_format	host's double floatformat, or 0
#  gdb_host_long_double_format	host's long double floatformat, or 0
#  gdb_host_obs			host-specific .o files to include

# Map host cpu into the config cpu subdirectory name.
# The default is $host_cpu.

case $host in
 arm*-*-netbsdelf* | \
 i[34567]86-*-netbsdelf* | \
 m68*-*-netbsdelf* | \
 sparc-*-netbsdelf* | \
 vax-*-netbsdelf*)
    ;;
 *-*-irix* | \
 alpha*-*-osf* | \
 arm*-*-netbsd* | \
 hppa*-*-hiux* | \
 i[34567]86-ncr-* | \
 i[34567]86-*-dgux* | \
 i[34567]86-*-lynxos* | \
 i[34567]86-*-netbsd* | \
 i[34567]86-*-openbsd[0-2].* | i[34567]86-*-openbsd3.[0-3] | \
 i[34567]86-*-sco3.2v5* | \
 i[34567]86-*-sco3.2v4* | \
 i[34567]86-*-sco* | \
 i[34567]86-*-sysv4.2* | \
 i[34567]86-*-sysv4* | \
 i[34567]86-*-sysv5* | \
 i[34567]86-*-unixware2* | \
 i[34567]86-*-unixware* | \
 i[34567]86-*-sysv* | \
 i[34567]86-*-isc* | \
 m68*-*-netbsd* | \
 sparc-*-netbsd* | \
 rs6000-*-lynxos* | \
 vax-*-bsd* | \
 vax-*-netbsd* | \
 vax-*-ultrix* | \
 hppa*-*-hpux* | \
 ia64-*-hpux* | \
 null)
    echo "*** Configuration $host is obsolete." >&2
    echo "*** Support has been REMOVED." >&2
    exit 1
    ;;
esac

case "${host_cpu}" in

aarch64*)		gdb_host_cpu=aarch64 ;;
alpha*)			gdb_host_cpu=alpha ;;
arm*)			gdb_host_cpu=arm ;;
hppa*)			gdb_host_cpu=pa ;;
i[34567]86*)		gdb_host_cpu=i386 ;;
m68*)			gdb_host_cpu=m68k ;;
m88*)			gdb_host_cpu=m88k ;;
mips*)			gdb_host_cpu=mips ;;
powerpc* | rs6000)	gdb_host_cpu=powerpc ;;
sparcv9 | sparc64)	gdb_host_cpu=sparc ;;
s390*)			gdb_host_cpu=s390 ;;
sh*)			gdb_host_cpu=sh ;;
tilegx*)		gdb_host_cpu=tilegx ;;
x86_64*)		gdb_host_cpu=i386 ;;
m32r*)			gdb_host_cpu=m32r ;;
xtensa*)		gdb_host_cpu=xtensa ;;
*)			gdb_host_cpu=$host_cpu ;;

esac

# map host info into gdb names.

case "${host}" in

*-*-darwin*)		gdb_host=darwin ;;

aarch64*-*-linux*)	gdb_host=linux ;;

alpha*-*-linux*)	gdb_host=alpha-linux ;;
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
			gdb_host=fbsd ;;
alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
alpha*-*-openbsd*)	gdb_host=nbsd ;;

arm*-*-linux*)		gdb_host=linux ;;
arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
arm*-*-openbsd*)	gdb_host=nbsdelf ;;

hppa*-*-linux*)		gdb_host=linux ;;
hppa*-*-netbsd*)	gdb_host=nbsd ;;
hppa*-*-openbsd*)	gdb_host=obsd ;;

i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
			gdb_host=fbsd ;;
i[34567]86-*-netbsdelf* | i[34567]86-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
i[34567]86-*-go32*)	gdb_host=go32 ;;
i[34567]86-*-mingw32*)	gdb_host=mingw
			gdb_host_obs=mingw-hdep.o
			;;
i[34567]86-*-msdosdjgpp*) gdb_host=go32 ;;
i[34567]86-*-linux*)	gdb_host=linux ;;
i[34567]86-*-gnu*)	gdb_host=i386gnu ;;
i[3456]86-*-nto*) 	gdb_host=nto ;;
i[34567]86-*-openbsd*)	gdb_host=obsd ;;
i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
			gdb_host=sol2-64 ;;
i[34567]86-*-solaris*)	gdb_host=i386sol2 ;;
i[34567]86-*-cygwin*)	gdb_host=cygwin ;;

ia64-*-linux*)		gdb_host=linux ;;

m68*-*-linux*)		gdb_host=linux ;;
m68*-*-netbsdelf* | m68*-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
m68*-*-openbsd*)	gdb_host=obsd ;;

m88*-*-openbsd*)	gdb_host=obsd ;;

mips*-*-linux*)		gdb_host=linux ;;
mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
mips*-*-freebsd*)	gdb_host=fbsd ;;
mips64*-*-openbsd*)	gdb_host=obsd64 ;;

powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
			gdb_host=aix ;;
powerpc*-*-freebsd*)	gdb_host=fbsd ;;
powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
powerpc-*-openbsd*)	gdb_host=obsd ;;

powerpc64*-*-linux*)	gdb_host=ppc64-linux
                        # Support 'pseudo-native' debugging on the Cell BE
                        if test "${target_cpu}" = "spu"; then
				gdb_host=spu-linux
				gdb_native=yes
                        fi
			;;
powerpc*-*-linux*)	gdb_host=linux ;;

s390*-*-linux*)		gdb_host=linux ;;

sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
sh*-*-openbsd*)		gdb_host=nbsd ;;

sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
			gdb_host=fbsd ;;
sparc-*-linux*)		gdb_host=linux ;;
sparc64-*-linux*)	gdb_host=linux64 ;;
sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
			gdb_host=nbsd64 ;;
sparc-*-openbsd*)	gdb_host=nbsdelf ;;
sparc64-*-openbsd*)	gdb_host=obsd64 ;;
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
			gdb_host=sol2
			;;

tilegx-*-linux*)	gdb_host=linux ;;

vax-*-netbsdelf* | vax-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
vax-*-openbsd*)		gdb_host=obsd ;;

x86_64-*-linux*)	gdb_host=linux64 ;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
			gdb_host=fbsd64 ;;
x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
			gdb_host=nbsd64 ;;
x86_64-*-openbsd*)	gdb_host=obsd64 ;;
x86_64-*-mingw*)        gdb_host=mingw64
			gdb_host_obs=mingw-hdep.o
			;;
x86_64-*-cygwin*)	gdb_host=cygwin64 ;;
m32r*-*-linux*)          gdb_host=linux ;;

xtensa*-*-linux*)	gdb_host=linux ;;

esac



# Map the host/cpu onto the floatformat correspondong to C's "float",
# "double" and "long double" types.

case "${host}" in
i[34567]86-*-*|x86_64-*-*)
	gdb_host_float_format="&floatformat_ieee_single_little"
	gdb_host_double_format="&floatformat_ieee_double_little"
	gdb_host_long_double_format="&floatformat_i387_ext"
	;;
hppa*-*-linux*)
	gdb_host_float_format="&floatformat_ieee_single_big"
	gdb_host_double_format="&floatformat_ieee_double_big"
	gdb_host_long_double_format="&floatformat_ieee_double_big"
	;;
m68*-*-*)
	gdb_host_float_format="&floatformat_ieee_single_big"
	gdb_host_double_format="&floatformat_ieee_double_big"
	gdb_host_long_double_format="&floatformat_m68881_ext"
	;;
*)
	gdb_host_float_format=0
	gdb_host_double_format=0
	gdb_host_long_double_format=0
	;;
esac
