# 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[3456]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 ;;
*)			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 ;;

# OBSOLETE hppa*-*-bsd*)		gdb_host=hppabsd ;;
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 ;;
# OBSOLETE hppa*-*-osf*)		gdb_host=hppaosf ;;

i[3456]86-ncr-*)	gdb_host=ncr3000 ;;
i[3456]86-sequent-bsd*)	gdb_host=symmetry ;;  # dynix
i[3456]86-sequent-sysv4*) gdb_host=ptx4 ;;
i[3456]86-sequent-sysv*) gdb_host=ptx ;;
i[3456]86-*-bsd*)	gdb_host=i386bsd ;;
i[3456]86-*-dgux*)	gdb_host=i386v4 ;;
i[3456]86-*-freebsd*)	gdb_host=fbsd ;;
i[3456]86-*-netbsdelf*)	gdb_host=nbsdelf ;;
i[3456]86-*-netbsdaout*) gdb_host=nbsdaout ;;
i[3456]86-*-netbsd*)	gdb_host=nbsdaout ;;
i[3456]86-*-go32*)	gdb_host=go32 ;;
i[3456]86-*-msdosdjgpp*) gdb_host=go32 ;;
i[3456]86-*-linux*)	gdb_host=linux ;;
i[3456]86-*-lynxos*)	gdb_host=i386lynx ;;
i[3456]86-*-gnu*)	gdb_host=i386gnu ;;
i[3456]86-*-openbsd*)	gdb_host=obsd ;;
i[3456]86-*-sco3.2v5*)	gdb_host=i386sco5 ;;
i[3456]86-*-sco3.2v4*)	gdb_host=i386sco4 ;;
i[3456]86-*-sco*)	gdb_host=i386sco ;;
i[3456]86-*-solaris*)	gdb_host=i386sol2 ;;
i[3456]86-*-sysv4.2*)	gdb_host=i386v42mp ;;
i[3456]86-*-sysv4*)	gdb_host=i386v4 ;;
i[3456]86-*-sysv5*)	gdb_host=i386v42mp ;;
i[3456]86-*-unixware2*)	gdb_host=i386v42mp ;;
i[3456]86-*-unixware*)	gdb_host=i386v4 ;;
i[3456]86-*-sysv*)	gdb_host=i386v ;;
i[3456]86-*-isc*)	gdb_host=i386v ;;
i[3456]86-*-cygwin*)	gdb_host=cygwin ;;

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

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

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

mips-dec-mach3*)	gdb_host=mipsm3 ;;
mips-dec-*)		gdb_host=decstation ;;
mips-little-*)		gdb_host=littlemips ;;
mips-sgi-irix3*)	gdb_host=irix3 ;;
mips-sgi-irix4*)	gdb_host=irix4 ;;
mips-sgi-irix5*)	gdb_host=irix5 ;;
mips-sgi-irix6*)	gdb_host=irix6 ;;
mips-sony-*)		gdb_host=news-mips ;;
mips*-*-linux*)		gdb_host=linux ;;
mips*-*-netbsd*)	gdb_host=nbsd ;;
mips-*-mach3*)		gdb_host=mipsm3 ;;
mips-*-sysv4*)		gdb_host=mipsv4 ;;
mips-*-sysv*)		gdb_host=riscos ;;
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 ;;

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

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

sh*-*-netbsdelf*)	gdb_host=nbsd ;;

sparc-*-linux*)		gdb_host=linux ;;
sparc-*-lynxos*)	gdb_host=sparclynx ;;
sparc-*-netbsdelf*)	gdb_host=nbsdelf ;;
sparc-*-netbsdaout*)	gdb_host=nbsdaout ;;
sparc-*-netbsd*)	gdb_host=nbsdaout ;;
sparc-*-solaris2*)	gdb_host=sun4sol2 ;;
sparc-*-sunos4*)	gdb_host=sun4os4 ;;
sparc-*-sunos5*)	gdb_host=sun4sol2 ;;
sparc-*-*)		gdb_host=sun4os4 ;;
sparc64-*-freebsd*|ultrasparc-*-freebsd*|sparcv9-*-freebsd*)
			gdb_host=fbsd ;;
sparc64-*-linux*)	gdb_host=linux ;;
sparc64-*-netbsd*)	gdb_host=nbsd64 ;;
sparcv9-*-* | sparc64-*-*) gdb_host=sun4sol2 ;;

vax-*-bsd*)		gdb_host=vaxbsd ;;
vax-*-ultrix2*)		gdb_host=vaxult2 ;;
vax-*-ultrix*)		gdb_host=vaxult ;;

x86_64-*-linux*)	gdb_host=x86-64linux ;;

esac
