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