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