AC_MSG_WARN([ADDRSAN and THREADSAN are not known to work together.])
fi
+AC_PACKAGE_CHECK_RETPOLINE
AC_CHECK_SIZEOF([long])
AC_CHECK_SIZEOF([char *])
AC_TYPE_UMODE_T
SANITIZER_CFLAGS += @addrsan_cflags@ @threadsan_cflags@ @ubsan_cflags@
SANITIZER_LDFLAGS += @addrsan_ldflags@ @threadsan_ldflags@ @ubsan_ldflags@
+# Enable retpolines if available
+HAVE_RETPOLINE = @have_retpoline@
+ifeq ($(HAVE_RETPOLINE),yes)
+OPTIMIZER += @retpoline_cflags@
+LOADERFLAGS += @retpoline_ldflags@
+endif
+
GCFLAGS = $(DEBUG) \
-DVERSION=\"$(PKG_VERSION)\" -DLOCALEDIR=\"$(PKG_LOCALE_DIR)\" \
-DPACKAGE=\"$(PKG_NAME)\" -I$(TOPDIR)/include -I$(TOPDIR)/libxfs
AC_MSG_RESULT(no))
AC_SUBST(have_hdio_getgeo)
])
+
+AC_DEFUN([AC_PACKAGE_CHECK_RETPOLINE],
+ [ AC_MSG_CHECKING([if C compiler supports retpoline])
+ OLD_CFLAGS="$CFLAGS"
+ OLD_LDFLAGS="$LDFLAGS"
+ RETPOLINE_FLAGS="-mindirect-branch=thunk"
+ CFLAGS="$CFLAGS $RETPOLINE_FLAGS"
+ LDFLAGS="$LDFLAGS $RETPOLINE_FLAGS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
+ [AC_MSG_RESULT([yes])]
+ [retpoline_cflags=$RETPOLINE_FLAGS]
+ [retpoline_ldflags=$RETPOLINE_FLAGS],
+ [AC_MSG_RESULT([no])])
+ if test -n "$retpoline_cflags"; then
+ have_retpoline=yes
+ fi
+ CFLAGS="${OLD_CFLAGS}"
+ LDFLAGS="${OLD_LDFLAGS}"
+ AC_SUBST(have_retpoline)
+ AC_SUBST(retpoline_cflags)
+ AC_SUBST(retpoline_ldflags)
+ ])