# 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_cpu}" in

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*)		gdb_host_cpu=powerpc ;;
sparcv9 | sparc64)	gdb_host_cpu=sparc ;;
s390*)			gdb_host_cpu=s390 ;;
sh*)			gdb_host_cpu=sh ;;
x86_64*)		gdb_host_cpu=i386 ;;
xscale*)		gdb_host_cpu=arm ;;
m32r*)			gdb_host_cpu=m32r ;;
*)			gdb_host_cpu=$host_cpu ;;

esac

# map host info into gdb names.

case "${host}" in

alpha*-*-osf1*)		gdb_host=alpha-osf1 ;;
alpha*-*-osf2*)		gdb_host=alpha-osf2 ;;
alpha*-*-osf[3456789]*)	gdb_host=alpha-osf3 ;;
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*-*-netbsd*)		gdb_host=nbsdaout ;;
arm*-*-openbsd*)	gdb_host=nbsdelf ;;

hppa*-*-hpux* | hppa*-*-hiux*)
			gdb_host=hpux ;;
hppa*-*-linux*)		gdb_host=linux ;;
hppa*-*-openbsd*)	gdb_host=obsd ;;

i[34567]86-ncr-*)	gdb_host=ncr3000 ;;
i[34567]86-*-dgux*)	gdb_host=i386v4 ;;
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-*-netbsd*)	gdb_host=nbsdaout ;;
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-*-lynxos*)	gdb_host=i386lynx ;;
i[34567]86-*-gnu*)	gdb_host=i386gnu ;;
i[3456]86-*-nto*) 	gdb_host=nto ;;
i[34567]86-*-openbsd[0-2].* | i[34567]86-*-openbsd3.[0-3])
			gdb_host=obsdaout ;;
i[34567]86-*-openbsd*)	gdb_host=obsd ;;
i[34567]86-*-sco3.2v5*)	gdb_host=i386sco5 ;;
i[34567]86-*-sco3.2v4*)	gdb_host=i386sco4 ;;
i[34567]86-*-sco*)	gdb_host=i386sco ;;
i[34567]86-*-solaris2.1[0-9]*)	gdb_host=sol2-64 ;;
i[34567]86-*-solaris*)	gdb_host=i386sol2 ;;
i[34567]86-*-sysv4.2*)	gdb_host=i386v42mp ;;
i[34567]86-*-sysv4*)	gdb_host=i386v4 ;;
i[34567]86-*-sysv5*)	gdb_host=i386v42mp ;;
i[34567]86-*-unixware2*)	gdb_host=i386v42mp ;;
i[34567]86-*-unixware*)	gdb_host=i386v4 ;;
i[34567]86-*-sysv*)	gdb_host=i386v ;;
i[34567]86-*-isc*)	gdb_host=i386v ;;
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*-*-netbsd*)		gdb_host=nbsdaout ;;
m68*-*-openbsd*)	gdb_host=obsd ;;

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

mips-sgi-irix5*)	gdb_host=irix5 ;;
mips-sgi-irix6*)	gdb_host=irix6 ;;
mips*-*-linux*)		gdb_host=linux ;;
mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
mips64*-*-openbsd*)	gdb_host=obsd64 ;;

powerpc-*-aix*)		gdb_host=aix ;;
powerpc-*-linux*)	gdb_host=linux ;;
powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
			gdb_host=nbsd ;;
powerpc-*-openbsd*)	gdb_host=obsd ;;

powerpc64-*-linux*)     gdb_host=ppc64-linux ;;

rs6000-*-lynxos*)	gdb_host=rs6000lynx ;;
rs6000-*-aix4*)		gdb_host=aix4 ;;
rs6000-*-*)		gdb_host=rs6000 ;;

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

sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
			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 ;;
sparc-*-netbsdaout*)	gdb_host=nbsdaout ;;
sparc-*-netbsd*)	gdb_host=nbsdaout ;;
sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
			gdb_host=nbsd64 ;;
sparc-*-openbsd*)	gdb_host=nbsdelf ;;
sparc64-*-openbsd*)	gdb_host=nbsd64 ;;
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
			gdb_host=sol2
			;;

vax-*-bsd*)		gdb_host=vax ;;
vax-*-netbsdelf* | vax-*-knetbsd*-gnu)
			gdb_host=nbsdelf ;;
vax-*-netbsd*)		gdb_host=nbsdaout ;;
vax-*-openbsd*)		gdb_host=obsd ;;
vax-*-ultrix*)		gdb_host=vax ;;

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

m32r*-*-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-*-*)
	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
