On Fri, Oct 27, 2023 at 08:45:47PM +0000, Klemens Nanni wrote:
> On Fri, Oct 27, 2023 at 10:41:56PM +0200, Theo Buehler wrote:
> > On Fri, Oct 27, 2023 at 08:27:37PM +0000, Klemens Nanni wrote:
> > > Something installed this library on my machine, so it came up when
> > > looking for future fallout.
> > >
> > > Patch looks simple, 'nm libtbb.so.* | grep syscall' shows the symbol
> > > gone and check_syms agrees:
> > >
> > > /l/lib/libtbb.so.1.0 -->
> > > /p/pobj/tbb-2020.3.3/fake-amd64/usr/local/lib/libtbb.so.1.0
> > > Dynamic export changes:
> > > removed:
> > > _ZN3tbb8internal3rml14private_worker14wake_or_launchEv
> >
> > Do you know what leads to this symbol removal? That's not clear from
> > your patch and seems unrelated. I would have thought
>
> Building -current without the diff shows no changes between installed
> and built libtbb.so.1.0, no that removal must stem from my diff.
>
> >
> > tbb::internal::rml::private_worker::wake_or_launch()
> >
> > should not have been exported in the first place.
>
> Perhaps something picked up from the <sys/syscall.h>?
I should have looked more closely. The entire code is under
#if defined(SYS_futex) which is of course from syscall.h:
> +-/* Futex definitions */
> +-#include <sys/syscall.h>
> +
> + #if defined(SYS_futex)
The following does not result in dynamic export changes and switches the
external references from syscall to futex, as expected.
ok tb
if you want to commit.
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/tbb/Makefile,v
diff -u -p -r1.7 Makefile
--- Makefile 29 May 2023 17:50:03 -0000 1.7
+++ Makefile 27 Oct 2023 21:16:03 -0000
@@ -7,6 +7,7 @@ GH_ACCOUNT = oneapi-src
GH_PROJECT = oneTBB
GH_TAGNAME = v${V}
PKGNAME = tbb-${V}
+REVISION = 0
SHARED_LIBS += tbb 1.0 #2020.3
SHARED_LIBS += tbbmalloc 1.0 #2020.3
Index: patches/patch-include_tbb_machine_linux_common_h
===================================================================
RCS file: patches/patch-include_tbb_machine_linux_common_h
diff -N patches/patch-include_tbb_machine_linux_common_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-include_tbb_machine_linux_common_h 27 Oct 2023 21:17:11
-0000
@@ -0,0 +1,35 @@
+Use futex(2) not syscall(2)
+
+Index: include/tbb/machine/linux_common.h
+--- include/tbb/machine/linux_common.h.orig
++++ include/tbb/machine/linux_common.h
+@@ -77,8 +77,8 @@ namespace tbb {
+
+ namespace internal {
+
+-inline int futex_wait( void *futex, int comparand ) {
+- int r = syscall( SYS_futex,futex,__TBB_FUTEX_WAIT,comparand,NULL,NULL,0 );
++inline int futex_wait( void *uaddr, int comparand ) {
++ int r = futex( (volatile uint32_t *)uaddr,FUTEX_WAIT,comparand,NULL,NULL
);
+ #if TBB_USE_ASSERT
+ int e = errno;
+ __TBB_ASSERT( r==0||r==EWOULDBLOCK||(r==-1&&(e==EAGAIN||e==EINTR)),
"futex_wait failed." );
+@@ -86,14 +86,14 @@ inline int futex_wait( void *futex, int comparand ) {
+ return r;
+ }
+
+-inline int futex_wakeup_one( void *futex ) {
+- int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,1,NULL,NULL,0 );
++inline int futex_wakeup_one( void *uaddr ) {
++ int r = ::futex( (volatile uint32_t *)uaddr,__TBB_FUTEX_WAKE,1,NULL,NULL
);
+ __TBB_ASSERT( r==0||r==1, "futex_wakeup_one: more than one thread woken
up?" );
+ return r;
+ }
+
+-inline int futex_wakeup_all( void *futex ) {
+- int r = ::syscall( SYS_futex,futex,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL,0 );
++inline int futex_wakeup_all( void *uaddr ) {
++ int r = ::futex( (volatile uint32_t
*)uaddr,__TBB_FUTEX_WAKE,INT_MAX,NULL,NULL );
+ __TBB_ASSERT( r>=0, "futex_wakeup_all: error in waking up threads" );
+ return r;
+ }