<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>60896</bug_id>
          
          <creation_ts>2026-10-10 07:59:29 +0300</creation_ts>
          <short_desc>libuserspace-rcu: build with --enable-compiler-atomic-builtins (64-bit uatomic on i586)</short_desc>
          <delta_ts>2026-10-10 10:16:11 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>libuserspace-rcu</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Vitaly Lipatov">lav</assigned_to>
          <cc>lav</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>301650</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2026-10-10 07:59:29 +0300</bug_when>
    <thetext>Предлагается собирать libuserspace-rcu с --enable-compiler-atomic-builtins, как это делает Fedora.

== Проблема ==

На 32-битном x86 liburcu не поддерживает uatomic-операции над 64-битными типами:
include/urcu/uatomic/x86.h определяет UATOMIC_HAS_ATOMIC_LLONG только при CAA_BITS_PER_LONG == 64.

С 0.15.2 апстрим добавил на это static assert (коммиты e3985ee &quot;Add UATOMIC_HAS_ATOMIC_INT/LLONG for x86&quot; и d113221 &quot;Add uatomic size static assert for &apos;x86&apos;&quot;). Раньше такой код собирался и падал уже при запуске в _uatomic_link_error() (см. https://github.com/gluster/glusterfs/issues/2979), а теперь падает при компиляции.

Пример: glusterfs11 11.2 не собирается на i586 (задача #435696):
  ./glusterfs/gf-io.h:361:12: error: static assertion failed: &quot;The architecture does not support atomic operations on types of sizeof(*(&amp;gf_io.op_seq)) bytes.&quot;
Те же ошибки в gf-io-legacy.c:48 и gf-io-uring.c:668. Это uatomic_add_return/uatomic_xchg над uint64_t.

При этом сам процессор умеет такие операции: с -march=i586 GCC даёт __GCC_ATOMIC_LLONG_LOCK_FREE == 2 и генерирует lock cmpxchg8b без libatomic.

== Как собирают другие ==

- Fedora (0.15.7): %configure --disable-static --enable-compiler-atomic-builtins. Включено в 0.15.0 (январь 2025), запись в changelog сделал Michael Jeanson, один из разработчиков liburcu.
- Debian (0.15.7): без builtins, только --disable-compiler-tls на части архитектур.
- Arch: голый ./configure.
- ALT: %configure --disable-static.

Апстрим liburcu не планирует 64-битные атомики в своём x86-32 asm. Опция builtins — штатный способ их получить: с ней uatomic.h подключает uatomic/builtins.h, где UATOMIC_HAS_ATOMIC_LLONG выставляется по __GCC_ATOMIC_LLONG_LOCK_FREE.

== Проверка ==

Собрал 0.15.6 локально в обоих вариантах (x86_64):
- набор экспортируемых символов всех 7 библиотек (liburcu, -bp, -cds, -common, -mb, -memb, -qsbr) совпадает, SONAME тот же (liburcu.so.8);
- в установленных заголовках отличается только urcu/config.h: #define CONFIG_RCU_USE_ATOMIC_BUILTINS 1. Структуры не меняются. В README апстрима для этой опции нет предупреждения об изменении ABI, в отличие от --enable-cds-lfht-iter-debug;
- тест с -m32 -march=i586: uatomic_add_return/uatomic_xchg над uint64_t со старыми заголовками дают ту же static assertion, с builtins компилируются в lock cmpxchg8b.

== Нужна ли пересборка зависимых пакетов ==

Для совместимости — нет. ABI библиотеки не меняется, а uatomic/cmm_* — inline-макросы в заголовках. Уже собранные пакеты сохраняют встроенную старую реализацию (asm на x86, свои реализации на других архитектурах). Она работает с теми же переменными так же атомарно, как и __atomic-builtins, поэтому смешение старых бинарников с новой библиотекой корректно.

С builtins заголовки требуют не менее C11/C++11 (compiler.h: #error, если __STDC_VERSION__ &lt; 201112L). При GCC 15 по умолчанию gnu23/gnu++17, поэтому опасны только явные старые -std.

Зависимые пакеты в Sisyphus (rdb, 9 штук) и их -std:
- knot 3.5.3: не задаёт
- glusterfs11 11.2: не задаёт
- nfs-ganesha 9.9: не задаёт
- partclone 0.3.47: -std=c99 только у цели partclone_exfat
- xfsprogs 7.2.0: gnu11 / gnu++11
- bcachefs-tools 1.39.7: -std=gnu11
- netsniff-ng 0.6.9: в Makefile CFLAGS_DEF = -std=gnu99, но в ALT спек передаёт make CFLAGS=&apos;%optflags&apos;, и CFLAGS_DEF не используется
- liblttng-ust 2.12.2: не задаёт
- multipath-tools 0.14.3: create-config.mk проверяет &lt;urcu.h&gt; с gnu99 и при неудаче переключается на gnu11 (сделано именно под этот случай)

== План ==

1. libuserspace-rcu 0.15.7-alt2: добавить --enable-compiler-atomic-builtins в %configure.
   На e2k (свой патч userspace-rcu-e2k.patch, uatomic/gcc.h) нужно уточнить у e2k-порта, поддерживает ли lcc __atomic-builtins и C11. Если нет, оставить там прежнюю сборку (%ifnarch %e2k).
2. Отправить в girar и пересобрать с этой задачей все 9 зависимых пакетов на всех архитектурах (scripts/rdeps-rebuild.sh), чтобы убедиться, что ничего не ломается. Добавлять пересборки в задачу не обязательно, потому что ABI не меняется.
3. glusterfs11: пока отправляется с локальным патчем (uatomic над 64-битными полями заменён на __atomic_*), чтобы не ждать этой задачи. Когда изменение liburcu попадёт в Sisyphus, патч можно убрать при следующем обновлении.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301662</commentid>
    <comment_count>1</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2026-10-10 10:16:11 +0300</bug_when>
    <thetext>libuserspace-rcu-0.15.7-alt2 -&gt; sisyphus:

Sat Oct 10 2026 Vitaly Lipatov &lt;lav@altlinux.ru&gt; 0.15.7-alt2
- build with --enable-compiler-atomic-builtins (except e2k):
  64-bit uatomic operations on i586 (closes: #60896)
- pack libraries to /usr libdir on usrmerged systems (keep /lib* otherwise)
- drop unused aarch64 patch, use rm -v without -f</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>