From 25608d640a97c64a6e1f493ca3e46d9168866249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 12 Nov 2012 23:58:01 +0100 Subject: [PATCH] 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. --- Makefile.am | 1 + distro/packages/base.scm | 6 ++- .../patches/glibc-no-ld-so-cache.patch | 53 +++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 distro/packages/patches/glibc-no-ld-so-cache.patch 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