Skip to content

Commit

Permalink
Fix #23903 - compile on pi4, debian bookworm due to missing '_atomic_…
Browse files Browse the repository at this point in the history
…*' functions ##build
  • Loading branch information
bsekisser authored Jan 21, 2025
1 parent aa41958 commit 60befec
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 4 deletions.
1 change: 1 addition & 0 deletions config-user.mk.acr
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ USE_LIB_MAGIC=@USE_LIB_MAGIC@
HAVE_LIB_XXHASH=@HAVE_LIB_XXHASH@
USE_LIB_XXHASH=@USE_LIB_XXHASH@
USE_LIB_ZIP=@USE_LIB_ZIP@
LIBATOMIC=@LIBATOMIC@
LIBMAGIC=@LIBMAGIC@
LIBZIP=@LIBZIP@
LIBXXHASH=@LIBXXHASH@
Expand Down
33 changes: 29 additions & 4 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ control_c() {
}
trap control_c 2
DEBUGGER=1
USE_LIB_ATOMIC=0
USE_MAGIC=0
WANT_THREADS=1
LOADLIBS=1
Expand Down Expand Up @@ -195,6 +196,7 @@ EOF2
printf "
Optional Features:
--disable-debugger disable native debugger features
--with-libatomic force to use libatomic
--with-sysmagic force to use system's magic
--disable-threads disable use of thread apis
--disable-loadlibs disable loading plugins
Expand Down Expand Up @@ -301,9 +303,9 @@ echo "EMAIL: [email protected]"
echo "DESCRIPTION: The UNIX-like reverse engineering toolkit"
echo "LANGS: c"
echo "REQUIRED: libdl"
echo "OPTIONAL: libmagic libz libzip libxxhash libssl liblibuv>=1.0.0"
echo "OPTIONAL: libatomic libmagic libz libzip libxxhash libssl liblibuv>=1.0.0"
echo "PKGCONFIG: capstone libsqsh liblz4 openssl libuv"
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-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --without-sqsh --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-new-abi --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff"
echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --without-sqsh --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-new-abi --with-rpath --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff"
exit 0
;;
--cache-file)
Expand Down Expand Up @@ -356,6 +358,7 @@ echo "FLAGS: --disable-debugger --with-sysmagic --disable-threads --disabl
MANDIR="$value"; ;;

"--disable-debugger") DEBUGGER="0"; ;;
"--with-libatomic") USE_LIB_ATOMIC="1"; ;;
"--with-sysmagic") USE_MAGIC="1"; ;;
"--disable-threads") WANT_THREADS="0"; ;;
"--disable-loadlibs") LOADLIBS="0"; ;;
Expand Down Expand Up @@ -405,7 +408,7 @@ parse_options "$1"
shift
done

ENVWORDS="MANDIR DESCRIPTION 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 PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_MAGIC HAVE_LINUX_CAN_H 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 WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH 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 WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_NEW_ABI USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF"
ENVWORDS="MANDIR DESCRIPTION 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 PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_ATOMIC HAVE_LIB_MAGIC HAVE_LINUX_CAN_H USE_LIB_ATOMIC LIBATOMIC 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 WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH 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___ATOMIC_FETCH_ADD_8 HAVE_SIGACTION HAVE_CLOCK_GETTIME FORCE_LIB_ATOMIC CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV USE_NEW_ABI USE_RPATH USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF"

create_environ

Expand Down Expand Up @@ -610,6 +613,7 @@ else
fi
}

