| 
									
										
										
										
											2014-04-30 18:54:33 +09:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * arch/arm64/include/asm/ftrace.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2013 Linaro Limited | 
					
						
							|  |  |  |  * Author: AKASHI Takahiro <takahiro.akashi@linaro.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  * published by the Free Software Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef __ASM_FTRACE_H
 | 
					
						
							|  |  |  | #define __ASM_FTRACE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <asm/insn.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MCOUNT_ADDR		((unsigned long)_mcount)
 | 
					
						
							|  |  |  | #define MCOUNT_INSN_SIZE	AARCH64_INSN_SIZE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __ASSEMBLY__
 | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:36 +01:00
										 |  |  | #include <linux/compat.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-30 18:54:33 +09:00
										 |  |  | extern void _mcount(unsigned long); | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:35 +01:00
										 |  |  | extern void *return_address(unsigned int); | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | struct dyn_arch_ftrace { | 
					
						
							|  |  |  | 	/* No extra data needed for arm64 */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern unsigned long ftrace_graph_call; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline unsigned long ftrace_call_adjust(unsigned long addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * addr is the address of the mcount call instruction. | 
					
						
							|  |  |  | 	 * recordmcount does the necessary offset calculation. | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	return addr; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define ftrace_return_address(n) return_address(n)
 | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:36 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Because AArch32 mode does not share the same syscall table with AArch64, | 
					
						
							|  |  |  |  * tracing compat syscalls may result in reporting bogus syscalls or even | 
					
						
							|  |  |  |  * hang-up, so just do not trace them. | 
					
						
							|  |  |  |  * See kernel/trace/trace_syscalls.c | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * x86 code says: | 
					
						
							|  |  |  |  * If the user realy wants these, then they should use the | 
					
						
							|  |  |  |  * raw syscall tracepoints with filtering. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS
 | 
					
						
							|  |  |  | static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return is_compat_task(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-04-30 10:54:35 +01:00
										 |  |  | #endif /* ifndef __ASSEMBLY__ */
 | 
					
						
							| 
									
										
										
										
											2014-04-30 18:54:33 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __ASM_FTRACE_H */
 |