[PATCH] D130569: [Driver] Use libatomic for 32-bit SPARC atomics support on Linux

Rainer Orth via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 28 00:54:38 PDT 2022


ro marked 2 inline comments as done.
ro added inline comments.


================
Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:634
 
+      // LLVM support for atomics on 32-bit SPARC V8+ is incomplete, so
+      // forcibly link with libatomic as a workaround.
----------------
MaskRay wrote:
> `// TODO ...` and attach a bug link
It's split between the original bug report and a patch review: I only noticed later (when `compiler-rt` started to make use of 64-bit atomics) that those aren't implemented by `clang -m32 -mcpu=v9`.


================
Comment at: clang/lib/Driver/ToolChains/Gnu.cpp:637
+      if (getToolChain().getTriple().getArch() == llvm::Triple::sparc) {
+        CmdArgs.push_back("--as-needed");
+        CmdArgs.push_back("-latomic");
----------------
MaskRay wrote:
> Such --as-needed usage is a bit fragile if clang driver in the future passes `--as-needed`  in the beginning. Better to use --push-state if you have a not-too-old ld.
Good point: I initially fell into that trap in D130571 when I added `--as-needed -latomic --no-as-needed` to `SANITIZER_COMMON_LINK_FLAGS`: it got added early to the link line, before the objects using atomics, and had no effect.  Only then did Iearn that `target_link_libraries` accepts not only library names, but also linker flags.

As for `--push-state`, it was introduced in GNU `ld` 2.25 back in 2014, to it's save to assume it's present.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130569/new/

https://reviews.llvm.org/D130569



More information about the cfe-commits mailing list