Currently the sanitizers option would be honored only with Clang,
make sure we can also use it with GCC, for this we require extra
linker flag and 2 packages for Fedora, Ubuntu has them installed
by default with GCC.

Reported-at: https://issues.redhat.com/browse/FDP-2671
Signed-off-by: Ales Musil <[email protected]>
---
 .ci/linux-build.sh                     | 40 +++++++++++++++++++-------
 utilities/containers/fedora/Dockerfile |  2 ++
 2 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index a82027698..baea46cd1 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -69,12 +69,18 @@ function configure_ovn()
     { cat config.log; exit 1; }
 }
 
+function configure_sanitizers()
+{
+    # If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
+    # enable them, but only for OVN, not for OVS.  However, disable some
+    # optimizations for OVS, to make sanitizer reports user friendly.
+    COMMON_CFLAGS="${COMMON_CFLAGS} -O1 -fno-omit-frame-pointer -fno-common -g"
+    OVN_CFLAGS="${OVN_CFLAGS} -fsanitize=address,undefined"
+}
+
 function configure_gcc()
 {
-    if [ "$ARCH" = "x86_64" ] && [ "$USE_SPARSE" = "yes" ]; then
-        # Enable sparse only for x86_64 architecture.
-        OPTS="$OPTS --enable-sparse"
-    elif [ "$ARCH" = "x86" ]; then
+    if [ "$ARCH" = "x86" ]; then
         # Adding m32 flag directly to CC to avoid any possible issues
         # with API/ABI difference on 'configure' and 'make' stages.
         export CC="$CC -m32"
@@ -87,19 +93,31 @@ function configure_gcc()
             # Install equivalent of gcc-multilib for Fedora.
             sudo dnf -y install glibc-devel.i686
         fi
+
+        return
+    fi
+
+    if [ "$ARCH" = "x86_64" ] && [ "$USE_SPARSE" = "yes" ]; then
+        # Enable sparse only for x86_64 architecture.
+        OPTS="$OPTS --enable-sparse"
     fi
-}
 
-function configure_clang()
-{
     # If AddressSanitizer and UndefinedBehaviorSanitizer are requested,
     # enable them, but only for OVN, not for OVS.  However, disable some
     # optimizations for OVS, to make sanitizer reports user friendly.
+
+    if [ "$SANITIZERS" ]; then
+        configure_sanitizers
+        # Unlike for clang we also need to statically link the libraries.
+        # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94328
+        OVN_CFLAGS="${OVN_CFLAGS} -static-libasan -static-libubsan"
+    fi
+}
+
+function configure_clang()
+{
     if [ "$SANITIZERS" ]; then
-       # Use the default options configured in tests/atlocal.in,
-       # in UBSAN_OPTIONS.
-       COMMON_CFLAGS="${COMMON_CFLAGS} -O1 -fno-omit-frame-pointer -fno-common 
-g"
-       OVN_CFLAGS="${OVN_CFLAGS} -fsanitize=address,undefined"
+        configure_sanitizers
     fi
     COMMON_CFLAGS="${COMMON_CFLAGS} -Wno-error=unused-command-line-argument"
 }
diff --git a/utilities/containers/fedora/Dockerfile 
b/utilities/containers/fedora/Dockerfile
index ace35147c..af05dac62 100755
--- a/utilities/containers/fedora/Dockerfile
+++ b/utilities/containers/fedora/Dockerfile
@@ -25,8 +25,10 @@ RUN dnf -y update \
         jemalloc-devel \
         kernel-devel \
         kmod \
+        libasan-static \
         libcap-ng-devel \
         libtool \
+        libubsan-static \
         llvm-devel \
         net-tools \
         nfdump \
-- 
2.52.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to