]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
997963ed JP |
2 | #ifndef _ASM_X86_FRAME_H |
3 | #define _ASM_X86_FRAME_H | |
4 | ||
4625cd63 | 5 | #include <asm/asm.h> |
ecaf45ee | 6 | |
997963ed JP |
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 | */ | |
ec518655 | 11 | |
ecaf45ee | 12 | #ifdef CONFIG_FRAME_POINTER |
997963ed | 13 | |
ec518655 JP |
14 | #ifdef __ASSEMBLY__ |
15 | ||
997963ed JP |
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 | ||
ec518655 JP |
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 | ||
997963ed JP |
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 */ | |
7e02cb94 | 44 | |
997963ed | 45 | #endif /* _ASM_X86_FRAME_H */ |