diff options
Diffstat (limited to 'gcc/config/darwin.h')
-rw-r--r-- | gcc/config/darwin.h | 74 |
1 files changed, 48 insertions, 26 deletions
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 8a959090c56..35415159e49 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -186,6 +186,8 @@ Boston, MA 02111-1307, USA. */ #define LINK_COMMAND_SPEC "\ %{!fdump=*:%{!fsyntax-only:%{!precomp:%{!c:%{!M:%{!MM:%{!E:%{!S:\ %{!Zdynamiclib:%(linker)}%{Zdynamiclib:/usr/bin/libtool} \ + %{!Zdynamiclib:-arch %(darwin_arch)} \ + %{Zdynamiclib:-arch_only %(darwin_arch)} \ %l %X %{d} %{s} %{t} %{Z} \ %{!Zdynamiclib:%{A} %{e*} %{m} %{N} %{n} %{r} %{u*} %{x} %{z}} \ %{@:-o %f%u.out}%{!@:%{o*}%{!o:-o a.out}} \ @@ -244,7 +246,7 @@ Boston, MA 02111-1307, USA. */ %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \ %{Zmultiply_defined*:-multiply_defined %*} \ %{Zmultiplydefinedunused*:-multiply_defined_unused %*} \ - %{prebind} %{noprebind} %{prebind_all_twolevel_modules} \ + %{prebind} %{noprebind} %{nofixprebinding} %{prebind_all_twolevel_modules} \ %{read_only_relocs} \ %{sectcreate*} %{sectorder*} %{seg1addr*} %{segprot*} %{seg_addr_table*} \ %{Zseg_addr_table_filename*:-seg_addr_table_filename %*} \ @@ -356,18 +358,22 @@ do { text_section (); \ #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 ((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)) \ + const char *xname = NAME; \ + if (GET_CODE (XEXP (DECL_RTL (DECL), 0)) != SYMBOL_REF) \ + xname = IDENTIFIER_POINTER (DECL_NAME (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)) \ (* targetm.encode_section_info) (DECL, DECL_RTL (DECL), false); \ - ASM_OUTPUT_LABEL (FILE, xname); \ + ASM_OUTPUT_LABEL (FILE, xname); \ + /* Darwin doesn't support zero-size objects, so give them a \ + byte. */ \ + if (tree_low_cst (DECL_SIZE_UNIT (DECL), 1) == 0) \ + assemble_zeros (1); \ } while (0) #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ @@ -389,6 +395,15 @@ do { text_section (); \ machopic_output_possible_stub_label (FILE, xname); \ } while (0) +#define ASM_DECLARE_CONSTANT_NAME(FILE, NAME, EXP, SIZE) \ + do { \ + ASM_OUTPUT_LABEL (FILE, NAME); \ + /* Darwin doesn't support zero-size objects, so give them a \ + byte. */ \ + if ((SIZE) == 0) \ + assemble_zeros (1); \ + } while (0) + /* Wrap new method names in quotes so the assembler doesn't gag. Make Objective-C internal symbols local. */ @@ -396,7 +411,9 @@ do { text_section (); \ #define ASM_OUTPUT_LABELREF(FILE,NAME) \ do { \ const char *xname = darwin_strip_name_encoding (NAME); \ - if (xname[0] == '&' || xname[0] == '*') \ + 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)) \ @@ -463,9 +480,9 @@ do { text_section (); \ #undef SECTION_FUNCTION #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, OBJC) \ -extern void FUNCTION PARAMS ((void)); \ +extern void FUNCTION (void); \ void \ -FUNCTION () \ +FUNCTION (void) \ { \ if (in_section != SECTION) \ { \ @@ -493,8 +510,9 @@ FUNCTION () \ in_objc_symbols, in_objc_module_info, \ in_objc_protocol, in_objc_string_object, \ in_objc_constant_string_object, \ + in_objc_image_info, \ in_objc_class_names, in_objc_meth_var_names, \ - in_objc_meth_var_types, in_objc_cls_refs, \ + in_objc_meth_var_types, in_objc_cls_refs, \ in_machopic_nl_symbol_ptr, \ in_machopic_lazy_symbol_ptr, \ in_machopic_symbol_stub, \ @@ -506,7 +524,7 @@ FUNCTION () \ #undef EXTRA_SECTION_FUNCTIONS #define EXTRA_SECTION_FUNCTIONS \ -static void objc_section_init PARAMS ((void)); \ +static void objc_section_init (void); \ SECTION_FUNCTION (const_section, \ in_const, \ ".const", 0) \ @@ -582,6 +600,10 @@ SECTION_FUNCTION (objc_string_object_section, \ SECTION_FUNCTION (objc_constant_string_object_section, \ in_objc_constant_string_object, \ ".section __OBJC, __cstring_object", 1) \ +/* Fix-and-Continue image marker. */ \ +SECTION_FUNCTION (objc_image_info_section, \ + in_objc_image_info, \ + ".section __OBJC, __image_info", 1) \ SECTION_FUNCTION (objc_class_names_section, \ in_objc_class_names, \ ".objc_class_names", 1) \ @@ -597,19 +619,19 @@ SECTION_FUNCTION (objc_cls_refs_section, \ \ SECTION_FUNCTION (machopic_lazy_symbol_ptr_section, \ in_machopic_lazy_symbol_ptr, \ - ".lazy_symbol_pointer", 0) \ + ".lazy_symbol_pointer", 0) \ SECTION_FUNCTION (machopic_nl_symbol_ptr_section, \ in_machopic_nl_symbol_ptr, \ - ".non_lazy_symbol_pointer", 0) \ + ".non_lazy_symbol_pointer", 0) \ SECTION_FUNCTION (machopic_symbol_stub_section, \ in_machopic_symbol_stub, \ - ".symbol_stub", 0) \ + ".symbol_stub", 0) \ SECTION_FUNCTION (machopic_symbol_stub1_section, \ in_machopic_symbol_stub1, \ ".section __TEXT,__symbol_stub1,symbol_stubs,pure_instructions,16", 0)\ SECTION_FUNCTION (machopic_picsymbol_stub_section, \ in_machopic_picsymbol_stub, \ - ".picsymbol_stub", 0) \ + ".picsymbol_stub", 0) \ SECTION_FUNCTION (machopic_picsymbol_stub1_section, \ in_machopic_picsymbol_stub1, \ ".section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32", 0)\ @@ -621,7 +643,7 @@ SECTION_FUNCTION (darwin_eh_frame_section, \ ".section __TEXT,__eh_frame", 0) \ \ static void \ -objc_section_init () \ +objc_section_init (void) \ { \ static int been_here = 0; \ \ @@ -638,7 +660,7 @@ objc_section_init () \ objc_cls_refs_section (); \ objc_class_section (); \ objc_meta_class_section (); \ - /* shared, hot -> cold */ \ + /* shared, hot -> cold */ \ objc_cls_meth_section (); \ objc_inst_meth_section (); \ objc_protocol_section (); \ @@ -661,7 +683,7 @@ objc_section_init () \ #define TARGET_ASM_SELECT_RTX_SECTION machopic_select_rtx_section #define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \ - do { \ + do { \ if (FILE) { \ if (MACHOPIC_INDIRECT) \ fprintf (FILE, "\t.lazy_reference "); \ @@ -676,7 +698,7 @@ objc_section_init () \ do { \ if (FILE) { \ fprintf (FILE, "\t"); \ - assemble_name (FILE, NAME); \ + assemble_name (FILE, NAME); \ fprintf (FILE, "=0\n"); \ (*targetm.asm_out.globalize_label) (FILE, NAME); \ } \ @@ -778,7 +800,7 @@ enum machopic_addr_class { #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) == 2 && (GLOBAL) == 1) \ |