commit:     7417ac3af115cd3a9227bb2795fe62d5c71178dc
Author:     Mario Haustein <mario.haustein <AT> hrz <DOT> tu-chemnitz <DOT> de>
AuthorDate: Thu Jan  1 22:45:21 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jan  1 23:05:34 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7417ac3a

dev-util/ROPgadget: support dev-libs/capstone version 5 and 6

Bug: https://bugs.gentoo.org/967775
Signed-off-by: Mario Haustein <mario.haustein <AT> hrz.tu-chemnitz.de>
Part-of: https://github.com/gentoo/gentoo/pull/45228
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...adget-7.6-r1.ebuild => ROPgadget-7.6-r2.ebuild} |  14 ++-
 ...OPgadget-7.7.ebuild => ROPgadget-7.7-r1.ebuild} |  14 ++-
 dev-util/ROPgadget/ROPgadget-9999.ebuild           |  14 ++-
 .../ROPgadget/files/ROPgadget-7.7-aarch64.patch    | 123 +++++++++++++++++++++
 4 files changed, 156 insertions(+), 9 deletions(-)

diff --git a/dev-util/ROPgadget/ROPgadget-7.6-r1.ebuild 
b/dev-util/ROPgadget/ROPgadget-7.6-r2.ebuild
similarity index 68%
rename from dev-util/ROPgadget/ROPgadget-7.6-r1.ebuild
rename to dev-util/ROPgadget/ROPgadget-7.6-r2.ebuild
index f1fea368fa89..53f8e000d0de 100644
--- a/dev-util/ROPgadget/ROPgadget-7.6-r1.ebuild
+++ b/dev-util/ROPgadget/ROPgadget-7.6-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -25,10 +25,18 @@ SLOT="0"
 
 RDEPEND="
        ${PYTHON_DEPS}
-       >=dev-libs/capstone-5.0.1[python,${PYTHON_USEDEP}]
-       <dev-libs/capstone-6[python,${PYTHON_USEDEP}]
+       dev-libs/capstone[python,${PYTHON_USEDEP}]
 "
 
