#ifndef CONFIG_DARWIN_H
#define CONFIG_DARWIN_H
#define OBJECT_FORMAT_MACHO
extern int machopic_symbol_defined_p (rtx);
extern int darwin_stubs;
#define NO_IMPLICIT_EXTERN_C
#define MATH_LIBRARY ""
#define HAVE_ATEXIT
#define DO_GLOBAL_DTORS_BODY
#ifndef SIZE_TYPE
#define SIZE_TYPE "long unsigned int"
#endif
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
#define NEXT_OBJC_RUNTIME
#undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 0
#undef WARN_FOUR_CHAR_CONSTANTS
#define WARN_FOUR_CHAR_CONSTANTS 0
extern GTY(()) int darwin_ms_struct;
#define TARGET_OPTION_TRANSLATE_TABLE \
{ "-all_load", "-Zall_load" }, \
{ "-allowable_client", "-Zallowable_client" }, \
{ "-arch_errors_fatal", "-Zarch_errors_fatal" }, \
{ "-bind_at_load", "-Zbind_at_load" }, \
{ "-bundle", "-Zbundle" }, \
{ "-bundle_loader", "-Zbundle_loader" }, \
{ "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \
{ "-dead_strip", "-Zdead_strip" }, \
{ "-no_dead_strip_inits_and_terms", "-Zno_dead_strip_inits_and_terms" }, \
{ "-dependency-file", "-MF" }, \
{ "-dylib_file", "-Zdylib_file" }, \
{ "-dynamic", "-Zdynamic" }, \
{ "-dynamiclib", "-Zdynamiclib" }, \
{ "-exported_symbols_list", "-Zexported_symbols_list" }, \
{ "-gfull", "-g -fno-eliminate-unused-debug-symbols" }, \
{ "-gused", "-g -feliminate-unused-debug-symbols" }, \
{ "-segaddr", "-Zsegaddr" }, \
{ "-segs_read_only_addr", "-Zsegs_read_only_addr" }, \
{ "-segs_read_write_addr", "-Zsegs_read_write_addr" }, \
{ "-seg_addr_table", "-Zseg_addr_table" }, \
{ "-seg_addr_table_filename", "-Zfn_seg_addr_table_filename" }, \
\
{ "-umbrella", "-Zumbrella" }, \
\
{ "-fapple-kext", "-fapple-kext -static" }, \
{ "-filelist", "-Xlinker -filelist -Xlinker" }, \
{ "-findirect-virtual-calls", "-fapple-kext" }, \
{ "-flat_namespace", "-Zflat_namespace" }, \
{ "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \
{ "-force_flat_namespace", "-Zforce_flat_namespace" }, \
{ "-framework", "-Xlinker -framework -Xlinker" }, \
{ "-fterminated-vtables", "-fapple-kext" }, \
{ "-image_base", "-Zimage_base" }, \
{ "-init", "-Zinit" }, \
{ "-install_name", "-Zinstall_name" }, \
\
{ "-mkernel", "-mkernel -static" }, \
{ "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \
{ "-multiply_defined", "-Zmultiply_defined" }, \
{ "-multi_module", "-Zmulti_module" }, \
\
\
\
\
{ "-shared", "-Zdynamiclib" }, \
{ "-single_module", "-Zsingle_module" }, \
{ "-unexported_symbols_list", "-Zunexported_symbols_list" }, \
\
\
\
{ "-fconstant-cfstrings", "-mconstant-cfstrings" }, \
{ "-fno-constant-cfstrings", "-mno-constant-cfstrings" }, \
{ "-Wnonportable-cfstrings", "-mwarn-nonportable-cfstrings" }, \
{ "-Wno-nonportable-cfstrings", "-mno-warn-nonportable-cfstrings" }, \
{ "-fpascal-strings", "-mpascal-strings" }, \
{ "-fno-pascal-strings", "-mno-pascal-strings" }, \
\
SUBTARGET_OPTION_TRANSLATE_TABLE
extern int darwin_running_cxx;
extern GTY(()) int darwin_reverse_bitfields;
enum darwin_version_type {
DARWIN_VERSION_MACOSX,
DARWIN_VERSION_IPHONEOS
};
#define MACHOPIC_ATT_STUB (darwin_macho_att_stub)
#define SUBSUBTARGET_OVERRIDE_OPTIONS \
do { \
\
if (darwin_pascal_strings) \
{ \
warn_pointer_sign = 1; \
CPP_OPTION (parse_in, pascal_strings) = 1; \
} \
\
if (darwin_macosx_version_min && darwin_iphoneos_version_min) \
error ("-mmacosx-version-min not allowed with" \
" -miphoneos-version-min"); \
\
\
darwin_running_cxx = (strstr (lang_hooks.name, "C++") != 0); \
\
darwin_override_options (); \
} while (0)
#define SUBTARGET_INIT_BUILTINS \
do { \
darwin_init_cfstring_builtins (); \
} while(0)
#undef TARGET_EXPAND_TREE_BUILTIN
#define TARGET_EXPAND_TREE_BUILTIN darwin_expand_tree_builtin
#undef TARGET_CONSTRUCT_OBJC_STRING
#define TARGET_CONSTRUCT_OBJC_STRING darwin_construct_objc_string
#undef WORD_SWITCH_TAKES_ARG
#define WORD_SWITCH_TAKES_ARG(STR) \
(DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 : \
!strcmp (STR, "Zallowable_client") ? 1 : \
!strcmp (STR, "arch") ? 1 : \
!strcmp (STR, "arch_only") ? 1 : \
!strcmp (STR, "Zbundle_loader") ? 1 : \
!strcmp (STR, "client_name") ? 1 : \
!strcmp (STR, "compatibility_version") ? 1 : \
!strcmp (STR, "current_version") ? 1 : \
!strcmp (STR, "Zdylib_file") ? 1 : \
!strcmp (STR, "Zexported_symbols_list") ? 1 : \
!strcmp (STR, "Zimage_base") ? 1 : \
!strcmp (STR, "Zinit") ? 1 : \
!strcmp (STR, "Zinstall_name") ? 1 : \
!strcmp (STR, "Zmultiplydefinedunused") ? 1 : \
!strcmp (STR, "Zmultiply_defined") ? 1 : \
!strcmp (STR, "precomp-trustfile") ? 1 : \
!strcmp (STR, "read_only_relocs") ? 1 : \
!strcmp (STR, "sectcreate") ? 3 : \
!strcmp (STR, "sectorder") ? 3 : \
!strcmp (STR, "Zsegaddr") ? 2 : \
!strcmp (STR, "Zsegs_read_only_addr") ? 1 : \
!strcmp (STR, "Zsegs_read_write_addr") ? 1 : \
!strcmp (STR, "Zseg_addr_table") ? 1 : \
!strcmp (STR, "Zfn_seg_addr_table_filename") ? 1 :\
!strcmp (STR, "seg1addr") ? 1 : \
!strcmp (STR, "segprot") ? 3 : \
!strcmp (STR, "sub_library") ? 1 : \
!strcmp (STR, "sub_umbrella") ? 1 : \
\
!strcmp (STR, "Zumbrella") ? 1 : \
!strcmp (STR, "undefined") ? 1 : \
!strcmp (STR, "Zunexported_symbols_list") ? 1 : \
!strcmp (STR, "Zweak_reference_mismatches") ? 1 : \
!strcmp (STR, "pagezero_size") ? 1 : \
!strcmp (STR, "segs_read_only_addr") ? 1 : \
!strcmp (STR, "segs_read_write_addr") ? 1 : \
!strcmp (STR, "sectalign") ? 3 : \
!strcmp (STR, "sectobjectsymbols") ? 2 : \
!strcmp (STR, "segcreate") ? 3 : \
!strcmp (STR, "dylinker_install_name") ? 1 : \
0)
#define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do { \
if (flag_mkernel || flag_apple_kext) \
{ \
if (flag_use_cxa_atexit == 2) \
flag_use_cxa_atexit = 0; \
\
flag_weak = 0; \
\
flag_rtti = 0; \
\
if (flag_mkernel) \
flag_no_builtin = 1; \
\
\
flag_hosted = 0; \
} \
} while (0)
#undef CPP_SPEC
#define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}" \
" %{pthread:-D_REENTRANT}"
#undef CC1PLUS_SPEC
#define CC1PLUS_SPEC "-D__private_extern__=extern"
#define LINK_COMMAND_SPEC "\
%{!fdump=*:%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%(linker) %l %X %{d} %{s} %{t} %{Z} %{u*} \
%{A} %{e*} %{m} %{r} %{x} \
%{o*}%{!o:-o a.out} \
%{!A:%{!nostdlib:%{!nostartfiles:%S}}} \
%{L*} %{fopenmp:%:include(libgomp.spec)%(link_gomp)} \
""\
%(link_libgcc) %o %{fprofile-arcs|fprofile-generate|fcreate-profile|coverage:-lgcov} \
""\
%{fnested-functions: -allow_stack_execute} \
""\
%{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}} \
""\
%{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}}\n\
%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
""\
%{.c|.cc|.C|.cpp|.cp|.c++|.cxx|.CPP|.m|.mm: \
%{g*:%{!gstabs*:%{!g0: dsymutil %{o*:%*}%{!o:a.out}}}}}}}}}}}}"
#ifdef TARGET_SYSTEM_ROOT
#define LINK_SYSROOT_SPEC \
"%{isysroot*:-syslibroot %*;:-syslibroot " TARGET_SYSTEM_ROOT "}"
#else
#define LINK_SYSROOT_SPEC "%{isysroot*:-syslibroot %*}"
#endif
#define LINK_SPEC \
"%{static}%{!static:-dynamic} \
%{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}\
%{!Zdynamiclib: \
%{Zforce_cpusubtype_ALL:-arch %(darwin_arch) -force_cpusubtype_ALL} \
%{!Zforce_cpusubtype_ALL:-arch %(darwin_subarch)} \
%{Zbundle:-bundle} \
%{Zbundle_loader*:-bundle_loader %*} \
%{client_name*} \
%{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\
} \
%{current_version*:%e-current_version only allowed with -dynamiclib} \
%{Zforce_flat_namespace:-force_flat_namespace} \
%{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \
%{keep_private_externs} \
%{private_bundle} \
} \
%{Zdynamiclib: -dylib \
%{Zbundle:%e-bundle not allowed with -dynamiclib} \
%{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \
%{client_name*:%e-client_name not allowed with -dynamiclib} \
%{compatibility_version*:-dylib_compatibility_version %*} \
%{current_version*:-dylib_current_version %*} \
%{Zforce_cpusubtype_ALL:-arch %(darwin_arch)} \
%{!Zforce_cpusubtype_ALL: -arch %(darwin_subarch)} \
%{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \
%{Zinstall_name*:-dylib_install_name %*} \
%{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \
%{private_bundle:%e-private_bundle not allowed with -dynamiclib} \
} \
%{Zall_load:-all_load} \
%{Zallowable_client*:-allowable_client %*} \
%{Zbind_at_load:-bind_at_load} \
%{Zarch_errors_fatal:-arch_errors_fatal} \
%{Zdead_strip:-dead_strip} \
%{Zno_dead_strip_inits_and_terms:-no_dead_strip_inits_and_terms} \
%{Zdylib_file*:-dylib_file %*} \
%{Zdynamic:-dynamic}\
%{Zexported_symbols_list*:-exported_symbols_list %*} \
%{Zflat_namespace:-flat_namespace} \
%{headerpad_max_install_names*} \
%{Zimage_base*:-image_base %*} \
%{Zinit*:-init %*} \
""\
%{!mmacosx-version-min=*: %{!miphoneos-version-min=*: %(darwin_ld_minversion)}} \
%{mmacosx-version-min=*:-macosx_version_min %*} \
%{miphoneos-version-min=*:-iphoneos_version_min %*} \
""\
%{nomultidefs} \
%{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \
%{Zmultiply_defined*:-multiply_defined %*} \
"" \
"" \
%{Zmultiplydefinedunused*:-multiply_defined_unused %*} \
"" \
%{fpie:-pie} \
%{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \
%{read_only_relocs} \
%{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} \
%{Zsegaddr*:-segaddr %*} \
%{Zsegs_read_only_addr*:-segs_read_only_addr %*} \
%{Zsegs_read_write_addr*:-segs_read_write_addr %*} \
%{Zseg_addr_table*: -seg_addr_table %*} \
%{Zfn_seg_addr_table_filename*:-seg_addr_table_filename %*} \
%{sub_library*} %{sub_umbrella*} \
" LINK_SYSROOT_SPEC " \
%{twolevel_namespace} %{twolevel_namespace_hints} \
%{Zumbrella*: -umbrella %*} \
%{undefined*} \
%{Zunexported_symbols_list*:-unexported_symbols_list %*} \
%{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \
%{!Zweak_reference_mismatches*:-weak_reference_mismatches non-weak} \
%{X} \
%{y*} \
%{w} \
%{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \
%{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \
%{whatsloaded} %{dylinker_install_name*} \
%{dylinker} %{Mach} "
#define LIB_SPEC "%{!static:-lSystem}"
#undef REAL_LIBGCC_SPEC
#define REAL_LIBGCC_SPEC \
\
"%{static:-lgcc_static; static-libgcc: -lgcc_eh -lgcc; \
"" \
miphoneos-version-min=*: %(darwin_iphoneos_libgcc); \
shared-libgcc|fexceptions|fgnu-runtime: \
%:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4) \
"" \
%:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \
-lgcc; \
:%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \
"" \
%:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \
-lgcc}"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{Zdynamiclib: %(darwin_dylib1) } \
"" \
%{!Zdynamiclib:%{Zbundle:%{!static: %(darwin_bundle1)}} \
%{!Zbundle:%{pg:%{static:-lgcrt0.o} \
%{!static:%{object:-lgcrt0.o} \
%{!object:%{preload:-lgcrt0.o} \
%{!preload:-lgcrt1.o %(darwin_crt2)}}}} \
%{!pg:%{static:-lcrt0.o} \
%{!static:%{object:-lcrt0.o} \
%{!object:%{preload:-lcrt0.o} \
%{!preload: %(darwin_crt1) \
%(darwin_crt2)}}}}}} \
%{shared-libgcc: \
%{!miphoneos-version-min=*: \
%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}}"
#define DARWIN_EXTRA_SPECS \
{ "darwin_crt1", DARWIN_CRT1_SPEC }, \
{ "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \
\
{ "darwin_bundle1", DARWIN_BUNDLE1_SPEC }, \
{ "darwin_minversion", DARWIN_MINVERSION_SPEC }, \
\
\
{ "darwin_cc1_minversion", DARWIN_CC1_MINVERSION_SPEC }, \
{ "darwin_ld_minversion", DARWIN_LD_MINVERSION_SPEC }, \
\
\
{ "darwin_iphoneos_libgcc", DARWIN_IPHONEOS_LIBGCC_SPEC },
#define DARWIN_DYLIB1_SPEC \
"%{miphoneos-version-min=*: -ldylib1.o} \
%{!miphoneos-version-min=*: \
%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
%:version-compare(>= 10.5 mmacosx-version-min= -ldylib1.10.5.o)}"
#define DARWIN_BUNDLE1_SPEC \
"-lbundle1.o"
#define DARWIN_CRT1_SPEC \
\
"%{miphoneos-version-min=*: -lcrt1.o} \
%{!miphoneos-version-min=*: \
%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \
%:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)}"
#define LINK_GCC_C_SEQUENCE_SPEC "%G %L"
#define ASM_SPEC "-arch %(darwin_arch) \
%{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \
%{!Zforce_cpusubtype_ALL:%{faltivec:-force_cpusubtype_ALL}} \
%{mkernel|static|fapple-kext:%{!Zdynamic:-static}}"
#define DBX_DEBUGGING_INFO 1
#define DWARF2_DEBUGGING_INFO
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
#define DEBUG_FRAME_SECTION "__DWARF,__debug_frame,regular,debug"
#define DEBUG_INFO_SECTION "__DWARF,__debug_info,regular,debug"
#define DEBUG_ABBREV_SECTION "__DWARF,__debug_abbrev,regular,debug"
#define DEBUG_ARANGES_SECTION "__DWARF,__debug_aranges,regular,debug"
#define DEBUG_MACINFO_SECTION "__DWARF,__debug_macinfo,regular,debug"
#define DEBUG_LINE_SECTION "__DWARF,__debug_line,regular,debug"
#define DEBUG_LOC_SECTION "__DWARF,__debug_loc,regular,debug"
#define DEBUG_PUBNAMES_SECTION "__DWARF,__debug_pubnames,regular,debug"
#define DEBUG_PUBTYPES_SECTION "__DWARF,__debug_pubtypes,regular,debug"
#define DEBUG_INLINED_SECTION "__DWARF,__debug_inlined,regular,debug"
#define DEBUG_STR_SECTION "__DWARF,__debug_str,regular,debug"
#define DEBUG_RANGES_SECTION "__DWARF,__debug_ranges,regular,debug"
#define DBX_ONLY_USED_SYMBOLS
#define DBX_USE_BINCL
#define DBX_CONTIN_LENGTH 0
#define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
#define ASM_WEAKEN_DECL(FILE, DECL, NAME, ALIAS) \
do { \
if (ALIAS) \
{ \
warning (0, "alias definitions not supported in Mach-O; ignored"); \
break; \
} \
\
if (! DECL_EXTERNAL (DECL) && TREE_PUBLIC (DECL)) \
targetm.asm_out.globalize_label (FILE, NAME); \
if (DECL_EXTERNAL (DECL)) \
fputs ("\t.weak_reference ", FILE); \
else if (! lookup_attribute ("weak", DECL_ATTRIBUTES (DECL)) \
&& lookup_attribute ("weak_import", DECL_ATTRIBUTES (DECL))) \
break; \
else if (TREE_PUBLIC (DECL)) \
fputs ("\t.weak_definition ", FILE); \
else \
break; \
assemble_name (FILE, NAME); \
fputc ('\n', FILE); \
} while (0)
#define GTHREAD_USE_WEAK 0
#undef USE_COMMON_FOR_ONE_ONLY
#define USE_COMMON_FOR_ONE_ONLY 0
#undef TARGET_WEAK_NOT_IN_ARCHIVE_TOC
#define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 1
#define TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT hook_bool_void_false
#define TARGET_CXX_LIBRARY_RTTI_COMDAT hook_bool_void_false
#undef TARGET_USES_WEAK_UNWIND_INFO
#define TARGET_USES_WEAK_UNWIND_INFO 1
#undef FRAME_BEGIN_LABEL
#define FRAME_BEGIN_LABEL (for_eh ? "EH_frame" : "Lframe")
#define TARGET_ASM_EMIT_UNWIND_LABEL darwin_emit_unwind_label
#define TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL darwin_emit_except_table_label
#define NO_PROFILE_COUNTERS 1
#undef INIT_SECTION_ASM_OP
#define INIT_SECTION_ASM_OP
#define STATIC_INIT_SECTION "__TEXT,__StaticInit,regular,pure_instructions"
#undef INVOKE__main
#define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor
#define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor
#define USER_LABEL_PREFIX "_"
#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
#undef TARGET_ASM_FILE_END
#define TARGET_ASM_FILE_END darwin_file_end
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t.space "HOST_WIDE_INT_PRINT_UNSIGNED"\n", SIZE)
#undef OBJC_GEN_METHOD_LABEL
#define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
do { if (CAT_NAME) \
sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \
(CLASS_NAME), (CAT_NAME), (SEL_NAME)); \
else \
sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \
(CLASS_NAME), (SEL_NAME)); \
} while (0)
#undef OBJC_FLAG_ZEROCOST_EXCEPTIONS
#define OBJC_FLAG_ZEROCOST_EXCEPTIONS \
do { \
\
if (darwin_macosx_version_min \
&& strverscmp (darwin_macosx_version_min, "10.5") < 0) \
\
error ("Mac OS X version 10.5 or later is needed for zerocost-exceptions"); \
} while (0)
#undef OBJC_FLAG_OBJC_ABI
#define OBJC_FLAG_OBJC_ABI \
do { if (flag_objc_abi > 2) \
{ \
error ("Unknown objective-c abi flag"); \
flag_objc_abi = 1; \
} \
if (flag_objc_abi == -1) \
flag_objc_abi = (flag_next_runtime && TARGET_64BIT) ? 2 : 1; \
\
if (flag_objc_legacy_dispatch == -1) \
flag_objc_legacy_dispatch = (flag_objc_abi < 2); \
\
\
\
if (flag_objc_abi == 2) \
flag_objc_zerocost_exceptions = 1; \
if (flag_objc_zerocost_exceptions) \
{ \
flag_exceptions = 1; \
flag_objc_sjlj_exceptions = 0; \
} \
\
if (flag_objc_zerocost_exceptions && flag_objc_abi != 2) \
{ \
error ("zero-cost exception is available with new abi only");\
flag_objc_abi = 2; \
} \
\
\
if (darwin_iphoneos_version_min && flag_objc_gc) \
{ \
warning (0, "-fobjc-gc not supported for iPhone OS; ignoring.");\
flag_objc_gc = 0; \
} \
if (darwin_iphoneos_version_min && flag_objc_gc_only) \
{ \
warning (0, "-fobjc-gc-only not supported for iPhone OS; ignoring.");\
flag_objc_gc_only = 0; \
} \
\
} while (0)
#undef OBJC_WARN_OBJC2_FEATURES
#define OBJC_WARN_OBJC2_FEATURES(MESSAGE) \
\
do { \
if (darwin_macosx_version_min \
&& strverscmp (darwin_macosx_version_min, "10.5") < 0) \
\
warning (0, "Mac OS X version 10.5 or later is needed for use of %s", \
MESSAGE); \
} while (0)
#undef OBJC2_ABI_DISPATCH
#define OBJC2_ABI_DISPATCH \
(darwin_macosx_version_min \
&& strverscmp (darwin_macosx_version_min, "10.6") < 0)
#undef ASM_DECLARE_OBJECT_NAME
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
do { \
const char *xname = NAME; \
if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
if (! DECL_WEAK (DECL) \
&& ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL))) \
machopic_define_symbol (DECL_RTL (DECL)); \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
ASM_OUTPUT_LABEL (FILE, xname); \
\
if (tree_low_cst (DECL_SIZE_UNIT (DECL), 1) == 0) \
assemble_zeros (1); \
} while (0)
#ifndef SUBTARGET_ASM_DECLARE_FUNCTION_NAME
#define SUBTARGET_ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)
#endif
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do { \
const char *xname = NAME; \
\
SUBTARGET_ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL); \
if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
if (! DECL_WEAK (DECL) \
&& ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL))) \
machopic_define_symbol (DECL_RTL (DECL)); \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
ASM_OUTPUT_LABEL (FILE, xname); \
} while (0)
#define ASM_DECLARE_CONSTANT_NAME(FILE, NAME, EXP, SIZE) \
do { \
ASM_OUTPUT_LABEL (FILE, NAME); \
\
if ((SIZE) == 0) \
assemble_zeros (1); \
} while (0)
#undef ASM_OUTPUT_LABELREF
#define ASM_OUTPUT_LABELREF(FILE,NAME) \
do { \
const char *xname = (NAME); \
if (! strcmp (xname, "<pic base>")) \
machopic_output_function_base_name(FILE); \
else 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); \
else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \
machopic_validate_stub_or_non_lazy_ptr (xname); \
else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \
machopic_validate_stub_or_non_lazy_ptr (xname); \
else if (len > 15 && !strcmp ("$non_lazy_ptr\"", xname + len - 14)) \
machopic_validate_stub_or_non_lazy_ptr (xname); \
if (xname[1] != '"' && name_needs_quotes (&xname[1])) \
fprintf (FILE, "\"%s\"", &xname[1]); \
else \
fputs (&xname[1], FILE); \
} \
else if (xname[0] == '+' || xname[0] == '-') \
fprintf (FILE, "\"%s\"", xname); \
\
else if (objc_anonymous_local_objc_name (xname)) \
fprintf (FILE, "L%s", xname); \
else if (!strncmp (xname, ".objc_class_name_", 17)) \
fprintf (FILE, "%s", xname); \
else if (xname[0] != '"' && name_needs_quotes (xname)) \
\
asm_fprintf (FILE, "\"%U%s\"", xname); \
else \
asm_fprintf (FILE, "%U%s", xname); \
} while (0)
#undef TEXT_SECTION_ASM_OP
#define TEXT_SECTION_ASM_OP "\t.text"
#undef DATA_SECTION_ASM_OP
#define DATA_SECTION_ASM_OP "\t.data"
#undef ALIGN_ASM_OP
#define ALIGN_ASM_OP ".align"
#undef ASM_OUTPUT_ALIGN
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
if ((LOG) != 0) \
fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG))
#undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
unsigned HOST_WIDE_INT _new_size = SIZE; \
fputs (".lcomm ", (FILE)); \
assemble_name ((FILE), (NAME)); \
if (_new_size == 0) _new_size = 1; \
fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", _new_size, \
floor_log2 ((ALIGN) / BITS_PER_UNIT)); \
if ((DECL) && ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL))) \
{ \
(* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \
machopic_define_symbol (DECL_RTL (DECL)); \
} \
} while (0)
#undef MAX_OFILE_ALIGNMENT
#define MAX_OFILE_ALIGNMENT (0x8000 * 8)
#ifndef MACHOPIC_NL_SYMBOL_PTR_SECTION
#define MACHOPIC_NL_SYMBOL_PTR_SECTION ".non_lazy_symbol_pointer"
#endif
#ifndef USED_FOR_TARGET
enum darwin_section_enum {
#define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) NAME,
#include "darwin-sections.def"
#undef DEF_SECTION
NUM_DARWIN_SECTIONS
};
extern GTY(()) section * darwin_sections[NUM_DARWIN_SECTIONS];
#endif
#undef TARGET_ASM_SELECT_SECTION
#define TARGET_ASM_SELECT_SECTION machopic_select_section
#define USE_SELECT_SECTION_FOR_FUNCTIONS
#undef TARGET_ASM_SELECT_RTX_SECTION
#define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section
#undef TARGET_ASM_UNIQUE_SECTION
#define TARGET_ASM_UNIQUE_SECTION darwin_unique_section
#undef TARGET_ASM_FUNCTION_RODATA_SECTION
#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
#undef TARGET_ASM_RELOC_RW_MASK
#define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
do { \
if (FILE) { \
if (MACHOPIC_INDIRECT) \
fprintf (FILE, "\t.lazy_reference "); \
else \
fprintf (FILE, "\t.reference "); \
assemble_name (FILE, NAME); \
fprintf (FILE, "\n"); \
} \
} while (0)
#define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
do { \
if (FILE) { \
fprintf (FILE, "\t"); \
assemble_name (FILE, NAME); \
fprintf (FILE, "=0\n"); \
(*targetm.asm_out.globalize_label) (FILE, NAME); \
} \
} while (0)
#define GLOBAL_ASM_OP ".globl "
#define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
#define ASM_WEAK_DEFINITIONIZE_LABEL(FILE, NAME) \
do { const char* _x = (NAME); if (!!strncmp (_x, "_OBJC_", 6)) { \
fputs (".weak_definition ", FILE); assemble_name (FILE, _x); \
fputs ("\n", FILE); }} while (0)
#undef TARGET_ASM_ASSEMBLE_VISIBILITY
#define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility
#define SUBTARGET_ATTRIBUTE_TABLE \
\
{ "apple_kext_compatibility", 0, 0, false, true, false, \
darwin_handle_kext_attribute }, \
\
{ "objc_gc", 1, 1, false, true, false, darwin_handle_objc_gc_attribute }, \
\
{ "NSObject", 0, 0, false, true, false, darwin_handle_nsobject_attribute },\
{ "weak_import", 0, 0, true, false, false, \
darwin_handle_weak_import_attribute }
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM))
#undef TARGET_ASM_MARK_DECL_PRESERVED
#define TARGET_ASM_MARK_DECL_PRESERVED darwin_mark_decl_preserved
#define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP)
#define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1)
#define MACHO_SYMBOL_STATIC ((SYMBOL_FLAG_MACH_DEP) << 2)
enum machopic_addr_class {
MACHOPIC_UNDEFINED,
MACHOPIC_DEFINED_DATA,
MACHOPIC_UNDEFINED_DATA,
MACHOPIC_DEFINED_FUNCTION,
MACHOPIC_UNDEFINED_FUNCTION
};
#define MACHO_DYNAMIC_NO_PIC_P (TARGET_MACHO_DYNAMIC_NO_PIC)
#undef MACHOPIC_INDIRECT
#define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
#define MACHOPIC_JUST_INDIRECT (MACHO_DYNAMIC_NO_PIC_P)
#undef MACHOPIC_PURE
#define MACHOPIC_PURE (flag_pic && ! MACHO_DYNAMIC_NO_PIC_P)
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
#undef TARGET_STRIP_NAME_ENCODING
#define TARGET_STRIP_NAME_ENCODING default_strip_name_encoding
#define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \
do { \
const char *const stub_ = (STUB); \
char *buffer_ = (BUF); \
strcpy (buffer_, stub_); \
if (stub_[0] == '"') \
{ \
strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \
} \
else \
{ \
strcpy (buffer_ + (STUB_LENGTH), "_binder"); \
} \
} while (0)
#define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
do { \
const char *const symbol_ = (SYMBOL); \
char *buffer_ = (BUF); \
if (name_needs_quotes (symbol_) && symbol_[0] != '"') \
{ \
sprintf (buffer_, "\"%s\"", symbol_); \
} \
else \
{ \
strcpy (buffer_, symbol_); \
} \
} while (0)
#define GEN_SUFFIXED_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH,SUFFIX) \
do { \
const char *symbol_ = (SYMBOL); \
char *buffer_ = (BUF); \
if (symbol_[0] == '"') \
{ \
strcpy (buffer_, "\"L"); \
strcpy (buffer_ + 2, symbol_ + 1); \
strcpy (buffer_ + (SYMBOL_LENGTH), SUFFIX "\""); \
} \
else if (name_needs_quotes (symbol_)) \
{ \
strcpy (buffer_, "\"L"); \
strcpy (buffer_ + 2, symbol_); \
strcpy (buffer_ + (SYMBOL_LENGTH) + 2, SUFFIX "\""); \
} \
else \
{ \
strcpy (buffer_, "L"); \
strcpy (buffer_ + 1, symbol_); \
strcpy (buffer_ + (SYMBOL_LENGTH) + 1, SUFFIX); \
} \
} while (0)
#define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
GEN_SUFFIXED_NAME_FOR_SYMBOL (BUF, SYMBOL, SYMBOL_LENGTH, "$lazy_ptr")
#define EH_FRAME_SECTION_NAME "__TEXT"
#define EH_FRAME_SECTION_ATTR ",coalesced,no_toc+strip_static_syms+live_support"
#define JCR_SECTION_NAME "__DATA,jcr,regular,no_dead_strip"
#undef ASM_PREFERRED_EH_DATA_FORMAT
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
\
((((CODE) == 2 || (CODE) == 0) && (GLOBAL) == 1) \
? (DW_EH_PE_pcrel | DW_EH_PE_indirect | DW_EH_PE_sdata4) : \
((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
#define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \
darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2)
#define ASM_OUTPUT_DWARF_OFFSET(FILE,SIZE,LABEL,BASE) \
darwin_asm_output_dwarf_offset (FILE, SIZE, LABEL, BASE)
#ifndef JUMP_TABLES_IN_TEXT_SECTION
#define JUMP_TABLES_IN_TEXT_SECTION 1
#endif
#define REGISTER_OS_PRAGMAS() \
do { \
\
c_register_pragma (0, "pack", darwin_pragma_pack); \
\
} while (0)
#define TARGET_TERMINATE_DW2_EH_FRAME_INFO false
#define TARGET_ASM_INIT_SECTIONS darwin_init_sections
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION darwin_asm_named_section
#define HANDLE_SYSV_PRAGMA 1
#define HANDLE_PRAGMA_PACK_PUSH_POP 1
#define DARWIN_REGISTER_TARGET_PRAGMAS() \
do { \
\
\
\
c_register_pragma (0, "options", darwin_pragma_options); \
c_register_pragma (0, "segment", darwin_pragma_ignore); \
\
c_register_pragma ("GCC", "fenv", darwin_pragma_fenv); \
c_register_pragma (0, "unused", darwin_pragma_unused); \
c_register_pragma (0, "ms_struct", darwin_pragma_ms_struct); \
\
c_register_pragma (0, "reverse_bitfields", \
darwin_pragma_reverse_bitfields); \
\
\
c_register_pragma (0, "optimization_level", \
darwin_pragma_opt_level); \
c_register_pragma (0, "optimize_for_size", \
darwin_pragma_opt_size); \
c_register_pragma ("GCC", "optimization_level", \
darwin_pragma_opt_level); \
c_register_pragma ("GCC", "optimize_for_size", \
darwin_pragma_opt_size); \
\
\
} while (0)
#define EXIT_FROM_FATAL_DIAGNOSTIC(status) abort_assembly_and_exit (status)
extern void abort_assembly_and_exit (int status) ATTRIBUTE_NORETURN;
#define PEG_ALIGN_FOR_MAC68K(DESIRED) MIN ((DESIRED), 16)
#define CHECK_TRIVIAL_FUNCTION(DECL) \
do { \
const char *_name = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
if (TARGET_KEXTABI && DECL_SAVED_TREE (DECL) \
&& strstr (_name, "operator delete") \
&& TREE_CODE (DECL_SAVED_TREE (DECL)) == COMPOUND_STMT \
&& compound_body_is_empty_p ( \
COMPOUND_BODY (DECL_SAVED_TREE (DECL))))\
TREE_SIDE_EFFECTS (DECL) = 1; \
} while (0)
#define VPTR_INITIALIZER_ADJUSTMENT 8
#define ADJUST_VTABLE_INDEX(IDX, VTBL) \
do { \
if (TARGET_KEXTABI == 1) \
(IDX) = fold (build2 (PLUS_EXPR, TREE_TYPE (IDX), IDX, size_int (2))); \
} while (0)
#define ASM_OUTPUT_ZEROFILL(FILE, NAME, SECT, SIZE, ALIGNMENT) \
do { \
section *darwin_sect = SECT; \
\
unsigned HOST_WIDE_INT _new_size = SIZE; \
if (_new_size == 0) _new_size = 1; \
fputs (".zerofill ", (FILE)); \
if (darwin_sect->common.flags & SECTION_NAMED) \
{ \
fputs (darwin_sect->named.name, (FILE)); \
fputs (", ", (FILE)); \
} \
else \
fputs ("__DATA, __common, ", (FILE)); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), ", " HOST_WIDE_INT_PRINT_DEC, _new_size); \
fprintf ((FILE), ", " HOST_WIDE_INT_PRINT_DEC "\n", \
(HOST_WIDE_INT) (ALIGNMENT)); \
} while (0)
#define IASM_SPECIAL_LABEL(ID) darwin_iasm_special_label (ID)
#undef ASM_APP_ON
#define ASM_APP_ON ""
#undef ASM_APP_OFF
#define ASM_APP_OFF ""
void darwin_register_frameworks (const char *, const char *, int);
void darwin_register_objc_includes (const char *, const char *, int);
#define TARGET_EXTRA_PRE_INCLUDES darwin_register_objc_includes
#define TARGET_EXTRA_INCLUDES darwin_register_frameworks
void add_framework_path (char *);
#define TARGET_OPTF add_framework_path
#define TARGET_POSIX_IO
#define TARGET_C99_FUNCTIONS 1
#define WINT_TYPE "int"
#define TARGET_HANDLE_C_OPTION(CODE, ARG, VALUE) \
darwin_handle_c_option (CODE, ARG, VALUE)
#define GCC_DRIVER_HOST_INITIALIZATION1 \
do { \
int i; \
for (i = 0; i < argc; ++i) \
{ \
if (strcmp (argv[i], "-isysroot") == 0) \
{ \
if (argv[i][9]) \
target_system_root = &argv[i][9]; \
else if (i + 1 < argc) \
{ \
target_system_root = argv[i+1]; \
++i; \
} \
} \
} \
} while (0)
#define SYSROOT_PRIORITY PREFIX_PRIORITY_FIRST
#undef GOMP_SELF_SPECS
#define GOMP_SELF_SPECS ""
#if 0
#define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor
#else
#define TARGET_ASM_OUTPUT_ANCHOR NULL
#endif
#define ENABLE_EXECUTE_STACK \
extern void __enable_execute_stack (void *); \
void \
__enable_execute_stack (void *addr) \
{ \
extern int mprotect (void *, size_t, int); \
extern int getpagesize (void); \
static int size; \
static long mask; \
\
char *page, *end; \
\
if (size == 0) \
{ \
size = getpagesize(); \
mask = ~((long) size - 1); \
} \
\
page = (char *) (((long) addr) & mask); \
end = (char *) ((((long) (addr + (TARGET_64BIT ? 48 : 40))) & mask) + size); \
\
\
(void) mprotect (page, end - page, 7); \
}
#define TARGET_CXX_CDTOR_RETURNS_THIS (darwin_kextabi_p)
extern int flag_mkernel;
extern int flag_apple_kext;
#define TARGET_KEXTABI flag_apple_kext
#define CHECK_FORMAT_CFSTRING(ARG,NUM,ATTR) objc_check_format_cfstring (ARG,NUM,ATTR)
#define CFSTRING_TYPE_NODE(T) darwin_cfstring_type_node (T)
#define CFSTRING_TYPE_CHECK(T) objc_check_cfstringref_type (T)
#ifndef CROSS_DIRECTORY_STRUCTURE
extern void darwin_default_min_version (int * argc, char *** argv,
enum darwin_version_type vers_type);
#define GCC_DRIVER_HOST_INITIALIZATION \
\
GCC_DRIVER_HOST_INITIALIZATION1; \
darwin_default_min_version (&argc, &argv, DARWIN_DEFAULT_VERSION_TYPE)
#endif
#endif