# 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

# This file may also modify configdirs.

# 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 ;;
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 ;;
v850*)			gdb_target_cpu=v850 ;;
x86_64*)		gdb_target_cpu=i386 ;;
*)			gdb_target_cpu=$target_cpu ;;

esac

# map target info into gdb names.

case "${target}" in

x86_64-*-freebsd*)	gdb_target=fbsd64 ;;
*-*-freebsd*)		gdb_target=fbsd	;;

alpha*-*-osf*)		gdb_target=alpha-osf1 ;;
alpha*-*-linux*)	gdb_target=alpha-linux ;;
alpha*-*-netbsd*)	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*)		gdb_target=nbsd ;;
arm-*-nto*)		gdb_target=nto ;;
arm*-*-* | thumb*-*-* | strongarm*-*-*)
			gdb_target=embed
                        configdirs="$configdirs rdi-share"
                        ;;
xscale-*-*)		gdb_target=embed
                        configdirs="$configdirs rdi-share"
                        ;;

avr-*-*)		gdb_target=avr ;;

cris*)                  gdb_target=cris ;;

d10v-*-*)		gdb_target=d10v ;;

h8300-*-*)		gdb_target=h8300 ;;


frv-*-*)		gdb_target=frv ;;

hppa*64*-*-hpux11*)	gdb_target=hppa64 ;;
hppa*-*-hpux*)		gdb_target=hppahpux ;;
hppa*-*-hiux*)		gdb_target=hppahpux ;;
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-*-go32*)	gdb_target=i386aout ;;
i[34567]86-*-msdosdjgpp*) gdb_target=go32 ;;
i[34567]86-*-nto*)	gdb_target=nto ;;
i[34567]86-*-lynxos*)	gdb_target=i386lynx ;;
i[34567]86-*-solaris*)	gdb_target=i386sol2 ;;
i[34567]86-*-sco*)	gdb_target=i386v ;;
i[34567]86-*-sysv*)	gdb_target=i386v ;;
i[34567]86-*-linux*)	gdb_target=linux
			build_gdbserver=yes
			;;
i[34567]86-*-isc*)	gdb_target=i386v ;;
i[34567]86-*-gnu*)	gdb_target=i386gnu ;;
i[34567]86-*-netware*)	gdb_target=i386nw
		configdirs="${configdirs} nlm" ;;
i[34567]86-*-cygwin*)	gdb_target=cygwin  ;;
i[34567]86-*-vxworks*)	gdb_target=vxworks ;;
i[34567]86-*-*)		gdb_target=embed ;;

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

m32r-*-*)		gdb_target=m32r ;;

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

# OBSOLETE m68000-*-sunos3*)	gdb_target=sun2os3 ;;
# OBSOLETE m68000-*-sunos4*)	gdb_target=sun2os4 ;;

# OBSOLETE m68*-bull-sysv*)	gdb_target=dpx2 ;;
# OBSOLETE m68*-att-*)		gdb_target=3b1 ;;
m68*-cisco*-*)		gdb_target=cisco ;;
# OBSOLETE m68*-motorola-*)	gdb_target=delta68 ;;
m68*-netx-*)		gdb_target=vxworks68 ;;
m68*-tandem-*)		gdb_target=st2000 ;;
m68*-*-aout*)		gdb_target=monitor ;;
m68*-*-coff*)		gdb_target=monitor ;;
m68*-*-elf*)		gdb_target=monitor ;;
m68*-*-linux*)		gdb_target=linux
			build_gdbserver=yes
			;;
# OBSOLETE m68*-*-lynxos*)		gdb_target=m68klynx ;;
m68*-*-netbsd*)		gdb_target=nbsdaout ;;
m68*-*-os68k*)		gdb_target=os68k ;;
# OBSOLETE m68*-*-sunos3*)		gdb_target=sun3os3 ;;
# OBSOLETE m68*-*-sunos4*)		gdb_target=sun3os4 ;;
# OBSOLETE m68*-*-sysv4*)		gdb_target=m68kv4 ;;
m68*-*-uclinux*)	gdb_target=monitor ;;
m68*-*-vxworks*)	gdb_target=vxworks68 ;;

mcore*-*-*)		gdb_target=mcore ;;

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*)	gdb_target=nbsd ;;
# OBSOLETE mips*-*-sysv4*)		gdb_target=mipsv4 ;;
mips*-*-vxworks*)       gdb_target=vxmips ;;
mips*-*-*)		gdb_target=embed ;;

mn10300-*-*)		gdb_target=mn10300 ;;

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

powerpc-*-netbsd*)	gdb_target=nbsd ;;
powerpc-*-aix*)		gdb_target=aix ;;
powerpc-*-linux*)	gdb_target=linux
			build_gdbserver=yes
			;;
powerpc64-*-linux*)	gdb_target=linux ;;
powerpc-*-vxworks*)	gdb_target=vxworks ;;
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*)	gdb_target=nbsd ;;
sh-*-nto*)		gdb_target=nto ;;
sh*)			gdb_target=embed ;;

sparc-*-linux*)		gdb_target=linux ;;
sparc64-*-linux*)	gdb_target=linux64 ;;
sparc-*-netbsd*)	gdb_target=nbsd ;;
sparc64-*-netbsd*)	gdb_target=nbsd64 ;;
sparc-*-openbsd*)	gdb_target=obsd ;;
sparc64-*-openbsd*)	gdb_target=obsd64
			gdb_osabi=GDB_OSABI_OPENBSD_ELF
			;;
sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
			gdb_target=sol2
			;;
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
			gdb_target=sol2-64
			;;
sparc-*-vxworks*)	gdb_target=vxworks ;;
sparc-*-*)		gdb_target=sparc ;;
sparc64-*-*)		gdb_target=sparc64 ;;

xstormy16-*-*)          gdb_target=xstormy16 ;;

vax-*-*)		gdb_target=vax ;;

v850*-*-*)		gdb_target=v850
			case ${gdb_host} in
			cygwin*)
				CONFIG_OBS="${CONFIG_OBS} v850ice.o" ;;
			* ) ;;
			esac
			;;

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

esac

# map target onto default OS ABI

case "${target}" in
*-*-linux*)	gdb_osabi=GDB_OSABI_LINUX ;;
*-*-gnu*)	gdb_osabi=GDB_OSABI_HURD ;;
*-*-nto*)	gdb_osabi=GDB_OSABI_QNXNTO ;;
*-*-solaris*)	gdb_osabi=GDB_OSABI_SOLARIS ;;
esac
