x86: move dwarf2 related macro to dwarf2.h
authorCyrill Gorcunov <gorcunov@gmail.com>
Sun, 23 Nov 2008 11:53:43 +0000 (14:53 +0300)
committerIngo Molnar <mingo@elte.hu>
Sun, 23 Nov 2008 12:20:52 +0000 (13:20 +0100)
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 have 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.

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/dwarf2.h
arch/x86/kernel/entry_64.S

index 804b6e6..3afc5e8 100644 (file)
@@ -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 */
index e5ddf57..249eb60 100644 (file)
 #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)