+PATCHES=(
+       "${FILESDIR}/${PN}-7.7-aarch64.patch"
+)
+
+# Mnemonics changed from Capstone 5 to 6. This leads to false-positive failing
+# tests. Reenable tests as soon as ROPgadget supports Capston 6 (which will be
+# when Capstone 6 becomes stable).
+RESTRICT="test"
+
 python_test() {
        pushd test-suite-binaries || die
        ./test.sh || die "Tests failed with ${EPYTHON}"

diff --git a/dev-util/ROPgadget/ROPgadget-7.7.ebuild 
b/dev-util/ROPgadget/ROPgadget-7.7-r1.ebuild
similarity index 68%
rename from dev-util/ROPgadget/ROPgadget-7.7.ebuild
rename to dev-util/ROPgadget/ROPgadget-7.7-r1.ebuild
index d95f18aa2fb3..11b9885c0d25 100644
--- a/dev-util/ROPgadget/ROPgadget-7.7.ebuild
+++ b/dev-util/ROPgadget/ROPgadget-7.7-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -25,10 +25,18 @@ SLOT="0"
 
 RDEPEND="
        ${PYTHON_DEPS}
-       >=dev-libs/capstone-5.0.1[python,${PYTHON_USEDEP}]
-       <dev-libs/capstone-6[python,${PYTHON_USEDEP}]
+       dev-libs/capstone[python,${PYTHON_USEDEP}]
 "
 
+PATCHES=(
+       "${FILESDIR}/${PN}-7.7-aarch64.patch"
+)
+
+# Mnemonics changed from Capstone 5 to 6. This leads to false-positive failing
+# tests. Reenable tests as soon as ROPgadget supports Capston 6 (which will be
+# when Capstone 6 becomes stable).
+RESTRICT="test"
+
 python_test() {
        pushd test-suite-binaries || die
        ./test.sh || die "Tests failed with ${EPYTHON}"

diff --git a/dev-util/ROPgadget/ROPgadget-9999.ebuild 
b/dev-util/ROPgadget/ROPgadget-9999.ebuild
index 5fe796d1b34d..35dece672689 100644
--- a/dev-util/ROPgadget/ROPgadget-9999.ebuild
+++ b/dev-util/ROPgadget/ROPgadget-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2025 Gentoo Authors
+# Copyright 1999-2026 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -25,10 +25,18 @@ SLOT="0"
 
 RDEPEND="
        ${PYTHON_DEPS}
-       >=dev-libs/capstone-5.0.1[python,${PYTHON_USEDEP}]
-       <dev-libs/capstone-6[python,${PYTHON_USEDEP}]
+       dev-libs/capstone[python,${PYTHON_USEDEP}]
 "
 
+PATCHES=(
+       "${FILESDIR}/${PN}-7.7-aarch64.patch"
+)
+
+# Mnemonics changed from Capstone 5 to 6. This leads to false-positive failing
+# tests. Reenable tests as soon as ROPgadget supports Capston 6 (which will be
+# when Capstone 6 becomes stable).
+RESTRICT="test"
+
 python_test() {
        pushd test-suite-binaries || die
        ./test.sh || die "Tests failed with ${EPYTHON}"

diff --git a/dev-util/ROPgadget/files/ROPgadget-7.7-aarch64.patch 
b/dev-util/ROPgadget/files/ROPgadget-7.7-aarch64.patch
new file mode 100644
index 000000000000..e1c63e11aeba
--- /dev/null
+++ b/dev-util/ROPgadget/files/ROPgadget-7.7-aarch64.patch
@@ -0,0 +1,123 @@
+--- a/ropgadget/gadgets.py
++++ b/ropgadget/gadgets.py
+@@ -8,6 +8,12 @@
+ 
+ import re
+ 
++try:
++    # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6
++    from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64
++except ImportError:
++    pass
++
+ from capstone import *
+ 
+ 
+@@ -21,7 +27,7 @@ class Gadgets(object):
+         re_str = ""
+         if self.__arch == CS_ARCH_X86:
+             re_str = "db|int3"
+-        elif self.__arch == CS_ARCH_ARM64:
++        elif self.__arch == CS_ARCH_AARCH64:
+             re_str = "brk|smc|hvc"
+         if self.__options.filter:
+             if re_str:
+@@ -169,7 +175,7 @@ class Gadgets(object):
+ 
+         elif arch == CS_ARCH_ARM:
+             gadgets = []  # ARM doesn't have RET instructions. Only JOP 
gadgets
+-        elif arch == CS_ARCH_ARM64:
++        elif arch == CS_ARCH_AARCH64:
+             if arch_endian == CS_MODE_BIG_ENDIAN:
+                 gadgets = [
+                                [br"\xd6\x5f\x03\xc0", 4, 4] # ret
+@@ -305,7 +311,7 @@ class Gadgets(object):
+                                [br"\x00[\x00\x40\x80\xc0]{1}\xc0\x81", 4, 4]  
# jmp %g[0-3]
+                           ]
+             arch_mode = 0
+-        elif arch == CS_ARCH_ARM64:
++        elif arch == CS_ARCH_AARCH64:
+             if arch_endian == CS_MODE_BIG_ENDIAN:
+                 gadgets = [
+                                
[br"\xd6[\x1f\x5f]{1}[\x00-\x03]{1}[\x00\x20\x40\x60\x80\xa0\xc0\xe0]{1}", 4, 
4],  # br reg
+@@ -432,7 +438,7 @@ class Gadgets(object):
+ 
+         elif arch == CS_ARCH_SPARC:
+             gadgets = [] # TODO (ta inst)
+-        elif arch == CS_ARCH_ARM64:
++        elif arch == CS_ARCH_AARCH64:
+             gadgets = [] # TODO
+         elif arch == CS_ARCH_ARM:
+             if self.__options.thumb or self.__options.rawMode == "thumb":
+--- a/ropgadget/loaders/elf.py
++++ b/ropgadget/loaders/elf.py
+@@ -8,6 +8,12 @@
+ 
+ from ctypes import *
+ 
++try:
++    # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6
++    from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64
++except ImportError:
++    pass
++
+ from capstone import *
+ 
+ 
+@@ -334,7 +340,7 @@ class ELF(object):
+         elif self.__ElfHeader.e_machine == ELFFlags.EM_ARM:
+             return CS_ARCH_ARM
+         elif self.__ElfHeader.e_machine == ELFFlags.EM_ARM64:
+-            return CS_ARCH_ARM64
++            return CS_ARCH_AARCH64
+         elif self.__ElfHeader.e_machine == ELFFlags.EM_MIPS:
+             return CS_ARCH_MIPS
+         elif self.__ElfHeader.e_machine == ELFFlags.EM_PowerPC or 
self.__ElfHeader.e_machine == ELFFlags.EM_PPC64:
+--- a/ropgadget/loaders/macho.py
++++ b/ropgadget/loaders/macho.py
+@@ -8,6 +8,12 @@
+ 
+ from ctypes import *
+ 
++try:
++    # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6
++    from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64
++except ImportError:
++    pass
++
+ from capstone import *
+ 
+ 
+@@ -304,7 +310,7 @@ class MACHO(object):
+         if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_ARM:
+             return CS_ARCH_ARM
+         if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_ARM64:
+-            return CS_ARCH_ARM64
++            return CS_ARCH_AARCH64
+         if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_MIPS:
+             return CS_ARCH_MIPS
+         if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_POWERPC or 
self.__machHeader.cputype == MACHOFlags.CPU_TYPE_POWERPC64:
+--- a/ropgadget/loaders/raw.py
++++ b/ropgadget/loaders/raw.py
+@@ -6,6 +6,12 @@
+ ##  http://twitter.com/JonathanSalwan
+ ##
+ 
++try:
++    # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6
++    from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64
++except ImportError:
++    pass
++
+ from capstone import *
+ 
+ 
+@@ -29,7 +35,7 @@ class Raw(object):
+         arch =  {
+                     "x86":      CS_ARCH_X86,
+                     "arm":      CS_ARCH_ARM,
+-                    "arm64":    CS_ARCH_ARM64,
++                    "arm64":    CS_ARCH_AARCH64,
+                     "sparc":    CS_ARCH_SPARC,
+                     "mips":     CS_ARCH_MIPS,
+                     "ppc":      CS_ARCH_PPC,

Reply via email to