[GOLD] icf_safe_so_test
authorAlan Modra <amodra@gmail.com>
Sat, 8 Dec 2018 02:52:51 +0000 (13:22 +1030)
committerAlan Modra <amodra@gmail.com>
Sat, 8 Dec 2018 02:54:14 +0000 (13:24 +1030)
PR 21128
* testsuite/icf_safe_so_test.sh (check_fold): Rewrite to check
multiple symbols at once.
(arch_specific_safe_fold): Likewise, and call with the four foo*
symbols expected to fold.

gold/ChangeLog
gold/testsuite/icf_safe_so_test.sh

index 5c5bca2..b16c728 100644 (file)
@@ -1,3 +1,11 @@
+2018-12-08  Alan Modra  <amodra@gmail.com>
+
+       PR 21128
+       * testsuite/icf_safe_so_test.sh (check_fold): Rewrite to check
+       multiple symbols at once.
+       (arch_specific_safe_fold): Likewise, and call with the four foo*
+       symbols expected to fold.
+
 2018-12-06  H.J. Lu  <hongjiu.lu@intel.com>
 
        * archive.cc (Archive::get_elf_object_for_member): Also print
index 28600be..b1450b4 100755 (executable)
@@ -59,45 +59,51 @@ check_nofold()
 
 check_fold()
 {
-    if ! is_symbol_present $1 $2
-    then
-      return 0
-    fi
-
-    if ! is_symbol_present $1 $3
-    then
-      return 0
-    fi
-
+    map=$1
+    shift
+    num_syms=$#
+    save_IFS="$IFS"
+    IFS='|'
+    sym_patt="$*"
+    IFS="$save_IFS"
     awk "
 BEGIN { discard = 0; }
 /^Discarded input/ { discard = 1; }
 /^Memory map/ { discard = 0; }
-/.*\\.text\\..*($2|$3).*/ { act[discard] = act[discard] \" \" \$0; }
+/.*\\.text\\..*($sym_patt).*/ { act[discard] = act[discard] \" \" \$0; cnt[discard] = cnt[discard] + 1 }
 END {
-      printf \"kept\" act[0] \"\\nfolded\" act[1] \"\\n\";
-      if (length(act[0]) == 0 || length(act[1]) == 0)
+      printf \"kept\" act[0] \"\\nfolded\" act[1] \"\\n\";
+      if (cnt[0] != 1 || cnt[1] != $num_syms - 1)
        {
-         printf \"Safe Identical Code Folding did not fold $2 and $3\\n\"
+         printf \"Safe Identical Code Folding failed\\n\"
          exit 1;
        }
-    }" $4
+    }" $map
 }
 
 arch_specific_safe_fold()
 {
     if grep -q -e "Intel 80386" -e "ARM" -e "PowerPC" $1;
     then
-      check_fold $2 $4 $5 $3
+       shift
+       shift
+       #echo check_fold $*
+       check_fold $*
     else
-      check_nofold $2 $4 $5
+       shift
+       nm_output=$1
+       shift
+       shift
+       while test $# -gt 1; do
+           sym1=$1
+           shift
+           for sym2 in $*; do
+               #echo check_nofold $nm_output $sym1 $sym2
+               check_nofold $nm_output $sym1 $sym2
+           done
+       done
     fi
 }
 
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_prot" "foo_hidden"
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_prot" "foo_internal"
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_prot" "foo_static"
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_hidden" "foo_internal"
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_hidden" "foo_static"
-arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map "foo_internal" "foo_static"
-check_nofold icf_safe_so_test_1.stdout "foo_glob" "bar_glob"
+arch_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout icf_safe_so_test.map foo_prot foo_hidden foo_internal foo_static
+check_nofold icf_safe_so_test_1.stdout foo_glob bar_glob