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

            Bug ID: 125235
           Summary: musl-gcc unexpectedly tried to link atomic_asneeded
           Product: gcc
           Version: 16.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: plugins
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marocketbd at gmail dot com
  Target Milestone: ---

I wrote an simple C unit to test musl lib behavior, but I found that since gcc
16.1.1, I can't compile it. I'm on Arch Linux, which upgraded gcc from 15 to 16
recently, I can compile it with gcc 15.

#include <stdlib.h>
int main(void) {
  malloc(10);
  return 0;
}

I compared the verbose output of gcc 15 and gcc 16, the main difference is that
gcc 16 will add flag `-plugin-opt=-pass-through=-latomic_asneeded` and
`-latomic_asneeded` in collect2 stage.

Since musl doesn't have atomic lib, all musl-gcc compilation failed. Detailed
-v log is attached, the first one is gcc 15 output, the second is gcc 16
output.

---

Using built-in specs.
Reading specs from /usr/lib/musl/lib/musl-gcc.specs
rename spec cpp_options to old_cpp_options
COLLECT_GCC=gcc-15
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc15/src/gcc15/configure
--enable-languages=c,c++,fortran --enable-bootstrap --prefix=/usr
--libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man
--infodir=/usr/share/info
--with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc15/-/work_items
--with-build-config=bootstrap-lto --with-linker-hash-style=gnu
--with-system-zlib --enable-__cxa_atexit --enable-cet=auto
--enable-checking=release --enable-clocale=gnu --enable-default-pie
--enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object
--enable-libstdcxx-backtrace --enable-link-serialization=1
--enable-linker-build-id --enable-lto --disable-multilib --enable-plugin
--enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch
--disable-werror --program-suffix=-15 --enable-version-specific-runtime-libs
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 15.2.1 20260506 (GCC)
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/cc1 -quiet -v c.c -nostdinc -isystem
/usr/lib/musl/include -isystem /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include
-quiet -dumpdir a- -dumpbase c.c -dumpbase-ext .c -mtune=generic -march=x86-64
-version -o /tmp/ccq8aLQd.s
GNU C23 (GCC) version 15.2.1 20260506 (x86_64-pc-linux-gnu)
        compiled by GNU C version 15.2.1 20260506, GMP version 6.3.0, MPFR
version 4.2.2, MPC version 1.4.1, isl version isl-0.27-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/musl/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include
End of search list.
Compiler executable checksum: dc8099d05c1c8c9aa67fb8f0a905b1a6
In file included from c.c:35:
/usr/lib/musl/include/wait.h:1:2: warning: #warning redirecting incorrect
#include <wait.h> to <sys/wait.h> [-Wcpp]
    1 | #warning redirecting incorrect #include <wait.h> to <sys/wait.h>
      |  ^~~~~~~
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 as -v --64 -o /tmp/cc1KGIfq.o /tmp/ccq8aLQd.s
GNU assembler version 2.46.0 (x86_64-pc-linux-gnu) using BFD version (GNU
Binutils) 2.46.0
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a.'
 /usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/collect2 -plugin
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/liblto_plugin.so
-plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/lto-wrapper
-plugin-opt=-fresolution=/tmp/ccQUYHBt.res
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc.a
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc_eh.a
-plugin-opt=-pass-through=-lc
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc.a
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc_eh.a
-dynamic-linker /lib/ld-musl-x86_64.so.1 -nostdlib -pie
/usr/lib/musl/lib/Scrt1.o /usr/lib/musl/lib/crti.o
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/crtbeginS.o -L/usr/lib/musl/lib -L
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/. /tmp/cc1KGIfq.o
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc.a
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc_eh.a -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc.a
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/libgcc_eh.a
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/crtendS.o /usr/lib/musl/lib/crtn.o
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a.'

---

Using built-in specs.
Reading specs from /usr/lib/musl/lib/musl-gcc.specs
rename spec cpp_options to old_cpp_options
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure
--enable-languages=ada,c,c++,d,fortran,go,lto,m2,objc,obj-c++,rust,cobol
--enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/gcc/-/issues
--with-build-config=bootstrap-lto --with-linker-hash-style=gnu
--with-system-zlib --enable-cet=auto --enable-checking=release
--enable-clocale=gnu --enable-default-pie --enable-default-ssp
--enable-gnu-indirect-function --enable-gnu-unique-object
--enable-libstdcxx-backtrace --enable-link-serialization=1
--enable-linker-build-id --enable-lto --enable-multilib --enable-plugin
--enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch
--disable-werror --disable-fixincludes
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 16.1.1 20260430 (GCC)
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/cc1 -quiet -v c.c -nostdinc -isystem
/usr/lib/musl/include -isystem /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include
-quiet -dumpdir a- -dumpbase c.c -dumpbase-ext .c -mtune=generic -march=x86-64
-version -o /tmp/cc3jvsAj.s
GNU C23 (GCC) version 16.1.1 20260430 (x86_64-pc-linux-gnu)
        compiled by GNU C version 16.1.1 20260430, GMP version 6.3.0, MPFR
version 4.2.2, MPC version 1.4.1, isl version isl-0.27-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/musl/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include
End of search list.
Compiler executable checksum: d640c2d0cc84ebd71ee43ed7e2df63fb
In file included from c.c:35:
/usr/lib/musl/include/wait.h:1:2: warning: #warning redirecting incorrect
#include <wait.h> to <sys/wait.h> [-Wcpp]
    1 | #warning redirecting incorrect #include <wait.h> to <sys/wait.h>
      |  ^~~~~~~
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a-'
 as -v --64 -o /tmp/ccEbNKkf.o /tmp/cc3jvsAj.s
GNU assembler version 2.46.0 (x86_64-pc-linux-gnu) using BFD version (GNU
Binutils) 2.46.0
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-specs=/usr/lib/musl/lib/musl-gcc.specs'
'-mtune=generic' '-march=x86-64' '-dumpdir' 'a.'
 /usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/collect2 -plugin
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/liblto_plugin.so
-plugin-opt=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/lto-wrapper
-plugin-opt=-fresolution=/tmp/ccl5hsOk.res
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc.a
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc_eh.a
-plugin-opt=-pass-through=-latomic_asneeded -plugin-opt=-pass-through=-lc
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc.a
-plugin-opt=-pass-through=/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc_eh.a
-dynamic-linker /lib/ld-musl-x86_64.so.1 -nostdlib -pie
/usr/lib/musl/lib/Scrt1.o /usr/lib/musl/lib/crti.o
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtbeginS.o -L/usr/lib/musl/lib -L
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/. /tmp/ccEbNKkf.o
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc.a
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc_eh.a -latomic_asneeded -lc
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc.a
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/libgcc_eh.a
/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/crtendS.o /usr/lib/musl/lib/crtn.o
/usr/bin/ld: cannot find -latomic_asneeded: No such file or directory

Reply via email to