freebsd.h (52111) | freebsd.h (52112) |
---|---|
1/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format 2 Copyright (C) 1996 Free Software Foundation, Inc. 3 Contributed by Eric Youngdale. 4 Modified for stabs-in-ELF by H.J. Lu. 5 Adapted from GNU/Linux version by John Polstra. 6 Added support for generating "old a.out gas" on the fly by Peter Wemm. | 1/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format 2 Copyright (C) 1996 Free Software Foundation, Inc. 3 Contributed by Eric Youngdale. 4 Modified for stabs-in-ELF by H.J. Lu. 5 Adapted from GNU/Linux version by John Polstra. 6 Added support for generating "old a.out gas" on the fly by Peter Wemm. |
7 Continued development by David O'Brien <obrien@freebsd.org> |
|
7 8This file is part of GNU CC. 9 10GNU CC is free software; you can redistribute it and/or modify 11it under the terms of the GNU General Public License as published by 12the Free Software Foundation; either version 2, or (at your option) 13any later version. 14 15GNU CC is distributed in the hope that it will be useful, 16but WITHOUT ANY WARRANTY; without even the implied warranty of 17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18GNU General Public License for more details. 19 20You should have received a copy of the GNU General Public License 21along with GNU CC; see the file COPYING. If not, write to 22the Free Software Foundation, 59 Temple Place - Suite 330, 23Boston, MA 02111-1307, USA. */ 24 | 8 9This file is part of GNU CC. 10 11GNU CC is free software; you can redistribute it and/or modify 12it under the terms of the GNU General Public License as published by 13the Free Software Foundation; either version 2, or (at your option) 14any later version. 15 16GNU CC is distributed in the hope that it will be useful, 17but WITHOUT ANY WARRANTY; without even the implied warranty of 18MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19GNU General Public License for more details. 20 21You should have received a copy of the GNU General Public License 22along with GNU CC; see the file COPYING. If not, write to 23the Free Software Foundation, 59 Temple Place - Suite 330, 24Boston, MA 02111-1307, USA. */ 25 |
25/* $FreeBSD: head/contrib/gcc/config/i386/freebsd.h 52111 1999-10-10 22:17:24Z obrien $ */ | 26/* $FreeBSD: head/contrib/gcc/config/i386/freebsd.h 52112 1999-10-10 22:33:40Z obrien $ */ |
26 27 28#undef TARGET_VERSION 29#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); 30 31#define MASK_PROFILER_EPILOGUE 010000000000 32#define MASK_AOUT 004000000000 /* a.out not elf */ 33#define MASK_UNDERSCORES 002000000000 /* use leading _ */ 34 35#define TARGET_PROFILER_EPILOGUE (target_flags & MASK_PROFILER_EPILOGUE) 36#define TARGET_AOUT (target_flags & MASK_AOUT) 37#define TARGET_ELF ((target_flags & MASK_AOUT) == 0) 38#define TARGET_UNDERSCORES ((target_flags & MASK_UNDERSCORES) != 0) 39 40#undef SUBTARGET_SWITCHES | 27 28 29#undef TARGET_VERSION 30#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); 31 32#define MASK_PROFILER_EPILOGUE 010000000000 33#define MASK_AOUT 004000000000 /* a.out not elf */ 34#define MASK_UNDERSCORES 002000000000 /* use leading _ */ 35 36#define TARGET_PROFILER_EPILOGUE (target_flags & MASK_PROFILER_EPILOGUE) 37#define TARGET_AOUT (target_flags & MASK_AOUT) 38#define TARGET_ELF ((target_flags & MASK_AOUT) == 0) 39#define TARGET_UNDERSCORES ((target_flags & MASK_UNDERSCORES) != 0) 40 41#undef SUBTARGET_SWITCHES |
41#define SUBTARGET_SWITCHES \ 42 { "profiler-epilogue", MASK_PROFILER_EPILOGUE}, \ 43 { "no-profiler-epilogue", -MASK_PROFILER_EPILOGUE}, \ 44 { "aout", MASK_AOUT}, \ 45 { "no-aout", -MASK_AOUT}, \ 46 { "underscores", MASK_UNDERSCORES}, \ | 42#define SUBTARGET_SWITCHES \ 43 { "profiler-epilogue", MASK_PROFILER_EPILOGUE}, \ 44 { "no-profiler-epilogue", -MASK_PROFILER_EPILOGUE}, \ 45 { "aout", MASK_AOUT}, \ 46 { "no-aout", -MASK_AOUT}, \ 47 { "underscores", MASK_UNDERSCORES}, \ |
47 { "no-underscores", -MASK_UNDERSCORES}, 48 49/* Prefix for internally generated assembler labels. If we aren't using 50 underscores, we are using prefix `.'s to identify labels that should 51 be ignored, as in `i386/gas.h' --karl@cs.umb.edu */ 52#undef LPREFIX 53#define LPREFIX ((TARGET_UNDERSCORES) ? "L" : ".L") 54 55/* Override the default comment-starter of "/". */ 56#undef ASM_COMMENT_START 57#define ASM_COMMENT_START "#" 58 59#undef ASM_APP_ON 60#define ASM_APP_ON "#APP\n" 61 62#undef ASM_APP_OFF 63#define ASM_APP_OFF "#NO_APP\n" 64 | 48 { "no-underscores", -MASK_UNDERSCORES}, 49 50/* Prefix for internally generated assembler labels. If we aren't using 51 underscores, we are using prefix `.'s to identify labels that should 52 be ignored, as in `i386/gas.h' --karl@cs.umb.edu */ 53#undef LPREFIX 54#define LPREFIX ((TARGET_UNDERSCORES) ? "L" : ".L") 55 56/* Override the default comment-starter of "/". */ 57#undef ASM_COMMENT_START 58#define ASM_COMMENT_START "#" 59 60#undef ASM_APP_ON 61#define ASM_APP_ON "#APP\n" 62 63#undef ASM_APP_OFF 64#define ASM_APP_OFF "#NO_APP\n" 65 |
66#undef SET_ASM_OP |
|
65#define SET_ASM_OP ".set" 66 67/* Output at beginning of assembler file. */ 68/* The .file command should always begin the output. */ 69 70#undef ASM_FILE_START 71#define ASM_FILE_START(FILE) \ 72 do { \ | 67#define SET_ASM_OP ".set" 68 69/* Output at beginning of assembler file. */ 70/* The .file command should always begin the output. */ 71 72#undef ASM_FILE_START 73#define ASM_FILE_START(FILE) \ 74 do { \ |
73 output_file_directive (FILE, main_input_filename); \ | 75 output_file_directive ((FILE), main_input_filename); \ |
74 if (TARGET_ELF) \ | 76 if (TARGET_ELF) \ |
75 fprintf (FILE, "\t.version\t\"01.01\"\n"); \ | 77 fprintf ((FILE), "\t.version\t\"01.01\"\n"); \ |
76 } while (0) 77 78/* Identify the front-end which produced this file. To keep symbol 79 space down, and not confuse kdb, only do this if the language is 80 not C. (svr4.h defines ASM_IDENTIFY_GCC but neglects this) */ 81#undef ASM_IDENTIFY_LANGUAGE 82#define ASM_IDENTIFY_LANGUAGE(STREAM) \ 83{ \ --- 9 unchanged lines hidden (view full) --- 93#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ 94 sprintf ((BUF), "*%s%s%d", (TARGET_UNDERSCORES) ? "" : ".", \ 95 (PREFIX), (NUMBER)) 96 97/* This is how to output an internal numbered label where 98 PREFIX is the class of label and NUM is the number within the class. */ 99#undef ASM_OUTPUT_INTERNAL_LABEL 100#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ | 78 } while (0) 79 80/* Identify the front-end which produced this file. To keep symbol 81 space down, and not confuse kdb, only do this if the language is 82 not C. (svr4.h defines ASM_IDENTIFY_GCC but neglects this) */ 83#undef ASM_IDENTIFY_LANGUAGE 84#define ASM_IDENTIFY_LANGUAGE(STREAM) \ 85{ \ --- 9 unchanged lines hidden (view full) --- 95#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ 96 sprintf ((BUF), "*%s%s%d", (TARGET_UNDERSCORES) ? "" : ".", \ 97 (PREFIX), (NUMBER)) 98 99/* This is how to output an internal numbered label where 100 PREFIX is the class of label and NUM is the number within the class. */ 101#undef ASM_OUTPUT_INTERNAL_LABEL 102#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ |
101 fprintf (FILE, "%s%s%d:\n", (TARGET_UNDERSCORES) ? "" : ".", \ 102 PREFIX, NUM) | 103 fprintf ((FILE), "%s%s%d:\n", (TARGET_UNDERSCORES) ? "" : ".", \ 104 (PREFIX), (NUM)) |
103 104/* This is how to output a reference to a user-level label named NAME. */ 105#undef ASM_OUTPUT_LABELREF | 105 106/* This is how to output a reference to a user-level label named NAME. */ 107#undef ASM_OUTPUT_LABELREF |
106#define ASM_OUTPUT_LABELREF(FILE,NAME) \ 107 fprintf (FILE, "%s%s", (TARGET_UNDERSCORES) ? "_" : "", NAME) | 108#define ASM_OUTPUT_LABELREF(FILE, NAME) \ 109 fprintf ((FILE), "%s%s", (TARGET_UNDERSCORES) ? "_" : "", (NAME)) |
108 109 110/* This is how to output an element of a case-vector that is relative. 111 This is only used for PIC code. See comments by the `casesi' insn in 112 i386.md for an explanation of the expression this outputs. */ 113#undef ASM_OUTPUT_ADDR_DIFF_ELT 114#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ | 110 111 112/* This is how to output an element of a case-vector that is relative. 113 This is only used for PIC code. See comments by the `casesi' insn in 114 i386.md for an explanation of the expression this outputs. */ 115#undef ASM_OUTPUT_ADDR_DIFF_ELT 116#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ |
115 fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) | 117 fprintf ((FILE), "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, (VALUE)) |
116 117#undef ASM_OUTPUT_ALIGN | 118 119#undef ASM_OUTPUT_ALIGN |
118#define ASM_OUTPUT_ALIGN(FILE,LOG) \ | 120#define ASM_OUTPUT_ALIGN(FILE, LOG) \ |
119 if ((LOG)!=0) { \ 120 if (in_text_section()) \ 121 fprintf ((FILE), "\t.p2align %d,0x90\n", (LOG)); \ 122 else \ 123 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 124 } 125 126/* conditionalize the use of ".section rodata" on elf mode - otherwise .text */ 127#undef USE_CONST_SECTION 128#define USE_CONST_SECTION TARGET_ELF 129 130/* The a.out tools do not support "linkonce" sections. */ | 121 if ((LOG)!=0) { \ 122 if (in_text_section()) \ 123 fprintf ((FILE), "\t.p2align %d,0x90\n", (LOG)); \ 124 else \ 125 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ 126 } 127 128/* conditionalize the use of ".section rodata" on elf mode - otherwise .text */ 129#undef USE_CONST_SECTION 130#define USE_CONST_SECTION TARGET_ELF 131 132/* The a.out tools do not support "linkonce" sections. */ |
133#undef SUPPORTS_ONE_ONLY |
|
131#define SUPPORTS_ONE_ONLY TARGET_ELF 132 133/* The a.out tools do not support "Lscope" .stabs symbols. */ | 134#define SUPPORTS_ONE_ONLY TARGET_ELF 135 136/* The a.out tools do not support "Lscope" .stabs symbols. */ |
137#undef NO_DBX_FUNCTION_END |
|
134#define NO_DBX_FUNCTION_END TARGET_AOUT 135 136/* A C statement (sans semicolon) to output an element in the table of 137 global constructors. */ 138#undef ASM_OUTPUT_CONSTRUCTOR | 138#define NO_DBX_FUNCTION_END TARGET_AOUT 139 140/* A C statement (sans semicolon) to output an element in the table of 141 global constructors. */ 142#undef ASM_OUTPUT_CONSTRUCTOR |
139#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ | 143#define ASM_OUTPUT_CONSTRUCTOR(FILE, NAME) \ |
140 do { \ 141 if (TARGET_ELF) { \ 142 ctors_section (); \ | 144 do { \ 145 if (TARGET_ELF) { \ 146 ctors_section (); \ |
143 fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ 144 assemble_name (FILE, NAME); \ 145 fprintf (FILE, "\n"); \ | 147 fprintf ((FILE), "\t%s\t ", INT_ASM_OP); \ 148 assemble_name ((FILE), (NAME)); \ 149 fprintf ((FILE), "\n"); \ |
146 } else { \ 147 fprintf (asm_out_file, "%s \"%s__CTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ 148 (TARGET_UNDERSCORES) ? "_" : ""); \ 149 assemble_name (asm_out_file, name); \ 150 fputc ('\n', asm_out_file); \ 151 } \ 152 } while (0) 153 154/* A C statement (sans semicolon) to output an element in the table of 155 global destructors. */ 156#undef ASM_OUTPUT_DESTRUCTOR | 150 } else { \ 151 fprintf (asm_out_file, "%s \"%s__CTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ 152 (TARGET_UNDERSCORES) ? "_" : ""); \ 153 assemble_name (asm_out_file, name); \ 154 fputc ('\n', asm_out_file); \ 155 } \ 156 } while (0) 157 158/* A C statement (sans semicolon) to output an element in the table of 159 global destructors. */ 160#undef ASM_OUTPUT_DESTRUCTOR |
157#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ | 161#define ASM_OUTPUT_DESTRUCTOR(FILE, NAME) \ |
158 do { \ 159 if (TARGET_ELF) { \ 160 dtors_section (); \ | 162 do { \ 163 if (TARGET_ELF) { \ 164 dtors_section (); \ |
161 fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ 162 assemble_name (FILE, NAME); \ 163 fprintf (FILE, "\n"); \ | 165 fprintf ((FILE), "\t%s\t ", INT_ASM_OP); \ 166 assemble_name ((FILE), (NAME)); \ 167 fprintf ((FILE), "\n"); \ |
164 } else { \ 165 fprintf (asm_out_file, "%s \"%s__DTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ 166 (TARGET_UNDERSCORES) ? "_" : ""); \ 167 assemble_name (asm_out_file, name); \ 168 fputc ('\n', asm_out_file); \ 169 } \ 170 } while (0) 171 --- 4 unchanged lines hidden (view full) --- 176 177#undef ASM_OUTPUT_ALIGNED_LOCAL 178#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ 179do { \ 180 if (TARGET_ELF) { \ 181 fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \ 182 assemble_name ((FILE), (NAME)); \ 183 fprintf ((FILE), "\n"); \ | 168 } else { \ 169 fprintf (asm_out_file, "%s \"%s__DTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ 170 (TARGET_UNDERSCORES) ? "_" : ""); \ 171 assemble_name (asm_out_file, name); \ 172 fputc ('\n', asm_out_file); \ 173 } \ 174 } while (0) 175 --- 4 unchanged lines hidden (view full) --- 180 181#undef ASM_OUTPUT_ALIGNED_LOCAL 182#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ 183do { \ 184 if (TARGET_ELF) { \ 185 fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \ 186 assemble_name ((FILE), (NAME)); \ 187 fprintf ((FILE), "\n"); \ |
184 ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \ | 188 ASM_OUTPUT_ALIGNED_COMMON ((FILE), (NAME), (SIZE), (ALIGN)); \ |
185 } else { \ 186 int rounded = (SIZE); \ 187 if (rounded == 0) rounded = 1; \ 188 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ 189 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ 190 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ 191 fputs (".lcomm ", (FILE)); \ 192 assemble_name ((FILE), (NAME)); \ --- 21 unchanged lines hidden (view full) --- 214} while (0) 215 216/* Turn off svr4.h version, it chokes the old gas. The old layout 217 works fine under new gas anyway. */ 218#undef ASM_OUTPUT_ASCII 219 220/* How to output some space */ 221#undef ASM_OUTPUT_SKIP | 189 } else { \ 190 int rounded = (SIZE); \ 191 if (rounded == 0) rounded = 1; \ 192 rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ 193 rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ 194 * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ 195 fputs (".lcomm ", (FILE)); \ 196 assemble_name ((FILE), (NAME)); \ --- 21 unchanged lines hidden (view full) --- 218} while (0) 219 220/* Turn off svr4.h version, it chokes the old gas. The old layout 221 works fine under new gas anyway. */ 222#undef ASM_OUTPUT_ASCII 223 224/* How to output some space */ 225#undef ASM_OUTPUT_SKIP |
222#define ASM_OUTPUT_SKIP(FILE,SIZE) \ | 226#define ASM_OUTPUT_SKIP(FILE, SIZE) \ |
223do { \ 224 if (TARGET_ELF) { \ | 227do { \ 228 if (TARGET_ELF) { \ |
225 fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE)); \ | 229 fprintf ((FILE), "\t%s\t%u\n", SKIP_ASM_OP, (SIZE)); \ |
226 } else { \ | 230 } else { \ |
227 fprintf (FILE, "\t.space %u\n", (SIZE)); \ | 231 fprintf ((FILE), "\t.space %u\n", (SIZE)); \ |
228 } \ 229} while (0) 230 231#undef ASM_OUTPUT_SOURCE_LINE | 232 } \ 233} while (0) 234 235#undef ASM_OUTPUT_SOURCE_LINE |
232#define ASM_OUTPUT_SOURCE_LINE(file, line) \ | 236#define ASM_OUTPUT_SOURCE_LINE(FILE, LINE) \ |
233do { \ 234 static int sym_lineno = 1; \ 235 if (TARGET_ELF) { \ | 237do { \ 238 static int sym_lineno = 1; \ 239 if (TARGET_ELF) { \ |
236 fprintf (file, ".stabn 68,0,%d,.LM%d-", line, sym_lineno); \ 237 assemble_name (file, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ 238 fprintf (file, "\n.LM%d:\n", sym_lineno); \ | 240 fprintf ((FILE), ".stabn 68,0,%d,.LM%d-", (LINE), sym_lineno); \ 241 assemble_name ((FILE), XSTR (XEXP (DECL_RTL (current_function_decl),\ 242 0), 0)); \ 243 fprintf ((FILE), "\n.LM%d:\n", sym_lineno); \ |
239 sym_lineno += 1; \ 240 } else { \ | 244 sym_lineno += 1; \ 245 } else { \ |
241 fprintf (file, "\t%s %d,0,%d\n", ASM_STABD_OP, N_SLINE, lineno); \ | 246 fprintf ((FILE), "\t%s %d,0,%d\n", ASM_STABD_OP, N_SLINE, lineno); \ |
242 } \ 243} while (0) 244 245/* in elf, the function stabs come first, before the relative offsets */ 246#undef DBX_FUNCTION_FIRST 247#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF 248 249/* tag end of file in elf mode */ 250#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END 251#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ 252do { \ 253 if (TARGET_ELF) { \ | 247 } \ 248} while (0) 249 250/* in elf, the function stabs come first, before the relative offsets */ 251#undef DBX_FUNCTION_FIRST 252#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF 253 254/* tag end of file in elf mode */ 255#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END 256#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ 257do { \ 258 if (TARGET_ELF) { \ |
254 fprintf (FILE, "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO); \ | 259 fprintf ((FILE), "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", \ 260 N_SO); \ |
255 } \ 256} while (0) 257 258/* stabs-in-elf has offsets relative to function beginning */ 259#undef DBX_OUTPUT_LBRAC | 261 } \ 262} while (0) 263 264/* stabs-in-elf has offsets relative to function beginning */ 265#undef DBX_OUTPUT_LBRAC |
260#define DBX_OUTPUT_LBRAC(file,name) \ | 266#define DBX_OUTPUT_LBRAC(FILE, NAME) \ |
261do { \ 262 fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_LBRAC); \ 263 assemble_name (asmfile, buf); \ 264 if (TARGET_ELF) { \ 265 fputc ('-', asmfile); \ | 267do { \ 268 fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_LBRAC); \ 269 assemble_name (asmfile, buf); \ 270 if (TARGET_ELF) { \ 271 fputc ('-', asmfile); \ |
266 assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ | 272 assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl),\ 273 0), 0)); \ |
267 } \ 268 fprintf (asmfile, "\n"); \ 269} while (0) 270 271#undef DBX_OUTPUT_RBRAC | 274 } \ 275 fprintf (asmfile, "\n"); \ 276} while (0) 277 278#undef DBX_OUTPUT_RBRAC |
272#define DBX_OUTPUT_RBRAC(file,name) \ | 279#define DBX_OUTPUT_RBRAC(FILE, NAME) \ |
273do { \ 274 fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_RBRAC); \ 275 assemble_name (asmfile, buf); \ 276 if (TARGET_ELF) { \ 277 fputc ('-', asmfile); \ | 280do { \ 281 fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_RBRAC); \ 282 assemble_name (asmfile, buf); \ 283 if (TARGET_ELF) { \ 284 fputc ('-', asmfile); \ |
278 assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ | 285 assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl),\ 286 0), 0)); \ |
279 } \ 280 fprintf (asmfile, "\n"); \ 281} while (0) 282 283 284/* Define macro used to output shift-double opcodes when the shift 285 count is in %cl. Some assemblers require %cl as an argument; 286 some don't. 287 288 *OLD* GAS requires the %cl argument, so override i386/unix.h. */ 289 290#undef AS3_SHIFT_DOUBLE 291#define AS3_SHIFT_DOUBLE(a,b,c,d) AS3 (a,b,c,d) 292 293/* Indicate that jump tables go in the text section. This is 294 necessary when compiling PIC code. */ | 287 } \ 288 fprintf (asmfile, "\n"); \ 289} while (0) 290 291 292/* Define macro used to output shift-double opcodes when the shift 293 count is in %cl. Some assemblers require %cl as an argument; 294 some don't. 295 296 *OLD* GAS requires the %cl argument, so override i386/unix.h. */ 297 298#undef AS3_SHIFT_DOUBLE 299#define AS3_SHIFT_DOUBLE(a,b,c,d) AS3 (a,b,c,d) 300 301/* Indicate that jump tables go in the text section. This is 302 necessary when compiling PIC code. */ |
303#undef JUMP_TABLES_IN_TEXT_SECTION |
|
295#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) 296 297/* override the exception table positioning */ | 304#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic) 305 306/* override the exception table positioning */ |
307#undef EXCEPTION_SECTION |
|
298#define EXCEPTION_SECTION() \ 299do { \ 300 if (TARGET_ELF) { \ 301 named_section (NULL_TREE, ".gcc_except_table", 0); \ 302 } else { \ 303 if (flag_pic) \ 304 data_section (); \ 305 else \ 306 readonly_data_section (); \ 307 } \ 308} while (0); 309 310/* supply our own hook for calling __main() from main() */ | 308#define EXCEPTION_SECTION() \ 309do { \ 310 if (TARGET_ELF) { \ 311 named_section (NULL_TREE, ".gcc_except_table", 0); \ 312 } else { \ 313 if (flag_pic) \ 314 data_section (); \ 315 else \ 316 readonly_data_section (); \ 317 } \ 318} while (0); 319 320/* supply our own hook for calling __main() from main() */ |
321#undef GEN_CALL__MAIN |
|
311#define GEN_CALL__MAIN \ 312 do { \ 313 if (!(TARGET_ELF)) \ 314 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \ 315 VOIDmode, 0); \ 316 } while (0) 317 318/* Copy this from the svr4 specifications... */ --- 60 unchanged lines hidden (view full) --- 379 : (n) == 4 ? 6 \ 380 : (n) == 5 ? 7 \ 381 : (n) == 6 ? 5 \ 382 : (n) == 7 ? 4 \ 383 : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \ 384 : (-1)) 385 386/* Now what stabs expects in the register. */ | 322#define GEN_CALL__MAIN \ 323 do { \ 324 if (!(TARGET_ELF)) \ 325 emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \ 326 VOIDmode, 0); \ 327 } while (0) 328 329/* Copy this from the svr4 specifications... */ --- 60 unchanged lines hidden (view full) --- 390 : (n) == 4 ? 6 \ 391 : (n) == 5 ? 7 \ 392 : (n) == 6 ? 5 \ 393 : (n) == 7 ? 4 \ 394 : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \ 395 : (-1)) 396 397/* Now what stabs expects in the register. */ |
398#undef STABS_DBX_REGISTER_NUMBER |
|
387#define STABS_DBX_REGISTER_NUMBER(n) \ 388((n) == 0 ? 0 : \ 389 (n) == 1 ? 2 : \ 390 (n) == 2 ? 1 : \ 391 (n) == 3 ? 3 : \ 392 (n) == 4 ? 6 : \ 393 (n) == 5 ? 7 : \ 394 (n) == 6 ? 4 : \ --- 12 unchanged lines hidden (view full) --- 407 for profiling a function entry. */ 408/* Redefine this to not pass an unused label in %edx. */ 409 410#undef FUNCTION_PROFILER 411#define FUNCTION_PROFILER(FILE, LABELNO) \ 412{ \ 413 if (flag_pic) \ 414 { \ | 399#define STABS_DBX_REGISTER_NUMBER(n) \ 400((n) == 0 ? 0 : \ 401 (n) == 1 ? 2 : \ 402 (n) == 2 ? 1 : \ 403 (n) == 3 ? 3 : \ 404 (n) == 4 ? 6 : \ 405 (n) == 5 ? 7 : \ 406 (n) == 6 ? 4 : \ --- 12 unchanged lines hidden (view full) --- 419 for profiling a function entry. */ 420/* Redefine this to not pass an unused label in %edx. */ 421 422#undef FUNCTION_PROFILER 423#define FUNCTION_PROFILER(FILE, LABELNO) \ 424{ \ 425 if (flag_pic) \ 426 { \ |
415 fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \ | 427 fprintf ((FILE), "\tcall *%s@GOT(%%ebx)\n", \ |
416 TARGET_AOUT ? "mcount" : ".mcount"); \ 417 } \ 418 else \ 419 { \ | 428 TARGET_AOUT ? "mcount" : ".mcount"); \ 429 } \ 430 else \ 431 { \ |
420 fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \ | 432 fprintf ((FILE), "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \ |
421 } \ 422} 423 | 433 } \ 434} 435 |
436#undef FUNCTION_PROFILER_EPILOGUE |
|
424#define FUNCTION_PROFILER_EPILOGUE(FILE) \ 425{ \ 426 if (TARGET_PROFILER_EPILOGUE) \ 427 { \ 428 if (flag_pic) \ | 437#define FUNCTION_PROFILER_EPILOGUE(FILE) \ 438{ \ 439 if (TARGET_PROFILER_EPILOGUE) \ 440 { \ 441 if (flag_pic) \ |
429 fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \ | 442 fprintf ((FILE), "\tcall *%s@GOT(%%ebx)\n", \ |
430 TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ 431 else \ | 443 TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ 444 else \ |
432 fprintf (FILE, "\tcall %s\n", \ | 445 fprintf ((FILE), "\tcall %s\n", \ |
433 TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ 434 } \ 435} 436 437#undef SIZE_TYPE 438#define SIZE_TYPE "unsigned int" 439 440#undef PTRDIFF_TYPE 441#define PTRDIFF_TYPE "int" | 446 TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ 447 } \ 448} 449 450#undef SIZE_TYPE 451#define SIZE_TYPE "unsigned int" 452 453#undef PTRDIFF_TYPE 454#define PTRDIFF_TYPE "int" |
442 | 455 |
443#undef WCHAR_TYPE 444#define WCHAR_TYPE "int" 445 | 456#undef WCHAR_TYPE 457#define WCHAR_TYPE "int" 458 |
459#undef WCHAR_UNSIGNED |
|
446#define WCHAR_UNSIGNED 0 447 448#undef WCHAR_TYPE_SIZE 449#define WCHAR_TYPE_SIZE BITS_PER_WORD | 460#define WCHAR_UNSIGNED 0 461 462#undef WCHAR_TYPE_SIZE 463#define WCHAR_TYPE_SIZE BITS_PER_WORD |
450 | 464 |
451#undef CPP_PREDEFINES 452#define CPP_PREDEFINES "-Di386 -Acpu(i386) -Amachine(i386)" CPP_FBSD_PREDEFINES 453 454#undef CPP_SPEC 455#if TARGET_CPU_DEFAULT == 2 456#define CPP_SPEC "\ 457%{!maout: -D__ELF__} \ 458%{munderscores: -D__UNDERSCORES__} \ --- 51 unchanged lines hidden (view full) --- 510/* A C statement to output to the stdio stream FILE an assembler 511 command to advance the location counter to a multiple of 1<<LOG 512 bytes if it is within MAX_SKIP bytes. 513 514 This is used to align code labels according to Intel recommendations. */ 515 516#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 517#error "we don't have this for the aout gas" | 465#undef CPP_PREDEFINES 466#define CPP_PREDEFINES "-Di386 -Acpu(i386) -Amachine(i386)" CPP_FBSD_PREDEFINES 467 468#undef CPP_SPEC 469#if TARGET_CPU_DEFAULT == 2 470#define CPP_SPEC "\ 471%{!maout: -D__ELF__} \ 472%{munderscores: -D__UNDERSCORES__} \ --- 51 unchanged lines hidden (view full) --- 524/* A C statement to output to the stdio stream FILE an assembler 525 command to advance the location counter to a multiple of 1<<LOG 526 bytes if it is within MAX_SKIP bytes. 527 528 This is used to align code labels according to Intel recommendations. */ 529 530#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN 531#error "we don't have this for the aout gas" |
518#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ 519 if ((LOG)!=0) \ 520 if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ | 532#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ 533 if ((LOG)!=0) \ 534 if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ |
521 else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)) 522#endif 523 524#undef STARTFILE_SPEC 525#define STARTFILE_SPEC "\ 526 %{maout: %{shared:c++rt0.o%s} \ 527 %{!shared:%{pg:gcrt0.o%s}%{!pg:%{static:scrt0.o%s}%{!static:crt0.o%s}}}} \ 528 %{!maout: %{!shared: \ --- 16 unchanged lines hidden --- | 535 else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)) 536#endif 537 538#undef STARTFILE_SPEC 539#define STARTFILE_SPEC "\ 540 %{maout: %{shared:c++rt0.o%s} \ 541 %{!shared:%{pg:gcrt0.o%s}%{!pg:%{static:scrt0.o%s}%{!static:crt0.o%s}}}} \ 542 %{!maout: %{!shared: \ --- 16 unchanged lines hidden --- |