OSDN Git Service

6d12e095565a8168cf01bef1527982fd4831eab8
[pf3gnuchains/gcc-fork.git] / gcc / defaults.h
1 /* Definitions of various defaults for tm.h macros.
2    Copyright (C) 1992, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3    Free Software Foundation, Inc.
4    Contributed by Ron Guilmette (rfg@monkeys.com)
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA.  */
22
23 #ifndef GCC_DEFAULTS_H
24 #define GCC_DEFAULTS_H
25
26 #ifndef GET_ENVIRONMENT
27 #define GET_ENVIRONMENT(VALUE, NAME) do { (VALUE) = getenv (NAME); } while (0)
28 #endif
29
30 #define obstack_chunk_alloc xmalloc
31 #define obstack_chunk_free free
32
33 /* Define default standard character escape sequences.  */
34 #ifndef TARGET_BELL
35 #  define TARGET_BELL 007
36 #  define TARGET_BS 010
37 #  define TARGET_TAB 011
38 #  define TARGET_NEWLINE 012
39 #  define TARGET_VT 013
40 #  define TARGET_FF 014
41 #  define TARGET_CR 015
42 #  define TARGET_ESC 033
43 #endif
44
45 /* When removal of CPP_PREDEFINES is complete, TARGET_CPU_CPP_BULITINS
46    can also be removed from here.  */
47 #ifndef TARGET_OS_CPP_BUILTINS
48 # define TARGET_OS_CPP_BUILTINS()
49 #endif
50 #ifndef TARGET_CPU_CPP_BUILTINS
51 # define TARGET_CPU_CPP_BUILTINS()
52 #endif
53 #ifndef CPP_PREDEFINES
54 # define CPP_PREDEFINES ""
55 #endif
56
57 /* Store in OUTPUT a string (made with alloca) containing
58    an assembler-name for a local static variable or function named NAME.
59    LABELNO is an integer which is different for each call.  */
60
61 #ifndef ASM_FORMAT_PRIVATE_NAME
62 #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)                  \
63   do {                                                                  \
64     int len = strlen (NAME);                                            \
65     char *temp = (char *) alloca (len + 3);                             \
66     temp[0] = 'L';                                                      \
67     strcpy (&temp[1], (NAME));                                          \
68     temp[len + 1] = '.';                                                \
69     temp[len + 2] = 0;                                                  \
70     (OUTPUT) = (char *) alloca (strlen (NAME) + 11);                    \
71     ASM_GENERATE_INTERNAL_LABEL (OUTPUT, temp, LABELNO);                \
72   } while (0)
73 #endif
74
75 #ifndef ASM_STABD_OP
76 #define ASM_STABD_OP "\t.stabd\t"
77 #endif
78
79 /* This is how to output an element of a case-vector that is absolute.
80    Some targets don't use this, but we have to define it anyway.  */
81
82 #ifndef ASM_OUTPUT_ADDR_VEC_ELT
83 #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)  \
84 do { fputs (integer_asm_op (POINTER_SIZE / UNITS_PER_WORD, TRUE), FILE); \
85      ASM_OUTPUT_INTERNAL_LABEL (FILE, "L", (VALUE));                    \
86      fputc ('\n', FILE);                                                \
87    } while (0)
88 #endif
89
90 /* choose a reasonable default for ASM_OUTPUT_ASCII.  */
91
92 #ifndef ASM_OUTPUT_ASCII
93 #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
94   do {                                                                        \
95     FILE *_hide_asm_out_file = (MYFILE);                                      \
96     const unsigned char *_hide_p = (const unsigned char *) (MYSTRING);        \
97     int _hide_thissize = (MYLENGTH);                                          \
98     {                                                                         \
99       FILE *asm_out_file = _hide_asm_out_file;                                \
100       const unsigned char *p = _hide_p;                                       \
101       int thissize = _hide_thissize;                                          \
102       int i;                                                                  \
103       fprintf (asm_out_file, "\t.ascii \"");                                  \
104                                                                               \
105       for (i = 0; i < thissize; i++)                                          \
106         {                                                                     \
107           int c = p[i];                                                       \
108           if (c == '\"' || c == '\\')                                         \
109             putc ('\\', asm_out_file);                                        \
110           if (ISPRINT(c))                                                     \
111             putc (c, asm_out_file);                                           \
112           else                                                                \
113             {                                                                 \
114               fprintf (asm_out_file, "\\%o", c);                              \
115               /* After an octal-escape, if a digit follows,                   \
116                  terminate one string constant and start another.             \
117                  The VAX assembler fails to stop reading the escape           \
118                  after three digits, so this is the only way we               \
119                  can get it to parse the data properly.  */                   \
120               if (i < thissize - 1 && ISDIGIT(p[i + 1]))                      \
121                 fprintf (asm_out_file, "\"\n\t.ascii \"");                    \
122           }                                                                   \
123         }                                                                     \
124       fprintf (asm_out_file, "\"\n");                                         \
125     }                                                                         \
126   }                                                                           \
127   while (0)
128 #endif
129
130 /* This is how we tell the assembler to equate two values.  */
131 #ifdef SET_ASM_OP
132 #ifndef ASM_OUTPUT_DEF
133 #define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)                              \
134  do {   fprintf ((FILE), "%s", SET_ASM_OP);                             \
135         assemble_name (FILE, LABEL1);                                   \
136         fprintf (FILE, ",");                                            \
137         assemble_name (FILE, LABEL2);                                   \
138         fprintf (FILE, "\n");                                           \
139   } while (0)
140 #endif
141 #endif
142
143 /* This is how to output a reference to a user-level label named NAME.  */
144
145 #ifndef ASM_OUTPUT_LABELREF
146 #define ASM_OUTPUT_LABELREF(FILE,NAME)  asm_fprintf ((FILE), "%U%s", (NAME))
147 #endif
148
149 /* Allow target to print debug info labels specially.  This is useful for
150    VLIW targets, since debug info labels should go into the middle of
151    instruction bundles instead of breaking them.  */
152
153 #ifndef ASM_OUTPUT_DEBUG_LABEL
154 #define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
155   ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
156 #endif
157
158 /* This is how we tell the assembler that a symbol is weak.  */
159 #ifndef ASM_OUTPUT_WEAK_ALIAS
160 #if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF)
161 #define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE)      \
162   do                                                    \
163     {                                                   \
164       ASM_WEAKEN_LABEL (STREAM, NAME);                  \
165       if (VALUE)                                        \
166         ASM_OUTPUT_DEF (STREAM, NAME, VALUE);           \
167     }                                                   \
168   while (0)
169 #endif
170 #endif
171
172 /* This determines whether or not we support weak symbols.  */
173 #ifndef SUPPORTS_WEAK
174 #if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
175 #define SUPPORTS_WEAK 1
176 #else
177 #define SUPPORTS_WEAK 0
178 #endif
179 #endif
180
181 /* This determines whether or not we support link-once semantics.  */
182 #ifndef SUPPORTS_ONE_ONLY
183 #ifdef MAKE_DECL_ONE_ONLY
184 #define SUPPORTS_ONE_ONLY 1
185 #else
186 #define SUPPORTS_ONE_ONLY 0
187 #endif
188 #endif
189
190 /* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to
191    provide a weak attribute.  Else define it to nothing. 
192
193    This would normally belong in ansidecl.h, but SUPPORTS_WEAK is
194    not available at that time.
195
196    Note, this is only for use by target files which we know are to be
197    compiled by GCC.  */
198 #ifndef TARGET_ATTRIBUTE_WEAK
199 # if SUPPORTS_WEAK
200 #  define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak))
201 # else
202 #  define TARGET_ATTRIBUTE_WEAK
203 # endif
204 #endif
205
206 /* If the target supports init_priority C++ attribute, give
207    SUPPORTS_INIT_PRIORITY a nonzero value.  */
208 #ifndef SUPPORTS_INIT_PRIORITY
209 #define SUPPORTS_INIT_PRIORITY 1
210 #endif /* SUPPORTS_INIT_PRIORITY */
211
212 /* If duplicate library search directories can be removed from a
213    linker command without changing the linker's semantics, give this
214    symbol a nonzero.  */
215 #ifndef LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
216 #define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 0
217 #endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
218
219 /* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
220    the rest of the DWARF 2 frame unwind support is also provided.  */
221 #if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
222 #define DWARF2_UNWIND_INFO 1
223 #endif
224
225 /* If we have named sections, and we're using crtstuff to run ctors,
226    use them for registering eh frame information.  */
227 #if defined (TARGET_ASM_NAMED_SECTION) && DWARF2_UNWIND_INFO \
228     && !defined(EH_FRAME_IN_DATA_SECTION)
229 #ifndef EH_FRAME_SECTION_NAME
230 #define EH_FRAME_SECTION_NAME ".eh_frame"
231 #endif
232 #endif
233
234 /* If we have named section and we support weak symbols, then use the
235    .jcr section for recording java classes which need to be registered
236    at program start-up time.  */
237 #if defined (TARGET_ASM_NAMED_SECTION) && SUPPORTS_WEAK
238 #ifndef JCR_SECTION_NAME
239 #define JCR_SECTION_NAME ".jcr"
240 #endif
241 #endif
242
243 /* By default, we generate a label at the beginning and end of the
244    text section, and compute the size of the text section by
245    subtracting the two.  However, on some platforms that doesn't 
246    work, and we use the section itself, rather than a label at the
247    beginning of it, to indicate the start of the section.  On such
248    platforms, define this to zero.  */
249 #ifndef DWARF2_GENERATE_TEXT_SECTION_LABEL
250 #define DWARF2_GENERATE_TEXT_SECTION_LABEL 1
251 #endif
252
253 /* Supply a default definition for PROMOTE_PROTOTYPES.  */
254 #ifndef PROMOTE_PROTOTYPES
255 #define PROMOTE_PROTOTYPES      0
256 #endif
257
258 /* Number of hardware registers that go into the DWARF-2 unwind info.
259    If not defined, equals FIRST_PSEUDO_REGISTER  */
260
261 #ifndef DWARF_FRAME_REGISTERS
262 #define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
263 #endif
264
265 /* How to renumber registers for dbx and gdb.  If not defined, assume
266    no renumbering is necessary.  */
267
268 #ifndef DBX_REGISTER_NUMBER
269 #define DBX_REGISTER_NUMBER(REGNO) (REGNO)
270 #endif
271
272 /* Default sizes for base C types.  If the sizes are different for
273    your target, you should override these values by defining the
274    appropriate symbols in your tm.h file.  */
275
276 #ifndef BITS_PER_UNIT
277 #define BITS_PER_UNIT 8
278 #endif
279
280 #ifndef BITS_PER_WORD
281 #define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD)
282 #endif
283
284 #ifndef CHAR_TYPE_SIZE
285 #define CHAR_TYPE_SIZE BITS_PER_UNIT
286 #endif
287
288 #ifndef BOOL_TYPE_SIZE
289 /* `bool' has size and alignment `1', on almost all platforms.  */
290 #define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
291 #endif
292
293 #ifndef SHORT_TYPE_SIZE
294 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
295 #endif
296
297 #ifndef INT_TYPE_SIZE
298 #define INT_TYPE_SIZE BITS_PER_WORD
299 #endif
300
301 #ifndef LONG_TYPE_SIZE
302 #define LONG_TYPE_SIZE BITS_PER_WORD
303 #endif
304
305 #ifndef LONG_LONG_TYPE_SIZE
306 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
307 #endif
308
309 #ifndef WCHAR_TYPE_SIZE
310 #define WCHAR_TYPE_SIZE INT_TYPE_SIZE
311 #endif
312
313 #ifndef FLOAT_TYPE_SIZE
314 #define FLOAT_TYPE_SIZE BITS_PER_WORD
315 #endif
316
317 #ifndef DOUBLE_TYPE_SIZE
318 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
319 #endif
320
321 #ifndef LONG_DOUBLE_TYPE_SIZE
322 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
323 #endif
324
325 /* Width in bits of a pointer.  Mind the value of the macro `Pmode'.  */
326 #ifndef POINTER_SIZE
327 #define POINTER_SIZE BITS_PER_WORD
328 #endif
329
330 #ifndef BUILD_VA_LIST_TYPE
331 #define BUILD_VA_LIST_TYPE(X) ((X) = ptr_type_node)
332 #endif
333
334 #ifndef PIC_OFFSET_TABLE_REGNUM
335 #define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM
336 #endif
337
338 /* Type used by GCOV counters.  Use 64bit data type if target supports
339    it.  */
340 #if LONG_TYPE_SIZE >= 64
341 #define GCOV_TYPE_SIZE LONG_TYPE_SIZE
342 #else
343 #define GCOV_TYPE_SIZE LONG_LONG_TYPE_SIZE
344 #endif
345
346
347 /* By default, the preprocessor should be invoked the same way in C++
348    as in C.  */
349 #ifndef CPLUSPLUS_CPP_SPEC
350 #ifdef CPP_SPEC
351 #define CPLUSPLUS_CPP_SPEC CPP_SPEC
352 #endif
353 #endif
354
355 #ifndef ACCUMULATE_OUTGOING_ARGS
356 #define ACCUMULATE_OUTGOING_ARGS 0
357 #endif
358
359 /* Supply a default definition for PUSH_ARGS.  */
360 #ifndef PUSH_ARGS
361 #ifdef PUSH_ROUNDING
362 #define PUSH_ARGS       !ACCUMULATE_OUTGOING_ARGS
363 #else
364 #define PUSH_ARGS       0
365 #endif
366 #endif
367
368 /* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY.
369    STACK_BOUNDARY is required.  */
370 #ifndef PREFERRED_STACK_BOUNDARY
371 #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
372 #endif
373
374 /* By default, the C++ compiler will use function addresses in the
375    vtable entries.  Setting this non-zero tells the compiler to use
376    function descriptors instead.  The value of this macro says how
377    many words wide the descriptor is (normally 2).  It is assumed 
378    that the address of a function descriptor may be treated as a
379    pointer to a function.  */
380 #ifndef TARGET_VTABLE_USES_DESCRIPTORS
381 #define TARGET_VTABLE_USES_DESCRIPTORS 0
382 #endif
383
384 /* By default, the vtable entries are void pointers, the so the alignment
385    is the same as pointer alignment.  The value of this macro specifies
386    the alignment of the vtable entry in bits.  It should be defined only
387    when special alignment is necessary. */
388 #ifndef TARGET_VTABLE_ENTRY_ALIGN
389 #define TARGET_VTABLE_ENTRY_ALIGN POINTER_SIZE
390 #endif
391
392 /* There are a few non-descriptor entries in the vtable at offsets below
393    zero.  If these entries must be padded (say, to preserve the alignment
394    specified by TARGET_VTABLE_ENTRY_ALIGN), set this to the number of
395    words in each data entry.  */
396 #ifndef TARGET_VTABLE_DATA_ENTRY_DISTANCE
397 #define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1
398 #endif
399
400 /* Select a format to encode pointers in exception handling data.  We
401    prefer those that result in fewer dynamic relocations.  Assume no
402    special support here and encode direct references.  */
403 #ifndef ASM_PREFERRED_EH_DATA_FORMAT
404 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)  DW_EH_PE_absptr
405 #endif
406
407 /* By default, the C++ compiler will use the lowest bit of the pointer
408    to function to indicate a pointer-to-member-function points to a
409    virtual member function.  However, if FUNCTION_BOUNDARY indicates
410    function addresses aren't always even, the lowest bit of the delta
411    field will be used.  */
412 #ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION
413 #define TARGET_PTRMEMFUNC_VBIT_LOCATION \
414   (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \
415    ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta)
416 #endif
417
418 #ifndef DEFAULT_GDB_EXTENSIONS
419 #define DEFAULT_GDB_EXTENSIONS 1
420 #endif
421
422 /* If more than one debugging type is supported, you must define
423    PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way.
424
425    This is one long line cause VAXC can't handle a \-newline.  */
426 #if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) + defined (VMS_DEBUGGING_INFO))
427 #ifndef PREFERRED_DEBUGGING_TYPE
428 You Lose!  You must define PREFERRED_DEBUGGING_TYPE!
429 #endif /* no PREFERRED_DEBUGGING_TYPE */
430 #else /* Only one debugging format supported.  Define PREFERRED_DEBUGGING_TYPE
431          so other code needn't care.  */
432 #ifdef DBX_DEBUGGING_INFO
433 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
434 #endif
435 #ifdef SDB_DEBUGGING_INFO
436 #define PREFERRED_DEBUGGING_TYPE SDB_DEBUG
437 #endif
438 #ifdef DWARF_DEBUGGING_INFO
439 #define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
440 #endif
441 #ifdef DWARF2_DEBUGGING_INFO
442 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
443 #endif
444 #ifdef VMS_DEBUGGING_INFO
445 #define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG
446 #endif
447 #ifdef XCOFF_DEBUGGING_INFO
448 #define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG
449 #endif
450 #endif /* More than one debugger format enabled.  */
451
452 /* If still not defined, must have been because no debugging formats
453    are supported.  */
454 #ifndef PREFERRED_DEBUGGING_TYPE
455 #define PREFERRED_DEBUGGING_TYPE NO_DEBUG
456 #endif
457
458 /* This is set to 1 if BYTES_BIG_ENDIAN is defined but the target uses a
459    little-endian method of passing and returning structures in registers.
460    On the HP-UX IA64 and PA64 platforms structures are aligned differently
461    then integral values and setting this value to 1 will allow for the
462    special handling of structure arguments and return values in regs.  */
463
464 #ifndef FUNCTION_ARG_REG_LITTLE_ENDIAN
465 #define FUNCTION_ARG_REG_LITTLE_ENDIAN 0
466 #endif
467
468 /* Determine the register class for registers suitable to be the base
469    address register in a MEM.  Allow the choice to be dependent upon
470    the mode of the memory access.  */
471 #ifndef MODE_BASE_REG_CLASS
472 #define MODE_BASE_REG_CLASS(MODE) BASE_REG_CLASS
473 #endif
474
475 #ifndef LARGEST_EXPONENT_IS_NORMAL
476 #define LARGEST_EXPONENT_IS_NORMAL(SIZE) 0
477 #endif
478
479 #ifndef ROUND_TOWARDS_ZERO
480 #define ROUND_TOWARDS_ZERO 0
481 #endif
482
483 #ifndef MODE_HAS_NANS
484 #define MODE_HAS_NANS(MODE)                                     \
485   (FLOAT_MODE_P (MODE)                                          \
486    && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT                  \
487    && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE)))
488 #endif
489
490 #ifndef MODE_HAS_INFINITIES
491 #define MODE_HAS_INFINITIES(MODE)                               \
492   (FLOAT_MODE_P (MODE)                                          \
493    && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT                  \
494    && !LARGEST_EXPONENT_IS_NORMAL (GET_MODE_BITSIZE (MODE)))
495 #endif
496
497 #ifndef MODE_HAS_SIGNED_ZEROS
498 #define MODE_HAS_SIGNED_ZEROS(MODE) \
499   (FLOAT_MODE_P (MODE) && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
500 #endif
501
502 #ifndef MODE_HAS_SIGN_DEPENDENT_ROUNDING
503 #define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE)                  \
504   (FLOAT_MODE_P (MODE)                                          \
505    && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT                  \
506    && !ROUND_TOWARDS_ZERO)
507 #endif
508
509 #ifndef HOT_TEXT_SECTION_NAME
510 #define HOT_TEXT_SECTION_NAME "text.hot"
511 #endif
512
513 #ifndef UNLIKELY_EXECUTED_TEXT_SECTION_NAME
514 #define UNLIKELY_EXECUTED_TEXT_SECTION_NAME "text.unlikely"
515 #endif
516
517 #ifndef VECTOR_MODE_SUPPORTED_P
518 #define VECTOR_MODE_SUPPORTED_P(MODE) 0
519 #endif
520
521 /* Determine whether __cxa_atexit, rather than atexit, is used to
522    register C++ destructors for local statics and global objects. */
523 #ifndef DEFAULT_USE_CXA_ATEXIT
524 #define DEFAULT_USE_CXA_ATEXIT 0
525 #endif
526
527 #endif  /* ! GCC_DEFAULTS_H */