Hi, The problem happened after upgrade to lttng-ust 2.13.0.  2.12.0 don't have this issue. liburcu version: 0.13.0 gcc: 11.2.0 This is my reproduce steps, it is cross compile enviroment based on yocto project. 1. git clone git://git.yoctoproject.org/poky 2. . oe-init-build-env 3. echo "MACHINE='qemuarm'" >> conf/local.conf 4. echo "DEBUG_BUILD='1'" >> conf/local.conf 5. bitbake lttng-ust compile failed with error: | /work/cortexa15t2hf-neon-poky-linux-gnueabi/lttng-ust/2_2.13.0-r0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/11.2.0/ld: ../../../src/lib/lttng-ust/.libs/liblttng-ust.so: undefined reference to `_uatomic_link_error' | collect2: error: ld returned 1 exit status | Makefile:399: recipe for target 'test_ust_error' failed checked with "nm ../../../src/lib/lttng-ust/.libs/liblttng-ust.so" | grep atomic, we can see 'U _uatomic_link_error',  but since -Og is used,  liburcu don't define this function. [snip] #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR static inline __attribute__((always_inline, noreturn)) void _uatomic_link_error(void) { #ifdef ILLEGAL_INSTR         /*          * generate an illegal instruction. Cannot catch this with          * linker tricks when optimizations are disabled.          */         __asm__ __volatile__(ILLEGAL_INSTR); #else         __builtin_trap(); #endif } #else /* #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR */ extern void _uatomic_link_error(void); #endif /* #else #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR */ [snip] we cannot see 'U _uatomic_link_error' in following conditions, so compile successed: 1.  without -Og(using -O2),  + 32bit arm 2. -Og + 64bit arm 3. -Og + x86/x86-64 Do you have any idea about how to fix this? I don't understand why only "-Og + 32bit arm" will call function _uatomic_link_error. Thanks //Changqing