[lttng-dev] [trap-probe] Add lttng-probe-trap

Francis Deslauriers fdeslaur at gmail.com
Thu Mar 21 22:06:16 EDT 2013


This probe monitors trap entry and trap exit trace event.

Signed-off-by: Francis Deslauriers <fdeslaur at gmail.com>
---
 instrumentation/events/lttng-module/trap.h |   46 +++++++++++++++++++++++++++
 instrumentation/events/mainline/trap.h     |   47 ++++++++++++++++++++++++++++
 probes/Makefile                            |    1 +
 probes/lttng-probe-trap.c                  |   43 +++++++++++++++++++++++++
 4 files changed, 137 insertions(+)
 create mode 100644 instrumentation/events/lttng-module/trap.h
 create mode 100644 instrumentation/events/mainline/trap.h
 create mode 100644 probes/lttng-probe-trap.c

diff --git a/instrumentation/events/lttng-module/trap.h b/instrumentation/events/lttng-module/trap.h
new file mode 100644
index 0000000..124bbba
--- /dev/null
+++ b/instrumentation/events/lttng-module/trap.h
@@ -0,0 +1,46 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM trap
+
+#if !defined(_TRACE_TRAP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_TRAP_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(trap_entry,
+
+	TP_PROTO(struct pt_regs *regs, long trap),
+
+	TP_ARGS(regs, trap),
+
+	TP_STRUCT__entry(
+		__field(	long,		trap	)
+		__field(	unsigned long,	ip	)
+
+	),
+	TP_fast_assign(
+		tp_assign(trap, trap)
+		tp_assign(ip, regs ? instruction_pointer(regs) : 0UL)
+	),
+
+	TP_printk("number=%ld ip=%lu", __entry->trap, __entry->ip)
+)
+
+TRACE_EVENT(trap_exit,
+
+	TP_PROTO(long trap),
+
+	TP_ARGS(trap),
+
+	TP_STRUCT__entry(
+		__field(	long,	trap	)
+	),
+	TP_fast_assign(
+		tp_assign(trap, trap)
+	),
+
+	TP_printk("number=%ld", __entry->trap)
+)
+
+#endif /* _TRACE_TRAP_H */
+/* This part must be outside protection */
+#include "../../../probes/define_trace.h"
diff --git a/instrumentation/events/mainline/trap.h b/instrumentation/events/mainline/trap.h
new file mode 100644
index 0000000..171b9cf
--- /dev/null
+++ b/instrumentation/events/mainline/trap.h
@@ -0,0 +1,47 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM trap
+
+#if !defined(_TRACE_TRAP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_TRAP_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(trap_entry,
+
+	TP_PROTO(struct pt_regs *regs, long trap),
+
+	TP_ARGS(regs, trap),
+
+	TP_STRUCT__entry(
+		__field(	long,		trap	)
+		__field(	unsigned long,	ip	)
+	),
+
+	TP_fast_assign(
+		__entry->trap	= trap;
+		__entry->ip	= regs ? instruction_pointer(regs) : 0UL;
+	),
+
+	TP_printk("number=%ld ip=%lu", __entry->trap, __entry->ip)
+);
+
+TRACE_EVENT(trap_exit,
+
+	TP_PROTO(long trap),
+
+	TP_ARGS(trap),
+
+	TP_STRUCT__entry(
+		__field(	long,	trap	)
+	),
+
+	TP_fast_assign(
+		__entry->trap	= trap;
+	),
+
+	TP_printk("number=%ld", __entry->trap)
+);
+
+#endif /* _TRACE_TRAP_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/probes/Makefile b/probes/Makefile
index 088cd5f..c8d0085 100644
--- a/probes/Makefile
+++ b/probes/Makefile
@@ -15,6 +15,7 @@ obj-m += lttng-probe-timer.o
 obj-m += lttng-probe-kmem.o
 obj-m += lttng-probe-module.o
 obj-m += lttng-probe-power.o
+obj-m += lttng-probe-trap.o
 
 obj-m += lttng-probe-statedump.o
 
diff --git a/probes/lttng-probe-trap.c b/probes/lttng-probe-trap.c
new file mode 100644
index 0000000..17c1526
--- /dev/null
+++ b/probes/lttng-probe-trap.c
@@ -0,0 +1,43 @@
+/*
+ * probes/lttng-probe-trap.c
+ *
+ * LTTng trap probes.
+ *
+ * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
+ * Copyright (C) 2013 Francis Deslauriers <fdeslaur at gmail.com>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; only
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <linux/module.h>
+
+/*
+ * Create the tracepoint static inlines from the kernel to validate that our
+ * trace event macros match the kernel we run on.
+ */
+#include <trace/events/trap.h>
+#include "../wrapper/tracepoint.h"
+/*
+ * Create LTTng tracepoint probes.
+ */
+#define LTTNG_PACKAGE_BUILD
+#define CREATE_TRACE_POINTS
+#define TRACE_INCLUDE_PATH ../instrumentation/events/lttng-module
+
+#include "../instrumentation/events/lttng-module/trap.h"
+
+MODULE_LICENSE("GPL and additional rights");
+MODULE_AUTHOR("Francis Deslauriers <fdeslaur at gmail.com>");
+MODULE_DESCRIPTION("LTTng trap probes");
-- 
1.7.10.4




More information about the lttng-dev mailing list