# Mappings from configurations to GDB target definitions.  This is
# invoked from the autoconf generated configure script.

# This file sets the following shell variables:
#  gdb_target_cpu	generic name of CPU
#  gdb_target		name of GDB target definition to use

# Map target cpu into the config cpu subdirectory name.
# The default is $target_cpu.

case "${target_cpu}" in

alpha*)			gdb_target_cpu=alpha ;;
am33_2.0*)              gdb_target_cpu=mn10300 ;;
arm*)			gdb_target_cpu=arm ;;
avr*)			gdb_target_cpu=avr ;;
hppa*)			gdb_target_cpu=pa ;;
i[34567]86*)		gdb_target_cpu=i386 ;;
m68hc11*|m6811*)	gdb_target_cpu=m68hc11 ;;
m68*)			gdb_target_cpu=m68k ;;
m88*)			gdb_target_cpu=m88k ;;
mips*)			gdb_target_cpu=mips ;;
powerpc*)		gdb_target_cpu=powerpc ;;
sparc*)			gdb_target_cpu=sparc ;;
thumb*)			gdb_target_cpu=arm ;;
s390*)			gdb_target_cpu=s390 ;;
sh*)			gdb_target_cpu=sh ;;
strongarm*)		gdb_target_cpu=arm ;;
xscale*)		gdb_target_cpu=arm ;;
x86_64*)		gdb_target_cpu=i386 ;;
*)			gdb_target_cpu=$target_cpu ;;

esac

# map target info into gdb names.

case "${target}" in

x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
			gdb_target=fbsd64 ;;
*-*-freebsd* | *-*-kfreebsd*-gnu)
			gdb_target=fbsd	;;

alpha*-*-osf*)		gdb_target=alpha-osf1 ;;
alpha*-*-linux*)	gdb_target=alpha-linux ;;
alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
alpha*-*-openbsd*)	gdb_target=obsd ;;
alpha*-*-*)		gdb_target=alpha ;;

# mn10300 / am33 liunux
am33_2.0*-*-linux*)	gdb_target=linux ;;

arm*-wince-pe)		gdb_target=wince ;;
arm*-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
arm-*-nto*)		gdb_target=nto ;;
arm*-*-openbsd*)	gdb_target=obsd ;;
arm*-*-* | thumb*-*-* | strongarm*-*-*)
			gdb_target=embed
			build_rdi_share=yes
                        ;;
xscale-*-*)		gdb_target=embed
			build_rdi_share=yes
                        ;;

avr-*-*)		gdb_target=avr ;;

cris*)                  gdb_target=cris ;;

# OBSOLETE d10v-*-*)		gdb_target=d10v ;;

frv-*-*)		gdb_target=frv ;;

h8300-*-*)		gdb_target=h8300 ;;

hppa*64*-*-hpux11*)	gdb_target=hppa64 ;;
hppa*-*-hpux*)		gdb_target=hppahpux ;;
hppa*-*-hiux*)		gdb_target=hppahpux ;;
hppa*-*-linux*)		gdb_target=linux ;;
hppa*-*-openbsd*)	gdb_target=obsd ;;
hppa*-*-*)		gdb_target=hppa ;;

i[34567]86-ncr-*)	gdb_target=ncr3000 ;;
i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
i[34567]86-*-openbsd*)	gdb_target=obsd ;;
i[34567]86-*-nto*)	gdb_target=nto ;;
i[34567]86-*-lynxos*)	gdb_target=i386lynx ;;
i[34567]86-*-solaris2.1[0-9]*)	gdb_target=sol2-64 ;;
i[34567]86-*-solaris*)	gdb_target=i386sol2 ;;
i[34567]86-*-linux*)	gdb_target=linux
			build_gdbserver=yes
			;;
i[34567]86-*-gnu*)	gdb_target=i386gnu ;;
i[34567]86-*-netware*)	gdb_target=i386 ;;
i[34567]86-*-cygwin*)	gdb_target=cygwin
			build_gdbserver=yes
			;;
i[34567]86-*-mingw32*)	gdb_target=i386
			build_gdbserver=yes
			;;
i[34567]86-*-*)		gdb_target=i386 ;;

ia64-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
ia64*-*-*)		gdb_target=ia64 ;;

iq2000-*-*)		gdb_target=iq2000 ;;

