Commit d680fe44 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Ingo Molnar

x86: entry_64 - introduce FTRACE_ frame macro v2

Impact: clean up

Itroduce MCOUNT_SAVE/RESTORE_FRAME which allow us to
save a number of lines on source level.

Also fix a comment in ftrace.h.
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 66896a85
#ifndef _ASM_X86_FTRACE_H #ifndef _ASM_X86_FTRACE_H
#define _ASM_X86_FTRACE_H #define _ASM_X86_FTRACE_H
#ifdef __ASSEMBLY__
.macro MCOUNT_SAVE_FRAME
/* taken from glibc */
subq $0x38, %rsp
movq %rax, (%rsp)
movq %rcx, 8(%rsp)
movq %rdx, 16(%rsp)
movq %rsi, 24(%rsp)
movq %rdi, 32(%rsp)
movq %r8, 40(%rsp)
movq %r9, 48(%rsp)
.endm
.macro MCOUNT_RESTORE_FRAME
movq 48(%rsp), %r9
movq 40(%rsp), %r8
movq 32(%rsp), %rdi
movq 24(%rsp), %rsi
movq 16(%rsp), %rdx
movq 8(%rsp), %rcx
movq (%rsp), %rax
addq $0x38, %rsp
.endm
#endif
#ifdef CONFIG_FUNCTION_TRACER #ifdef CONFIG_FUNCTION_TRACER
#define MCOUNT_ADDR ((long)(mcount)) #define MCOUNT_ADDR ((long)(mcount))
#define MCOUNT_INSN_SIZE 5 /* sizeof mcount call */ #define MCOUNT_INSN_SIZE 5 /* sizeof mcount call */
...@@ -46,7 +73,7 @@ struct ftrace_ret_stack { ...@@ -46,7 +73,7 @@ struct ftrace_ret_stack {
/* /*
* Primary handler of a function return. * Primary handler of a function return.
* It relays on ftrace_return_to_handler. * It relays on ftrace_return_to_handler.
* Defined in entry32.S * Defined in entry_32/64.S
*/ */
extern void return_to_handler(void); extern void return_to_handler(void);
......
...@@ -71,15 +71,7 @@ ENTRY(ftrace_caller) ...@@ -71,15 +71,7 @@ ENTRY(ftrace_caller)
cmpl $0, function_trace_stop cmpl $0, function_trace_stop
jne ftrace_stub jne ftrace_stub
/* taken from glibc */ MCOUNT_SAVE_FRAME
subq $0x38, %rsp
movq %rax, (%rsp)
movq %rcx, 8(%rsp)
movq %rdx, 16(%rsp)
movq %rsi, 24(%rsp)
movq %rdi, 32(%rsp)
movq %r8, 40(%rsp)
movq %r9, 48(%rsp)
movq 0x38(%rsp), %rdi movq 0x38(%rsp), %rdi
movq 8(%rbp), %rsi movq 8(%rbp), %rsi
...@@ -89,14 +81,7 @@ ENTRY(ftrace_caller) ...@@ -89,14 +81,7 @@ ENTRY(ftrace_caller)
ftrace_call: ftrace_call:
call ftrace_stub call ftrace_stub
movq 48(%rsp), %r9 MCOUNT_RESTORE_FRAME
movq 40(%rsp), %r8
movq 32(%rsp), %rdi
movq 24(%rsp), %rsi
movq 16(%rsp), %rdx
movq 8(%rsp), %rcx
movq (%rsp), %rax
addq $0x38, %rsp
#ifdef CONFIG_FUNCTION_GRAPH_TRACER #ifdef CONFIG_FUNCTION_GRAPH_TRACER
.globl ftrace_graph_call .globl ftrace_graph_call
...@@ -130,15 +115,7 @@ ftrace_stub: ...@@ -130,15 +115,7 @@ ftrace_stub:
retq retq
trace: trace:
/* taken from glibc */ MCOUNT_SAVE_FRAME
subq $0x38, %rsp
movq %rax, (%rsp)
movq %rcx, 8(%rsp)
movq %rdx, 16(%rsp)
movq %rsi, 24(%rsp)
movq %rdi, 32(%rsp)
movq %r8, 40(%rsp)
movq %r9, 48(%rsp)
movq 0x38(%rsp), %rdi movq 0x38(%rsp), %rdi
movq 8(%rbp), %rsi movq 8(%rbp), %rsi
...@@ -146,14 +123,7 @@ trace: ...@@ -146,14 +123,7 @@ trace:
call *ftrace_trace_function call *ftrace_trace_function
movq 48(%rsp), %r9 MCOUNT_RESTORE_FRAME
movq 40(%rsp), %r8
movq 32(%rsp), %rdi
movq 24(%rsp), %rsi
movq 16(%rsp), %rdx
movq 8(%rsp), %rcx
movq (%rsp), %rax
addq $0x38, %rsp
jmp ftrace_stub jmp ftrace_stub
END(mcount) END(mcount)
...@@ -165,14 +135,7 @@ ENTRY(ftrace_graph_caller) ...@@ -165,14 +135,7 @@ ENTRY(ftrace_graph_caller)
cmpl $0, function_trace_stop cmpl $0, function_trace_stop
jne ftrace_stub jne ftrace_stub
subq $0x38, %rsp MCOUNT_SAVE_FRAME
movq %rax, (%rsp)
movq %rcx, 8(%rsp)
movq %rdx, 16(%rsp)
movq %rsi, 24(%rsp)
movq %rdi, 32(%rsp)
movq %r8, 40(%rsp)
movq %r9, 48(%rsp)
leaq 8(%rbp), %rdi leaq 8(%rbp), %rdi
movq 0x38(%rsp), %rsi movq 0x38(%rsp), %rsi
...@@ -180,14 +143,8 @@ ENTRY(ftrace_graph_caller) ...@@ -180,14 +143,8 @@ ENTRY(ftrace_graph_caller)
call prepare_ftrace_return call prepare_ftrace_return
movq 48(%rsp), %r9 MCOUNT_RESTORE_FRAME
movq 40(%rsp), %r8
movq 32(%rsp), %rdi
movq 24(%rsp), %rsi
movq 16(%rsp), %rdx
movq 8(%rsp), %rcx
movq (%rsp), %rax
addq $0x38, %rsp
retq retq
END(ftrace_graph_caller) END(ftrace_graph_caller)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment