OSDN Git Service

2002-05-27 H.J. Lu (hjl@gnu.org)
[pf3gnuchains/gcc-fork.git] / gcc / config / darwin.h
index c5a078b..0de2414 100644 (file)
@@ -208,7 +208,7 @@ do { text_section ();                                                       \
     if ((TREE_STATIC (DECL)                                             \
         && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL)))               \
         || DECL_INITIAL (DECL))                                         \
-      ENCODE_SECTION_INFO (DECL, false);                               \
+      (* targetm.encode_section_info) (DECL, false);                   \
     ASM_OUTPUT_LABEL (FILE, xname);                                     \
   } while (0)
 
@@ -224,7 +224,7 @@ do { text_section ();                                                       \
     if ((TREE_STATIC (DECL)                                             \
         && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL)))               \
         || DECL_INITIAL (DECL))                                         \
-      ENCODE_SECTION_INFO (DECL, false);                               \
+      (* targetm.encode_section_info) (DECL, false);                   \
     ASM_OUTPUT_LABEL (FILE, xname);                                     \
     /* Avoid generating stubs for functions we've just defined by      \
        outputting any required stub name label now.  */                        \
@@ -235,28 +235,28 @@ do { text_section ();                                                     \
    Make Objective-C internal symbols local.  */
 
 #undef ASM_OUTPUT_LABELREF
-#define ASM_OUTPUT_LABELREF(FILE,NAME) \
-  do {                                                                 \
-       STRIP_NAME_ENCODING (NAME, NAME);  \
-       if (NAME[0] == '&' || NAME[0] == '*')                           \
-         {                                                             \
-           int len = strlen (NAME);                                    \
-          if (len > 6 && !strcmp ("$stub", NAME + len - 5))            \
-            machopic_validate_stub_or_non_lazy_ptr (NAME, 1);          \
-          else if (len > 7 && !strcmp ("$stub\"", NAME + len - 6))     \
-            machopic_validate_stub_or_non_lazy_ptr (NAME, 1);          \
-          else if (len > 14 && !strcmp ("$non_lazy_ptr", NAME + len - 13)) \
-            machopic_validate_stub_or_non_lazy_ptr (NAME, 0);          \
-          fputs (&NAME[1], FILE); \
-        } \
-       else if (NAME[0] == '+' || NAME[0] == '-')   \
-         fprintf (FILE, "\"%s\"", NAME); \
-       else if (!strncmp (NAME, "_OBJC_", 6))  \
-         fprintf (FILE, "L%s", NAME);   \
-       else if (!strncmp (NAME, ".objc_class_name_", 17))              \
-        fprintf (FILE, "%s", NAME);                                    \
-       else                                                            \
-         fprintf (FILE, "_%s", NAME);                                  \
+#define ASM_OUTPUT_LABELREF(FILE,NAME)                                      \
+  do {                                                                      \
+       const char *xname = darwin_strip_name_encoding (NAME);               \
+       if (xname[0] == '&' || xname[0] == '*')                              \
+         {                                                                  \
+           int len = strlen (xname);                                        \
+          if (len > 6 && !strcmp ("$stub", xname + len - 5))                \
+            machopic_validate_stub_or_non_lazy_ptr (xname, 1);              \
+          else if (len > 7 && !strcmp ("$stub\"", xname + len - 6))         \
+            machopic_validate_stub_or_non_lazy_ptr (xname, 1);              \
+          else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \
+            machopic_validate_stub_or_non_lazy_ptr (xname, 0);              \
+          fputs (&xname[1], FILE);                                          \
+        }                                                                   \
+       else if (xname[0] == '+' || xname[0] == '-')                         \
+         fprintf (FILE, "\"%s\"", xname);                                   \
+       else if (!strncmp (xname, "_OBJC_", 6))                              \
+         fprintf (FILE, "L%s", xname);                                      \
+       else if (!strncmp (xname, ".objc_class_name_", 17))                  \
+        fprintf (FILE, "%s", xname);                                        \
+       else                                                                 \
+         fprintf (FILE, "_%s", xname);                                      \
   } while (0)
 
 #undef ALIGN_ASM_OP
@@ -279,7 +279,7 @@ do { text_section ();                                                       \
     if ((DECL) && ((TREE_STATIC (DECL)                                 \
         && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL)))               \
         || DECL_INITIAL (DECL)))                                       \
-      ENCODE_SECTION_INFO (DECL, false);                               \
+      (* targetm.encode_section_info) (DECL, false);                   \
     if ((DECL) && ((TREE_STATIC (DECL)                                 \
         && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL)))               \
         || DECL_INITIAL (DECL)))                                       \
@@ -316,11 +316,6 @@ FUNCTION ()                                                                \
     }                                                                  \
 }                                                                      \
 