check_library HAVE_LIB_ATOMIC atomic 0
check_library HAVE_LIB_MAGIC magic 0
check_include() {
VAR=$1
Expand Down Expand Up @@ -637,6 +641,13 @@ fi

check_include HAVE_LINUX_CAN_H linux/can.h 0

if [ 11 = "$HAVE_LIB_ATOMIC$USE_LIB_ATOMIC" ]; then

USE_LIB_ATOMIC="1"
LIBATOMIC="'-latomic'"
else
USE_LIB_ATOMIC="0"
LIBATOMIC=""; fi
if [ 11 = "$HAVE_LIB_MAGIC$USE_MAGIC" ]; then

USE_LIB_MAGIC="1"
Expand Down Expand Up @@ -767,6 +778,13 @@ if [ $? = 0 ]; then
echo yes ; HAVE_CLOCK_NANOSLEEP=1
else
HAVE_CLOCK_NANOSLEEP=0 ; echo no ; fi
printf "checking function __atomic_fetch_add_8() in c... "
echo "extern int __atomic_fetch_add_8(); int main(int ac, char **av){ __atomic_fetch_add_8(0); return 0; }" > test.c
${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -lc test.c >/dev/null 2>&1
if [ $? = 0 ]; then
echo yes ; HAVE___ATOMIC_FETCH_ADD_8=1
else
HAVE___ATOMIC_FETCH_ADD_8=0 ; echo no ; fi
printf "checking function sigaction() in c... "
echo "extern int sigaction(); int main(int ac, char **av){ sigaction(0); return 0; }" > test.c
${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -lc test.c >/dev/null 2>&1
Expand All @@ -781,6 +799,13 @@ if [ $? = 0 ]; then
echo yes ; HAVE_CLOCK_GETTIME=1
else
HAVE_CLOCK_GETTIME=0 ; echo no ; fi
if [ "$HAVE___ATOMIC_FETCH_ADD_8" = "0" ]; then
if [ "$HAVE_LIB_ATOMIC" = "1" ]; then
FORCE_LIB_ATOMIC="1"
[ -z "${LIBATOMIC}" ] && LIBATOMIC="'-latomic'"
else
FORCE_LIB_ATOMIC="0"
[ -z "${LIBATOMIC}" ] && LIBATOMIC=""; fi; fi
if [ "$HAVE_CLOCK_GETTIME" = "0" ]; then
if [ "$HAVE_DECL___GLIBC__" = "1" ]; then
CLOCK_LDFLAGS="${CLOCK_LDFLAGS} '-lrt'"; fi; fi
Expand Down Expand Up @@ -1021,7 +1046,7 @@ do_remove
if [ "$QUIET" = 0 ]; then
echo
echo "Final report:"
for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO USE_NEW_ABI HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 ; do
for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO USE_NEW_ABI HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC ; do
eval VAL="\$${A}"
[ -z "${VAL}" ] && VAL="\"\""
echo " - ${A} = ${VAL}"
Expand Down
23 changes: 23 additions & 0 deletions configure.acr
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,19 @@ CHKPRG! PATCH patch
CHKPRG! AR ar
CHKPRG GIT git
CHKPRG GPERF gperf
CHKLIB atomic
CHKLIB magic
CHKINC linux/can.h

ARG_WITH USE_LIB_ATOMIC libatomic force to use libatomic ;
IFAND HAVE_LIB_ATOMIC USE_LIB_ATOMIC {
USE_LIB_ATOMIC = 1 ;
LIBATOMIC = '-latomic' ;
}{
USE_LIB_ATOMIC = 0 ;
LIBATOMIC = '' ;
}

ARG_WITH USE_MAGIC sysmagic force to use system's magic ;
IFAND HAVE_LIB_MAGIC USE_MAGIC {
USE_LIB_MAGIC = 1 ;
Expand Down Expand Up @@ -127,9 +138,20 @@ CHKFNC c arc4random_uniform
CHKFNC c explicit_bzero
CHKFNC c explicit_memset
CHKFNC c clock_nanosleep
CHKFNC c __atomic_fetch_add_8
CHKFNC c sigaction
CHKFNC c clock_gettime

IFNOT HAVE___ATOMIC_FETCH_ADD_8 {
IF HAVE_LIB_ATOMIC {
FORCE_LIB_ATOMIC = 1 ;
LIBATOMIC ?= '-latomic' ;
}{
FORCE_LIB_ATOMIC = 0 ;
LIBATOMIC ?= '' ;
}
}

IFNOT HAVE_CLOCK_GETTIME {
IF HAVE_DECL___GLIBC__ {
CLOCK_LDFLAGS += '-lrt' ;
Expand Down Expand Up @@ -312,6 +334,7 @@ REPORT
HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX
R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC NEW_IO_CACHE USE_SQSH
USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4
USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC
;

PKGCFG_DO pkgcfg/r_egg.pc r_egg r_asm r_syscall r_util r_reg r_flag r_cons ;
Expand Down
1 change: 1 addition & 0 deletions libr/lang/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ CFLAGS+=-DR2_PLUGIN_INCORE
CFLAGS+=-DCONFIG_VERSION=\"0.0.0\"
OBJS+=$(QJS_OBJS)
# LINK+=$(QJS_FILES)
LDFLAGS+=$(LIBATOMIC)

include ../../shlr/qjs/deps.mk
include ../rules.mk

0 comments on commit 60befec

Please sign in to comment.