diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index d91d1a62d64642b27a9f0e110efb0d55a90f0f51..8ef7205009b64225b20292673f6fd2e0b988d51e 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -533,6 +533,12 @@ macro(ocv_finalize_status) execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OPENCV_BUILD_INFO_FILE}" "${OPENCV_MODULE_opencv_core_BINARY_DIR}/version_string.inc" OUTPUT_QUIET) endif() endif() + + if(UNIX) + install(FILES "${OpenCV_SOURCE_DIR}/platforms/scripts/valgrind.supp" + "${OpenCV_SOURCE_DIR}/platforms/scripts/valgrind_3rdparty.supp" + DESTINATION "${OPENCV_OTHER_INSTALL_PATH}" COMPONENT "dev") + endif() endmacro() diff --git a/modules/calib3d/src/stereobm.cpp b/modules/calib3d/src/stereobm.cpp index 5ed45a48840e3494df2497871db55ddb98387742..f6d8213545e4e72bc9c95faf86eba86f9ee61ebf 100644 --- a/modules/calib3d/src/stereobm.cpp +++ b/modules/calib3d/src/stereobm.cpp @@ -197,7 +197,7 @@ prefilterXSobel( const Mat& src, Mat& dst, int ftzero ) { int x, y; const int OFS = 256*4, TABSZ = OFS*2 + 256; - uchar tab[TABSZ]; + uchar tab[TABSZ] = { 0 }; Size size = src.size(); for( x = 0; x < TABSZ; x++ ) diff --git a/modules/core/src/stat.cpp b/modules/core/src/stat.cpp index e324f85dac4992937999628ad74ae61cf603a6cc..13d8c215cf33f3b1cb413f1c0f442468d3607fe9 100644 --- a/modules/core/src/stat.cpp +++ b/modules/core/src/stat.cpp @@ -1547,7 +1547,7 @@ static bool ocl_meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv bool haveMask = _mask.kind() != _InputArray::NONE; int nz = haveMask ? -1 : (int)_src.total(); - Scalar mean, stddev; + Scalar mean(0), stddev(0); const int cn = _src.channels(); if (cn > 4) return false; diff --git a/modules/ts/misc/run.py b/modules/ts/misc/run.py index 0f2116e6aff16fc187bf41e8a48b3d31818bf701..0befa79ea9fb8d7fcc08fd86dc753bb39b4ae9f0 100755 --- a/modules/ts/misc/run.py +++ b/modules/ts/misc/run.py @@ -37,7 +37,7 @@ if __name__ == "__main__": # Valgrind parser.add_argument("--valgrind", action="store_true", default=False, help="Run C++ tests in valgrind") - parser.add_argument("--valgrind_supp", metavar="FILE", help="Path to valgrind suppression file (example: --valgrind_supp opencv/platforms/scripts/valgrind.supp)") + parser.add_argument("--valgrind_supp", metavar="FILE", action='append', help="Path to valgrind suppression file (example: --valgrind_supp opencv/platforms/scripts/valgrind.supp)") parser.add_argument("--valgrind_opt", metavar="OPT", action="append", default=[], help="Add command line option to valgrind (example: --valgrind_opt=--leak-check=full)") # Android diff --git a/modules/ts/misc/run_suite.py b/modules/ts/misc/run_suite.py index 311f415240b53d66c8dc529316b3daedadefc9fe..8242c3a1db712c0b0e99989ab56328003f13fafa 100644 --- a/modules/ts/misc/run_suite.py +++ b/modules/ts/misc/run_suite.py @@ -103,10 +103,15 @@ class TestSuite(object): def wrapInValgrind(self, cmd = []): if self.options.valgrind: res = ['valgrind'] - if self.options.valgrind_supp: - res.append("--suppressions=%s" % self.options.valgrind_supp) + supp = self.options.valgrind_supp or [] + for f in supp: + if os.path.isfile(f): + res.append("--suppressions=%s" % f) + else: + print("WARNING: Valgrind suppression file is missing, SKIP: %s" % f) res.extend(self.options.valgrind_opt) - return res + cmd + [longTestFilter(LONG_TESTS_DEBUG_VALGRIND)] + has_gtest_filter = next((True for x in cmd if x.startswith('--gtest_filter=')), False) + return res + cmd + ([longTestFilter(LONG_TESTS_DEBUG_VALGRIND)] if not has_gtest_filter else []) return cmd def tryCommand(self, cmd): diff --git a/platforms/scripts/valgrind.supp b/platforms/scripts/valgrind.supp index 54833e08bdb2d838c4eece00d0df980a9d391f66..e78d047c58e547b4f1d43395e6127ea4d2bde4f6 100644 --- a/platforms/scripts/valgrind.supp +++ b/platforms/scripts/valgrind.supp @@ -1,13 +1,203 @@ { - IPP static init + OpenCV-IPP static init Memcheck:Cond fun:ippicvGetCpuFeatures fun:ippicvStaticInit } { - TBB - allocate_via_handler_v3 issue + OpenCV-getInitializationMutex Memcheck:Leak - fun:malloc - fun:_ZN3tbb8internal23allocate_via_handler_v3Em + ... + fun:_ZN2cv22getInitializationMutexEv +} + +{ + OpenCV-getStdAllocator + Memcheck:Leak + ... + fun:_ZN2cv3Mat15getStdAllocatorEv +} + +{ + OpenCV-getOpenCLAllocator + Memcheck:Leak + ... + fun:_ZN2cv3ocl18getOpenCLAllocatorEv +} + +{ + OpenCV-getCoreTlsData + Memcheck:Leak + fun:_Znwm + fun:_ZN2cv14getCoreTlsDataEv +} + +{ + OpenCV-TLS-getTlsStorage + Memcheck:Leak + ... + fun:_ZN2cvL13getTlsStorageEv +} + +{ + OpenCV-TLS-getData() + Memcheck:Leak + ... + fun:*setData* + fun:_ZNK2cv16TLSDataContainer7getDataEv +} + +{ + OpenCV-parallel_for + Memcheck:Leak + ... + fun:_ZN2cv13ThreadManager8initPoolEv* +} + +{ + OpenCV-parallel_for + Memcheck:Leak + fun:_Znwm + fun:*instance* + fun:_ZN2cv21parallel_for_pthreadsERKNS_5RangeERKNS_16ParallelLoopBodyEd + fun:_ZN2cv13parallel_for_ERKNS_5RangeERKNS_16ParallelLoopBodyEd +} + +{ + OpenCV-parallel_for-ThreadManager::TLS + Memcheck:Leak + fun:_Znwm + fun:_ZNK2cv7TLSDataINS_13ThreadManager13work_thread_tEE18createDataInstanceEv +} + +{ + OpenCV-parallel_for-setNumThreads() + Memcheck:Leak + fun:_Znwm + fun:_ZN2cv13ThreadManager8instanceEv + fun:_ZN2cv33parallel_pthreads_set_threads_numEi + fun:_ZN2cv13setNumThreadsEi +} + +{ + OpenCV-parallel_for-getNumThreads() + Memcheck:Leak + ... + fun:_ZN2cv13getNumThreadsEv +} + +{ + OpenCV-getIPPSingelton + Memcheck:Leak + ... + fun:_ZN2cv3ippL15getIPPSingeltonEv +} + +{ + OpenCV-getGlobalMatOpInitializer + Memcheck:Leak + fun:_Znwm + fun:_ZN2cvL25getGlobalMatOpInitializerEv +} + +{ + OpenCV-CoreTLSData + Memcheck:Leak + ... + fun:_ZNK2cv7TLSDataINS_11CoreTLSDataEE3getEv +} + +{ + OpenCV-ThreadID + Memcheck:Leak + fun:_Znwm + fun:_ZNK2cv7TLSDataINS_12_GLOBAL__N_18ThreadIDEE18createDataInstanceEv +} + +{ + OpenCV-ThreadID-TLS + Memcheck:Leak + fun:_Znwm + fun:getThreadIDTLS +} + +{ + OpenCV-CoreTLS + Memcheck:Leak + fun:_Znwm + fun:_ZNK2cv7TLSDataINS_11CoreTLSDataEE18createDataInstanceEv +} + +{ + OpenCV-haveOpenCL + Memcheck:Leak + ... + fun:_ZN2cv3ocl10haveOpenCLEv +} + +{ + OpenCV-DNN-getLayerFactoryMutex + Memcheck:Leak + ... + fun:_ZN2cv3dnn*L20getLayerFactoryMutexEv +} + +{ + OpenCV-ocl::Context + Memcheck:Leak + ... + fun:_ZN2cv3ocl7Context10getDefaultEb +} + +{ + OpenCV-ocl::Device + Memcheck:Leak + ... + fun:_ZN2cv3ocl6Device10getDefaultEv +} + +{ + OpenCV-ocl::Queue + Memcheck:Leak + ... + fun:_ZN2cv3ocl5Queue6createERKNS0_7ContextERKNS0_6DeviceE +} + +{ + OpenCV-ocl::Program + Memcheck:Leak + ... + fun:_ZN2cv3ocl6Kernel6createEPKcRKNS0_7ProgramE +} + +{ + OpenCV-ocl::ProgramEntry + Memcheck:Leak + ... + fun:_ZNK2cv3ocl8internal12ProgramEntrycvRNS0_13ProgramSourceEEv +} + +{ + OpenCV-ocl::Context::getProg + Memcheck:Leak + ... + fun:_ZN2cv3ocl7Context7getProgERKNS0_13ProgramSourceERKNS_6StringERS5_ +} + + +{ + OpenCV-ITT + Memcheck:Leak + ... + fun:__itt_*create* +} + +{ + OpenCV-FFmpeg-swsscale + Memcheck:Addr16 + ... + fun:sws_scale + fun:_ZN20CvVideoWriter_FFMPEG10writeFrameEPKhiiiii + fun:cvWriteFrame_FFMPEG } diff --git a/platforms/scripts/valgrind_3rdparty.supp b/platforms/scripts/valgrind_3rdparty.supp new file mode 100644 index 0000000000000000000000000000000000000000..7b6472d827b23282721e20fcb6280db5a75820a2 --- /dev/null +++ b/platforms/scripts/valgrind_3rdparty.supp @@ -0,0 +1,113 @@ +{ + IPP static init + Memcheck:Cond + fun:ippicvGetCpuFeatures + fun:ippicvStaticInit +} + +{ + TBB - allocate_via_handler_v3 issue + Memcheck:Leak + fun:malloc + fun:_ZN3tbb8internal23allocate_via_handler_v3Em +} + +{ + GTest + Memcheck:Cond + fun:_ZN7testing8internal11CmpHelperLEIddEENS_15AssertionResultEPKcS4_RKT_RKT0_ +} + +{ + OpenCL + Memcheck:Cond + ... + obj:**/libOpenCL.so* +} + +{ + OpenCL-Intel + Memcheck:Cond + ... + obj:**/libigdrcl.so +} + +{ + OpenCL-Intel + Memcheck:Leak + ... + obj:*/libigdrcl.so* +} + +{ + OpenCL + Memcheck:Param + ioctl(generic) + ... + fun:clGetPlatformIDs +} + +{ + OpenCL-Init + Memcheck:Leak + ... + fun:clGetPlatformIDs +} + +{ + glib + Memcheck:Leak + fun:*alloc + obj:*/libglib* +} + +{ + gcrypt + Memcheck:Leak + ... + obj:*/libgcrypt* +} + +{ + p11-kit + Memcheck:Leak + fun:*alloc + obj:*/libp11-kit* +} + +{ + gobject + Memcheck:Leak + fun:*alloc + ... + obj:*/libgobject* +} + +{ + tasn + Memcheck:Leak + fun:*alloc + obj:*/libtasn*.so* +} + +{ + dl_init + Memcheck:Leak + ... + fun:_dl_init +} + +{ + dl_open + Memcheck:Leak + ... + fun:_dl_open +} + +{ + GDAL + Memcheck:Leak + fun:*alloc + ... + obj:/usr/lib/libgdal.so.1.17.1 +}