The attached patch extends config.guess to distinguish the old ARM ABI
from EABI and EABI with hardfloat on NetBSD, as NetBSD uses on ~all
modern ARM platforms, and extends config.sub to recognize it.
I extended config-sub.data with examples of platform triples generated
by config.guess, and of platform triples used by NetBSD's
cross-compiler toolchain and pkgsrc (which omit the release number and
say `ARCH--netbsd...' instead of `ARCH-unknown-netbsd...').
I would have extended config-guess.data, but it depends on the
hw.machine_arch sysctl, which config-guess.sh does not have a way to
furnish. Incidentally, on NetBSD, `uname -p' has been the same as
`sysctl -n hw.machine_arch' since the former was introduced in 1998,
so I'm not sure why config.guess bothers with sysctl. (The
hw.machine_arch sysctl was introduced in 1997.)
So I have also attached a collection of test data for NetBSD and a
little script to run it: `./nbsd.sh < nbsd.data' (provided
config.guess is patched to say `sysctl' instead of `/sbin/sysctl').
>From 46afec7f708db17a93290598d9dc0773f53a215d Mon Sep 17 00:00:00 2001
From: Taylor R Campbell <[email protected]>
Date: Sun, 15 Feb 2015 19:18:26 +0000
Subject: [PATCH] Recognize NetBSD ARM EABI platforms.
---
config.guess | 25 ++++++++++++++++++++-----
config.sub | 2 +-
testsuite/config-sub.data | 24 ++++++++++++++++++++++++
3 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/config.guess b/config.guess
index dbfb978..c6be4d0 100755
--- a/config.guess
+++ b/config.guess
@@ -2,7 +2,7 @@
# Attempt to guess a canonical system name.
# Copyright 1992-2015 Free Software Foundation, Inc.
-timestamp='2015-01-01'
+timestamp='2015-02-15'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -168,20 +168,28 @@ case
"${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
sysctl="sysctl -n hw.machine_arch"
- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ UNAME_MACHINE_ARCH=`($sysctl 2>/dev/null || \
+ $sysctl 2>/dev/null || echo unknown)`
case "${UNAME_MACHINE_ARCH}" in
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
sh3eb) machine=sh-unknown ;;
sh5el) machine=sh5le-unknown ;;
+ earmv*eb)
+ sed='s,^e\(armv[0-9]\).*$,\1,'
+ machine=`echo ${UNAME_MACHINE_ARCH} | sed -e "$sed"`eb-unknown
+ ;;
+ earmv*)
+ sed='s,^e\(armv[0-9]\).*$,\1,'
+ machine=`echo ${UNAME_MACHINE_ARCH} | sed -e "$sed"`-unknown
+ ;;
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently, or will in the future.
case "${UNAME_MACHINE_ARCH}" in
- arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
@@ -197,6 +205,13 @@ case
"${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
os=netbsd
;;
esac
+ # Determine ABI tags.
+ case "${UNAME_MACHINE_ARCH}" in
+ earm*)
+ sed='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$sed"`
+ ;;
+ esac
# The OS release
# Debian GNU/NetBSD machines have a different userland, and
# thus, need a distinct triplet. However, they do not need
@@ -213,7 +228,7 @@ case
"${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
+ echo "${machine}-${os}${release}${abi}"
exit ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
diff --git a/config.sub b/config.sub
index 6d2e94c..20ac69f 100755
--- a/config.sub
+++ b/config.sub
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* |
kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
diff --git a/testsuite/config-sub.data b/testsuite/config-sub.data
index 5831954..43bfd8e 100644
--- a/testsuite/config-sub.data
+++ b/testsuite/config-sub.data
@@ -11,6 +11,7 @@ amd64-kfreebsd5.4-gnu x86_64-pc-kfreebsd5.4-gnu
amd64-unknown-freebsd5.2 x86_64-unknown-freebsd5.2
arceb-linux arceb-unknown-linux-gnu
arc-linux arc-unknown-linux-gnu
+arm--netbsdelf arm--netbsdelf
arm-cegcc arm-unknown-cegcc
arm-coff arm-unknown-coff
arm-elf arm-unknown-elf
@@ -18,9 +19,32 @@ arm-linux-androideabi
arm-unknown-linux-androideabi
arm-mingw32ce arm-unknown-mingw32ce
arm-riscos arm-unknown-riscos
arm-tirtos arm-unknown-tirtos
+arm-unknown-netbsdelf7.0 arm-unknown-netbsdelf7.0
arm-unknown-riscos arm-unknown-riscos
+armeb--netbsdelf armeb--netbsdelf
+armeb-unknown-netbsdelf7.0 armeb-unknown-netbsdelf7.0
+armv6--netbsdelf-eabi armv6--netbsdelf-eabi
+armv6--netbsdelf-eabihf armv6--netbsdelf-eabihf
armv6-linux-gnu armv6-unknown-linux-gnu
+armv6-unknown-netbsdelf7.0 armv6-unknown-netbsdelf7.0
+armv6-unknown-netbsdelf7.0-eabi armv6-unknown-netbsdelf7.0-eabi
+armv6-unknown-netbsdelf7.0-eabihf armv6-unknown-netbsdelf7.0-eabihf
+armv6eb--netbsdelf-eabi armv6eb--netbsdelf-eabi
+armv6eb--netbsdelf-eabihf armv6eb--netbsdelf-eabihf
+armv6eb-unknown-netbsdelf7.0 armv6eb-unknown-netbsdelf7.0
+armv6eb-unknown-netbsdelf7.0-eabi armv6eb-unknown-netbsdelf7.0-eabi
+armv6eb-unknown-netbsdelf7.0-eabihf armv6eb-unknown-netbsdelf7.0-eabihf
+armv7--netbsdelf-eabi armv7--netbsdelf-eabi
+armv7--netbsdelf-eabihf armv7--netbsdelf-eabihf
+armv7-unknown-netbsdelf7.0 armv7-unknown-netbsdelf7.0
+armv7-unknown-netbsdelf7.0-eabi armv7-unknown-netbsdelf7.0-eabi
+armv7-unknown-netbsdelf7.0-eabihf armv7-unknown-netbsdelf7.0-eabihf
armv7a-linux-gnueabi armv7a-unknown-linux-gnueabi
+armv7eb--netbsdelf-eabi armv7eb--netbsdelf-eabi
+armv7eb--netbsdelf-eabihf armv7eb--netbsdelf-eabihf
+armv7eb-unknown-netbsdelf7.0 armv7eb-unknown-netbsdelf7.0
+armv7eb-unknown-netbsdelf7.0-eabi armv7eb-unknown-netbsdelf7.0-eabi
+armv7eb-unknown-netbsdelf7.0-eabihf armv7eb-unknown-netbsdelf7.0-eabihf
armv8b-linux-gnueabi armv8b-unknown-linux-gnueabi
aros i386-pc-aros
avr32 avr32-unknown-none
--
1.8.3.1
evbarm 7.0 NetBSD ignored arm arm-unknown-netbsdelf7.0
evbarm 7.0 NetBSD ignored armeb
armeb-unknown-netbsdelf7.0
evbarm 7.0 NetBSD ignored earmv6
armv6-unknown-netbsdelf7.0-eabi
evbarm 7.0 NetBSD ignored earmv6eb
armv6eb-unknown-netbsdelf7.0-eabi
evbarm 7.0 NetBSD ignored earmv6hf
armv6-unknown-netbsdelf7.0-eabihf
evbarm 7.0 NetBSD ignored earmv6hfeb
armv6eb-unknown-netbsdelf7.0-eabihf
evbarm 7.0 NetBSD ignored earmv7
armv7-unknown-netbsdelf7.0-eabi
evbarm 7.0 NetBSD ignored earmv7eb
armv7eb-unknown-netbsdelf7.0-eabi
evbarm 7.0 NetBSD ignored earmv7hf
armv7-unknown-netbsdelf7.0-eabihf
evbarm 7.0 NetBSD ignored earmv7hfeb
armv7eb-unknown-netbsdelf7.0-eabihf
#!/bin/sh
set -Ceu
PATH=`pwd`:$PATH
rc=0
while read m r s v p triplet; do
rm -f uname && cat >uname <<EOF
#!/bin/sh
[ \$# -ne 1 ] && exec sh "\$0" -s
[ \$1 = -m ] && echo '$m' && exit 0
[ \$1 = -r ] && echo '$r' && exit 0
[ \$1 = -s ] && echo '$s' && exit 0
[ \$1 = -v ] && echo '$v' && exit 0
[ \$1 = -p ] && echo '$p' && exit 0
EOF
rm -f sysctl && cat >sysctl <<EOF
#!/bin/sh
[ \$# -ne 2 ] && exit 1
[ \$1 = -n -a \$2 = hw.machine_arch ] && echo '$p' && exit 0
exit 1
EOF
chmod +x uname sysctl
if ! output=`../config.guess 2>>/dev/null`; then
echo "FAIL: unable to guess $m:$r:$s:$v:$p"
rc=1
continue
fi
if [ "$output" != "$triplet" ]; then
echo "FAIL: $output (expected $triplet)"
rc=1
continue
fi
done
exit $rc
_______________________________________________
config-patches mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/config-patches