Messages in this thread Patch in this message | | | Date | Fri, 12 Dec 2008 21:41:36 +0300 | From | Cyrill Gorcunov <> | Subject | [RFC] x86: entry_64 - introduce FTRACE_ frame macro |
| |
Impact: clean up
Itroduce FTRACE_SAVE/RESTORE_FRAME which allow us to save a number of lines on source level.
Also fix a comment in ftrace.h.
--- Actually I'm not that sure about bringing new macros there since we already have a lot so feel free to just drop it.
Maybe it would be good to comment args passed to ftrace_call on ABI level :)
Ah, the patch is on top of -tip e3bdf48
arch/x86/include/asm/ftrace.h | 2 - arch/x86/kernel/entry_64.S | 70 +++++++++++++++--------------------------- 2 files changed, 26 insertions(+), 46 deletions(-)
Index: linux-2.6.git/arch/x86/include/asm/ftrace.h =================================================================== --- linux-2.6.git.orig/arch/x86/include/asm/ftrace.h +++ linux-2.6.git/arch/x86/include/asm/ftrace.h @@ -46,7 +46,7 @@ struct ftrace_ret_stack { /* * Primary handler of a function return. * It relays on ftrace_return_to_handler. - * Defined in entry32.S + * Defined in entry_32/64.S */ extern void return_to_handler(void); Index: linux-2.6.git/arch/x86/kernel/entry_64.S =================================================================== --- linux-2.6.git.orig/arch/x86/kernel/entry_64.S +++ linux-2.6.git/arch/x86/kernel/entry_64.S @@ -66,10 +66,7 @@ ENTRY(mcount) retq END(mcount) -ENTRY(ftrace_caller) - cmpl $0, function_trace_stop - jne ftrace_stub - + .macro FTRACE_SAVE_FRAME /* taken from glibc */ subq $0x38, %rsp movq %rax, (%rsp) @@ -79,15 +76,9 @@ ENTRY(ftrace_caller) movq %rdi, 32(%rsp) movq %r8, 40(%rsp) movq %r9, 48(%rsp) + .endm - movq 0x38(%rsp), %rdi - movq 8(%rbp), %rsi - subq $MCOUNT_INSN_SIZE, %rdi - -.globl ftrace_call -ftrace_call: - call ftrace_stub - + .macro FTRACE_RESTORE_FRAME movq 48(%rsp), %r9 movq 40(%rsp), %r8 movq 32(%rsp), %rdi @@ -96,6 +87,23 @@ ftrace_call: movq 8(%rsp), %rcx movq (%rsp), %rax addq $0x38, %rsp + .endm + +ENTRY(ftrace_caller) + cmpl $0, function_trace_stop + jne ftrace_stub + + FTRACE_SAVE_FRAME + + movq 0x38(%rsp), %rdi + movq 8(%rbp), %rsi + subq $MCOUNT_INSN_SIZE, %rdi + +.globl ftrace_call +ftrace_call: + call ftrace_stub + + FTRACE_RESTORE_FRAME #ifdef CONFIG_FUNCTION_GRAPH_TRACER .globl ftrace_graph_call @@ -129,15 +137,7 @@ ftrace_stub: retq trace: - /* 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) + FTRACE_SAVE_FRAME movq 0x38(%rsp), %rdi movq 8(%rbp), %rsi @@ -145,14 +145,7 @@ trace: call *ftrace_trace_function - 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 + FTRACE_RESTORE_FRAME jmp ftrace_stub END(mcount) @@ -164,14 +157,7 @@ ENTRY(ftrace_graph_caller) cmpl $0, function_trace_stop jne ftrace_stub - 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) + FTRACE_SAVE_FRAME leaq 8(%rbp), %rdi movq 0x38(%rsp), %rsi @@ -179,14 +165,8 @@ ENTRY(ftrace_graph_caller) call prepare_ftrace_return - 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 + FTRACE_RESTORE_FRAME + retq END(ftrace_graph_caller)
| |