xcoff.h revision 1.1.1.1.4.2 1 1.1.1.1.4.2 yamt /* Definitions of target machine for GNU compiler,
2 1.1.1.1.4.2 yamt for some generic XCOFF file format
3 1.1.1.1.4.2 yamt Copyright (C) 2001, 2002, 2003, 2004, 2007, 2008
4 1.1.1.1.4.2 yamt Free Software Foundation, Inc.
5 1.1.1.1.4.2 yamt
6 1.1.1.1.4.2 yamt This file is part of GCC.
7 1.1.1.1.4.2 yamt
8 1.1.1.1.4.2 yamt GCC is free software; you can redistribute it and/or modify it
9 1.1.1.1.4.2 yamt under the terms of the GNU General Public License as published
10 1.1.1.1.4.2 yamt by the Free Software Foundation; either version 3, or (at your
11 1.1.1.1.4.2 yamt option) any later version.
12 1.1.1.1.4.2 yamt
13 1.1.1.1.4.2 yamt GCC is distributed in the hope that it will be useful, but WITHOUT
14 1.1.1.1.4.2 yamt ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1.1.1.4.2 yamt or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 1.1.1.1.4.2 yamt License for more details.
17 1.1.1.1.4.2 yamt
18 1.1.1.1.4.2 yamt You should have received a copy of the GNU General Public License
19 1.1.1.1.4.2 yamt along with GCC; see the file COPYING3. If not see
20 1.1.1.1.4.2 yamt <http://www.gnu.org/licenses/>. */
21 1.1.1.1.4.2 yamt
22 1.1.1.1.4.2 yamt #define TARGET_OBJECT_FORMAT OBJECT_XCOFF
23 1.1.1.1.4.2 yamt
24 1.1.1.1.4.2 yamt /* The RS/6000 uses the XCOFF format. */
25 1.1.1.1.4.2 yamt #define XCOFF_DEBUGGING_INFO 1
26 1.1.1.1.4.2 yamt
27 1.1.1.1.4.2 yamt /* Define if the object format being used is COFF or a superset. */
28 1.1.1.1.4.2 yamt #define OBJECT_FORMAT_COFF
29 1.1.1.1.4.2 yamt
30 1.1.1.1.4.2 yamt /* Define the magic numbers that we recognize as COFF.
31 1.1.1.1.4.2 yamt
32 1.1.1.1.4.2 yamt AIX 4.3 adds U803XTOCMAGIC (0757) for 64-bit objects and AIX V5 adds
33 1.1.1.1.4.2 yamt U64_TOCMAGIC (0767), but collect2.c does not include files in the
34 1.1.1.1.4.2 yamt correct order to conditionally define the symbolic name in this macro.
35 1.1.1.1.4.2 yamt
36 1.1.1.1.4.2 yamt The AIX linker accepts import/export files as object files,
37 1.1.1.1.4.2 yamt so accept "#!" (0x2321) magic number. */
38 1.1.1.1.4.2 yamt #define MY_ISCOFF(magic) \
39 1.1.1.1.4.2 yamt ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC \
40 1.1.1.1.4.2 yamt || (magic) == U802TOCMAGIC || (magic) == 0757 || (magic) == 0767 \
41 1.1.1.1.4.2 yamt || (magic) == 0x2321)
42 1.1.1.1.4.2 yamt
43 1.1.1.1.4.2 yamt /* We don't have GAS for the RS/6000 yet, so don't write out special
44 1.1.1.1.4.2 yamt .stabs in cc1plus. */
45 1.1.1.1.4.2 yamt
46 1.1.1.1.4.2 yamt #define FASCIST_ASSEMBLER
47 1.1.1.1.4.2 yamt
48 1.1.1.1.4.2 yamt /* We define this to prevent the name mangler from putting dollar signs into
49 1.1.1.1.4.2 yamt function names. */
50 1.1.1.1.4.2 yamt
51 1.1.1.1.4.2 yamt #define NO_DOLLAR_IN_LABEL
52 1.1.1.1.4.2 yamt
53 1.1.1.1.4.2 yamt /* We define this to 0 so that gcc will never accept a dollar sign in a
54 1.1.1.1.4.2 yamt variable name. This is needed because the AIX assembler will not accept
55 1.1.1.1.4.2 yamt dollar signs. */
56 1.1.1.1.4.2 yamt
57 1.1.1.1.4.2 yamt #define DOLLARS_IN_IDENTIFIERS 0
58 1.1.1.1.4.2 yamt
59 1.1.1.1.4.2 yamt /* AIX .align pseudo-op accept value from 0 to 12, corresponding to
60 1.1.1.1.4.2 yamt log base 2 of the alignment in bytes; 12 = 4096 bytes = 32768 bits. */
61 1.1.1.1.4.2 yamt
62 1.1.1.1.4.2 yamt #define MAX_OFILE_ALIGNMENT 32768
63 1.1.1.1.4.2 yamt
64 1.1.1.1.4.2 yamt /* Default alignment factor for csect directives, chosen to honor
65 1.1.1.1.4.2 yamt BIGGEST_ALIGNMENT. */
66 1.1.1.1.4.2 yamt #define XCOFF_CSECT_DEFAULT_ALIGNMENT_STR "4"
67 1.1.1.1.4.2 yamt
68 1.1.1.1.4.2 yamt /* Return nonzero if this entry is to be written into the constant
69 1.1.1.1.4.2 yamt pool in a special way. We do so if this is a SYMBOL_REF, LABEL_REF
70 1.1.1.1.4.2 yamt or a CONST containing one of them. If -mfp-in-toc (the default),
71 1.1.1.1.4.2 yamt we also do this for floating-point constants. We actually can only
72 1.1.1.1.4.2 yamt do this if the FP formats of the target and host machines are the
73 1.1.1.1.4.2 yamt same, but we can't check that since not every file that uses these
74 1.1.1.1.4.2 yamt target macros includes real.h. We also do this when we can write the
75 1.1.1.1.4.2 yamt entry into the TOC and the entry is not larger than a TOC entry. */
76 1.1.1.1.4.2 yamt
77 1.1.1.1.4.2 yamt #define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \
78 1.1.1.1.4.2 yamt (TARGET_TOC \
79 1.1.1.1.4.2 yamt && (GET_CODE (X) == SYMBOL_REF \
80 1.1.1.1.4.2 yamt || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \
81 1.1.1.1.4.2 yamt && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \
82 1.1.1.1.4.2 yamt || GET_CODE (X) == LABEL_REF \
83 1.1.1.1.4.2 yamt || (GET_CODE (X) == CONST_INT \
84 1.1.1.1.4.2 yamt && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \
85 1.1.1.1.4.2 yamt || (GET_CODE (X) == CONST_DOUBLE \
86 1.1.1.1.4.2 yamt && (TARGET_MINIMAL_TOC \
87 1.1.1.1.4.2 yamt || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \
88 1.1.1.1.4.2 yamt && ! TARGET_NO_FP_IN_TOC)))))
89 1.1.1.1.4.2 yamt
90 1.1.1.1.4.2 yamt #define TARGET_ASM_OUTPUT_ANCHOR rs6000_xcoff_asm_output_anchor
91 1.1.1.1.4.2 yamt #define TARGET_ASM_GLOBALIZE_LABEL rs6000_xcoff_asm_globalize_label
92 1.1.1.1.4.2 yamt #define TARGET_ASM_INIT_SECTIONS rs6000_xcoff_asm_init_sections
93 1.1.1.1.4.2 yamt #define TARGET_ASM_RELOC_RW_MASK rs6000_xcoff_reloc_rw_mask
94 1.1.1.1.4.2 yamt #define TARGET_ASM_NAMED_SECTION rs6000_xcoff_asm_named_section
95 1.1.1.1.4.2 yamt #define TARGET_ASM_SELECT_SECTION rs6000_xcoff_select_section
96 1.1.1.1.4.2 yamt #define TARGET_ASM_SELECT_RTX_SECTION rs6000_xcoff_select_rtx_section
97 1.1.1.1.4.2 yamt #define TARGET_ASM_UNIQUE_SECTION rs6000_xcoff_unique_section
98 1.1.1.1.4.2 yamt #define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
99 1.1.1.1.4.2 yamt #define TARGET_STRIP_NAME_ENCODING rs6000_xcoff_strip_name_encoding
100 1.1.1.1.4.2 yamt #define TARGET_SECTION_TYPE_FLAGS rs6000_xcoff_section_type_flags
101 1.1.1.1.4.2 yamt
102 1.1.1.1.4.2 yamt /* FP save and restore routines. */
103 1.1.1.1.4.2 yamt #define SAVE_FP_PREFIX "._savef"
104 1.1.1.1.4.2 yamt #define SAVE_FP_SUFFIX ""
105 1.1.1.1.4.2 yamt #define RESTORE_FP_PREFIX "._restf"
106 1.1.1.1.4.2 yamt #define RESTORE_FP_SUFFIX ""
107 1.1.1.1.4.2 yamt
108 1.1.1.1.4.2 yamt /* Function name to call to do profiling. */
109 1.1.1.1.4.2 yamt #undef RS6000_MCOUNT
110 1.1.1.1.4.2 yamt #define RS6000_MCOUNT ".__mcount"
111 1.1.1.1.4.2 yamt
112 1.1.1.1.4.2 yamt /* This outputs NAME to FILE up to the first null or '['. */
113 1.1.1.1.4.2 yamt
114 1.1.1.1.4.2 yamt #define RS6000_OUTPUT_BASENAME(FILE, NAME) \
115 1.1.1.1.4.2 yamt assemble_name ((FILE), (*targetm.strip_name_encoding) (NAME))
116 1.1.1.1.4.2 yamt
117 1.1.1.1.4.2 yamt /* This is how to output the definition of a user-level label named NAME,
118 1.1.1.1.4.2 yamt such as the label on a static function or variable NAME. */
119 1.1.1.1.4.2 yamt
120 1.1.1.1.4.2 yamt #define ASM_OUTPUT_LABEL(FILE,NAME) \
121 1.1.1.1.4.2 yamt do { RS6000_OUTPUT_BASENAME (FILE, NAME); fputs (":\n", FILE); } while (0)
122 1.1.1.1.4.2 yamt
123 1.1.1.1.4.2 yamt /* This is how to output a command to make the user-level label named NAME
124 1.1.1.1.4.2 yamt defined for reference from other files. */
125 1.1.1.1.4.2 yamt
126 1.1.1.1.4.2 yamt /* Globalizing directive for a label. */
127 1.1.1.1.4.2 yamt #define GLOBAL_ASM_OP "\t.globl "
128 1.1.1.1.4.2 yamt
129 1.1.1.1.4.2 yamt #undef TARGET_ASM_FILE_START
130 1.1.1.1.4.2 yamt #define TARGET_ASM_FILE_START rs6000_xcoff_file_start
131 1.1.1.1.4.2 yamt #define TARGET_ASM_FILE_END rs6000_xcoff_file_end
132 1.1.1.1.4.2 yamt #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
133 1.1.1.1.4.2 yamt #define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
134 1.1.1.1.4.2 yamt
135 1.1.1.1.4.2 yamt /* This macro produces the initial definition of a function name.
136 1.1.1.1.4.2 yamt On the RS/6000, we need to place an extra '.' in the function name and
137 1.1.1.1.4.2 yamt output the function descriptor.
138 1.1.1.1.4.2 yamt Dollar signs are converted to underscores.
139 1.1.1.1.4.2 yamt
140 1.1.1.1.4.2 yamt The csect for the function will have already been created when
141 1.1.1.1.4.2 yamt text_section was selected. We do have to go back to that csect, however.
142 1.1.1.1.4.2 yamt
143 1.1.1.1.4.2 yamt The third and fourth parameters to the .function pseudo-op (16 and 044)
144 1.1.1.1.4.2 yamt are placeholders which no longer have any use. */
145 1.1.1.1.4.2 yamt
146 1.1.1.1.4.2 yamt #define ASM_DECLARE_FUNCTION_NAME(FILE,NAME,DECL) \
147 1.1.1.1.4.2 yamt { char *buffer = (char *) alloca (strlen (NAME) + 1); \
148 1.1.1.1.4.2 yamt char *p; \
149 1.1.1.1.4.2 yamt int dollar_inside = 0; \
150 1.1.1.1.4.2 yamt strcpy (buffer, NAME); \
151 1.1.1.1.4.2 yamt p = strchr (buffer, '$'); \
152 1.1.1.1.4.2 yamt while (p) { \
153 1.1.1.1.4.2 yamt *p = '_'; \
154 1.1.1.1.4.2 yamt dollar_inside++; \
155 1.1.1.1.4.2 yamt p = strchr (p + 1, '$'); \
156 1.1.1.1.4.2 yamt } \
157 1.1.1.1.4.2 yamt if (TREE_PUBLIC (DECL)) \
158 1.1.1.1.4.2 yamt { \
159 1.1.1.1.4.2 yamt if (!RS6000_WEAK || !DECL_WEAK (decl)) \
160 1.1.1.1.4.2 yamt { \
161 1.1.1.1.4.2 yamt if (dollar_inside) { \
162 1.1.1.1.4.2 yamt fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
163 1.1.1.1.4.2 yamt fprintf(FILE, "\t.rename %s,\"%s\"\n", buffer, NAME); \
164 1.1.1.1.4.2 yamt } \
165 1.1.1.1.4.2 yamt fputs ("\t.globl .", FILE); \
166 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
167 1.1.1.1.4.2 yamt putc ('\n', FILE); \
168 1.1.1.1.4.2 yamt } \
169 1.1.1.1.4.2 yamt } \
170 1.1.1.1.4.2 yamt else \
171 1.1.1.1.4.2 yamt { \
172 1.1.1.1.4.2 yamt if (dollar_inside) { \
173 1.1.1.1.4.2 yamt fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
174 1.1.1.1.4.2 yamt fprintf(FILE, "\t.rename %s,\"%s\"\n", buffer, NAME); \
175 1.1.1.1.4.2 yamt } \
176 1.1.1.1.4.2 yamt fputs ("\t.lglobl .", FILE); \
177 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
178 1.1.1.1.4.2 yamt putc ('\n', FILE); \
179 1.1.1.1.4.2 yamt } \
180 1.1.1.1.4.2 yamt fputs ("\t.csect ", FILE); \
181 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
182 1.1.1.1.4.2 yamt fputs (TARGET_32BIT ? "[DS]\n" : "[DS],3\n", FILE); \
183 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
184 1.1.1.1.4.2 yamt fputs (":\n", FILE); \
185 1.1.1.1.4.2 yamt fputs (TARGET_32BIT ? "\t.long ." : "\t.llong .", FILE); \
186 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
187 1.1.1.1.4.2 yamt fputs (", TOC[tc0], 0\n", FILE); \
188 1.1.1.1.4.2 yamt in_section = NULL; \
189 1.1.1.1.4.2 yamt switch_to_section (function_section (DECL)); \
190 1.1.1.1.4.2 yamt putc ('.', FILE); \
191 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
192 1.1.1.1.4.2 yamt fputs (":\n", FILE); \
193 1.1.1.1.4.2 yamt if (write_symbols != NO_DEBUG && !DECL_IGNORED_P (DECL)) \
194 1.1.1.1.4.2 yamt xcoffout_declare_function (FILE, DECL, buffer); \
195 1.1.1.1.4.2 yamt }
196 1.1.1.1.4.2 yamt
197 1.1.1.1.4.2 yamt /* Output a reference to SYM on FILE. */
198 1.1.1.1.4.2 yamt
199 1.1.1.1.4.2 yamt #define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
200 1.1.1.1.4.2 yamt rs6000_output_symbol_ref (FILE, SYM)
201 1.1.1.1.4.2 yamt
202 1.1.1.1.4.2 yamt /* This says how to output an external.
203 1.1.1.1.4.2 yamt Dollar signs are converted to underscores. */
204 1.1.1.1.4.2 yamt
205 1.1.1.1.4.2 yamt #undef ASM_OUTPUT_EXTERNAL
206 1.1.1.1.4.2 yamt #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
207 1.1.1.1.4.2 yamt { char *buffer = (char *) alloca (strlen (NAME) + 1); \
208 1.1.1.1.4.2 yamt char *p; \
209 1.1.1.1.4.2 yamt rtx _symref = XEXP (DECL_RTL (DECL), 0); \
210 1.1.1.1.4.2 yamt int dollar_inside = 0; \
211 1.1.1.1.4.2 yamt strcpy (buffer, NAME); \
212 1.1.1.1.4.2 yamt p = strchr (buffer, '$'); \
213 1.1.1.1.4.2 yamt while (p) { \
214 1.1.1.1.4.2 yamt *p = '_'; \
215 1.1.1.1.4.2 yamt dollar_inside++; \
216 1.1.1.1.4.2 yamt p = strchr (p + 1, '$'); \
217 1.1.1.1.4.2 yamt } \
218 1.1.1.1.4.2 yamt if (dollar_inside) { \
219 1.1.1.1.4.2 yamt fputs ("\t.extern .", FILE); \
220 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, buffer); \
221 1.1.1.1.4.2 yamt putc ('\n', FILE); \
222 1.1.1.1.4.2 yamt fprintf(FILE, "\t.rename .%s,\".%s\"\n", buffer, NAME); \
223 1.1.1.1.4.2 yamt } \
224 1.1.1.1.4.2 yamt if ((TREE_CODE (DECL) == VAR_DECL \
225 1.1.1.1.4.2 yamt || TREE_CODE (DECL) == FUNCTION_DECL) \
226 1.1.1.1.4.2 yamt && (NAME)[strlen (NAME) - 1] != ']') \
227 1.1.1.1.4.2 yamt { \
228 1.1.1.1.4.2 yamt XSTR (_symref, 0) = concat (XSTR (_symref, 0), \
229 1.1.1.1.4.2 yamt (TREE_CODE (DECL) == FUNCTION_DECL \
230 1.1.1.1.4.2 yamt ? "[DS]" : "[RW]"), \
231 1.1.1.1.4.2 yamt NULL); \
232 1.1.1.1.4.2 yamt } \
233 1.1.1.1.4.2 yamt }
234 1.1.1.1.4.2 yamt
235 1.1.1.1.4.2 yamt /* This is how to output a reference to a user-level label named NAME.
236 1.1.1.1.4.2 yamt `assemble_name' uses this. */
237 1.1.1.1.4.2 yamt
238 1.1.1.1.4.2 yamt #define ASM_OUTPUT_LABELREF(FILE,NAME) \
239 1.1.1.1.4.2 yamt asm_fprintf ((FILE), "%U%s", rs6000_xcoff_strip_dollar (NAME));
240 1.1.1.1.4.2 yamt
241 1.1.1.1.4.2 yamt /* This is how to output an internal label prefix. rs6000.c uses this
242 1.1.1.1.4.2 yamt when generating traceback tables. */
243 1.1.1.1.4.2 yamt
244 1.1.1.1.4.2 yamt #define ASM_OUTPUT_INTERNAL_LABEL_PREFIX(FILE,PREFIX) \
245 1.1.1.1.4.2 yamt fprintf (FILE, "%s..", PREFIX)
246 1.1.1.1.4.2 yamt
247 1.1.1.1.4.2 yamt /* This is how to output a label for a jump table. Arguments are the same as
248 1.1.1.1.4.2 yamt for (*targetm.asm_out.internal_label), except the insn for the jump table is
249 1.1.1.1.4.2 yamt passed. */
250 1.1.1.1.4.2 yamt
251 1.1.1.1.4.2 yamt #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \
252 1.1.1.1.4.2 yamt { ASM_OUTPUT_ALIGN (FILE, 2); (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); }
253 1.1.1.1.4.2 yamt
254 1.1.1.1.4.2 yamt /* This is how to store into the string LABEL
255 1.1.1.1.4.2 yamt the symbol_ref name of an internal numbered label where
256 1.1.1.1.4.2 yamt PREFIX is the class of label and NUM is the number within the class.
257 1.1.1.1.4.2 yamt This is suitable for output with `assemble_name'. */
258 1.1.1.1.4.2 yamt
259 1.1.1.1.4.2 yamt #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
260 1.1.1.1.4.2 yamt sprintf (LABEL, "*%s..%u", rs6000_xcoff_strip_dollar (PREFIX), (unsigned) (NUM))
261 1.1.1.1.4.2 yamt
262 1.1.1.1.4.2 yamt /* This is how to output an assembler line to define N characters starting
263 1.1.1.1.4.2 yamt at P to FILE. */
264 1.1.1.1.4.2 yamt
265 1.1.1.1.4.2 yamt #define ASM_OUTPUT_ASCII(FILE, P, N) output_ascii ((FILE), (P), (N))
266 1.1.1.1.4.2 yamt
267 1.1.1.1.4.2 yamt /* This is how to advance the location counter by SIZE bytes. */
268 1.1.1.1.4.2 yamt
269 1.1.1.1.4.2 yamt #define SKIP_ASM_OP "\t.space "
270 1.1.1.1.4.2 yamt
271 1.1.1.1.4.2 yamt #define ASM_OUTPUT_SKIP(FILE,SIZE) \
272 1.1.1.1.4.2 yamt fprintf (FILE, "%s"HOST_WIDE_INT_PRINT_UNSIGNED"\n", SKIP_ASM_OP, (SIZE))
273 1.1.1.1.4.2 yamt
274 1.1.1.1.4.2 yamt /* This says how to output an assembler line
275 1.1.1.1.4.2 yamt to define a global common symbol. */
276 1.1.1.1.4.2 yamt
277 1.1.1.1.4.2 yamt #define COMMON_ASM_OP "\t.comm "
278 1.1.1.1.4.2 yamt
279 1.1.1.1.4.2 yamt #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
280 1.1.1.1.4.2 yamt do { fputs (COMMON_ASM_OP, (FILE)); \
281 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
282 1.1.1.1.4.2 yamt if ((ALIGN) > 32) \
283 1.1.1.1.4.2 yamt fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", (SIZE), \
284 1.1.1.1.4.2 yamt exact_log2 ((ALIGN) / BITS_PER_UNIT)); \
285 1.1.1.1.4.2 yamt else if ((SIZE) > 4) \
286 1.1.1.1.4.2 yamt fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",3\n", (SIZE)); \
287 1.1.1.1.4.2 yamt else \
288 1.1.1.1.4.2 yamt fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED"\n", (SIZE)); \
289 1.1.1.1.4.2 yamt } while (0)
290 1.1.1.1.4.2 yamt
291 1.1.1.1.4.2 yamt /* This says how to output an assembler line
292 1.1.1.1.4.2 yamt to define a local common symbol.
293 1.1.1.1.4.2 yamt Alignment cannot be specified, but we can try to maintain
294 1.1.1.1.4.2 yamt alignment after preceding TOC section if it was aligned
295 1.1.1.1.4.2 yamt for 64-bit mode. */
296 1.1.1.1.4.2 yamt
297 1.1.1.1.4.2 yamt #define LOCAL_COMMON_ASM_OP "\t.lcomm "
298 1.1.1.1.4.2 yamt
299 1.1.1.1.4.2 yamt #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \
300 1.1.1.1.4.2 yamt do { fputs (LOCAL_COMMON_ASM_OP, (FILE)); \
301 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
302 1.1.1.1.4.2 yamt fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%s\n", \
303 1.1.1.1.4.2 yamt (TARGET_32BIT ? (SIZE) : (ROUNDED)), \
304 1.1.1.1.4.2 yamt xcoff_bss_section_name); \
305 1.1.1.1.4.2 yamt } while (0)
306 1.1.1.1.4.2 yamt
307 1.1.1.1.4.2 yamt /* This is how we tell the assembler that two symbols have the same value. */
308 1.1.1.1.4.2 yamt #define SET_ASM_OP "\t.set "
309 1.1.1.1.4.2 yamt
310 1.1.1.1.4.2 yamt /* This is how we tell the assembler to equate two values. */
311 1.1.1.1.4.2 yamt #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2) \
312 1.1.1.1.4.2 yamt do { fprintf ((FILE), "%s", SET_ASM_OP); \
313 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, LABEL1); \
314 1.1.1.1.4.2 yamt fprintf (FILE, ","); \
315 1.1.1.1.4.2 yamt RS6000_OUTPUT_BASENAME (FILE, LABEL2); \
316 1.1.1.1.4.2 yamt fprintf (FILE, "\n"); \
317 1.1.1.1.4.2 yamt } while (0)
318 1.1.1.1.4.2 yamt
319 1.1.1.1.4.2 yamt /* Used by rs6000_assemble_integer, among others. */
320 1.1.1.1.4.2 yamt #define DOUBLE_INT_ASM_OP "\t.llong\t"
321 1.1.1.1.4.2 yamt
322 1.1.1.1.4.2 yamt /* Output before instructions. */
323 1.1.1.1.4.2 yamt #define TEXT_SECTION_ASM_OP "\t.csect .text[PR]"
324 1.1.1.1.4.2 yamt
325 1.1.1.1.4.2 yamt /* Output before writable data. */
326 1.1.1.1.4.2 yamt #define DATA_SECTION_ASM_OP \
327 1.1.1.1.4.2 yamt "\t.csect .data[RW]," XCOFF_CSECT_DEFAULT_ALIGNMENT_STR
328 1.1.1.1.4.2 yamt
329 1.1.1.1.4.2 yamt
330 1.1.1.1.4.2 yamt /* Define to prevent DWARF2 unwind info in the data section rather
331 1.1.1.1.4.2 yamt than in the .eh_frame section. We do this because the AIX linker
332 1.1.1.1.4.2 yamt would otherwise garbage collect these sections. */
333 1.1.1.1.4.2 yamt #define EH_FRAME_IN_DATA_SECTION 1
334