1 | /* Generic asm macros used on many machines.
|
---|
2 | Copyright (C) 1991,92,93,96,98,2002,2003 Free Software Foundation, Inc.
|
---|
3 | This file is part of the GNU C Library.
|
---|
4 |
|
---|
5 | The GNU C Library is free software; you can redistribute it and/or
|
---|
6 | modify it under the terms of the GNU Lesser General Public
|
---|
7 | License as published by the Free Software Foundation; either
|
---|
8 | version 2.1 of the License, or (at your option) any later version.
|
---|
9 |
|
---|
10 | The GNU C Library is distributed in the hope that it will be useful,
|
---|
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
13 | Lesser General Public License for more details.
|
---|
14 |
|
---|
15 | You should have received a copy of the GNU Lesser General Public
|
---|
16 | License along with the GNU C Library; if not, write to the Free
|
---|
17 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
---|
18 | 02111-1307 USA. */
|
---|
19 |
|
---|
20 | #ifndef C_LABEL
|
---|
21 |
|
---|
22 | /* Define a macro we can use to construct the asm name for a C symbol. */
|
---|
23 | #ifdef NO_UNDERSCORES
|
---|
24 | #ifdef __STDC__
|
---|
25 | #define C_LABEL(name) name##:
|
---|
26 | #else
|
---|
27 | #define C_LABEL(name) name/**/:
|
---|
28 | #endif
|
---|
29 | #else
|
---|
30 | #ifdef __STDC__
|
---|
31 | #define C_LABEL(name) _##name##:
|
---|
32 | #else
|
---|
33 | #define C_LABEL(name) _/**/name/**/:
|
---|
34 | #endif
|
---|
35 | #endif
|
---|
36 |
|
---|
37 | #endif
|
---|
38 |
|
---|
39 | #ifdef __ASSEMBLER__
|
---|
40 | /* Mark the end of function named SYM. This is used on some platforms
|
---|
41 | to generate correct debugging information. */
|
---|
42 | #ifndef END
|
---|
43 | #define END(sym)
|
---|
44 | #endif
|
---|
45 |
|
---|
46 | #ifndef JUMPTARGET
|
---|
47 | #define JUMPTARGET(sym) sym
|
---|
48 | #endif
|
---|
49 |
|
---|
50 | /* Makros to generate eh_frame unwind information. */
|
---|
51 | # ifdef HAVE_ASM_CFI_DIRECTIVES
|
---|
52 | # define cfi_startproc .cfi_startproc
|
---|
53 | # define cfi_endproc .cfi_endproc
|
---|
54 | # define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off
|
---|
55 | # define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg
|
---|
56 | # define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
|
---|
57 | # define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
|
---|
58 | # define cfi_offset(reg, off) .cfi_offset reg, off
|
---|
59 | # define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off
|
---|
60 | # define cfi_register(r1, r2) .cfi_register r1, r2
|
---|
61 | # define cfi_return_column(reg) .cfi_return_column reg
|
---|
62 | # define cfi_restore(reg) .cfi_restore reg
|
---|
63 | # define cfi_undefined(reg) .cfi_undefined reg
|
---|
64 | # define cfi_remember_state .cfi_remember_state
|
---|
65 | # define cfi_restore_state .cfi_restore_state
|
---|
66 | # define cfi_window_save .cfi_window_save
|
---|
67 | # else
|
---|
68 | # define cfi_startproc
|
---|
69 | # define cfi_endproc
|
---|
70 | # define cfi_def_cfa(reg, off)
|
---|
71 | # define cfi_def_cfa_register(reg)
|
---|
72 | # define cfi_def_cfa_offset(off)
|
---|
73 | # define cfi_adjust_cfa_offset(off)
|
---|
74 | # define cfi_offset(reg, off)
|
---|
75 | # define cfi_rel_offset(reg, off)
|
---|
76 | # define cfi_register(r1, r2)
|
---|
77 | # define cfi_return_column(reg)
|
---|
78 | # define cfi_restore(reg)
|
---|
79 | # define cfi_undefined(reg)
|
---|
80 | # define cfi_remember_state
|
---|
81 | # define cfi_restore_state
|
---|
82 | # define cfi_window_save
|
---|
83 | # endif
|
---|
84 |
|
---|
85 | #else /* ! ASSEMBLER */
|
---|
86 | # ifdef HAVE_ASM_CFI_DIRECTIVES
|
---|
87 | # define CFI_STRINGIFY(Name) CFI_STRINGIFY2 (Name)
|
---|
88 | # define CFI_STRINGIFY2(Name) #Name
|
---|
89 | # define CFI_STARTPROC ".cfi_startproc"
|
---|
90 | # define CFI_ENDPROC ".cfi_endproc"
|
---|
91 | # define CFI_DEF_CFA(reg, off) \
|
---|
92 | ".cfi_def_cfa " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
|
---|
93 | # define CFI_DEF_CFA_REGISTER(reg) \
|
---|
94 | ".cfi_def_cfa_register " CFI_STRINGIFY(reg)
|
---|
95 | # define CFI_DEF_CFA_OFFSET(off) \
|
---|
96 | ".cfi_def_cfa_offset " CFI_STRINGIFY(off)
|
---|
97 | # define CFI_ADJUST_CFA_OFFSET(off) \
|
---|
98 | ".cfi_adjust_cfa_offset " CFI_STRINGIFY(off)
|
---|
99 | # define CFI_OFFSET(reg, off) \
|
---|
100 | ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
|
---|
101 | # define CFI_REL_OFFSET(reg, off) \
|
---|
102 | ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
|
---|
103 | # define CFI_REGISTER(r1, r2) \
|
---|
104 | ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2)
|
---|
105 | # define CFI_RETURN_COLUMN(reg) \
|
---|
106 | ".cfi_return_column " CFI_STRINGIFY(reg)
|
---|
107 | # define CFI_RESTORE(reg) \
|
---|
108 | ".cfi_restore " CFI_STRINGIFY(reg)
|
---|
109 | # define CFI_UNDEFINED(reg) \
|
---|
110 | ".cfi_undefined " CFI_STRINGIFY(reg)
|
---|
111 | # define CFI_REMEMBER_STATE \
|
---|
112 | ".cfi_remember_state"
|
---|
113 | # define CFI_RESTORE_STATE \
|
---|
114 | ".cfi_restore_state"
|
---|
115 | # define CFI_WINDOW_SAVE \
|
---|
116 | ".cfi_window_save"
|
---|
117 | # else
|
---|
118 | # define CFI_STARTPROC
|
---|
119 | # define CFI_ENDPROC
|
---|
120 | # define CFI_DEF_CFA(reg, off)
|
---|
121 | # define CFI_DEF_CFA_REGISTER(reg)
|
---|
122 | # define CFI_DEF_CFA_OFFSET(off)
|
---|
123 | # define CFI_ADJUST_CFA_OFFSET(off)
|
---|
124 | # define CFI_OFFSET(reg, off)
|
---|
125 | # define CFI_REL_OFFSET(reg, off)
|
---|
126 | # define CFI_REGISTER(r1, r2)
|
---|
127 | # define CFI_RETURN_COLUMN(reg)
|
---|
128 | # define CFI_RESTORE(reg)
|
---|
129 | # define CFI_UNDEFINED(reg)
|
---|
130 | # define CFI_REMEMBER_STATE
|
---|
131 | # define CFI_RESTORE_STATE
|
---|
132 | # define CFI_WINDOW_SAVE
|
---|
133 | # endif
|
---|
134 |
|
---|
135 | #endif /* __ASSEMBLER__ */
|
---|