On 9/30/21 9:14 PM, Mathieu Desnoyers wrote:

**[Please note: This e-mail is from an EXTERNAL e-mail address]

----- 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
    
<https://urldefense.com/v3/__http://liblttng-ust.so__;!!AjveYdw8EvQ!LLTouw-mBEBAY8hObF75ydNA3D3KMc0Hla12A4D4cQ-hm-F5lidnggb4zDVbAwolB77-gw$>:
    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
    
<https://urldefense.com/v3/__http://liblttng-ust.so__;!!AjveYdw8EvQ!LLTouw-mBEBAY8hObF75ydNA3D3KMc0Hla12A4D4cQ-hm-F5lidnggb4zDVbAwolB77-gw$>"
    | 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.  I have tried with "-DUATOMIC_NO_LINK_ERROR".  With this,  it can compile successfully.

Changqing


    Thanks

    //Changqing


    _______________________________________________
    lttng-dev mailing list
    lttng-dev@lists.lttng.org
    https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
    
<https://urldefense.com/v3/__https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev__;!!AjveYdw8EvQ!LLTouw-mBEBAY8hObF75ydNA3D3KMc0Hla12A4D4cQ-hm-F5lidnggb4zDVbAwqteQD9FQ$>


--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com <https://urldefense.com/v3/__http://www.efficios.com__;!!AjveYdw8EvQ!LLTouw-mBEBAY8hObF75ydNA3D3KMc0Hla12A4D4cQ-hm-F5lidnggb4zDVbAwo9O85jiQ$>
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to