# 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*-*-*)		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-*-bsd*)	gdb_target=i386bsd ;;
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 ;;

none-*-*)		gdb_target=none ;;

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
			;;
s390x-*-*)		gdb_target=s390x
			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=x86-64linux
			build_gdbserver=yes
			;;
x86_64-*-netbsd*)	gdb_target=nbsd64 ;;

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
