mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-07 02:23:58 +00:00
Add the acr --enable-threadsafety flag and the same for meson ##build
* Initial support for protecting critical sections
This commit is contained in:
parent
97c4373c4b
commit
79c401bb6d
7
configure
vendored
7
configure
vendored
@ -22,6 +22,7 @@ DEBUGGER=1
|
||||
USE_MAGIC=0
|
||||
WANT_THREADS=1
|
||||
LOADLIBS=1
|
||||
R_CRITICAL_ENABLED=0
|
||||
WANT_DYLINK=1
|
||||
HAVE_FORK=1
|
||||
WANT_PTRACE_WRAP=1
|
||||
@ -187,6 +188,7 @@ Optional Features:
|
||||
--with-sysmagic force to use system's magic
|
||||
--disable-threads disable use of thread apis
|
||||
--disable-loadlibs disable loading plugins
|
||||
--enable-threadsafety enable mutexes in critical code paths
|
||||
--without-dylink disable support for dynamic loading of plugins
|
||||
--without-fork disable fork
|
||||
--without-ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux
|
||||
@ -281,7 +283,7 @@ echo "LANGS: c"
|
||||
echo "REQUIRED: libdl"
|
||||
echo "OPTIONAL: libmagic libz libzip libxxhash libssl liblibuv>=1.0.0"
|
||||
echo "PKG-CONFIG: capstone liblz4 openssl libuv"
|
||||
echo "FLAGS: --disable-debugger --with-sysmagic --disable-threads --disable-loadlibs --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-capstone5 --with-capstone4 --with-syscapstone --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-openssl --with-libuv --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2"
|
||||
echo "FLAGS: --disable-debugger --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-capstone5 --with-capstone4 --with-syscapstone --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-openssl --with-libuv --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2"
|
||||
exit 0
|
||||
;;
|
||||
--cache-file)
|
||||
@ -335,6 +337,7 @@ echo "FLAGS: --disable-debugger --with-sysmagic --disable-threads --disable-
|
||||
"--with-sysmagic") USE_MAGIC="1"; ;;
|
||||
"--disable-threads") WANT_THREADS="0"; ;;
|
||||
"--disable-loadlibs") LOADLIBS="0"; ;;
|
||||
"--enable-threadsafety") R_CRITICAL_ENABLED="1"; ;;
|
||||
"--without-dylink") WANT_DYLINK="0"; ;;
|
||||
"--without-fork") HAVE_FORK="0"; ;;
|
||||
"--without-ptrace-wrap") WANT_PTRACE_WRAP="0"; ;;
|
||||
@ -373,7 +376,7 @@ parse_options "$1"
|
||||
shift
|
||||
done
|
||||
|
||||
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_MAGIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WITH_LIBR USE_CS5 USE_CS4 WITH_CAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE_SIGACTION HAVE_CLOCK_GETTIME CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP HAVE_LIB_SSL SSL_CFLAGS SSL_LDFLAGS HAVE_PKGCFG_OPENSSL HAVE_OPENSSL WANT_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL"
|
||||
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_MAGIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS R_CRITICAL_ENABLED WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WITH_LIBR USE_CS5 USE_CS4 WITH_CAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE_SIGACTION HAVE_CLOCK_GETTIME CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP HAVE_LIB_SSL SSL_CFLAGS SSL_LDFLAGS HAVE_PKGCFG_OPENSSL HAVE_OPENSSL WANT_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL"
|
||||
|
||||
create_environ
|
||||
|
||||
|
@ -30,6 +30,8 @@ ARG_DISABLE WANT_THREADS threads disable use of thread apis ;
|
||||
(( useful for static builds . see sys/static.sh ))
|
||||
ARG_DISABLE LOADLIBS loadlibs disable loading plugins ;
|
||||
|
||||
ARG_ENABLE R_CRITICAL_ENABLED threadsafety enable mutexes in critical code paths ;
|
||||
|
||||
ARG_WITHOUT WANT_DYLINK dylink disable support for dynamic loading of plugins ;
|
||||
ARG_WITHOUT HAVE_FORK fork disable fork ;
|
||||
ARG_WITHOUT WANT_PTRACE_WRAP ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux ;
|
||||
|
@ -223,6 +223,13 @@ R_API bool r_th_lock_tryenter(RThreadLock *thl);
|
||||
R_API bool r_th_lock_enter(RThreadLock *thl);
|
||||
R_API bool r_th_lock_leave(RThreadLock *thl);
|
||||
R_API void *r_th_lock_free(RThreadLock *thl);
|
||||
#if R_CRITICAL_ENABLED
|
||||
#define R_CRITICAL_ENTER(x) r_th_lock_enter(x->lock)
|
||||
#define R_CRITICAL_LEAVE(x) r_th_lock_leave(x->lock)
|
||||
#else
|
||||
#define R_CRITICAL_ENTER(x)
|
||||
#define R_CRITICAL_LEAVE(x)
|
||||
#endif
|
||||
|
||||
R_API RThreadCond *r_th_cond_new(void);
|
||||
R_API void r_th_cond_signal(RThreadCond *cond);
|
||||
|
@ -8,6 +8,7 @@ extern "C" {
|
||||
#include "r_version.h"
|
||||
|
||||
#define R_CHECKS_LEVEL @R_CHECKS_LEVEL@
|
||||
#define R_CRITICAL_ENABLED @R_CRITICAL_ENABLED@
|
||||
#define DEBUGGER @DEBUGGER@
|
||||
#define HAVE_DECL_ADDR_NO_RANDOMIZE @HAVE_DECL_ADDR_NO_RANDOMIZE@
|
||||
#define HAVE_ARC4RANDOM_UNIFORM @HAVE_ARC4RANDOM_UNIFORM@
|
||||
|
13
meson.build
13
meson.build
@ -121,6 +121,12 @@ if get_option('static_runtime')
|
||||
endif
|
||||
endif
|
||||
|
||||
if get_option('threadsafety')
|
||||
r2_critical_enabled = 1
|
||||
else
|
||||
r2_critical_enabled = 0
|
||||
endif
|
||||
|
||||
if get_option('wasan')
|
||||
add_project_arguments('/DEBUG', language: 'c')
|
||||
add_project_arguments('/MD', language: 'c')
|
||||
@ -242,12 +248,6 @@ conf_data.set('plugins_egg', '&r_egg_plugin_' + ', &r_egg_plugin_'.join(egg_plug
|
||||
conf_data.set('plugins_lang', '&r_lang_plugin_' + ', &r_lang_plugin_'.join(lang_plugins) + ', 0')
|
||||
conf_data.set('plugins_parse', '&r_parse_plugin_' + ', &r_parse_plugin_'.join(parse_plugins) + ', 0')
|
||||
|
||||
# userconf_h = configure_file(
|
||||
# input: 'libr/include/r_userconf.h.acr',
|
||||
# output: 'r_userconf.h',
|
||||
# configuration: conf_data
|
||||
#)
|
||||
|
||||
config_h = configure_file(
|
||||
input: 'libr/config.h.in',
|
||||
output: 'config.h',
|
||||
@ -375,6 +375,7 @@ userconf.set10('WANT_DYLINK', use_dylink)
|
||||
userconf.set10('WANT_THREADS', get_option('want_threads'))
|
||||
userconf.set10('WANT_CAPSTONE', get_option('want_capstone'))
|
||||
userconf.set10('HAVE_PTRACE', have_ptrace)
|
||||
userconf.set('R_CRITICAL_ENABLED', r2_critical_enabled)
|
||||
userconf.set10('USE_PTRACE_WRAP', use_ptrace_wrap)
|
||||
userconf.set10('WITH_GPL', not get_option('nogpl'))
|
||||
ok = cc.has_header_symbol('sys/personality.h', 'ADDR_NO_RANDOMIZE')
|
||||
|
@ -3,6 +3,7 @@ option('static_runtime', type: 'boolean', value: false)
|
||||
option('local', type: 'boolean', value: false, description: 'Adds support for local/side-by-side installation (sets rpath if needed)')
|
||||
option('blob', type: 'boolean', value: false, description: 'Compile just one binary which dispatch to the right handlers based on the name used to call it')
|
||||
option('wasan', type: 'boolean', value: false, description: 'Windows-specific hack to build with asan using msvc')
|
||||
option('threadsafety', type: 'boolean', value: false, description: 'Enable thread-safe checks on critical paths')
|
||||
|
||||
# Plugins
|
||||
option('plugins', type: 'string', value: '', description: 'Comma separated list of plugin names')
|
||||
|
Loading…
Reference in New Issue
Block a user