---
 build-config/common/m4/afs_gcc_atomic_builtins.m4 |   33 +++++++++++++++-------
 common/utils/src/Makefile.inc.am                  |    4 ++
 2 files changed, 26 insertions(+), 11 deletions(-)

--- a/build-config/common/m4/afs_gcc_atomic_builtins.m4
+++ b/build-config/common/m4/afs_gcc_atomic_builtins.m4
@@ -55,24 +55,30 @@ AC_DEFINE_UNQUOTED([HAVE_CPU_INSTRUCTION
 # https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/_005f_005fatomic-Builtins.html#g_t_005f_005fatomic-Builtins
 # If gcc atomic builtins are available, define HAVE_GCC_ATOMIC_BUILTINS
 # to 1 and set the automake conditional HAVE_GCC_ATOMIC_BUILTINS. If
-# necessary, defines HAVE_GCC_ATOMIC_BUILTINS_NEEDS_CASTS. Determines
-# and substitutes the instruction set CC builds for, see CPU_INSTRUCTION_SET.
-# The substitution can be used for selecting precompiled instruction-set-dependent
-# SOURCES.
+# necessary, defines HAVE_GCC_ATOMIC_BUILTINS_NEEDS_CASTS. In addition
+# provides GCC_ATOMIC_BUILTINS_LIB which is needed on RISC-V. See
+# https://gitlab.jsc.fz-juelich.de/perftools/utils/common/-/issues/7
+# Determines and substitutes the instruction set CC builds for, see
+# CPU_INSTRUCTION_SET. The substitution can be used for selecting
+# precompiled instruction-set-dependent SOURCES.
 #
 # For additional documentation, see common/utils/src/atomic/UTILS_Atomic.inc.c.
 #
 AC_DEFUN([AFS_GCC_ATOMIC_BUILTINS], [
 AC_REQUIRE([AFS_CPU_INSTRUCTION_SETS])
 AC_REQUIRE([AX_ASM_INLINE])
-AC_MSG_CHECKING([for gcc atomic builtins])
 AC_LANG_PUSH([C])
-AC_LINK_IFELSE(
+afs_have_gcc_atomic_builtins=0
+atomic_builtin_libs_save="${LIBS}"
+for extra_lib in "" "-latomic"; do
+    LIBS="${extra_lib} ${atomic_builtin_libs_save}"
+    AC_LINK_IFELSE(
     [AC_LANG_PROGRAM(
     [[#include "${srcdir}/../common/utils/src/atomic/UTILS_Atomic.inc.c"]],
     [[]])],
     [afs_have_gcc_atomic_builtins=1
-     gcc_atomic_builtins_result=yes],
+         gcc_atomic_builtins_result=yes
+         break],
     [AC_LINK_IFELSE(
          [AC_LANG_PROGRAM(
          [[#define HAVE_GCC_ATOMIC_BUILTINS_NEEDS_CASTS 1
@@ -81,11 +87,18 @@ AC_LINK_IFELSE(
          [afs_have_gcc_atomic_builtins=1
           AC_DEFINE([HAVE_GCC_ATOMIC_BUILTINS_NEEDS_CASTS], [1],
               [Define to 1 if casting is needed to use gcc atomic builtins.])
-          gcc_atomic_builtins_result="yes, needs pointer-to-int casts"],
-         [afs_have_gcc_atomic_builtins=0
-          gcc_atomic_builtins_result="no, using precompiled ${CPU_INSTRUCTION_SET} version"])])
+              gcc_atomic_builtins_result="yes, needs pointer-to-int casts"
+              break])])
+done
+LIBS="${atomic_builtin_libs_save}"
+AS_IF([test "x${afs_have_gcc_atomic_builtins}" = x0],
+    [AS_IF([test "x${CPU_INSTRUCTION_SET}" = xunknown],
+         [AC_MSG_ERROR([Cannot provide precompiled GCC atomic builtin wrappers when instruction set is unknown.])],
+         [gcc_atomic_builtins_result="no, using precompiled ${CPU_INSTRUCTION_SET} version"])],
+    [AC_SUBST([GCC_ATOMIC_BUILTINS_LIB], [${extra_lib}])])
 AC_LANG_POP([C])
 
+AC_MSG_CHECKING([for gcc atomic builtins])
 AC_MSG_RESULT([$gcc_atomic_builtins_result])
 AFS_SUMMARY([GCC atomic builtins], [$gcc_atomic_builtins_result])
 
--- a/common/utils/src/Makefile.inc.am
+++ b/common/utils/src/Makefile.inc.am
@@ -42,7 +42,9 @@ if ! HAVE_GCC_ATOMIC_BUILTINS
 libutils_la_LIBADD += \
     libutils_atomic.la \
     libutils_mutex.la
-endif ! HAVE_GCC_ATOMIC_BUILTINS
+else HAVE_GCC_ATOMIC_BUILTINS
+libutils_la_needs_LIBS = $(GCC_ATOMIC_BUILTINS_LIB)
+endif HAVE_GCC_ATOMIC_BUILTINS
 
 EXTRA_DIST += \
     $(SRC_ROOT)common/utils/COPYING \
