#ifndef CONFIG_DARWIN_H
#define CONFIG_DARWIN_H
#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
#define TARGET_OPTION_TRANSLATE_TABLE \
{ "-all_load", "-Zall_load" }, \
{ "-allowable_client", "-Zallowable_client" }, \
{ "-arch_errors_fatal", "-Zarch_errors_fatal" }, \
{ "-bundle", "-Zbundle" }, \
{ "-bundle_loader", "-Zbundle_loader" }, \
{ "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \
{ "-dependency-file", "-MF" }, \
{ "-dylib_file", "-Zdylib_file" }, \
{ "-dynamic", " " }, \
{ "-dynamiclib", "-Zdynamiclib" }, \
{ "-seg_addr_table_filename", "-Zseg_addr_table_filename" }, \
{ "-filelist", "-Xlinker -filelist -Xlinker" }, \
{ "-flat_namespace", "-Zflat_namespace" }, \
{ "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \
{ "-force_flat_namespace", "-Zforce_flat_namespace" }, \
{ "-framework", "-Xlinker -framework -Xlinker" }, \
{ "-image_base", "-Xlinker -image_base -Xlinker" }, \
{ "-init", "-Xlinker -init -Xlinker" }, \
{ "-install_name", "-Xlinker -install_name -Xlinker" }, \
{ "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \
{ "-multiply_defined", "-Zmultiply_defined" }, \
{ "-static", "-static -Wa,-static" }, \
{ "-traditional-cpp", "-no-cpp-precomp" }
#define FRAMEWORK_HEADERS
#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, "Zfilelist") ? 1 : \
!strcmp (STR, "Zframework") ? 1 : \
!strcmp (STR, "Zseg_addr_table_filename") ?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, "seg1addr") ? 1 : \
!strcmp (STR, "segprot") ? 3 : \
!strcmp (STR, "seg_addr_table") ? 1 : \
!strcmp (STR, "sub_library") ? 1 : \
!strcmp (STR, "sub_umbrella") ? 1 : \
!strcmp (STR, "umbrella") ? 1 : \
!strcmp (STR, "undefined") ? 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)
#undef WARN_FOUR_CHAR_CONSTANTS
#define WARN_FOUR_CHAR_CONSTANTS 0
#ifndef APPLE_CC
#define APPLE_CC 1041
#endif
#define STRINGIFY_THIS(x) # x
#define REALLY_STRINGIFY(x) STRINGIFY_THIS(x)
#undef CPP_SPEC
#define CPP_SPEC "-D__APPLE_CC__=" REALLY_STRINGIFY(APPLE_CC) " \
%{static:-D__STATIC__}%{!static:-D__DYNAMIC__} \
%{precomp-trustfile} %{arch}"
#undef CC1PLUS_SPEC
#define CC1PLUS_SPEC "-D__private_extern__=extern"
#define ASM_SPEC \
"%{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL}" \
"%{!Zforce_cpusubtype_ALL:%{faltivec:-force_cpusubtype_ALL}}"
#define LD_AND_LIBTOOL_FLAGS \
"%{Zallowable_client*:-allowable_client %*} \
%{Zarch_errors_fatal:-arch_errors_fatal} \
%{Zdylib_file*:-dylib_file %*} \
%{Zflat_namespace:-flat_namespace} \
%{Zframework*:-framework %*} \
%{headerpad_max_install_names*} \
%{image_base*} %{init*} \
%{nomultidefs} \
%{Zmultiply_defined*:-multiply_defined %*} \
%{Zmultiplydefinedunused*:-multiply_defined_unused %*} \
%{prebind} %{noprebind} %{prebind_all_twolevel_modules} \
%{read_only_relocs} \
%{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} %{seg_addr_table*} \
%{Zseg_addr_table_filename*:-seg_addr_table_filename %*} \
%{sub_library*} %{sub_umbrella*} \
%{twolevel_namespace} %{twolevel_namespace_hints} \
%{umbrella*} \
%{undefined*} \
%{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \
%{y*} \
%{segs_read_*} %{sectalign*} %{segcreate*} %{whyload} \
%{whatsloaded} "
#define LINK_COMMAND_SPEC "\
%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%(linker) -arch %T %{@:-arch_multiple}\
%l %X %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}\
%{@:-o %f%u.out}%{!@:%{o*}}\
%{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
%{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G %L}}\
%{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}"
#define LINK_SPEC \
"%{static}%{!static:-dynamic} \
%{Zall_load:-all_load} \
%{Zbundle:-bundle %{!Zdynamiclib:%{image_base*}}} \
%{Zbundle_loader*:-bundle_loader %*} \
%{client_name*} \
%{Zfilelist*:-filelist %*} \
%{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \
%{Zforce_flat_namespace:-force_flat_namespace} \
%{keep_private_externs} \
%{private_bundle} \
%{w} \
%{pagezero_size*} %{seglinkedit} %{noseglinkedit} \
%{sectobjectsymbols*} \
%{dylinker_install_name*} \
%{dylinker} %{Mach} \
%(ld_and_libtool_flags) "
#ifndef LIBTOOL_COMMAND_SPEC
#define LIBTOOL_COMMAND_SPEC "\
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%(linker) -arch_only %T\
%K %X %{!Zall_load:-noall_load}\
%{@:-o %f%u.out}%{!@:%{o}%{!o:-o a.out}}\
%{d} %{s} %{t} %{X} %{Z}\
%{static} %{!static:-dynamic}\
%{L*} %(link_libgcc)\
%o %{!nostdlib:%{!nodefaultlibs:%G %L}} \
%{!nostdlib:%{!nostartfiles:%E}} %{T*} %{F*} }}}}}}"
#endif
#define LIBTOOL_SPEC \
"%{compatibility_version*} %{current_version*} \
%{Zfilelist*:-filelist %*} \
%{install_name*} \
%(ld_and_libtool_flags)"
#undef LIB_SPEC
#define LIB_SPEC "%{!static:-lSystem}"
#undef LIBGCC_SPEC
#define LIBGCC_SPEC "%{static:-lgcc_static} \
%{!static:-lgcc}"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!dynamiclib:%{Zbundle:%{!static:-lbundle1.o}} \
%{!Zbundle:%{pg:%{static:-lgcrt0.o} \
%{!static:%{object:-lgcrt0.o} \
%{!object:%{preload:-lgcrt0.o} \
%{!preload:-lgcrt1.o -lcrtbegin.o}}}} \
%{!pg:%{static:-lcrt0.o} \
%{!static:%{object:-lcrt0.o} \
%{!object:%{preload:-lcrt0.o} \
%{!preload:-lcrt1.o -lcrtbegin.o}}}}}}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC ""
#undef DOLLARS_IN_IDENTIFIERS
#define DOLLARS_IN_IDENTIFIERS 2
#define SCCS_DIRECTIVE
#define DBX_DEBUGGING_INFO
#define DWARF2_DEBUGGING_INFO
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
#define DBX_ONLY_USED_SYMBOLS
#define DBX_USE_BINCL
#define DBX_CONTIN_LENGTH 0
#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END
#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
do { text_section (); \
fprintf (FILE, \
"\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n", "" , N_SO); \
} while (0)
#define NO_PROFILE_COUNTERS
#undef ASM_IDENTIFY_GCC
#define ASM_IDENTIFY_GCC(asm_out_file)
#undef INIT_SECTION_ASM_OP
#define INIT_SECTION_ASM_OP
#undef INVOKE__main
#define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor
#define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor
#undef ASM_FILE_START
#define ASM_FILE_START(FILE)
#undef ASM_FILE_END
#define ASM_FILE_END(FILE) \
do { \
machopic_finish (asm_out_file); \
if (strcmp (lang_hooks.name, "GNU C++") == 0) \
{ \
constructor_section (); \
destructor_section (); \
ASM_OUTPUT_ALIGN (FILE, 1); \
} \
} while (0)
#undef ASM_OUTPUT_LABEL
#define ASM_OUTPUT_LABEL(FILE,NAME) \
do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0)
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t.space %d\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 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_IS_COALESCED_OR_WEAK (DECL)) \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
machopic_define_name (xname); \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
ENCODE_SECTION_INFO (DECL); \
ASM_OUTPUT_LABEL (FILE, xname); \
} while (0)
#define ASM_DECLARE_FUNCTION_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_IS_COALESCED_OR_WEAK (DECL)) \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
machopic_define_name (xname); \
if ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL)) \
ENCODE_SECTION_INFO (DECL); \
ASM_OUTPUT_LABEL (FILE, xname); \
} while (0)
#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); \
\
if (NAME[1] != '"' && name_needs_quotes (&NAME[1])) \
fprintf (FILE, "\"%s\"", &NAME[1]); \
else \
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 if (NAME[0] != '"' && name_needs_quotes (NAME)) \
fprintf (FILE, "\"%s\"", NAME); \
\
else \
fprintf (FILE, "_%s", NAME); \
} while (0)
#undef TEXT_SECTION_ASM_OP
#define TEXT_SECTION_ASM_OP ".text"
#undef DATA_SECTION_ASM_OP
#define DATA_SECTION_ASM_OP ".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 { \
fputs (".lcomm ", (FILE)); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), ",%u,%u\n", (SIZE), floor_log2 ((ALIGN) / BITS_PER_UNIT)); \
if ((DECL) && ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL))) \
ENCODE_SECTION_INFO (DECL); \
if ((DECL) && ((TREE_STATIC (DECL) \
&& (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
|| DECL_INITIAL (DECL))) \
machopic_define_name (NAME); \
} while (0)
#undef ASM_OUTPUT_IDENT
#define ASM_OUTPUT_IDENT(FILE, NAME)
#undef MAX_OFILE_ALIGNMENT
#define MAX_OFILE_ALIGNMENT 0x8000
#define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \
darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2)
#undef SECTION_FUNCTION
#define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, OBJC) \
extern void FUNCTION PARAMS ((void)); \
void \
FUNCTION () \
{ \
if (in_section != SECTION) \
{ \
if (OBJC) \
objc_section_init (); \
data_section (); \
if (asm_out_file) \
fprintf (asm_out_file, "%s\n", DIRECTIVE); \
in_section = SECTION; \
} \
} \
#define ALIAS_SECTION(enum_value, alias_name) \
do { if (!strcmp (alias_name, name)) \
section_alias[enum_value] = (alias ? get_identifier (alias) : 0); \
} while (0)
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS \
in_const, in_const_data, in_cstring, in_literal4, in_literal8, \
in_constructor, in_destructor, in_mod_init, in_mod_term, \
in_objc_class, in_objc_meta_class, in_objc_category, \
in_objc_class_vars, in_objc_instance_vars, \
in_objc_cls_meth, in_objc_inst_meth, \
in_objc_cat_cls_meth, in_objc_cat_inst_meth, \
in_objc_selector_refs, \
in_objc_selector_fixup, \
in_objc_symbols, in_objc_module_info, \
in_objc_protocol, in_objc_string_object, \
in_objc_constant_string_object, \
in_objc_class_names, in_objc_meth_var_names, \
in_objc_meth_var_types, in_objc_cls_refs, \
in_machopic_nl_symbol_ptr, \
in_machopic_lazy_symbol_ptr, \
in_machopic_symbol_stub, \
in_machopic_picsymbol_stub, \
in_darwin_exception, in_darwin_eh_frame, \
num_sections
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
static void objc_section_init PARAMS ((void)); \
SECTION_FUNCTION (const_section, \
in_const, \
".const", 0) \
SECTION_FUNCTION (const_data_section, \
in_const_data, \
".const_data", 0) \
SECTION_FUNCTION (cstring_section, \
in_cstring, \
".cstring", 0) \
SECTION_FUNCTION (literal4_section, \
in_literal4, \
".literal4", 0) \
SECTION_FUNCTION (literal8_section, \
in_literal8, \
".literal8", 0) \
SECTION_FUNCTION (constructor_section, \
in_constructor, \
".constructor", 0) \
SECTION_FUNCTION (mod_init_section, \
in_mod_init, \
".mod_init_func", 0) \
SECTION_FUNCTION (mod_term_section, \
in_mod_term, \
".mod_term_func", 0) \
SECTION_FUNCTION (destructor_section, \
in_destructor, \
".destructor", 0) \
SECTION_FUNCTION (objc_class_section, \
in_objc_class, \
".objc_class", 1) \
SECTION_FUNCTION (objc_meta_class_section, \
in_objc_meta_class, \
".objc_meta_class", 1) \
SECTION_FUNCTION (objc_category_section, \
in_objc_category, \
".objc_category", 1) \
SECTION_FUNCTION (objc_class_vars_section, \
in_objc_class_vars, \
".objc_class_vars", 1) \
SECTION_FUNCTION (objc_instance_vars_section, \
in_objc_instance_vars, \
".objc_instance_vars", 1) \
SECTION_FUNCTION (objc_cls_meth_section, \
in_objc_cls_meth, \
".objc_cls_meth", 1) \
SECTION_FUNCTION (objc_inst_meth_section, \
in_objc_inst_meth, \
".objc_inst_meth", 1) \
SECTION_FUNCTION (objc_cat_cls_meth_section, \
in_objc_cat_cls_meth, \
".objc_cat_cls_meth", 1) \
SECTION_FUNCTION (objc_cat_inst_meth_section, \
in_objc_cat_inst_meth, \
".objc_cat_inst_meth", 1) \
SECTION_FUNCTION (objc_selector_refs_section, \
in_objc_selector_refs, \
".objc_message_refs", 1) \
SECTION_FUNCTION (objc_selector_fixup_section, \
in_objc_selector_fixup, \
".section __OBJC, __sel_fixup", 1) \
SECTION_FUNCTION (objc_symbols_section, \
in_objc_symbols, \
".objc_symbols", 1) \
SECTION_FUNCTION (objc_module_info_section, \
in_objc_module_info, \
".objc_module_info", 1) \
SECTION_FUNCTION (objc_protocol_section, \
in_objc_protocol, \
".objc_protocol", 1) \
SECTION_FUNCTION (objc_string_object_section, \
in_objc_string_object, \
".objc_string_object", 1) \
SECTION_FUNCTION (objc_constant_string_object_section, \
in_objc_constant_string_object, \
".section __OBJC, __cstring_object", 1) \
SECTION_FUNCTION (objc_class_names_section, \
in_objc_class_names, \
".objc_class_names", 1) \
SECTION_FUNCTION (objc_meth_var_names_section, \
in_objc_meth_var_names, \
".objc_meth_var_names", 1) \
SECTION_FUNCTION (objc_meth_var_types_section, \
in_objc_meth_var_types, \
".objc_meth_var_types", 1) \
SECTION_FUNCTION (objc_cls_refs_section, \
in_objc_cls_refs, \
".objc_cls_refs", 1) \
\
SECTION_FUNCTION (machopic_lazy_symbol_ptr_section, \
in_machopic_lazy_symbol_ptr, \
".lazy_symbol_pointer", 0) \
SECTION_FUNCTION (machopic_nl_symbol_ptr_section, \
in_machopic_nl_symbol_ptr, \
".non_lazy_symbol_pointer", 0) \
SECTION_FUNCTION (machopic_symbol_stub_section, \
in_machopic_symbol_stub, \
".symbol_stub", 0) \
SECTION_FUNCTION (machopic_picsymbol_stub_section, \
in_machopic_picsymbol_stub, \
".picsymbol_stub", 0) \
SECTION_FUNCTION (darwin_exception_section, \
in_darwin_exception, \
\
".section __DATA,__gcc_except_tab", 0) \
SECTION_FUNCTION (darwin_eh_frame_section, \
in_darwin_eh_frame, \
\
".section __DATA,__eh_frame", 0) \
\
static void \
objc_section_init () \
{ \
static int been_here = 0; \
\
if (been_here == 0) \
{ \
been_here = 1; \
\
objc_cat_cls_meth_section (); \
objc_cat_inst_meth_section (); \
objc_string_object_section (); \
objc_constant_string_object_section (); \
objc_selector_refs_section (); \
objc_selector_fixup_section (); \
objc_cls_refs_section (); \
objc_class_section (); \
objc_meta_class_section (); \
\
objc_cls_meth_section (); \
objc_inst_meth_section (); \
objc_protocol_section (); \
objc_class_names_section (); \
objc_meth_var_types_section (); \
objc_meth_var_names_section (); \
objc_category_section (); \
objc_class_vars_section (); \
objc_instance_vars_section (); \
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) || MACHOPIC_INDIRECT && 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 (MACHOPIC_INDIRECT && reloc ) const_data_section (); \
else readonly_data_section (); } \
else \
data_section (); \
} \
else \
\
if (darwin_set_section_for_var_p (exp, reloc, align)) \
; \
else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) \
{ \
\
if (TREE_SIDE_EFFECTS (exp) || MACHOPIC_INDIRECT && reloc) \
const_data_section (); \
else \
readonly_data_section (); \
} \
else \
data_section (); \
try_section_alias (); \
} \
while (0)
#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_data_section (); \
} \
while (0)
#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"); \
assemble_global (NAME); \
} \
} while (0)
#undef ASM_GLOBALIZE_LABEL
#define ASM_GLOBALIZE_LABEL(FILE,NAME) \
do { const char *const _x = (NAME); if (!!strncmp (_x, "_OBJC_", 6)) { \
(fputs (".globl ", FILE), assemble_name (FILE, _x), fputs ("\n", FILE)); \
}} while (0)
#define ASM_PRIVATE_EXTERNIZE_LABEL(FILE, NAME) \
do { const char* _x = (NAME); if (!!strncmp (_x, "_OBJC_", 6)) { \
fputs (".private_extern ", FILE); assemble_name (FILE, _x); \
fputs ("\n", FILE); }} while (0)
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM))
#undef ASM_OUTPUT_INTERNAL_LABEL
#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
fprintf (FILE, "%s%d:\n", PREFIX, NUM)
#ifndef JUMP_TABLES_IN_TEXT_SECTION
#define JUMP_TABLES_IN_TEXT_SECTION 1
#endif
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_DYNAMIC_NO_PIC)
#define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P ())
#define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P ())
#define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P ())
#define COMMON_NOT_SUPPORTED_P() (flag_no_common || MACHOPIC_PURE)
#undef ENCODE_SECTION_INFO
#define ENCODE_SECTION_INFO(DECL) \
darwin_encode_section_info (DECL)
#define REDO_SECTION_INFO_P(DECL) (1)
#define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \
((VAR) = ((SYMBOL_NAME[0] == '!') ? (SYMBOL_NAME) + 4 : (SYMBOL_NAME)))
#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_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
do { \
const char *symbol_ = (SYMBOL); \
char *buffer_ = (BUF); \
STRIP_NAME_ENCODING (symbol_, symbol_); \
if (symbol_[0] == '"') \
{ \
strcpy (buffer_, "\"L"); \
strcpy (buffer_ + 2, symbol_ + 1); \
strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \
} \
else if (name_needs_quotes (symbol_)) \
{ \
strcpy (buffer_, "\"L"); \
strcpy (buffer_ + 2, symbol_); \
strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \
} \
else \
{ \
strcpy (buffer_, "L"); \
strcpy (buffer_ + 1, symbol_); \
strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \
} \
} while (0)
#define TARGET_ASM_EXCEPTION_SECTION darwin_exception_section
#define TARGET_ASM_EH_FRAME_SECTION darwin_eh_frame_section
#undef ASM_PREFERRED_EH_DATA_FORMAT
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
(((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
struct __live_images {
unsigned long this_size;
struct mach_header *mh;
unsigned long vm_slide;
void (*destructor)(struct __live_images *);
struct __live_images *next;
unsigned int examined_p;
void *fde;
void *object_info;
unsigned long info[2];
};
#define DWARF2_OBJECT_END_PTR_EXTENSION
#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, "pack", darwin_pragma_pack); \
\
cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore); \
cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused); \
\
cpp_register_pragma (PFILE, 0, "CALL_ON_LOAD", \
darwin_pragma_call_on_load); \
cpp_register_pragma (PFILE, 0, "CALL_ON_UNLOAD", \
darwin_pragma_call_on_unload); \
\
\
cpp_register_pragma (PFILE, 0, "CC_NO_MACH_TEXT_SECTIONS", darwin_pragma_cc_no_mach_text_sections); \
cpp_register_pragma (PFILE, 0, "CC_OPT_OFF", darwin_pragma_cc_opt_off); \
cpp_register_pragma (PFILE, 0, "CC_OPT_ON", darwin_pragma_cc_opt_on); \
cpp_register_pragma (PFILE, 0, "CC_OPT_RESTORE", darwin_pragma_cc_opt_restore); \
cpp_register_pragma (PFILE, 0, "CC_WRITABLE_STRINGS", darwin_pragma_cc_writable_strings); \
cpp_register_pragma (PFILE, 0, "CC_NON_WRITABLE_STRINGS", darwin_pragma_cc_non_writable_strings); \
\
} while (0)
#undef ASM_APP_ON
#define ASM_APP_ON ""
#undef ASM_APP_OFF
#define ASM_APP_OFF ""
#define HAVE_COALESCED_SYMBOLS
#define __MAKE_DECL_COALESCED(DECL, PRIVATE_EXTERN_P, NO_TOC_P) \
do { \
const char *sec; \
\
if (!MACHOPIC_INDIRECT) \
break; \
DECL_COALESCED (DECL) = 1; \
if (PRIVATE_EXTERN_P) \
DECL_PRIVATE_EXTERN (DECL) = 1; \
TREE_PUBLIC (DECL) = 1; \
if (TREE_CODE (DECL) == FUNCTION_DECL) \
sec = (NO_TOC_P) ? "__TEXT,__textcoal_nt,coalesced,no_toc" \
: "__TEXT,__textcoal,coalesced"; \
else \
sec = (NO_TOC_P) ? "__DATA,__datacoal_nt,coalesced,no_toc" \
: "__DATA,__datacoal,coalesced"; \
DECL_SECTION_NAME (DECL) = build_string (strlen (sec), sec); \
} while (0)
#define MAKE_DECL_COALESCED(DECL) __MAKE_DECL_COALESCED (DECL, 1, 0)
#define MAKE_DECL_COALESCED_GLOBAL(DECL) __MAKE_DECL_COALESCED (DECL, 0, 0)
#define MAKE_DECL_COALESCED_NO_TOC(DECL) __MAKE_DECL_COALESCED (DECL, 1, 1)
#define COALESCE_STATIC_THUNK(DECL) MAKE_DECL_COALESCED_NO_TOC (DECL)
#define SUPPORTS_ONE_ONLY (0 && flag_coalesce && MACHOPIC_INDIRECT)
#define MAKE_DECL_ONE_ONLY(DECL) \
do { \
if (SUPPORTS_ONE_ONLY) \
{ \
MAKE_DECL_COALESCED (DECL); \
DECL_WEAK (DECL) = 1; \
} \
} while (0)
#undef TARGET_ASM_NAMED_SECTION
#define TARGET_ASM_NAMED_SECTION darwin_asm_named_section
#undef TARGET_SECTION_TYPE_FLAGS
#define TARGET_SECTION_TYPE_FLAGS darwin_section_type_flags
#ifdef HAVE_COALESCED_SYMBOLS
#define DECL_IS_COALESCED_OR_WEAK(DECL) \
(DECL_COALESCED (DECL) || DECL_WEAK (DECL))
#else
#define DECL_IS_COALESCED_OR_WEAK(DECL) DECL_WEAK (DECL)
#endif
extern int machopic_var_referred_to_p PARAMS ((const char*));
#define MACHOPIC_VAR_REFERRED_TO_P(NAME) machopic_var_referred_to_p (NAME)
#define EXIT_FROM_FATAL_DIAGNOSTIC(status) abort_assembly_and_exit (status)
extern void abort_assembly_and_exit (int status) ATTRIBUTE_NORETURN;
#ifdef RS6000_VECTOR_ALIGNMENT
#define PEG_ALIGN_FOR_MAC68K(DESIRED) \
((flag_altivec && (DESIRED) == RS6000_VECTOR_ALIGNMENT) \
? RS6000_VECTOR_ALIGNMENT \
: MIN ((DESIRED), 16))
#else
#define PEG_ALIGN_FOR_MAC68K(DESIRED) MIN ((DESIRED), 16)
#endif
#define SUBTARGET_ATTRIBUTE_TABLE \
\
{ "apple_kext_compatibility", 0, 0, 0, 1, 0, darwin_handle_odd_attribute }
#define POSSIBLY_COMPILING_APPLE_KEXT_P() \
(! MACHOPIC_INDIRECT && c_language == clk_cplusplus)
#define CHECK_TRIVIAL_FUNCTION(DECL) \
do { \
const char *_name = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
if (POSSIBLY_COMPILING_APPLE_KEXT_P () && 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 (POSSIBLY_COMPILING_APPLE_KEXT_P () && flag_apple_kext) \
(IDX) = fold (build (PLUS_EXPR, TREE_TYPE (IDX), IDX, size_int (2))); \
} while (0)
#define ASM_OUTPUT_ZEROFILL(FILE, NAME, SIZE, ALIGNMENT) \
do { fputs (".zerofill __DATA, __common, ", (FILE)); \
assemble_name ((FILE), (NAME)); \
fprintf ((FILE), ", %u, %u\n", (SIZE), (ALIGNMENT)); \
in_section = no_section; \
} while (0)
#endif