This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
-DPERL_GLOBAL_STRUCT and -fno-common smoke fail
authorDavid Mitchell <davem@iabyn.com>
Tue, 23 Apr 2019 11:21:54 +0000 (12:21 +0100)
committerDavid Mitchell <davem@iabyn.com>
Tue, 23 Apr 2019 11:21:54 +0000 (12:21 +0100)
The combination of those two flags causes t/porting/libperl.t to fail
because its expecting no BSS symbols, while -fno-common forces PL_Vars to
be BSS rather than Common.

Whether those two compiler directives are a sane combination is another
matter, but don't fail smokes if they appear together.

t/porting/libperl.t

index 3c8c433..f5fb53d 100644 (file)
@@ -330,9 +330,11 @@ ok($symbols{data}{const}{PL_no_mem}{'globals.o'}, "has PL_no_mem");
 
 my $GS  = $Config{ccflags} =~ /-DPERL_GLOBAL_STRUCT\b/ ? 1 : 0;
 my $GSP = $Config{ccflags} =~ /-DPERL_GLOBAL_STRUCT_PRIVATE/ ? 1 : 0;
+my $nocommon = $Config{ccflags} =~ /-fno-common/ ? 1 : 0;
 
 print "# GS  = $GS\n";
 print "# GSP = $GSP\n";
+print "# nocommon = $nocommon\n";
 
 my %data_symbols;
 
@@ -382,6 +384,11 @@ if ($GSP) {
     ok(!exists $data_symbols{PL_hash_seed}, "has no PL_hash_seed");
     ok(!exists $data_symbols{PL_ppaddr}, "has no PL_ppaddr");
 
+    if ($nocommon) {
+        $symbols{data}{common} = $symbols{data}{bss};
+        delete $symbols{data}{bss};
+    }
+
     ok(! exists $symbols{data}{bss}, "has no data bss symbols")
         or do {
             my $bad = "BSS entries (there are supposed to be none):\n";