13ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov/*
23ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov * arch/xtensa/include/asm/ftrace.h
33ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov *
43ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov * This file is subject to the terms and conditions of the GNU General Public
53ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov * License.  See the file "COPYING" in the main directory of this archive
63ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov * for more details.
73ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov *
83ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov * Copyright (C) 2013 Tensilica Inc.
93ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov */
103ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov#ifndef _XTENSA_FTRACE_H
113ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov#define _XTENSA_FTRACE_H
123ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov
133ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov#include <asm/processor.h>
143ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov
15478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#ifndef __ASSEMBLY__
16eed542d6962ba33a689b4007a389f466e407bd74AKASHI Takahiro#define ftrace_return_address0 ({ unsigned long a0, a1; \
173ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov		__asm__ __volatile__ ( \
183ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov			"mov %0, a0\n" \
193ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov			"mov %1, a1\n" \
20ea1d3ed3cfde34914a517f97320b80d9ccee7507Max Filippov			: "=r"(a0), "=r"(a1)); \
213ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov		MAKE_PC_FROM_RA(a0, a1); })
22eed542d6962ba33a689b4007a389f466e407bd74AKASHI Takahiro
233ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov#ifdef CONFIG_FRAME_POINTER
243ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippovextern unsigned long return_address(unsigned level);
25eed542d6962ba33a689b4007a389f466e407bd74AKASHI Takahiro#define ftrace_return_address(n) return_address(n)
26eed542d6962ba33a689b4007a389f466e407bd74AKASHI Takahiro#endif
27478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#endif /* __ASSEMBLY__ */
28478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov
29478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#ifdef CONFIG_FUNCTION_TRACER
30478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov
31478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#define MCOUNT_ADDR ((unsigned long)(_mcount))
32478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#define MCOUNT_INSN_SIZE 3
33478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov
34478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#ifndef __ASSEMBLY__
35478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippovextern void _mcount(void);
36478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#define mcount _mcount
37478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#endif /* __ASSEMBLY__ */
38478ba61afccd3a4d7ca662cadff1d35d183fe67dMax Filippov#endif /* CONFIG_FUNCTION_TRACER */
393ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov
403ae908c99e944a7a5c4f4b2d8c603a6bc57b728bMax Filippov#endif /* _XTENSA_FTRACE_H */
41