summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Leadbeater <dgl@dgl.cx>2010-12-10 14:56:41 -0800
committerFather Chrysostomos <sprout@cpan.org>2010-12-10 16:09:32 -0800
commit3e2413e5f999573e5bcccfb506d8a449a3ab690b (patch)
treeff9d93d510b476e50ed1a3030f545f44362c6d74
parent6d1f0892ce0bd77f843552ab189aa5f121c374d4 (diff)
downloadperl-3e2413e5f999573e5bcccfb506d8a449a3ab690b.tar.gz
[perl #80548] Add the stash name to DTrace probes
This adds an additional parameter to perl's dtrace probes with the stash name of the subroutine. This generally looks nicer than the filename but gives a similar level of context. As this is an additional parameter this will not have an impact on existing DTrace scripts. (Also due to the way DTrace works I believe it does not break binary compatibility and would be safe to backport to maint-5.12 if desired, but I'm not a DTrace expert.)
-rw-r--r--cop.h6
-rw-r--r--mydtrace.h16
-rw-r--r--perldtrace.d4
3 files changed, 14 insertions, 12 deletions
diff --git a/cop.h b/cop.h
index 0a6169bc49..939d1ffca3 100644
--- a/cop.h
+++ b/cop.h
@@ -617,7 +617,8 @@ struct block_format {
#define PUSHSUB_BASE(cx) \
ENTRY_PROBE(GvENAME(CvGV(cv)), \
CopFILE((const COP *)CvSTART(cv)), \
- CopLINE((const COP *)CvSTART(cv))); \
+ CopLINE((const COP *)CvSTART(cv)), \
+ CopSTASHPV((const COP *)CvSTART(cv))); \
\
cx->blk_sub.cv = cv; \
cx->blk_sub.olddepth = CvDEPTH(cv); \
@@ -667,7 +668,8 @@ struct block_format {
STMT_START { \
RETURN_PROBE(GvENAME(CvGV((const CV*)cx->blk_sub.cv)), \
CopFILE((COP*)CvSTART((const CV*)cx->blk_sub.cv)), \
- CopLINE((COP*)CvSTART((const CV*)cx->blk_sub.cv))); \
+ CopLINE((COP*)CvSTART((const CV*)cx->blk_sub.cv)), \
+ CopSTASHPV((COP*)CvSTART((const CV*)cx->blk_sub.cv))); \
\
if (CxHASARGS(cx)) { \
POP_SAVEARRAY(); \
diff --git a/mydtrace.h b/mydtrace.h
index daabcfa0b9..75e6918015 100644
--- a/mydtrace.h
+++ b/mydtrace.h
@@ -13,21 +13,21 @@
# include "perldtrace.h"
-# define ENTRY_PROBE(func, file, line) \
- if (PERL_SUB_ENTRY_ENABLED()) { \
- PERL_SUB_ENTRY(func, file, line); \
+# define ENTRY_PROBE(func, file, line, stash) \
+ if (PERL_SUB_ENTRY_ENABLED()) { \
+ PERL_SUB_ENTRY(func, file, line, stash); \
}
-# define RETURN_PROBE(func, file, line) \
- if (PERL_SUB_RETURN_ENABLED()) { \
- PERL_SUB_RETURN(func, file, line); \
+# define RETURN_PROBE(func, file, line, stash) \
+ if (PERL_SUB_RETURN_ENABLED()) { \
+ PERL_SUB_RETURN(func, file, line, stash); \
}
#else
/* NOPs */
-# define ENTRY_PROBE(func, file, line)
-# define RETURN_PROBE(func, file, line)
+# define ENTRY_PROBE(func, file, line, stash)
+# define RETURN_PROBE(func, file, line, stash)
#endif
diff --git a/perldtrace.d b/perldtrace.d
index c5844eac88..5175f249b1 100644
--- a/perldtrace.d
+++ b/perldtrace.d
@@ -4,8 +4,8 @@
*/
provider perl {
- probe sub__entry(char *, char *, int);
- probe sub__return(char *, char *, int);
+ probe sub__entry(char *, char *, int, char *);
+ probe sub__return(char *, char *, int, char *);
};
/*