On 11/30/19 1:26 PM, George Koehler wrote: > On Sat, 30 Nov 2019 01:10:56 -0800 > [email protected] 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="" ;; >
Thanks George! This patch works just fine! BTW, I still wonder why GCC 4.2.1 on OpenBSD has the symbol but cannot link it? It's more curious as this builtin should not be available till GCC 4.3. Maybe the compiler needs to be fixed to avoid other configure falsely detect it all together?
signature.asc
Description: OpenPGP digital signature
