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/mcron-install.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/plotutils-libpng-jmpbuf.patch		\ | ||||
|   gnu/packages/patches/procps-make-3.82.patch			\ | ||||
|  |  | |||
|  | @ -21,6 +21,7 @@ | |||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+)) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages m4) | ||||
|   #:use-module (gnu packages compression)) | ||||
| 
 | ||||
|  | @ -92,7 +93,8 @@ | |||
|                    "/patchelf-" version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "00bw29vdsscsili65wcb5ay0gvg1w0ljd00sb5xc6br8bylpyzpw")))) | ||||
|                "00bw29vdsscsili65wcb5ay0gvg1w0ljd00sb5xc6br8bylpyzpw")) | ||||
|              (patches (list (search-patch "patchelf-page-size.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://nixos.org/patchelf.html") | ||||
|     (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