- filter out non-library soname dependencies
This commit is contained in:
parent
e3501faaf5
commit
b3bdf6087f
80
rpm-4.11.x-filter-soname-deps.patch
Normal file
80
rpm-4.11.x-filter-soname-deps.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
commit 73bd9636d0e76a4d255776b7733667198b9ef585
|
||||||
|
Author: Panu Matilainen <pmatilai@redhat.com>
|
||||||
|
Date: Mon Jan 7 15:52:43 2013 +0200
|
||||||
|
|
||||||
|
Filter ELF dependencies by name
|
||||||
|
|
||||||
|
- Instead of vain heuristics on DT_SONAME presence, filter out
|
||||||
|
irregular sonames from all dependencies: linkable library names generally
|
||||||
|
must contain ".so" and start with "lib" for the linker to find it at all,
|
||||||
|
anything else is an exception of one kind or another (the prime exception
|
||||||
|
of ld.so variants we handle here). This weeds out provides for most
|
||||||
|
dlopen()'ed modules etc, and filtering both provides and requires
|
||||||
|
by the same rules means we wont generate requires for things that wont be
|
||||||
|
provided. Of course this also means we can omit things that are in
|
||||||
|
DT_NEEDED, but these should be rare exceptions which the new
|
||||||
|
--no-filter-soname switch is for.
|
||||||
|
|
||||||
|
diff --git a/tools/elfdeps.c b/tools/elfdeps.c
|
||||||
|
index fc9a905..a0db9f7 100644
|
||||||
|
--- a/tools/elfdeps.c
|
||||||
|
+++ b/tools/elfdeps.c
|
||||||
|
@@ -15,6 +15,7 @@
|
||||||
|
int filter_private = 0;
|
||||||
|
int soname_only = 0;
|
||||||
|
int fake_soname = 1;
|
||||||
|
+int filter_soname = 1;
|
||||||
|
|
||||||
|
typedef struct elfInfo_s {
|
||||||
|
Elf *elf;
|
||||||
|
@@ -36,6 +37,31 @@ static int skipPrivate(const char *s)
|
||||||
|
return (filter_private && rstreq(s, "GLIBC_PRIVATE"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Rough soname sanity filtering: all sane soname's dependencies need to
|
||||||
|
+ * contain ".so", and normal linkable libraries start with "lib",
|
||||||
|
+ * everything else is an exception of some sort. The most notable
|
||||||
|
+ * and common exception is the dynamic linker itself, which we allow
|
||||||
|
+ * here, the rest can use --no-filter-soname.
|
||||||
|
+ */
|
||||||
|
+static int skipSoname(const char *soname)
|
||||||
|
+{
|
||||||
|
+ if (filter_soname) {
|
||||||
|
+ if (!strstr(soname, ".so"))
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ if (rstreqn(soname, "ld.", 3) || rstreqn(soname, "ld-", 3))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (rstreqn(soname, "lib", 3))
|
||||||
|
+ return 0;
|
||||||
|
+ else
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static const char *mkmarker(GElf_Ehdr *ehdr)
|
||||||
|
{
|
||||||
|
const char *marker = NULL;
|
||||||
|
@@ -58,6 +84,10 @@ static void addDep(ARGV_t *deps,
|
||||||
|
const char *soname, const char *ver, const char *marker)
|
||||||
|
{
|
||||||
|
char *dep = NULL;
|
||||||
|
+
|
||||||
|
+ if (skipSoname(soname))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
if (ver || marker) {
|
||||||
|
rasprintf(&dep,
|
||||||
|
"%s(%s)%s", soname, ver ? ver : "", marker ? marker : "");
|
||||||
|
@@ -293,6 +323,7 @@ int main(int argc, char *argv[])
|
||||||
|
{ "filter-private", 0, POPT_ARG_VAL, &filter_private, -1, NULL, NULL },
|
||||||
|
{ "soname-only", 0, POPT_ARG_VAL, &soname_only, -1, NULL, NULL },
|
||||||
|
{ "no-fake-soname", 0, POPT_ARG_VAL, &fake_soname, 0, NULL, NULL },
|
||||||
|
+ { "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
|
||||||
|
POPT_AUTOHELP
|
||||||
|
POPT_TABLEEND
|
||||||
|
};
|
8
rpm.spec
8
rpm.spec
@ -21,7 +21,7 @@
|
|||||||
Summary: The RPM package management system
|
Summary: The RPM package management system
|
||||||
Name: rpm
|
Name: rpm
|
||||||
Version: %{rpmver}
|
Version: %{rpmver}
|
||||||
Release: %{?snapver:0.%{snapver}.}4%{?dist}
|
Release: %{?snapver:0.%{snapver}.}5%{?dist}
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
Url: http://www.rpm.org/
|
Url: http://www.rpm.org/
|
||||||
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
|
Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
|
||||||
@ -49,6 +49,8 @@ Patch6: rpm-4.9.0-armhfp-logic.patch
|
|||||||
Patch100: 0001-Finish-lua-5.2-support-trac-865.patch
|
Patch100: 0001-Finish-lua-5.2-support-trac-865.patch
|
||||||
# Check for stale locks when opening write-cursors
|
# Check for stale locks when opening write-cursors
|
||||||
Patch101: rpm-4.11.x-cursor-failchk.patch
|
Patch101: rpm-4.11.x-cursor-failchk.patch
|
||||||
|
# Filter soname dependencies by name
|
||||||
|
Patch102: rpm-4.11.x-filter-soname-deps.patch
|
||||||
|
|
||||||
# These are not yet upstream
|
# These are not yet upstream
|
||||||
Patch301: rpm-4.6.0-niagara.patch
|
Patch301: rpm-4.6.0-niagara.patch
|
||||||
@ -229,6 +231,7 @@ packages on a system.
|
|||||||
|
|
||||||
%patch100 -p1 -b .lua-5.2
|
%patch100 -p1 -b .lua-5.2
|
||||||
%patch101 -p1 -b .cursor-failchk
|
%patch101 -p1 -b .cursor-failchk
|
||||||
|
%patch102 -p1 -b .filter-soname-deps
|
||||||
|
|
||||||
%patch301 -p1 -b .niagara
|
%patch301 -p1 -b .niagara
|
||||||
%patch302 -p1 -b .geode
|
%patch302 -p1 -b .geode
|
||||||
@ -462,6 +465,9 @@ exit 0
|
|||||||
%doc COPYING doc/librpm/html/*
|
%doc COPYING doc/librpm/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri May 17 2013 Panu Matilainen <pmatilai@redhat.com> - - 4.11.0.1-5
|
||||||
|
- filter out non-library soname dependencies
|
||||||
|
|
||||||
* Thu May 16 2013 Panu Matilainen <pmatilai@redhat.com> - - 4.11.0.1-4
|
* Thu May 16 2013 Panu Matilainen <pmatilai@redhat.com> - - 4.11.0.1-4
|
||||||
- check for stale locks when opening write-cursors (#860500, #962750...)
|
- check for stale locks when opening write-cursors (#860500, #962750...)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user