-#define ALIAS_SECTION(enum_value, alias_name)                          \
-do { if (!strcmp (alias_name, name))                                   \
-       section_alias[enum_value] = (alias ? get_identifier (alias) : 0);  \
-   } while (0)
-
 /* Darwin uses many types of special sections.  */
 
 #undef EXTRA_SECTIONS
@@ -486,174 +481,14 @@ objc_section_init ()                             \
       objc_module_info_section ();             \
       objc_symbols_section ();                 \
     }                                          \
-}                                              \
-static tree section_alias[(int) num_sections]; \
-static void try_section_alias PARAMS ((void)); \
-static void try_section_alias ()               \
-{                                              \
-    if (section_alias[in_section] && asm_out_file) \
-      fprintf (asm_out_file, "%s\n",           \
-              IDENTIFIER_POINTER (section_alias[in_section])); \
-}                                                      \
-
-#if 0
-static void alias_section PARAMS ((const char *, const char *)); \
-static void alias_section (name, alias)                        \
-     const char *name, *alias;                         \
-{                                                      \
-    ALIAS_SECTION (in_data, "data");                   \
-    ALIAS_SECTION (in_text, "text");                   \
-    ALIAS_SECTION (in_const, "const");                 \
-    ALIAS_SECTION (in_const_data, "const_data");       \
-    ALIAS_SECTION (in_cstring, "cstring");             \
-    ALIAS_SECTION (in_literal4, "literal4");           \
-    ALIAS_SECTION (in_literal8, "literal8");           \
 }
-#endif
 
-#undef READONLY_DATA_SECTION
 #define READONLY_DATA_SECTION const_section
 
