# 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 ;;
# OBSOLETE 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 ;;
*)			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 ;;
arm*-*-*)		gdb_host=arm ;;

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 ;;
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 ;;
# OBSOLETE i[3456]86-*-aix*)	gdb_host=i386aix ;;
i[3456]86-*-bsd*)	gdb_host=i386bsd ;;
i[3456]86-*-dgux*)	gdb_host=i386dgux ;;
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 ;;
# OBSOLETE i[3456]86-*-mach3*)	gdb_host=i386m3 ;;
# OBSOLETE i[3456]86-*-mach*)	gdb_host=i386mach ;;
i[3456]86-*-gnu*)	gdb_host=i386gnu ;;
i[3456]86-*-openbsd*)	gdb_host=obsd ;;
# OBSOLETE i[3456]86-*-osf1mk*)	gdb_host=i386mk ;;
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-*-sysv3.2*)	gdb_host=i386v32 ;;
i[3456]86-*-sysv32*)	gdb_host=i386v32 ;;
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=i386v32 ;;
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 ;;

# OBSOLETE m68*-apollo*-sysv*)	gdb_host=apollo68v ;;
# OBSOLETE m68*-apollo*-bsd*)	gdb_host=apollo68b ;;
m68*-att-*)		gdb_host=3b1 ;;
m68*-bull*-sysv*)	gdb_host=dpx2 ;;
# OBSOLETE m68*-hp-bsd*)		gdb_host=hp300bsd ;;
# OBSOLETE m68*-hp-hpux*)		gdb_host=hp300hpux ;;
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 ;;

# OBSOLETE m88*-motorola-sysv4*)	gdb_host=delta88v4 ;;
# OBSOLETE m88*-motorola-sysv*)	gdb_host=delta88 ;;
# OBSOLETE m88*-*-*)		gdb_host=m88k ;;

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

strongarm-*-*)		gdb_host=arm ;;
xscale-*-*)		gdb_host=arm ;;

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

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

esac
