> [jimc - Sun Jul 13 22:36:22 2003]:
> 
> When doing 'make test' on B::Generate on 5.8.1-19893,
> I get missing symbols, which are defined in embed.h,
> and used successfully in core.  For me at least, theyre
> not available to this XS module (though other non-CORE
> XS's build ok).

> I dunno whether its a bug in CORE, in B::Generate, or
> a PEBCAK error, but I thought it safest to flag it,
> in case it impacts 5.8.1.

> [EMAIL PROTECTED] maintperl]$ grep -r fold_constants *
> embed.fnc:p     |OP*    |fold_constants |OP* arg
> embed.h:#define fold_constants          Perl_fold_constants
> embed.h:#define fold_constants(a)       Perl_fold_constants(aTHX_ a)
> op.c:Perl_fold_constants(pTHX_ register OP *o)
> op.c:    return fold_constants(o);
> op.c:    return fold_constants((OP *) unop);
> op.c:    return fold_constants((OP *)binop);
> op.c:    o = fold_constants(o);
> op.c:       return fold_constants(o);
> proto.h:PERL_CALLCONV OP*       Perl_fold_constants(pTHX_ OP* arg);



> [EMAIL PROTECTED] B-Generate-1.06-mod]$ make
> /usr/local/bin/perl5.8.1 ./Build
> lib/B/Generate.pm -> blib/lib/B/Generate.pm
> cc -c -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-
strict-aliasing -
> \ I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 
> -I/usr/include/
gdbm -g -O2
> \ -I/usr/local/lib/perl5/5.8.1/i686-linux-thread-multi/CORE -o 
> lib/B/Generate.o
> \ lib/B/Generate.c
> lib/B/Generate.bs -> blib/arch/auto/B/Generate/Generate.bs
> cc -shared -L/usr/local/lib -o blib/arch/auto/B/Generate/Generate.so 
> lib/B/Generate.o
> [EMAIL PROTECTED] B-Generate-1.06-mod]$ make test
> /usr/local/bin/perl5.8.1 ./Build test
> test....Can't load 'blib/arch/auto/B/Generate/Generate.so' for module
> \ B::Generate: blib/arch/auto/B/Generate/Generate.so: undefined symbol: 
> fold_constants 
at
> \ /usr/local/lib/perl5/5.8.1/i686-linux-thread-multi/DynaLoader.pm line 229.
 at test.pl line 4

The issue here is that C<fold_constants> is not part of the public API and is 
supposed to 
only be available only in the Perl core.  A more complete look at embed.h shows

    #ifdef PERL_CORE
    #define find_script             Perl_find_script
    #define force_list              Perl_force_list
    #define fold_constants          Perl_fold_constants
    #endif

So, given this, I'd say this is a bug in B::Generate, rather than the Perl 
core.  



Reply via email to