Skip to content

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

Open

Description

@p5pRT

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

Searchable as RT127739$

Activity

  1. p5pRT commented on Mar 18, 2016

    @p5pRT
    Author

    From @wolfsage

    Created by WolfSage@gmail.com

    Reported by ribasushi on Devel​::PPPort initially (
    Dual-Life/Devel-PPPort#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
    
    
  2. p5pRT commented on Jan 5, 2017

    @p5pRT
    Author

    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 (
    Dual-Life/Devel-PPPort#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)

  3. p5pRT commented on Jan 5, 2017

    @p5pRT
    Author

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

  4. p5pRT commented on Jan 6, 2017

    @p5pRT
    Author

    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)

  5. jkeenan commented on Jan 2, 2022

    @jkeenan
    Contributor

    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

  6. xsawyerx commented on Jan 3, 2022

    @xsawyerx
    Member

    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.

  7. wolfsage commented on Jan 3, 2022

    @wolfsage
    Contributor

    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)

  8. jkeenan commented on Jan 3, 2022

    @jkeenan
    Contributor

    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.

  9. jkeenan commented on Jan 4, 2022

    @jkeenan
    Contributor

    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

  10. wolfsage commented on Jan 4, 2022

    @wolfsage
    Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions