diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-08-27 22:40:13 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-01 13:09:18 +0300 |
commit | 1d003875577de4d789103f8d9ebc0f792038b963 (patch) | |
tree | 638160f9ecf6ea9a1efe8f794fe3bdaa6c4d354e /test | |
parent | c0ca2cbdc2dfcca50d7bc71a93629ca8e02b1682 (diff) |
test: v4l2_compat: Disable test when ASan is enabled
The V4L2 compat test runs v4l2-ctl and v4l2-compliance with
v4l2-compat.so preloaded. If libcamera is compiled with the address
sanitizer enabled, the ASan library will be loaded due to preloading
v4l2-compat.so. This however doesn't occur early enough in the dynamic
linking process due to the v4l2 executables not being themselves linked
to the ASan runtime, which causes ASan to abort with
==2198==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
Using LD_PRELOAD to load the ASan runtime would fix this issue, but it
requires knowing the absolute path to the ASan shared object. This is
compiler-dependent and for clang, architecture-dependent as well.
Until we figure out how to safely retrieve that information, disable the
test when ASan is enabled as a quick fix.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/v4l2_compat/meson.build | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/test/v4l2_compat/meson.build b/test/v4l2_compat/meson.build index 5b29de7c..87809589 100644 --- a/test/v4l2_compat/meson.build +++ b/test/v4l2_compat/meson.build @@ -1,5 +1,15 @@ # SPDX-License-Identifier: CC0-1.0 +# If ASan is enabled, the link order runtime check will fail as v4l2-ctl and +# v4l2-compliance are not linked to ASan. Skip the test in that case. +# +# TODO: Find a way to LD_PRELOAD the ASan dynamic library instead, in a +# cross-platform way with support for both gcc and clang. + +if get_option('b_sanitize').contains('address') + subdir_done() +endif + if is_variable('v4l2_compat') v4l2_compat_test = files('v4l2_compat_test.py') |