gnu: patchelf: Fix platform page size determination.
* gnu/packages/patches/patchelf-page-size.patch: New file. * gnu/packages/elf.scm (patchelf): Add the patch. * gnu-system.am (dist_patch_DATA): Add the patch.
This commit is contained in:
		
							parent
							
								
									e7fc17b592
								
							
						
					
					
						commit
						0841dcf7dd
					
				
					 3 changed files with 73 additions and 1 deletions
				
			
		|  | @ -291,6 +291,7 @@ dist_patch_DATA =						\ | ||||||
|   gnu/packages/patches/make-impure-dirs.patch			\ |   gnu/packages/patches/make-impure-dirs.patch			\ | ||||||
|   gnu/packages/patches/mcron-install.patch			\ |   gnu/packages/patches/mcron-install.patch			\ | ||||||
|   gnu/packages/patches/mit-krb5-init-fix.patch			\ |   gnu/packages/patches/mit-krb5-init-fix.patch			\ | ||||||
|  |   gnu/packages/patches/patchelf-page-size.patch			\ | ||||||
|   gnu/packages/patches/perl-no-sys-dirs.patch			\ |   gnu/packages/patches/perl-no-sys-dirs.patch			\ | ||||||
|   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ |   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\ | ||||||
|   gnu/packages/patches/procps-make-3.82.patch			\ |   gnu/packages/patches/procps-make-3.82.patch			\ | ||||||
|  |  | ||||||
|  | @ -21,6 +21,7 @@ | ||||||
|   #:use-module (guix download) |   #:use-module (guix download) | ||||||
|   #:use-module (guix build-system gnu) |   #:use-module (guix build-system gnu) | ||||||
|   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+)) |   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+)) | ||||||
|  |   #:use-module (gnu packages) | ||||||
|   #:use-module (gnu packages m4) |   #:use-module (gnu packages m4) | ||||||
|   #:use-module (gnu packages compression)) |   #:use-module (gnu packages compression)) | ||||||
| 
 | 
 | ||||||
|  | @ -92,7 +93,8 @@ | ||||||
|                    "/patchelf-" version ".tar.bz2")) |                    "/patchelf-" version ".tar.bz2")) | ||||||
|              (sha256 |              (sha256 | ||||||
|               (base32 |               (base32 | ||||||
|                "00bw29vdsscsili65wcb5ay0gvg1w0ljd00sb5xc6br8bylpyzpw")))) |                "00bw29vdsscsili65wcb5ay0gvg1w0ljd00sb5xc6br8bylpyzpw")) | ||||||
|  |              (patches (list (search-patch "patchelf-page-size.patch"))))) | ||||||
|     (build-system gnu-build-system) |     (build-system gnu-build-system) | ||||||
|     (home-page "http://nixos.org/patchelf.html") |     (home-page "http://nixos.org/patchelf.html") | ||||||
|     (synopsis "Modify the dynamic linker and RPATH of ELF executables") |     (synopsis "Modify the dynamic linker and RPATH of ELF executables") | ||||||
|  |  | ||||||
							
								
								
									
										69
									
								
								gnu/packages/patches/patchelf-page-size.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								gnu/packages/patches/patchelf-page-size.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,69 @@ | ||||||
|  | Improve the determination of pageSize in patchelf.cc. | ||||||
|  | 
 | ||||||
|  | Patch by Mark H Weaver <mhw@netris.org>. | ||||||
|  | 
 | ||||||
|  | --- patchelf/src/patchelf.cc.orig	1969-12-31 19:00:01.000000000 -0500
 | ||||||
|  | +++ patchelf/src/patchelf.cc	2014-02-16 20:15:06.283203125 -0500
 | ||||||
|  | @@ -21,11 +21,19 @@
 | ||||||
|  |  using namespace std; | ||||||
|  |   | ||||||
|  |   | ||||||
|  | -#ifdef MIPSEL
 | ||||||
|  | -/* The lemote fuloong 2f kernel defconfig sets a page size of 16KB */
 | ||||||
|  | -const unsigned int pageSize = 4096*4;
 | ||||||
|  | -#else
 | ||||||
|  | +/* Note that some platforms support multiple page sizes.  Therefore,
 | ||||||
|  | +   it is not enough to query the current page size.  'pageSize' must
 | ||||||
|  | +   be the maximum architectural page size for the platform, which is
 | ||||||
|  | +   typically defined in the corresponding ABI document.
 | ||||||
|  | +
 | ||||||
|  | +   XXX FIXME: This won't work when we're cross-compiling.  */
 | ||||||
|  | +
 | ||||||
|  | +#if defined __MIPSEL__ || defined __MIPSEB__ || defined __aarch64__
 | ||||||
|  | +const unsigned int pageSize = 65536;
 | ||||||
|  | +#elif defined __x86_64__ || defined __i386__ || defined __arm__
 | ||||||
|  |  const unsigned int pageSize = 4096; | ||||||
|  | +#else
 | ||||||
|  | +# error maximum architectural page size unknown for this platform
 | ||||||
|  |  #endif | ||||||
|  |   | ||||||
|  |   | ||||||
|  | --- patchelf/tests/no-rpath.sh.orig	1969-12-31 19:00:01.000000000 -0500
 | ||||||
|  | +++ patchelf/tests/no-rpath.sh	2014-02-16 20:44:12.036376953 -0500
 | ||||||
|  | @@ -1,22 +1,22 @@
 | ||||||
|  |  #! /bin/sh -e | ||||||
|  |   | ||||||
|  | -rm -rf scratch
 | ||||||
|  | -mkdir -p scratch
 | ||||||
|  | +if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
 | ||||||
|  | +    rm -rf scratch
 | ||||||
|  | +    mkdir -p scratch
 | ||||||
|  |   | ||||||
|  | -cp no-rpath scratch/
 | ||||||
|  | +    cp no-rpath scratch/
 | ||||||
|  |   | ||||||
|  | -oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
 | ||||||
|  | -if test -n "$oldRPath"; then exit 1; fi
 | ||||||
|  | -../src/patchelf \
 | ||||||
|  | -  --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
 | ||||||
|  | -  --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
 | ||||||
|  | +    oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
 | ||||||
|  | +    if test -n "$oldRPath"; then exit 1; fi
 | ||||||
|  | +    ../src/patchelf \
 | ||||||
|  | +      --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \
 | ||||||
|  | +      --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath
 | ||||||
|  |   | ||||||
|  | -newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
 | ||||||
|  | -if ! echo "$newRPath" | grep -q '/foo:/bar'; then
 | ||||||
|  | -    echo "incomplete RPATH"
 | ||||||
|  | -    exit 1
 | ||||||
|  | -fi
 | ||||||
|  | +    newRPath=$(../src/patchelf --print-rpath scratch/no-rpath)
 | ||||||
|  | +    if ! echo "$newRPath" | grep -q '/foo:/bar'; then
 | ||||||
|  | +        echo "incomplete RPATH"
 | ||||||
|  | +        exit 1
 | ||||||
|  | +    fi
 | ||||||
|  |   | ||||||
|  | -if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then
 | ||||||
|  |      cd scratch && ./no-rpath | ||||||
|  |  fi | ||||||
		Reference in a new issue