OSDN Git Service

config:
[pf3gnuchains/gcc-fork.git] / gcc / defaults.h
index 7234206..b6fe9ec 100644 (file)
@@ -1,10 +1,9 @@
 /* Definitions of various defaults for how to do assembler output
    (most of which are designed to be appropriate for GAS or for
    some BSD assembler).
-
-   Written by Ron Guilmette (rfg@ncd.com)
-
-Copyright (C) 1992 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1996, 1997, 1998, 1999, 2000
+   Free Software Foundation, Inc.
+   Contributed by Ron Guilmette (rfg@monkeys.com)
 
 This file is part of GNU CC.
 
@@ -20,7 +19,11 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with GNU CC; see the file COPYING.  If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#ifndef GCC_DEFAULTS_H
+#define GCC_DEFAULTS_H
 
 /* Store in OUTPUT a string (made with alloca) containing
    an assembler-name for a local static variable or function named NAME.
@@ -41,7 +44,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #endif
 
 #ifndef ASM_STABD_OP
-#define ASM_STABD_OP ".stabd"
+#define ASM_STABD_OP "\t.stabd\t"
 #endif
 
 /* This is how to output an element of a case-vector that is absolute.
@@ -55,17 +58,10 @@ do { fprintf (FILE, "\t%s\t", ASM_LONG);                            \
    } while (0)
 #endif
 
-/* This is how to output an element of a case-vector that is relative.
-   Some targets don't use this, but we have to define it anyway.  */
-
-#ifndef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
-do { fprintf (FILE, "\t%s\t", ASM_SHORT);                              \
-     ASM_GENERATE_INTERNAL_LABEL (FILE, "L", (VALUE));                 \
-     fputc ('-', FILE);                                                        \
-     ASM_GENERATE_INTERNAL_LABEL (FILE, "L", (REL));                   \
-     fputc ('\n', FILE);                                               \
-   } while (0)
+/* Provide default for ASM_OUTPUT_ALTERNATE_LABEL_NAME.  */
+#ifndef ASM_OUTPUT_ALTERNATE_LABEL_NAME
+#define ASM_OUTPUT_ALTERNATE_LABEL_NAME(FILE,INSN) \
+do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
 #endif
 
 /* choose a reasonable default for ASM_OUTPUT_ASCII.  */
