----- On Sep 29, 2021, at 11:47 PM, lttng-dev <lttng-dev@lists.lttng.org> wrote:
> 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. I suspect it depends on which optimizations are being enabled at -Og on each architecture. The "_uatomic_link_error()" trick indeed depends on the compiler optimizing away unreachable calls. If you really intend on using "-Og" on arm32, trying building with "-DUATOMIC_NO_LINK_ERROR". It should take care of making sure to generate an illegal instruction rather than rely on the linker error. Thanks, Mathieu > Thanks > //Changqing > _______________________________________________ > lttng-dev mailing list > lttng-dev@lists.lttng.org > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com
_______________________________________________ lttng-dev mailing list lttng-dev@lists.lttng.org https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev