util: Add helgrind support for simple_mtx

Annoyingly mtypes.h pulls in simple_mtx, which means we end up needing
to sprinkle a lot of idep_mesautil around.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3773
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7644>
This commit is contained in:
Rob Clark 2020-11-17 11:29:52 -08:00 committed by Marge Bot
parent 7f223a2329
commit 53f7d539cd
44 changed files with 81 additions and 35 deletions

View File

@ -107,7 +107,7 @@ test(
include_directories : [
inc_amd, inc_gallium, inc_include, inc_src,
],
dependencies: [idep_amdgfxregs_h, dep_libdrm_amdgpu],
dependencies: [idep_amdgfxregs_h, dep_libdrm_amdgpu, idep_mesautil],
),
suite: ['amd']
)

View File

@ -60,6 +60,7 @@ libglcpp_standalone = static_library(
'glcpp_standalone',
'pp_standalone_scaffolding.c',
link_with : libglcpp,
dependencies : idep_mesautil,
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
c_args : [no_override_init_args, c_msvc_compat_args, _extra_args],
cpp_args : [cpp_msvc_compat_args, _extra_args],

View File

@ -254,7 +254,7 @@ glsl_compiler = executable(
c_args : [c_msvc_compat_args, no_override_init_args],
cpp_args : [cpp_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_clock, dep_thread, idep_getopt],
dependencies : [dep_clock, dep_thread, idep_getopt, idep_mesautil],
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
link_with : [libglsl_standalone],
build_by_default : with_tools.contains('glsl'),
@ -269,7 +269,7 @@ glsl_test = executable(
cpp_args : [cpp_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : [dep_clock, dep_thread, idep_getopt],
dependencies : [dep_clock, dep_thread, idep_getopt, idep_mesautil],
link_with : [libglsl, libglsl_standalone, libglsl_util],
build_by_default : with_tools.contains('glsl'),
install : with_tools.contains('glsl'),

View File

@ -327,6 +327,7 @@ _libnir = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_compiler, include_directories('../spirv')],
c_args : [c_msvc_compat_args, no_override_init_args, _libnir_args],
gnu_symbol_visibility : 'hidden',
dependencies : dep_valgrind,
link_with : libcompiler,
build_by_default : false,
)
@ -339,7 +340,7 @@ idep_nir_headers = declare_dependency(
# Also link with nir
idep_nir = declare_dependency(
dependencies : idep_nir_headers,
dependencies : [idep_nir_headers, idep_mesautil],
link_with : _libnir,
)

View File

@ -28,7 +28,7 @@ libfreedreno_layout = static_library(
include_directories : [inc_freedreno, inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
dependencies : idep_nir_headers,
dependencies : [idep_nir_headers, idep_mesautil],
build_by_default : false,
)

View File

@ -112,7 +112,7 @@ libfreedreno_ir3 = static_library(
include_directories : [inc_freedreno, inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
dependencies : [idep_nir_headers, dep_dl],
dependencies : [idep_nir_headers, dep_dl, idep_mesautil],
build_by_default : false,
)

View File

@ -42,7 +42,7 @@ libfreedreno_rnn = static_library(
'-DRNN_DEF_PATH="' + rnn_path + '"',
],
gnu_symbol_visibility: 'hidden',
dependencies: [ dep_libxml2 ],
dependencies: [ dep_libxml2, idep_mesautil ],
build_by_default: false,
)

View File

@ -519,6 +519,7 @@ libgalliumvl_stub = static_library(
cpp_args : [cpp_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
include_directories: [inc_gallium, inc_include, inc_src],
dependencies : idep_mesautil,
build_by_default : false,
)
@ -529,6 +530,7 @@ libgalliumvl = static_library(
cpp_args : [cpp_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_include, inc_src],
dependencies : idep_mesautil,
build_by_default : false,
)
@ -537,6 +539,6 @@ libgalliumvlwinsys = static_library(
'galliumvlwinsys',
files_libgalliumvlwinsys,
include_directories : [inc_gallium, inc_include, inc_loader, inc_src],
dependencies : [dep_libdrm, vlwinsys_deps],
dependencies : [dep_libdrm, vlwinsys_deps, idep_mesautil],
build_by_default : false,
)

View File

@ -53,7 +53,7 @@ libpipe_loader_static = static_library(
c_args : [libpipe_loader_defines, '-DGALLIUM_STATIC_TARGETS=1'],
gnu_symbol_visibility : 'hidden',
link_with : [libpipe_loader_links],
dependencies : [dep_libdrm, idep_xmlconfig],
dependencies : [dep_libdrm, idep_xmlconfig, idep_mesautil],
build_by_default : false,
)

View File

@ -240,7 +240,12 @@ libfreedreno = static_library(
c_args : [freedreno_c_args],
cpp_args : [freedreno_cpp_args],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, idep_nir_headers, idep_libfreedreno_common],
dependencies : [
dep_libdrm,
idep_mesautil,
idep_nir_headers,
idep_libfreedreno_common
],
)
driver_freedreno = declare_dependency(

View File

@ -103,7 +103,7 @@ libllvmpipe = static_library(
cpp_args : [cpp_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_gallium_aux, inc_include, inc_src],
dependencies : [ dep_llvm, idep_nir_headers, ],
dependencies : [ dep_llvm, idep_nir_headers, idep_mesautil ],
)
# This overwrites the softpipe driver dependency, but itself depends on the
@ -111,7 +111,7 @@ libllvmpipe = static_library(
driver_swrast = declare_dependency(
compile_args : '-DGALLIUM_LLVMPIPE',
link_with : libllvmpipe,
dependencies : [driver_swrast, dep_llvm],
dependencies : [driver_swrast, dep_llvm, idep_mesautil],
)
if with_tests and with_gallium_softpipe and with_llvm

View File

@ -231,7 +231,7 @@ libnouveau = static_library(
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_mapi, inc_mesa,
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, dep_libdrm_nouveau, idep_nir_headers],
dependencies : [dep_libdrm, dep_libdrm_nouveau, idep_mesautil, idep_nir_headers],
)
nouveau_compiler = executable(

View File

@ -64,6 +64,7 @@ libpanfrost = static_library(
dependencies: [
dep_thread,
dep_libdrm,
idep_mesautil,
idep_nir,
idep_midgard_pack
],

View File

@ -55,5 +55,8 @@ libdri = static_library(
],
c_args : [libdri_c_args],
gnu_symbol_visibility : 'hidden',
dependencies : dep_libdrm,
dependencies : [
dep_libdrm,
idep_mesautil,
],
)

View File

@ -37,6 +37,6 @@ libva_st = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : [
dep_va_headers, dep_x11_xcb, dep_xcb, dep_xcb_dri2, dep_xcb_dri3,
dep_libdrm,
dep_libdrm, idep_mesautil,
],
)

View File

@ -35,5 +35,5 @@ libvdpau_st = static_library(
include_directories : [
inc_include, inc_src, inc_util, inc_gallium, inc_gallium_aux,
],
dependencies : [dep_vdpau, dep_xcb, dep_x11_xcb, dep_xcb_dri2, dep_libdrm],
dependencies : [dep_vdpau, dep_xcb, dep_x11_xcb, dep_xcb_dri2, dep_libdrm, idep_mesautil],
)

View File

@ -40,6 +40,7 @@ libxa_st = static_library(
)],
c_args : ['-pedantic'],
gnu_symbol_visibility : 'hidden',
dependencies : idep_mesautil,
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
)

View File

@ -28,7 +28,7 @@ libxvmc_st = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : [
dep_xvmc, dep_x11_xcb, dep_xcb, dep_xcb_dri2, dep_xcb_dri3, dep_xv,
dep_libdrm,
dep_libdrm, idep_mesautil,
],
)

View File

@ -29,5 +29,8 @@ libfreedrenowinsys = static_library(
inc_freedreno,
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm],
dependencies : [
dep_libdrm,
idep_mesautil,
],
)

View File

@ -25,5 +25,5 @@ libnouveauwinsys = static_library(
inc_src, inc_include, inc_gallium, inc_gallium_aux, inc_gallium_drivers,
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm_nouveau],
dependencies : [dep_libdrm_nouveau, idep_mesautil],
)