@@ -74,11 +70,11 @@ do { fprintf (FILE, "\t%s\t", ASM_SHORT);                           \
 #define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
   do {                                                                       \
     FILE *_hide_asm_out_file = (MYFILE);                                     \
-    unsigned char *_hide_p = (unsigned char *) (MYSTRING);                   \
+    const unsigned char *_hide_p = (const unsigned char *) (MYSTRING);       \
     int _hide_thissize = (MYLENGTH);                                         \
     {                                                                        \
       FILE *asm_out_file = _hide_asm_out_file;                               \
-      unsigned char *p = _hide_p;                                            \
+      const unsigned char *p = _hide_p;                                              \
       int thissize = _hide_thissize;                                         \
       int i;                                                                 \
       fprintf (asm_out_file, "\t.ascii \"");                                 \
@@ -88,7 +84,7 @@ do { fprintf (FILE, "\t%s\t", ASM_SHORT);                             \
          register int c = p[i];                                              \
          if (c == '\"' || c == '\\')                                         \
            putc ('\\', asm_out_file);                                        \
-         if (c >= ' ' && c < 0177)                                           \
+         if (ISPRINT(c))                                                     \
            putc (c, asm_out_file);                                           \
          else                                                                \
            {                                                                 \
@@ -98,8 +94,7 @@ do { fprintf (FILE, "\t%s\t", ASM_SHORT);                             \
                 The Vax assembler fails to stop reading the escape           \
                 after three digits, so this is the only way we               \
                 can get it to parse the data properly.  */                   \
-             if (i < thissize - 1                                            \
-                 && p[i + 1] >= '0' && p[i + 1] <= '9')                      \
+             if (i < thissize - 1 && ISDIGIT(p[i + 1]))                      \
                fprintf (asm_out_file, "\"\n\t.ascii \"");                    \
          }                                                                   \
        }                                                                     \
@@ -118,3 +113,144 @@ do { fprintf (FILE, "\t%s\t", ASM_SHORT);                         \
 #define ASM_IDENTIFY_LANGUAGE(FILE) output_lang_identify (FILE);
 #endif
 #endif
+
+/* This is how we tell the assembler to equate two values.  */
+#ifdef SET_ASM_OP
+#ifndef ASM_OUTPUT_DEF
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)                             \
+ do {  fprintf ((FILE), "%s", SET_ASM_OP);                             \
+       assemble_name (FILE, LABEL1);                                   \
+       fprintf (FILE, ",");                                            \
+       assemble_name (FILE, LABEL2);                                   \
+       fprintf (FILE, "\n");                                           \
+  } while (0)
+#endif
+#endif
+
+/* This is how to output a reference to a user-level label named NAME.  */
+
+#ifndef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(FILE,NAME)  asm_fprintf ((FILE), "%U%s", (NAME))
+#endif
+
+/* Allow target to print debug info labels specially.  This is useful for
+   VLIW targets, since debug info labels should go into the middle of
+   instruction bundles instead of breaking them.  */
+
+#ifndef ASM_OUTPUT_DEBUG_LABEL
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+  ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM)
+#endif
+
+/* This determines whether or not we support weak symbols.  */
+#ifndef SUPPORTS_WEAK
+#ifdef ASM_WEAKEN_LABEL
+#define SUPPORTS_WEAK 1
+#else
+#define SUPPORTS_WEAK 0
+#endif
+#endif
+
+/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to
+   provide a weak attribute.  Else define it to nothing. 
+
+   This would normally belong in gansidecl.h, but SUPPORTS_WEAK is
+   not available at that time.
+
+   Note, this is only for use by target files which we know are to be
+   compiled by GCC.  */
+#ifndef TARGET_ATTRIBUTE_WEAK
+# if SUPPORTS_WEAK
+#  define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak))
+# else
+#  define TARGET_ATTRIBUTE_WEAK
+# endif
+#endif
+
+/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
+   the rest of the DWARF 2 frame unwind support is also provided.  */
+#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
+#define DWARF2_UNWIND_INFO 1
+#endif
+
+#if defined (DWARF2_UNWIND_INFO) && !defined (EH_FRAME_SECTION)
+# if defined (EH_FRAME_SECTION_ASM_OP)
+#  define EH_FRAME_SECTION() eh_frame_section();
+# else
+   /* If we aren't using crtstuff to run ctors, don't use it for EH.  */
+#  if defined (ASM_OUTPUT_SECTION_NAME) && defined (ASM_OUTPUT_CONSTRUCTOR)
+#   define EH_FRAME_SECTION_ASM_OP     "\t.section\t.eh_frame,\"aw\""
+#   define EH_FRAME_SECTION() \
+     do { named_section (NULL_TREE, ".eh_frame", 0); } while (0)
+#  endif
+# endif
+#endif
+
+/* By default, we generate a label at the beginning and end of the
+   text section, and compute the size of the text section by
+   subtracting the two.  However, on some platforms that doesn't 
+   work, and we use the section itself, rather than a label at the
+   beginning of it, to indicate the start of the section.  On such
+   platforms, define this to zero.  */
+#ifndef DWARF2_GENERATE_TEXT_SECTION_LABEL
+#define DWARF2_GENERATE_TEXT_SECTION_LABEL 1
+#endif
+
+/* Supply a default definition for PROMOTE_PROTOTYPES.  */
+#ifndef PROMOTE_PROTOTYPES
+#define PROMOTE_PROTOTYPES     0
+#endif
+
+/* Number of hardware registers that go into the DWARF-2 unwind info.
+   If not defined, equals FIRST_PSEUDO_REGISTER  */
+
+#ifndef DWARF_FRAME_REGISTERS
+#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
+#endif
+
+/* Default sizes for base C types.  If the sizes are different for
+   your target, you should override these values by defining the
+   appropriate symbols in your tm.h file.  */
+
+#ifndef CHAR_TYPE_SIZE
+#define CHAR_TYPE_SIZE BITS_PER_UNIT
+#endif
+
+#ifndef SHORT_TYPE_SIZE
+#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
+#endif
+
+#ifndef INT_TYPE_SIZE
+#define INT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_TYPE_SIZE
+#define LONG_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_LONG_TYPE_SIZE
+#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#ifndef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
+#endif
+
+#ifndef WCHAR_UNSIGNED
+#define WCHAR_UNSIGNED 0
+#endif
+
+#ifndef FLOAT_TYPE_SIZE
+#define FLOAT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef DOUBLE_TYPE_SIZE
+#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#ifndef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#endif  /* GCC_DEFAULTS_H */
+