Description
For several months I have been noticing smoke-test failures under certain configurations on OpenBSD-7.4; see, e.g., report 5052514. The failures occur when configuring a perl built with these command-line switches:
$ sh ./Configure -des -Dusedevel -Dcc=gcc -Accflags='-DPERL_RC_STACK -DDEBUG_LEAKING_SCALARS'
... and then, after running make test_prep
, calling:
$ cd t; ./perl harness -v ../lib/ExtUtils/t/Embed.t; cd -
ld: error: undefined symbol: Perl_more_sv
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
ld: error: undefined symbol: PL_sv_serial
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
collect2: ld returned 1 exit status
not ok 1
not ok 10 # system returned -1
Failed 10/10 subtests
Test Summary Report
-------------------
../lib/ExtUtils/t/Embed.t (Wstat: 0 Tests: 2 Failed: 2)
Failed tests: 1, 10
Parse errors: Tests out of sequence. Found (10) but expected (2)
Bad plan. You planned 10 tests but ran 2.
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.48 cusr 0.11 csys = 0.62 CPU)
Result: FAIL
I didn't pay these much attention at first because at first the perl was being built with a compiler I had never heard of, eg++
. But more recently these failures were occuring with gcc
as the compiler.
I haven't been able to install an OpenBSD more recent than 6.9, but I decided to explore this problem on that version today regardless. I got the test failure reported above on blead. I then decided to see whether these failures were due to a recent code change or whether @cjg-cguevara's exploration of these config options had merely revealed a problem that was "always" there. I tested at tag v5.38.0
and got the failure reported above.
$ uname -mrs
OpenBSD 6.9 amd64
$ gcc --version | head -1
gcc (GCC) 4.2.1 20070719
$ git show | head -3
commit 76298ae68aa7796f0ffc05095b127d23f4b2de8f
Author: Ricardo Signes <[email protected]>
Date: Sat Jul 1 20:48:27 2023 -0400
$ sh ./Configure -des -Dusedevel -Dcc=gcc -Accflags='-DPERL_RC_STACK -DDEBUG_LEAKING_SCALARS'; make test_prep
$ ./perl -Ilib -V:config_args
config_args='-des -Dusedevel -Dcc=gcc -Accflags=-DPERL_RC_STACK -DDEBUG_LEAKING_SCALARS';
$ cd t; ./perl harness -v ../lib/ExtUtils/t/Embed.t; cd -
ld: error: undefined symbol: Perl_more_sv
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
ld: error: undefined symbol: PL_sv_serial
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
>>> referenced by embed_test.c
>>> /tmp//ccE9t92Z.o:(S_new_SV)
collect2: ld returned 1 exit status
not ok 1
not ok 10 # system returned -1
Failed 10/10 subtests
Test Summary Report
-------------------
../lib/ExtUtils/t/Embed.t (Wstat: 0 Tests: 2 Failed: 2)
Failed tests: 1, 10
Parse errors: Tests out of sequence. Found (10) but expected (2)
Bad plan. You planned 10 tests but ran 2.
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.48 cusr 0.11 csys = 0.62 CPU)
Result: FAIL
Since the gcc
version I was testing with dates back to 2007, I decided to try with the system's default C-compiler, clang-10
.
$ clang --version >
OpenBSD clang version 10.0.1
Target: amd64-unknown-openbsd6.9
Thread model: posix
InstalledDir: /usr/bin
$ sh ./Configure -des -Dusedevel -Dcc=clang -Accflags='-DPERL_RC_STACK -DDEBUG_LEAKING_SCALARS'; make test_prep
With this more recent clang
, the failing tests PASSed.
$ cd t; ./perl harness -v ../lib/ExtUtils/t/Embed.t; cd -
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10 # system returned 0
ok
All tests successful.
Files=1, Tests=10, 1 wallclock secs ( 0.01 usr 0.02 sys + 0.55 cusr 0.36 csys = 0.94 CPU)
Result: PASS
It would be good if someone could test these config options on an up-to-date OpenBSD with both gcc
and clang
. We can then try to evaluate the source of the test failures. cc: @afresh1