[pkg-gnupg-maint] Bug#822343: libgpg-error0_1.21-3: Breaks cmake, openssh, etc on hppa

John David Anglin dave.anglin at bell.net
Sun Apr 24 16:57:16 UTC 2016


It looks like this was introduced by the following change:

diff --git a/debian/patches/0006-fix-Solaris-and-HPPA-this-is-a-collection-of-upstrea.patch b/debian/patches/0006-fix-Solaris-and-HPPA-this-is-a-collection-of-upstrea.patch
new file mode 100644
index 0000000..54ae9a1
--- /dev/null
+++ b/debian/patches/0006-fix-Solaris-and-HPPA-this-is-a-collection-of-upstrea.patch
@@ -0,0 +1,193 @@
+From: NIIBE Yutaka <gniibe at fsij.org>
+Date: Fri, 26 Feb 2016 09:29:14 +0900
+Subject: fix Solaris and HPPA (this is a collection of upstream Solaris fixes)
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Add support for Solaris, fixing HPPA.
+
+* configure.ac (HAVE_GCC_ATTRIBUTE_ALIGNED): Remove.
+(LIB_SCHED_YIELD): New. Check sched_yield in -lrt.
+* src/gen-posix-lock-obj.c (USE_16BYTE_ALIGNMENT): Remove.
+(USE_DOUBLE_FOR_ALIGNMENT, USE_LONG_DOUBLE_FOR_ALIGNMENT): New.
+* src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h: Update.
+
+--
+
+Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
+
+Fix for Solaris.
+
+* src/gen-posix-lock-obj.c (USE_DOUBLE_FOR_ALIGNMENT): Check LP64.
+
+--
+
+Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
+
+This fixes commit 5168b97.
+
+For Solaris, add -lrt correctly.
+
+* configure.ac (LIB_SCHED_YIELD): Not avoiding defining LIB.
+
+--
+
+This fixes commit 5168b97 for Solaris linking issue. It tried to add
+-lrt for build on Solaris for gpg-error, but it wrongly avoids adding
+it also to LIB, which actually is needed.
+
+Reported-by: Tom G. Christensen <tgc at jupiterrise.com>
+
+Thanks also to Jörn Clausen, who submitted a report to our BTS.
+
+GnuPG-bug-id: 1671
+
+Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
+
+Fix detecting Solaris operating system.
+
+* src/gen-posix-lock-obj.c (USE_DOUBLE_FOR_ALIGNMENT): Check for
+the macro __sun.
+
+--
+Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
+
+This fixes commit 5168b97 and 34b0714.
+
+Thanks to Ibraheem Saleh and Thomas Klausner for testing.
+
+Thanks to Tom G. Christensen for suggesting the fix with the
+useful link: https://sourceforge.net/p/predef/wiki/Home/
+
+Thanks to Nelson H. F. Beebe to inform the tool:
+http://www.math.utah.edu/~beebe/cc-defs
+
+GnuPG-bug-id: 2144
+---
+ configure.ac | 38 ++++++++++--------------
+ src/gen-posix-lock-obj.c | 21 +++++++------
+ src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h | 2 +-
+ 3 files changed, 28 insertions(+), 33 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 2d27cc6..5d3c06c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -274,20 +274,6 @@ if test "$GCC" = yes; then
+ fi
+
+ #
+-# Check whether the compiler supports the GCC style aligned attribute
+-#
+-AC_CACHE_CHECK([whether the GCC style aligned attribute is supported],
+- [gcry_cv_gcc_attribute_aligned],
+- [gcry_cv_gcc_attribute_aligned=no
+- AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+- [[struct { int a; } foo __attribute__ ((aligned (16)));]])],
+- [gcry_cv_gcc_attribute_aligned=yes])])
+-if test "$gcry_cv_gcc_attribute_aligned" = "yes" ; then
+- AC_DEFINE(HAVE_GCC_ATTRIBUTE_ALIGNED,1,
+- [Defined if a GCC style "__attribute__ ((aligned (n))" is supported])
+-fi
+-
+-#
+ # Check for ELF visibility support.
+ #
+ AC_CACHE_CHECK(whether the visibility attribute is supported,
+@@ -416,6 +402,20 @@ else
+ fi
+ fi
+
++# Default value for GPG_ERROR_CONFIG_LIBS
++config_libs="-lgpg-error"
++
++#
++# Check for other libraries (now only for -lrt).
++#
++LIB_SCHED_YIELD=
++AC_SUBST([LIB_SCHED_YIELD])
++AC_SEARCH_LIBS([sched_yield], [rt posix4],
++ [if test "$ac_cv_search_sched_yield" != "none required"; then
++ LIB_SCHED_YIELD=$ac_cv_search_sched_yield
++ config_libs="$config_libs $LIB_SCHED_YIELD"
++ fi])
++
+ #
+ # Prepare building of estream
+ #
+@@ -424,7 +424,7 @@ estream_INIT
+ #
+ # Substitution used for gpg-error-config
+ #
+-GPG_ERROR_CONFIG_LIBS="-lgpg-error"
++GPG_ERROR_CONFIG_LIBS="$config_libs"
+ if test "x$LIBTHREAD" != x; then
+ GPG_ERROR_CONFIG_LIBS="${GPG_ERROR_CONFIG_LIBS} ${LIBTHREAD}"
+ fi
+@@ -544,11 +544,3 @@ echo "
+ Revision: mym4_revision (mym4_revision_dec)
+ Platform: $host$tmp
+ "
+-if test "$gcry_cv_gcc_attribute_aligned" != "yes" ; then
+-cat <<G10EOF
+-***
+-*** Please note that your compiler does not support the GCC style
+-*** aligned attribute. Using this software may evoke bus errors.
+-***
+-G10EOF
+-fi
+diff --git a/src/gen-posix-lock-obj.c b/src/gen-posix-lock-obj.c
+index 595d379..5564301 100644
+--- a/src/gen-posix-lock-obj.c
++++ b/src/gen-posix-lock-obj.c
+@@ -43,15 +43,16 @@
+ #endif
+
+ /* Special requirements for certain platforms. */
+-#if defined(__hppa__) && defined(__linux__)
+-# define USE_16BYTE_ALIGNMENT 1
++#if defined(__sun) && !defined (__LP64__) && !defined(_LP64)
++/* Solaris on 32-bit architecture. */
++# define USE_DOUBLE_FOR_ALIGNMENT 1
+ #else
+-# define USE_16BYTE_ALIGNMENT 0
++# define USE_DOUBLE_FOR_ALIGNMENT 0
+ #endif
+-
+-
+-#if USE_16BYTE_ALIGNMENT && !HAVE_GCC_ATTRIBUTE_ALIGNED
+-# error compiler is not able to enforce a 16 byte alignment
++#if defined(__hppa__)
++# define USE_LONG_DOUBLE_FOR_ALIGNMENT 1
++#else
++# define USE_LONG_DOUBLE_FOR_ALIGNMENT 0
+ #endif
+
+ #ifdef USE_POSIX_THREADS
+@@ -116,8 +117,10 @@ main (void)
+ "\n"
+ "#define GPGRT_LOCK_INITIALIZER {%d,{{",
+ SIZEOF_PTHREAD_MUTEX_T,
+-# if USE_16BYTE_ALIGNMENT
+- " int _x16_align __attribute__ ((aligned (16)));\n",
++# if USE_DOUBLE_FOR_ALIGNMENT
++ " double _xd_align;\n",
++# elif USE_LONG_DOUBLE_FOR_ALIGNMENT
++ " long double _xld_align;\n",
+ # else
+ "",
+ # endif
+diff --git a/src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h b/src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h
+index b57bb76..3682577 100644
+--- a/src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h
++++ b/src/syscfg/lock-obj-pub.hppa-unknown-linux-gnu.h
+@@ -7,7 +7,7 @@ typedef struct
+ long _vers;
+ union {
+ volatile char _priv[48];
+- int _x16_align __attribute__ ((aligned (16)));
++ long double _xld_align;
+ long _x_align;
+ long *_xp_align;
+ } u;

On hppa-linux, double and long double are the same and thus need 8-byte alignment.  The only object that needs
16-byte alignment is the target of ldcw instruction.

Dave
--
John David Anglin	dave.anglin at bell.net



More information about the pkg-gnupg-maint mailing list