This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] fix run-iconv-test.sh


The implementation of run-iconv-test.sh will run icong_prov specifying a
GCONV_PATH for the current glibc build. Then run the cmp (from the base
install) to check the results.

This can be a problem because currently cmp will run with the same
GCONV_PATH as iconv_prog and cmp does try to load ISO8859-1.so. Since
GCONV_PATH is pointing into the current build it will try to load from there.

This really gets sticky when there is a ABI or symbol version difference
between the glibc build and the base install. For example if there are
new relocations which ld.so from the base install does not understand
(i.e. the new relocations associated with -msecure-plt). This will cause
cmp to fail (segfault in the loader associated with cmp) and all the
iconv-tests to fail.

The attached patch resolves this by temporarily resetting GCONV_PATH for
cmp commands.


2006-07-13  Steven Munroe  <sjmunroe@us.ibm.com>

	* iconvdata/run-iconv-test.sh: Insure GCONV_PATH is set for iconv_prog
	and not set for the cmp command.

diff -urN libc24-cvstip-20060608/iconvdata/run-iconv-test.sh libc24/iconvdata/run-iconv-test.sh
--- libc24-cvstip-20060608/iconvdata/run-iconv-test.sh	2005-09-29 16:43:12.000000000 -0500
+++ libc24/iconvdata/run-iconv-test.sh	2006-07-13 14:23:41.385392446 -0500
@@ -66,7 +66,7 @@
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
 	if test -s testdata/$from..$t; then
-	  cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
+	  GCONV_PATH= cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
 	    { echo "/FAILED"; failed=1; continue; }
 	  echo $ac_n "/OK$ac_c"
 	fi
@@ -75,8 +75,11 @@
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
-	test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
-	  { echo "/FAILED"; failed=1; continue; }
+        { GCONV_PATH= 
+	  test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
+	    { echo "/FAILED"; failed=1; GCONV_PATH=$codir/iconvdata; continue; }
+          GCONV_PATH=$codir/iconvdata
+        }
 	echo "/OK"
 	rm -f $temp1 $temp2
       fi
@@ -91,7 +94,7 @@
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
-	cmp testdata/suntzus $temp1 ||
+        GCONV_PATH= cmp testdata/suntzus $temp1 ||
 	  { echo "/FAILED"; failed=1; continue; }
 	echo "/OK"
       fi
@@ -110,7 +113,7 @@
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
 	if test -s testdata/$from..$t; then
-	  cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
+	  GCONV_PATH= cmp $temp1 testdata/$from..$t > /dev/null 2>&1 ||
 	    { echo "/FAILED"; failed=1; continue; }
 	  echo $ac_n "/OK$ac_c"
 	fi
@@ -120,8 +123,11 @@
 	  { if test $? -gt 128; then exit 1; fi
 	    echo "FAILED"; failed=1; continue; }
 	echo $ac_n "OK$ac_c"
-	test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
-	  { echo "/FAILED"; failed=1; continue; }
+        { GCONV_PATH= 
+	  test -s $temp1 && cmp testdata/$from $temp2 > /dev/null 2>&1 ||
+	    { echo "/FAILED"; failed=1; GCONV_PATH=$codir/iconvdata; continue; }
+          GCONV_PATH=$codir/iconvdata
+        }
 	echo "/OK"
 	rm -f $temp1 $temp2
       fi
@@ -135,7 +141,7 @@
       { if test $? -gt 128; then exit 1; fi
 	echo "FAILED"; failed=1; continue; }
     echo $ac_n "OK$ac_c"
-    cmp testdata/suntzus $temp1 ||
+    GCONV_PATH= cmp testdata/suntzus $temp1 ||
       { echo "/FAILED"; failed=1; continue; }
     echo "/OK"
   fi
@@ -153,32 +159,35 @@
   # Test conversion to the endianness dependent encoding.
   echo $ac_n "test encoder: $utf8 -> $from $ac_c"
   $PROG -f $utf8 -t $from < testdata/${filename}..${utf8} > $temp1
-  cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 ||
-  cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 ||
-    { echo "/FAILED"; failed=1; continue; }
+  { GCONV_PATH= 
+    cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 ||
+    cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 ||
+    { echo "/FAILED"; failed=1; GCONV_PATH=$codir/iconvdata; continue; }
+    GCONV_PATH=$codir/iconvdata
+  }
   echo "OK"
 
   # Test conversion from the endianness dependent encoding.
   echo $ac_n "test decoder: $from -> $utf8 $ac_c"
   $PROG -f $from -t $utf8 < testdata/${filename}..${from}.BE > $temp1
-  cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 ||
+  GCONV_PATH= cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 ||
     { echo "/FAILED"; failed=1; continue; }
   $PROG -f $from -t $utf8 < testdata/${filename}..${from}.LE > $temp1
-  cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 ||
+  GCONV_PATH= cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 ||
     { echo "/FAILED"; failed=1; continue; }
   echo "OK"
 
   # Test byte swapping behaviour.
   echo $ac_n "test non-BOM: ${from}BE -> ${from}LE $ac_c"
   $PROG -f ${from}BE -t ${from}LE < testdata/${filename}..${from}.BE > $temp1
-  cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 ||
+  GCONV_PATH= cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 ||
     { echo "/FAILED"; failed=1; continue; }
   echo "OK"
 
   # Test byte swapping behaviour.
   echo $ac_n "test non-BOM: ${from}LE -> ${from}BE $ac_c"
   $PROG -f ${from}LE -t ${from}BE < testdata/${filename}..${from}.LE > $temp1
-  cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 ||
+  GCONV_PATH= cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 ||
     { echo "/FAILED"; failed=1; continue; }
   echo "OK"
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]