Hi all, I am staring at the following discussion, which eventually was resolved with: * https://github.com/riscv-collab/riscv-gcc/issues/12#issuecomment-276587351 Copied here for convenience (*). So if I understand the discussion correctly gcc is now adding by default `--as-needed -latomic` for riscv arch to support c11/atomics. What I fail to understand is why something identical was not applied to powerpc/armel and mipsel ? Typically on mipsel (Debian gcc 11.2.0 toolchain): % cat a.c _Atomic(long long) ll; int main(void) { ++ll; return 0; } Result in: % gcc a.c /usr/bin/ld: /tmp/ccsr7u8u.o: in function `main': a.c:(.text+0x54): undefined reference to `__atomic_fetch_add_8' /usr/bin/ld: a.c:(.text+0x5c): undefined reference to `__atomic_fetch_add_8' collect2: error: ld returned 1 exit status So currently, gcc wants the developer to add explicitly `--as-needed -latomic` to the linker to get c11/atomics support. Would it make sense to patch gcc so that `--as-needed -latomic` is added also for those arches (powerpc, armel, mipsel...). Thanks for comments, -M (*) diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h index d77ba3fcf27..1fab15fc081 100644 --- a/gcc/config/riscv/linux.h +++ b/gcc/config/riscv/linux.h @@ -24,6 +24,12 @@ along with GCC; see the file COPYING3. If not see #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-riscv" XLEN_SPEC "-" ABI_SPEC ".so.1" +/* Because RISC-V only has word-sized atomics, it requries libatomic where + others do not. So link libatomic by default, as needed. */ +#undef LIB_SPEC +#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \ + " " LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION \ + #define LINK_SPEC "\ -melf" XLEN_SPEC "lriscv \ %{shared} \