[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