| 
									
										
										
										
											2006-06-26 13:59:44 +02:00
										 |  |  | /* Exports for assembly files.
 | 
					
						
							|  |  |  |    All C exports should go in the respective C files. */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <linux/module.h>
 | 
					
						
							|  |  |  | #include <linux/smp.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-14 08:10:31 +02:00
										 |  |  | #include <net/checksum.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #include <asm/processor.h>
 | 
					
						
							|  |  |  | #include <asm/pgtable.h>
 | 
					
						
							| 
									
										
										
										
											2008-05-14 08:10:31 +02:00
										 |  |  | #include <asm/uaccess.h>
 | 
					
						
							| 
									
										
										
										
											2008-01-30 13:31:10 +01:00
										 |  |  | #include <asm/desc.h>
 | 
					
						
							| 
									
										
										
										
											2008-06-21 23:47:27 +05:30
										 |  |  | #include <asm/ftrace.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-06 19:06:12 -04:00
										 |  |  | #ifdef CONFIG_FUNCTION_TRACER
 | 
					
						
							| 
									
										
											  
											
												ftrace/x86: Add support for -mfentry to x86_64
If the kernel is compiled with gcc 4.6.0 which supports -mfentry,
then use that instead of mcount.
With mcount, frame pointers are forced with the -pg option and we
get something like:
<can_vma_merge_before>:
       55                      push   %rbp
       48 89 e5                mov    %rsp,%rbp
       53                      push   %rbx
       41 51                   push   %r9
       e8 fe 6a 39 00          callq  ffffffff81483d00 <mcount>
       31 c0                   xor    %eax,%eax
       48 89 fb                mov    %rdi,%rbx
       48 89 d7                mov    %rdx,%rdi
       48 33 73 30             xor    0x30(%rbx),%rsi
       48 f7 c6 ff ff ff f7    test   $0xfffffffff7ffffff,%rsi
With -mfentry, frame pointers are no longer forced and the call looks
like this:
<can_vma_merge_before>:
       e8 33 af 37 00          callq  ffffffff81461b40 <__fentry__>
       53                      push   %rbx
       48 89 fb                mov    %rdi,%rbx
       31 c0                   xor    %eax,%eax
       48 89 d7                mov    %rdx,%rdi
       41 51                   push   %r9
       48 33 73 30             xor    0x30(%rbx),%rsi
       48 f7 c6 ff ff ff f7    test   $0xfffffffff7ffffff,%rsi
This adds the ftrace hook at the beginning of the function before a
frame is set up, and allows the function callbacks to be able to access
parameters. As kprobes now can use function tracing (at least on x86)
this speeds up the kprobe hooks that are at the beginning of the
function.
Link: http://lkml.kernel.org/r/20120807194100.130477900@goodmis.org
Acked-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
											
										 
											2011-02-09 13:32:18 -05:00
										 |  |  | /* mcount and __fentry__ are defined in assembly */ | 
					
						
							|  |  |  | #ifdef CC_USING_FENTRY
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(__fentry__); | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2008-05-14 08:10:31 +02:00
										 |  |  | EXPORT_SYMBOL(mcount); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
											  
											
												ftrace/x86: Add support for -mfentry to x86_64
If the kernel is compiled with gcc 4.6.0 which supports -mfentry,
then use that instead of mcount.
With mcount, frame pointers are forced with the -pg option and we
get something like:
<can_vma_merge_before>:
       55                      push   %rbp
       48 89 e5                mov    %rsp,%rbp
       53                      push   %rbx
       41 51                   push   %r9
       e8 fe 6a 39 00          callq  ffffffff81483d00 <mcount>
       31 c0                   xor    %eax,%eax
       48 89 fb                mov    %rdi,%rbx
       48 89 d7                mov    %rdx,%rdi
       48 33 73 30             xor    0x30(%rbx),%rsi
       48 f7 c6 ff ff ff f7    test   $0xfffffffff7ffffff,%rsi
