arch/x86/include/asm/dwarf2.h
changeset 2 d1f6d8b6f81c
parent 0 aa628870c1d3
equal deleted inserted replaced
1:0056487c491e 2:d1f6d8b6f81c
     4 #ifndef __ASSEMBLY__
     4 #ifndef __ASSEMBLY__
     5 #warning "asm/dwarf2.h should be only included in pure assembly files"
     5 #warning "asm/dwarf2.h should be only included in pure assembly files"
     6 #endif
     6 #endif
     7 
     7 
     8 /*
     8 /*
     9    Macros for dwarf2 CFI unwind table entries.
     9  * Macros for dwarf2 CFI unwind table entries.
    10    See "as.info" for details on these pseudo ops. Unfortunately
    10  * See "as.info" for details on these pseudo ops. Unfortunately
    11    they are only supported in very new binutils, so define them
    11  * they are only supported in very new binutils, so define them
    12    away for older version.
    12  * away for older version.
    13  */
    13  */
    14 
    14 
    15 #ifdef CONFIG_AS_CFI
    15 #ifdef CONFIG_AS_CFI
    16 
    16 
    17 #define CFI_STARTPROC .cfi_startproc
    17 #define CFI_STARTPROC		.cfi_startproc
    18 #define CFI_ENDPROC .cfi_endproc
    18 #define CFI_ENDPROC		.cfi_endproc
    19 #define CFI_DEF_CFA .cfi_def_cfa
    19 #define CFI_DEF_CFA		.cfi_def_cfa
    20 #define CFI_DEF_CFA_REGISTER .cfi_def_cfa_register
    20 #define CFI_DEF_CFA_REGISTER	.cfi_def_cfa_register
    21 #define CFI_DEF_CFA_OFFSET .cfi_def_cfa_offset
    21 #define CFI_DEF_CFA_OFFSET	.cfi_def_cfa_offset
    22 #define CFI_ADJUST_CFA_OFFSET .cfi_adjust_cfa_offset
    22 #define CFI_ADJUST_CFA_OFFSET	.cfi_adjust_cfa_offset
    23 #define CFI_OFFSET .cfi_offset
    23 #define CFI_OFFSET		.cfi_offset
    24 #define CFI_REL_OFFSET .cfi_rel_offset
    24 #define CFI_REL_OFFSET		.cfi_rel_offset
    25 #define CFI_REGISTER .cfi_register
    25 #define CFI_REGISTER		.cfi_register
    26 #define CFI_RESTORE .cfi_restore
    26 #define CFI_RESTORE		.cfi_restore
    27 #define CFI_REMEMBER_STATE .cfi_remember_state
    27 #define CFI_REMEMBER_STATE	.cfi_remember_state
    28 #define CFI_RESTORE_STATE .cfi_restore_state
    28 #define CFI_RESTORE_STATE	.cfi_restore_state
    29 #define CFI_UNDEFINED .cfi_undefined
    29 #define CFI_UNDEFINED		.cfi_undefined
    30 
    30 
    31 #ifdef CONFIG_AS_CFI_SIGNAL_FRAME
    31 #ifdef CONFIG_AS_CFI_SIGNAL_FRAME
    32 #define CFI_SIGNAL_FRAME .cfi_signal_frame
    32 #define CFI_SIGNAL_FRAME	.cfi_signal_frame
    33 #else
    33 #else
    34 #define CFI_SIGNAL_FRAME
    34 #define CFI_SIGNAL_FRAME
    35 #endif
    35 #endif
    36 
    36 
    37 #else
    37 #else
    38 
    38 
    39 /* Due to the structure of pre-exisiting code, don't use assembler line
    39 /*
    40    comment character # to ignore the arguments. Instead, use a dummy macro. */
    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  */
    41 .macro cfi_ignore a=0, b=0, c=0, d=0
    43 .macro cfi_ignore a=0, b=0, c=0, d=0
    42 .endm
    44 .endm
    43 
    45 
    44 #define CFI_STARTPROC	cfi_ignore
    46 #define CFI_STARTPROC		cfi_ignore
    45 #define CFI_ENDPROC	cfi_ignore
    47 #define CFI_ENDPROC		cfi_ignore
    46 #define CFI_DEF_CFA	cfi_ignore
    48 #define CFI_DEF_CFA		cfi_ignore
    47 #define CFI_DEF_CFA_REGISTER	cfi_ignore
    49 #define CFI_DEF_CFA_REGISTER	cfi_ignore
    48 #define CFI_DEF_CFA_OFFSET	cfi_ignore
    50 #define CFI_DEF_CFA_OFFSET	cfi_ignore
    49 #define CFI_ADJUST_CFA_OFFSET	cfi_ignore
    51 #define CFI_ADJUST_CFA_OFFSET	cfi_ignore
    50 #define CFI_OFFSET	cfi_ignore
    52 #define CFI_OFFSET		cfi_ignore
    51 #define CFI_REL_OFFSET	cfi_ignore
    53 #define CFI_REL_OFFSET		cfi_ignore
    52 #define CFI_REGISTER	cfi_ignore
    54 #define CFI_REGISTER		cfi_ignore
    53 #define CFI_RESTORE	cfi_ignore
    55 #define CFI_RESTORE		cfi_ignore
    54 #define CFI_REMEMBER_STATE cfi_ignore
    56 #define CFI_REMEMBER_STATE	cfi_ignore
    55 #define CFI_RESTORE_STATE cfi_ignore
    57 #define CFI_RESTORE_STATE	cfi_ignore
    56 #define CFI_UNDEFINED cfi_ignore
    58 #define CFI_UNDEFINED		cfi_ignore
    57 #define CFI_SIGNAL_FRAME cfi_ignore
    59 #define CFI_SIGNAL_FRAME	cfi_ignore
    58 
    60 
    59 #endif
    61 #endif
    60 
    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 
       
    91 	/* 32bit defenitions are missed yet */
       
    92 
       
    93 #endif /*!CONFIG_X86_64*/
       
    94 #endif /*__ASSEMBLY__*/
       
    95 
    61 #endif /* _ASM_X86_DWARF2_H */
    96 #endif /* _ASM_X86_DWARF2_H */