Saturday, November 30, 2019

Re: "undefined reference to `__builtin_bswap64'" on mips64el/loongson

On Sat, 30 Nov 2019 01:10:56 -0800
manphiz@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="" ;;

No comments:

Post a Comment