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:
		
							parent
							
								
									c31c325a12
								
							
						
					
					
						commit
						0fc16f1b0e
					
				
					 3 changed files with 118 additions and 0 deletions
				
			
		|  | @ -1981,6 +1981,7 @@ dist_patch_DATA =						\ | ||||||
|   %D%/packages/patches/python-pytorch-runpath.patch		\
 |   %D%/packages/patches/python-pytorch-runpath.patch		\
 | ||||||
|   %D%/packages/patches/python-pytorch-system-libraries.patch	\
 |   %D%/packages/patches/python-pytorch-system-libraries.patch	\
 | ||||||
|   %D%/packages/patches/python-pytorch-without-kineto.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-atest.patch	\
 | ||||||
|   %D%/packages/patches/python-robotframework-source-date-epoch.patch \
 |   %D%/packages/patches/python-robotframework-source-date-epoch.patch \
 | ||||||
|   %D%/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch \
 |   %D%/packages/patches/python-robotframework-sshlibrary-rf5-compat.patch \
 | ||||||
|  |  | ||||||
|  | @ -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() | ||||||
|  | @ -200,6 +200,7 @@ | ||||||
|   #:use-module (gnu packages docker) |   #:use-module (gnu packages docker) | ||||||
|   #:use-module (gnu packages documentation) |   #:use-module (gnu packages documentation) | ||||||
|   #:use-module (gnu packages elf) |   #:use-module (gnu packages elf) | ||||||
|  |   #:use-module (gnu packages emulators) | ||||||
|   #:use-module (gnu packages enchant) |   #:use-module (gnu packages enchant) | ||||||
|   #:use-module (gnu packages file) |   #:use-module (gnu packages file) | ||||||
|   #:use-module (gnu packages fonts) |   #:use-module (gnu packages fonts) | ||||||
|  | @ -33790,6 +33791,42 @@ instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM | ||||||
| and BMI2).") | and BMI2).") | ||||||
|       (license license:bsd-2)))) |       (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 | (define-public python-claripy | ||||||
|   (package |   (package | ||||||
|     (name "python-claripy") |     (name "python-claripy") | ||||||
|  |  | ||||||
		Reference in a new issue