|
@@ -616,25 +616,27 @@ static inline void __ftrace_enabled_restore(int enabled)
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
-#ifndef HAVE_ARCH_CALLER_ADDR
|
|
|
|
|
|
+/* All archs should have this, but we define it for consistency */
|
|
|
|
+#ifndef ftrace_return_address0
|
|
|
|
+# define ftrace_return_address0 __builtin_return_address(0)
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+/* Archs may use other ways for ADDR1 and beyond */
|
|
|
|
+#ifndef ftrace_return_address
|
|
# ifdef CONFIG_FRAME_POINTER
|
|
# ifdef CONFIG_FRAME_POINTER
|
|
-# define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
|
|
|
|
-# define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1))
|
|
|
|
-# define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2))
|
|
|
|
-# define CALLER_ADDR3 ((unsigned long)__builtin_return_address(3))
|
|
|
|
-# define CALLER_ADDR4 ((unsigned long)__builtin_return_address(4))
|
|
|
|
-# define CALLER_ADDR5 ((unsigned long)__builtin_return_address(5))
|
|
|
|
-# define CALLER_ADDR6 ((unsigned long)__builtin_return_address(6))
|
|
|
|
|
|
+# define ftrace_return_address(n) __builtin_return_address(n)
|
|
# else
|
|
# else
|
|
-# define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
|
|
|
|
-# define CALLER_ADDR1 0UL
|
|
|
|
-# define CALLER_ADDR2 0UL
|
|
|
|
-# define CALLER_ADDR3 0UL
|
|
|
|
-# define CALLER_ADDR4 0UL
|
|
|
|
-# define CALLER_ADDR5 0UL
|
|
|
|
-# define CALLER_ADDR6 0UL
|
|
|
|
|
|
+# define ftrace_return_address(n) 0UL
|
|
# endif
|
|
# endif
|
|
-#endif /* ifndef HAVE_ARCH_CALLER_ADDR */
|
|
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#define CALLER_ADDR0 ((unsigned long)ftrace_return_address0)
|
|
|
|
+#define CALLER_ADDR1 ((unsigned long)ftrace_return_address(1))
|
|
|
|
+#define CALLER_ADDR2 ((unsigned long)ftrace_return_address(2))
|
|
|
|
+#define CALLER_ADDR3 ((unsigned long)ftrace_return_address(3))
|
|
|
|
+#define CALLER_ADDR4 ((unsigned long)ftrace_return_address(4))
|
|
|
|
+#define CALLER_ADDR5 ((unsigned long)ftrace_return_address(5))
|
|
|
|
+#define CALLER_ADDR6 ((unsigned long)ftrace_return_address(6))
|
|
|
|
|
|
#ifdef CONFIG_IRQSOFF_TRACER
|
|
#ifdef CONFIG_IRQSOFF_TRACER
|
|
extern void time_hardirqs_on(unsigned long a0, unsigned long a1);
|
|
extern void time_hardirqs_on(unsigned long a0, unsigned long a1);
|