NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: bin/59571: new bind crashes on arm64



i wonder if we could work around this by turning off the
RCU_MEMBARRIER version and forcing RCU_MB version, which is
effectively the one we end up using anyway, since membarrier()
is a linux feature only.

i tested this, seems to work fine.  since it involves no code
changes to upstream, just this small diff (which includes a
fix for liburcu-signal/Makefile that doesn't matter.)


note this isn't a fix for whatever the underlying problem is,
but i think this is better anyway since it avoids code that
won't even run on netbsd being compiled in at all.  (if we
go with this, and close this PR, a separate PR for the other
problem should be created.)


.mrg.


Index: lgpl2/userspace-rcu/lib/liburcu/Makefile
===================================================================
RCS file: /cvsroot/src/external/lgpl2/userspace-rcu/lib/liburcu/Makefile,v
retrieving revision 1.1
diff -p -u -r1.1 Makefile
--- lgpl2/userspace-rcu/lib/liburcu/Makefile	17 Jan 2025 16:07:26 -0000	1.1
+++ lgpl2/userspace-rcu/lib/liburcu/Makefile	5 Aug 2025 23:17:51 -0000
@@ -4,7 +4,7 @@
 
 LIBISPRIVATE=yes
 LIB=urcu
-CPPFLAGS+=-DRCU_MEMBARRIER
+CPPFLAGS+=-DRCU_MB
 
 SRCS+= urcu.c urcu-pointer.c compat_arch.c compat_futex.c
 
Index: lgpl2/userspace-rcu/lib/liburcu-signal/Makefile
===================================================================
RCS file: /cvsroot/src/external/lgpl2/userspace-rcu/lib/liburcu-signal/Makefile,v
retrieving revision 1.1
diff -p -u -r1.1 Makefile
--- lgpl2/userspace-rcu/lib/liburcu-signal/Makefile	17 Jan 2025 16:07:27 -0000	1.1
+++ lgpl2/userspace-rcu/lib/liburcu-signal/Makefile	5 Aug 2025 23:17:51 -0000
@@ -3,7 +3,7 @@
 .include <bsd.own.mk>
 
 LIBISPRIVATE=yes
-LIB=urcu-mb
+LIB=urcu-signal
 CPPFLAGS+=-DRCU_SIGNAL -DRCU_MEMBARRIER
 
 SRCS+= urcu.c urcu-pointer.c compat_arch.c compat_futex.c
Index: mpl/bind/Makefile.inc
===================================================================
RCS file: /cvsroot/src/external/mpl/bind/Makefile.inc,v
retrieving revision 1.17
diff -p -u -r1.17 Makefile.inc
--- mpl/bind/Makefile.inc	14 Jul 2025 10:25:52 -0000	1.17
+++ mpl/bind/Makefile.inc	5 Aug 2025 23:17:51 -0000
@@ -17,7 +17,7 @@ CWARNFLAGS.clang+=	-Wno-unused-value -Wn
 LIBUVDIR=	${NETBSDSRCDIR}/external/mit/libuv
 LIBUVOBJDIR!=   cd ${LIBUVDIR}/lib && ${PRINTOBJDIR}
 LIBURCUDIR=	${NETBSDSRCDIR}/external/lgpl2/userspace-rcu
-LIBURCUMEMBOBJDIR!=   cd ${LIBURCUDIR}/lib/liburcu-memb && ${PRINTOBJDIR}
+LIBURCUMBOBJDIR!=   cd ${LIBURCUDIR}/lib/liburcu-mb && ${PRINTOBJDIR}
 LIBURCUCDSOBJDIR!=   cd ${LIBURCUDIR}/lib/liburcu-cds && ${PRINTOBJDIR}
 LIBURCUCOMMONOBJDIR!=   cd ${LIBURCUDIR}/lib/liburcu-common && ${PRINTOBJDIR}
 CPPFLAGS+=	-I${LIBUVDIR}/dist/include
@@ -57,7 +57,7 @@ DBG=-g3 -gstabs
 .if defined(NAMED_DEBUG)
 LDADD+=		-lisccfg_g -ldns_g -lns_g
 LDADD+=		-lisccc_g -lisc_g
-LDADD+=		-L${LIBURCUMEMBOBJDIR} -lurcu-memb_g
+LDADD+=		-L${LIBURCUMBOBJDIR} -lurcu-mb_g
 LDADD+=		-L${LIBURCUCDSOBJDIR} -lurcu-cds_g
 LDADD+=		-L${LIBURCUCOMMONOBJDIR} -lurcu-common_g
 LDADD+=		-L${LIBUVOBJDIR} -luv_g
@@ -66,7 +66,7 @@ LDADD+=		-lexecinfo_g -lelf_g -lkvm_g -l
 LDADD+=		-lisccfg -ldns -lns
 DPADD+=		${LIBISCCFG} ${LIBDNS} ${LIBNS}
 LDADD+=		-lisccc -lisc 
-LDADD+=		-L${LIBURCUMEMBOBJDIR} -lurcu-memb
+LDADD+=		-L${LIBURCUMBOBJDIR} -lurcu-mb
 LDADD+=		-L${LIBURCUCDSOBJDIR} -lurcu-cds
 LDADD+=		-L${LIBURCUCOMMONOBJDIR} -lurcu-common
 LDADD+=		-L${LIBUVOBJDIR} -luv
Index: mpl/bind/bind2netbsd
===================================================================
RCS file: /cvsroot/src/external/mpl/bind/bind2netbsd,v
retrieving revision 1.10
diff -p -u -r1.10 bind2netbsd
--- mpl/bind/bind2netbsd	21 May 2025 14:47:34 -0000	1.10
+++ mpl/bind/bind2netbsd	5 Aug 2025 23:17:51 -0000
@@ -43,7 +43,7 @@
 
 # U=/usr/src/external/lgpl2/userspace-rcu
 # OBJ=/obj.amd64-x86_64
-# env LIBURCU_CFLAGS="-I$U/include -I$U/dist/include" LIBURCU_LIBS="-L$U/lib/liburcu-memb$OBJ -lurcu-memb -L$U/lib/liburcu-cds$OBJ -lurcu-cds -L$U/lib/liburcu-common$OBJ -lurcu-common" ./configure --enable-querytrace --enable-fixed-rrset
+# env LIBURCU_CFLAGS="-I$U/include -I$U/dist/include" LIBURCU_LIBS="-L$U/lib/liburcu-memb$OBJ -lurcu-mb -L$U/lib/liburcu-cds$OBJ -lurcu-cds -L$U/lib/liburcu-common$OBJ -lurcu-common" ./configure --enable-querytrace --enable-fixed-rrset --with-liburcu=mb
 
 #	$ run make
 #	- use the binclude4netbsd to create and import the new headers in
Index: mpl/bind/include/config.h
===================================================================
RCS file: /cvsroot/src/external/mpl/bind/include/config.h,v
retrieving revision 1.23
diff -p -u -r1.23 config.h
--- mpl/bind/include/config.h	17 Jul 2025 19:01:47 -0000	1.23
+++ mpl/bind/include/config.h	5 Aug 2025 23:17:52 -0000
@@ -565,10 +565,10 @@
 #define RCU_FLAVOR "liburcu"
 
 /* Build with mb Userspace-RCU flavor */
-/* #undef RCU_MB */
+#define RCU_MB 1
 
 /* Build with membarrier Userspace-RCU flavor */
-#define RCU_MEMBARRIER 1
+/* #undef RCU_MEMBARRIER */
 
 /* Build with QSBR Userspace-RCU flavor */
 /* #undef RCU_QSBR */


Home | Main Index | Thread Index | Old Index