linux/arch/x86/include/asm/dwarf2.h
<<
>>
Prefs
   1#ifndef _ASM_X86_DWARF2_H
   2#define _ASM_X86_DWARF2_H
   3
   4#ifndef __ASSEMBLY__
   5#warning "asm/dwarf2.h should be only included in pure assembly files"
   6#endif
   7
   8/*
   9 * Macros for dwarf2 CFI unwind table entries.
  10 * See "as.info" for details on these pseudo ops. Unfortunately
  11 * they are only supported in very new binutils, so define them
  12 * away for older version.
  13 */
  14
  15#ifdef CONFIG_AS_CFI
  16
  17#define CFI_STARTPROC           .cfi_startproc
  18#define CFI_ENDPROC             .cfi_endproc
  19#define CFI_DEF_CFA             .cfi_def_cfa
  20#define CFI_DEF_CFA_REGISTER    .cfi_def_cfa_register
  21#define CFI_DEF_CFA_OFFSET      .cfi_def_cfa_offset
  22#define CFI_ADJUST_CFA_OFFSET   .cfi_adjust_cfa_offset
  23#define CFI_OFFSET              .cfi_offset
  24#define CFI_REL_OFFSET          .cfi_rel_offset
  25#define CFI_REGISTER            .cfi_register
  26#define CFI_RESTORE             .cfi_restore
  27#define CFI_REMEMBER_STATE      .cfi_remember_state
  28#define CFI_RESTORE_STATE       .cfi_restore_state
  29#define CFI_UNDEFINED           .cfi_undefined
  30
  31#ifdef CONFIG_AS_CFI_SIGNAL_FRAME
  32#define CFI_SIGNAL_FRAME        .cfi_signal_frame
  33#else
  34#define CFI_SIGNAL_FRAME
  35#endif
  36
  37#else
  38
  39/*
  40 * Due to the structure of pre-exisiting code, don't use assembler line
  41 * comment character # to ignore the arguments. Instead, use a dummy macro.
  42 */
  43.macro cfi_ignore a=0, b=0, c=0, d=0
  44.endm
  45
  46#define CFI_STARTPROC           cfi_ignore
  47#define CFI_ENDPROC             cfi_ignore
  48#define CFI_DEF_CFA             cfi_ignore
  49#define CFI_DEF_CFA_REGISTER    cfi_ignore
  50#define CFI_DEF_CFA_OFFSET      cfi_ignore
  51#define CFI_ADJUST_CFA_OFFSET   cfi_ignore
  52#define CFI_OFFSET              cfi_ignore
  53#define CFI_REL_OFFSET          cfi_ignore
  54#define CFI_REGISTER            cfi_ignore
  55#define CFI_RESTORE             cfi_ignore
  56#define CFI_REMEMBER_STATE      cfi_ignore
  57#define CFI_RESTORE_STATE       cfi_ignore
  58#define CFI_UNDEFINED           cfi_ignore
  59#define CFI_SIGNAL_FRAME        cfi_ignore
  60
  61#endif
  62
  63/*
  64 * An attempt to make CFI annotations more or less
  65 * correct and shorter. It is implied that you know
  66 * what you're doing if you use them.
  67 */
  68#ifdef __ASSEMBLY__
  69#ifdef CONFIG_X86_64
  70        .macro pushq_cfi reg
  71        pushq \reg
  72        CFI_ADJUST_CFA_OFFSET 8
  73        .endm
  74
  75        .macro popq_cfi reg
  76        popq \reg
  77        CFI_ADJUST_CFA_OFFSET -8
  78        .endm
  79
  80        .macro movq_cfi reg offset=0
  81        movq %\reg, \offset(%rsp)
  82        CFI_REL_OFFSET \reg, \offset
  83        .endm
  84
  85        .macro movq_cfi_restore offset reg
  86        movq \offset(%rsp), %\reg
  87        CFI_RESTORE \reg
  88        .endm
  89#else /*!CONFIG_X86_64*/
  90        .macro pushl_cfi reg
  91        pushl \reg
  92        CFI_ADJUST_CFA_OFFSET 4
  93        .endm
  94
  95        .macro popl_cfi reg
  96        popl \reg
  97        CFI_ADJUST_CFA_OFFSET -4
  98        .endm
  99
 100        .macro movl_cfi reg offset=0
 101        movl %\reg, \offset(%esp)
 102        CFI_REL_OFFSET \reg, \offset
 103        .endm
 104
 105        .macro movl_cfi_restore offset reg
 106        movl \offset(%esp), %\reg
 107        CFI_RESTORE \reg
 108        .endm
 109#endif /*!CONFIG_X86_64*/
 110#endif /*__ASSEMBLY__*/
 111
 112#endif /* _ASM_X86_DWARF2_H */
 113