Index: darwin.c =================================================================== --- darwin.c (revision 119244) +++ darwin.c (working copy) @@ -1379,8 +1379,28 @@ machopic_select_section (tree exp, int r /* APPLE LOCAL begin LLVM */ #ifdef ENABLE_LLVM const char *darwin_objc_llvm_implicit_target_global_var_section(tree decl) { + const char *name; + + if (TREE_CODE(decl) == CONST_DECL) { + extern int flag_next_runtime; + tree typename = TYPE_NAME(TREE_TYPE(decl)); + if (TREE_CODE(typename) == TYPE_DECL) + typename = DECL_NAME(typename); + + if (!strcmp(IDENTIFIER_POINTER(typename), "__builtin_ObjCString")) { + if (flag_next_runtime) + return "__OBJC,__cstring_object,regular,no_dead_strip"; + else + return "__OBJC,__string_object,no_dead_strip"; + } else if (!strcmp(IDENTIFIER_POINTER(typename), "__builtin_CFString")) { + return "__DATA,__cfstring"; + } else { + return 0; + } + } + /* Get a pointer to the name, past the L_OBJC_ prefix. */ - const char *name = IDENTIFIER_POINTER (DECL_NAME (decl))+7; + name = IDENTIFIER_POINTER (DECL_NAME (decl))+7; if (!strncmp (name, "CLASS_METHODS_", 14)) return "__OBJC,__cls_meth, regular, no_dead_strip"; Index: darwin.h =================================================================== --- darwin.h (revision 119244) +++ darwin.h (working copy) @@ -1552,11 +1552,12 @@ void add_framework_path (char *); * For darwin, we have to handle all of the funny objc sections here. Note that * doing this by name is very ugly. */ -#define LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION(decl) \ - ((DECL_NAME (decl) && \ - TREE_CODE (DECL_NAME (decl)) == IDENTIFIER_NODE && \ - IDENTIFIER_POINTER (DECL_NAME (decl)) && \ - !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "L_OBJC_", 7)) ? \ +#define LLVM_IMPLICIT_TARGET_GLOBAL_VAR_SECTION(decl) \ + (((DECL_NAME (decl) && \ + TREE_CODE (DECL_NAME (decl)) == IDENTIFIER_NODE && \ + IDENTIFIER_POINTER (DECL_NAME (decl)) && \ + !strncmp (IDENTIFIER_POINTER (DECL_NAME (decl)), "L_OBJC_", 7)) || \ + TREE_CODE(decl) == CONST_DECL) ? \ darwin_objc_llvm_implicit_target_global_var_section(decl) : 0) const char *darwin_objc_llvm_implicit_target_global_var_section(tree);