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,
