From 9b8de59e3b1b07d46e91efe9224ab35e4db09db5 Mon Sep 17 00:00:00 2001 From: Razvan-Liviu Varzaru Date: Thu, 12 Sep 2024 15:43:25 +0300 Subject: [PATCH 01/50] Prepare container image - replace debian 11 - clang 15 with debian 12 - clang 19 For msan.Dockerfile - starting from clang 18 libunwing is added to ENABLE_RUNTIMES - make the dockerfile work for both bookworm / bullseye editions (LLVM repository) - doc Makefile is not present in bookworm for gmp - bookworm has newer aclocal / automake -> cracklib2 fix - clang 19 needs libclang-19-dev and libllvmlibc-19-dev installed --- .github/workflows/build-debian.msan-based.yml | 6 ++-- ci_build_images/msan.Dockerfile | 32 +++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-debian.msan-based.yml b/.github/workflows/build-debian.msan-based.yml index fc7298a8..662b43ec 100644 --- a/.github/workflows/build-debian.msan-based.yml +++ b/.github/workflows/build-debian.msan-based.yml @@ -25,11 +25,11 @@ jobs: fail-fast: false matrix: include: - - image: debian:11 + - image: debian:12 platforms: linux/amd64 branch: 10.11 - tag: debian11-msan - clang_version: 15 + tag: debian12-msan-clang-19 + clang_version: 19 nogalera: false - image: debian:11 diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 78a99ca9..b6cb3b11 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -12,15 +12,21 @@ ENV MSAN_SYMBOLIZER_PATH=/msan-libs/bin/llvm-symbolizer-msan ENV PATH=$MSAN_LIBDIR/bin:$PATH -RUN mkdir $MSAN_LIBDIR \ +# hadolint ignore=SC2046 +RUN . /etc/os-release \ + && if [ "${CLANG_VERSION}" -gt 17 ]; then \ + export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"; \ + else \ + export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi"; fi \ + && mkdir $MSAN_LIBDIR \ && mkdir $MSAN_LIBDIR/bin \ && printf "#!/bin/sh\nunset LD_LIBRARY_PATH\nexec llvm-symbolizer-%s \"\$@\"" "${CLANG_VERSION}" > $MSAN_SYMBOLIZER_PATH \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/gdb "$@"' > $GDB_PATH \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ && echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ - http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-${CLANG_VERSION} main" > /etc/apt/sources.list.d/llvm-toolchain.list \ + http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" > /etc/apt/sources.list.d/llvm-toolchain.list \ && echo "deb-src [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ - http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-${CLANG_VERSION} main" >> /etc/apt/sources.list.d/llvm-toolchain.list \ + http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" >> /etc/apt/sources.list.d/llvm-toolchain.list \ && apt-get update \ && apt-get -y install --no-install-recommends \ clang-${CLANG_VERSION} \ @@ -28,6 +34,9 @@ RUN mkdir $MSAN_LIBDIR \ libc++abi-${CLANG_VERSION}-dev \ libc++-${CLANG_VERSION}-dev \ llvm-${CLANG_VERSION} \ + automake \ + && if [ "${CLANG_VERSION}" = 19 ]; then \ + apt-get -y install --no-install-recommends libclang-19-dev libllvmlibc-19-dev; fi \ && apt-get source libc++-${CLANG_VERSION}-dev \ && mv llvm-toolchain-${CLANG_VERSION}-${CLANG_VERSION}*/* . \ && mkdir build \ @@ -37,7 +46,8 @@ RUN mkdir $MSAN_LIBDIR \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=clang-${CLANG_VERSION} \ -DCMAKE_CXX_COMPILER=clang++-${CLANG_VERSION} \ - -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ + -DLLVM_ENABLE_RUNTIMES="${LLVM_ENABLE_RUNTIMES}" \ + $(if [ "${CLANG_VERSION}" = 19 ]; then echo "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF"; fi) \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ && make -C build -j "$(nproc)" \ && cp -aL build/lib/libc++.so* $MSAN_LIBDIR \ @@ -50,7 +60,8 @@ ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" ENV LDFLAGS="-fsanitize=memory" -RUN apt-get source gnutls28 \ +RUN . /etc/os-release \ + && apt-get source gnutls28 \ && mv gnutls28-*/* . \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ && aclocal \ @@ -86,6 +97,10 @@ RUN apt-get source gnutls28 \ && apt-get source gmp \ && mv gmp-*/* . \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ + && if [ "${VERSION_CODENAME}" = "bookworm" ]; then \ + sed -e '/^.*"doc\/Makefile".*/d;s/doc\/Makefile //;' -i.bak configure \ + && sed -e 's/^\(SUBDIRS = .*\) doc$/\1/;' -i.bak Makefile.in; \ + fi \ && ./configure \ --disable-assembly \ && make -j "$(nproc)" \ @@ -95,9 +110,14 @@ RUN apt-get source gnutls28 \ ENV CFLAGS="$CFLAGS -Wno-conversion" ENV CXXFLAGS="$CFLAGS" -RUN apt-get source cracklib2 \ +RUN . /etc/os-release \ + && apt-get source cracklib2 \ && mv cracklib2-*/* . \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ + && if [ "${VERSION_CODENAME}" = "bookworm" ]; then \ + aclocal \ + && automake --add-missing; \ + fi \ && ./configure \ --with-default-dict=/usr/share/dict/cracklib-small \ && make -j "$(nproc)" \ From 34fe8d9baf3a06604ebcfeb12741b29c4c1e3370 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 15:02:14 +1000 Subject: [PATCH 02/50] msan_rr: Add rr into msan container This is to aid consumption by developers and have a ready available MSAN container. Technically we don't need to purge from image as its a build stage, but we do to keep size a bit smaller. --- .github/workflows/build-debian.msan-based.yml | 2 +- ci_build_images/msan.Dockerfile | 9 ++- ci_build_images/rr.Dockerfile | 55 +++++++++++++++++++ 3 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 ci_build_images/rr.Dockerfile diff --git a/.github/workflows/build-debian.msan-based.yml b/.github/workflows/build-debian.msan-based.yml index 662b43ec..fa944a99 100644 --- a/.github/workflows/build-debian.msan-based.yml +++ b/.github/workflows/build-debian.msan-based.yml @@ -41,7 +41,7 @@ jobs: uses: ./.github/workflows/bbw_build_container_template.yml with: - dockerfile: debian.Dockerfile msan.Dockerfile + dockerfile: rr.Dockerfile debian.Dockerfile msan.Dockerfile image: ${{ matrix.image }} platforms: ${{ matrix.platforms }} tag: ${{ matrix.tag }} diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index b6cb3b11..85599450 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -137,4 +137,11 @@ RUN . /etc/os-release \ && chmod -R a+x $MSAN_LIBDIR/bin/* ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" -ENV CXXFLAGS="$CFLAGS" \ No newline at end of file +ENV CXXFLAGS="$CFLAGS" +# rr installation +RUN apt-get install --no-install-recommends -y libcapnp-0.9.2 \ + && apt-get clean + +# unknown rr +# hadolint ignore=DL3022 +COPY --from=rr /tmp/install/usr/ /usr/ diff --git a/ci_build_images/rr.Dockerfile b/ci_build_images/rr.Dockerfile new file mode 100644 index 00000000..1dab41c3 --- /dev/null +++ b/ci_build_images/rr.Dockerfile @@ -0,0 +1,55 @@ +# Builds latest rr into msan image for ease of use for developers +# and MariaDB build dependencies + +ARG BASE_IMAGE +FROM "$BASE_IMAGE" as rr +LABEL maintainer="MariaDB Buildbot maintainers" +ENV CARGO_NET_GIT_FETCH_WITH_CLI=true + +# This will make apt-get install without question +ENV DEBIAN_FRONTEND=noninteractive + +# hadolint ignore=DL3003 +RUN apt-get update \ + && apt-get install --no-install-recommends -y \ + ca-certificates \ + capnproto \ + cmake \ + curl \ + g++ \ + g++-multilib \ + gdb \ + libcapnp-dev \ + libzstd-dev \ + lldb \ + make \ + pkg-config \ + python3-pexpect \ + unzip \ + zlib1g-dev \ + && curl https://codeload.github.com/rr-debugger/rr/zip/refs/heads/master -o master.zip \ + && unzip master.zip \ + && rm master.zip \ + && mkdir -p build \ + && cd build \ + && cmake -DCMAKE_PREFIX=/usr ../rr-master \ + && cmake --build . --parallel 12 \ + && cmake --install . --prefix /tmp/install/usr \ + && apt-get purge -y \ + ca-certificates \ + capnproto \ + cmake \ + curl \ + g++ \ + g++-multilib \ + gdb \ + libcapnp-dev \ + libzstd-dev \ + lldb \ + make \ + pkg-config \ + python3-pexpect \ + unzip \ + zlib1g-dev \ + && cd .. \ + && rm -rf build rr-master From 05899aae240ba90dfce04c10705994d5ec4542f6 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 15:06:46 +1000 Subject: [PATCH 03/50] Remove clang-19 out of container name Also use update-alternatives to provide clang/clang++ links. With a 6 monthly new release cycle of clang. Keeping it such that a rebuild of image is sufficient to re-deploy rather than a master restart will facilitate more frequent updates and a fixed builder url. --- .github/workflows/build-debian.msan-based.yml | 2 +- ci_build_images/msan.Dockerfile | 5 +++++ constants.py | 6 +++++- master-docker-nonstandard-2/master.cfg | 12 ++++++------ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-debian.msan-based.yml b/.github/workflows/build-debian.msan-based.yml index fa944a99..23b4cccc 100644 --- a/.github/workflows/build-debian.msan-based.yml +++ b/.github/workflows/build-debian.msan-based.yml @@ -28,7 +28,7 @@ jobs: - image: debian:12 platforms: linux/amd64 branch: 10.11 - tag: debian12-msan-clang-19 + tag: debian12-msan-clang clang_version: 19 nogalera: false diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 85599450..ef90684b 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -136,6 +136,11 @@ RUN . /etc/os-release \ libsnappy-dev \ && chmod -R a+x $MSAN_LIBDIR/bin/* +RUN update-alternatives \ + --verbose \ + --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ + --slave /usr/bin/clang++ clang++ /usr/bin/clang++-"${CLANG_VERSION}" + ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" # rr installation diff --git a/constants.py b/constants.py index 376cb912..69c0ccab 100644 --- a/constants.py +++ b/constants.py @@ -28,7 +28,7 @@ "amd64-debian-12-debug-embedded", "amd64-debian-12-deb-autobake", "amd64-debian-11-debug-ps-embedded", - "amd64-debian-11-msan", + "amd64-msan-clang", "amd64-debian-11-msan-clang-16", "amd64-fedora-40", "amd64-last-N-failed", @@ -97,7 +97,11 @@ "amd64-centos-stream9", "amd64-debian-11", "amd64-debian-11-debug-ps-embedded", +<<<<<<< HEAD "amd64-debian-11-msan", +======= + "amd64-msan-clang", +>>>>>>> cf7e615 (Remove clang-19 out of container name) "amd64-debian-11-msan-clang-16", "amd64-debian-12-asan-ubsan", "amd64-debian-12-rocksdb", diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index fb8b6305..3d5fd776 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -170,8 +170,8 @@ addWorker( addWorker( "apexis-bbw", 3, - "-msan-clang-debian-11", - os.getenv("CONTAINER_REGISTRY_URL", default="quay.io/mariadb-foundation/bb-worker:") + "debian11-msan", + "-msan-clang", + os.getenv("CONTAINER_REGISTRY_URL", default="quay.io/mariadb-foundation/bb-worker:") + "debian12-msan-clang", jobs=20, save_packages=False, ) @@ -1123,13 +1123,13 @@ c["builders"].append( c["builders"].append( util.BuilderConfig( - name="amd64-debian-11-msan", - workernames=workers["x64-bbw-docker-msan-clang-debian-11"], - tags=["Debian", "quick", "clang-15", "msan"], + name="amd64-msan-clang", + workernames=workers["x64-bbw-docker-msan-clang"], + tags=["Debian", "quick", "clang", "msan"], collapseRequests=True, nextBuild=nextBuild, canStartBuild=canStartBuild, - properties={"c_compiler": "clang-15", "cxx_compiler": "clang++-15"}, + properties={"c_compiler": "clang", "cxx_compiler": "clang++"}, locks=getLocks, factory=f_msan_build, ) From e111a5e6926798278d18bac938400623dbf60ea7 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 15:54:16 +1000 Subject: [PATCH 04/50] msan: run in default RelWithDeb info CMAKE_BUILD_TYPE Requested by Marko to make this a more realistic test of the codebase delivered to users. No -DWITH_DBUG_TRACE=OFF exists in RelWithDebInfo mode --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 3d5fd776..c62fab67 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DCMAKE_BUILD_TYPE=Debug -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON -DWITH_DBUG_TRACE=OFF && make -j%(kw:jobs)s package', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && make -j%(kw:jobs)s package', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 4faf9d559c0518711ae23e3fab110c3adabbe648 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 16:12:49 +1000 Subject: [PATCH 05/50] msan: target package not required, default sufficient --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index c62fab67..35a16280 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && make -j%(kw:jobs)s package', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && make -j%(kw:jobs)s', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 305dbce05e808250a44656c061be65bc656b919f Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 16:57:00 +1000 Subject: [PATCH 06/50] msan: Use clang/clang++ as CC/CXX env variables make clang/clang++ alternates as soon as installed --- ci_build_images/msan.Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index ef90684b..bce061fe 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -4,8 +4,8 @@ ARG CLANG_VERSION=15 WORKDIR /tmp/msan -ENV CC=clang-${CLANG_VERSION} -ENV CXX=clang++-${CLANG_VERSION} +ENV CC=clang +ENV CXX=clang++ ENV GDB_PATH=/msan-libs/bin/gdb ENV MSAN_LIBDIR=/msan-libs ENV MSAN_SYMBOLIZER_PATH=/msan-libs/bin/llvm-symbolizer-msan @@ -37,6 +37,10 @@ RUN . /etc/os-release \ automake \ && if [ "${CLANG_VERSION}" = 19 ]; then \ apt-get -y install --no-install-recommends libclang-19-dev libllvmlibc-19-dev; fi \ + && update-alternatives \ + --verbose \ + --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ + --slave /usr/bin/clang++ clang++ /usr/bin/clang++-"${CLANG_VERSION}" \ && apt-get source libc++-${CLANG_VERSION}-dev \ && mv llvm-toolchain-${CLANG_VERSION}-${CLANG_VERSION}*/* . \ && mkdir build \ @@ -136,10 +140,6 @@ RUN . /etc/os-release \ libsnappy-dev \ && chmod -R a+x $MSAN_LIBDIR/bin/* -RUN update-alternatives \ - --verbose \ - --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ - --slave /usr/bin/clang++ clang++ /usr/bin/clang++-"${CLANG_VERSION}" ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" From 1f2c9fedadc8f976a83999b7ff74b3cbf9c28376 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 16:57:50 +1000 Subject: [PATCH 07/50] msan: add NO_MSAN_PATH for non-instrumented execs used in mtr --- ci_build_images/msan.Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index bce061fe..d86baf04 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -6,11 +6,12 @@ WORKDIR /tmp/msan ENV CC=clang ENV CXX=clang++ -ENV GDB_PATH=/msan-libs/bin/gdb +ENV NO_MSAN_PATH=/msan-libs/bin +ENV GDB_PATH=$NO_MSAN_PATH/gdb ENV MSAN_LIBDIR=/msan-libs -ENV MSAN_SYMBOLIZER_PATH=/msan-libs/bin/llvm-symbolizer-msan +ENV MSAN_SYMBOLIZER_PATH=$NO_MSAN_PATH/llvm-symbolizer-msan -ENV PATH=$MSAN_LIBDIR/bin:$PATH +ENV PATH=$NO_MSAN_PATH/bin:$PATH # hadolint ignore=SC2046 RUN . /etc/os-release \ From 640b0a542e7965eaf481827d423944a443bdf594 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 16:58:25 +1000 Subject: [PATCH 08/50] msan: add ctest for unit tests without LD_LIBRARY_PATH --- ci_build_images/msan.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index d86baf04..4faf873c 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -23,6 +23,7 @@ RUN . /etc/os-release \ && mkdir $MSAN_LIBDIR/bin \ && printf "#!/bin/sh\nunset LD_LIBRARY_PATH\nexec llvm-symbolizer-%s \"\$@\"" "${CLANG_VERSION}" > $MSAN_SYMBOLIZER_PATH \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/gdb "$@"' > $GDB_PATH \ + && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/ctest "$@"' > "$NO_MSAN_PATH"/ctest \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ && echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" > /etc/apt/sources.list.d/llvm-toolchain.list \ From 0590d11d6139a68708361a09fb7c707fcdb450b3 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 16:59:13 +1000 Subject: [PATCH 09/50] msan: use cmake --build --verbose --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 35a16280..0a0c34ba 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && make -j%(kw:jobs)s', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 2fa622fb4ebb767d12f07d1940acb38f6ddaa589 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 17:40:34 +1000 Subject: [PATCH 10/50] msan: cflags/cxxflags to server MDEV-34996 Unit tests run all ok. WITH_SAFE_MALLOC=OFF is default in RelWithDebInfo mode. --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 0a0c34ba..14134ca5 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DCMAKE_C_FLAGS="-O2 -Wno-unused-command-line-argument -fdebug-macro" -DCMAKE_CXX_FLAGS="-stdlib=libc++ -O2 -Wno-unused-command-line-argument -fdebug-macro" -DWITH_EMBEDDED_SERVER=OFF -DWITH_UNIT_TESTS=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_SAFEMALLOC=OFF -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 9d949940cc4c471ab82c59a2441d295e72a9668f Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 24 Sep 2024 17:53:42 +1000 Subject: [PATCH 11/50] msan: remove skip-tests - include in server as required --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 14134ca5..f5099e64 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -349,7 +349,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cd mysql-test && LD_LIBRARY_PATH=/msan-libs MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 ./mtr --mem --big-test --force --retry=0 --skip-test=".*compression.*|rpl\.rpl_non_direct_row_mixing_engines|perfschema\.table_io_aggregate_hist_\du_\dt|perfschema\.transaction_nested_events|perfschema\.events_waits_current_MDEV-29091|perfschema\.memory_aggregate_no_a_no_u_no_h|main\.show_explain|main\.show_analyze_json" --max-test-fail=100 --parallel=$(expr %(kw:jobs)s \* 2)', + 'cd mysql-test && LD_LIBRARY_PATH=/msan-libs MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 ./mtr --mem --big-test --force --retry=0 --max-test-fail=100 --parallel=$(expr %(kw:jobs)s \* 2)', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), ), ], From a3864fca1716816e5122bb643e7ee15646d74b63 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 09:57:47 +1000 Subject: [PATCH 12/50] msan: add MSAN_OPTIONS in env for human user of image --- ci_build_images/msan.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 4faf873c..a231bc7c 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -142,6 +142,7 @@ RUN . /etc/os-release \ libsnappy-dev \ && chmod -R a+x $MSAN_LIBDIR/bin/* +ENV MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" From d87c984687befcebb5ee457c71b5cb775d03fdca Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 10:15:29 +1000 Subject: [PATCH 13/50] msan: ninja by default human users Also convient CFLAGS and MSAN environment variables. --- ci_build_images/msan.Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index a231bc7c..5b546fca 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -142,12 +142,15 @@ RUN . /etc/os-release \ libsnappy-dev \ && chmod -R a+x $MSAN_LIBDIR/bin/* +# For convience of human users of msan image ENV MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" -# rr installation -RUN apt-get install --no-install-recommends -y libcapnp-0.9.2 \ + +ENV CMAKE_GENERATOR=Ninja +# rr installation + ninja +RUN apt-get install --no-install-recommends -y libcapnp-0.9.2 ninja-build \ && apt-get clean # unknown rr From 4445bd0dd2453a78f02578b63c2c271ae45d5a3f Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 12:06:16 +1000 Subject: [PATCH 14/50] msan+rr: debian:11/12 compat --- ci_build_images/msan.Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 5b546fca..f0ba9489 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -150,7 +150,12 @@ ENV CXXFLAGS="$CFLAGS" ENV CMAKE_GENERATOR=Ninja # rr installation + ninja -RUN apt-get install --no-install-recommends -y libcapnp-0.9.2 ninja-build \ +RUN . /etc/os-release \ + && if [ "${VERSION_CODENAME}" = "bullseye" ]; then \ + apt-get install --no-install-recommends -y libcapnp-0.7.0 ninja-build; \ + else \ + apt-get install --no-install-recommends -y libcapnp-0.9.2 ninja-build; \ + fi \ && apt-get clean # unknown rr From 39326caac3b9b0fdfdcf31f0c2b9834243390c2b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 12:36:47 +1000 Subject: [PATCH 15/50] msan+rr: typo in config --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index f0ba9489..2e205bc8 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -142,7 +142,7 @@ RUN . /etc/os-release \ libsnappy-dev \ && chmod -R a+x $MSAN_LIBDIR/bin/* -# For convience of human users of msan image +# For convenience of human users of msan image ENV MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" From 8d04a9cb1589950485ce558126267f7a5f3bea21 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 15:31:33 +1000 Subject: [PATCH 16/50] msan: correct PATH to non-instrumented things. Otherwise these sorts of error in testing: LD_LIBRARY_PATH=/msan-libs/ /usr/bin/ctest /usr/bin/ctest: symbol lookup error: /msan-libs/libgmp.so.10: undefined symbol: __msan_va_arg_overflow_size_tls --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 2e205bc8..7189da2a 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -11,7 +11,7 @@ ENV GDB_PATH=$NO_MSAN_PATH/gdb ENV MSAN_LIBDIR=/msan-libs ENV MSAN_SYMBOLIZER_PATH=$NO_MSAN_PATH/llvm-symbolizer-msan -ENV PATH=$NO_MSAN_PATH/bin:$PATH +ENV PATH=$NO_MSAN_PATH:$PATH # hadolint ignore=SC2046 RUN . /etc/os-release \ From c4bb70c6aebe1910721f9e12e745a8270fb66a9c Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 15:31:49 +1000 Subject: [PATCH 17/50] msan: instrument libxml2 for connect tests --- ci_build_images/msan.Dockerfile | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 7189da2a..7686e126 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -111,8 +111,17 @@ RUN . /etc/os-release \ --disable-assembly \ && make -j "$(nproc)" \ && cp -aL .libs/libgmp.so* $MSAN_LIBDIR \ + && rm -rf -- * \ + && apt-get source libxml2 \ + && aclocal \ + && automake --add-missing \ + && mv libxml2-*/* . \ + && ./configure --without-python --without-docbook --with-icu \ + && make -j "$(nproc)" \ + && cp -aL .libs/libxml2.so* $MSAN_LIBDIR \ && rm -rf -- * + ENV CFLAGS="$CFLAGS -Wno-conversion" ENV CXXFLAGS="$CFLAGS" From 77507872cff2bcd56bd1a73433fe9782143f7347 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 25 Sep 2024 15:50:26 +1000 Subject: [PATCH 18/50] msan: add odbc for connect tests --- ci_build_images/msan.Dockerfile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 7686e126..2f19b741 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -119,9 +119,19 @@ RUN . /etc/os-release \ && ./configure --without-python --without-docbook --with-icu \ && make -j "$(nproc)" \ && cp -aL .libs/libxml2.so* $MSAN_LIBDIR \ + && rm -rf -- * \ + && apt-get source unixodbc-dev \ + && mv unixodb-dev-*/* . \ + && libtoolize \ + && aclocal \ + && autoheader \ + && autoconf \ + && automake --add-missing \ + && ./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=no \ + && make -j "$(nproc)" \ + && mv ./DriverManager/.libs/libodbc.so* . \ && rm -rf -- * - ENV CFLAGS="$CFLAGS -Wno-conversion" ENV CXXFLAGS="$CFLAGS" From 86045937ea5dcdbda48b5e2e5b5bda97090fca09 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 30 Sep 2024 17:47:18 +1000 Subject: [PATCH 19/50] msan: fix xml --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 2f19b741..6eb8a514 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -113,9 +113,9 @@ RUN . /etc/os-release \ && cp -aL .libs/libgmp.so* $MSAN_LIBDIR \ && rm -rf -- * \ && apt-get source libxml2 \ + && mv libxml2-*/* . \ && aclocal \ && automake --add-missing \ - && mv libxml2-*/* . \ && ./configure --without-python --without-docbook --with-icu \ && make -j "$(nproc)" \ && cp -aL .libs/libxml2.so* $MSAN_LIBDIR \ From 2c223b727fca48313845cc3ac6ee1feb8a6df240 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 30 Sep 2024 17:48:17 +1000 Subject: [PATCH 20/50] msan: fix unixodbc-dev And the --force is for debian:11 compat where the files exist in the tarball. --- ci_build_images/msan.Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 6eb8a514..9cbf6961 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -121,16 +121,16 @@ RUN . /etc/os-release \ && cp -aL .libs/libxml2.so* $MSAN_LIBDIR \ && rm -rf -- * \ && apt-get source unixodbc-dev \ - && mv unixodb-dev-*/* . \ - && libtoolize \ + && mv unixodbc-*/* . \ + && libtoolize --force \ && aclocal \ && autoheader \ && autoconf \ && automake --add-missing \ && ./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=no \ && make -j "$(nproc)" \ - && mv ./DriverManager/.libs/libodbc.so* . \ - && rm -rf -- * + && mv ./DriverManager/.libs/libodbc.so* $MSAN_LIBDIR \ + && rm -rf -- * \ ENV CFLAGS="$CFLAGS -Wno-conversion" ENV CXXFLAGS="$CFLAGS" From 926dfa14fac2fd7b974c1aaf42127fa8ac75456e Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 30 Sep 2024 17:49:19 +1000 Subject: [PATCH 21/50] msan: instrument libfmt (used in 10.11+) --- ci_build_images/msan.Dockerfile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 9cbf6961..fdb6dd0f 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -131,6 +131,14 @@ RUN . /etc/os-release \ && make -j "$(nproc)" \ && mv ./DriverManager/.libs/libodbc.so* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source libfmt-dev \ + && mv fmtlib-*/* . \ + && mkdir build \ + && cmake -DFMT_DOC=OFF -DFMT_TEST=OFF -DBUILD_SHARED_LIBS=on -DFMT_PEDANTIC=on -S . -B build \ + && cmake --build build \ + && mv build/libfmt.so* $MSAN_LIBDIR \ + && rm -rf -- * \ + && ls -la $MSAN_LIBDIR ENV CFLAGS="$CFLAGS -Wno-conversion" ENV CXXFLAGS="$CFLAGS" From 45a7b72df3d360da486eb0a79537a5bfa25eca9a Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 4 Oct 2024 14:31:43 +1000 Subject: [PATCH 22/50] msan: instrument libssl (oepnssl) - galera maybe server --- ci_build_images/msan.Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index fdb6dd0f..6f0903df 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -138,6 +138,12 @@ RUN . /etc/os-release \ && cmake --build build \ && mv build/libfmt.so* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source libssl-dev \ + && mv openssl-*/* . \ + && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand enable-msan \ + && make -j "$(nproc)" build_libs \ + && mv *.so* $MSAN_LIBDIR \ + && rm -rf -- * \ && ls -la $MSAN_LIBDIR ENV CFLAGS="$CFLAGS -Wno-conversion" From 18a9703c0bc95f66cf02df91be10a13c11987360 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 4 Oct 2024 15:39:07 +1000 Subject: [PATCH 23/50] msan: install c++abi and unwind libraries Use cmake to install --- ci_build_images/msan.Dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 6f0903df..1ef8de39 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -55,11 +55,9 @@ RUN . /etc/os-release \ -DLLVM_ENABLE_RUNTIMES="${LLVM_ENABLE_RUNTIMES}" \ $(if [ "${CLANG_VERSION}" = 19 ]; then echo "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF"; fi) \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ - && make -C build -j "$(nproc)" \ - && cp -aL build/lib/libc++.so* $MSAN_LIBDIR \ + && cmake --build build --parallel "$(nproc)" \ + && cp -aL build/lib/lib*.so* $MSAN_LIBDIR \ && cp -a build/include/c++/v1 "$MSAN_LIBDIR/include" \ - && rm $MSAN_LIBDIR/libc++.so \ - && ln -sf $MSAN_LIBDIR/libc++.so.1 $MSAN_LIBDIR/libc++.so \ && rm -rf -- * ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" From 050e294581b8640df6d5f10a560cef4ce41d557b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 4 Oct 2024 15:39:29 +1000 Subject: [PATCH 24/50] msan: instrument pcre (the 2_8 version anwyay) --- ci_build_images/msan.Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 1ef8de39..8ede9314 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -142,6 +142,12 @@ RUN . /etc/os-release \ && make -j "$(nproc)" build_libs \ && mv *.so* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source libpcre2-dev \ + && mv pcre2-*/* . \ + && cmake -S . -B build/ -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=ON -DCMAKE_C_FLAGS="${CFLAGS} -Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree" \ + && cmake --build build/ \ + && mv ./build/libpcre2*so* $MSAN_LIBDIR \ + && rm -rf -- * \ && ls -la $MSAN_LIBDIR ENV CFLAGS="$CFLAGS -Wno-conversion" From 419dc478ad7f3c901cdc64408bd61e55a888dbbd Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 9 Oct 2024 15:50:29 +1100 Subject: [PATCH 25/50] msan: hadolint fix openssl --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 8ede9314..716881b2 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -140,7 +140,7 @@ RUN . /etc/os-release \ && mv openssl-*/* . \ && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand enable-msan \ && make -j "$(nproc)" build_libs \ - && mv *.so* $MSAN_LIBDIR \ + && mv ./*.so* $MSAN_LIBDIR \ && rm -rf -- * \ && apt-get source libpcre2-dev \ && mv pcre2-*/* . \ From 26bd7451281ea305c066ef8d04752400886d73b8 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 9 Oct 2024 18:33:41 +1100 Subject: [PATCH 26/50] msan build: reduce options (WIP) --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index f5099e64..99ad2bc5 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,TOKUDB,MROONGA,OQGRAPH,ROCKSDB,CONNECT,SPIDER}=NO -DWITH_{ZLIB,SSL,PCRE}=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From d04265a00acbfa47037ed332968e01273b7c6b0d Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 15 Nov 2024 12:11:31 +1100 Subject: [PATCH 27/50] bbw debian: MARIADB_BRANCH 11.1 -> 11.4 --- ci_build_images/debian.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/debian.Dockerfile b/ci_build_images/debian.Dockerfile index 78923dca..a04ddbef 100644 --- a/ci_build_images/debian.Dockerfile +++ b/ci_build_images/debian.Dockerfile @@ -5,7 +5,7 @@ ARG BASE_IMAGE FROM "$BASE_IMAGE" -ARG MARIADB_BRANCH=11.1 +ARG MARIADB_BRANCH=11.4 LABEL maintainer="MariaDB Buildbot maintainers" ENV CARGO_NET_GIT_FETCH_WITH_CLI=true From 7c3b9a0e104ed348e666d6e7d577f016070dabdd Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 15 Nov 2024 18:18:21 +1100 Subject: [PATCH 28/50] msan: disblae system and nukma, Force WITH_SSL-bundled. --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 99ad2bc5..e4fbe355 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_NUMA=NO -DWITH_SYSTEMD=no -DWITH_SSL=bundled -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 4328064180887ad30bb476c896eff8cf8ad1a94b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 15 Nov 2024 18:19:40 +1100 Subject: [PATCH 29/50] msan: add libxcrypt instrumented for libcrypt library (broken) --- ci_build_images/msan.Dockerfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 716881b2..71940160 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -24,6 +24,7 @@ RUN . /etc/os-release \ && printf "#!/bin/sh\nunset LD_LIBRARY_PATH\nexec llvm-symbolizer-%s \"\$@\"" "${CLANG_VERSION}" > $MSAN_SYMBOLIZER_PATH \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/gdb "$@"' > $GDB_PATH \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/ctest "$@"' > "$NO_MSAN_PATH"/ctest \ + && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /bin/grep "$@"' > "$NO_MSAN_PATH"/grep \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ && echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" > /etc/apt/sources.list.d/llvm-toolchain.list \ @@ -138,7 +139,7 @@ RUN . /etc/os-release \ && rm -rf -- * \ && apt-get source libssl-dev \ && mv openssl-*/* . \ - && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand enable-msan \ + && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" = 19 ]; then echo no-asm enable-msan; fi) \ && make -j "$(nproc)" build_libs \ && mv ./*.so* $MSAN_LIBDIR \ && rm -rf -- * \ @@ -148,6 +149,13 @@ RUN . /etc/os-release \ && cmake --build build/ \ && mv ./build/libpcre2*so* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source libxcrypt \ + && mv libxcrypt-*/* . \ + && ./autogen.sh \ + && ./configure --disable-xcrypt-compat-files --enable-obsolete-api=glibc \ + && make -j "$(nproc)" libcrypt.la \ + && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ + && rm -rf -- * \ && ls -la $MSAN_LIBDIR ENV CFLAGS="$CFLAGS -Wno-conversion" From edbe8ad0a23da22a5cfd865ae2b7415ffcce4498 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 15 Nov 2024 18:20:17 +1100 Subject: [PATCH 30/50] msan: remove openssl instrumented Didn't instrument sufficiently. MSAN errors resultin the form: ==9000==WARNING: MemorySanitizer: use-of-uninitialized-value [Detaching after fork from child process 9003] #0 0x55c87cbda03f in my_base64_encode /source/mysys/base64.c:113:13 #1 0x55c87af96efb in calculate_server_uid(char*) /source/sql/mysqld.cc:9889:3 #2 0x55c87af96efb in init_common_variables() /source/sql/mysqld.cc:3882:7 #3 0x55c87af9111e in mysqld_main(int, char**) /source/sql/mysqld.cc:5546:7 #4 0x7f6d94ab5249 (/lib/x86_64-linux-gnu/libc.so.6+0x27249) (BuildId: c047672cae7964324658491e7dee26748ae5d2f8) #5 0x7f6d94ab5304 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x27304) (BuildId: c047672cae7964324658491e7dee26748ae5d2f8) #6 0x55c87aeef130 in _start (/build/sql/mariadbd+0x6ee130) (BuildId: abe0c6d0a0f0bdcee26c5e1f69353335cca3bd8a) The sha1 has that is being encoded wasn't maked as initialized though the openssl libs wrote the hash there. --- ci_build_images/msan.Dockerfile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 71940160..0d393ea5 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -137,12 +137,6 @@ RUN . /etc/os-release \ && cmake --build build \ && mv build/libfmt.so* $MSAN_LIBDIR \ && rm -rf -- * \ - && apt-get source libssl-dev \ - && mv openssl-*/* . \ - && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" = 19 ]; then echo no-asm enable-msan; fi) \ - && make -j "$(nproc)" build_libs \ - && mv ./*.so* $MSAN_LIBDIR \ - && rm -rf -- * \ && apt-get source libpcre2-dev \ && mv pcre2-*/* . \ && cmake -S . -B build/ -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=ON -DCMAKE_C_FLAGS="${CFLAGS} -Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree" \ From 7944406e9f14447826fe98bc19edb7414829c721 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 12:57:16 +1100 Subject: [PATCH 31/50] msan: clang 19 minimium for addition libclang-$V-dev/libllvmlibc-$V-dev --- ci_build_images/msan.Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 0d393ea5..52d1ebd9 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -38,8 +38,8 @@ RUN . /etc/os-release \ libc++-${CLANG_VERSION}-dev \ llvm-${CLANG_VERSION} \ automake \ - && if [ "${CLANG_VERSION}" = 19 ]; then \ - apt-get -y install --no-install-recommends libclang-19-dev libllvmlibc-19-dev; fi \ + && if [ "${CLANG_VERSION}" -ge 19 ]; then \ + apt-get -y install --no-install-recommends libclang-${CLANG_VERSION}-dev libllvmlibc-${CLANG_VERSION}-dev; fi \ && update-alternatives \ --verbose \ --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ From 13b5b8ac5bfb28707ac28d7ded8e6f6431d35d4b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 13:26:18 +1100 Subject: [PATCH 32/50] msan: support clang snapshot version --- ci_build_images/msan.Dockerfile | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 52d1ebd9..e1a71265 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -2,6 +2,11 @@ # this is to create images with MSAN for BB workers ARG CLANG_VERSION=15 +# Marker to make it possible to build a dev msan builder +# from the nightly clang versions as they are in a differently +# name repo +ENV CLANG_DEV_VERSION=20 + WORKDIR /tmp/msan ENV CC=clang @@ -26,10 +31,14 @@ RUN . /etc/os-release \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /usr/bin/ctest "$@"' > "$NO_MSAN_PATH"/ctest \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /bin/grep "$@"' > "$NO_MSAN_PATH"/grep \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ - && echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ - http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" > /etc/apt/sources.list.d/llvm-toolchain.list \ - && echo "deb-src [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] \ - http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${CLANG_VERSION} main" >> /etc/apt/sources.list.d/llvm-toolchain.list \ + && if [ "${CLANG_VERSION}" -ge "${CLANG_DEV_VERSION}" ]; then \ + export LLVM_DIR="llvm-toolchain-snapshot-${CLANG_VERSION}" ; \ + export LLVM_DEB="${VERSION_CODENAME}" ; \ + else \ + export LLVM_DIR="llvm-toolchain-${CLANG_VERSION}-${CLANG_VERSION}" ; \ + export LLVM_DEB="${VERSION_CODENAME}-${CLANG_VERSION}"; fi \ + && for v in deb deb-src; do \ + echo "$v [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${LLVM_DEB} main" >> /etc/apt/sources.list.d/llvm-toolchain.list; done \ && apt-get update \ && apt-get -y install --no-install-recommends \ clang-${CLANG_VERSION} \ @@ -45,7 +54,7 @@ RUN . /etc/os-release \ --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ --slave /usr/bin/clang++ clang++ /usr/bin/clang++-"${CLANG_VERSION}" \ && apt-get source libc++-${CLANG_VERSION}-dev \ - && mv llvm-toolchain-${CLANG_VERSION}-${CLANG_VERSION}*/* . \ + && mv "$LLVM_DIR"*/* . \ && mkdir build \ && cmake \ -S runtimes \ @@ -54,7 +63,7 @@ RUN . /etc/os-release \ -DCMAKE_C_COMPILER=clang-${CLANG_VERSION} \ -DCMAKE_CXX_COMPILER=clang++-${CLANG_VERSION} \ -DLLVM_ENABLE_RUNTIMES="${LLVM_ENABLE_RUNTIMES}" \ - $(if [ "${CLANG_VERSION}" = 19 ]; then echo "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF"; fi) \ + $(if [ "${CLANG_VERSION}" -ge 19 ]; then echo "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF"; fi) \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ && cmake --build build --parallel "$(nproc)" \ && cp -aL build/lib/lib*.so* $MSAN_LIBDIR \ From c726e99b44ad28b96e8c73f8a96de8bf27783c12 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 13:57:05 +1100 Subject: [PATCH 33/50] msan: no t on /tmp Weird permission issue apt-sourcing the snapshot llvm about _apt user not having access to root files --- ci_build_images/msan.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index e1a71265..52049da9 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -20,6 +20,7 @@ ENV PATH=$NO_MSAN_PATH:$PATH # hadolint ignore=SC2046 RUN . /etc/os-release \ + && chmod a-t /tmp \ && if [ "${CLANG_VERSION}" -gt 17 ]; then \ export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"; \ else \ From e52ffa0131846d5115190b00ebbc85eb591cf4ed Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 13:57:32 +1100 Subject: [PATCH 34/50] msan: add cppunit and subunit instrumentation for galera --- ci_build_images/msan.Dockerfile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 52049da9..537c5bbc 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -160,6 +160,20 @@ RUN . /etc/os-release \ && make -j "$(nproc)" libcrypt.la \ && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source cppunit \ + && mv cppunit-*/* . \ + && ./configure \ + && make -j "$(nproc)" \ + && mv ./src/cppunit/.libs/libcppunit.so* $MSAN_LIBDIR \ + && rm -rf -- * \ + && apt-get install libcppunit-dev \ + && apt-get source subunit \ + && mv subunit-*/* . \ + && autoreconf -vi \ + && ./configure \ + && make libsubunit.la \ + && mv .libs/libsubunit.so* $MSAN_LIBDIR \ + && rm -rf -- * \ && ls -la $MSAN_LIBDIR ENV CFLAGS="$CFLAGS -Wno-conversion" From ca90ffdb69cef5a77c45bdd58578611450177dae Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 14:14:18 +1100 Subject: [PATCH 35/50] Revert "msan: remove openssl instrumented" This reverts commit 92566d91406bf4a4de6f3e84a431a3fc178005c1. --- ci_build_images/msan.Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 537c5bbc..5dea5ef5 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -147,6 +147,12 @@ RUN . /etc/os-release \ && cmake --build build \ && mv build/libfmt.so* $MSAN_LIBDIR \ && rm -rf -- * \ + && apt-get source libssl-dev \ + && mv openssl-*/* . \ + && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" = 19 ]; then echo no-asm enable-msan; fi) \ + && make -j "$(nproc)" build_libs \ + && mv ./*.so* $MSAN_LIBDIR \ + && rm -rf -- * \ && apt-get source libpcre2-dev \ && mv pcre2-*/* . \ && cmake -S . -B build/ -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=ON -DCMAKE_C_FLAGS="${CFLAGS} -Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree" \ From 72db5803bd241c79b45306b1175f0f8445e000bc Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 19 Nov 2024 14:16:58 +1100 Subject: [PATCH 36/50] msan: openssl build with $CFLAGS and for ge 19 --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 5dea5ef5..49832720 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -149,7 +149,7 @@ RUN . /etc/os-release \ && rm -rf -- * \ && apt-get source libssl-dev \ && mv openssl-*/* . \ - && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" = 19 ]; then echo no-asm enable-msan; fi) \ + && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" -ge 19 ]; then echo no-asm enable-msan; fi) $CFLAGS \ && make -j "$(nproc)" build_libs \ && mv ./*.so* $MSAN_LIBDIR \ && rm -rf -- * \ From b7227969d6ccd98a7aad55556c5e0d6ed8d4810f Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 10:13:25 +1100 Subject: [PATCH 37/50] msan: disable libxcrypt instrumented library --- ci_build_images/msan.Dockerfile | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 49832720..33221b22 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -158,15 +158,17 @@ RUN . /etc/os-release \ && cmake -S . -B build/ -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=ON -DCMAKE_C_FLAGS="${CFLAGS} -Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree" \ && cmake --build build/ \ && mv ./build/libpcre2*so* $MSAN_LIBDIR \ - && rm -rf -- * \ - && apt-get source libxcrypt \ - && mv libxcrypt-*/* . \ - && ./autogen.sh \ - && ./configure --disable-xcrypt-compat-files --enable-obsolete-api=glibc \ - && make -j "$(nproc)" libcrypt.la \ - && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ - && rm -rf -- * \ - && apt-get source cppunit \ + && rm -rf -- * + +#RUN apt-get source libxcrypt \ +# && mv libxcrypt-*/* . \ +# && ./autogen.sh \ +# && ./configure --disable-xcrypt-compat-files --enable-obsolete-api=glibc \ +# && make -j "$(nproc)" libcrypt.la \ +# && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ +# && rm -rf -- * + +RUN apt-get source cppunit \ && mv cppunit-*/* . \ && ./configure \ && make -j "$(nproc)" \ From 109bb157fe47347c7447e5c7797936017fb94b62 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 10:14:06 +1100 Subject: [PATCH 38/50] msan: fix cppunit-dev install as dependency for libsubunit --- ci_build_images/msan.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 33221b22..69bd9085 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -174,7 +174,7 @@ RUN apt-get source cppunit \ && make -j "$(nproc)" \ && mv ./src/cppunit/.libs/libcppunit.so* $MSAN_LIBDIR \ && rm -rf -- * \ - && apt-get install libcppunit-dev \ + && apt-get install -y libcppunit-dev \ && apt-get source subunit \ && mv subunit-*/* . \ && autoreconf -vi \ From e5d3b1c561ed2eeee0f325b19942c48d8bf4a766 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 10:15:50 +1100 Subject: [PATCH 39/50] msan: fix gmp compile fix for all versions (remove < bookworm support) --- ci_build_images/msan.Dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 69bd9085..5221cd14 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -112,10 +112,8 @@ RUN . /etc/os-release \ && apt-get source gmp \ && mv gmp-*/* . \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ - && if [ "${VERSION_CODENAME}" = "bookworm" ]; then \ - sed -e '/^.*"doc\/Makefile".*/d;s/doc\/Makefile //;' -i.bak configure \ - && sed -e 's/^\(SUBDIRS = .*\) doc$/\1/;' -i.bak Makefile.in; \ - fi \ + && sed -e '/^.*"doc\/Makefile".*/d;s/doc\/Makefile //;' -i.bak configure \ + && sed -e 's/^\(SUBDIRS = .*\) doc$/\1/;' -i.bak Makefile.in \ && ./configure \ --disable-assembly \ && make -j "$(nproc)" \ From 43eb7264f34ddef5e16b08ff3e0c4f222c8305c3 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 16:56:03 +1100 Subject: [PATCH 40/50] msan: save copy of msan instrumented source for now. --- ci_build_images/msan.Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 5221cd14..de65d715 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -7,7 +7,7 @@ ARG CLANG_VERSION=15 # name repo ENV CLANG_DEV_VERSION=20 -WORKDIR /tmp/msan +WORKDIR /msan-build ENV CC=clang ENV CXX=clang++ @@ -20,7 +20,6 @@ ENV PATH=$NO_MSAN_PATH:$PATH # hadolint ignore=SC2046 RUN . /etc/os-release \ - && chmod a-t /tmp \ && if [ "${CLANG_VERSION}" -gt 17 ]; then \ export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind"; \ else \ @@ -200,7 +199,6 @@ RUN . /etc/os-release \ && create-cracklib-dict ./dicts/cracklib-small \ && cp -aL lib/.libs/*.so* $MSAN_LIBDIR \ && rm -rf -- * \ - && rm -rf /tmp/msan \ && apt-get clean \ && apt-get -y purge \ bzip2 \ From a800d4cba3546e5f9e83b95dd3f537767275c8c7 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 16:57:16 +1100 Subject: [PATCH 41/50] msan: save llvm instrumented build during build process --- ci_build_images/msan.Dockerfile | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index de65d715..0d69a534 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -32,11 +32,12 @@ RUN . /etc/os-release \ && printf '#!/bin/sh\nunset LD_LIBRARY_PATH\nexec /bin/grep "$@"' > "$NO_MSAN_PATH"/grep \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ && if [ "${CLANG_VERSION}" -ge "${CLANG_DEV_VERSION}" ]; then \ - export LLVM_DIR="llvm-toolchain-snapshot-${CLANG_VERSION}" ; \ + export LLVM_PKG="llvm-toolchain-snapshot" ; \ export LLVM_DEB="${VERSION_CODENAME}" ; \ else \ - export LLVM_DIR="llvm-toolchain-${CLANG_VERSION}-${CLANG_VERSION}" ; \ + export LLVM_PKG="llvm-toolchain-${CLANG_VERSION}" ; \ export LLVM_DEB="${VERSION_CODENAME}-${CLANG_VERSION}"; fi \ + && export LLVM_DIR="${LLVM_PKG}-${CLANG_VERSION}" \ && for v in deb deb-src; do \ echo "$v [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${LLVM_DEB} main" >> /etc/apt/sources.list.d/llvm-toolchain.list; done \ && apt-get update \ @@ -53,22 +54,17 @@ RUN . /etc/os-release \ --verbose \ --install /usr/bin/clang clang /usr/bin/clang-"${CLANG_VERSION}" 20 \ --slave /usr/bin/clang++ clang++ /usr/bin/clang++-"${CLANG_VERSION}" \ - && apt-get source libc++-${CLANG_VERSION}-dev \ - && mv "$LLVM_DIR"*/* . \ - && mkdir build \ - && cmake \ - -S runtimes \ - -B build \ + && apt-get source "${LLVM_PKG}" \ + && mkdir -p ll-build \ + && cd ll-build \ + && cmake -S ../"$LLVM_DIR"*/runtimes \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER=clang-${CLANG_VERSION} \ - -DCMAKE_CXX_COMPILER=clang++-${CLANG_VERSION} \ -DLLVM_ENABLE_RUNTIMES="${LLVM_ENABLE_RUNTIMES}" \ $(if [ "${CLANG_VERSION}" -ge 19 ]; then echo "-DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF"; fi) \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ - && cmake --build build --parallel "$(nproc)" \ - && cp -aL build/lib/lib*.so* $MSAN_LIBDIR \ - && cp -a build/include/c++/v1 "$MSAN_LIBDIR/include" \ - && rm -rf -- * + && cmake --build . --target cxx --target cxxabi --parallel "$(nproc)" \ + && cp -aL lib/lib*.so* "$MSAN_LIBDIR" \ + && cp -a include/c++/v1 "$MSAN_LIBDIR/include" ENV CFLAGS="-fno-omit-frame-pointer -O2 -g -fsanitize=memory" ENV CXXFLAGS="$CFLAGS" From e15cc3147e78bee9667696c1a6b91b851c5add6a Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 16:59:03 +1100 Subject: [PATCH 42/50] msan: save all the instrumented libraries (and fix cracklib to build). --- ci_build_images/msan.Dockerfile | 90 +++++++++++++++------------------ 1 file changed, 40 insertions(+), 50 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 0d69a534..501eba21 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -72,7 +72,7 @@ ENV LDFLAGS="-fsanitize=memory" RUN . /etc/os-release \ && apt-get source gnutls28 \ - && mv gnutls28-*/* . \ + && cd gnutls28-* \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ && aclocal \ && automake --add-missing \ @@ -84,28 +84,26 @@ RUN . /etc/os-release \ --disable-guile \ && make -j "$(nproc)" \ && cp -aL lib/.libs/libgnutls.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ \ && apt-get source nettle \ - && mv nettle-*/* . \ + && cd nettle-* \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ && ./configure \ --disable-assembler \ && make -j "$(nproc)" \ && cp -aL .lib/lib*.so* $MSAN_LIBDIR \ - && rm -rf -- * \ - \ + && cd $OLDPWD \ && apt-get source libidn2 \ - && mv libidn2-*/* . \ + && cd libidn2-* \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ && ./configure \ --enable-valgrind-tests=no \ && make -j "$(nproc)" \ && cp -aL lib/.libs/libidn2.so* $MSAN_LIBDIR \ - && rm -rf -- * \ - \ + && cd $OLDPWD \ && apt-get source gmp \ - && mv gmp-*/* . \ + && cd gmp-* \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ && sed -e '/^.*"doc\/Makefile".*/d;s/doc\/Makefile //;' -i.bak configure \ && sed -e 's/^\(SUBDIRS = .*\) doc$/\1/;' -i.bak Makefile.in \ @@ -113,17 +111,17 @@ RUN . /etc/os-release \ --disable-assembly \ && make -j "$(nproc)" \ && cp -aL .libs/libgmp.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get source libxml2 \ - && mv libxml2-*/* . \ + && cd libxml2-* . \ && aclocal \ && automake --add-missing \ && ./configure --without-python --without-docbook --with-icu \ && make -j "$(nproc)" \ && cp -aL .libs/libxml2.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get source unixodbc-dev \ - && mv unixodbc-*/* . \ + && cd unixodbc-* \ && libtoolize --force \ && aclocal \ && autoheader \ @@ -132,69 +130,52 @@ RUN . /etc/os-release \ && ./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=no \ && make -j "$(nproc)" \ && mv ./DriverManager/.libs/libodbc.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get source libfmt-dev \ - && mv fmtlib-*/* . \ + && cd fmtlib-* \ && mkdir build \ && cmake -DFMT_DOC=OFF -DFMT_TEST=OFF -DBUILD_SHARED_LIBS=on -DFMT_PEDANTIC=on -S . -B build \ && cmake --build build \ && mv build/libfmt.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get source libssl-dev \ - && mv openssl-*/* . \ + && cd openssl-* \ && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" -ge 19 ]; then echo no-asm enable-msan; fi) $CFLAGS \ && make -j "$(nproc)" build_libs \ && mv ./*.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get source libpcre2-dev \ - && mv pcre2-*/* . \ + && cd pcre2-* \ && cmake -S . -B build/ -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=ON -DCMAKE_C_FLAGS="${CFLAGS} -Dregcomp=PCRE2regcomp -Dregexec=PCRE2regexec -Dregerror=PCRE2regerror -Dregfree=PCRE2regfree" \ && cmake --build build/ \ && mv ./build/libpcre2*so* $MSAN_LIBDIR \ - && rm -rf -- * - -#RUN apt-get source libxcrypt \ -# && mv libxcrypt-*/* . \ -# && ./autogen.sh \ -# && ./configure --disable-xcrypt-compat-files --enable-obsolete-api=glibc \ -# && make -j "$(nproc)" libcrypt.la \ -# && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ -# && rm -rf -- * - -RUN apt-get source cppunit \ - && mv cppunit-*/* . \ + && cd $OLDPWD \ + && apt-get source cppunit \ + && cd cppunit-* \ && ./configure \ && make -j "$(nproc)" \ && mv ./src/cppunit/.libs/libcppunit.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get install -y libcppunit-dev \ && apt-get source subunit \ - && mv subunit-*/* . \ + && cd subunit-* \ && autoreconf -vi \ && ./configure \ && make libsubunit.la \ && mv .libs/libsubunit.so* $MSAN_LIBDIR \ - && rm -rf -- * \ - && ls -la $MSAN_LIBDIR - -ENV CFLAGS="$CFLAGS -Wno-conversion" -ENV CXXFLAGS="$CFLAGS" - -RUN . /etc/os-release \ + && cd $OLDPWD \ && apt-get source cracklib2 \ - && mv cracklib2-*/* . \ + && cd cracklib2-* \ && mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ - && if [ "${VERSION_CODENAME}" = "bookworm" ]; then \ - aclocal \ - && automake --add-missing; \ - fi \ - && ./configure \ + && aclocal \ + && libtoolize \ + && automake --add-missing \ + && autoreconf \ + && ./configure --without-python \ --with-default-dict=/usr/share/dict/cracklib-small \ && make -j "$(nproc)" \ - && make install \ - && create-cracklib-dict ./dicts/cracklib-small \ && cp -aL lib/.libs/*.so* $MSAN_LIBDIR \ - && rm -rf -- * \ + && cd $OLDPWD \ && apt-get clean \ && apt-get -y purge \ bzip2 \ @@ -203,7 +184,16 @@ RUN . /etc/os-release \ liblzma-dev \ liblzo2-dev \ libsnappy-dev \ - && chmod -R a+x $MSAN_LIBDIR/bin/* + && chmod -R a+x $MSAN_LIBDIR/bin/* \ + && find $MSAN_LIBDIR -ls + +#RUN apt-get source libxcrypt \ +# && mv libxcrypt-*/* . \ +# && ./autogen.sh \ +# && ./configure --disable-xcrypt-compat-files --enable-obsolete-api=glibc \ +# && make -j "$(nproc)" libcrypt.la \ +# && mv .libs/libcrypt.so.* $MSAN_LIBDIR \ +# && rm -rf -- * # For convenience of human users of msan image ENV MSAN_OPTIONS=abort_on_error=1:poison_in_dtor=0 From 0dde0f242a8235cecd5614319e27c45d9e2d1bb4 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 17:04:13 +1100 Subject: [PATCH 43/50] msan: now have instrumented openssl so no need to use bundled --- master-docker-nonstandard-2/master.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index e4fbe355..30b9f205 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,6 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_NUMA=NO -DWITH_SYSTEMD=no -DWITH_SSL=bundled -DWITH_MSAN=ON && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 30f56a03389ee7ba6bd8157016341d1582fe0dea Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 17:05:52 +1100 Subject: [PATCH 44/50] msan: build step - use include and library path to /msan-libs{,/include} --- master-docker-nonstandard-2/master.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 30b9f205..39cd1687 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,6 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_NUMA=NO -DWITH_SYSTEMD=no -DWITH_MSAN=ON -DCMAKE_CXX_FLAGS="-std=c++11 -I$MSANLIB_DIR/include" -DCMAKE_C_FLAGS="-I$MSANLIB_DIR/include" -DCMAKE_LINKER_FLAGS="-lc++-abi -L$MSANLIB_DIR -Wl,-rpath=$MSANLIBDIR" && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From 3bd3c5f22e4ae8bf0b5982f9f6915d016b5866dd Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 17:53:29 +1100 Subject: [PATCH 45/50] msan workflow - msan 16 not buildable any more --- .github/workflows/build-debian.msan-based.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/build-debian.msan-based.yml b/.github/workflows/build-debian.msan-based.yml index 23b4cccc..4620ad8b 100644 --- a/.github/workflows/build-debian.msan-based.yml +++ b/.github/workflows/build-debian.msan-based.yml @@ -32,13 +32,6 @@ jobs: clang_version: 19 nogalera: false - - image: debian:11 - platforms: linux/amd64 - branch: 10.11 - tag: debian11-msan-clang-16 - clang_version: 16 - nogalera: false - uses: ./.github/workflows/bbw_build_container_template.yml with: dockerfile: rr.Dockerfile debian.Dockerfile msan.Dockerfile From 101dfcc7566d3c57fde36b1814ee2ead73bea605 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 20 Nov 2024 18:11:11 +1100 Subject: [PATCH 46/50] msan: cracklib build - work around type error It has been corrected upstream https://github.com/cracklib/cracklib/commit/bdb3aee4ca28c9e2346404ae6539ced0ae5de1db but in this case the Debug function is a no-op so no harm done. --- ci_build_images/msan.Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 501eba21..46bd2908 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -171,11 +171,12 @@ RUN . /etc/os-release \ && libtoolize \ && automake --add-missing \ && autoreconf \ - && ./configure --without-python \ + && CFLAGS="$CFLAGS -Wno-error=int-conversion" ./configure --without-python \ --with-default-dict=/usr/share/dict/cracklib-small \ && make -j "$(nproc)" \ && cp -aL lib/.libs/*.so* $MSAN_LIBDIR \ && cd $OLDPWD \ + && rm -rf * \ && apt-get clean \ && apt-get -y purge \ bzip2 \ From b1bed94e1d8227b0e5457a4c2b5000d9f2d765f8 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Tue, 26 Nov 2024 14:14:20 +1100 Subject: [PATCH 47/50] fix: MSAN_LIBDIR var name in master.cfg --- master-docker-nonstandard-2/master.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/master-docker-nonstandard-2/master.cfg b/master-docker-nonstandard-2/master.cfg index 39cd1687..6ef5e654 100644 --- a/master-docker-nonstandard-2/master.cfg +++ b/master-docker-nonstandard-2/master.cfg @@ -332,7 +332,7 @@ f_msan_build.addStep( "bash", "-xc", util.Interpolate( - 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_NUMA=NO -DWITH_SYSTEMD=no -DWITH_MSAN=ON -DCMAKE_CXX_FLAGS="-std=c++11 -I$MSANLIB_DIR/include" -DCMAKE_C_FLAGS="-I$MSANLIB_DIR/include" -DCMAKE_LINKER_FLAGS="-lc++-abi -L$MSANLIB_DIR -Wl,-rpath=$MSANLIBDIR" && cmake --build . --parallel %(kw:jobs)s --verbose', + 'cmake . -DCMAKE_C_COMPILER=%(kw:c_compiler)s -DCMAKE_CXX_COMPILER=%(kw:cxx_compiler)s -DWITH_EMBEDDED_SERVER=OFF -DWITH_INNODB_{BZIP2,LZ4,LZMA,LZO,SNAPPY}=OFF -DPLUGIN_{ARCHIVE,MROONGA,ROCKSDB,SPIDER}=NO -DWITH_ZLIB=bundled -DHAVE_LIBAIO_H=0 -DCMAKE_DISABLE_FIND_PACKAGE_{URING,LIBAIO}=1 -DWITH_NUMA=NO -DWITH_SYSTEMD=no -DWITH_MSAN=ON -DCMAKE_CXX_FLAGS="-std=c++11 -I$MSAN_LIBDIR/include" -DCMAKE_C_FLAGS="-I${MSAN_LIBDIR}/include" -DCMAKE_LINKER_FLAGS="-lc++-abi -L${MSAN_LIBDIR} -Wl,-rpath=${MSAN_LIBDIR}" && cmake --build . --parallel %(kw:jobs)s --verbose', jobs=util.Property("jobs", default="$(getconf _NPROCESSORS_ONLN)"), c_compiler=util.Property("c_compiler", default="clang"), cxx_compiler=util.Property("cxx_compiler", default="clang++"), From ba31a46ff31d190bde2ca9ed5eeb875da106714d Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 28 Nov 2024 15:21:37 +1100 Subject: [PATCH 48/50] msan: trixie/sid have incompatible with MariaDB libfmt version Saw debian having 11.0.2 in experimental which once it reaches sid will be possible to revert this change. --- ci_build_images/msan.Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index 46bd2908..bb569658 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -131,13 +131,14 @@ RUN . /etc/os-release \ && make -j "$(nproc)" \ && mv ./DriverManager/.libs/libodbc.so* $MSAN_LIBDIR \ && cd $OLDPWD \ - && apt-get source libfmt-dev \ + && if [ $VERSION_CODE != trixie ]; then \ + apt-get source libfmt-dev \ && cd fmtlib-* \ && mkdir build \ && cmake -DFMT_DOC=OFF -DFMT_TEST=OFF -DBUILD_SHARED_LIBS=on -DFMT_PEDANTIC=on -S . -B build \ && cmake --build build \ && mv build/libfmt.so* $MSAN_LIBDIR \ - && cd $OLDPWD \ + && cd $OLDPWD ; fi \ && apt-get source libssl-dev \ && cd openssl-* \ && ./Configure shared no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms no-capieng no-rdrand $(if [ "${CLANG_VERSION}" -ge 19 ]; then echo no-asm enable-msan; fi) $CFLAGS \ From 9eecd2e0f60336787320e4a74bbbbf9fc6a12200 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 28 Nov 2024 15:22:45 +1100 Subject: [PATCH 49/50] msan: TEST - don't purge off build artifacts trying to resolve large stacks in msan itself. --- ci_build_images/msan.Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index bb569658..b06a96a3 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -177,7 +177,6 @@ RUN . /etc/os-release \ && make -j "$(nproc)" \ && cp -aL lib/.libs/*.so* $MSAN_LIBDIR \ && cd $OLDPWD \ - && rm -rf * \ && apt-get clean \ && apt-get -y purge \ bzip2 \ From 54b43e14b569229a83c7ada538fba32853a6de53 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 28 Nov 2024 15:23:47 +1100 Subject: [PATCH 50/50] msan: using cflags -fno-omit-frame-pointer -O2 -g for instrumented libraries This was in Marko's original script. --- ci_build_images/msan.Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci_build_images/msan.Dockerfile b/ci_build_images/msan.Dockerfile index b06a96a3..79491cff 100644 --- a/ci_build_images/msan.Dockerfile +++ b/ci_build_images/msan.Dockerfile @@ -18,6 +18,9 @@ ENV MSAN_SYMBOLIZER_PATH=$NO_MSAN_PATH/llvm-symbolizer-msan ENV PATH=$NO_MSAN_PATH:$PATH +ENV CFLAGS="-fno-omit-frame-pointer -O2 -g" +ENV CXXFLAGS="$CFLAGS" + # hadolint ignore=SC2046 RUN . /etc/os-release \ && if [ "${CLANG_VERSION}" -gt 17 ]; then \