diff options
Diffstat (limited to 'samples/ftrace/ftrace-direct-modify.c')
| -rw-r--r-- | samples/ftrace/ftrace-direct-modify.c | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/samples/ftrace/ftrace-direct-modify.c b/samples/ftrace/ftrace-direct-modify.c index 5b9a09957c6e..690e4a9ff333 100644 --- a/samples/ftrace/ftrace-direct-modify.c +++ b/samples/ftrace/ftrace-direct-modify.c @@ -2,6 +2,7 @@  #include <linux/module.h>  #include <linux/kthread.h>  #include <linux/ftrace.h> +#include <asm/asm-offsets.h>  void my_direct_func1(void)  { @@ -18,6 +19,8 @@ extern void my_tramp2(void *);  static unsigned long my_ip = (unsigned long)schedule; +#ifdef CONFIG_X86_64 +  asm (  "	.pushsection    .text, \"ax\", @progbits\n"  "	.type		my_tramp1, @function\n" @@ -41,6 +44,47 @@ asm (  "	.popsection\n"  ); +#endif /* CONFIG_X86_64 */ + +#ifdef CONFIG_S390 + +asm ( +"	.pushsection	.text, \"ax\", @progbits\n" +"	.type		my_tramp1, @function\n" +"	.globl		my_tramp1\n" +"   my_tramp1:" +"	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" +"	brasl		%r14,my_direct_func1\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_tramp1, .-my_tramp1\n" +"	.type		my_tramp2, @function\n" +"	.globl		my_tramp2\n" +"   my_tramp2:" +"	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" +"	brasl		%r14,my_direct_func2\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_tramp2, .-my_tramp2\n" +"	.popsection\n" +); + +#endif /* CONFIG_S390 */ +  static unsigned long my_tramp = (unsigned long)my_tramp1;  static unsigned long tramps[2] = {  	(unsigned long)my_tramp1,  | 
