darwin.c (117395) | darwin.c (119256) |
---|---|
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{ | 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 if (TREE_CODE (exp) == STRING_CST) | 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) |
1095 { | 1109 { |
1096 if (flag_writable_strings) 1097 data_section (); 1098 else if (TREE_STRING_LENGTH (exp) != 1099 strlen (TREE_STRING_POINTER (exp)) + 1) 1100 readonly_data_section (); 1101 else 1102 cstring_section (); 1103 } 1104 else if (TREE_CODE (exp) == INTEGER_CST 1105 || TREE_CODE (exp) == REAL_CST) 1106 { | |
1107 tree size = TYPE_SIZE (TREE_TYPE (exp)); 1108 1109 if (TREE_CODE (size) == INTEGER_CST && 1110 TREE_INT_CST_LOW (size) == 4 && 1111 TREE_INT_CST_HIGH (size) == 0) 1112 literal4_section (); 1113 else if (TREE_CODE (size) == INTEGER_CST && 1114 TREE_INT_CST_LOW (size) == 8 && 1115 TREE_INT_CST_HIGH (size) == 0) 1116 literal8_section (); 1117 else | 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 |
1118 readonly_data_section (); | 1121 base_function (); |
1119 } 1120 else if (TREE_CODE (exp) == CONSTRUCTOR 1121 && TREE_TYPE (exp) 1122 && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE 1123 && TYPE_NAME (TREE_TYPE (exp))) 1124 { 1125 tree name = TYPE_NAME (TREE_TYPE (exp)); 1126 if (TREE_CODE (name) == TYPE_DECL) 1127 name = DECL_NAME (name); 1128 if (!strcmp (IDENTIFIER_POINTER (name), "NSConstantString")) 1129 objc_constant_string_object_section (); 1130 else if (!strcmp (IDENTIFIER_POINTER (name), "NXConstantString")) 1131 objc_string_object_section (); | 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 (); |
1132 else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) 1133 { 1134 if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc)) 1135 const_data_section (); 1136 else 1137 readonly_data_section (); 1138 } 1139 else 1140 data_section (); | 1135 else 1136 base_function (); |
1141 } 1142 else if (TREE_CODE (exp) == VAR_DECL && 1143 DECL_NAME (exp) && 1144 TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE && 1145 IDENTIFIER_POINTER (DECL_NAME (exp)) && 1146 !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) 1147 { 1148 const char *name = IDENTIFIER_POINTER (DECL_NAME (exp)); --- 37 unchanged lines hidden (view full) --- 1186 else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) 1187 objc_cat_inst_meth_section (); 1188 else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) 1189 objc_cat_cls_meth_section (); 1190 else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20)) 1191 objc_cat_cls_meth_section (); 1192 else if (!strncmp (name, "_OBJC_PROTOCOL_", 15)) 1193 objc_protocol_section (); | 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 (); |
1194 else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) 1195 && !TREE_SIDE_EFFECTS (exp)) 1196 { 1197 if (flag_pic && reloc) 1198 const_data_section (); 1199 else 1200 readonly_data_section (); 1201 } 1202 else 1203 data_section (); | 1190 else 1191 base_function (); |
1204 } | 1192 } |
1205 else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) 1206 { 1207 if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc)) 1208 const_data_section (); 1209 else 1210 readonly_data_section (); 1211 } 1212 else 1213 data_section (); | 1193 else 1194 base_function (); |
1214} 1215 1216/* This can be called with address expressions as "rtx". 1217 They must go in "const". */ 1218 1219void 1220machopic_select_rtx_section (mode, x, align) 1221 enum machine_mode mode; --- 85 unchanged lines hidden --- | 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 --- |