View File

@ -24,4 +24,5 @@ libswdri = static_library(
files('dri_sw_winsys.c', 'dri_sw_winsys.h'),
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_include, inc_src, inc_gallium_aux],
dependencies : idep_mesautil,
)

View File

@ -24,5 +24,5 @@ libswkmsdri = static_library(
files('kms_dri_sw_winsys.c', 'kms_dri_sw_winsys.h'),
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_include, inc_src, inc_gallium_aux],
dependencies : dep_libdrm,
dependencies : [dep_libdrm, idep_mesautil],
)

View File

@ -23,5 +23,6 @@ libws_null = static_library(
files('null_sw_winsys.c', 'null_sw_winsys.h'),
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_src, inc_gallium_aux, inc_include],
dependencies : idep_mesautil,
build_by_default : false,
)

View File

@ -23,5 +23,6 @@ libwsw = static_library(
files('wrapper_sw_winsys.c', 'wrapper_sw_winsys.h'),
gnu_symbol_visibility : 'hidden',
include_directories : [inc_gallium, inc_include, inc_src, inc_gallium_aux],
dependencies : idep_mesautil,
build_by_default : false,
)

View File

@ -32,6 +32,7 @@ endif
libvc4winsys = static_library(
'vc4winsys',
files('vc4_drm_winsys.c'),
dependencies : idep_mesautil,
include_directories : [
inc_src, inc_include,
inc_gallium, inc_gallium_aux, inc_gallium_drivers, inc_gallium_winsys,

View File

@ -34,5 +34,5 @@ libblorp = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
dependencies : [idep_nir_headers, idep_genxml],
dependencies : [idep_nir_headers, idep_genxml, idep_mesautil],
)

View File

@ -48,7 +48,7 @@ libintel_common = static_library(
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
link_with : [libisl],
dependencies : [dep_expat, dep_libdrm, dep_thread, idep_genxml],
dependencies : [dep_expat, dep_libdrm, dep_thread, idep_genxml, idep_mesautil],
)
libintel_extra_dependencies = []

View File

@ -145,7 +145,7 @@ libintel_compiler = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
dependencies : idep_nir_headers,
dependencies : [idep_nir_headers, idep_mesautil],
build_by_default : false,
)

