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-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 \
 | ||||
|  |  | |||
|  | @ -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 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 @@ instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM | |||
| 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") | ||||
|  |  | |||
		Reference in a new issue