From f326eb4bf26e359d980f60cfa81cc25e8347f26f Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 5 Nov 2024 02:16:32 +0200 Subject: test: py: LD_PRELOAD the C++ standard library when using ASan When the ASan runtime is linked using --as-needed, its dependency on the C++ standard library is stripped. This results to a failure to properly handled exceptions when a C++ dynamically loaded .so is used, as in the Python unit tests that load the libcamera Python module: AddressSanitizer: CHECK failed: asan_interceptors.cpp:335 "((__interception::real___cxa_throw)) != (0)" (0x0, 0x0) (tid=32679) #0 0x7fa2f32e6c19 in CheckUnwind /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_rtl.cpp:69 #1 0x7fa2f330c9fd in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/sanitizer_common/sanitizer_termination.cpp:86 #2 0x7fa2f3247824 in __interceptor___cxa_throw /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_interceptors.cpp:335 #3 0x7fa2f3247824 in __interceptor___cxa_throw /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_interceptors.cpp:334 #4 0x7fa2efb6da8b in operator() ../../src/py/libcamera/py_main.cpp:157 [...] The issue has been reported in [1] and so far remains unfixed. Work around it by preloading the C++ standard library. [1] https://github.com/google/sanitizers/issues/934 Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- meson.build | 3 +++ 1 file changed, 3 insertions(+) (limited to 'meson.build') diff --git a/meson.build b/meson.build index 63e45465..e3052260 100644 --- a/meson.build +++ b/meson.build @@ -112,6 +112,8 @@ common_arguments = [ c_arguments = [] cpp_arguments = [] +cxx_stdlib = 'libstdc++' + if cc.get_id() == 'clang' if cc.version().version_compare('<9') error('clang version is too old, libcamera requires 9.0 or newer') @@ -137,6 +139,7 @@ if cc.get_id() == 'clang' cpp_arguments += [ '-stdlib=libc++', ] + cxx_stdlib = 'libc++' endif cpp_arguments += [ -- cgit v1.2.1