|
@@ -0,0 +1,52 @@
|
|
|
+/*
|
|
|
+ * Tracing hooks
|
|
|
+ *
|
|
|
+ * Copyright (C) 2008 Red Hat, Inc. All rights reserved.
|
|
|
+ *
|
|
|
+ * This copyrighted material is made available to anyone wishing to use,
|
|
|
+ * modify, copy, or redistribute it subject to the terms and conditions
|
|
|
+ * of the GNU General Public License v.2.
|
|
|
+ *
|
|
|
+ * This file defines hook entry points called by core code where
|
|
|
+ * user tracing/debugging support might need to do something. These
|
|
|
+ * entry points are called tracehook_*(). Each hook declared below
|
|
|
+ * has a detailed kerneldoc comment giving the context (locking et
|
|
|
+ * al) from which it is called, and the meaning of its return value.
|
|
|
+ *
|
|
|
+ * Each function here typically has only one call site, so it is ok
|
|
|
+ * to have some nontrivial tracehook_*() inlines. In all cases, the
|
|
|
+ * fast path when no tracing is enabled should be very short.
|
|
|
+ *
|
|
|
+ * The purpose of this file and the tracehook_* layer is to consolidate
|
|
|
+ * the interface that the kernel core and arch code uses to enable any
|
|
|
+ * user debugging or tracing facility (such as ptrace). The interfaces
|
|
|
+ * here are carefully documented so that maintainers of core and arch
|
|
|
+ * code do not need to think about the implementation details of the
|
|
|
+ * tracing facilities. Likewise, maintainers of the tracing code do not
|
|
|
+ * need to understand all the calling core or arch code in detail, just
|
|
|
+ * documented circumstances of each call, such as locking conditions.
|
|
|
+ *
|
|
|
+ * If the calling core code changes so that locking is different, then
|
|
|
+ * it is ok to change the interface documented here. The maintainer of
|
|
|
+ * core code changing should notify the maintainers of the tracing code
|
|
|
+ * that they need to work out the change.
|
|
|
+ *
|
|
|
+ * Some tracehook_*() inlines take arguments that the current tracing
|
|
|
+ * implementations might not necessarily use. These function signatures
|
|
|
+ * are chosen to pass in all the information that is on hand in the
|
|
|
+ * caller and might conceivably be relevant to a tracer, so that the
|
|
|
+ * core code won't have to be updated when tracing adds more features.
|
|
|
+ * If a call site changes so that some of those parameters are no longer
|
|
|
+ * already on hand without extra work, then the tracehook_* interface
|
|
|
+ * can change so there is no make-work burden on the core code. The
|
|
|
+ * maintainer of core code changing should notify the maintainers of the
|
|
|
+ * tracing code that they need to work out the change.
|
|
|
+ */
|
|
|
+
|
|
|
+#ifndef _LINUX_TRACEHOOK_H
|
|
|
+#define _LINUX_TRACEHOOK_H 1
|
|
|
+
|
|
|
+#include <linux/sched.h>
|
|
|
+#include <linux/ptrace.h>
|
|
|
+
|
|
|
+#endif /* <linux/tracehook.h> */
|