diff --git a/gas/configure.in b/gas/configure.in
index 9fbf0f870c1..a984943e4d0 100644
--- a/gas/configure.in
+++ b/gas/configure.in
@@ -30,6 +30,7 @@
 srctrigger=as.c
 srcname="gas"
 need_bfd=no
+bfd_gas=no
 configdirs="doc testsuite"
 
 # per-host:
@@ -37,58 +38,54 @@ configdirs="doc testsuite"
 gas_host=generic
 
 case "${host}" in
-  a29k-*-* | rs6000-*-* | vax-*-*)
-    case "${host_os}" in
-    vms*)	gas_host=vms ;;
-    bsd*)	gas_host=bsd ;;
-    *)		gas_host=${host_cpu} ;;
-    esac
-    ;;	
-  mips-dec-ultrix) 
-    gas_host=decstatn 
-    ;;
-  mips-*-bsd*)
-    gas_host=mipsbsd
-    ;;
-  mips-sgi-irix*)
-    gas_host=irix
-    ;;
-  i[34]86-ibm-aix*)
-    gas_host=i386aix
-    ;;
-  i[34]86-*-isc*)
-    gas_host=sysv
-    ;;
-  m68k-sun-sunos*)
-    gas_host=sun3 
-    ;;
-  i386-sun-sunos*)
-    gas_host=sun386  
-    ;;
-  sparc-sun-sunos*)
-    gas_host=sun4 
-    ;;
-  sparc-sun-solaris2*)
-    gas_host=sysv
-    ;;
+
+  a29k-*-*)			gas_host=a29k		;;
+
+  hppa-hp-hpux*)		gas_host=hppahpux	;;
+  hppa-hp-bsd*)			gas_host=hppabsd	;;
+  hppa-hp-osf*)			gas_host=hppaosf	;;
+
+  i[34]86-ibm-aix*)		gas_host=i386aix	;;
+  i[34]86-*-isc*)		gas_host=sysv		;;
+  i386-sun-sunos*)		gas_host=sun386		;;
+
+  m68k-sun-sunos*)		gas_host=sun3		;;
+  m68*-*-hpux)			gas_host=hpux		;;
+
+  mips-dec-ultrix*)		gas_host=decstatn	;;
+  mips-*-bsd*)			gas_host=mipsbsd	;;
+  mips-sgi-irix*)		gas_host=irix		;;
+
+  rs6000-*-*)			gas_host=rs6000		;;
+
+  sparc-sun-sunos*)		gas_host=sun4		;;
+  sparc-sun-solaris2*)		gas_host=sysv		;;
+
+  vax-*-vms*)			gas_host=vms		;;
+  vax-*-bsd*)			gas_host=vax		;;
+
   *-*-ansi | *-*-ultrix | *-*-hpux | *-*-sysv*)
-    gas_host=${host_os} 
-    ;;
+				gas_host=${host_os}	;;
+
 esac
 
+if [ ! -r ${srcdir}/config/ho-${gas_host}.h ]; then
+  echo '*** GAS does not support host' ${host} 1>&2
+  exit 1
+fi
+
 # per-target:
 
-# not yet...
 case ${with_bfd_assembler} in
   yes)
-    echo "*** Warning:  GAS BFD configuration option not yet supported" 1>&2
+    echo "*** Warning:  GAS BFD configuration option not yet fully supported" 1>&2
     need_bfd=yes
     bfd_gas=yes
     ;;
   no | "")
     ;;
   *)
-    echo "*** Bad value \"${with_bfd_assembler}\" for --with_bfd_assembler option" 1>&2
+    echo "*** Bad value \"${with_bfd_assembler}\" for --with-bfd-assembler option" 1>&2
     exit 1
     ;;
 esac
@@ -96,8 +93,6 @@ esac
 # assign cpu type
 emulation=generic
 
-cpu_type=${target_cpu}
-
 # check for architecture variants
 case ${target_cpu} in
   sparclite*)   cpu_type=sparc ;;
@@ -105,6 +100,10 @@ case ${target_cpu} in
   m680[01234]0) cpu_type=m68k ;;
   m683??)       cpu_type=m68k ;;
   i486)		cpu_type=i386 ;;
