From 38cf48b3044749fd5b37e36e5d9b2dc9fe7056ff Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 30 Nov 2023 08:48:33 +0100 Subject: [PATCH 1/3] test/recipes/01-test_symbol_presence.t: Ignore symbols starting with '__' On some platforms, the compiler may add symbols that aren't ours and that we should ignore. They are generally expected to start with a double underscore, and thereby easy to detect. Fixes #22869 (partially) --- test/recipes/01-test_symbol_presence.t | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t index 9efa9f8d2d6eb..66e5669e193c7 100644 --- a/test/recipes/01-test_symbol_presence.t +++ b/test/recipes/01-test_symbol_presence.t @@ -124,7 +124,13 @@ foreach (sort keys %stlibname) { # Return the result $_ } - grep(m|.* [BCDST] .*|, @$_); + # 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] .*|, + @$_ ), } # Massage the mkdef.pl output to only contain global symbols From feead62eb7873c6a8a95e75ad5ca3ac7b9ed8bcd Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 30 Nov 2023 09:02:25 +0100 Subject: [PATCH 2/3] 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 --- test/recipes/01-test_symbol_presence.t | 45 +++++++++++++++++--------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t index 66e5669e193c7..cd3ac48bae5e7 100644 --- a/test/recipes/01-test_symbol_presence.t +++ b/test/recipes/01-test_symbol_presence.t @@ -114,23 +114,38 @@ 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|\@\@.+$||; + # Drop any symbol starting with a double underscore, they + # are reserved for the compiler / system ABI and are none + # of our business + 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 From 1055cefa6718167759e51165324b10345f8e7a99 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Thu, 30 Nov 2023 10:09:41 +0100 Subject: [PATCH 3/3] fixup! test/recipes/01-test_symbol_presence.t: Treat common symbols specially --- test/recipes/01-test_symbol_presence.t | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t index cd3ac48bae5e7..222b1886aec01 100644 --- a/test/recipes/01-test_symbol_presence.t +++ b/test/recipes/01-test_symbol_presence.t @@ -131,10 +131,6 @@ foreach (sort keys %stlibname) { s| .*||; # Drop OpenSSL dynamic version information if there is any s|\@\@.+$||; - # Drop any symbol starting with a double underscore, they - # are reserved for the compiler / system ABI and are none - # of our business - s|^__||; # Return the result $_ }