ftrace/x86/extable: Add is_ftrace_trampoline() function
[firefly-linux-kernel-4.4.55.git] / include / linux / ftrace.h
index 662697babd4800f760d61c4ee7b4b8e6bebffb0f..7b2616fa2472d168150972bdc556fa786d11e64b 100644 (file)
@@ -94,6 +94,13 @@ ftrace_func_t ftrace_ops_get_func(struct ftrace_ops *ops);
  * ADDING  - The ops is in the process of being added.
  * REMOVING - The ops is in the process of being removed.
  * MODIFYING - The ops is in the process of changing its filter functions.
+ * ALLOC_TRAMP - A dynamic trampoline was allocated by the core code.
+ *            The arch specific code sets this flag when it allocated a
+ *            trampoline. This lets the arch know that it can update the
+ *            trampoline in case the callback function changes.
+ *            The ftrace_ops trampoline can be set by the ftrace users, and
+ *            in such cases the arch must not modify it. Only the arch ftrace
+ *            core code should set this flag.
  */
 enum {
        FTRACE_OPS_FL_ENABLED                   = 1 << 0,
@@ -108,6 +115,7 @@ enum {
        FTRACE_OPS_FL_ADDING                    = 1 << 9,
        FTRACE_OPS_FL_REMOVING                  = 1 << 10,
        FTRACE_OPS_FL_MODIFYING                 = 1 << 11,
+       FTRACE_OPS_FL_ALLOC_TRAMP               = 1 << 12,
 };
 
 #ifdef CONFIG_DYNAMIC_FTRACE
@@ -142,6 +150,7 @@ struct ftrace_ops {
        struct ftrace_ops_hash          *func_hash;
        struct ftrace_ops_hash          old_hash;
        unsigned long                   trampoline;
+       unsigned long                   trampoline_size;
 #endif
 };
 
@@ -255,7 +264,9 @@ struct ftrace_func_command {
 int ftrace_arch_code_modify_prepare(void);
 int ftrace_arch_code_modify_post_process(void);
 
-void ftrace_bug(int err, unsigned long ip);
+struct dyn_ftrace;
+
+void ftrace_bug(int err, struct dyn_ftrace *rec);
 
 struct seq_file;
 
@@ -287,6 +298,8 @@ extern int ftrace_text_reserved(const void *start, const void *end);
 
 extern int ftrace_nr_registered_ops(void);
 
+bool is_ftrace_trampoline(unsigned long addr);
+
 /*
  * The dyn_ftrace record's flags field is split into two parts.
  * the first part which is '0-FTRACE_REF_MAX' is a counter of
@@ -586,6 +599,11 @@ static inline ssize_t ftrace_notrace_write(struct file *file, const char __user
                             size_t cnt, loff_t *ppos) { return -ENODEV; }
 static inline int
 ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; }
+
+static inline bool is_ftrace_trampoline(unsigned long addr)
+{
+       return false;
+}
 #endif /* CONFIG_DYNAMIC_FTRACE */
 
 /* totally disable ftrace - can not re-enable after this */