Index: config/darwin-protos.h =================================================================== --- config/darwin-protos.h (revision 111255) +++ config/darwin-protos.h (working copy) @@ -80,3 +80,4 @@ extern void darwin_asm_output_dwarf_delt const char *); extern bool darwin_binds_local_p (tree); extern void darwin_cpp_builtins (struct cpp_reader *); +extern void darwin_asm_output_anchor (rtx symbol); Index: config/darwin-sections.def =================================================================== --- config/darwin-sections.def (revision 111255) +++ config/darwin-sections.def (working copy) @@ -11,9 +11,9 @@ DEF_SECTION (const_data_coal_section, 0, ".section __DATA,__const_coal,coalesced", 0) DEF_SECTION (data_coal_section, SECTION_WRITE, ".section __DATA,__datacoal_nt,coalesced", 0) -DEF_SECTION (cstring_section, 0, ".cstring", 0) -DEF_SECTION (literal4_section, 0, ".literal4", 0) -DEF_SECTION (literal8_section, 0, ".literal8", 0) +DEF_SECTION (cstring_section, SECTION_MERGE, ".cstring", 0) +DEF_SECTION (literal4_section, SECTION_MERGE, ".literal4", 0) +DEF_SECTION (literal8_section, SECTION_MERGE, ".literal8", 0) DEF_SECTION (constructor_section, 0, ".constructor", 0) DEF_SECTION (mod_init_section, 0, ".mod_init_func", 0) DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0) Index: config/darwin.c =================================================================== --- config/darwin.c (revision 111255) +++ config/darwin.c (working copy) @@ -1479,4 +1479,17 @@ darwin_binds_local_p (tree decl) return default_binds_local_p_1 (decl, 0); } +/* The Darwin's implementation of TARGET_ASM_OUTPUT_ANCHOR. Define the + anchor relative to ".", the current section position. We cannot use + the default one because ASM_OUTPUT_DEF is wrong for Darwin. */ + +void +darwin_asm_output_anchor (rtx symbol) +{ + fprintf (asm_out_file, "\t.set\t"); + assemble_name (asm_out_file, XSTR (symbol, 0)); + fprintf (asm_out_file, ", . + " HOST_WIDE_INT_PRINT_DEC "\n", + SYMBOL_REF_BLOCK_OFFSET (symbol)); +} + #include "gt-darwin.h" Index: config/darwin.h =================================================================== --- config/darwin.h (revision 111255) +++ config/darwin.h (working copy) @@ -792,6 +796,8 @@ enum machopic_addr_class { darwin_non_lazy_pcrel (ASM_OUT_FILE, ADDR); \ goto DONE; \ } + +#define TARGET_ASM_OUTPUT_ANCHOR darwin_asm_output_anchor /* Experimentally, putting jump tables in text is faster on SPEC. Also this is needed for correctness for coalesced functions. */