00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #define OBJECT_FORMAT_MACHO
00043
00044
00045
00046
00047
00048 #define MATH_LIBRARY ""
00049
00050
00051
00052 #define HAVE_ATEXIT
00053
00054
00055
00056 #define DO_GLOBAL_DTORS_BODY
00057
00058
00059
00060 #ifndef SIZE_TYPE
00061 #define SIZE_TYPE "long unsigned int"
00062 #endif
00063
00064
00065
00066 #undef PTRDIFF_TYPE
00067 #define PTRDIFF_TYPE "int"
00068
00069
00070
00071 #undef WCHAR_TYPE
00072 #define WCHAR_TYPE "int"
00073 #undef WCHAR_TYPE_SIZE
00074 #define WCHAR_TYPE_SIZE 32
00075
00076
00077
00078
00079 #define NEXT_OBJC_RUNTIME
00080
00081
00082
00083
00084 #undef DEFAULT_PCC_STRUCT_RETURN
00085 #define DEFAULT_PCC_STRUCT_RETURN 0
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 #define TARGET_OPTION_TRANSLATE_TABLE \
00104 { "-all_load", "-Zall_load" }, \
00105 { "-allowable_client", "-Zallowable_client" }, \
00106 { "-arch_errors_fatal", "-Zarch_errors_fatal" }, \
00107 { "-bind_at_load", "-Zbind_at_load" }, \
00108 { "-bundle", "-Zbundle" }, \
00109 { "-bundle_loader", "-Zbundle_loader" }, \
00110 { "-weak_reference_mismatches", "-Zweak_reference_mismatches" }, \
00111 { "-dependency-file", "-MF" }, \
00112 { "-dylib_file", "-Zdylib_file" }, \
00113 { "-dynamic", "-Zdynamic" }, \
00114 { "-dynamiclib", "-Zdynamiclib" }, \
00115 { "-exported_symbols_list", "-Zexported_symbols_list" }, \
00116 { "-seg_addr_table_filename", "-Zseg_addr_table_filename" }, \
00117 { "-filelist", "-Xlinker -filelist -Xlinker" }, \
00118 { "-flat_namespace", "-Zflat_namespace" }, \
00119 { "-force_cpusubtype_ALL", "-Zforce_cpusubtype_ALL" }, \
00120 { "-force_flat_namespace", "-Zforce_flat_namespace" }, \
00121 { "-image_base", "-Zimage_base" }, \
00122 { "-init", "-Zinit" }, \
00123 { "-install_name", "-Zinstall_name" }, \
00124 { "-multiply_defined_unused", "-Zmultiplydefinedunused" }, \
00125 { "-multiply_defined", "-Zmultiply_defined" }, \
00126 { "-multi_module", "-Zmulti_module" }, \
00127 { "-static", "-static -Wa,-static" }, \
00128 { "-single_module", "-Zsingle_module" }, \
00129 { "-unexported_symbols_list", "-Zunexported_symbols_list" }
00130
00131
00132
00133 #undef WORD_SWITCH_TAKES_ARG
00134 #define WORD_SWITCH_TAKES_ARG(STR) \
00135 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 : \
00136 !strcmp (STR, "Zallowable_client") ? 1 : \
00137 !strcmp (STR, "arch") ? 1 : \
00138 !strcmp (STR, "arch_only") ? 1 : \
00139 !strcmp (STR, "Zbundle_loader") ? 1 : \
00140 !strcmp (STR, "client_name") ? 1 : \
00141 !strcmp (STR, "compatibility_version") ? 1 : \
00142 !strcmp (STR, "current_version") ? 1 : \
00143 !strcmp (STR, "Zdylib_file") ? 1 : \
00144 !strcmp (STR, "Zexported_symbols_list") ? 1 : \
00145 !strcmp (STR, "Zimage_base") ? 1 : \
00146 !strcmp (STR, "Zinit") ? 1 : \
00147 !strcmp (STR, "Zinstall_name") ? 1 : \
00148 !strcmp (STR, "Zmultiplydefinedunused") ? 1 : \
00149 !strcmp (STR, "Zmultiply_defined") ? 1 : \
00150 !strcmp (STR, "precomp-trustfile") ? 1 : \
00151 !strcmp (STR, "read_only_relocs") ? 1 : \
00152 !strcmp (STR, "sectcreate") ? 3 : \
00153 !strcmp (STR, "sectorder") ? 3 : \
00154 !strcmp (STR, "Zseg_addr_table_filename") ?1 :\
00155 !strcmp (STR, "seg1addr") ? 1 : \
00156 !strcmp (STR, "segprot") ? 3 : \
00157 !strcmp (STR, "seg_addr_table") ? 1 : \
00158 !strcmp (STR, "sub_library") ? 1 : \
00159 !strcmp (STR, "sub_umbrella") ? 1 : \
00160 !strcmp (STR, "umbrella") ? 1 : \
00161 !strcmp (STR, "undefined") ? 1 : \
00162 !strcmp (STR, "Zunexported_symbols_list") ? 1 : \
00163 !strcmp (STR, "Zweak_reference_mismatches") ? 1 : \
00164 !strcmp (STR, "pagezero_size") ? 1 : \
00165 !strcmp (STR, "segs_read_only_addr") ? 1 : \
00166 !strcmp (STR, "segs_read_write_addr") ? 1 : \
00167 !strcmp (STR, "sectalign") ? 3 : \
00168 !strcmp (STR, "sectobjectsymbols") ? 2 : \
00169 !strcmp (STR, "segcreate") ? 3 : \
00170 !strcmp (STR, "dylinker_install_name") ? 1 : \
00171 0)
00172
00173
00174
00175 #undef CPP_SPEC
00176 #define CPP_SPEC "%{static:%{!dynamic:-D__STATIC__}}%{!static:-D__DYNAMIC__}"
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 #define LINK_COMMAND_SPEC "\
00187 %{!fdump=*:%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\
00188 %{!Zdynamiclib:%(linker)}%{Zdynamiclib:/usr/bin/libtool} \
00189 %l %X %{d} %{s} %{t} %{Z} \
00190 %{!Zdynamiclib:%{A} %{e*} %{m} %{N} %{n} %{r} %{u*} %{x} %{z}} \
00191 %{@:-o %f%u.out}%{!@:%{o*}%{!o:-o a.out}} \
00192 %{!Zdynamiclib:%{!A:%{!nostdlib:%{!nostartfiles:%S}}}} \
00193 %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G %L}} \
00194 %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} \
00195 %{!--help:%{!no-c++filt|c++filt:| c++filt3 }} }}}}}}}}"
00196
00197
00198
00199
00200
00201
00202
00203
00204 #define LINK_SPEC \
00205 "%{static}%{!static:-dynamic} \
00206 %{!Zdynamiclib: \
00207 %{Zbundle:-bundle} \
00208 %{Zbundle_loader*:-bundle_loader %*} \
00209 %{client_name*} \
00210 %{compatibility_version*:%e-compatibility_version only allowed with -dynamiclib\
00211 } \
00212 %{current_version*:%e-current_version only allowed with -dynamiclib} \
00213 %{Zforce_cpusubtype_ALL:-force_cpusubtype_ALL} \
00214 %{Zforce_flat_namespace:-force_flat_namespace} \
00215 %{Zinstall_name*:%e-install_name only allowed with -dynamiclib} \
00216 %{keep_private_externs} \
00217 %{private_bundle} \
00218 } \
00219 %{Zdynamiclib: \
00220 %{Zbundle:%e-bundle not allowed with -dynamiclib} \
00221 %{Zbundle_loader*:%e-bundle_loader not allowed with -dynamiclib} \
00222 %{client_name*:%e-client_name not allowed with -dynamiclib} \
00223 %{compatibility_version*} \
00224 %{current_version*} \
00225 %{Zforce_cpusubtype_ALL:%e-force_cpusubtype_ALL not allowed with -dynamiclib} \
00226 %{Zforce_flat_namespace:%e-force_flat_namespace not allowed with -dynamiclib} \
00227 %{Zinstall_name*:-install_name %*} \
00228 %{keep_private_externs:%e-keep_private_externs not allowed with -dynamiclib} \
00229 %{private_bundle:%e-private_bundle not allowed with -dynamiclib} \
00230 } \
00231 %{Zall_load:-all_load}%{Zdynamiclib:%{!Zall_load:-noall_load}} \
00232 %{Zallowable_client*:-allowable_client %*} \
00233 %{Zbind_at_load:-bind_at_load} \
00234 %{Zarch_errors_fatal:-arch_errors_fatal} \
00235 %{Zdylib_file*:-dylib_file %*} \
00236 %{Zdynamic:-dynamic}\
00237 %{Zexported_symbols_list*:-exported_symbols_list %*} \
00238 %{Zflat_namespace:-flat_namespace} \
00239 %{headerpad_max_install_names*} \
00240 %{Zimage_base*:-image_base %*} \
00241 %{Zinit*:-init %*} \
00242 %{nomultidefs} \
00243 %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \
00244 %{Zmultiply_defined*:-multiply_defined %*} \
00245 %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \
00246 %{prebind} %{noprebind} %{prebind_all_twolevel_modules} \
00247 %{read_only_relocs} \
00248 %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} %{seg_addr_table*} \
00249 %{Zseg_addr_table_filename*:-seg_addr_table_filename %*} \
00250 %{sub_library*} %{sub_umbrella*} \
00251 %{twolevel_namespace} %{twolevel_namespace_hints} \
00252 %{umbrella*} \
00253 %{undefined*} \
00254 %{Zunexported_symbols_list*:-unexported_symbols_list %*} \
00255 %{Zweak_reference_mismatches*:-weak_reference_mismatches %*} \
00256 %{X} \
00257 %{y*} \
00258 %{w} \
00259 %{pagezero_size*} %{segs_read_*} %{seglinkedit} %{noseglinkedit} \
00260 %{sectalign*} %{sectobjectsymbols*} %{segcreate*} %{whyload} \
00261 %{whatsloaded} %{dylinker_install_name*} \
00262 %{dylinker} %{Mach} "
00263
00264
00265
00266
00267 #undef LIB_SPEC
00268 #define LIB_SPEC "%{!static:-lSystem}"
00269
00270
00271
00272 #undef STARTFILE_SPEC
00273 #define STARTFILE_SPEC \
00274 "%{!Zdynamiclib:%{Zbundle:%{!static:-lbundle1.o}} \
00275 %{!Zbundle:%{pg:%{static:-lgcrt0.o} \
00276 %{!static:%{object:-lgcrt0.o} \
00277 %{!object:%{preload:-lgcrt0.o} \
00278 %{!preload:-lgcrt1.o -lcrt2.o}}}} \
00279 %{!pg:%{static:-lcrt0.o} \
00280 %{!static:%{object:-lcrt0.o} \
00281 %{!object:%{preload:-lcrt0.o} \
00282 %{!preload:-lcrt1.o -lcrt2.o}}}}}}"
00283
00284
00285
00286
00287
00288
00289 #undef DOLLARS_IN_IDENTIFIERS
00290 #define DOLLARS_IN_IDENTIFIERS 2
00291
00292
00293
00294 #define DBX_DEBUGGING_INFO 1
00295
00296
00297
00298 #define DBX_USE_BINCL
00299
00300
00301
00302 #define DBX_CONTIN_LENGTH 0
00303
00304
00305
00306 #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END
00307 #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
00308 do { text_section (); \
00309 fprintf (FILE, \
00310 "\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n", "" , N_SO); \
00311 } while (0)
00312
00313
00314
00315 #define NO_PROFILE_COUNTERS 1
00316
00317 #undef INIT_SECTION_ASM_OP
00318 #define INIT_SECTION_ASM_OP
00319
00320 #undef INVOKE__main
00321
00322 #define TARGET_ASM_CONSTRUCTOR machopic_asm_out_constructor
00323 #define TARGET_ASM_DESTRUCTOR machopic_asm_out_destructor
00324
00325
00326
00327 #define USER_LABEL_PREFIX "_"
00328
00329
00330
00331
00332 #undef ASM_FILE_START
00333 #define ASM_FILE_START(FILE)
00334
00335 #undef ASM_FILE_END
00336 #define ASM_FILE_END(FILE) \
00337 do { \
00338 machopic_finish (asm_out_file); \
00339 if (strcmp (lang_hooks.name, "GNU C++") == 0) \
00340 { \
00341 constructor_section (); \
00342 destructor_section (); \
00343 ASM_OUTPUT_ALIGN (FILE, 1); \
00344 } \
00345 } while (0)
00346
00347 #define ASM_OUTPUT_SKIP(FILE,SIZE) \
00348 fprintf (FILE, "\t.space %d\n", SIZE)
00349
00350
00351
00352 #undef OBJC_GEN_METHOD_LABEL
00353 #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
00354 do { if (CAT_NAME) \
00355 sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \
00356 (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \
00357 else \
00358 sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \
00359 (CLASS_NAME), (SEL_NAME)); \
00360 } while (0)
00361
00362
00363
00364
00365
00366
00367
00368 #undef ASM_DECLARE_OBJECT_NAME
00369 #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
00370 do { \
00371 const char *xname = NAME; \
00372 if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
00373 xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
00374 if ((TREE_STATIC (DECL) \
00375 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00376 || DECL_INITIAL (DECL)) \
00377 machopic_define_name (xname); \
00378 if ((TREE_STATIC (DECL) \
00379 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00380 || DECL_INITIAL (DECL)) \
00381 (* targetm.encode_section_info) (DECL, false); \
00382 ASM_OUTPUT_LABEL (FILE, xname); \
00383
00384 \
00385 if (tree_low_cst (DECL_SIZE_UNIT (DECL), 1) == 0) \
00386 assemble_zeros (1); \
00387 } while (0)
00388
00389 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
00390 do { \
00391 const char *xname = NAME; \
00392 if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \
00393 xname = IDENTIFIER_POINTER (DECL_NAME (DECL)); \
00394 if ((TREE_STATIC (DECL) \
00395 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00396 || DECL_INITIAL (DECL)) \
00397 machopic_define_name (xname); \
00398 if ((TREE_STATIC (DECL) \
00399 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00400 || DECL_INITIAL (DECL)) \
00401 (* targetm.encode_section_info) (DECL, false); \
00402 ASM_OUTPUT_LABEL (FILE, xname); \
00403
00404 \
00405 machopic_output_possible_stub_label (FILE, xname); \
00406 } while (0)
00407
00408 #define ASM_DECLARE_CONSTANT_NAME(FILE, NAME, EXP, SIZE) \
00409 do { \
00410 ASM_OUTPUT_LABEL (FILE, NAME); \
00411
00412 \
00413 if ((SIZE) == 0) \
00414 assemble_zeros (1); \
00415 } while (0)
00416
00417
00418
00419
00420 #undef ASM_OUTPUT_LABELREF
00421 #define ASM_OUTPUT_LABELREF(FILE,NAME) \
00422 do { \
00423 const char *xname = darwin_strip_name_encoding (NAME); \
00424 if (xname[0] == '&' || xname[0] == '*') \
00425 { \
00426 int len = strlen (xname); \
00427 if (len > 6 && !strcmp ("$stub", xname + len - 5)) \
00428 machopic_validate_stub_or_non_lazy_ptr (xname, 1); \
00429 else if (len > 7 && !strcmp ("$stub\"", xname + len - 6)) \
00430 machopic_validate_stub_or_non_lazy_ptr (xname, 1); \
00431 else if (len > 14 && !strcmp ("$non_lazy_ptr", xname + len - 13)) \
00432 machopic_validate_stub_or_non_lazy_ptr (xname, 0); \
00433 fputs (&xname[1], FILE); \
00434 } \
00435 else if (xname[0] == '+' || xname[0] == '-') \
00436 fprintf (FILE, "\"%s\"", xname); \
00437 else if (!strncmp (xname, "_OBJC_", 6)) \
00438 fprintf (FILE, "L%s", xname); \
00439 else if (!strncmp (xname, ".objc_class_name_", 17)) \
00440 fprintf (FILE, "%s", xname); \
00441 else \
00442 fprintf (FILE, "_%s", xname); \
00443 } while (0)
00444
00445
00446 #undef TEXT_SECTION_ASM_OP
00447 #define TEXT_SECTION_ASM_OP ".text"
00448
00449
00450
00451 #undef DATA_SECTION_ASM_OP
00452 #define DATA_SECTION_ASM_OP ".data"
00453
00454 #undef ALIGN_ASM_OP
00455 #define ALIGN_ASM_OP ".align"
00456
00457 #undef ASM_OUTPUT_ALIGN
00458 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
00459 if ((LOG) != 0) \
00460 fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG))
00461
00462
00463
00464 #undef ASM_OUTPUT_ALIGNED_DECL_LOCAL
00465 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
00466 do { \
00467 fputs (".lcomm ", (FILE)); \
00468 assemble_name ((FILE), (NAME)); \
00469 fprintf ((FILE), ",%u,%u\n", (SIZE), \
00470 floor_log2 ((ALIGN) / BITS_PER_UNIT)); \
00471 if ((DECL) && ((TREE_STATIC (DECL) \
00472 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00473 || DECL_INITIAL (DECL))) \
00474 (* targetm.encode_section_info) (DECL, false); \
00475 if ((DECL) && ((TREE_STATIC (DECL) \
00476 && (!DECL_COMMON (DECL) || !TREE_PUBLIC (DECL))) \
00477 || DECL_INITIAL (DECL))) \
00478 machopic_define_name (NAME); \
00479 } while (0)
00480
00481
00482
00483
00484 #undef MAX_OFILE_ALIGNMENT
00485 #define MAX_OFILE_ALIGNMENT 0x8000
00486
00487
00488
00489 #undef SECTION_FUNCTION
00490 #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, OBJC) \
00491 extern void FUNCTION PARAMS ((void)); \
00492 void \
00493 FUNCTION () \
00494 { \
00495 if (in_section != SECTION) \
00496 { \
00497 if (OBJC) \
00498 objc_section_init (); \
00499 data_section (); \
00500 if (asm_out_file) \
00501 fprintf (asm_out_file, "%s\n", DIRECTIVE); \
00502 in_section = SECTION; \
00503 } \
00504 } \
00505
00506
00507
00508 #undef EXTRA_SECTIONS
00509 #define EXTRA_SECTIONS \
00510 in_const, in_const_data, in_cstring, in_literal4, in_literal8, \
00511 in_constructor, in_destructor, in_mod_init, in_mod_term, \
00512 in_objc_class, in_objc_meta_class, in_objc_category, \
00513 in_objc_class_vars, in_objc_instance_vars, \
00514 in_objc_cls_meth, in_objc_inst_meth, \
00515 in_objc_cat_cls_meth, in_objc_cat_inst_meth, \
00516 in_objc_selector_refs, \
00517 in_objc_selector_fixup, \
00518 in_objc_symbols, in_objc_module_info, \
00519 in_objc_protocol, in_objc_string_object, \
00520 in_objc_constant_string_object, \
00521 in_objc_class_names, in_objc_meth_var_names, \
00522 in_objc_meth_var_types, in_objc_cls_refs, \
00523 in_machopic_nl_symbol_ptr, \
00524 in_machopic_lazy_symbol_ptr, \
00525 in_machopic_symbol_stub, \
00526 in_machopic_picsymbol_stub, \
00527 in_darwin_exception, in_darwin_eh_frame, \
00528 num_sections
00529
00530 #undef EXTRA_SECTION_FUNCTIONS
00531 #define EXTRA_SECTION_FUNCTIONS \
00532 static void objc_section_init PARAMS ((void)); \
00533 SECTION_FUNCTION (const_section, \
00534 in_const, \
00535 ".const", 0) \
00536 SECTION_FUNCTION (const_data_section, \
00537 in_const_data, \
00538 ".const_data", 0) \
00539 SECTION_FUNCTION (cstring_section, \
00540 in_cstring, \
00541 ".cstring", 0) \
00542 SECTION_FUNCTION (literal4_section, \
00543 in_literal4, \
00544 ".literal4", 0) \
00545 SECTION_FUNCTION (literal8_section, \
00546 in_literal8, \
00547 ".literal8", 0) \
00548 SECTION_FUNCTION (constructor_section, \
00549 in_constructor, \
00550 ".constructor", 0) \
00551 SECTION_FUNCTION (mod_init_section, \
00552 in_mod_init, \
00553 ".mod_init_func", 0) \
00554 SECTION_FUNCTION (mod_term_section, \
00555 in_mod_term, \
00556 ".mod_term_func", 0) \
00557 SECTION_FUNCTION (destructor_section, \
00558 in_destructor, \
00559 ".destructor", 0) \
00560 SECTION_FUNCTION (objc_class_section, \
00561 in_objc_class, \
00562 ".objc_class", 1) \
00563 SECTION_FUNCTION (objc_meta_class_section, \
00564 in_objc_meta_class, \
00565 ".objc_meta_class", 1) \
00566 SECTION_FUNCTION (objc_category_section, \
00567 in_objc_category, \
00568 ".objc_category", 1) \
00569 SECTION_FUNCTION (objc_class_vars_section, \
00570 in_objc_class_vars, \
00571 ".objc_class_vars", 1) \
00572 SECTION_FUNCTION (objc_instance_vars_section, \
00573 in_objc_instance_vars, \
00574 ".objc_instance_vars", 1) \
00575 SECTION_FUNCTION (objc_cls_meth_section, \
00576 in_objc_cls_meth, \
00577 ".objc_cls_meth", 1) \
00578 SECTION_FUNCTION (objc_inst_meth_section, \
00579 in_objc_inst_meth, \
00580 ".objc_inst_meth", 1) \
00581 SECTION_FUNCTION (objc_cat_cls_meth_section, \
00582 in_objc_cat_cls_meth, \
00583 ".objc_cat_cls_meth", 1) \
00584 SECTION_FUNCTION (objc_cat_inst_meth_section, \
00585 in_objc_cat_inst_meth, \
00586 ".objc_cat_inst_meth", 1) \
00587 SECTION_FUNCTION (objc_selector_refs_section, \
00588 in_objc_selector_refs, \
00589 ".objc_message_refs", 1) \
00590 SECTION_FUNCTION (objc_selector_fixup_section, \
00591 in_objc_selector_fixup, \
00592 ".section __OBJC, __sel_fixup", 1) \
00593 SECTION_FUNCTION (objc_symbols_section, \
00594 in_objc_symbols, \
00595 ".objc_symbols", 1) \
00596 SECTION_FUNCTION (objc_module_info_section, \
00597 in_objc_module_info, \
00598 ".objc_module_info", 1) \
00599 SECTION_FUNCTION (objc_protocol_section, \
00600 in_objc_protocol, \
00601 ".objc_protocol", 1) \
00602 SECTION_FUNCTION (objc_string_object_section, \
00603 in_objc_string_object, \
00604 ".objc_string_object", 1) \
00605 SECTION_FUNCTION (objc_constant_string_object_section, \
00606 in_objc_constant_string_object, \
00607 ".section __OBJC, __cstring_object", 1) \
00608 SECTION_FUNCTION (objc_class_names_section, \
00609 in_objc_class_names, \
00610 ".objc_class_names", 1) \
00611 SECTION_FUNCTION (objc_meth_var_names_section, \
00612 in_objc_meth_var_names, \
00613 ".objc_meth_var_names", 1) \
00614 SECTION_FUNCTION (objc_meth_var_types_section, \
00615 in_objc_meth_var_types, \
00616 ".objc_meth_var_types", 1) \
00617 SECTION_FUNCTION (objc_cls_refs_section, \
00618 in_objc_cls_refs, \
00619 ".objc_cls_refs", 1) \
00620 \
00621 SECTION_FUNCTION (machopic_lazy_symbol_ptr_section, \
00622 in_machopic_lazy_symbol_ptr, \
00623 ".lazy_symbol_pointer", 0) \
00624 SECTION_FUNCTION (machopic_nl_symbol_ptr_section, \
00625 in_machopic_nl_symbol_ptr, \
00626 ".non_lazy_symbol_pointer", 0) \
00627 SECTION_FUNCTION (machopic_symbol_stub_section, \
00628 in_machopic_symbol_stub, \
00629 ".symbol_stub", 0) \
00630 SECTION_FUNCTION (machopic_picsymbol_stub_section, \
00631 in_machopic_picsymbol_stub, \
00632 ".picsymbol_stub", 0) \
00633 SECTION_FUNCTION (darwin_exception_section, \
00634 in_darwin_exception, \
00635 ".section __DATA,__gcc_except_tab", 0) \
00636 SECTION_FUNCTION (darwin_eh_frame_section, \
00637 in_darwin_eh_frame, \
00638 ".section __TEXT,__eh_frame", 0) \
00639 \
00640 static void \
00641 objc_section_init () \
00642 { \
00643 static int been_here = 0; \
00644 \
00645 if (been_here == 0) \
00646 { \
00647 been_here = 1; \
00648 \
00649 objc_cat_cls_meth_section (); \
00650 objc_cat_inst_meth_section (); \
00651 objc_string_object_section (); \
00652 objc_constant_string_object_section (); \
00653 objc_selector_refs_section (); \
00654 objc_selector_fixup_section (); \
00655 objc_cls_refs_section (); \
00656 objc_class_section (); \
00657 objc_meta_class_section (); \
00658 \
00659 objc_cls_meth_section (); \
00660 objc_inst_meth_section (); \
00661 objc_protocol_section (); \
00662 objc_class_names_section (); \
00663 objc_meth_var_types_section (); \
00664 objc_meth_var_names_section (); \
00665 objc_category_section (); \
00666 objc_class_vars_section (); \
00667 objc_instance_vars_section (); \
00668 objc_module_info_section (); \
00669 objc_symbols_section (); \
00670 } \
00671 }
00672
00673 #define READONLY_DATA_SECTION const_section
00674
00675 #undef TARGET_ASM_SELECT_SECTION
00676 #define TARGET_ASM_SELECT_SECTION machopic_select_section
00677 #undef TARGET_ASM_SELECT_RTX_SECTION
00678 #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section
00679
00680 #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
00681 do { \
00682 if (FILE) { \
00683 if (flag_pic) \
00684 fprintf (FILE, "\t.lazy_reference "); \
00685 else \
00686 fprintf (FILE, "\t.reference "); \
00687 assemble_name (FILE, NAME); \
00688 fprintf (FILE, "\n"); \
00689 } \
00690 } while (0)
00691
00692 #define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
00693 do { \
00694 if (FILE) { \
00695 fprintf (FILE, "\t"); \
00696 assemble_name (FILE, NAME); \
00697 fprintf (FILE, "=0\n"); \
00698 (*targetm.asm_out.globalize_label) (FILE, NAME); \
00699 } \
00700 } while (0)
00701
00702
00703 #define GLOBAL_ASM_OP ".globl "
00704 #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
00705
00706 #undef ASM_GENERATE_INTERNAL_LABEL
00707 #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \
00708 sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM))
00709
00710
00711
00712
00713 #undef ASM_OUTPUT_INTERNAL_LABEL
00714 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \
00715 fprintf (FILE, "%s%d:\n", PREFIX, NUM)
00716
00717
00718
00719
00720 #ifndef JUMP_TABLES_IN_TEXT_SECTION
00721 #define JUMP_TABLES_IN_TEXT_SECTION 1
00722 #endif
00723
00724
00725
00726 enum machopic_addr_class {
00727 MACHOPIC_UNDEFINED,
00728 MACHOPIC_DEFINED_DATA,
00729 MACHOPIC_UNDEFINED_DATA,
00730 MACHOPIC_DEFINED_FUNCTION,
00731 MACHOPIC_UNDEFINED_FUNCTION
00732 };
00733
00734
00735
00736 #define MACHOPIC_INDIRECT (flag_pic)
00737 #define MACHOPIC_JUST_INDIRECT (flag_pic == 1)
00738 #define MACHOPIC_PURE (flag_pic == 2)
00739
00740 #undef TARGET_ENCODE_SECTION_INFO
00741 #define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
00742 #undef TARGET_STRIP_NAME_ENCODING
00743 #define TARGET_STRIP_NAME_ENCODING darwin_strip_name_encoding
00744
00745 #define GEN_BINDER_NAME_FOR_STUB(BUF,STUB,STUB_LENGTH) \
00746 do { \
00747 const char *const stub_ = (STUB); \
00748 char *buffer_ = (BUF); \
00749 strcpy (buffer_, stub_); \
00750 if (stub_[0] == '"') \
00751 { \
00752 strcpy (buffer_ + (STUB_LENGTH) - 1, "_binder\""); \
00753 } \
00754 else \
00755 { \
00756 strcpy (buffer_ + (STUB_LENGTH), "_binder"); \
00757 } \
00758 } while (0)
00759
00760 #define GEN_SYMBOL_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
00761 do { \
00762 const char *const symbol_ = (SYMBOL); \
00763 char *buffer_ = (BUF); \
00764 if (name_needs_quotes (symbol_) && symbol_[0] != '"') \
00765 { \
00766 sprintf (buffer_, "\"%s\"", symbol_); \
00767 } \
00768 else \
00769 { \
00770 strcpy (buffer_, symbol_); \
00771 } \
00772 } while (0)
00773
00774
00775
00776
00777 #define GEN_LAZY_PTR_NAME_FOR_SYMBOL(BUF,SYMBOL,SYMBOL_LENGTH) \
00778 do { \
00779 const char *symbol_ = darwin_strip_name_encoding (SYMBOL); \
00780 char *buffer_ = (BUF); \
00781 if (symbol_[0] == '"') \
00782 { \
00783 strcpy (buffer_, "\"L"); \
00784 strcpy (buffer_ + 2, symbol_ + 1); \
00785 strcpy (buffer_ + (SYMBOL_LENGTH), "$lazy_ptr\""); \
00786 } \
00787 else if (name_needs_quotes (symbol_)) \
00788 { \
00789 strcpy (buffer_, "\"L"); \
00790 strcpy (buffer_ + 2, symbol_); \
00791 strcpy (buffer_ + (SYMBOL_LENGTH) + 2, "$lazy_ptr\""); \
00792 } \
00793 else \
00794 { \
00795 strcpy (buffer_, "L"); \
00796 strcpy (buffer_ + 1, symbol_); \
00797 strcpy (buffer_ + (SYMBOL_LENGTH) + 1, "$lazy_ptr"); \
00798 } \
00799 } while (0)
00800
00801 #define TARGET_ASM_EXCEPTION_SECTION darwin_exception_section
00802
00803 #define TARGET_ASM_EH_FRAME_SECTION darwin_eh_frame_section
00804
00805 #undef ASM_PREFERRED_EH_DATA_FORMAT
00806 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
00807 (((CODE) == 2 && (GLOBAL) == 1) \
00808 ? (DW_EH_PE_pcrel | DW_EH_PE_indirect) : \
00809 ((CODE) == 1 || (GLOBAL) == 0) ? DW_EH_PE_pcrel : DW_EH_PE_absptr)
00810
00811 #define ASM_OUTPUT_DWARF_DELTA(FILE,SIZE,LABEL1,LABEL2) \
00812 darwin_asm_output_dwarf_delta (FILE, SIZE, LABEL1, LABEL2)
00813
00814 #define TARGET_TERMINATE_DW2_EH_FRAME_INFO false
00815
00816 #define DARWIN_REGISTER_TARGET_PRAGMAS(PFILE) \
00817 do { \
00818 cpp_register_pragma (PFILE, 0, "mark", darwin_pragma_ignore); \
00819 cpp_register_pragma (PFILE, 0, "options", darwin_pragma_options); \
00820 cpp_register_pragma (PFILE, 0, "segment", darwin_pragma_ignore); \
00821 cpp_register_pragma (PFILE, 0, "unused", darwin_pragma_unused); \
00822 } while (0)
00823
00824 #undef ASM_APP_ON
00825 #define ASM_APP_ON ""
00826 #undef ASM_APP_OFF
00827 #define ASM_APP_OFF ""