diff --git a/.github/workflows/tcc.yml b/.github/workflows/tcc.yml index 7e60fa3881..f04c9f8232 100644 --- a/.github/workflows/tcc.yml +++ b/.github/workflows/tcc.yml @@ -7,6 +7,50 @@ on: pull_request: jobs: + newabi: + name: ubuntu-tcc-newabi + runs-on: ubuntu-latest + steps: + - name: Checkout TinyCC repository + run: | + git clone https://github.com/mirror/tinycc.git + cd tinycc + git checkout mob + git reset --hard 560526a49dfffef118bcb7fba83c727639ec0a1d + - name: Compiling and installing TinyCC + working-directory: tinycc + run: | + sh ./configure --prefix=/usr + make -j + sudo make install + - uses: actions/checkout@v3 + - name: Checkout our Testsuite Binaries + uses: actions/checkout@v3 + with: + repository: radareorg/radare2-testbins + path: test/bins + - name: Install dependencies + run: | + sudo apt update --assume-yes + sudo apt-get --assume-yes install gperf wheel setuptools || true + sudo python -m pip install --upgrade pip + pip install r2pipe + - name: Configure, build and install (Using the new ABI) + env: + CC: tcc + run: | + ./configure --prefix=/usr --with-compiler=tcc --with-new-abi + make -j + sudo make install + - name: Run tests + env: + PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig + run: | + r2 -v + r2r -v + export R2R_SKIP_ASM=1 + export R2R_SKIP_ARCHOS=1 + make -j -C test build: name: ubuntu-tcc-test runs-on: ubuntu-latest diff --git a/configure b/configure index f663a3b506..43636cffa4 100755 --- a/configure +++ b/configure @@ -42,6 +42,7 @@ WITH_GPL=1 WANT_SSL=0 WANT_SSL_CRYPTO=0 WANT_LIBUV=0 +USE_NEW_ABI=0 USE_RPATH=0 [ -z "${USERCC}" ] && USERCC="gcc" [ -z "${USEROSTYPE}" ] && USEROSTYPE="auto" @@ -216,6 +217,7 @@ Optional Features: --with-ssl build with (Open|Boring|..)SSL if possible --with-ssl-crypto build crypto code with libssl --with-libuv use libuv if available + --with-new-abi use the new ABI breaking changes scheduled for the next major release --with-rpath use rpath to build --with-compiler Define compiler to use (see mk/) (USERCC=gcc) --with-ostype Choose OS ( android windows wsl mingw32 bsd solaris gnulinux darwin haiku ) (USEROSTYPE=auto) @@ -299,7 +301,7 @@ echo "LANGS: c" echo "REQUIRED: libdl" echo "OPTIONAL: libmagic libz libzip libxxhash libssl liblibuv>=1.0.0" echo "PKGCONFIG: capstone 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 --with-syslz4 --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --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-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 --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) @@ -375,6 +377,7 @@ echo "FLAGS: --disable-debugger --with-sysmagic --disable-threads --disabl "--with-ssl") WANT_SSL="1"; ;; "--with-ssl-crypto") WANT_SSL_CRYPTO="1"; ;; "--with-libuv") WANT_LIBUV="1"; ;; +"--with-new-abi") USE_NEW_ABI="1"; ;; "--with-rpath") USE_RPATH="1"; ;; --with-compiler) if [ -z "${value}" ]; then USERCC="gcc"; else USERCC="${value}" ; fi ;; --with-ostype) if [ -z "${value}" ]; then USEROSTYPE="auto"; else USEROSTYPE="${value}" ; fi ;; @@ -399,7 +402,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 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_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_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 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" create_environ @@ -910,7 +913,7 @@ pcgen() { PCNAME="${1}" ; shift REQUIRES="$@" - echo "generating ${PCFILE}" > /dev/stderr + echo "generating ${PCFILE}" >&2 echo "prefix=${PREFIX}" > ${PCFILE} echo "exec_prefix=\${prefix}" >> ${PCFILE} echo "libdir=${PKGCFG_LIBDIR}" >> ${PCFILE} @@ -994,7 +997,7 @@ do_remove if [ "$QUIET" = 0 ]; then echo echo "Final report:" -for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO 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_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_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_SMALLZ4 ; do eval VAL="\$${A}" [ -z "${VAL}" ] && VAL="\"\"" echo " - ${A} = ${VAL}" diff --git a/configure.acr b/configure.acr index 3e2cf9d4ca..353c5aa91b 100644 --- a/configure.acr +++ b/configure.acr @@ -180,6 +180,8 @@ IF HAVE_LIBUV_VERSION_1_0_0 { HAVE_LIBUV = 0 ; } +ARG_WITH USE_NEW_ABI new-abi use the new ABI breaking changes scheduled for the next major release ; + ARG_WITH USE_RPATH rpath use rpath to build ; (( rules for the compiler )) @@ -294,7 +296,7 @@ ARG_WITH R_CHECKS_LEVEL=2 checks-level value between 0 and 3 to enable different ARG_DISABLE WANT_DEBUGSTUFF debug-stuff disable the log messages and disable control-c ; REPORT - BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO + 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 diff --git a/libr/include/r_bin.h b/libr/include/r_bin.h index 88101aadfb..008163a952 100644 --- a/libr/include/r_bin.h +++ b/libr/include/r_bin.h @@ -596,8 +596,14 @@ typedef struct r_bin_class_t { int index; // should be unsigned? ut64 addr; char *ns; // namespace // maybe RBinName? +#if R2_USE_NEW_ABI + // Use RVec here RList *methods; // RList *fields; // +#else + RList *methods; // + RList *fields; // +#endif // RList *interfaces; // RBinAttribute attr; ut64 lang; diff --git a/libr/include/r_userconf.h.acr b/libr/include/r_userconf.h.acr index f41f7b7718..7fc6e486aa 100644 --- a/libr/include/r_userconf.h.acr +++ b/libr/include/r_userconf.h.acr @@ -20,6 +20,7 @@ extern "C" { #define WANT_THREADS @WANT_THREADS@ #define WANT_CAPSTONE @WANT_CAPSTONE@ #define HAVE_LINUX_CAN_H @HAVE_LINUX_CAN_H@ +#define R2_USE_NEW_ABI @USE_NEW_ABI@ #define R_BUILDSYSTEM "@R2_BUILDSYSTEM@" #if @USE_CS4@ == 1 diff --git a/meson.build b/meson.build index 2cf90cefcc..15e103e6c1 100644 --- a/meson.build +++ b/meson.build @@ -397,6 +397,7 @@ userconf.set10('HAVE_GPERF', get_option('sdb_cgen')) userconf.set10('WANT_DYLINK', use_dylink) userconf.set10('WANT_THREADS', get_option('want_threads')) userconf.set10('WANT_CAPSTONE', get_option('want_capstone')) +userconf.set10('USE_NEW_ABI', get_option('use_new_abi')) userconf.set10('HAVE_PTRACE', have_ptrace) userconf.set10('WANT_DEBUGSTUFF', get_option('debugstuff')) userconf.set('R_CRITICAL_ENABLED', r2_critical_enabled) diff --git a/meson_options.txt b/meson_options.txt index 321c80a197..403ad22759 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -28,6 +28,7 @@ option('r2_gittip', type: 'string', value: '') option('checks_level', type: 'integer', value: 9999, description: 'Value between 0 and 3 to enable different level of assert (see R_CHECKS_LEVEL). By default its value depends on buildtype (2 on debug, 1 on release).') option('capstone_in_builddir', type: 'boolean', value: false, description: 'When true, capstone is downloaded in the build directory and not in the source one') option('want_threads', type: 'boolean', value: true) +option('use_new_abi', type: 'boolean', value: false) option('want_capstone', type: 'boolean', value: true) option('use_sys_capstone', type: 'boolean', value: false) option('use_capstone_version', type: 'combo', choices: ['v3', 'v4', 'v5', 'next'], value: 'v5')