Open p5pRT opened 8 years ago
Reported by ribasushi on Devel::PPPort initially ( https://github.com/mhx/Devel-PPPort/issues/31)
Building and testing Devel-PPPort-3.32 ... cp PPPort.pm blib/lib/Devel/PPPort.pm Running Mkbootstrap for Devel::PPPort () chmod 644 "PPPort.bs" "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch" "-Iblib/lib" PPPort_xs.PL RealPPPort.xs adding XS code from parts/inc/sv_xpvf "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/xsubpp" -noprototypes -typemap "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/typemap" -typemap "typemap" RealPPPort.xs > RealPPPort.xsc && mv RealPPPort.xsc RealPPPort.c "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch" "-Iblib/lib" ppport_h.PL ppport.h cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"3.32\" -DXS_VERSION=\"3.32\" -fpic "-I/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE" RealPPPort.c In file included from RealPPPort.xs:31:0: RealPPPort.c: In function āS_croak_xs_usageā:
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:115:18: error: āmy_perlā undeclared (first use in this function) # define aTHX my_perl ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:2619:40: note: in definition of macro āPERL_DEBā # define PERL_DEB(a) a ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:120:18: note: in expansion of macro āaTHXā # define aTHX_ aTHX\, ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:2773:17: note: in expansion of macro āaTHX_ā Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\"\, line %d"\, \ ^ RealPPPort.c:423:41: note: in expansion of macro āassertā #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) ^ RealPPPort.c:434:5: note: in expansion of macro āPERL_ARGS_ASSERT_CROAK_XS_USAGEā PERL_ARGS_ASSERT_CROAK_XS_USAGE; ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:115:18: note: each undeclared identifier is reported only once for each function it appears in # define aTHX my_perl ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:2619:40: note: in definition of macro āPERL_DEBā # define PERL_DEB(a) a ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:120:18: note: in expansion of macro āaTHXā # define aTHX_ aTHX\, ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux-thread-multi/CORE/perl.h:2773:17: note: in expansion of macro āaTHX_ā Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\"\, line %d"\, \ ^ RealPPPort.c:423:41: note: in expansion of macro āassertā #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) ^ RealPPPort.c:434:5: note: in expansion of macro āPERL_ARGS_ASSERT_CROAK_XS_USAGEā PERL_ARGS_ASSERT_CROAK_XS_USAGE; ^ Makefile:349: recipe for target 'RealPPPort.o' failed make: *** [RealPPPort.o] Error 1
It turned out to be that the latest ExtUtils::ParseXS was installed\, and xsubpp is filling in a croak_xs that looks like:
STATIC void S_croak_xs_usage(const CV *const cv\, const char *const params) { const GV *const gv = CvGV(cv);
PERL_ARGS_ASSERT_CROAK_XS_USAGE;
if (gv) {
If we add dTHX; to the beginning of the function\, compilation succeeds. Does ExtUtils::ParseXS need something like:
#ifdef PERL_NO_GET_CONTEXT dTHX; #endif
which it has on other functions?
On Fri\, 18 Mar 2016 15:04:15 GMT\, alh wrote:
This is a bug report for perl from WolfSage@gmail.com\, generated with the help of perlbug 1.39 running under perl 5.18.2.
----------------------------------------------------------------- [Please describe your issue here]
Reported by ribasushi on Devel::PPPort initially ( https://github.com/mhx/Devel-PPPort/issues/31)
Building and testing Devel-PPPort-3.32 ... cp PPPort.pm blib/lib/Devel/PPPort.pm Running Mkbootstrap for Devel::PPPort () chmod 644 "PPPort.bs" "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch" "-Iblib/lib" PPPort_xs.PL RealPPPort.xs adding XS code from parts/inc/sv_xpvf "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/xsubpp" -noprototypes -typemap "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/ExtUtils/typemap" -typemap "typemap" RealPPPort.xs > RealPPPort.xsc && mv RealPPPort.xsc RealPPPort.c "/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/bin/perl" "-Iblib/arch" "-Iblib/lib" ppport_h.PL ppport.h cc -c -D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -g -DVERSION=\"3.32\" -DXS_VERSION=\"3.32\" -fpic "-I/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE" RealPPPort.c In file included from RealPPPort.xs:31:0: RealPPPort.c: In function āS_croak_xs_usageā:
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:115:18: error: āmy_perlā undeclared (first use in this function) # define aTHX my_perl ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:2619:40: note: in definition of macro āPERL_DEBā # define PERL_DEB(a) a ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:120:18: note: in expansion of macro āaTHXā # define aTHX_ aTHX\, ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:2773:17: note: in expansion of macro āaTHX_ā Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\"\, line %d"\, \ ^ RealPPPort.c:423:41: note: in expansion of macro āassertā #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) ^ RealPPPort.c:434:5: note: in expansion of macro āPERL_ARGS_ASSERT_CROAK_XS_USAGEā PERL_ARGS_ASSERT_CROAK_XS_USAGE; ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:115:18: note: each undeclared identifier is reported only once for each function it appears in # define aTHX my_perl ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:2619:40: note: in definition of macro āPERL_DEBā # define PERL_DEB(a) a ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:120:18: note: in expansion of macro āaTHXā # define aTHX_ aTHX\, ^
/home/rabbit/perl5/perlbrew/perls/5.8.5_dbg/lib/5.8.5/x86_64-linux- thread-multi/CORE/perl.h:2773:17: note: in expansion of macro āaTHX_ā Perl_croak(aTHX_ "Assertion " STRINGIFY(what) " failed: file \"%s\"\, line %d"\, \ ^ RealPPPort.c:423:41: note: in expansion of macro āassertā #define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) ^ RealPPPort.c:434:5: note: in expansion of macro āPERL_ARGS_ASSERT_CROAK_XS_USAGEā PERL_ARGS_ASSERT_CROAK_XS_USAGE; ^ Makefile:349: recipe for target 'RealPPPort.o' failed make: *** [RealPPPort.o] Error 1
It turned out to be that the latest ExtUtils::ParseXS was installed\, and xsubpp is filling in a croak_xs that looks like:
STATIC void S_croak_xs_usage(const CV *const cv\, const char *const params) { const GV *const gv = CvGV(cv);
PERL_ARGS_ASSERT_CROAK_XS_USAGE;
if (gv) {
If we add dTHX; to the beginning of the function\, compilation succeeds. Does ExtUtils::ParseXS need something like:
#ifdef PERL_NO_GET_CONTEXT dTHX; #endif
which it has on other functions?
I'm confused as to where in the source code you think such a change should be applied. I don't see that 'ifdef' anywhere in ExtUtils-ParseXS.
##### $ ack -A2 'ifdef PERL_NO_GET_CONTEXT' . cpan/Devel-PPPort/parts/inc/variables 214:#ifdef PERL_NO_GET_CONTEXT 215- dTHX; 216-#endif
cpan/Devel-PPPort/parts/inc/newCONSTSUB 75:#ifdef PERL_NO_GET_CONTEXT 76- dTHX; 77-#endif #####
Thank you very much. -- James E Keenan (jkeenan@cpan.org)
The RT System itself - Status changed from 'new' to 'open'
On Thu\, Jan 5\, 2017 at 4:03 PM\, James E Keenan via RT \perlbug\-followup@​perl\.org wrote:
I'm confused as to where in the source code you think such a change should be applied. I don't see that 'ifdef' anywhere in ExtUtils-ParseXS.
##### $ ack -A2 'ifdef PERL_NO_GET_CONTEXT' . cpan/Devel-PPPort/parts/inc/variables 214:#ifdef PERL_NO_GET_CONTEXT 215- dTHX; 216-#endif
cpan/Devel-PPPort/parts/inc/newCONSTSUB 75:#ifdef PERL_NO_GET_CONTEXT 76- dTHX; 77-#endif #####
I don't recall my original reasoning.
However S_croak_xs_usage in core does this:
vutil.h:S_croak_xs_usage(pTHX_ const CV *const cv\, const char *const params); vutil.h:S_croak_xs_usage(pTHX_ const CV *const cv\, const char *const params) vutil.h:#define croak_xs_usage(a\,b) S_croak_xs_usage(aTHX_ a\,b) vutil.h:#define croak_xs_usage S_croak_xs_usage
Whereas ExtUtils::ParseXS only does this:
lib/ExtUtils/ParseXS/Utilities.pm:S_croak_xs_usage(const CV *const cv\, const char *const params); lib/ExtUtils/ParseXS/Utilities.pm:S_croak_xs_usage(const CV *const cv\, const char *const params) lib/ExtUtils/ParseXS/Utilities.pm:#define croak_xs_usage S_croak_xs_usage
Seems to me like it's missing the pTHX depending on PERL_IMPLICIT_CONTEXT...
-- Matthew Horsfall (alh)
S_croak_xs_usage
@wolfsage, can you review this ticket for closability?
In your most recent comment, you referred to S_croak_xs_usage
, noting that it was found in file vutil.h
. However, this appears to no longer be the case.
$ ack -l S_croak_xs_usage .
dist/ExtUtils-ParseXS/Changes
dist/ExtUtils-ParseXS/lib/ExtUtils/ParseXS/Utilities.pm
Nor does this function still appear in the upstream version.pm
:
$ ack S_croak_xs_usage .
$
# no output
Since (i) @xsawyerx is planning a new CPAN release of EU::PXS, and (ii) there are other EU::PXS issues pending, we should see if we can clean up older tickets for this distro.
Thank you very much. Jim Keenan
Maybe it's better to do the release without it so as to not stress anyone to wrap something up for the release. Once one is done, it's easier to do the next one.
I think the steps (for anyone) to confirm if this is still an issue are:
If it still fails similarly, some work could be done (if we want to support 5.8.5 still, assuming this issue also doesn't affect other perl versions)
Maybe it's better to do the release without it so as to not stress anyone to wrap something up for the release. Once one is done, it's easier to do the next one.
That's cool. Your volunteering to do a CPAN release just got me to look at old tickets, and this appeared to be the most closable.
I think the steps (for anyone) to confirm if this is still an issue are:
* For a threaded and non-threaded build: * Build perl 5.8.5 * Install ExtUtils::ParseXS * Attempt to install an XS module like Devel::PPPort
If it still fails similarly, some work could be done (if we want to support 5.8.5 still, assuming this issue also doesn't affect other perl versions)
I tried to build perl-5.8.5 from source and failed twice. The first time was from the tag for that release in the GH repository. The second was by obtaining buildperl.pl and calling:
perl ~/bin/perl/buildperl.pl --perl=5.8.5 --prefix=/home/jkeenan/testing/5.8.5 \
--oneshot -- -des -Duseithreads -Doptimize='-g' -DDEBUGGING
In both cases, make
failed with output like this:
cc -L/usr/local/lib -o miniperl \
miniperlmain.o opmini.o libperl.a
opmini.o: In function `Perl_scalar':
/home/jkeenan/Downloads/perl-5.8.5/opmini.c:602: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/opmini.c:613: undefined reference to `pthread_getspecific'
opmini.o: In function `Perl_list':
/home/jkeenan/Downloads/perl-5.8.5/opmini.c:906: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/opmini.c:916: undefined reference to `pthread_getspecific'
opmini.o: In function `S_apply_attrs':
/home/jkeenan/Downloads/perl-5.8.5/opmini.c:1491: undefined reference to `pthread_getspecific'
opmini.o:/home/jkeenan/Downloads/perl-5.8.5/opmini.c:1524: more undefined references to `pthread_getspecific' follow
libperl.a(perl.o): In function `perl_alloc':
/home/jkeenan/Downloads/perl-5.8.5/perl.c:203: undefined reference to `pthread_key_create'
/home/jkeenan/Downloads/perl-5.8.5/perl.c:203: undefined reference to `pthread_setspecific'
/home/jkeenan/Downloads/perl-5.8.5/perl.c:203: undefined reference to `pthread_setspecific'
libperl.a(perl.o): In function `perl_construct':
/home/jkeenan/Downloads/perl-5.8.5/perl.c:382: undefined reference to `pthread_getspecific'
libperl.a(perl.o): In function `perl_destruct':
/home/jkeenan/Downloads/perl-5.8.5/perl.c:514: undefined reference to `pthread_getspecific'
libperl.a(perl.o): In function `perl_parse':
/home/jkeenan/Downloads/perl-5.8.5/perl.c:1284: undefined reference to `pthread_getspecific'
libperl.a(perl.o): In function `S_parse_body':
/home/jkeenan/Downloads/perl-5.8.5/perl.c:1794: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/perl.c:1802: undefined reference to `pthread_getspecific'
libperl.a(perl.o):/home/jkeenan/Downloads/perl-5.8.5/perl.c:1848: more undefined references to `pthread_getspecific' follow
libperl.a(util.o): In function `Perl_set_context':
/home/jkeenan/Downloads/perl-5.8.5/util.c:2865: undefined reference to `pthread_setspecific'
libperl.a(mg.o): In function `Perl_magic_get':
/home/jkeenan/Downloads/perl-5.8.5/mg.c:840: undefined reference to `pthread_getspecific'
libperl.a(mg.o): In function `Perl_magic_clearsig':
/home/jkeenan/Downloads/perl-5.8.5/mg.c:1152: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/mg.c:1174: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/mg.c:1178: undefined reference to `pthread_getspecific'
libperl.a(mg.o): In function `Perl_csighandler':
/home/jkeenan/Downloads/perl-5.8.5/mg.c:1199: undefined reference to `pthread_getspecific'
libperl.a(mg.o):/home/jkeenan/Downloads/perl-5.8.5/mg.c:1301: more undefined references to `pthread_getspecific' follow
libperl.a(sv.o): In function `perl_clone':
/home/jkeenan/Downloads/perl-5.8.5/sv.c:10695: undefined reference to `pthread_setspecific'
/home/jkeenan/Downloads/perl-5.8.5/sv.c:11281: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/sv.c:11425: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/sv.c:11432: undefined reference to `pthread_getspecific'
libperl.a(sv.o): In function `Perl_sv_recode_to_utf8':
/home/jkeenan/Downloads/perl-5.8.5/sv.c:11469: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/sv.c:11499: undefined reference to `pthread_getspecific'
libperl.a(sv.o):/home/jkeenan/Downloads/perl-5.8.5/sv.c:11528: more undefined references to `pthread_getspecific' follow
libperl.a(pp.o): In function `Perl_pp_pow':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:1015: undefined reference to `pow'
libperl.a(pp.o): In function `Perl_pp_modulo':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:1338: undefined reference to `floor'
/home/jkeenan/Downloads/perl-5.8.5/pp.c:1341: undefined reference to `floor'
/home/jkeenan/Downloads/perl-5.8.5/pp.c:1353: undefined reference to `fmod'
libperl.a(pp.o): In function `Perl_pp_atan2':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2690: undefined reference to `atan2'
libperl.a(pp.o): In function `Perl_pp_sin':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2701: undefined reference to `sin'
libperl.a(pp.o): In function `Perl_pp_cos':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2713: undefined reference to `cos'
libperl.a(pp.o): In function `Perl_pp_exp':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2773: undefined reference to `exp'
libperl.a(pp.o): In function `Perl_pp_log':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2789: undefined reference to `log'
libperl.a(pp.o): In function `Perl_pp_sqrt':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2805: undefined reference to `sqrt'
libperl.a(pp.o): In function `Perl_pp_int':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2836: undefined reference to `floor'
/home/jkeenan/Downloads/perl-5.8.5/pp.c:2843: undefined reference to `ceil'
libperl.a(pp.o): In function `Perl_pp_splice':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:4083: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/pp.c:4085: undefined reference to `pthread_getspecific'
libperl.a(pp.o): In function `Perl_pp_push':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:4280: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/pp.c:4282: undefined reference to `pthread_getspecific'
libperl.a(pp.o): In function `Perl_pp_unshift':
/home/jkeenan/Downloads/perl-5.8.5/pp.c:4336: undefined reference to `pthread_getspecific'
libperl.a(pp.o):/home/jkeenan/Downloads/perl-5.8.5/pp.c:4338: more undefined references to `pthread_getspecific' follow
libperl.a(pp_pack.o): In function `S_pack_rec':
/home/jkeenan/Downloads/perl-5.8.5/pp_pack.c:2435: undefined reference to `floor'
/home/jkeenan/Downloads/perl-5.8.5/pp_pack.c:2437: undefined reference to `floor'
libperl.a(pp_sort.o): In function `Perl_pp_sort':
/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1434: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1579: undefined reference to `pthread_getspecific'
/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1627: undefined reference to `pthread_getspecific'
libperl.a(pp_sort.o): In function `sortcv':
/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1649: undefined reference to `pthread_getspecific'
libperl.a(pp_sort.o): In function `sortcv_stacked':
/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1694: undefined reference to `pthread_getspecific'
libperl.a(pp_sort.o):/home/jkeenan/Downloads/perl-5.8.5/pp_sort.c:1722: more undefined references to `pthread_getspecific' follow
collect2: error: ld returned 1 exit status
makefile:239: recipe for target 'miniperl' failed
make: *** [miniperl] Error 1
make all: 512
Any suggestions?
Thank you very much. Jim Keenan
I think https://metacpan.org/pod/Devel::PatchPerl should get it to build, buildperl in Devel::PPPort always gave me trouble
Migrated from rt.perl.org#127739 (status was 'open')
Searchable as RT127739$