Perl / perl5

šŸŖ The Perl programming language
https://dev.perl.org/perl5/
Other
1.97k stars 555 forks source link

ExtUtils::ParseXS breaks compilation of XS modules on 5.8.5 with -Duseithreads -Doptimize='-g' -DDEBUGGING on gcc5.3.1 #15236

Open p5pRT opened 8 years ago

p5pRT commented 8 years ago

Migrated from rt.perl.org#127739 (status was 'open')

Searchable as RT127739$

p5pRT commented 8 years ago

From @wolfsage

Created by WolfSage@gmail.com

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?

Perl Info ``` Flags: category=library severity=low module=ExtUtils::ParseXS Site configuration information for perl 5.18.2: Configured by Debian Project at Tue Mar 1 17:12:59 UTC 2016. Summary of my perl5 (revision 5 version 18 subversion 2) configuration: Platform: osname=linux, osvers=3.13.0-79-generic, archname=x86_64-linux-gnu-thread-multi uname='linux lgw01-37 3.13.0-79-generic #123-ubuntu smp fri feb 19 14:27:58 utc 2016 x86_64 x86_64 x86_64 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Dldflags= -Wl,-Bsymbolic-functions -Wl,-z,relro -Dlddlflags=-shared -Wl,-Bsymbolic-functions -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.18 -Darchlib=/usr/lib/perl/5.18 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.18.2 -Dsitearch=/usr/local/lib/perl/5.18.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.18.2 -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.8.2', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, libperl=libperl.so.5.18.2 gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector' Locally applied patches: DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information. DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes. DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note that libperl-dev package is required for embedded linking DEBPKG:fixes/respect_umask - Respect umask during installation DEBPKG:debian/writable_site_dirs - Set umask approproately for site install directories DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of libperl.a to /usr/lib DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or perllocal.pod for perl or vendor DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables written to the makefile DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - http://bugs.debian.org/479460 Adjust Module::Build manual page extensions for the Debian Perl policy DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need. DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038] http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707 Configure CPANPLUS to use the site directories by default. DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl. DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/702096 Point users to Debian packages of deprecated core modules DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 Squelch locale warnings in Debian package maintainer scripts DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the upstream Git repository DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged patches for 5.18.2-2ubuntu1.1 in patchlevel.h DEBPKG:debian/skip-kfreebsd-crash - http://bugs.debian.org/628493 [perl #96272] Skip a crashing test case in t/op/threads.t on GNU/kFreeBSD DEBPKG:fixes/document_makemaker_ccflags - http://bugs.debian.org/628522 [rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags} DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure CPAN::Distribution with correct name of html2text DEBPKG:debian/hurd_test_skip_stack - http://bugs.debian.org/650175 Disable failing GNU/Hurd tests dist/threads/t/stack.t DEBPKG:fixes/manpage_name_Test-Harness - http://bugs.debian.org/650451 [ rt.cpan.org #73399] cpan/Test-Harness: add NAME headings in modules with POD DEBPKG:debian/makemaker-pasthru - http://bugs.debian.org/660195 [ rt.cpan.org #28632] Make EU::MM pass LD through to recursive Makefile.PL invocations DEBPKG:debian/perl5db-x-terminal-emulator.patch - http://bugs.debian.org/668490 Invoke x-terminal-emulator rather than xterm in perl5db.pl DEBPKG:debian/cpan-missing-site-dirs - http://bugs.debian.org/688842 Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is writable DEBPKG:fixes/memoize_storable_nstore - [rt.cpan.org #77790] http://bugs.debian.org/587650 Memoize::Storable: respect 'nstore' option not respected DEBPKG:fixes/net_ftp_failed_command - [rt.cpan.org #37700] http://bugs.debian.org/491062 Net::FTP: cope gracefully with a failed command DEBPKG:fixes/perlbug-patchlist - [3541c11] http://bugs.debian.org/710842 [perl #118433] Make perlbug look up the list of local patches at run time DEBPKG:fixes/module_metadata_security_doc - [68cdd4b] CVE-2013-1437 documentation fix DEBPKG:fixes/module_metadata_taint_fix - [bff978f] http://bugs.debian.org/722210 [rt.cpan.org #88576] untaint version, if needed, in Module::Metadata DEBPKG:fixes/IPC-SysV-spelling - http://bugs.debian.org/730558 [ rt.cpan.org #86736] Fix spelling of IPC_CREAT in IPC-SysV documentation DEBPKG:fixes/fix-undef-source - DEBPKG:fixes/CVE-2013-7422.patch - [PATCH] [perl #119505] Segfault from bad backreference DEBPKG:fixes/CVE-2014-4330.patch - [PATCH] don't recurse infinitely in Data::Dumper DEBPKG:fixes/CVE-2016-2381.patch - [PATCH 1/2] remove duplicate environment variables from environ @INC for perl 5.18.2: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl . Environment for perl 5.18.2: HOME=/home/mhorsfall LANG=en_US.UTF-8 LANGUAGE=en_US LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/home/mhorsfall/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games PERLDOC=-oman PERL_BADLANG (unset) SHELL=/bin/bash ```
p5pRT commented 7 years ago

From @jkeenan

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)

p5pRT commented 7 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 7 years ago

From @wolfsage

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)

jkeenan commented 2 years ago

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

xsawyerx commented 2 years ago

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.

wolfsage commented 2 years ago

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)

jkeenan commented 2 years ago

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.

jkeenan commented 2 years ago

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

wolfsage commented 2 years ago

I think https://metacpan.org/pod/Devel::PatchPerl should get it to build, buildperl in Devel::PPPort always gave me trouble