12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #ifndef __ASM_SH_FTRACE_H
- #define __ASM_SH_FTRACE_H
- #ifdef CONFIG_FUNCTION_TRACER
- #define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
- #define FTRACE_SYSCALL_MAX NR_syscalls
- #ifndef __ASSEMBLY__
- extern void mcount(void);
- #define MCOUNT_ADDR ((long)(mcount))
- #ifdef CONFIG_DYNAMIC_FTRACE
- #define CALL_ADDR ((long)(ftrace_call))
- #define STUB_ADDR ((long)(ftrace_stub))
- #define GRAPH_ADDR ((long)(ftrace_graph_call))
- #define CALLER_ADDR ((long)(ftrace_caller))
- #define MCOUNT_INSN_OFFSET ((STUB_ADDR - CALL_ADDR) - 4)
- #define GRAPH_INSN_OFFSET ((CALLER_ADDR - GRAPH_ADDR) - 4)
- struct dyn_arch_ftrace {
- /* No extra data needed on sh */
- };
- #endif /* CONFIG_DYNAMIC_FTRACE */
- static inline unsigned long ftrace_call_adjust(unsigned long addr)
- {
- /* 'addr' is the memory table address. */
- return addr;
- }
- #ifdef CONFIG_DWARF_UNWINDER
- #include <asm/dwarf.h>
- #define HAVE_ARCH_CALLER_ADDR
- static inline unsigned long dwarf_return_address(int depth)
- {
- struct dwarf_frame *frame;
- unsigned long ra;
- int i;
- for (i = 0, frame = NULL, ra = 0; i <= depth; i++) {
- struct dwarf_frame *tmp;
- tmp = dwarf_unwind_stack(ra, frame);
- if (frame)
- dwarf_free_frame(frame);
- frame = tmp;
- if (!frame || !frame->return_addr)
- break;
- ra = frame->return_addr;
- }
- /* Failed to unwind the stack to the specified depth. */
- WARN_ON(i != depth + 1);
- if (frame)
- dwarf_free_frame(frame);
- return ra;
- }
- #define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
- #define CALLER_ADDR1 dwarf_return_address(1)
- #define CALLER_ADDR2 dwarf_return_address(2)
- #define CALLER_ADDR3 dwarf_return_address(3)
- #define CALLER_ADDR4 dwarf_return_address(4)
- #define CALLER_ADDR5 dwarf_return_address(5)
- #define CALLER_ADDR6 dwarf_return_address(6)
- #endif /* CONFIG_DWARF_UNWINDER */
- #endif /* __ASSEMBLY__ */
- #endif /* CONFIG_FUNCTION_TRACER */
- #endif /* __ASM_SH_FTRACE_H */
|