On Sat, 30 Nov 2019 01:10:56 -0800
manp...@gmail.com wrote:

> Hi OpenBSD ports maintainers,
> 
> I'm having trouble building security/libnettle on mips64el/loongson
> which is caused by missing symbol of "__builtin_bswap64" when linking.
> It looks like this symbol is introduced since GCC 4.3[1], while mips64el
> ships with GCC 4.2.1.  It's interesting because I can compile with the
> symbol but cannot link.  Would like to hear from the ports maintainers'
> opinion on how to solve this issue?

Bad luck!  libnettle uses __builtin_bswap64 only on little-endian
platforms.  My big-endian powerpc/macppc also uses base-gcc 4.2.1 but
can use the powerpc snapshot package of libnettle.

The configure test for __builtin_bswap64 is wrong.  It is a compile
test, but you got a link error, not a compile error.  Here is a diff
to do a link test.  On my powerpc with base-gcc, the compile test
passed but the link test fails.  The regression tests look good:
"make test" reports "All 98 tests passed", "All 3 tests passed".

For big endian, the test for __builtin_bswap64 should have no effect.
For little endian, the failing test should disable a special case for
block_size == 16 in WRKSRC/ctr.c ctr_crypt().

Does this diff fix the problem on mips64el/longsoon?

Index: Makefile
===================================================================
RCS file: /cvs/ports/security/libnettle/Makefile,v
retrieving revision 1.24
diff -u -p -r1.24 Makefile
--- Makefile    29 Jun 2019 22:26:25 -0000      1.24
+++ Makefile    30 Nov 2019 20:38:46 -0000
@@ -4,6 +4,7 @@ COMMENT=                cryptographic library
 
 DISTNAME=              nettle-3.5.1
 PKGNAME=               lib${DISTNAME}
+REVISION=              0
 
 SHARED_LIBS +=  hogweed                   3.0 # 6.5
 SHARED_LIBS +=  nettle                    5.0 # 4.5
Index: patches/patch-configure
===================================================================
RCS file: /cvs/ports/security/libnettle/patches/patch-configure,v
retrieving revision 1.8
diff -u -p -r1.8 patch-configure
--- patches/patch-configure     29 Jun 2019 22:26:25 -0000      1.8
+++ patches/patch-configure     30 Nov 2019 20:38:46 -0000
@@ -1,5 +1,8 @@
 $OpenBSD: patch-configure,v 1.8 2019/06/29 22:26:25 ajacoutot Exp $
 
+The test for __builtin_bswap64 must fail if the linker can't find the
+symbol.  We need this for base-gcc on little endian, like mips64el.
+
 Fix relocation errors on (at least) sparc64.
 
 We don't want extra debug flags in regular builds.
@@ -7,6 +10,15 @@ We don't want extra debug flags in regul
 Index: configure
 --- configure.orig
 +++ configure
+@@ -6062,7 +6062,7 @@ uint64_t y = __builtin_bswap64(x);
+   return 0;
+ }
+ _ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
++if ac_fn_c_try_link "$LINENO"; then :
+   nettle_cv_c_builtin_bswap64=yes
+ else
+   nettle_cv_c_builtin_bswap64=no
 @@ -6720,6 +6720,7 @@ else
        bsdi4.*)        CCPIC="-fPIC" ;;
        bsdi*)          CCPIC="" ;;

Reply via email to