Browse Source

test/recipes/01-test_symbol_presence.t: Treat common symbols specially

Common symbols (type 'C' in the 'nm' output) are allowed to be defined more
than once.  This makes test/recipes/01-test_symbol_presence.t reflect that.

Fixes #22869 (partially)
Fixes #22837

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22880)
Richard Levitte 5 months ago
parent
commit
4ff5137ff5
1 changed files with 26 additions and 15 deletions
  1. 26 15
      test/recipes/01-test_symbol_presence.t

+ 26 - 15
test/recipes/01-test_symbol_presence.t

@@ -114,23 +114,34 @@ foreach (sort keys %stlibname) {
     my @arrays = ( \@stlib_lines );
     push @arrays, \@shlib_lines unless disabled('shared');
     foreach (@arrays) {
+        my %commons;
+        foreach (@$_) {
+            if (m|^(.*) C .*|) {
+                $commons{$1}++;
+            }
+        }
+        foreach (sort keys %commons) {
+            note "Common symbol: $_";
+        }
+
         @$_ =
             sort
-            map {
-                # Drop the first space and everything following it
-                s| .*||;
-                # Drop OpenSSL dynamic version information if there is any
-                s|\@\@.+$||;
-                # Return the result
-                $_
-            }
-            # Drop any symbol starting with a double underscore, they
-            # are reserved for the compiler / system ABI and are none
-            # of our business
-            grep !m|^__|,
-            # Only look at external definitions
-            grep m|.* [BCDST] .*|,
-            @$_ ),
+            ( map {
+                  # Drop the first space and everything following it
+                  s| .*||;
+                  # Drop OpenSSL dynamic version information if there is any
+                  s|\@\@.+$||;
+                  # Return the result
+                  $_
+              }
+              # Drop any symbol starting with a double underscore, they
+              # are reserved for the compiler / system ABI and are none
+              # of our business
+              grep !m|^__|,
+              # Only look at external definitions
+              grep m|.* [BDST] .*|,
+              @$_ ),
+            keys %commons;
     }
 
     # Massage the mkdef.pl output to only contain global symbols