forked from luck/tmp_suning_uos_patched
d1b93772be
The Perl scripting support for perf trace allows most of a trace event's data to be accessed directly as handler arguments, but not all of it e.g. the less common fields aren't passed in. To give scripts access to the other fields and/or any other data or metadata in the main perf executable that might be useful, a way to access the C data in perf from Perl is needed; this patch uses the Perl XS facility to do it for the common_xxx event fields not passed to handler functions. Context.pm exports three functions to Perl scripts that access fields for the current event by calling back into perf: common_pc(), common_flags() and common_lock_depth(). Support for common_flags() field values was added to Core.pm and a script used to sanity check these and other basic scripting features, check-perf-trace.pl, was also added. Signed-off-by: Tom Zanussi <tzanussi@gmail.com> Cc: fweisbec@gmail.com Cc: rostedt@goodmis.org Cc: anton@samba.org Cc: hch@infradead.org LKML-Reference: <1259133352-23685-6-git-send-email-tzanussi@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
#ifndef __PERF_TRACE_EVENT_PERL_H
|
|
#define __PERF_TRACE_EVENT_PERL_H
|
|
#ifdef NO_LIBPERL
|
|
typedef int INTERP;
|
|
#define dSP
|
|
#define ENTER
|
|
#define SAVETMPS
|
|
#define PUTBACK
|
|
#define SPAGAIN
|
|
#define FREETMPS
|
|
#define LEAVE
|
|
#define SP
|
|
#define ERRSV
|
|
#define G_SCALAR (0)
|
|
#define G_DISCARD (0)
|
|
#define G_NOARGS (0)
|
|
#define PUSHMARK(a)
|
|
#define SvTRUE(a) (0)
|
|
#define XPUSHs(s)
|
|
#define sv_2mortal(a)
|
|
#define newSVpv(a,b)
|
|
#define newSVuv(a)
|
|
#define newSViv(a)
|
|
#define get_cv(a,b) (0)
|
|
#define call_pv(a,b) (0)
|
|
#define perl_alloc() (0)
|
|
#define perl_construct(a) (0)
|
|
#define perl_parse(a,b,c,d,e) (0)
|
|
#define perl_run(a) (0)
|
|
#define perl_destruct(a) (0)
|
|
#define perl_free(a) (0)
|
|
#define pTHX void
|
|
#define CV void
|
|
#define dXSUB_SYS
|
|
#define pTHX_
|
|
static inline void newXS(const char *a, void *b, const char *c) {}
|
|
#else
|
|
#include <EXTERN.h>
|
|
#include <perl.h>
|
|
typedef PerlInterpreter * INTERP;
|
|
#endif
|
|
|
|
struct scripting_context {
|
|
void *event_data;
|
|
};
|
|
|
|
int get_common_pc(struct scripting_context *context);
|
|
int get_common_flags(struct scripting_context *context);
|
|
int get_common_lock_depth(struct scripting_context *context);
|
|
|
|
#endif /* __PERF_TRACE_EVENT_PERL_H */
|