1/* Functions for generic Darwin as target machine for GNU C compiler. 2 Copyright (C) 1989, 1990, 1991, 1992, 1993, 2000, 2001, 2002 3 Free Software Foundation, Inc. 4 Contributed by Apple Computer Inc. 5 6This file is part of GNU CC. 7 8GNU CC is free software; you can redistribute it and/or modify --- 1077 unchanged lines hidden (view full) --- 1086} 1087 1088void 1089machopic_select_section (exp, reloc, align) 1090 tree exp; 1091 int reloc; 1092 unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED; 1093{ |
1094 void (*base_function)(void); 1095 1096 if (decl_readonly_section (exp, reloc)) 1097 base_function = readonly_data_section; 1098 else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) 1099 base_function = const_data_section; 1100 else 1101 base_function = data_section; 1102 1103 if (TREE_CODE (exp) == STRING_CST 1104 && TREE_STRING_LENGTH (exp) == strlen (TREE_STRING_POINTER (exp)) + 1 1105 && ! flag_writable_strings) 1106 cstring_section (); 1107 else if ((TREE_CODE (exp) == INTEGER_CST || TREE_CODE (exp) == REAL_CST) 1108 && flag_merge_constants) |
1109 { |
1110 tree size = TYPE_SIZE (TREE_TYPE (exp)); 1111 1112 if (TREE_CODE (size) == INTEGER_CST && 1113 TREE_INT_CST_LOW (size) == 4 && 1114 TREE_INT_CST_HIGH (size) == 0) 1115 literal4_section (); 1116 else if (TREE_CODE (size) == INTEGER_CST && 1117 TREE_INT_CST_LOW (size) == 8 && 1118 TREE_INT_CST_HIGH (size) == 0) 1119 literal8_section (); 1120 else |
1121 base_function (); |
1122 } 1123 else if (TREE_CODE (exp) == CONSTRUCTOR 1124 && TREE_TYPE (exp) 1125 && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE 1126 && TYPE_NAME (TREE_TYPE (exp))) 1127 { 1128 tree name = TYPE_NAME (TREE_TYPE (exp)); 1129 if (TREE_CODE (name) == TYPE_DECL) 1130 name = DECL_NAME (name); 1131 if (!strcmp (IDENTIFIER_POINTER (name), "NSConstantString")) 1132 objc_constant_string_object_section (); 1133 else if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString")) 1134 objc_string_object_section (); |
1135 else 1136 base_function (); |
1137 } 1138 else if (TREE_CODE (exp) == VAR_DECL && 1139 DECL_NAME (exp) && 1140 TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE && 1141 IDENTIFIER_POINTER (DECL_NAME (exp)) && 1142 !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) 1143 { 1144 const char *name = IDENTIFIER_POINTER (DECL_NAME (exp)); --- 37 unchanged lines hidden (view full) --- 1182 else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) 1183 objc_cat_inst_meth_section (); 1184 else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) 1185 objc_cat_cls_meth_section (); 1186 else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20)) 1187 objc_cat_cls_meth_section (); 1188 else if (!strncmp (name, "_OBJC_PROTOCOL_", 15)) 1189 objc_protocol_section (); |
1190 else 1191 base_function (); |
1192 } |
1193 else 1194 base_function (); |
1195} 1196 1197/* This can be called with address expressions as "rtx". 1198 They must go in "const". */ 1199 1200void 1201machopic_select_rtx_section (mode, x, align) 1202 enum machine_mode mode; --- 85 unchanged lines hidden --- |