The following commit has been merged in the master branch:
commit c43ba8d76c43514206e467211295d8532944a61f
Author: Raphael Hertzog <hert...@debian.org>
Date:   Sat Jun 20 21:45:48 2009 +0200

    dpkg-gensymbols: add new “ignore-blacklist” tag
    
    Add new tag "ignore-blacklist" to force-include symbols which are
    normally blacklisted. This can be useful for libgcc to include symbols
    that the toolchain allows to be shared but that are often static
    (and hence are blacklisted for this reason). Closes: #533642

diff --git a/debian/changelog b/debian/changelog
index 56d93a5..eb19faa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -27,6 +27,10 @@ dpkg (1.15.3) UNRELEASED; urgency=low
     packages. Closes: #526251
   * Assume an implicit version of "Base" for all unversioned symbols
     that are merged into a SymbolFile. Closes: #533181
+  * Add new tag "ignore-blacklist" to force-include symbols which are
+    normally blacklisted. This can be useful for libgcc to include symbols
+    that the toolchain allows to be shared but that are often static (and
+    hence are blacklisted for this reason). Closes: #533642
 
   [ Updated dpkg translations ]
   * Simplified Chinese (Deng Xiyue). Closes: #531387
diff --git a/man/dpkg-gensymbols.1 b/man/dpkg-gensymbols.1
index 0aaa88d..ba2b81e 100644
--- a/man/dpkg-gensymbols.1
+++ b/man/dpkg-gensymbols.1
@@ -149,6 +149,14 @@ second one anywhere except on armel.
 
  (arch=alpha amd64 ia64)a_64bit_specific_sym...@base 1.0
  (arch=!armel)symbol_armel_does_not_h...@base 1.0
+.TP
+.B ignore\-blacklist
+dpkg\-gensymbols has an internal blacklist of symbols that should not
+appear in symbols files as they are usually only side-effects of
+implementation details of the toolchain. If for some reason, you really
+want one of those symbols to be included in the symbols file, you should
+tag the symbol with \fBignore\-blacklist\fP. It can be necessary for
+some low level toolchain libraries like libgcc.
 .SS Using includes
 .P 
 When the set of exported symbols differ between architectures, it may become
diff --git a/scripts/Dpkg/Shlibs/SymbolFile.pm 
b/scripts/Dpkg/Shlibs/SymbolFile.pm
index aa888d2..f885166 100644
--- a/scripts/Dpkg/Shlibs/SymbolFile.pm
+++ b/scripts/Dpkg/Shlibs/SymbolFile.pm
@@ -262,12 +262,13 @@ sub merge_symbols {
     my $soname = $object->{SONAME} || error(_g("Can't merge symbols from 
objects without SONAME."));
     my %dynsyms;
     foreach my $sym ($object->get_exported_dynamic_symbols()) {
-       next if exists $blacklist{$sym->{name}};
-       if ($sym->{version}) {
-           $dynsyms{$sym->{name} . '@' . $sym->{version}} = $sym;
-       } else {
-           $dynsyms{$sym->{name} . '@Base' } = $sym;
-       }
+        my $name = $sym->{name} . '@' .
+                   ($sym->{version} ? $sym->{version} : "Base");
+        my $symobj = $self->lookup_symbol($name, [ $soname ]);
+        if (exists $blacklist{$sym->{name}}) {
+            next unless (defined $symobj and 
$symobj->has_tag("ignore-blacklist"));
+        }
+        $dynsyms{$name} = $sym;
     }
 
     unless (exists $self->{objects}{$soname}) {

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to