[libcamera-devel] [PATCH v1 3/4] test: py: Fix test failure when ASan is enabled

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Dec 22 02:01:31 CET 2022


When the address sanitizer is enabled, the Python unit tests fail due to
the link order runtime check as the Python interpreter is (generally)
not linked to ASan. Fix this by LD_PRELOAD'ing the ASan runtime. We have
to disable the leak detector as the Python interpreter itself leaks
memory, which would result in test failures.

To LD_PRELOAD the ASan runtime, the path to the binary needs to be
known. gcc gives us a generic way to get the path, but that doesn't work
with clang as the ASan runtime file name depends on the clang version
and target architecture. We thus have to keep the Python test disabled
with ASan is enabled and libcamera is compiled with clang.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 test/py/meson.build | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/test/py/meson.build b/test/py/meson.build
index 2affdbd491a3..639f173594a8 100644
--- a/test/py/meson.build
+++ b/test/py/meson.build
@@ -4,14 +4,29 @@ if not pycamera_enabled
     subdir_done()
 endif
 
+# If ASan is enabled, the link order runtime check will fail as Python is not
+# linked to ASan. LD_PRELOAD the ASAn runtime if available, or skip the test
+# otherwise.
+
+if asan_runtime_missing
+    warning('Unable to get path to ASan runtime, Python test disabled')
+    subdir_done()
+endif
+
 pymod = import('python')
 py3 = pymod.find_installation('python3')
 
 pypathdir = meson.project_build_root() / 'src' / 'py'
+py_env = ['PYTHONPATH=' + pypathdir]
+
+if asan_enabled
+    # Disable leak detection as the Python interpreter is full of leaks.
+    py_env += ['LD_PRELOAD=' + asan_runtime, 'ASAN_OPTIONS=detect_leaks=0']
+endif
 
 test('pyunittests',
      py3,
      args : files('unittests.py'),
-     env : ['PYTHONPATH=' + pypathdir],
+     env : py_env,
      suite : 'pybindings',
      is_parallel : false)
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list