xref: /linux/arch/x86/include/asm/frame.h (revision bd628c1bed7902ec1f24ba0fe70758949146abbe)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_FRAME_H
3 #define _ASM_X86_FRAME_H
4 
5 #include <asm/asm.h>
6 
7 /*
8  * These are stack frame creation macros.  They should be used by every
9  * callable non-leaf asm function to make kernel stack traces more reliable.
10  */
11 
12 #ifdef CONFIG_FRAME_POINTER
13 
14 #ifdef __ASSEMBLY__
15 
16 .macro FRAME_BEGIN
17 	push %_ASM_BP
18 	_ASM_MOV %_ASM_SP, %_ASM_BP
19 .endm
20 
21 .macro FRAME_END
22 	pop %_ASM_BP
23 .endm
24 
25 #else /* !__ASSEMBLY__ */
26 
27 #define FRAME_BEGIN				\
28 	"push %" _ASM_BP "\n"			\
29 	_ASM_MOV "%" _ASM_SP ", %" _ASM_BP "\n"
30 
31 #define FRAME_END "pop %" _ASM_BP "\n"
32 
33 #endif /* __ASSEMBLY__ */
34 
35 #define FRAME_OFFSET __ASM_SEL(4, 8)
36 
37 #else /* !CONFIG_FRAME_POINTER */
38 
39 #define FRAME_BEGIN
40 #define FRAME_END
41 #define FRAME_OFFSET 0
42 
43 #endif /* CONFIG_FRAME_POINTER */
44 
45 #endif /* _ASM_X86_FRAME_H */
46