]> err.no Git - dpkg/commitdiff
Add new attributes (local, global, visibility) to Dpkg::Shlibs::Objdump's symbols
authorRaphael Hertzog <hertzog@debian.org>
Tue, 14 Aug 2007 12:38:16 +0000 (14:38 +0200)
committerRaphael Hertzog <hertzog@debian.org>
Tue, 14 Aug 2007 12:38:16 +0000 (14:38 +0200)
Those new attributes are needed for further changes in dpkg-gensymbols
behaviour. Update the test suite to include the new attributes.

scripts/Dpkg/Shlibs/Objdump.pm
scripts/Dpkg/Shlibs/SymbolFile.pm
scripts/t/200_Dpkg_Shlibs.t

index cd51f4273829cc30e6965434c06247bd8b433758..19a38f4799a994167cb7c2d1c6fe93a8b27bc439 100644 (file)
@@ -224,14 +224,20 @@ sub _parse {
 
 sub parse_dynamic_symbol {
     my ($self, $line) = @_;
-    my $vis = '(?:\.protected|\.hidden|\.internal|0x\S+)';
-    if ($line =~ /^[0-9a-f]+ (.{7})\s+(\S+)\s+[0-9a-f]+\s+(\S+)?(?:(?:\s+$vis)?\s+(\S+))/) {
+    my $vis_re = '(\.protected|\.hidden|\.internal|0x\S+)';
+    if ($line =~ /^[0-9a-f]+ (.{7})\s+(\S+)\s+[0-9a-f]+\s+(\S+)?(?:(?:\s+$vis_re)?\s+(\S+))/) {
 
-       my ($flags, $sect, $ver, $name) = ($1, $2, $3, $4);
+       my ($flags, $sect, $ver, $vis, $name) = ($1, $2, $3, $4, $5);
 
        # Special case if version is missing but extra visibility
        # attribute replaces it in the match
-       $ver = '' if defined($ver) and $ver =~ /^$vis$/; 
+       if (defined($ver) and $ver =~ /^$vis_re$/) {
+           $vis = $ver;
+           $ver = '';
+       }
+
+       # Cleanup visibility field
+       $vis =~ s/^\.// if defined($vis);
 
        my $symbol = {
                name => $name,
@@ -241,6 +247,9 @@ sub parse_dynamic_symbol {
                debug => substr($flags, 5, 1) eq "d",
                type => substr($flags, 6, 1),
                weak => substr($flags, 1, 1) eq "w",
+               local => substr($flags, 0, 1) eq "l",
+               global => substr($flags, 0, 1) eq "g",
+               visibility => defined($vis) ? $vis : '',
                hidden => '',
                defined => $sect ne '*UND*'
            };
index f8a09425b4d228913a246075f97dc83e7741ef85..329f763ac5f7c1939e081309ed18bf0b70dc6863 100644 (file)
@@ -122,7 +122,7 @@ sub load {
            };
            $self->{objects}{$object}{syms}{$2} = $sym;
        } elsif (/^#/) {
-           # Skip possible comments
+           # Skip possible comments
        } elsif (/^\|\s*(.*)$/) {
            # Alternative dependency template
            push @{$self->{objects}{$object}{deps}}, "$1";
index f19f83dd8e21fd398f259c513b47b369c27f6658..ec12a8c87e4fbdd3292bdfc3aeb569c3d0809a79 100644 (file)
@@ -37,11 +37,13 @@ my $sym = $obj->get_symbol('_sys_nerr@GLIBC_2.3');
 is_deeply( $sym, { name => '_sys_nerr', version => 'GLIBC_2.3',
                   soname => 'libc.so.6', section => '.rodata', dynamic => 1,
                   debug => '', type => 'O', weak => '',
+                  local => '', global => 1, visibility => '',
                   hidden => 1, defined => 1 }, 'Symbol' );
 $sym = $obj->get_symbol('_IO_stdin_used');
 is_deeply( $sym, { name => '_IO_stdin_used', version => '',
                   soname => 'libc.so.6', section => '*UND*', dynamic => 1,
                   debug => '', type => ' ', weak => 1,
+                  local => '', global => '', visibility => '',   
                   hidden => '', defined => '' }, 'Symbol 2' );
 
 my @syms = $obj->get_exported_dynamic_symbols;
@@ -132,6 +134,7 @@ $sym = $obj->get_symbol('IA__g_free');
 is_deeply( $sym, { name => 'IA__g_free', version => '',
                   soname => 'libglib-2.0.so.0', section => '.text', dynamic => 1,
                   debug => '', type => 'F', weak => '',
+                  local => 1, global => '', visibility => 'hidden',
                   hidden => '', defined => 1 }, 
                   'symbol with visibility without version' );