https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120567

            Bug ID: 120567
           Summary: [16 Regression] std::stacktrace tests now fail on
                    arm-eabi
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Keywords: testsuite-fail
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---
            Target: arm-eabi

My changes for Bug 119667 cause test failures on arm-eabi:

/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/destdir/x86_64-pc-linux-gnu/arm-eabi/bin/ld:
/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/src/experimental/.libs/libstdc++exp.a(std_stacktrace-fileline.o):
in function `fileline_initialize':
/home/tcwg-buildslave/workspace/tcwg_gnu_1/abe/builds/x86_64-pc-linux-gnu/arm-eabi/gcc-gcc.git~master-stage2/arm-eabi/libstdc++-v3/src/libbacktrace/fileline.c:260:(.text+0x74):
warning: This implementation of __sync_synchronize is a stub with no effect. 
Relink with
  -specs=sync-{none,dmb,cp15dmb}.specs
to specify exactly which barrier format to use and avoid this warning


The problem is that the new configure tests for atomics needed by libbacktrace
do this:

            int i = 0;
            int* p = &i;
            __SIZE_TYPE__ s = 0;
            // backtrace_atomic_load_pointer
            void* vp = __atomic_load_n(&p, __ATOMIC_ACQUIRE);
            // backtrace_atomic_load_int
            int i2 = __atomic_load_n(&i, __ATOMIC_ACQUIRE);
            // backtrace_atomic_store_pointer
            __atomic_store_n(&p, &i, __ATOMIC_RELEASE);
            // backtrace_atomic_store_size_t
            __atomic_store_n(&s, s, __ATOMIC_RELEASE);
            // backtrace_atomic_store_int
            __atomic_store_n(&i, i, __ATOMIC_RELEASE);

and this does compile, and doesn't emit any references to __atomic_load_n or
__atomic_store_n, but it does emit references to __sync_synchronize:


        mov     r3, #0
        str     r3, [fp, #-24]
        sub     r3, fp, #24
        str     r3, [fp, #-28]
        mov     r3, #0
        str     r3, [fp, #-32]
        sub     r3, fp, #28
        ldr     r4, [r3]
        bl      __sync_synchronize
        str     r4, [fp, #-16]
        sub     r3, fp, #24
        ldr     r4, [r3]
        bl      __sync_synchronize
        str     r4, [fp, #-20]
        sub     r5, fp, #24
        sub     r4, fp, #28
        bl      __sync_synchronize
        str     r5, [r4]
        ldr     r5, [fp, #-32]
        sub     r4, fp, #32
        bl      __sync_synchronize
        str     r5, [r4]
        ldr     r3, [fp, #-24]
        mov     r5, r3
        sub     r4, fp, #24
        bl      __sync_synchronize
        str     r5, [r4]


I'm not sure whether we want to avoid using atomics for stacktraces on
arm-eabi, or require one of those specs options for the testsuite.

Reply via email to