[libcamera-devel] [PATCH v1 3/4] test: py: Fix test failure when ASan is enabled
Paul Elder
paul.elder at ideasonboard.com
Sat Dec 24 01:26:23 CET 2022
On Thu, Dec 22, 2022 at 03:01:31AM +0200, Laurent Pinchart via libcamera-devel wrote:
> 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.
s/with/when/
>
> 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
s/ASAn/ASan/
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> +# 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)
More information about the libcamera-devel
mailing list