]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Flip configure --enable-arch-native default (#2261) master
authorFrancesco Chemolli <5175948+kinkie@users.noreply.github.com>
Thu, 2 Oct 2025 20:03:45 +0000 (20:03 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Thu, 2 Oct 2025 23:20:47 +0000 (23:20 +0000)
Flip the default of configure's `--enable-arch-native` option from
enabled to disabled.

GCC's and clang's `-march=native` argument causes issues in some
environments, most notably containers where the compilers' heuristics
about CPU feature set may fail. These issues manifest as
hard-to-reproduce SIGILL errors in binaries such as `squid` or unit test
programs. The new default is safer. Performance-minded administrators
still have a convenient option to optimize via `--enable-arch-native`.

configure.ac
doc/release-notes/release-7.sgml.in
test-suite/buildtests/layer-01-minimal.opts
test-suite/buildtests/layer-02-maximus.opts

index 9dd4a09aa8d67c33cdc33133d251a1e7dfdb3aec..4f595eb9d43bd08d90d71475c688fd4f648babf5 100644 (file)
@@ -68,19 +68,23 @@ AC_USE_SYSTEM_EXTENSIONS
 
 AC_LANG([C++])
 
-# Clang 3.2 on some CPUs requires -march-native to detect correctly.
-# GCC 4.3+ can also produce faster executables when its used.
+# Some compilers can produce faster executables when its used.
 # But building inside a virtual machine environment has been found to
 # cause random Illegal Instruction errors due to mis-detection of CPU.
 AC_ARG_ENABLE(arch-native,
-  AS_HELP_STRING([--disable-arch-native],[Some compilers offer CPU-specific
+  AS_HELP_STRING([--enable-arch-native],[Some compilers offer CPU-specific
                  optimizations with the -march=native parameter.
-                 This flag disables the optimization. The default is to
-                 auto-detect compiler support and use where available.]), [
+                 This flag enables the optimization, by default disabled,
+                 provided that the compiler supports it. Enabling this
+                 optimization may cause crashes due to illegal instruction errors
+                 when Squid is run on a CPU different from the one it is built on,
+                 and in some containerized or virtualized environments]), [
   SQUID_YESNO([$enableval],[--enable-arch-native])
 ])
-AC_MSG_NOTICE([CPU arch native optimization enabled: ${enable_arch_native:=auto}])
-AS_IF([test "x${enable_arch_native}" != "xno"],[
+AC_MSG_NOTICE([CPU arch native optimization enabled: ${enable_arch_native:=no}])
+AS_IF([test "x${enable_arch_native}" = "xyes"],[
+  # XXX: Fail if the explicitly requested native optimization is not available.
+  # TODO: Make this a tristate yes/no/auto.
   SQUID_CC_CHECK_ARGUMENT([squid_cv_check_marchnative],[-march=native])
 ])
 
index 42a84eb06189311e0ebb15357b3e8b9328ceda05..ef5c2f68753f95a4b6d20329a2356c51e743b721 100644 (file)
@@ -286,7 +286,16 @@ This section gives an account of those changes in three categories:
 <sect1>Changes to existing options<label id="modifiedoptions">
 <p>
 <descrip>
-       <p>No build options have changed behaviour in this version.
+
+       <tag>--disable-arch-native</tag>
+       <p>The <em>-march=native</em> compiler option is no longer used by
+               default. It is possible to enable it by using the
+               <em>--enable-arch-native</em> option.
+               Using <em>-march=native</em> may cause problems when Squid is
+               run on a system with a different exact CPU model than the one
+               it is built on, or in some containerized environments.
+               The symptom is crashes with "illegal instruction" errors.
+               We do not recommend enabling this optimization in virtualized environments.
 
 </descrip>
 </p>
index 0b9d8127be9524075363243e294d48719591e370..739df66af316d471f3a10bafd5c3a020a75c3065 100644 (file)
@@ -86,6 +86,7 @@ DISTCHECK_CONFIGURE_FLAGS=" \
        --disable-auto-locale \
        --disable-translation \
        --disable-optimizations \
+       --disable-arch-native \
  \
        --without-pthreads \
        --without-aio \
index 91ce997e416ea2289b4ec35bdabc691f71b30713..fd3408a81ec387644bdb70a0b717c88faf0c80d2 100644 (file)
@@ -49,6 +49,7 @@ MAKETEST="distcheck"
 #   --with-ldap \
 #
 #   --enable-cpu-profiling \  Requires CPU support.
+#   --enable-arch-native \  can fail on virtualized environments
 #
 #
 # NP: DISTCHECK_CONFIGURE_FLAGS is a magic automake macro for the