A canonical form is defined as one that maps to itself. I decided to check whether the config.sub test suite's canonical configurations actually did, and many of them did not, or weren't even accepted at all!

I checked this by extending the test suite with a new function, which is the most important part of this patch. I also hurriedly fixed config.sub so that it passed the improved testsuite. Those fixes however should be checked over as I wasn't always sure on the best way to fix things (e.g. what vendors to allow)

Ben, you might notice that many of these fixes overlap with my deduplication patch. That is because the duplication necessary frequently is forgotten, leading to bugs. I point this out to show how deduplication is not only a good idea for cleanliness, but also for correctness. Let's try to land this (with improve fixed) before that, however, as I'll be able to redo the deduplication patch with higher quality way once this is dealt with.

Thanks,

John
From f9f647479997cdb1fd96f0e9c39e6c2e24943151 Mon Sep 17 00:00:00 2001
Message-Id: 
<f9f647479997cdb1fd96f0e9c39e6c2e24943151.1532490195.git.John.Ericson@Obsidian.Systems>
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Tue, 24 Jul 2018 23:18:35 -0400
Subject: [PATCH]     * config.sub: Make idemopotent     *
 testsuite/config-sub.sh: Add ideompotency tests
To: config-patches@gnu.org

---
 ChangeLog               |  5 ++++
 config.sub              | 65 ++++++++++++++++++++++++-----------------
 testsuite/config-sub.sh | 20 ++++++++++++-
 3 files changed, 62 insertions(+), 28 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d90aa1e..a96c520 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-07-25  John Ericson  <john.ericson@obsidian.systems>
+
+       * config.sub: Make idemopotent
+       * testsuite/config-sub.sh: Add ideompotency tests
+
 2018-07-25  John Ericson  <john.ericson@obsidian.systems>
 
        * config.sub: Fix some more i386-pc-* defaults.
diff --git a/config.sub b/config.sub
index 52eb02e..7300b4f 100755
--- a/config.sub
+++ b/config.sub
@@ -569,12 +569,14 @@ case $basic_machine in
        1750a | 580 \
        | a29k \
        | aarch64 | aarch64_be \
+       | abacus \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | 
alpha64pca5[67] \
        | am33_2.0 \
        | arc | arceb \
        | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | 
armv[78][arm] \
        | avr | avr32 \
+       | asmjs \
        | ba \
        | be32 | be64 \
        | bfin \
@@ -654,13 +656,16 @@ case $basic_machine in
        leon|leon[3-9])
                basic_machine=sparc-$basic_machine
                ;;
+       m6811-* | m68hc11-* | m6812-* | m68hc12-* | m68hcs12x-* | nvptx-* | 
picochip-*)
+               os=${os:-none}
+               ;;
        m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
                basic_machine=$basic_machine-unknown
                os=${os:-none}
                ;;
        m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
                ;;
-       m9s12z | m68hcs12z | hcs12z | s12z)
+       m9s12z | m68hcs12z | hcs12z | s12z | s12z-*)
                basic_machine=s12z-unknown
                os=${os:-none}
                ;;
@@ -670,7 +675,10 @@ case $basic_machine in
        strongarm | thumb | xscale)
                basic_machine=arm-unknown
                ;;
-       xgate)
+       xgate-*)
+               os=${os:-none}
+               ;;
+       xgate | xgate-*)
                basic_machine=$basic_machine-unknown
                os=${os:-none}
                ;;
@@ -689,22 +697,26 @@ case $basic_machine in
          basic_machine=$basic_machine-pc
          ;;
        # Recognize the basic CPU types with company name.
-       580-* \
+       1750a-* | 580-* \
        | a29k-* \
        | aarch64-* | aarch64_be-* \
+       | abacus-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* \
+       | am33_2.0-* \
+       | arc-* | arceb-* \
+       | arm-*  | arm[lb]e-* | arme[lb]-* | armv*-* \
        | avr-* | avr32-* \
+       | asmjs-* \
        | ba-* \
        | be32-* | be64-* \
        | bfin-* | bs2000-* \
        | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | e2k-* | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | d10v-* | d30v-* | dlx-* | dsp16xx-* \
+       | e2k-* | elxsi-* | epiphany-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | ft32-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
        | hexagon-* \
@@ -714,8 +726,8 @@ case $basic_machine in
        | le32-* | le64-* \
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | m5200 | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* | 
v70 | w65 \
+       | m88110-* | m88k-* | maxq-* | mb-* | mcore-* | mep-* | metag-* \
        | microblaze-* | microblazeel-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
@@ -738,7 +750,7 @@ case $basic_machine in
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
        | mipsr5900-* | mipsr5900el-* \
        | mipstx39-* | mipstx39el-* \
