diff options
Diffstat (limited to 'samples/ftrace')
| -rw-r--r-- | samples/ftrace/Makefile | 2 | ||||
| -rw-r--r-- | samples/ftrace/ftrace-direct-multi.c | 30 | 
2 files changed, 31 insertions, 1 deletions
| diff --git a/samples/ftrace/Makefile b/samples/ftrace/Makefile index e8a3f8520a44..b9198e2eef28 100644 --- a/samples/ftrace/Makefile +++ b/samples/ftrace/Makefile @@ -3,7 +3,7 @@  obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct.o  obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-too.o  obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-modify.o -obj-$(CONFIG_SAMPLE_FTRACE_MULTI_DIRECT) += ftrace-direct-multi.o +obj-$(CONFIG_SAMPLE_FTRACE_DIRECT_MULTI) += ftrace-direct-multi.o  CFLAGS_sample-trace-array.o := -I$(src)  obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += sample-trace-array.o diff --git a/samples/ftrace/ftrace-direct-multi.c b/samples/ftrace/ftrace-direct-multi.c index b6d7806b400e..2fafc9afcbf0 100644 --- a/samples/ftrace/ftrace-direct-multi.c +++ b/samples/ftrace/ftrace-direct-multi.c @@ -4,6 +4,7 @@  #include <linux/mm.h> /* for handle_mm_fault() */  #include <linux/ftrace.h>  #include <linux/sched/stat.h> +#include <asm/asm-offsets.h>  extern void my_direct_func(unsigned long ip); @@ -14,6 +15,8 @@ void my_direct_func(unsigned long ip)  extern void my_tramp(void *); +#ifdef CONFIG_X86_64 +  asm (  "	.pushsection    .text, \"ax\", @progbits\n"  "	.type		my_tramp, @function\n" @@ -31,6 +34,33 @@ asm (  "	.popsection\n"  ); +#endif /* CONFIG_X86_64 */ + +#ifdef CONFIG_S390 + +asm ( +"	.pushsection	.text, \"ax\", @progbits\n" +"	.type		my_tramp, @function\n" +"	.globl		my_tramp\n" +"   my_tramp:" +"	lgr		%r1,%r15\n" +"	stmg		%r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +"	stg		%r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +"	aghi		%r15,"__stringify(-STACK_FRAME_OVERHEAD)"\n" +"	stg		%r1,"__stringify(__SF_BACKCHAIN)"(%r15)\n" +"	lgr		%r2,%r0\n" +"	brasl		%r14,my_direct_func\n" +"	aghi		%r15,"__stringify(STACK_FRAME_OVERHEAD)"\n" +"	lmg		%r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +"	lg		%r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +"	lgr		%r1,%r0\n" +"	br		%r1\n" +"	.size		my_tramp, .-my_tramp\n" +"	.popsection\n" +); + +#endif /* CONFIG_S390 */ +  static struct ftrace_ops direct;  static int __init ftrace_direct_multi_init(void) |