сб, 20 апр. 2024 г. в 15:07, Willy Tarreau <w...@1wt.eu>: > On Sat, Apr 20, 2024 at 02:49:38PM +0200, ???? ??????? wrote: > > ??, 11 ???. 2024 ?. ? 21:05, Willy Tarreau <w...@1wt.eu>: > > > > > Hi Ilya, > > > > > > On Thu, Apr 11, 2024 at 08:27:39PM +0200, ???? ??????? wrote: > > > > do you know maybe how this was supposed to work ? > > > > haproxy/Makefile at master · haproxy/haproxy (github.com) > > > > <https://github.com/haproxy/haproxy/blob/master/Makefile#L499> > > > > > > That's this: > > > > > > ifneq ($(shell $(CC) $(CFLAGS) -dM -E -xc - </dev/null 2>/dev/null | > > > grep -c 'LOCK_FREE.*1'),0) > > > USE_LIBATOMIC = implicit > > > endif > > > > > > It calls the compiler with the known flags and checks if for this arch, > > > it's configured to require libatomic. > > > > > > > macros has changed from 1 to 2: > > > > ilia@fedora:~/Downloads$ cc -dM -E -xc - </dev/null 2>/dev/null | grep > LOCK > > #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 > > #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 > > #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 > > #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 > > #define __GCC_ATOMIC_INT_LOCK_FREE 2 > > #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 > > #define __GCC_ATOMIC_LONG_LOCK_FREE 2 > > #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 > > #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 > > #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 > > This means it's always lock-free, implemented natively thus doesn't > require libatomic. Value 1 means "sometimes lock-free" and implemented > as a function provided by libatomic. > > Did the problem appear when I changed the flags in the makefile ? Maybe > I accidently lost one and it's falling back to a subset of the target > arch ? >
the problem appears only with QuicTLS manually built with "-m32" flag. it does not appear with "-m32" if built and linked against system OpenSS:L but after I modify condition (the same as previously enforcing libatomic in ADDLIB), it builds fine. > > > the following patch works, but I'll play a bit more .... > > > > diff --git a/Makefile b/Makefile > > index 4bd263498..370ac7ed0 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -493,7 +493,7 @@ $(set_target_defaults) > > # linking with it by default as it's not always available nor deployed > > # (especially on archs which do not need it). > > ifneq ($(USE_THREAD:0=),) > > - ifneq ($(shell $(CC) $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) > > $(STD_CFLAGS) $(WARN_CFLAGS) $(NOWARN_CFLAGS) $(ERROR_CFLAGS) $(CFLAGS) > -dM > > -E -xc - </dev/null 2>/dev/null | grep -c 'LOCK_FREE.*1'),0) > > + ifneq ($(shell $(CC) $(OPT_CFLAGS) $(ARCH_FLAGS) $(CPU_CFLAGS) > > $(STD_CFLAGS) $(WARN_CFLAGS) $(NOWARN_CFLAGS) $(ERROR_CFLAGS) $(CFLAGS) > -dM > > -E -xc - </dev/null 2>/dev/null | grep -c 'LOCK_FREE.*[12]'),0) > > USE_LIBATOMIC = implicit > > endif > > endif > > It would impose libatomic for everyone, and not everyone has it. For > example this would break clang on freebsd from what I'm seeing. That's > not logic, there must be another reason. > > Willy >