Эх сурвалжийг харах

parisc: Use long jump to reach ftrace_return_to_handler()

Depending on config options we will need to use a long jump to reach
ftrace_return_to_handler().  Additionally only compile the
parisc_return_to_handler code when CONFIG_FUNCTION_GRAPH_TRACER is set.

Signed-off-by: Helge Deller <deller@gmx.de>
Helge Deller 9 жил өмнө
parent
commit
5fece5ad24

+ 10 - 1
arch/parisc/kernel/entry.S

@@ -2019,6 +2019,7 @@ ftrace_stub:
 	.procend
 	.procend
 ENDPROC(mcount)
 ENDPROC(mcount)
 
 
+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
 	.align 8
 	.align 8
 	.globl return_to_handler
 	.globl return_to_handler
 	.type  return_to_handler, @function
 	.type  return_to_handler, @function
@@ -2040,11 +2041,17 @@ parisc_return_to_handler:
 #endif
 #endif
 
 
 	/* call ftrace_return_to_handler(0) */
 	/* call ftrace_return_to_handler(0) */
+	.import ftrace_return_to_handler,code
+	load32 ftrace_return_to_handler,%ret0
+	load32 .Lftrace_ret,%r2
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
 	ldo -16(%sp),%ret1		/* Reference param save area */
 	ldo -16(%sp),%ret1		/* Reference param save area */
+	bve	(%ret0)
+#else
+	bv	%r0(%ret0)
 #endif
 #endif
-	BL ftrace_return_to_handler,%r2
 	ldi 0,%r26
 	ldi 0,%r26
+.Lftrace_ret:
 	copy %ret0,%rp
 	copy %ret0,%rp
 
 
 	/* restore original return values */
 	/* restore original return values */
@@ -2062,6 +2069,8 @@ parisc_return_to_handler:
 	.procend
 	.procend
 ENDPROC(return_to_handler)
 ENDPROC(return_to_handler)
 
 
+#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
+
 #endif	/* CONFIG_FUNCTION_TRACER */
 #endif	/* CONFIG_FUNCTION_TRACER */
 
 
 #ifdef CONFIG_IRQSTACKS
 #ifdef CONFIG_IRQSTACKS