From 2808d00ecff318e921a9fe8902d4449f31456360 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 Apr 2026 15:59:54 +1100 Subject: [PATCH 1/5] Remove libunwind from msan builds --- ci_build_images/msan.fragment.Dockerfile | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ci_build_images/msan.fragment.Dockerfile b/ci_build_images/msan.fragment.Dockerfile index 03dda3db8..fa6d1e333 100644 --- a/ci_build_images/msan.fragment.Dockerfile +++ b/ci_build_images/msan.fragment.Dockerfile @@ -23,7 +23,7 @@ ENV CXXFLAGS="$CFLAGS" # hadolint ignore=SC2046,DL3003 RUN . /etc/os-release \ - && export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \ + && export LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ && mkdir "$MSAN_LIBDIR" \ && curl -sL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg \ && if [ "$VERSION_CODENAME" = forky ]; then VERSION_CODENAME=unstable; LLVM_DEB=""; else LLVM_DEB="-$VERSION_CODENAME"; fi \ @@ -54,6 +54,7 @@ RUN . /etc/os-release \ && cd ll-build \ && cmake -S ../"$LLVM_DIR"*/runtimes \ -DCMAKE_BUILD_TYPE=Release \ + -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \ -DLLVM_ENABLE_RUNTIMES="${LLVM_ENABLE_RUNTIMES}" \ -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF -DLLVM_ENABLE_SPHINX=OFF \ -DLLVM_USE_SANITIZER=MemoryWithOrigins \ @@ -63,13 +64,6 @@ RUN . /etc/os-release \ && cd .. \ && rm -rf -- * -RUN for f in "$MSAN_LIBDIR"/libunwind*; do mv "$f" "$f"-disable; done; \ - if [ "${CLANG_VERSION}" -ge 22 ]; then \ - apt-get -y install --no-install-recommends libunwind-19; \ - fi -# libunwind move/disable because of https://github.com/llvm/llvm-project/issues/128621 -# libunwind-19 meets ABI compatibility as its now linked to built executables. - COPY msan.instrumentedlibs.sh /msan-build RUN ./msan.instrumentedlibs.sh From fef71acb1507763d2e7f9d9322a2314ace5a4576 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 Apr 2026 16:00:34 +1100 Subject: [PATCH 2/5] msan: libodbcinst.so instrumented for C/ODBC --- ci_build_images/msan.instrumentedlibs.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ci_build_images/msan.instrumentedlibs.sh b/ci_build_images/msan.instrumentedlibs.sh index b9b95f9b4..43ae7ec06 100755 --- a/ci_build_images/msan.instrumentedlibs.sh +++ b/ci_build_images/msan.instrumentedlibs.sh @@ -94,7 +94,7 @@ make -j "$(nproc)" cp -aL .libs/libxml2.so* "$MSAN_LIBDIR" rm -rf -- * -# Unixodbc used by MariaDB Connect engine. +# Unixodbc used by MariaDB Connect engine and C/ODBC. if [ "${VERSION_CODENAME}" = trixie ]; then # additional dependency in later debian versions. # libltdl-dev - System independent dlopen wrapper for GNU libtool @@ -109,7 +109,9 @@ autoconf automake --add-missing ./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=no make -j "$(nproc)" -mv ./DriverManager/.libs/libodbc.so* "$MSAN_LIBDIR" +find . +mv ./DriverManager/.libs/libodbc.so* ./odbcinst/.libs/libodbcinst.so* "$MSAN_LIBDIR" +rm -rf -- * rm -rf -- * # libfmt - used by server for SFORMAT function From 2b7505f0056f752a9a4eb2041904cb6c1ec29d71 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 Apr 2026 16:01:07 +1100 Subject: [PATCH 3/5] msan: libtdl instrumented for C/ODBC --- ci_build_images/msan.instrumentedlibs.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ci_build_images/msan.instrumentedlibs.sh b/ci_build_images/msan.instrumentedlibs.sh index 43ae7ec06..0390cb70a 100755 --- a/ci_build_images/msan.instrumentedlibs.sh +++ b/ci_build_images/msan.instrumentedlibs.sh @@ -112,6 +112,16 @@ make -j "$(nproc)" find . mv ./DriverManager/.libs/libodbc.so* ./odbcinst/.libs/libodbcinst.so* "$MSAN_LIBDIR" rm -rf -- * + +#libltdl - C/ODBC +apt-get source libltdl-dev +mv libtool-*/* . +./bootstrap --force --no-git --skip-po --gnulib-srcdir=/usr/share/gnulib/ --copy +./configure +make -j "$(nproc)" +mv ./libltdl/.libs/libltdl.so* "$MSAN_LIBDIR" +rm -rf -- * + rm -rf -- * # libfmt - used by server for SFORMAT function From 594637616b150d4aed416996fc140ecf488ba497 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 Apr 2026 16:01:24 +1100 Subject: [PATCH 4/5] msan: instrument sqlite/odbc for CONNECT engine --- ci_build_images/msan.instrumentedlibs.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ci_build_images/msan.instrumentedlibs.sh b/ci_build_images/msan.instrumentedlibs.sh index 0390cb70a..17ba61457 100755 --- a/ci_build_images/msan.instrumentedlibs.sh +++ b/ci_build_images/msan.instrumentedlibs.sh @@ -122,6 +122,14 @@ make -j "$(nproc)" mv ./libltdl/.libs/libltdl.so* "$MSAN_LIBDIR" rm -rf -- * +# sqlite/odbc for CONNECT engine +apt-get source libsqliteodbc +mv sqliteodbc-*/* . +mk-build-deps -it 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' +autoreconf --install . +./configure +make -j "$(nproc)" +mv ./.libs/libsqlite3odbc.so* "$MSAN_LIBDIR" rm -rf -- * # libfmt - used by server for SFORMAT function From e400dd39a4e85219c1e64add286f90fecc185134 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Fri, 3 Apr 2026 17:39:19 +1100 Subject: [PATCH 5/5] msan: remove libtdl instrumented and use libodbc bunled libtdl --- ci_build_images/msan.instrumentedlibs.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ci_build_images/msan.instrumentedlibs.sh b/ci_build_images/msan.instrumentedlibs.sh index 17ba61457..55cba0847 100755 --- a/ci_build_images/msan.instrumentedlibs.sh +++ b/ci_build_images/msan.instrumentedlibs.sh @@ -107,20 +107,22 @@ aclocal autoheader autoconf automake --add-missing -./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=no +./configure --enable-fastvalidate --with-pth=no --with-included-ltdl=yes make -j "$(nproc)" find . mv ./DriverManager/.libs/libodbc.so* ./odbcinst/.libs/libodbcinst.so* "$MSAN_LIBDIR" rm -rf -- * -#libltdl - C/ODBC -apt-get source libltdl-dev -mv libtool-*/* . -./bootstrap --force --no-git --skip-po --gnulib-srcdir=/usr/share/gnulib/ --copy -./configure -make -j "$(nproc)" -mv ./libltdl/.libs/libltdl.so* "$MSAN_LIBDIR" -rm -rf -- * +##libltdl - C/ODBC +## libodbc does a fixed path load of /lib/x86_64-linux-gnu/libltdl.so.7, which +## isn't the instrumented version, so changed --with-included-ltdl=yes above. +#apt-get source libltdl-dev +#mv libtool-*/* . +#./bootstrap --force --no-git --skip-po --gnulib-srcdir=/usr/share/gnulib/ --copy +#./configure +#make -j "$(nproc)" +#mv ./libltdl/.libs/libltdl.so* "$MSAN_LIBDIR" +#rm -rf -- * # sqlite/odbc for CONNECT engine apt-get source libsqliteodbc