# 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 ;;
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=nbsd ;;
alpha*-*-*)		gdb_target=alpha ;;

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=nbsd ;;
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
			build_nlm=yes
			;;
i[34567]86-*-cygwin*)	gdb_target=cygwin  ;;
i[34567]86-*-*)		gdb_target=i386 ;;

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

iq2000-*-*)		gdb_target=iq2000 ;;

m32r*-*-linux*)		gdb_target=linux ;;
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 ;;

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