diff --git a/.gitignore b/.gitignore index 500eb21..f785fe8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,6 @@ perl-5.12.1.tar.gz -perl-5.8.0-libdir64.patch -filter-requires.sh /perl-5.12.2.tar.gz /perl-5.12.3.tar.gz -/perl.stp -/perl-example.stp /perl-5.14.0-RC2.tar.bz2 /perl-5.14.0.tar.bz2 /perl-5.14.0.tar.gz diff --git a/filter-requires.sh b/filter-requires.sh new file mode 100644 index 0000000..72a402a --- /dev/null +++ b/filter-requires.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# The original script name has been passed as the first argument: +"$@" | + awk ' + $0 != "perl(FCGI)" && + $0 != "perl(Your::Module::Here)" && + $0 != "perl(Tk)" && + $0 !~ /^perl\(Tk::/ && + $0 !~ /^perl\(Mac::/ + ' + +# We used to filter also these: +# NDBM perl(v5.6.0) perl(Tie::RangeHash) +# but they don't seem to be present anymore. diff --git a/perl-example.stp b/perl-example.stp new file mode 100644 index 0000000..040f8e3 --- /dev/null +++ b/perl-example.stp @@ -0,0 +1,21 @@ +/* + Example of the perl systemtap tapset shows a nested view of perl subroutine + calls and returns across the whole system. + + To run: + stap perl-example.stp (for all perl processes) + For specific perl process: + stap perl-example.stp -c COMMAND +*/ + +probe perl.sub.call +{ + printf("%s => sub: %s, filename: %s, line: %d, package: %s\n", + thread_indent(1), sub, filename, lineno, package) +} + +probe perl.sub.return +{ + printf("%s <= sub: %s, filename: %s, line: %d, package: %s\n", + thread_indent(-1), sub, filename, lineno, package) +} diff --git a/perl.stp b/perl.stp new file mode 100644 index 0000000..ccc203b --- /dev/null +++ b/perl.stp @@ -0,0 +1,39 @@ +/* + This probe will fire when the perl script enters a subroutine. + */ + +probe perl.sub.call = process("LIBRARY_PATH").mark("sub__entry") +{ + + sub = user_string($arg1) + filename = user_string($arg2) + lineno = $arg3 + package = user_string($arg4) + +} + +/* + This probe will fire when the return from a subroutine has been + hit. + */ + +probe perl.sub.return = process("LIBRARY_PATH").mark("sub__return") +{ + + sub = user_string($arg1) + filename = user_string($arg2) + lineno = $arg3 + package = user_string($arg4) + +} + +/* + This probe will fire when the Perl interperter changes state. + */ + +probe perl.phase.change = process("LIBRARY_PATH").mark("phase__change") +{ + newphase = user_string($arg1) + oldphase = user_string($arg2) + +} diff --git a/sources b/sources index c0557ea..319bbae 100644 --- a/sources +++ b/sources @@ -1,5 +1 @@ -aceea3db13a159cd5f7e5f2e3ad9534f perl-5.8.0-libdir64.patch -ad5d07285d6e4914384b43c9abc2bdba filter-requires.sh -93b780a770906408a34b1c511e333a12 perl.stp -735480c6749c2aa86faa8311fe651142 perl-example.stp 21062666f1c627aeb6dbff3c6952738b perl-5.20.2.tar.bz2