Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+28 −1
Original line number Original line Diff line number Diff line
#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 {
/*
/*
 * 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);


+7 −50
Original line number Original line Diff line number Diff line
@@ -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)
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:
	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:


	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)
	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)


	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)