x86: move dwarf2 related macro to dwarf2.h
PATCH 1/1 x86: move dwarf2 related macro to dwarf2.h
Impact: cleanup
Move recently introduced dwarf2 macros to dwarf2.h file. It allow us to not duplicate them in assembly files.
Active usage of _cfi macros don't make assembly files more obvious to understand but we already has a lot of macros there which requires to search the definitions of them *anyway*. But at least it make every cfi usage one line shorter.
Also some code alignment is done.
---
arch/x86/include/asm/dwarf2.h | 97 ++++++++++++++++++++++++++++-------------- arch/x86/kernel/entry_64.S | 23 --------- 2 files changed, 66 insertions(+), 54 deletions(-)
arch/x86/include/asm/dwarf2.h +66 -31
@@ -6,56 +6,91 @@#endif /* -Macros for dwarf2 CFI unwind table entries. -See "as.info" for details on these pseudo ops. Unfortunately -they are only supported in very new binutils, so define them -away for older version. +* Macros for dwarf2 CFI unwind table entries. +* See "as.info" for details on these pseudo ops. Unfortunately +* they are only supported in very new binutils, so define them +* away for older version. */ #ifdef CONFIG_AS_CFI -#define CFI_STARTPROC .cfi_startproc -#define CFI_ENDPROC .cfi_endproc -#define CFI_DEF_CFA .cfi_def_cfa -#define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register -#define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset -#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset -#define CFI_OFFSET .cfi_offset -#define CFI_REL_OFFSET .cfi_rel_offset -#define CFI_REGISTER .cfi_register -#define CFI_RESTORE .cfi_restore -#define CFI_REMEMBER_STATE .cfi_remember_state -#define CFI_RESTORE_STATE .cfi_restore_state -#define CFI_UNDEFINED .cfi_undefined +#define CFI_STARTPROC .cfi_startproc +#define CFI_ENDPROC .cfi_endproc +#define CFI_DEF_CFA .cfi_def_cfa +#define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register +#define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset +#define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset +#define CFI_OFFSET .cfi_offset +#define CFI_REL_OFFSET .cfi_rel_offset +#define CFI_REGISTER .cfi_register +#define CFI_RESTORE .cfi_restore +#define CFI_REMEMBER_STATE .cfi_remember_state +#define CFI_RESTORE_STATE .cfi_restore_state +#define CFI_UNDEFINED .cfi_undefined#ifdef CONFIG_AS_CFI_SIGNAL_FRAME -#define CFI_SIGNAL_FRAME .cfi_signal_frame +#define CFI_SIGNAL_FRAME .cfi_signal_frame#else #define CFI_SIGNAL_FRAME #endif #else -/* Due to the structure of pre-exisiting code, don't use assembler line -comment character # to ignore the arguments. Instead, use a dummy macro. */ +/* +* Due to the structure of pre-exisiting code, don't use assembler line +* comment character # to ignore the arguments. Instead, use a dummy macro. +*/ .macro cfi_ignore a=0, b=0, c=0, d=0 .endm -#define CFI_STARTPROC cfi_ignore -#define CFI_ENDPROC cfi_ignore -#define CFI_DEF_CFA cfi_ignore +#define CFI_STARTPROC cfi_ignore +#define CFI_ENDPROC cfi_ignore +#define CFI_DEF_CFA cfi_ignore#define CFI_DEF_CFA_REGISTER cfi_ignore#define CFI_DEF_CFA_OFFSET cfi_ignore#define CFI_ADJUST_CFA_OFFSET cfi_ignore -#define CFI_OFFSET cfi_ignore -#define CFI_REL_OFFSET cfi_ignore -#define CFI_REGISTER cfi_ignore -#define CFI_RESTORE cfi_ignore -#define CFI_REMEMBER_STATE cfi_ignore -#define CFI_RESTORE_STATE cfi_ignore -#define CFI_UNDEFINED cfi_ignore -#define CFI_SIGNAL_FRAME cfi_ignore +#define CFI_OFFSET cfi_ignore +#define CFI_REL_OFFSET cfi_ignore +#define CFI_REGISTER cfi_ignore +#define CFI_RESTORE cfi_ignore +#define CFI_REMEMBER_STATE cfi_ignore +#define CFI_RESTORE_STATE cfi_ignore +#define CFI_UNDEFINED cfi_ignore +#define CFI_SIGNAL_FRAME cfi_ignore#endif +/* +* An attempt to make CFI annotations more or less +* correct and shorter. It is implied that you know +* what you're doing if you use them. +*/ +#ifdef __ASSEMBLY__ +#ifdef CONFIG_X86_64 + .macro pushq_cfi reg + pushq \reg + CFI_ADJUST_CFA_OFFSET 8 + .endm + + .macro popq_cfi reg + popq \reg + CFI_ADJUST_CFA_OFFSET -8 + .endm + + .macro movq_cfi reg offset=0 + movq %\reg, \offset(%rsp) + CFI_REL_OFFSET \reg, \offset + .endm + + .macro movq_cfi_restore offset reg + movq \offset(%rsp), %\reg + CFI_RESTORE \reg + .endm +#else /*!CONFIG_X86_64*/ + +/* 32bit defenitions are missed yet */ + +#endif /*!CONFIG_X86_64*/ +#endif /*__ASSEMBLY__*/ +#endif /* _ASM_X86_DWARF2_H */
arch/x86/kernel/entry_64.S +0 -23
@@ -60,29 +60,6 @@ #define __AUDIT_ARCH_LE 0x40000000 .code64 -/* - * Some macro's to hide the most frequently occuring CFI annotations. - */ - .macro pushq_cfi reg - pushq \reg - CFI_ADJUST_CFA_OFFSET 8 - .endm - - .macro popq_cfi reg - popq \reg - CFI_ADJUST_CFA_OFFSET -8 - .endm - - .macro movq_cfi reg offset=0 - movq %\reg, \offset(%rsp) - CFI_REL_OFFSET \reg, \offset - .endm - - .macro movq_cfi_restore offset reg - movq \offset(%rsp), %\reg - CFI_RESTORE \reg - .endm - #ifdef CONFIG_FUNCTION_TRACER #ifdef CONFIG_DYNAMIC_FTRACE ENTRY(mcount)
Ingo Molnar
AppliedQuoted 11 lines · Cyrill Gorcunov
Impact: cleanup
Move recently introduced dwarf2 macros to
dwarf2.hfile. It allow us to not duplicate them in assembly files.Active usage of
_cfimacros don't make assembly files more obvious to understand but we already has a lot of macros there which requires to search the definitions of them *anyway*. But at least it make every cfi usage one line shorter.
Quoted 8 lines
Also some code alignment is done.
Signed-off-by Cyrill Gorcunov <[email protected]>---
arch/x86/include/asm/dwarf2.h | 97 ++++++++++++++++++++++++++++-------------- arch/x86/kernel/entry_64.S | 23 --------- 2 files changed, 66 insertions(+), 54 deletions(-)
applied to tip/x86/irq, thanks Cyrill!
Ingo