aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-11-12 23:58:01 +0100
committerLudovic Courtès <ludo@gnu.org>2012-11-13 00:23:43 +0100
commit25608d640a97c64a6e1f493ca3e46d9168866249 (patch)
treeafb4e8e732647b25c1dd1da319f346dcffcfa7ad
parent0db342a590691c8a681e528ebc1664148b5f8579 (diff)
downloadguix-25608d640a97c64a6e1f493ca3e46d9168866249.tar
guix-25608d640a97c64a6e1f493ca3e46d9168866249.tar.gz
distro: Patch libc to avoid accessing /etc/ld.so.cache and friends.
* distro/packages/base.scm (glibc): Apply `glibc-no-ld-so-cache.patch'. (glibc-final): Inherit GLIBC's inputs. * distro/packages/patches/glibc-no-ld-so-cache.patch: New file. * Makefile.am (dist_patch_DATA): Add it.
-rw-r--r--Makefile.am1
-rw-r--r--distro/packages/base.scm6
-rw-r--r--distro/packages/patches/glibc-no-ld-so-cache.patch53
3 files changed, 59 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 3cb7bf3bf9..6c66014738 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -75,6 +75,7 @@ patchdir = $(pkgdatadir)/patches
dist_patch_DATA = \
distro/packages/patches/binutils-ld-new-dtags.patch \
distro/packages/patches/diffutils-gets-undeclared.patch \
+ distro/packages/patches/glibc-no-ld-so-cache.patch \
distro/packages/patches/guile-1.8-cpp-4.5.patch \
distro/packages/patches/guile-default-utf8.patch \
distro/packages/patches/guile-relocatable.patch \
diff --git a/distro/packages/base.scm b/distro/packages/base.scm
index 6088c3d9ce..ed33d61d35 100644
--- a/distro/packages/base.scm
+++ b/distro/packages/base.scm
@@ -511,6 +511,7 @@ used in the GNU system including the GNU/Linux variant.")
(arguments
`(#:out-of-source? #t
+ #:patches (list (assoc-ref %build-inputs "patch/ld.so.cache"))
#:configure-flags
(list "--enable-add-ons"
"--sysconfdir=/etc"
@@ -550,6 +551,8 @@ used in the GNU system including the GNU/Linux variant.")
;; 4.7.1.
((" -lgcc_s") ""))))
%standard-phases)))
+ (inputs `(("patch/ld.so.cache"
+ ,(search-patch "glibc-no-ld-so-cache.patch"))))
(synopsis "The GNU C Library")
(description
"Any Unix-like operating system needs a C library: the library which
@@ -792,7 +795,8 @@ identifier SYSTEM."
(propagated-inputs `(("linux-headers" ,linux-libre-headers-boot0)))
(inputs `( ;; A native GCC is needed to build `cross-rpcgen'.
("native-gcc" ,@(assoc-ref %boot0-inputs "gcc"))
- ,@%boot1-inputs)))))
+ ,@%boot1-inputs
+ ,@(package-inputs glibc)))))) ; patches
(define gcc-boot0-wrapped
;; Make the cross-tools GCC-BOOT0 and BINUTILS-BOOT0 available under the
diff --git a/distro/packages/patches/glibc-no-ld-so-cache.patch b/distro/packages/patches/glibc-no-ld-so-cache.patch
new file mode 100644
index 0000000000..75fff50b47
--- /dev/null
+++ b/distro/packages/patches/glibc-no-ld-so-cache.patch
@@ -0,0 +1,53 @@
+Disable attempts to use the system-wide /etc/ld.so.cache. This is
+required on LFS distros to avoid loading the distro's libc.so instead
+of ours.
+
+Patch from Nixpkgs. Idea by Eelco Dolstra, initial patch by Jack
+Cummings, minor fixups by Shea Levy.
+
+diff -Naur glibc-2.13-orig/elf/ldconfig.c glibc-2.13/elf/ldconfig.c
+--- glibc-2.13-orig/elf/ldconfig.c 2011-01-17 23:34:07.000000000 -0500
++++ glibc-2.13/elf/ldconfig.c 2012-04-10 23:28:45.957492340 -0400
+@@ -51,7 +51,7 @@
+ #endif
+
+ #ifndef LD_SO_CONF
+-# define LD_SO_CONF SYSCONFDIR "/ld.so.conf"
++# define LD_SO_CONF PREFIX "/etc/ld.so.conf"
+ #endif
+
+ /* Get libc version number. */
+
+--- glibc-2.16.0/elf/Makefile 2012-06-30 21:12:34.000000000 +0200
++++ glibc-2.16.0/elf/Makefile 2012-11-12 23:52:21.000000000 +0100
+@@ -415,12 +415,12 @@ $(objpfx)ldconfig: $(ldconfig-modules:%=
+
+ $(objpfx)pldd: $(pldd-modules:%=$(objpfx)%.o)
+
+-SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"'
+-CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \
++PREFIX-FLAGS := -D'PREFIX="$(sysconfdir)"'
++CFLAGS-ldconfig.c = $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \
+ -D'SLIBDIR="$(slibdir)"' -DIS_IN_ldconfig=1
+-CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
+-CFLAGS-cache.c = $(SYSCONF-FLAGS)
+-CFLAGS-rtld.c = $(SYSCONF-FLAGS)
++CFLAGS-dl-cache.c = $(PREFIX-FLAGS)
++CFLAGS-cache.c = $(PREFIX-FLAGS)
++CFLAGS-rtld.c = $(PREFIX-FLAGS)
+
+ CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
+ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
+
+diff -Naur glibc-2.13-orig/sysdeps/generic/dl-cache.h glibc-2.13/sysdeps/generic/dl-cache.h
+--- glibc-2.13-orig/sysdeps/generic/dl-cache.h 2011-01-17 23:34:07.000000000 -0500
++++ glibc-2.13/sysdeps/generic/dl-cache.h 2012-04-10 23:28:20.077488815 -0400
+@@ -29,7 +29,7 @@
+ #endif
+
+ #ifndef LD_SO_CACHE
+-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
++# define LD_SO_CACHE PREFIX "/etc/ld.so.cache"
+ #endif
+
+ #ifndef add_system_dir