-       | mmix-* \
+       | mn10200-* | mn10300-* \
        | moxie-* \
        | mt-* \
        | msp430-* \
@@ -748,31 +760,33 @@ case $basic_machine in
        | none-* | np1-* | ns16k-* | ns32k-* \
        | open8-* \
        | or1k*-* \
+       | or32-* \
        | orion-* \
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
        | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pru-* \
        | pyramid-* \
        | riscv-* | riscv32-* | riscv64-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* 
| sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | rl78-* | rs6000-* | rx-* \
+       | score-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]ae[lb]-* | sh[23]e-* | 
she[lb]-* | sh[lb]e-* \
+       | sh[1234]e[lb]-* |  sh[1234][lb]e-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | 
sparclet-* \
        | sparclite-* \
        | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
+       | spu-* \
        | tahoe-* \
        | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
        | tron-* \
        | ubicom32-* \
        | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
        | vax-* \
        | visium-* \
        | wasm32-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
+       | x86-* | x86_64-* | xc16x-* \
        | xstormy16-* | xtensa*-* \
        | ymp-* \
+       | we32k-* \
        | z8k-* | z80-*)
                ;;
        # Recognize the basic CPU types without company name, with glob match.
@@ -787,10 +801,7 @@ case $basic_machine in
        3b*)
                basic_machine=we32k-att
                ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       alliant | fx80)
+       alliant | fx80 | fx80-alliant)
                basic_machine=fx80-alliant
                ;;
        altos | altos3068)
@@ -805,9 +816,6 @@ case $basic_machine in
        amiga | amiga-*)
                basic_machine=m68k-unknown
                ;;
-       asmjs)
-               basic_machine=asmjs-unknown
-               ;;
        blackfin-*)
                basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
                os=linux
@@ -1151,7 +1159,7 @@ case $basic_machine in
        sequent)
                basic_machine=i386-sequent
                ;;
-       sh5el)
+       sh5el | sh5le-unknown)
                basic_machine=sh5le-unknown
                ;;
        simso-wrs)
@@ -1179,6 +1187,9 @@ case $basic_machine in
        sun386 | sun386i | roadrunner)
                basic_machine=i386-sun
                ;;
+       tile*-*)
+               os=linux-gnu
+               ;;
        tile*)
                basic_machine=$basic_machine-unknown
                os=linux-gnu
@@ -1231,7 +1242,7 @@ case $basic_machine in
        romp)
                basic_machine=romp-ibm
                ;;
-       mmix)
+       mmix | mmix-knuth)
                basic_machine=mmix-knuth
                ;;
        rs6000)
@@ -1354,7 +1365,7 @@ case $os in
             | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
             | aos* | aros* | cloudabi* | sortix* \
             | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
-            | clix* | riscos* | uniplus* | iris* | rtu* | xenix* \
+            | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
             | knetbsd* | mirbsd* | netbsd* \
             | bitrig* | openbsd* | solidbsd* | libertybsd* \
             | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
diff --git a/testsuite/config-sub.sh b/testsuite/config-sub.sh
index c5b09f6..6d6dc79 100644
--- a/testsuite/config-sub.sh
+++ b/testsuite/config-sub.sh
@@ -9,11 +9,13 @@
 # the alias expands to the expected canonical triplet.
 
 set -eu
+shopt -s lastpipe
 verbose=false
 
 run_config_sub()
 {
     rc=0
+    echo "Checking mappings..."
     while read -r alias canonical ; do
        output=$(sh -eu ../config.sub "$alias")
        if test "$output" != "$canonical" ; then
@@ -26,7 +28,23 @@ run_config_sub()
     return $rc
 }
 
-if run_config_sub ; then
+run_config_sub_ideompotent()
+{
+    rc=0
+    echo "Checking idempotency..."
+    sed -r 's/\t+/\t/g' < config-sub.data | cut -f 2 | uniq | while read -r 
canonical ; do
+       output=$(sh -eu ../config.sub "$canonical")
+       if test "$output" != "$canonical" ; then
+           echo "FAIL: $canonical -> $output, but $canonical should map to 
itself"
+           rc=1
+       else
+           $verbose && echo "PASS: $cannonical"
+       fi
+    done
+    return $rc
+}
+
+if run_config_sub && run_config_sub_ideompotent; then
     numtests=$(wc -l config-sub.data | cut -d' ' -f1)
     $verbose || echo "PASS: config.sub checks ($numtests tests)"
 else
-- 
2.17.1

_______________________________________________
config-patches mailing list
config-patches@gnu.org
https://lists.gnu.org/mailman/listinfo/config-patches

Reply via email to