From a19af6c1720a473860c1653cf6483bae11bcacc2 Mon Sep 17 00:00:00 2001 From: Paul Nasrat Date: Tue, 11 Jul 2006 15:37:56 +0000 Subject: [PATCH] Detect and provide a requirement for DT_GNU_HASH --- rpm-4.4.2-gnuhash.patch | 53 +++++++++++++++++++++++++++++++++++++++++ rpm.spec | 7 +++++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 rpm-4.4.2-gnuhash.patch diff --git a/rpm-4.4.2-gnuhash.patch b/rpm-4.4.2-gnuhash.patch new file mode 100644 index 0000000..e25d80a --- /dev/null +++ b/rpm-4.4.2-gnuhash.patch @@ -0,0 +1,53 @@ +--- rpm-4.4.2/build/rpmfc.c.gnuhash 2006-07-11 07:05:43.000000000 -0400 ++++ rpm-4.4.2/build/rpmfc.c 2006-07-11 07:09:08.000000000 -0400 +@@ -879,6 +879,8 @@ + int isDSO; + int gotSONAME = 0; + int gotDEBUG = 0; ++ int gotHASH = 0; ++ int gotGNUHASH = 0; + static int filter_GLIBC_PRIVATE = 0; + static int oneshot = 0; + +@@ -1051,6 +1053,12 @@ + default: + /*@innercontinue@*/ continue; + /*@notreached@*/ /*@switchbreak@*/ break; ++ case DT_HASH: ++ gotHASH= 1; ++ /*@innercontinue@*/ continue; ++ case DT_GNU_HASH: ++ gotGNUHASH= 1; ++ /*@innercontinue@*/ continue; + case DT_DEBUG: + gotDEBUG = 1; + /*@innercontinue@*/ continue; +@@ -1107,6 +1115,16 @@ + } + /*@=branchstate =uniondef @*/ + ++ /* For DSOs which use the .gnu_hash section and don't have a .hash ++ * section, we need to ensure that we have a new enough glibc. */ ++ if (gotGNUHASH && !gotHASH) { ++ ds = rpmdsSingle(RPMTAG_REQUIRENAME, "rtld(GNU_HASH)", "", ++ RPMSENSE_FIND_REQUIRES); ++ rpmdsMerge(&fc->requires, ds); ++ rpmfcSaveArg(&fc->ddict, rpmfcFileDep(t, fc->ix, ds)); ++ ds = rpmdsFree(ds); ++ } ++ + /* For DSO's, provide the basename of the file if DT_SONAME not found. */ + if (!fc->skipProv && isDSO && !gotDEBUG && !gotSONAME) { + depsp = &fc->provides; +--- rpm-4.4.2/rpmdb/legacy.c.gnuhash 2006-07-11 07:07:18.000000000 -0400 ++++ rpm-4.4.2/rpmdb/legacy.c 2006-07-11 07:07:44.000000000 -0400 +@@ -14,6 +14,9 @@ + #if !defined(DT_GNU_LIBLIST) + #define DT_GNU_LIBLIST 0x6ffffef9 + #endif ++#if !defined(DT_GNU_HASH) ++#define DT_GNU_HASH 0x6ffffef5 ++#endif + + #endif + diff --git a/rpm.spec b/rpm.spec index ff46d1d..d35419b 100644 --- a/rpm.spec +++ b/rpm.spec @@ -20,7 +20,7 @@ Name: rpm %define version 4.4.2 Version: %{version} %{expand: %%define rpm_version %{version}} -Release: 27 +Release: 28 Group: System Environment/Base Source: ftp://wraptastic.org/pub/rpm-4.4.x/rpm-%{rpm_version}.tar.gz Source1: mono-find-provides @@ -55,6 +55,7 @@ Patch26: rpm-4.4.2-rpmfc-skip.patch Patch27: rpm-4.4.2-noselinux-verify.patch Patch28: rpm-4.4.2-python-aslist.patch Patch29: rpm-4.4.2-rpmio-ipv6.patch +Patch30: rpm-4.4.2-gnuhash.patch License: GPL Conflicts: patch < 2.5 %ifos linux @@ -195,6 +196,7 @@ shell-like rules. #patch6 -p1 -b .matchpathcon %patch28 -p1 -b .aslist %patch29 -p1 -b .ipv6 +%patch30 -p1 -b .gnuhash # rebuild configure for ipv6 autoconf @@ -591,6 +593,9 @@ exit 0 %{__includedir}/popt.h %changelog +* Tue Jul 11 2006 Paul Nasrat - 4.4.2-28 +- Detect and provide a requirement for DT_GNU_HASH + * Wed Jul 05 2006 Paul Nasrat - 4.4.2-27 - IPv4/6 and EPSV support by Arkadiusz Miskiewicz