With -mfentry, frame pointers are no longer forced and the call looks
like this:
<can_vma_merge_before>:
       e8 33 af 37 00          callq  ffffffff81461b40 <__fentry__>
       53                      push   %rbx
       48 89 fb                mov    %rdi,%rbx
       31 c0                   xor    %eax,%eax
       48 89 d7                mov    %rdx,%rdi
       41 51                   push   %r9
       48 33 73 30             xor    0x30(%rbx),%rsi
       48 f7 c6 ff ff ff f7    test   $0xfffffffff7ffffff,%rsi
This adds the ftrace hook at the beginning of the function before a
frame is set up, and allows the function callbacks to be able to access
parameters. As kprobes now can use function tracing (at least on x86)
this speeds up the kprobe hooks that are at the beginning of the
function.
Link: http://lkml.kernel.org/r/20120807194100.130477900@goodmis.org
Acked-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
											
										 
											2011-02-09 13:32:18 -05:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(__get_user_1); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__get_user_2); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__get_user_4); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__get_user_8); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__put_user_1); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__put_user_2); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__put_user_4); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__put_user_8); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-18 16:12:56 +00:00
										 |  |  | EXPORT_SYMBOL(copy_user_generic_string); | 
					
						
							|  |  |  | EXPORT_SYMBOL(copy_user_generic_unrolled); | 
					
						
							| 
									
										
										
										
											2012-05-24 18:19:45 -07:00
										 |  |  | EXPORT_SYMBOL(copy_user_enhanced_fast_string); | 
					
						
							| 
									
										
										
										
											2007-02-13 13:26:19 +01:00
										 |  |  | EXPORT_SYMBOL(__copy_user_nocache); | 
					
						
							| 
									
										
										
										
											2009-09-26 14:33:01 +02:00
										 |  |  | EXPORT_SYMBOL(_copy_from_user); | 
					
						
							| 
									
										
										
										
											2009-11-16 15:42:18 +01:00
										 |  |  | EXPORT_SYMBOL(_copy_to_user); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(copy_page); | 
					
						
							|  |  |  | EXPORT_SYMBOL(clear_page); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-13 10:36:22 +02:00
										 |  |  | EXPORT_SYMBOL(csum_partial); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-19 23:34:02 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Export string functions. We normally rely on gcc builtin for most of these, | 
					
						
							|  |  |  |  * but gcc sometimes decides not to inline them. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | #undef memcpy
 | 
					
						
							|  |  |  | #undef memset
 | 
					
						
							|  |  |  | #undef memmove
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-19 23:34:02 +01:00
										 |  |  | extern void *memset(void *, int, __kernel_size_t); | 
					
						
							|  |  |  | extern void *memcpy(void *, const void *, __kernel_size_t); | 
					
						
							|  |  |  | extern void *__memcpy(void *, const void *, __kernel_size_t); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(memset); | 
					
						
							|  |  |  | EXPORT_SYMBOL(memcpy); | 
					
						
							|  |  |  | EXPORT_SYMBOL(__memcpy); | 
					
						
							| 
									
										
										
										
											2011-01-17 17:39:15 -08:00
										 |  |  | EXPORT_SYMBOL(memmove); | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-11-16 13:53:51 -08:00
										 |  |  | #ifndef CONFIG_DEBUG_VIRTUAL
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(phys_base); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | EXPORT_SYMBOL(empty_zero_page); | 
					
						
							| 
									
										
										
										
											2009-12-15 16:28:13 -06:00
										 |  |  | #ifndef CONFIG_PARAVIRT
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(native_load_gs_index); | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2013-08-14 14:51:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_PREEMPT
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(___preempt_schedule); | 
					
						
							|  |  |  | #ifdef CONFIG_CONTEXT_TRACKING
 | 
					
						
							|  |  |  | EXPORT_SYMBOL(___preempt_schedule_context); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif
 |