gnu: Add python-pyvex.

* gnu/packages/patches/python-pyvex-remove-angr-dependency.patch:
New patch.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/python-xyz.scm (python-pyvex): New variable.

Signed-off-by: jgart <jgart@dismail.de>
This commit is contained in:
Sören Tempel 2024-07-11 23:27:19 +02:00 committed by jgart
parent c31c325a12
commit 0fc16f1b0e
No known key found for this signature in database
GPG key ID: A52AA2B477B6DD35
3 changed files with 118 additions and 0 deletions

View file

@ -1981,6 +1981,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-pytorch-runpath.patch \
%D%/packages/patches/python-pytorch-system-libraries.patch \
%D%/packages/patches/python-pytorch-without-kineto.patch \
%D%/packages/patches/python-pyvex-remove-angr-dependency.patch \
%D%/packages/patches/python-robotframework-atest.patch \
%D%/packages/patches/python-robotframework-source-date-epoch.patch \
%D%/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch \

View file

@ -0,0 +1,80 @@
This patch removes the angr dependency from the pyvex these, thus
resolving a circular dependency (as angr depends on pyvex). This
patch has been taken from upstream.
This patch is a squashed version of the following upstream patches:
* https://github.com/angr/pyvex/commit/61fb26f223a8d8a276b702d2448a12e02c5c9c6b
* https://github.com/angr/pyvex/commit/a1fb2a4d0826b0e43bd8bbdd00b6db032643ec95
diff --git a/tests/test_spotter.py b/tests/test_spotter.py
index 9271ccd..bed7dd4 100644
--- a/tests/test_spotter.py
+++ b/tests/test_spotter.py
@@ -1,6 +1,5 @@
import os
-import angr
import archinfo
import pyvex
@@ -98,53 +97,28 @@ class CortexSpotter(GymratLifter):
register(CortexSpotter, "ARMEL")
-def test_full_binary():
- p = angr.Project(
- os.path.join(test_location, "armel", "RTOSDemo.axf.issue_685"),
- arch="ARMEL",
- auto_load_libs=False,
- )
- st = p.factory.call_state(0x000013CE + 1)
- b = st.block().vex
- simgr = p.factory.simulation_manager(st)
- simgr.step()
- assert b.jumpkind == "Ijk_Sys_syscall"
- assert simgr.active[0].regs.ip_at_syscall.args[0] == 0x13FB
-
-
def test_tmrs():
- test_location = str(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../binaries/tests"))
- p = angr.Project(
- os.path.join(test_location, "armel", "helloworld"),
- arch="ARMEL",
- auto_load_libs=False,
- )
+ arch = archinfo.arch_from_id("ARMEL")
ins = b"\xef\xf3\x08\x82"
- b = pyvex.block.IRSB(ins, 1, p.arch)
+ b = pyvex.block.IRSB(ins, 1, arch)
assert b.jumpkind == "Ijk_Boring"
assert type(b.statements[1].data) == pyvex.expr.Get
- assert p.arch.register_names.get(b.statements[1].data.offset, "") == "sp"
+ assert arch.register_names.get(b.statements[1].data.offset, "") == "sp"
assert type(b.statements[2]) == pyvex.stmt.Put
def test_tmsr():
- test_location = str(os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../binaries/tests"))
- p = angr.Project(
- os.path.join(test_location, "armel", "helloworld"),
- arch="ARMEL",
- auto_load_libs=False,
- )
+ arch = archinfo.arch_from_id("ARMEL")
inss = b"\x82\xf3\x08\x88"
- b = pyvex.block.IRSB(inss, 1, p.arch, opt_level=3)
+ b = pyvex.block.IRSB(inss, 1, arch, opt_level=3)
assert b.jumpkind == "Ijk_Boring"
assert type(b.statements[1].data) == pyvex.expr.Get
- assert p.arch.register_names.get(b.statements[1].data.offset, "") == "r2"
+ assert arch.register_names.get(b.statements[1].data.offset, "") == "r2"
assert type(b.statements[2]) == pyvex.stmt.Put
if __name__ == "__main__":
test_basic()
test_embedded()
- test_full_binary()
test_tmrs()
test_tmsr()

View file

@ -200,6 +200,7 @@ (define-module (gnu packages python-xyz)
#:use-module (gnu packages docker)
#:use-module (gnu packages documentation)
#:use-module (gnu packages elf)
#:use-module (gnu packages emulators)
#:use-module (gnu packages enchant)
#:use-module (gnu packages file)
#:use-module (gnu packages fonts)
@ -33790,6 +33791,42 @@ (define-public python-opcodes
and BMI2).")
(license license:bsd-2))))
(define-public python-pyvex
(package
(name "python-pyvex")
;; Must be the same version as python-angr.
(version "9.2.46")
(source
(origin
(method url-fetch)
(patches (search-patches "python-pyvex-remove-angr-dependency.patch"))
(uri (pypi-uri "pyvex" version))
(sha256
(base32 "1v64rn7gxy6fg065bgsy38z6r494k5ri5r6sn4g08hjj32ihx1ka"))))
(build-system pyproject-build-system)
(arguments
(list
#:phases #~(modify-phases %standard-phases
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(when tests?
(with-directory-excursion "tests"
(invoke "python" "-m" "unittest")))))
(add-before 'build 'set-cc-native
(lambda _
(setenv "CC" #$(cc-for-target))
(setenv "CC_NATIVE" "gcc"))))))
(propagated-inputs (list python-archinfo python-bitstring python-cffi))
(home-page "https://github.com/angr/pyvex")
(synopsis "Python interface to libVEX and VEX IR")
(description
"This package provides a Python interface the libVEX and VEX IR.
VEX is the intermediate representation (also known as intermediate
language) used by the Valgrind analysis tool. As such, VEX is designed
to enable all kinds of binary analysis tasks.")
(license license:bsd-2)))
(define-public python-claripy
(package
(name "python-claripy")