← Index
Performance Profile   « block view • line view • sub view »
For t/test-parsing
  Run on Sun Nov 14 09:49:57 2010
Reported on Sun Nov 14 09:50:06 2010

File /usr/lib/perl/5.10/XSLoader.pm
Statements Executed 1
Total Time 1.98e-05 seconds
Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111114.61ms4.61msXSLoader::::loadXSLoader::load
0000s0sXSLoader::::bootstrap_inheritXSLoader::bootstrap_inherit
LineStmts.Exclusive
Time
Avg.Code
1# Generated from XSLoader.pm.PL (resolved %Config::Config value)
2
3package XSLoader;
4
5$VERSION = "0.08";
6
7#use strict;
8
9# enable debug/trace messages from DynaLoader perl code
10# $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
11
12 my $dl_dlext = 'so';
13
14package DynaLoader;
15
16# No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
17# NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
18boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
19 !defined(&dl_error);
20package XSLoader;
21
22sub load {
23 package DynaLoader;
24
25 die q{XSLoader::load('Your::Module', $Your::Module::VERSION)} unless @_;
26
27 my($module) = $_[0];
28
29 # work with static linking too
30 my $b = "$module\::bootstrap";
31 goto &$b if defined &$b;
32
33 goto retry unless $module and defined &dl_load_file;
34
35 my @modparts = split(/::/,$module);
36 my $modfname = $modparts[-1];
37
38 my $modpname = join('/',@modparts);
39 my $modlibname = (caller())[1];
40 my $c = @modparts;
41 $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename
42 my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext";
43
44# print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug;
45
46 my $bs = $file;
47 $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
48
49 goto retry if not -f $file or -s $bs;
50
51 my $bootname = "boot_$module";
52 $bootname =~ s/\W/_/g;
53 @DynaLoader::dl_require_symbols = ($bootname);
54
55 my $boot_symbol_ref;
56
57 # Many dynamic extension loading problems will appear to come from
58 # this section of code: XYZ failed at line 123 of DynaLoader.pm.
59 # Often these errors are actually occurring in the initialisation
60 # C code of the extension XS file. Perl reports the error as being
61 # in this perl code simply because this was the last perl code
62 # it executed.
63
64 my $libref = dl_load_file($file, 0) or do {
65 require Carp;
66 Carp::croak("Can't load '$file' for module $module: " . dl_error());
67 };
68 push(@DynaLoader::dl_librefs,$libref); # record loaded object
69
70 my @unresolved = dl_undef_symbols();
71 if (@unresolved) {
72 require Carp;
73 Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
74 }
75
76 $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
77 require Carp;
78 Carp::croak("Can't find '$bootname' symbol in $file\n");
79 };
80
81 push(@DynaLoader::dl_modules, $module); # record loaded module
82
83 boot:
84 my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
85
86 # See comment block above
87 push(@DynaLoader::dl_shared_objects, $file); # record files loaded
88120µs20µs return &$xs(@_);
89
90 retry:
91 my $bootstrap_inherit = DynaLoader->can('bootstrap_inherit') ||
92 XSLoader->can('bootstrap_inherit');
93 goto &$bootstrap_inherit;
94}
95
96# Versions of DynaLoader prior to 5.6.0 don't have this function.
97sub bootstrap_inherit {
98 package DynaLoader;
99
100 my $module = $_[0];
101 local *DynaLoader::isa = *{"$module\::ISA"};
102 local @DynaLoader::isa = (@DynaLoader::isa, 'DynaLoader');
103 # Cannot goto due to delocalization. Will report errors on a wrong line?
104 require DynaLoader;
105 DynaLoader::bootstrap(@_);
106}
107
1081;
109
110__END__
111