[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]

Exported symbols: the perl API



embed.pl generates global.sym, which contains a list of all the
functions that are documented to be in the perl API. There is currently
however no test to check if all those are actually available, and it
turns out that if you build with -Duseshrplib, many are indeed not
available. Example:

$ grep signbit embed.fnc
AMdnoP  |int    |Perl_signbit   |NV f
$ grep signbit global.sym
Perl_signbit
$ nm libperl.so | grep signbit
Exit 1
$

and Perl_signbit is not explicitly skipped in makedef.pl - that is
only used for aix win32 wince os2 MacOS netware - so I expect it to be
in libperl.{so|sl|a|dll}

An (unportable) simple test case:
--8<--- globals.pl
#!/pro/bin/perl

qx{make global.sym};

my $nm;
if (my @lp = glob "libperl.*") {
    $nm = $lp[0];
    }
else {
    $nm = "perl";
    }
my %sym;
open my $nl, "-|", "nm $nm" or die "Cannot execute $nm: $!\n";
while (<$nl>) {
    m/ [DT] (.*)/ and $sym{$1}++;
    }

open my $gs, "<", "global.sym" or die "global.sym: $!\n";
while (<$gs>) {
    m/^\s*#/ and next;
    chomp;
    exists $sym{$_} or print "Symbol $_ not found in $nm\n";
    }
-->8---

showed me a complete list on Linux and AIX:

Linux $ /pro/bin/perl global.pl
Symbol perl_alloc_using not found in libperl.so
Symbol perl_clone not found in libperl.so
Symbol perl_clone_using not found in libperl.so
Symbol Perl_my_chsize not found in libperl.so
Symbol Perl_croak_nocontext not found in libperl.so
Symbol Perl_die_nocontext not found in libperl.so
Symbol Perl_deb_nocontext not found in libperl.so
Symbol Perl_form_nocontext not found in libperl.so
Symbol Perl_load_module_nocontext not found in libperl.so
Symbol Perl_mess_nocontext not found in libperl.so
Symbol Perl_warn_nocontext not found in libperl.so
Symbol Perl_warner_nocontext not found in libperl.so
Symbol Perl_newSVpvf_nocontext not found in libperl.so
Symbol Perl_sv_catpvf_nocontext not found in libperl.so
Symbol Perl_sv_setpvf_nocontext not found in libperl.so
Symbol Perl_sv_catpvf_mg_nocontext not found in libperl.so
Symbol Perl_sv_setpvf_mg_nocontext not found in libperl.so
Symbol Perl_do_aspawn not found in libperl.so
Symbol Perl_do_spawn not found in libperl.so
Symbol Perl_do_spawn_nowait not found in libperl.so
Symbol Perl_dump_fds not found in libperl.so
Symbol Perl_my_bcopy not found in libperl.so
Symbol Perl_my_bzero not found in libperl.so
Symbol Perl_my_memcmp not found in libperl.so
Symbol Perl_my_memset not found in libperl.so
Symbol Perl_my_swap not found in libperl.so
Symbol Perl_my_htonl not found in libperl.so
Symbol Perl_my_ntohl not found in libperl.so
Symbol Perl_newPADOP not found in libperl.so
Symbol Perl_regdupe_internal not found in libperl.so
Symbol Perl_unlnk not found in libperl.so
Symbol Perl_dump_mstats not found in libperl.so
Symbol Perl_get_mstats not found in libperl.so
Symbol Perl_GetVars not found in libperl.so
Symbol Perl_init_global_struct not found in libperl.so
Symbol Perl_free_global_struct not found in libperl.so
Symbol Perl_cx_dup not found in libperl.so
Symbol Perl_si_dup not found in libperl.so
Symbol Perl_ss_dup not found in libperl.so
Symbol Perl_any_dup not found in libperl.so
Symbol Perl_he_dup not found in libperl.so
Symbol Perl_hek_dup not found in libperl.so
Symbol Perl_re_dup_guts not found in libperl.so
Symbol Perl_fp_dup not found in libperl.so
Symbol Perl_dirp_dup not found in libperl.so
Symbol Perl_gp_dup not found in libperl.so
Symbol Perl_mg_dup not found in libperl.so
Symbol Perl_sv_dup not found in libperl.so
Symbol Perl_rvpv_dup not found in libperl.so
Symbol Perl_parser_dup not found in libperl.so
Symbol Perl_sys_intern_dup not found in libperl.so
Symbol Perl_sys_intern_clear not found in libperl.so
Symbol Perl_sys_intern_init not found in libperl.so
Symbol Perl_Slab_Alloc not found in libperl.so
Symbol Perl_Slab_Free not found in libperl.so
Symbol Perl_sv_setsv_cow not found in libperl.so
Symbol Perl_stashpv_hvname_match not found in libperl.so
Symbol Perl_my_sprintf not found in libperl.so
Symbol Perl_my_cxt_init not found in libperl.so
Symbol Perl_my_cxt_index not found in libperl.so
Symbol Perl_signbit not found in libperl.so
Linux $

And on AIX:

$ /pro/bin/perl /tmp/global.pl
Symbol perl_alloc_using not found in libperl.a
Symbol perl_clone_using not found in libperl.a
Symbol Perl_my_chsize not found in libperl.a
Symbol Perl_do_aspawn not found in libperl.a
Symbol Perl_do_spawn not found in libperl.a
Symbol Perl_do_spawn_nowait not found in libperl.a
Symbol Perl_dump_fds not found in libperl.a
Symbol Perl_my_bcopy not found in libperl.a
Symbol Perl_my_bzero not found in libperl.a
Symbol Perl_my_memcmp not found in libperl.a
Symbol Perl_my_memset not found in libperl.a
Symbol Perl_my_swap not found in libperl.a
Symbol Perl_my_htonl not found in libperl.a
Symbol Perl_my_ntohl not found in libperl.a
Symbol Perl_unlnk not found in libperl.a
Symbol Perl_dump_mstats not found in libperl.a
Symbol Perl_get_mstats not found in libperl.a
Symbol Perl_GetVars not found in libperl.a
Symbol Perl_init_global_struct not found in libperl.a
Symbol Perl_free_global_struct not found in libperl.a
Symbol Perl_sys_intern_dup not found in libperl.a
Symbol Perl_sys_intern_clear not found in libperl.a
Symbol Perl_sys_intern_init not found in libperl.a
Symbol Perl_Slab_Alloc not found in libperl.a
Symbol Perl_Slab_Free not found in libperl.a
Symbol Perl_sv_setsv_cow not found in libperl.a
Symbol Perl_my_sprintf not found in libperl.a
Symbol Perl_my_cxt_index not found in libperl.a
Symbol Perl_signbit not found in libperl.a
$

Note that the list on AIX is actually shorter

BTW I'm extremely interested in a way to portably do this on win32

-- 
H.Merijn Brand          Amsterdam Perl Mongers  http://amsterdam.pm.org/
using & porting perl 5.6.2, 5.8.x, 5.10.x, 5.11.x on HP-UX 10.20, 11.00,
11.11, 11.23, and 11.31, SuSE 10.1, 10.2, and 10.3, AIX 5.2, and Cygwin.
http://mirrors.develooper.com/hpux/           http://www.test-smoke.org/
http://qa.perl.org      http://www.goldmark.org/jeff/stupid-disclaimers/


[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]