commit:     d3dd74e856564aac2414a3fca1fd859961ee162f
Author:     Mario Haustein <mario.haustein <AT> hrz <DOT> tu-chemnitz <DOT> de>
AuthorDate: Sun Oct  8 11:54:40 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Feb 16 06:31:24 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d3dd74e8

dev-util/unicorn: fix modern C issue

Closes: https://bugs.gentoo.org/879685
Signed-off-by: Mario Haustein <mario.haustein <AT> hrz.tu-chemnitz.de>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../unicorn-2.0.1-old-style-declaration.patch      |  45 ++++
 .../files/unicorn-2.0.1-strict-prototypes.patch    | 299 +++++++++++++++++++++
 dev-util/unicorn/unicorn-2.0.1-r1.ebuild           |  95 +++++++
 3 files changed, 439 insertions(+)

diff --git a/dev-util/unicorn/files/unicorn-2.0.1-old-style-declaration.patch 
b/dev-util/unicorn/files/unicorn-2.0.1-old-style-declaration.patch
new file mode 100644
index 000000000000..b63ffee0c096
--- /dev/null
+++ b/dev-util/unicorn/files/unicorn-2.0.1-old-style-declaration.patch
@@ -0,0 +1,45 @@
+commit 9a2583e96710ba49a8fd2a4ab87db7212c1e887c
+Upstream: https://github.com/unicorn-engine/unicorn/pull/1886
+Author: Mario Haustein <[email protected]>
+Date:   Sun Oct 8 13:40:23 2023 +0200
+
+    fix deprecated storage-class declarations
+
+--- a/qemu/accel/tcg/cputlb.c
++++ b/qemu/accel/tcg/cputlb.c
+@@ -1415,7 +1415,7 @@ load_memop(const void *haddr, MemOp op)
+     }
+ }
+ 
+-static uint64_t inline
++static inline uint64_t
+ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
+             uintptr_t retaddr, MemOp op, bool code_read,
+             FullLoadHelper *full_load)
+@@ -1983,7 +1983,7 @@ uint64_t cpu_ldq_data(CPUArchState *env, target_ulong 
ptr)
+  * Store Helpers
+  */
+ 
+-static void inline
++static inline void
+ store_memop(void *haddr, uint64_t val, MemOp op)
+ {
+     switch (op) {
+@@ -2014,7 +2014,7 @@ store_memop(void *haddr, uint64_t val, MemOp op)
+     }
+ }
+ 
+-static void inline
++static inline void
+ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
+              TCGMemOpIdx oi, uintptr_t retaddr, MemOp op)
+ {
+@@ -2343,7 +2343,7 @@ void helper_be_stq_mmu(CPUArchState *env, target_ulong 
addr, uint64_t val,
+  * Store Helpers for cpu_ldst.h
+  */
+ 
+-static void inline
++static inline void
+ cpu_store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
+                  int mmu_idx, uintptr_t retaddr, MemOp op) // qq
+ {

diff --git a/dev-util/unicorn/files/unicorn-2.0.1-strict-prototypes.patch 
b/dev-util/unicorn/files/unicorn-2.0.1-strict-prototypes.patch
new file mode 100644
index 000000000000..d8ae8677d837
--- /dev/null
+++ b/dev-util/unicorn/files/unicorn-2.0.1-strict-prototypes.patch
@@ -0,0 +1,299 @@
+commit 5983b399d84c534ad2f19461dd38f69e70ea9cfb
+Upstream: https://github.com/unicorn-engine/unicorn/pull/1886
+Author: Mario Haustein <[email protected]>
+Date:   Sun Oct 8 13:39:13 2023 +0200
+
+    use full prototypes for functions without parameters
+
+--- a/bindings/ruby/unicorn_gem/ext/unicorn.c
++++ b/bindings/ruby/unicorn_gem/ext/unicorn.c
+@@ -31,7 +31,7 @@ VALUE SavedContext = Qnil;
+ VALUE Hook = Qnil;
+ 
+ 
+-void Init_unicorn_engine() {
++void Init_unicorn_engine(void) {
+     rb_require("unicorn_engine/unicorn_const");
+     UnicornModule = rb_define_module("UnicornEngine");
+     UcError = rb_define_class_under(UnicornModule, "UcError", 
rb_eStandardError);
+--- a/samples/mem_apis.c
++++ b/samples/mem_apis.c
+@@ -193,7 +193,7 @@ static void do_nx_demo(bool cause_fault)
+     uc_close(uc);
+ }
+ 
+-static void nx_test()
++static void nx_test(void)
+ {
+     printf("NX demo - step 1: show that code runs to completion\n");
+     do_nx_demo(false);
+@@ -276,7 +276,7 @@ static void do_perms_demo(bool change_perms)
+     uc_close(uc);
+ }
+ 
+-static void perms_test()
++static void perms_test(void)
+ {
+     printf("Permissions demo - step 1: show that area is writeable\n");
+     do_perms_demo(false);
+@@ -355,7 +355,7 @@ static void do_unmap_demo(bool do_unmap)
+     uc_close(uc);
+ }
+ 
+-static void unmap_test()
++static void unmap_test(void)
+ {
+     printf("Unmap demo - step 1: show that area is writeable\n");
+     do_unmap_demo(false);
+--- a/samples/sample_arm.c
++++ b/samples/sample_arm.c
+@@ -366,7 +366,7 @@ static void test_thumb_ite_internal(bool step, uint32_t 
*r2_out,
+     *r3_out = r3;
+ }
+ 
+-static void test_thumb_ite()
++static void test_thumb_ite(void)
+ {
+     uint32_t r2, r3;
+     uint32_t step_r2, step_r3;
+@@ -390,7 +390,7 @@ static void test_thumb_ite()
+     }
+ }
+ 
+-static void test_read_sctlr()
++static void test_read_sctlr(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/samples/sample_arm64.c
++++ b/samples/sample_arm64.c
+@@ -197,7 +197,7 @@ static void test_arm64eb(void)
+     uc_close(uc);
+ }
+ 
+-static void test_arm64_sctlr()
++static void test_arm64_sctlr(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+@@ -248,7 +248,7 @@ static uint32_t hook_mrs(uc_engine *uc, uc_arm64_reg reg,
+     return 1;
+ }
+ 
+-static void test_arm64_hook_mrs()
++static void test_arm64_hook_mrs(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/samples/sample_batch_reg.c
++++ b/samples/sample_batch_reg.c
+@@ -49,7 +49,7 @@ void hook_code(uc_engine *uc, uint64_t addr, uint32_t size, 
void *user_data)
+     printf("HOOK_CODE: 0x%" PRIx64 ", 0x%x\n", addr, size);
+ }
+ 
+-int main()
++int main(void)
+ {
+     int i;
+     uc_hook sys_hook;
+--- a/samples/sample_ctl.c
++++ b/samples/sample_ctl.c
+@@ -79,7 +79,7 @@ static void trace_new_edge(uc_engine *uc, uc_tb *cur, uc_tb 
*prev, void *data)
+            prev->pc + prev->size - 1, cur->pc);
+ }
+ 
+-void test_uc_ctl_exits()
++void test_uc_ctl_exits(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+@@ -193,7 +193,7 @@ double time_emulation(uc_engine *uc, uint64_t start, 
uint64_t end)
+     return (t2 - t1) * 1000.0 / CLOCKS_PER_SEC;
+ }
+ 
+-static void test_uc_ctl_tb_cache()
++static void test_uc_ctl_tb_cache(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/samples/sample_x86.c
++++ b/samples/sample_x86.c
+@@ -1240,7 +1240,7 @@ static void test_i386_invalid_mem_read_in_tb(void)
+     uc_close(uc);
+ }
+ 
+-static void test_i386_smc_xor()
++static void test_i386_smc_xor(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+@@ -1319,7 +1319,7 @@ static void mmio_write_callback(uc_engine *uc, uint64_t 
offset, unsigned size,
+     return;
+ }
+ 
+-static void test_i386_mmio()
++static void test_i386_mmio(void)
+ {
+     uc_engine *uc;
+     int r_ecx = 0xdeadbeef;
+@@ -1392,7 +1392,7 @@ static bool test_i386_hook_mem_invalid_cb(uc_engine *uc, 
uc_mem_type type,
+     return true;
+ }
+ 
+-static void test_i386_hook_mem_invalid()
++static void test_i386_hook_mem_invalid(void)
+ {
+     uc_engine *uc;
+     uc_hook hook;
+--- a/samples/sample_x86_32_gdt_and_seg_regs.c
++++ b/samples/sample_x86_32_gdt_and_seg_regs.c
+@@ -163,7 +163,7 @@ static void hex_dump(unsigned char *ptr, unsigned int len)
+ }
+ */
+ 
+-static void gdt_demo()
++static void gdt_demo(void)
+ {
+     uc_engine *uc;
+     uc_hook hook1, hook2;
+--- a/tests/regress/00opcode_uc_crash.c
++++ b/tests/regress/00opcode_uc_crash.c
+@@ -7,7 +7,7 @@
+ #define X86_CODE32 "\x00" // add byte ptr ds:[eax],al
+ #define ADDRESS 0x1000000
+ 
+-static void VM_exec()
++static void VM_exec(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/tests/regress/arm_enable_vfp.c
++++ b/tests/regress/arm_enable_vfp.c
+@@ -6,7 +6,7 @@
+ #define ADDRESS 0x1000
+ #define ARM_VMOV "\xC0\xEF\x10\x00" // VMOV.I32 D16, #0 ; Vector Move
+ 
+-int main()
++int main(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/tests/regress/block_test.c
++++ b/tests/regress/block_test.c
+@@ -24,7 +24,7 @@ void cb_hookblock(uc_engine *uc, uint64_t address, uint32_t 
size, void *user_dat
+    fprintf(stderr, "ok %d - basic block size is correct\n", count++);
+ }
+ 
+-int main() {
++int main(void) {
+    uc_engine *uc;
+ 
+    fprintf(stderr, "# basic block callback test\n");
+--- a/tests/regress/eflags_noset.c
++++ b/tests/regress/eflags_noset.c
+@@ -20,7 +20,7 @@ typedef uint64_t puint;
+ #define PRIX3264 PRIX64
+ #endif
+ 
+-uint32_t realEflags()
++uint32_t realEflags(void)
+ {
+     puint val = 0;
+ 
+@@ -55,7 +55,7 @@ uint32_t realEflags()
+     return (uint32_t)val & 0xFFFFFFFF;
+ }
+ 
+-static void VM_exec()
++static void VM_exec(void)
+ {
+ #if defined(__i386__) || defined(__x86_64__)
+     uc_engine *uc;
+--- a/tests/regress/eflags_nosync.c
++++ b/tests/regress/eflags_nosync.c
+@@ -64,7 +64,7 @@ static bool hook_invalid_mem(uc_engine *uc, uc_mem_type 
type, uint64_t address,
+     }
+ }
+ 
+-static void VM_exec()
++static void VM_exec(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/tests/regress/emu_clear_errors.c
++++ b/tests/regress/emu_clear_errors.c
+@@ -38,7 +38,7 @@ bool cb_hookunmapped(uc_engine *uc, uc_mem_type type, 
uint64_t address, uint32_t
+              "\x56" \
+              "\xFF\x15\x20\x20\x00\x10"
+ 
+-int main() {
++int main(void) {
+    uc_engine *uc;
+ 
+    uc_err err = uc_open(UC_ARCH_X86, UC_MODE_32, &uc);
+--- a/tests/regress/hook_extrainvoke.c
++++ b/tests/regress/hook_extrainvoke.c
+@@ -14,7 +14,7 @@ void hook_ins(uc_engine *uc, uint64_t address, uint32_t 
size, void *user_data)
+     printf("hook called\n");
+ }
+ 
+-static void VM_exec()
++static void VM_exec(void)
+ {
+     uc_engine *uc;
+     uc_err err;
+--- a/tests/regress/map_crash.c
++++ b/tests/regress/map_crash.c
+@@ -6,7 +6,7 @@
+ #define UC_BUG_WRITE_SIZE 13000
+ #define UC_BUG_WRITE_ADDR 0x1000
+ 
+-int main()
++int main(void)
+ {
+     int size;
+     uint8_t *buf;
+--- a/tests/regress/map_write.c
++++ b/tests/regress/map_write.c
+@@ -6,7 +6,7 @@
+ #define SIZE 1024*64
+ #define OVERFLOW 1
+ 
+-int main()
++int main(void)
+ {
+     uc_engine *uc = NULL;
+     uint8_t *buf = NULL, *buf2 = NULL;
+--- a/tests/regress/mips_kseg0_1.c
++++ b/tests/regress/mips_kseg0_1.c
+@@ -20,7 +20,7 @@
+ 
+ #define MIPS_CODE_EL "\x56\x34\x21\x34" // ori $at, $at, 0x3456;
+ 
+-int main() 
++int main(void)
+ {
+ 
+     uc_engine *uc;
+--- a/tests/regress/sigill.c
++++ b/tests/regress/sigill.c
+@@ -16,7 +16,7 @@ void _interrupt(uc_engine *uc, uint32_t intno, void 
*user_data)
+     }
+ }
+ 
+-int main()
++int main(void)
+ {
+     int size;
+     uint8_t *buf;
+--- a/tests/regress/sigill2.c
++++ b/tests/regress/sigill2.c
+@@ -6,7 +6,7 @@
+ #define UC_BUG_WRITE_SIZE 128
+ #define UC_BUG_WRITE_ADDR 0x2000
+ 
+-int main()
++int main(void)
+ {
+     int size;
+     uc_engine *uc;

diff --git a/dev-util/unicorn/unicorn-2.0.1-r1.ebuild 
b/dev-util/unicorn/unicorn-2.0.1-r1.ebuild
new file mode 100644
index 000000000000..ce52142b1b04
--- /dev/null
+++ b/dev-util/unicorn/unicorn-2.0.1-r1.ebuild
@@ -0,0 +1,95 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PV=${PV/_/-}
+
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_OPTIONAL=1
+PYTHON_COMPAT=( python3_{10..12} )
+inherit cmake distutils-r1
+
+DESCRIPTION="A lightweight multi-platform, multi-architecture CPU emulator 
framework"
+HOMEPAGE="https://www.unicorn-engine.org";
+
+if [[ ${PV} == *9999 ]]; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/unicorn-engine/unicorn";
+else
+       
SRC_URI="https://github.com/unicorn-engine/unicorn/archive/${MY_PV}.tar.gz -> 
${P}.gh.tar.gz"
+       KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+S="${WORKDIR}/${PN}-${MY_PV}"
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1"
+SLOT="0/2"
+IUSE="python static-libs"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+DEPEND="${PYTHON_DEPS}
+       dev-libs/glib:2"
+RDEPEND="python? ( ${PYTHON_DEPS} )"
+BDEPEND="virtual/pkgconfig
+       python? ( ${DISTUTILS_DEPS} )"
+
+UNICORN_TARGETS="x86 arm aarch64 riscv mips sparc m68k ppc s390x tricore"
+
+PATCHES=(
+       "${FILESDIR}/${P}-strict-prototypes.patch"
+       "${FILESDIR}/${P}-old-style-declaration.patch"
+)
+
+# suppress warning wrt 'implicit function declaration' in config logs due to
+# auto-detection of some libc functions (bug #906919)
+QA_CONFIG_IMPL_DECL_SKIP=(
+       clock_adjtime
+       malloc_trim
+)
+
+wrap_python() {
+       if use python; then
+               # src_prepare
+               # Do not compile C extensions
+               export LIBUNICORN_PATH=1
+
+               pushd bindings/python >/dev/null || die
+               distutils-r1_${1} "$@"
+               popd >/dev/null || die
+       fi
+}
+
+src_prepare() {
+       # Build from sources
+       rm -r bindings/python/prebuilt || die "failed to remove prebuilt files"
+
+       cmake_src_prepare
+       wrap_python ${FUNCNAME}
+}
+
+src_configure(){
+       local mycmakeargs=(
+               -DUNICORN_ARCH="${UNICORN_TARGETS// /;}"
+       )
+
+       cmake_src_configure
+
+       wrap_python ${FUNCNAME}
+}
+
+src_compile() {
+       cmake_src_compile
+
+       wrap_python ${FUNCNAME}
+}
+
+src_install() {
+       cmake_src_install
+
+       if ! use static-libs; then
+               find "${ED}" -type f \( -name "*.a" -o -name "*.la" \) -delete 
|| die
+       fi
+
+       wrap_python ${FUNCNAME}
+}

Reply via email to