[git] GCRYPT - branch, master, updated. libgcrypt-1.6.0-18-g4337689

by Jussi Kivilinna cvs at cvs.gnupg.org
Sun Jan 12 10:08:14 CET 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU crypto library".

The branch, master has been updated
       via  43376891c01f4aff1fbfb23beafebb5adfd0868c (commit)
      from  b0ac1f9b143aa15855914ba93fef900288d45c9c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 43376891c01f4aff1fbfb23beafebb5adfd0868c
Author: Jussi Kivilinna <jussi.kivilinna at iki.fi>
Date:   Sun Jan 12 10:53:47 2014 +0200

    Fix constant division for AMD64 assembly on Solaris/x86
    
    * configure.ac (gcry_cv_gcc_as_const_division_ok): Add new check for
    constant division in assembly and test for "-Wa,--divide" workaround.
    (gcry_cv_gcc_amd64_platform_as_ok): Check for also constant division.
    --
    
    Appearantly on Solaris/x86 '/' character is treated as begining of line
    comment by GNU as. This causes problems when compiling SHA-1 SSSE3
    implementation:
    
    On 02.01.2014 16:26, Richard PALO wrote:
    >> COLLECT_GCC_OPTIONS='-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-I' '../src' '-I' '/var/tmp/pkgsrc/security/libgcrypt/work/.buildlink/include' '-I' '/var/tmp/pkgsrc/security/libgcrypt/work/.buildlink/include/gettext' '-D' '_REENTRANT' '-O2' '-MT' 'sha1-ssse3-amd64.lo' '-MD' '-MP' '-MF' '.deps/sha1-ssse3-amd64.Tpo' '-c' '-fPIC' '-D' 'PIC' '-o' '.libs/sha1-ssse3-amd64.o' '-v' '-mtune=generic' '-march=x86-64'
    >>  /usr/gnu/bin/as -v -I . -I .. -I ../src -I /var/tmp/pkgsrc/security/libgcrypt/work/.buildlink/include -I /var/tmp/pkgsrc/security/libgcrypt/work/.buildlink/include/gettext -V -Qy -s --64 -o .libs/sha1-ssse3-amd64.o /var/tmp//ccAxWPXX.s
    >> GNU assembler version 2.23.1 (i386-pc-solaris2.11) using BFD version (GNU Binutils) 2.23.1
    >> /var/tmp//ccAxWPXX.s: Assembler messages:
    >> /var/tmp//ccAxWPXX.s:34: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:38: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:42: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:46: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:54: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:58: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:62: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:66: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:70: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:74: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:78: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:82: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:86: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:90: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:94: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:98: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:102: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:106: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:110: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:114: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:119: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:123: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:127: Error: unbalanced parenthesis in operand 1.
    >> /var/tmp//ccAxWPXX.s:132: Error: unbalanced parenthesis in operand 1.
    >
    >
    > apparently the paddd code, such as
    >     `paddd (.LK_XMM + ((i)/20)*16) RIP, tmp0;`
    > isn't digested well, appended is the generated assembler code.
    
    On 02.01.2014 17:41, Richard PALO wrote:
    > Hi again, after finding the following:
    > https://sourceware.org/bugzilla/show_bug.cgi?id=4572
    >
    > I tried using '-Wa,--divide' and that seemed to workaround the problem...
    >
    > perhaps the code, or at least the Makefile could be adapted accordingly?
    
    Patch adds detection of this feature and attempts to workaround issue with by
    adding "-Wa,--divide" to CPPFLAGS. If workaround does not work (old GAS on
    Solaris/x86), we'll disable AMD64 assembly.
    
    [v3]:
     - Update CPPFLAGS after testing instead of CFLAGS.
    
    Reported-and-tested-by: Richard PALO <richard.palo at free.fr>
    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>

diff --git a/configure.ac b/configure.ac
index 05cdaf8..fac5f7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1079,11 +1079,42 @@ fi
 
 
 #
+# Check whether GCC assembler needs "-Wa,--divide" to correctly handle
+# constant division
+#
+if test $amd64_as_feature_detection = yes; then
+  AC_CACHE_CHECK([whether GCC assembler handles division correctly],
+       [gcry_cv_gcc_as_const_division_ok],
+       [gcry_cv_gcc_as_const_division_ok=no
+        AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+          [[__asm__("xorl \$(123456789/12345678), %ebp;\n\t");]])],
+          [gcry_cv_gcc_as_const_division_ok=yes])])
+  if test "$gcry_cv_gcc_as_const_division_ok" = "no" ; then
+    #
+    # Add '-Wa,--divide' to CPPFLAGS and try check again.
+    #
+    _gcc_cppflags_save="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS -Wa,--divide"
+    AC_CACHE_CHECK([whether GCC assembler handles division correctly with "-Wa,--divide"],
+         [gcry_cv_gcc_as_const_division_with_wadivide_ok],
+         [gcry_cv_gcc_as_const_division_with_wadivide_ok=no
+          AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+            [[__asm__("xorl \$(123456789/12345678), %ebp;\n\t");]])],
+            [gcry_cv_gcc_as_const_division_with_wadivide_ok=yes])])
+    if test "$gcry_cv_gcc_as_const_division_ok_with_wadivide_ok" = "no" ; then
+      # '-Wa,--divide' did not work, restore old flags.
+      CPPFLAGS="$_gcc_cppflags_save"
+    fi
+  fi
+fi
+
+
+#
 # Check whether GCC assembler supports features needed for our amd64
 # implementations
 #
 if test $amd64_as_feature_detection = yes; then
-    AC_CACHE_CHECK([whether GCC assembler is compatible for amd64 assembly implementations],
+  AC_CACHE_CHECK([whether GCC assembler is compatible for amd64 assembly implementations],
        [gcry_cv_gcc_amd64_platform_as_ok],
        [gcry_cv_gcc_amd64_platform_as_ok=no
         AC_COMPILE_IFELSE([AC_LANG_SOURCE(
@@ -1096,6 +1127,11 @@ if test $amd64_as_feature_detection = yes; then
 		"asmfunc:\n\t"
                 ".size asmfunc,.-asmfunc;\n\t"
                 ".type asmfunc, at function;\n\t"
+		/* Test if assembler allows use of '/' for constant division
+		 * (Solaris/x86 issue). If previous constant division check
+		 * and "-Wa,--divide" workaround failed, this causes assembly
+		 * to be disable on this machine. */
+		"xorl \$(123456789/12345678), %ebp;\n\t"
             );]])],
           [gcry_cv_gcc_amd64_platform_as_ok=yes])])
   if test "$gcry_cv_gcc_amd64_platform_as_ok" = "yes" ; then

-----------------------------------------------------------------------

Summary of changes:
 configure.ac |   38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)


hooks/post-receive
-- 
The GNU crypto library
http://git.gnupg.org


_______________________________________________
Gnupg-commits mailing list
Gnupg-commits at gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-commits




More information about the Gcrypt-devel mailing list