View File

@ -31,6 +31,7 @@ libintel_dev = static_library(
['intel_dev'],
[files_libintel_dev, sha1_h],
include_directories : [inc_include, inc_src, inc_intel],
dependencies : idep_mesautil,
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
)

View File

@ -62,6 +62,7 @@ foreach g : [['40', isl_gen4_files], ['50', []], ['60', isl_gen6_files],
'isl_gen@0@'.format(_gen),
[g[1], isl_gen_files, gen_xml_pack],
include_directories : [inc_include, inc_src, inc_gallium, inc_intel],
dependencies : idep_mesautil,
c_args : [
no_override_init_args,
'-DGEN_VERSIONx10=@0@'.format(_gen)
@ -91,6 +92,7 @@ isl_tiled_memcpy = static_library(
include_directories : [
inc_include, inc_src, inc_mesa, inc_gallium, inc_intel,
],
dependencies : idep_mesautil,
c_args : [no_override_init_args, '-msse2'],
gnu_symbol_visibility : 'hidden',
extra_files : ['isl_tiled_memcpy.c']
@ -103,6 +105,7 @@ if with_sse41
include_directories : [
inc_include, inc_src, inc_mesa, inc_gallium, inc_intel,
],
dependencies : idep_mesautil,
link_args : ['-Wl,--exclude-libs=ALL'],
c_args : [no_override_init_args, '-msse2', sse41_args],
gnu_symbol_visibility : 'hidden',
@ -128,6 +131,7 @@ libisl = static_library(
[libisl_files, isl_format_layout_c, genX_bits_h],
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel],
link_with : [isl_gen_libs, isl_tiled_memcpy, isl_tiled_memcpy_sse41],
dependencies : idep_mesautil,
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
)

View File

@ -25,7 +25,7 @@ libdricommon = static_library(
files('utils.c', 'utils.h', 'dri_util.c', 'dri_util.h'),
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_util],
gnu_symbol_visibility : 'hidden',
dependencies : dep_libdrm,
dependencies : [dep_libdrm, idep_mesautil],
build_by_default : false,
)

View File

@ -90,5 +90,5 @@ libi915 = static_library(
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_dri_common, inc_util],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, dep_libdrm_intel],
dependencies : [dep_libdrm, dep_libdrm_intel, idep_mesautil],
)

View File

@ -142,7 +142,7 @@ foreach v : ['40', '45', '50', '60', '70', '75', '80', '90', '110']
'-DGEN_VERSIONx10=@0@'.format(v),
],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, idep_nir_headers],
dependencies : [dep_libdrm, idep_nir_headers, idep_mesautil],
)
endforeach

View File

@ -84,5 +84,5 @@ libnouveau_vieux = static_library(
files_nouveau_vieux,
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_dri_common, inc_util],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, dep_libdrm_nouveau],
dependencies : [dep_libdrm, dep_libdrm_nouveau, idep_mesautil],
)

View File

@ -84,5 +84,5 @@ libr200 = static_library(
],
c_args : ['-DRADEON_R200'],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, dep_libdrm_radeon],
dependencies : [dep_libdrm, dep_libdrm_radeon, idep_mesautil],
)

View File

@ -80,5 +80,5 @@ libr100 = static_library(
],
c_args : ['-DRADEON_R100'],
gnu_symbol_visibility : 'hidden',
dependencies : [dep_libdrm, dep_libdrm_radeon],
dependencies : [dep_libdrm, dep_libdrm_radeon, idep_mesautil],
)

