Skip Menu |

Preferred bug tracker

Please visit the preferred bug tracker to report your issue.

This queue is for tickets about the Devel-Cover CPAN distribution.

Report information
The Basics
Id: 31841
Status: open
Priority: 0/
Queue: Devel-Cover

People
Owner: Nobody in particular
Requestors: xanni [...] glasswings.com.au
Cc: jkeenan [...] cpan.org
AdminCc:

Bug Information
Severity: (no value)
Broken in: 0.63
Fixed in: (no value)



Subject: Build fails during link under Windows XP
Devel-Cover-0.63 perl 5.10.0 and perl 5.8.8 MSWin32 (Windows XP Pro SP2) Results of "cpan Devel::Cover" from Strawberry Perl 5.10 (same failure with ActiveState Perl 5.8.8): C:\strawberry\perl\bin\perl.exe C:\strawberry\perl\lib\ExtUtils\xsubpp -typemap C:\strawberry\perl\lib\ExtUtils\typemap -typemap typemap Cover.xs > Cover.xsc && C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e mv Cover.xsc Cover.c gcc -c -IC:\strawberry\c\include -s -O2 -DWIN32 -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -DPERL_MSVCRT_READFIX -s -O2 -DVERSION=\"0.63\" -DXS_VERSION=\"0.63\" "-IC:\strawberry\perl\lib\CORE" Cover.c Running Mkbootstrap for Devel::Cover () C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e chmod 644 Cover.bs C:\strawberry\perl\bin\perl.exe -MExtUtils::Mksymlists \ -e "Mksymlists('NAME'=>\"Devel::Cover\", 'DLBASE' => 'Cover', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" dlltool --def Cover.def --output-exp dll.exp g++ -o blib\arch\auto\Devel\Cover\Cover.dll -Wl,--base-file -Wl,dll.base -mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" Cover.o -Wl,--image-base,0x31410000 C:\strawberry\perl\lib\CORE\libperl510.a C:\strawberry\c\lib\libmsvcrt.a C:\strawberry\c\lib\libmoldname.a C:\strawberry\c\lib\libkernel32.a C:\strawberry\c\lib\libuser32.a C:\strawberry\c\lib\libgdi32.a C:\strawberry\c\lib\libwinspool.a C:\strawberry\c\lib\libcomdlg32.a C:\strawberry\c\lib\libadvapi32.a C:\strawberry\c\lib\libshell32.a C:\strawberry\c\lib\libole32.a C:\strawberry\c\lib\liboleaut32.a C:\strawberry\c\lib\libnetapi32.a C:\strawberry\c\lib\libuuid.a C:\strawberry\c\lib\libws2_32.a C:\strawberry\c\lib\libmpr.a C:\strawberry\c\lib\libwinmm.a C:\strawberry\c\lib\libversion.a C:\strawberry\c\lib\libodbc32.a C:\strawberry\c\lib\libodbccp32.a dll.exp Cover.o:Cover.c:(.text+0x1d74): undefined reference to `Perl_pp_nextstate' Cover.o:Cover.c:(.text+0x1d9e): undefined reference to `Perl_pp_nextstate' Cover.o:Cover.c:(.text+0x1de4): undefined reference to `Perl_pp_setstate' Cover.o:Cover.c:(.text+0x1e0e): undefined reference to `Perl_pp_setstate' Cover.o:Cover.c:(.text+0x1e54): undefined reference to `Perl_pp_dbstate' Cover.o:Cover.c:(.text+0x1e7e): undefined reference to `Perl_pp_dbstate' Cover.o:Cover.c:(.text+0x1eb9): undefined reference to `Perl_pp_entersub' Cover.o:Cover.c:(.text+0x1ece): undefined reference to `Perl_pp_entersub' Cover.o:Cover.c:(.text+0x1f09): undefined reference to `Perl_pp_cond_expr' Cover.o:Cover.c:(.text+0x1f59): undefined reference to `Perl_pp_and' Cover.o:Cover.c:(.text+0x1fa9): undefined reference to `Perl_pp_andassign' Cover.o:Cover.c:(.text+0x1ff9): undefined reference to `Perl_pp_or' Cover.o:Cover.c:(.text+0x2049): undefined reference to `Perl_pp_orassign' Cover.o:Cover.c:(.text+0x2099): undefined reference to `Perl_pp_dor' Cover.o:Cover.c:(.text+0x20e9): undefined reference to `Perl_pp_dorassign' Cover.o:Cover.c:(.text+0x2139): undefined reference to `Perl_pp_xor' Cover.o:Cover.c:(.text+0x2189): undefined reference to `Perl_pp_require' Cover.o:Cover.c:(.text+0x21d9): undefined reference to `Perl_pp_exec' collect2: ld returned 1 exit status dmake.EXE: Error code 129, while making 'blib\arch\auto\Devel\Cover\Cover.dll' PJCJ/Devel-Cover-0.63.tar.gz C:\strawberry\c\bin\dmake.EXE -- NOT OK Running make test Can't test without successful make Running make install Make had returned bad status, install seems impossible Failed during this command: PJCJ/Devel-Cover-0.63.tar.gz : make NO
On Mon Dec 24 00:43:17 2007, xanni wrote: Show quoted text
> Cover.o:Cover.c:(.text+0x1d74): undefined reference to `Perl_pp_nextstate'
[etc] None of the Perl_pp_* opcode functions are part of the external API as defined by embed.fnc and therefore cannot be called from modules on MSWin32 (and AIX). I've attached a patch that calls them indirectly via the PL_ppaddr table, which is part of the exported API. All tests pass with this patch.
--- Cover.xs.orig 2007-11-16 14:28:07.000000000 -0800 +++ Cover.xs 2008-01-11 11:55:11.120697600 -0800 @@ -925,7 +925,7 @@ dMY_CXT; if (MY_CXT.covering) check_if_collecting(aTHX); if (collecting_here(aTHX)) cover_statement(aTHX); - return Perl_pp_nextstate(aTHX); + return CALL_FPTR(PL_ppaddr[OP_NEXTSTATE])(aTHX); } OP *dc_setstate(pTHX) @@ -933,7 +933,7 @@ dMY_CXT; if (MY_CXT.covering) check_if_collecting(aTHX); if (collecting_here(aTHX)) cover_statement(aTHX); - return Perl_pp_setstate(aTHX); + return CALL_FPTR(PL_ppaddr[OP_SETSTATE])(aTHX); } OP *dc_dbstate(pTHX) @@ -941,49 +941,49 @@ dMY_CXT; if (MY_CXT.covering) check_if_collecting(aTHX); if (collecting_here(aTHX)) cover_statement(aTHX); - return Perl_pp_dbstate(aTHX); + return CALL_FPTR(PL_ppaddr[OP_DBSTATE])(aTHX); } OP *dc_entersub(pTHX) { dMY_CXT; if (MY_CXT.covering) store_return(aTHX); - return Perl_pp_entersub(aTHX); + return CALL_FPTR(PL_ppaddr[OP_ENTERSUB])(aTHX); } OP *dc_cond_expr(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_cond(aTHX); - return Perl_pp_cond_expr(aTHX); + return CALL_FPTR(PL_ppaddr[OP_COND_EXPR])(aTHX); } OP *dc_and(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_and(aTHX); + return CALL_FPTR(PL_ppaddr[OP_AND])(aTHX); } OP *dc_andassign(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_andassign(aTHX); + return CALL_FPTR(PL_ppaddr[OP_ANDASSIGN])(aTHX); } OP *dc_or(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_or(aTHX); + return CALL_FPTR(PL_ppaddr[OP_OR])(aTHX); } OP *dc_orassign(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_orassign(aTHX); + return CALL_FPTR(PL_ppaddr[OP_ORASSIGN])(aTHX); } #if PERL_VERSION > 8 @@ -991,14 +991,14 @@ { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_dor(aTHX); + return CALL_FPTR(PL_ppaddr[OP_DOR])(aTHX); } OP *dc_dorassign(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_dorassign(aTHX); + return CALL_FPTR(PL_ppaddr[OP_DORASSIGN])(aTHX); } #endif @@ -1006,21 +1006,21 @@ { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) cover_logop(aTHX); - return Perl_pp_xor(aTHX); + return CALL_FPTR(PL_ppaddr[OP_XOR])(aTHX); } OP *dc_require(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) store_module(aTHX); - return Perl_pp_require(aTHX); + return CALL_FPTR(PL_ppaddr[OP_REQUIRE])(aTHX); } OP *dc_exec(pTHX) { dMY_CXT; if (MY_CXT.covering && collecting_here(aTHX)) call_report(aTHX); - return Perl_pp_exec(aTHX); + return CALL_FPTR(PL_ppaddr[OP_EXEC])(aTHX); } static int runops_cover(pTHX)
On Fri Jan 11 15:03:17 2008, JDB wrote: Show quoted text
> I've attached a patch that calls them indirectly via the PL_ppaddr > table, which is part of the exported API. All tests pass with this patch.
Ok, please ignore the actual patch; it just makes things compile/link again, but wouldn't actually work once REPLACE_OPS is fully implemented. It does show the proper way of fixing things though: you save the old PL_ppaddr[] entries before overwriting them, and then call those using CALL_FPTR() instead of using the non-exported symbols.
CC: undisclosed-recipients: ;
Subject: Re: [rt.cpan.org #31841] Build fails during link under Windows XP
Date: Mon, 21 Jan 2008 19:16:51 +0100
To: JDB via RT <bug-Devel-Cover [...] rt.cpan.org>
From: Paul Johnson <paul [...] pjcj.net>
On Fri, Jan 11, 2008 at 04:33:02PM -0500, JDB via RT wrote: Show quoted text
> On Fri Jan 11 15:03:17 2008, JDB wrote:
> > I've attached a patch that calls them indirectly via the PL_ppaddr > > table, which is part of the exported API. All tests pass with this patch.
> > Ok, please ignore the actual patch; it just makes things compile/link > again, but wouldn't actually work once REPLACE_OPS is fully implemented. > > It does show the proper way of fixing things though: you save the old > PL_ppaddr[] entries before overwriting them, and then call those using > CALL_FPTR() instead of using the non-exported symbols.
Thanks for this. I've actually got a patch for something similar checked in and it all seems to work well. (This silly thing is that this code is experimental and isn't even run at the moment.) I'll get a new release out as soon as possible.
On Mon Dec 24 00:43:17 2007, xanni wrote: Show quoted text
> Devel-Cover-0.63 > perl 5.10.0 and perl 5.8.8 MSWin32 (Windows XP Pro SP2) > > Results of "cpan Devel::Cover" from Strawberry Perl 5.10 (same failure > with ActiveState Perl 5.8.8):
As you can see from this link at 'cpantesters.org', the current version of Devel::Cover, 1.01, builds successfully on mswin32 on versions of Perl from 5.12.3 to 5.16.3. Since we have received these favorable test results since your original report was filed, I suspect that the problem you reported has been fixed. If it has not, please let us know. Otherwise, I recommend that this ticket be closed. Thank you very much. Jim Keenan