+  # Actually we've only got support for the 1.1, so we shouldn't generalize,
+  # but this is what the support files are named...
+  hppa1.1)	cpu_type=hppa ;;
+  *)		cpu_type=${target_cpu} ;;
 esac
 
 gas_target=${cpu_type}
@@ -113,143 +112,111 @@ generic_target=${cpu_type}-${target_vendor}-${target_os}
 
 # assign object format
 case ${generic_target} in
-  a29k-amd-udi)
-    obj_format=coffbfd
-    need_bfd=yes
-    gas_target=ebmon29k
-    ;;
-  a29k-amd-ebmon)
-    obj_format=coffbfd
-    need_bfd=yes
-    gas_target=ebmon29k
-    ;;
-  a29k-amd-ebmonold)
-    obj_format=coff
-    need_bfd=yes
-    gas_target=ebmon29k
-    ;;
-  i386-ibm-aix*)
-    obj_format=coffbfd
-    need_bfd=yes
-    gas_target=i386coff
-    emulation=i386aix
-    ;;
-  i386-*-bsd*) 
-    obj_format=aout 
-    ;;
+  a29k-amd-udi)		obj_format=coffbfd gas_target=ebmon29k ;;
+  a29k-amd-ebmon)	obj_format=coffbfd gas_target=ebmon29k ;;
+  a29k-amd-ebmonold)	obj_format=coff gas_target=ebmon29k ;;
+
+  hppa-*-osf)		obj_format=elf emulation=hppa ;;
+  hppa-*-hpux*)		obj_format=som emulation=hppa ;;
+
+  i386-ibm-aix*)	obj_format=coffbfd gas_target=i386coff
+			 emulation=i386aix ;;
+  i386-*-bsd*)		obj_format=aout emulation=386bsd ;;
+  i386-*-linux*)	obj_format=aout emulation=linux ;;
   i386-*-coff | i386-*-sysv* | i386-*-sco* | i386-*-isc*)
-    obj_format=coffbfd
-    need_bfd=yes
-    gas_target=i386coff
-    ;; 
-  i386-*-go32) 
-    obj_format=aout 
-    ;;
-  i960-wrs-vxworks)
-    obj_format=bout 
-    ;;
-  i960-*-coff)
-    obj_format=coff
-    emulation=ic960 
-    ;;
-  m68k-wrs-vxworks)
-    obj_format=aout
-    emulation=sun3
-    ;;    
+			obj_format=coffbfd gas_target=i386coff ;; 
+  i386-*-go32)		obj_format=aout ;;
+
+  i960-wrs-vxworks)	obj_format=bout ;;
+  i960-*-coff)		obj_format=coff emulation=ic960 ;;
+
+  m68k-wrs-vxworks)	obj_format=aout emulation=sun3 ;;    
   m68k-ericsson-[Oo][Ss][Ee])
-    obj_format=aout
-    emulation=sun3
-    ;;
-  m68k-*-coff)
-    obj_format=coffbfd
-    need_bfd=yes
-    gas_target=m68kcoff
-    ;;
-  mips-*-bsd*)
-    # don't change emulation like *-*-bsd does
-    bfd_gas=yes
-    obj_format=aout
-    gas_target=mips-lit
-    ;;
-  mips-*-ultrix*)
-    bfd_gas=yes
-    obj_format=ecoff
-    gas_target=mips-lit
-    ;;
-  mips-*-irix* | mips-*-ecoff)
-    bfd_gas=yes
-    obj_format=ecoff
-    gas_target=mips-big
-    ;;
+			obj_format=aout emulation=sun3 ;;
+  m68k-*-coff)		obj_format=coffbfd gas_target=m68kcoff ;;
+  m68k-*-hpux)		obj_format=hp300 emulation=hp300 ;;
+
+  # don't change emulation like *-*-bsd does
+  mips-*-bsd*)		bfd_gas=yes obj_format=aout gas_target=mips-lit ;;
+  mips-*-ultrix*)	obj_format=ecoff gas_target=mips-lit ;;
+  mips-*-ecoff)		obj_format=ecoff gas_target=mips-big ;;
+  mips-*-irix*)		obj_format=ecoff gas_target=mips-big emulation=irix ;;
+
   sparclite*-fujitsu-none)
-    obj_format=aout
-    ;;
+			obj_format=aout ;;
+
   *-*-aout | *-*-scout | *-*-linux)
