# 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

# 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 ;;
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*)	gdb_host=fbsd ;;
alpha*-*-netbsd*)	gdb_host=nbsd ;;

arm*-*-linux*)		gdb_host=linux ;;
arm*-*-netbsdelf*)	gdb_host=nbsdelf ;;
arm*-*-netbsd*)		gdb_host=nbsdaout ;;

hppa*-*-hiux*)		gdb_host=hppahpux ;;
hppa*-*-hpux10.20)	gdb_host=hpux1020 ;;
hppa*64*-*-hpux11*)	gdb_host=hpux11w ;;
hppa*-*-hpux11*)	gdb_host=hpux11 ;;
hppa*-*-hpux*)		gdb_host=hppahpux ;;

i[34567]86-ncr-*)	gdb_host=ncr3000 ;;
i[34567]86-*-bsd*)	gdb_host=i386bsd ;;
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-*-freebsd*)	gdb_host=fbsd ;;
i[34567]86-*-netbsd*)	gdb_host=nbsdaout ;;
i[34567]86-*-go32*)	gdb_host=go32 ;;
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*)	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-*-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-*-aix*)		gdb_host=aix ;;
ia64-*-linux*)		gdb_host=linux ;;

# OBSOLETE m680[01]0-sun-sunos3*)	gdb_host=sun2os3 ;;
# OBSOLETE m680[01]0-sun-sunos4*)	gdb_host=sun2os4 ;;

# OBSOLETE m68*-att-*)		gdb_host=3b1 ;;
# OBSOLETE m68*-bull*-sysv*)	gdb_host=dpx2 ;;
m68*-*-linux*)		gdb_host=linux ;;
# OBSOLETE m68*-*-lynxos*)		gdb_host=m68klynx ;;
m68*-*-netbsd*)		gdb_host=nbsdaout ;;
# OBSOLETE m68*-*-sysv4*)		gdb_host=m68kv4 ;;
# OBSOLETE m68*-motorola-*)	gdb_host=delta68 ;;
# OBSOLETE m68*-sun-sunos3*)	gdb_host=sun3os3 ;;
# OBSOLETE m68*-sun-sunos4*)	gdb_host=sun3os4 ;;
# OBSOLETE m68*-sun-*)		gdb_host=sun3os4 ;;

# OBSOLETE mips-dec-*)		gdb_host=decstation ;;
# OBSOLETE mips-little-*)		gdb_host=littlemips ;;
mips-sgi-irix5*)	gdb_host=irix5 ;;
mips-sgi-irix6*)	gdb_host=irix6 ;;
# OBSOLETE mips-sony-*)		gdb_host=news-mips ;;
mips*-*-linux*)		gdb_host=linux ;;
mips*-*-netbsd*)	gdb_host=nbsd ;;
# OBSOLETE mips-*-mach3*)		gdb_host=mipsm3 ;;
# OBSOLETE mips-*-sysv4*)		gdb_host=mipsv4 ;;
# OBSOLETE mips-*-sysv*)		gdb_host=riscos ;;
# OBSOLETE mips-*-riscos*)		gdb_host=riscos ;;

none-*-*)		gdb_host=none ;;

ns32k-*-netbsd*)	gdb_host=nbsdaout ;;

powerpc-*-aix3*)	gdb_host=aix ;;
powerpc-*-aix4.[0-2]*)	gdb_host=aix ;;
powerpc-*-aix4.3.[0-1]*)	gdb_host=aix ;;
powerpc-*-aix*)		gdb_host=aix432 ;;
powerpc-*-linux*)	gdb_host=linux ;;
powerpc-*-netbsd*)	gdb_host=nbsd ;;

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*)	gdb_host=nbsd ;;

sparc64-*-freebsd*)	gdb_host=fbsd ;;
sparc-*-linux*)		gdb_host=linux ;;
sparc64-*-linux*)	gdb_host=linux64 ;;
sparc-*-netbsdelf*)	gdb_host=nbsdelf ;;
sparc-*-netbsdaout*)	gdb_host=nbsdaout ;;
sparc-*-netbsd*)	gdb_host=nbsdaout ;;
sparc64-*-netbsd*)	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=vaxbsd ;;
vax-*-ultrix2*)		gdb_host=vaxult2 ;;
vax-*-ultrix*)		gdb_host=vaxult ;;

x86_64-*-linux*)	gdb_host=x86-64linux ;;
x86_64-*-freebsd*)	gdb_host=fbsd64 ;;
x86_64-*-netbsd*)	gdb_host=nbsd64 ;;

m32r*-*-linux*)          gdb_host=linux ;;

esac
