Skip to content

Commit

Permalink
docs/devel: update tsan build documentation
Browse files Browse the repository at this point in the history
Mention it's now possible to build with gcc, instead of clang, and
explain how to build a sanitized glib version.

Signed-off-by: Pierrick Bouvier <[email protected]>
  • Loading branch information
pbo-linaro committed Oct 15, 2024
1 parent 3715a05 commit 3add549
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions docs/devel/testing/main.rst
Original file line number Diff line number Diff line change
Expand Up @@ -628,20 +628,38 @@ Building and Testing with TSan
It is possible to build and test with TSan, with a few additional steps.
These steps are normally done automatically in the docker.

There is a one time patch needed in clang-9 or clang-10 at this time:
TSan is supported for clang and gcc.
One particularity of sanitizers is that all the code, including shared objects
dependencies, should be built with it.
In the case of TSan, any synchronization primitive from glib (GMutex for
instance) will not be recognized, and will lead to false positives.

To build a tsan version of glib:

.. code::
sed -i 's/^const/static const/g' \
/usr/lib/llvm-10/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
$ git clone --depth=1 --branch=2.81.0 https://github.com/GNOME/glib.git
$ cd glib
$ CFLAGS="-O2 -g -fsanitize=thread" meson build
$ ninja -C build
To configure the build for TSan:

.. code::
../configure --enable-tsan --cc=clang-10 --cxx=clang++-10 \
../configure --enable-tsan \
--disable-werror --extra-cflags="-O0"
When executing qemu, don't forget to point to tsan glib:

.. code::
$ glib_dir=/path/to/glib
$ export LD_LIBRARY_PATH=$glib_dir/build/gio:$glib_dir/build/glib:$glib_dir/build/gmodule:$glib_dir/build/gobject:$glib_dir/build/gthread
# check correct version is used
$ ldd build/qemu-x86_64 | grep glib
$ qemu-system-x86_64 ...
The runtime behavior of TSAN is controlled by the TSAN_OPTIONS environment
variable.

Expand Down

0 comments on commit 3add549

Please sign in to comment.