289 lines
9.8 KiB
Diff
289 lines
9.8 KiB
Diff
|
From aaa8cb4b43511c62b11ac6f10e9beea3d5035a68 Mon Sep 17 00:00:00 2001
|
||
|
From: Andreas Schwab <schwab@suse.de>
|
||
|
Date: Mon, 18 Mar 2013 12:44:47 +0100
|
||
|
Subject: [PATCH 1/3] Add support for rtld directory different from slib
|
||
|
directory
|
||
|
|
||
|
* configure.in: Substitute libc_cv_rtlddir.
|
||
|
* configure: Regenerate.
|
||
|
* config.make.in (rtlddir): Set from libc_cv_rtlddir.
|
||
|
* Makeconfig (rtlddir, inst_rtlddir): New variables.
|
||
|
(rtld-LDFLAGS): Use them with $(rtld-installed-name).
|
||
|
* elf/Makefile (install-others, CFLAGS-interp.c)
|
||
|
(ldso_install, common-ldd-rewrite): Likewise.
|
||
|
($(inst_rtlddir)/$(rtld-installed-name)): Renamed from
|
||
|
$(inst_slibdir)/$(rtld-installed-name).
|
||
|
* scripts/rellns-sh: Add -p option.
|
||
|
* Makerules (make-shlib-link): Use rellns-sh to get relative name
|
||
|
for source.
|
||
|
|
||
|
---
|
||
|
ChangeLog | 15 +++++++++++++++
|
||
|
Makeconfig | 10 ++++++++--
|
||
|
Makerules | 4 ++--
|
||
|
config.make.in | 1 +
|
||
|
configure | 2 ++
|
||
|
configure.in | 1 +
|
||
|
elf/Makefile | 11 ++++++-----
|
||
|
scripts/rellns-sh | 17 +++++++++++++++--
|
||
|
8 files changed, 50 insertions(+), 11 deletions(-)
|
||
|
|
||
|
Index: glibc-2.17/Makeconfig
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/Makeconfig
|
||
|
+++ glibc-2.17/Makeconfig
|
||
|
@@ -148,12 +148,18 @@ libdir = $(exec_prefix)/lib
|
||
|
endif
|
||
|
inst_libdir = $(install_root)$(libdir)
|
||
|
|
||
|
-# Where to install the shared library and dynamic linker.
|
||
|
+# Where to install the shared library.
|
||
|
ifndef slibdir
|
||
|
slibdir = $(exec_prefix)/lib
|
||
|
endif
|
||
|
inst_slibdir = $(install_root)$(slibdir)
|
||
|
|
||
|
+# Where to install the dynamic linker.
|
||
|
+ifndef rtlddir
|
||
|
+rtlddir = $(slibdir)
|
||
|
+endif
|
||
|
+inst_rtlddir = $(install_root)$(rtlddir)
|
||
|
+
|
||
|
# Prefix to put on files installed in $(libdir). For libraries `libNAME.a',
|
||
|
# the prefix is spliced between `lib' and the name, so the linker switch
|
||
|
# `-l$(libprefix)NAME' finds the library; for other files the prefix is
|
||
|
@@ -443,7 +449,7 @@ ifndef +link-bounded
|
||
|
endif
|
||
|
ifndef config-LDFLAGS
|
||
|
ifeq (yes,$(build-shared))
|
||
|
-config-LDFLAGS = -Wl,-dynamic-linker=$(slibdir)/$(rtld-installed-name)
|
||
|
+config-LDFLAGS = -Wl,-dynamic-linker=$(rtlddir)/$(rtld-installed-name)
|
||
|
endif
|
||
|
endif
|
||
|
ifndef link-libc
|
||
|
Index: glibc-2.17/Makerules
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/Makerules
|
||
|
+++ glibc-2.17/Makerules
|
||
|
@@ -873,7 +873,7 @@ ifeq (no,$(cross-compiling))
|
||
|
symbolic-link-prog := $(common-objpfx)elf/sln
|
||
|
symbolic-link-list := $(common-objpfx)elf/symlink.list
|
||
|
define make-shlib-link
|
||
|
-echo $(<F) $@ >> $(symbolic-link-list)
|
||
|
+echo `$(..)scripts/rellns-sh -p $< $@` $@ >> $(symbolic-link-list)
|
||
|
endef
|
||
|
else # cross-compiling
|
||
|
# We need a definition that can be used by elf/Makefile's install rules.
|
||
|
@@ -883,7 +883,7 @@ endif
|
||
|
ifndef make-shlib-link
|
||
|
define make-shlib-link
|
||
|
rm -f $@
|
||
|
-$(LN_S) $(<F) $@
|
||
|
+$(LN_S) `$(..)scripts/rellns-sh -p $< $@` $@
|
||
|
endef
|
||
|
endif
|
||
|
|
||
|
@@ -937,7 +937,7 @@ $(inst_libdir)/libc.so: $(common-objpfx)
|
||
|
cat $<; \
|
||
|
echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
|
||
|
'$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\
|
||
|
- ' AS_NEEDED (' $(slibdir)/$(rtld-installed-name) ') )' \
|
||
|
+ ' AS_NEEDED (' $(rtlddir)/$(rtld-installed-name) ') )' \
|
||
|
) > $@.new
|
||
|
mv -f $@.new $@
|
||
|
|
||
|
Index: glibc-2.17/config.make.in
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/config.make.in
|
||
|
+++ glibc-2.17/config.make.in
|
||
|
@@ -11,6 +11,7 @@ exec_prefix = @exec_prefix@
|
||
|
datadir = @datadir@
|
||
|
libdir = @libdir@
|
||
|
slibdir = @libc_cv_slibdir@
|
||
|
+rtlddir = @libc_cv_rtlddir@
|
||
|
localedir = @libc_cv_localedir@
|
||
|
sysconfdir = @libc_cv_sysconfdir@
|
||
|
libexecdir = @libexecdir@
|
||
|
Index: glibc-2.17/configure
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/configure
|
||
|
+++ glibc-2.17/configure
|
||
|
@@ -594,6 +594,7 @@ libc_cv_rootsbindir
|
||
|
libc_cv_localstatedir
|
||
|
libc_cv_sysconfdir
|
||
|
libc_cv_localedir
|
||
|
+libc_cv_rtlddir
|
||
|
libc_cv_slibdir
|
||
|
old_glibc_headers
|
||
|
use_nscd
|
||
|
@@ -7584,6 +7585,7 @@ fi
|
||
|
|
||
|
|
||
|
|
||
|
+
|
||
|
|
||
|
|
||
|
|
||
|
Index: glibc-2.17/configure.in
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/configure.in
|
||
|
+++ glibc-2.17/configure.in
|
||
|
@@ -2117,6 +2117,7 @@ fi
|
||
|
AC_SUBST(old_glibc_headers)
|
||
|
|
||
|
AC_SUBST(libc_cv_slibdir)
|
||
|
+AC_SUBST(libc_cv_rtlddir)
|
||
|
AC_SUBST(libc_cv_localedir)
|
||
|
AC_SUBST(libc_cv_sysconfdir)
|
||
|
AC_SUBST(libc_cv_localstatedir)
|
||
|
Index: glibc-2.17/elf/Makefile
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/elf/Makefile
|
||
|
+++ glibc-2.17/elf/Makefile
|
||
|
@@ -66,7 +66,7 @@ endif
|
||
|
ifeq (yes,$(build-shared))
|
||
|
extra-objs = $(all-rtld-routines:%=%.os) soinit.os sofini.os interp.os
|
||
|
generated += librtld.os dl-allobjs.os ld.so ldd
|
||
|
-install-others = $(inst_slibdir)/$(rtld-installed-name)
|
||
|
+install-others = $(inst_rtlddir)/$(rtld-installed-name)
|
||
|
install-bin-script = ldd
|
||
|
endif
|
||
|
|
||
|
@@ -340,7 +340,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld
|
||
|
| $(AWK) '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
|
||
|
|
||
|
# interp.c exists just to get this string into the libraries.
|
||
|
-CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"' \
|
||
|
+CFLAGS-interp.c = -D'RUNTIME_LINKER="$(rtlddir)/$(rtld-installed-name)"' \
|
||
|
-DNOT_IN_libc=1
|
||
|
$(objpfx)interp.os: $(common-objpfx)config.make
|
||
|
|
||
|
@@ -372,18 +372,19 @@ $(inst_slibdir)/$(rtld-version-installed
|
||
|
$(make-target-directory)
|
||
|
$(do-install-program)
|
||
|
|
||
|
-$(inst_slibdir)/$(rtld-installed-name): \
|
||
|
+$(inst_rtlddir)/$(rtld-installed-name): \
|
||
|
$(inst_slibdir)/$(rtld-version-installed-name) \
|
||
|
$(inst_slibdir)/libc-$(version).so
|
||
|
+ $(make-target-directory)
|
||
|
$(make-shlib-link)
|
||
|
|
||
|
# Special target called by parent to install just the dynamic linker.
|
||
|
.PHONY: ldso_install
|
||
|
-ldso_install: $(inst_slibdir)/$(rtld-installed-name)
|
||
|
+ldso_install: $(inst_rtlddir)/$(rtld-installed-name)
|
||
|
endif
|
||
|
|
||
|
|
||
|
-common-ldd-rewrite = -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \
|
||
|
+common-ldd-rewrite = -e 's%@RTLD@%$(rtlddir)/$(rtld-installed-name)%g' \
|
||
|
-e 's%@VERSION@%$(version)%g' \
|
||
|
-e 's|@PKGVERSION@|$(PKGVERSION)|g' \
|
||
|
-e 's|@REPORT_BUGS_TO@|$(REPORT_BUGS_TO)|g'
|
||
|
Index: glibc-2.17/ports/sysdeps/unix/sysv/linux/aarch64/configure
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure
|
||
|
+++ glibc-2.17/ports/sysdeps/unix/sysv/linux/aarch64/configure
|
||
|
@@ -7,6 +7,7 @@ test -n "$libc_cv_slibdir" ||
|
||
|
case "$prefix" in
|
||
|
/usr | /usr/)
|
||
|
libc_cv_slibdir="/lib64"
|
||
|
+ libc_cv_rtlddir="/lib"
|
||
|
if test "$libdir" = '${exec_prefix}/lib'; then
|
||
|
libdir='${exec_prefix}/lib64';
|
||
|
# Locale data can be shared between 32bit and 64bit libraries
|
||
|
Index: glibc-2.17/ports/sysdeps/unix/sysv/linux/aarch64/configure.in
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/ports/sysdeps/unix/sysv/linux/aarch64/configure.in
|
||
|
+++ glibc-2.17/ports/sysdeps/unix/sysv/linux/aarch64/configure.in
|
||
|
@@ -7,6 +7,7 @@ test -n "$libc_cv_slibdir" ||
|
||
|
case "$prefix" in
|
||
|
/usr | /usr/)
|
||
|
libc_cv_slibdir="/lib64"
|
||
|
+ libc_cv_rtlddir="/lib"
|
||
|
if test "$libdir" = '${exec_prefix}/lib'; then
|
||
|
libdir='${exec_prefix}/lib64';
|
||
|
# Locale data can be shared between 32bit and 64bit libraries
|
||
|
Index: glibc-2.17/scripts/rellns-sh
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/scripts/rellns-sh
|
||
|
+++ glibc-2.17/scripts/rellns-sh
|
||
|
@@ -16,8 +16,17 @@
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
+# With -p, instead of creating the link print the computed relative link
|
||
|
+# name.
|
||
|
+do_print=false
|
||
|
+case $1 in
|
||
|
+ -p)
|
||
|
+ do_print=true
|
||
|
+ shift
|
||
|
+ ;;
|
||
|
+esac
|
||
|
if test $# -ne 2; then
|
||
|
- echo "Usage: rellns SOURCE DEST" >&2
|
||
|
+ echo "Usage: rellns [-p] SOURCE DEST" >&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
@@ -70,4 +79,8 @@ while test -n "$from"; do
|
||
|
from=`echo $from | sed 's%^[^/]*/*%%'`
|
||
|
done
|
||
|
|
||
|
-ln -s $rfrom$to $2
|
||
|
+if $do_print; then
|
||
|
+ echo "$rfrom$to"
|
||
|
+else
|
||
|
+ ln -s $rfrom$to $2
|
||
|
+fi
|
||
|
Index: glibc-2.17/sysdeps/gnu/configure
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/sysdeps/gnu/configure
|
||
|
+++ glibc-2.17/sysdeps/gnu/configure
|
||
|
@@ -9,12 +9,17 @@
|
||
|
case "$prefix" in
|
||
|
/usr | /usr/)
|
||
|
# 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib.
|
||
|
- # Allow earlier configure scripts to handle libc_cv_slibdir, libdir,
|
||
|
- # and libc_cv_localedir.
|
||
|
+ # Allow earlier configure scripts to handle libc_cv_slibdir,
|
||
|
+ # libc_cv_rtlddir, libdir, and libc_cv_localedir.
|
||
|
test -n "$libc_cv_slibdir" || \
|
||
|
case $machine in
|
||
|
sparc/sparc64 | x86_64* | powerpc/powerpc64 | s390/s390-64)
|
||
|
libc_cv_slibdir=/lib64
|
||
|
+ case $machine in
|
||
|
+ s390/s390-64)
|
||
|
+ libc_cv_rtlddir=/lib
|
||
|
+ ;;
|
||
|
+ esac
|
||
|
if test "$libdir" = '${exec_prefix}/lib'; then
|
||
|
libdir='${exec_prefix}/lib64';
|
||
|
# Locale data can be shared between 32bit and 64bit libraries
|
||
|
Index: glibc-2.17/sysdeps/gnu/configure.in
|
||
|
===================================================================
|
||
|
--- glibc-2.17.orig/sysdeps/gnu/configure.in
|
||
|
+++ glibc-2.17/sysdeps/gnu/configure.in
|
||
|
@@ -9,12 +9,17 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the
|
||
|
case "$prefix" in
|
||
|
/usr | /usr/)
|
||
|
# 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib.
|
||
|
- # Allow earlier configure scripts to handle libc_cv_slibdir, libdir,
|
||
|
- # and libc_cv_localedir.
|
||
|
+ # Allow earlier configure scripts to handle libc_cv_slibdir,
|
||
|
+ # libc_cv_rtlddir, libdir, and libc_cv_localedir.
|
||
|
test -n "$libc_cv_slibdir" || \
|
||
|
case $machine in
|
||
|
sparc/sparc64 | x86_64* | powerpc/powerpc64 | s390/s390-64)
|
||
|
libc_cv_slibdir=/lib64
|
||
|
+ case $machine in
|
||
|
+ s390/s390-64)
|
||
|
+ libc_cv_rtlddir=/lib
|
||
|
+ ;;
|
||
|
+ esac
|
||
|
if test "$libdir" = '${exec_prefix}/lib'; then
|
||
|
libdir='${exec_prefix}/lib64';
|
||
|
# Locale data can be shared between 32bit and 64bit libraries
|