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