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

Umang Jain umang.jain at ideasonboard.com
Fri Dec 23 17:58:02 CET 2022


HI Laurent,

Thank you for the patch

On 12/22/22 6:31 AM, 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.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

Acked-by: Umang Jain <umang.jain 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)



More information about the libcamera-devel mailing list