m32c-*-*)		gdb_target=m32c ;;

m32r*-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
m32r*-*-*)		gdb_target=m32r ;;

m68hc11*-*-*|m6811*-*-*)	gdb_target=m68hc11 ;;

m68*-cisco*-*)		gdb_target=cisco ;;
m68*-tandem-*)		gdb_target=st2000 ;;
m68*-*-aout*)		gdb_target=monitor ;;
m68*-*-coff*)		gdb_target=monitor ;;
m68*-*-elf*)		gdb_target=monitor ;;
m68*-*-rtems*)		gdb_target=monitor ;;
m68*-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
m68*-*-netbsd* | m68*-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
m68*-*-openbsd*)	gdb_target=obsd ;;
m68*-*-os68k*)		gdb_target=os68k ;;
m68*-*-uclinux*)	gdb_target=monitor ;;

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

mips*-*-pe)		gdb_target=wince ;;
mips*-sgi-irix5*)	gdb_target=irix5 ;;
mips*-sgi-irix6*)	gdb_target=irix6 ;;
mips*-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
mips64*-*-openbsd*)	gdb_target=obsd64 ;;
mips*-*-*)		gdb_target=embed ;;

mn10300-*-*)		gdb_target=mn10300 ;;

mt-*-*)			gdb_target=mt ;;

powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
powerpc-*-openbsd*)	gdb_target=obsd ;;
powerpc-*-aix*)		gdb_target=aix ;;
powerpc-*-linux*)	gdb_target=linux
			build_gdbserver=yes
			;;
powerpc64-*-linux*)	gdb_target=linux
			build_gdbserver=yes
			;;
powerpc*-*-*)		if test -f ../sim/ppc/Makefile; then
			  gdb_target=ppc-sim
			else
			  gdb_target=ppc-eabi
			fi ;;

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

s390*-*-*)		gdb_target=s390
			build_gdbserver=yes
			;;

sh*-*-pe)		gdb_target=wince ;;
sh-*-coff*)		gdb_target=embed ;;
sh-*-elf*)		gdb_target=embed ;;
# FIXME should that be sh*-*-linux*, perhaps?
sh-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
sh-*-nto*)		gdb_target=nto ;;
sh64-*-elf*)		gdb_target=sh64 ;;
sh*)			gdb_target=embed ;;

sparc-*-linux*)		gdb_target=linux ;;
sparc64-*-linux*)	gdb_target=linux64 ;;
sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
			gdb_target=nbsd64 ;;
sparc-*-openbsd*)	gdb_target=obsd ;;
sparc64-*-openbsd*)	gdb_target=obsd64 ;;
sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
			gdb_target=sol2
			;;
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
			gdb_target=sol2-64
			;;
sparc-*-rtems*)		gdb_target=embed ;;
sparc-*-*)		gdb_target=sparc ;;
sparc64-*-*)		gdb_target=sparc64 ;;

xstormy16-*-*)          gdb_target=xstormy16 ;;

v850*-*-elf)		gdb_target=v850 ;;

vax-*-netbsd* | vax-*-knetbsd*-gnu)
			gdb_target=nbsd ;;
vax-*-openbsd*)		gdb_target=obsd ;;
vax-*-*)		gdb_target=vax ;;

x86_64-*-linux*)	gdb_target=linux64
			build_gdbserver=yes
			;;
x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
			gdb_target=nbsd64 ;;
x86_64-*-openbsd*)	gdb_target=obsd64 ;;

esac

# map target onto default OS ABI

case "${target}" in
*-*-freebsd*)	gdb_osabi=GDB_OSABI_FREEBSD_ELF ;;
*-*-linux*)	gdb_osabi=GDB_OSABI_LINUX ;;
*-*-nto*)	gdb_osabi=GDB_OSABI_QNXNTO ;;
m68*-*-openbsd* | m88*-*-openbsd* | vax-*-openbsd*) ;;
*-*-openbsd*)	gdb_osabi=GDB_OSABI_OPENBSD_ELF ;;
*-*-solaris*)	gdb_osabi=GDB_OSABI_SOLARIS ;;
*-*-*-gnu*)	;; # prevent non-GNU kernels to match the Hurd rule below
*-*-gnu*)	gdb_osabi=GDB_OSABI_HURD ;;
esac