-#undef SELECT_SECTION
-#define SELECT_SECTION(exp,reloc,align)                                \
-  do                                                           \
-    {                                                          \
-      if (TREE_CODE (exp) == STRING_CST)                       \
-       {                                                       \
-         if (flag_writable_strings)                            \
-           data_section ();                                    \
-         else if (TREE_STRING_LENGTH (exp) !=                  \
-                  strlen (TREE_STRING_POINTER (exp)) + 1)      \
-           readonly_data_section ();                           \
-         else                                                  \
-           cstring_section ();                                 \
-       }                                                       \
-      else if (TREE_CODE (exp) == INTEGER_CST                  \
-              || TREE_CODE (exp) == REAL_CST)                  \
-        {                                                      \
-         tree size = TYPE_SIZE (TREE_TYPE (exp));              \
-                                                               \
-         if (TREE_CODE (size) == INTEGER_CST &&                \
-             TREE_INT_CST_LOW (size) == 4 &&                   \
-             TREE_INT_CST_HIGH (size) == 0)                    \
-           literal4_section ();                                \
-         else if (TREE_CODE (size) == INTEGER_CST &&           \
-             TREE_INT_CST_LOW (size) == 8 &&                   \
-             TREE_INT_CST_HIGH (size) == 0)                    \
-           literal8_section ();                                \
-         else                                                  \
-           readonly_data_section ();                           \
-       }                                                       \
-      else if (TREE_CODE (exp) == CONSTRUCTOR                          \
-              && TREE_TYPE (exp)                                       \
-              && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE            \
-              && TYPE_NAME (TREE_TYPE (exp)))                          \
-       {                                                               \
-         tree name = TYPE_NAME (TREE_TYPE (exp));                      \
-         if (TREE_CODE (name) == TYPE_DECL)                            \
-           name = DECL_NAME (name);                                    \
-         if (!strcmp (IDENTIFIER_POINTER (name), "NSConstantString"))  \
-           objc_constant_string_object_section ();                     \
-         else if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString")) \
-           objc_string_object_section ();                              \
-         else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))          \
-           {                                                           \
-             if (TREE_SIDE_EFFECTS (exp) || flag_pic && reloc)         \
-               const_data_section ();                                  \
-             else                                                      \
-               readonly_data_section ();                               \
-            }                                                          \
-         else                                                          \
-           data_section ();                                            \
-      }                                                                        \
-      else if (TREE_CODE (exp) == VAR_DECL &&                          \
-              DECL_NAME (exp) &&                                       \
-              TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&        \
-              IDENTIFIER_POINTER (DECL_NAME (exp)) &&                  \
-              !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
-       {                                                               \
-         const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));      \
-                                                                       \
-         if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))              \
-           objc_cls_meth_section ();                                   \
-         else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))      \
-           objc_inst_meth_section ();                                  \
-         else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
-           objc_cat_cls_meth_section ();                               \
-         else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
-           objc_cat_inst_meth_section ();                              \
-         else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))       \
-           objc_class_vars_section ();                                 \
-         else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
-           objc_instance_vars_section ();                              \
-         else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))       \
-           objc_cat_cls_meth_section ();                               \
-         else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))            \
-           objc_class_names_section ();                                \
-         else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))         \
-           objc_meth_var_names_section ();                             \
-         else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))         \
-           objc_meth_var_types_section ();                             \
-         else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))       \
-           objc_cls_refs_section ();                                   \
-         else if (!strncmp (name, "_OBJC_CLASS_", 12))                 \
-           objc_class_section ();                                      \
-         else if (!strncmp (name, "_OBJC_METACLASS_", 16))             \
-           objc_meta_class_section ();                                 \
-         else if (!strncmp (name, "_OBJC_CATEGORY_", 15))              \
-           objc_category_section ();                                   \
-         else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
-           objc_selector_refs_section ();                              \
-         else if (!strncmp (name, "_OBJC_SELECTOR_FIXUP", 20))         \
-           objc_selector_fixup_section ();                             \
-         else if (!strncmp (name, "_OBJC_SYMBOLS", 13))                \
-           objc_symbols_section ();                                    \
-         else if (!strncmp (name, "_OBJC_MODULES", 13))                \
-           objc_module_info_section ();                                \
-         else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
-           objc_cat_inst_meth_section ();                              \
-         else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
-           objc_cat_cls_meth_section ();                               \
-         else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
-           objc_cat_cls_meth_section ();                               \
-         else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
-           objc_protocol_section ();                                   \
-         else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
-               && !TREE_SIDE_EFFECTS (exp))                            \
-             { if (flag_pic && reloc ) const_data_section ();             \
-               else readonly_data_section (); }                        \
-         else                                                          \
-           data_section ();                                            \
-       }                                                               \
-      else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))             \
-       {                                                               \
-         if (TREE_SIDE_EFFECTS (exp) || flag_pic && reloc)             \
-           const_data_section ();                                      \
-         else                                                          \
-           readonly_data_section ();                                   \
-        }                                                              \
-      else                                                             \
-        data_section ();                                               \
-      try_section_alias ();                                            \
-    }                                                                  \
-  while (0)
-
-/* This can be called with address expressions as "rtx".
-   They must go in "const". */
-#undef SELECT_RTX_SECTION
-#define SELECT_RTX_SECTION(mode, rtx, align)                           \
-  do                                                                   \
-    {                                                                  \
-      if (GET_MODE_SIZE (mode) == 8)                                   \
-       literal8_section ();                                            \
-      else if (GET_MODE_SIZE (mode) == 4                               \
-              && (GET_CODE (rtx) == CONST_INT                          \
-                  || GET_CODE (rtx) == CONST_DOUBLE))                  \
-       literal4_section ();                                            \
-      else                                                             \
-       const_section ();                                               \
-    }                                                                  \
-  while (0)
+#undef TARGET_ASM_SELECT_SECTION
+#define TARGET_ASM_SELECT_SECTION machopic_select_section
+#undef TARGET_ASM_SELECT_RTX_SECTION
+#define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section
 
 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME)                    \
     do {                                                               \
@@ -717,11 +552,8 @@ enum machopic_addr_class {
 #define MACHOPIC_JUST_INDIRECT (flag_pic == 1)
 #define MACHOPIC_PURE          (flag_pic == 2)
 
-#define ENCODE_SECTION_INFO(DECL, FIRST) \
-  darwin_encode_section_info (DECL, FIRST)
-
-#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME)  \
-  ((VAR) = ((SYMBOL_NAME[0] == '!') ? (SYMBOL_NAME) + 4 : (SYMBOL_NAME)))
+#define TARGET_ENCODE_SECTION_INFO  darwin_encode_section_info
+#define TARGET_STRIP_NAME_ENCODING  darwin_strip_name_encoding
 
 #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH)         \
   do {                                                         \
@@ -757,12 +589,11 @@ enum machopic_addr_class {
 
 #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
   do {                                                         \
-    const char *symbol_ = (SYMBOL);                            \
+    const char *symbol_ = darwin_strip_name_encoding (SYMBOL); \
     char *buffer_ = (BUF);                                     \
-    STRIP_NAME_ENCODING (symbol_, symbol_);  \
     if (symbol_[0] == '"')                                     \
       {                                                                \
-        strcpy (buffer_, "\"L");                                       \
+        strcpy (buffer_, "\"L");                               \
         strcpy (buffer_ + 2, symbol_ + 1);                     \
        strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\"");      \
       }                                                                \
@@ -787,10 +618,10 @@ enum machopic_addr_class {
 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)  \
   (((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
 
-#define REGISTER_TARGET_PRAGMAS(PFILE)                          \
-  do {                                                          \
-    cpp_register_pragma (PFILE, 0, "mark", darwin_pragma_ignore);  \
-    cpp_register_pragma (PFILE, 0, "options", darwin_pragma_options);  \
-    cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore);  \
-    cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused);  \
+#define DARWIN_REGISTER_TARGET_PRAGMAS(PFILE)                          \
+  do {                                                                 \
+    cpp_register_pragma (PFILE, 0, "mark", darwin_pragma_ignore);      \
+    cpp_register_pragma (PFILE, 0, "options", darwin_pragma_options);  \
+    cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore);   \
+    cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused);    \
   } while (0)