View File

@ -731,7 +731,7 @@ libmesa_common = static_library(
cpp_args : [cpp_msvc_compat_args, _mesa_windows_args],
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_libmesa_asm, include_directories('main')],
dependencies : idep_nir_headers,
dependencies : [idep_nir_headers, idep_mesautil],
build_by_default : false,
)
@ -743,7 +743,7 @@ libmesa_classic = static_library(
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_libmesa_asm, include_directories('main')],
link_with : [libmesa_common, libglsl, libmesa_sse41],
dependencies : idep_nir_headers,
dependencies : [idep_nir_headers, idep_mesautil],
build_by_default : false,
)
@ -755,7 +755,7 @@ libmesa_gallium = static_library(
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_libmesa_asm, include_directories('main')],
link_with : [libmesa_common, libglsl, libmesa_sse41],
dependencies : [idep_nir_headers, dep_vdpau],
dependencies : [idep_nir_headers, dep_vdpau, idep_mesautil],
build_by_default : false,
)

View File

@ -35,6 +35,7 @@ libglsl_util = static_library(
'mesa/program/dummy_errors.c',
),
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : dep_valgrind,
gnu_symbol_visibility : 'hidden',
build_by_default : false,
)

View File

@ -69,6 +69,7 @@ libpanfrost_decode = static_library(
'panfrost_decode',
[libpanfrost_decode_files, midgard_pack],
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, inc_panfrost],
dependencies : idep_mesautil,
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
build_by_default : false,

View File

@ -31,6 +31,7 @@ libpanfrost_shared = static_library(
'panfrost_shared',
[libpanfrost_shared_files],
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : idep_mesautil,
c_args : [no_override_init_args, '-O3'],
gnu_symbol_visibility : 'hidden',
build_by_default : false,

View File

@ -53,7 +53,9 @@ libmesa_format = static_library(
'mesa_format',
[files_mesa_format, u_format_table_c, u_format_pack_h],
include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux],
dependencies : dep_m,
# NOTE dep_valgrind used here instead of idep_mesautil due to chicken/egg
# dependencies between util and util/format
dependencies : [dep_m, dep_valgrind],
c_args : [c_msvc_compat_args],
gnu_symbol_visibility : 'hidden',
build_by_default : false

View File

@ -196,7 +196,7 @@ _libmesa_util = static_library(
idep_mesautil = declare_dependency(
link_with : _libmesa_util,
include_directories : inc_util,
dependencies : [dep_zlib, dep_clock, dep_thread, dep_atomic, dep_m],
dependencies : [dep_zlib, dep_clock, dep_thread, dep_atomic, dep_m, dep_valgrind],
)
xmlconfig_deps = []

View File

@ -31,6 +31,14 @@
#if UTIL_FUTEX_SUPPORTED
#if defined(HAVE_VALGRIND) && !defined(NDEBUG)
# include <valgrind.h>
# include <helgrind.h>
# define HG(x) x
#else
# define HG(x)
#endif
/* mtx_t - Fast, simple mutex
*
* While modern pthread mutexes are very fast (implemented using futex), they
@ -69,11 +77,14 @@ simple_mtx_init(simple_mtx_t *mtx, ASSERTED int type)
assert(type == mtx_plain);
mtx->val = 0;
HG(ANNOTATE_RWLOCK_CREATE(mtx));
}
static inline void
simple_mtx_destroy(ASSERTED simple_mtx_t *mtx)
{
HG(ANNOTATE_RWLOCK_DESTROY(mtx));
#ifndef NDEBUG
mtx->val = _SIMPLE_MTX_INVALID_VALUE;
#endif
@ -96,6 +107,8 @@ simple_mtx_lock(simple_mtx_t *mtx)
c = __sync_lock_test_and_set(&mtx->val, 2);
}
}
HG(ANNOTATE_RWLOCK_ACQUIRED(mtx, 1));
}
static inline void
@ -103,6 +116,8 @@ simple_mtx_unlock(simple_mtx_t *mtx)
{
uint32_t c;
HG(ANNOTATE_RWLOCK_RELEASED(mtx, 1));
c = __sync_fetch_and_sub(&mtx->val, 1);
assert(c != _SIMPLE_MTX_INVALID_VALUE);

View File

@ -43,7 +43,7 @@ libvulkan_util = static_library(
'vulkan_util',
[files_vulkan_util, vk_enum_to_str],
include_directories : [inc_include, inc_src, inc_gallium],
dependencies : vulkan_wsi_deps,
dependencies : [vulkan_wsi_deps, idep_mesautil],
c_args : [vulkan_wsi_args],
gnu_symbol_visibility : 'hidden',
build_by_default : false,