-    obj_format=aout
-    ;;
+			obj_format=aout ;;
   *-*-bout* | *-*-nindy*)
-    obj_format=bout 
-    ;;
-  *-*-bsd* | *-*-sunos*) 
-    obj_format=aout 
-    emulation=sun3	
-    ;;
-  *-*-generic)
-    obj_format=generic 
-    ;;
-  *-*-xray | *-*-hms)
-    obj_format=coffbfd
-    need_bfd=yes
-    ;;
-  *-*-sysv32)
-    obj_format=coff
-    emulation=sysv32
-    ;;
-  *-*-sim)	
-    obj_format=coffbfd
-    need_bfd=yes
-    ;;
+			obj_format=bout ;;
+  *-*-bsd* | *-*-sunos*)
+			obj_format=aout emulation=sun3 ;;
+  *-*-generic)		obj_format=generic ;;
+  *-*-xray | *-*-hms)	obj_format=coffbfd ;;
+  *-*-sysv32)		obj_format=coff emulation=sysv32 ;;
+  *-*-sim)		obj_format=coffbfd ;;
   *-*-coff* | *-sysv* | *-*-sco*)
-    obj_format=coff
-    case ${target_vendor} in
-      bull)  emulation=dpx2 ;;
-      sun)   emulation=sun3 ;;
-    esac
-    ;;
-  *-*-vxworks)
-    obj_format=aout 
-    ;;
-  *-*-coff)
-    obj_format=coff
-    ;;
+			obj_format=coff
+			case ${target_vendor} in
+			  bull)  emulation=dpx2 ;;
+			  sun)   emulation=sun3 ;;
+			esac
+			;;
+  *-*-vxworks)		obj_format=aout ;;
+  *-*-coff)		obj_format=coff ;;
   *-*-elf | *-*-solaris*)
-    case ${bfd_gas} in
-      yes) ;;
-      *)
-	echo "*** warning: gas ${target_os} configuration implies" 1>&2
-	echo "             (unsupported) --with-bfd-assembler option" 1>&2
-	bfd_gas=yes
-	;;
-    esac
-    obj_format=elf
-    ;;
-  *-*-vms)
-    obj_format=vms
-    ;;
+	echo '*** Warning: GAS support for ELF format is incomplete' 1>&2
+			obj_format=elf ;;
+  *-*-vms)		obj_format=vms ;;
 esac
 
 # assign floating point type
 case ${target_cpu} in
-  ns32k) atof=ns32k ;;
-  vax)	 atof=vax ;;
-  tahoe) atof=tahoe ;;
-  *)	 atof=ieee ;;
+  ns32k | vax | tahoe )	atof=${target_cpu} ;;
+  *)			atof=ieee ;;
 esac
 
+if [ ! -r ${srcdir}/config/tc-${cpu_type}.c ]; then
+  echo '*** GAS does not support target CPU' ${cpu_type}		1>&2
+  exit 1
+fi
+
+if [ x${obj_format} = x ]; then
+  echo "*** GAS doesn't know what format to use for target" ${target}	1>&2
+  exit 1
+fi
+
+if [ ! -r ${srcdir}/config/obj-${obj_format}.c ]; then
+  echo '*** GAS does not have support for object file format' ${obj_format} 1>&2
+  exit 1
+fi
+
 # and target makefile frag
 
 target_makefile_frag=config/${gas_target}.mt
 
+case ${bfd_gas}-${obj_format} in
+  yes-coffbfd)	obj_format=coff ;;
+  no-coffbfd)	need_bfd=yes ;;
+  *-elf)	bfd_gas=yes ;;
+  *-ecoff)	bfd_gas=yes ;;
+  *)		;;
+esac
+
+case ${with_bfd_assembler} in
+  "")
+    # User specified nothing.
+    ;;
+  "${bfd_gas}")
+    # We didn't override user's choice.
+    ;;
+  no)
+    # ... but we overrode it.
+    echo '*** Use of BFD is required for ${target}; overriding config options'\
+		1>&2
+    ;;
+esac
+
 files="config/ho-${gas_host}.h config/tc-${cpu_type}.c \
 	config/tc-${cpu_type}.h config/te-${emulation}.h \
 	config/obj-${obj_format}.h config/obj-${obj_format}.c \