diff options
| author | Richard Sandiford <richard@codesourcery.com> | 2005-12-07 07:53:14 +0000 |
|---|---|---|
| committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2005-12-07 07:53:14 +0000 |
| commit | d6b5193bfc37d56ae15742b03f29001c61cd3ec6 (patch) | |
| tree | e8b6f3dd6958e4f001043b151470fcccabfb4869 /gcc/config/darwin.c | |
| parent | 5e4f1974e4c0e91a213bbd816c15d5a613b0c1d2 (diff) | |
| download | gcc-d6b5193bfc37d56ae15742b03f29001c61cd3ec6.zip gcc-d6b5193bfc37d56ae15742b03f29001c61cd3ec6.tar.gz gcc-d6b5193bfc37d56ae15742b03f29001c61cd3ec6.tar.bz2 | |
alpha.c (alpha_start_function): Use switch_to_section.
* config/alpha/alpha.c (alpha_start_function): Use switch_to_section.
(alpha_elf_select_rtx_section): Return the selected section rather
than emitting assembly code.
(alpha_write_linkage): Emit a ".link" directive directly and then
set in_section to NULL.
(vms_asm_out_constructor): Use switch_to_section.
(vms_asm_out_destructor): Likewise.
(unicosmk_output_common): Set in_section to NULL instead of calling
the dummy common_section function.
(unicosmk_text_section): Delete in favor of...
(unicosmk_output_text_section_asm_op): ...this new function.
(unicosmk_data_section): Delete in favor of...
(unicosmk_output_data_section_asm_op): ...this new function.
(unicosmk_init_sections): New function.
(unicosmk_output_deferred_case_vectors): Use switch_to_section.
(unicosmk_output_ssib): Set in_section to NULL instead of calling
the dummy ssib_section function.
(unicosmk_section_buf): Delete.
* config/alpha/alpha-protos.h (unicosmk_text_section): Delete.
(unicosmk_data_section): Delete.
* config/alpha/elf.h (ASM_OUTPUT_ALIGNED_LOCAL): Use switch_to_section.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, sbss_section, sdata_section)
(SECTION_FUNCTION_TEMPLATE): Delete.
* config/alpha/unicosmk.h (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP)
(READONLY_DATA_SECTION, EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(common_section, COMMON_SECTION, ssib_section, SSIB_SECTION): Delete.
(ASM_OUTPUT_ALIGNED_LOCAL): Use switch_to_section.
(TARGET_ASM_INIT_SECTIONS): Define.
* config/alpha/vms.h (LINK_SECTION_ASM_OP, LITERALS_SECTION_ASM_OP)
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(link_section, literals_section): Delete.
(ASM_OUTPUT_DEF): Emit the ".literal" directive directly and then
set in_section to NULL.
* config/arm/aof.h (TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Delete.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, ZERO_INIT_SECTION): Delete.
(COMMON_SECTION): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
(ASM_OUTPUT_COMMON): Set in_section to NULL rather than calling
the dummy common_section function.
* config/arm/aout.h (ASM_OUTPUT_ALIGNED_LOCAL): Use switch_to_section.
* config/arm/arm.c (get_jump_table_size): Use pointer comparison
between readonly_data_section and text_section to check whether
read-only data is being put in the text section.
(arm_output_function_epilogue): Use switch_to_section.
(arm_elf_asm_constructor): Likewise.
(thumb_call_via_reg): Replace call to in_text_section with
a comparison between in_section and text_section.
(arm_file_end): Use switch_to_section.
(aof_text_section): Delete in favor of...
(aof_output_text_section_asm_op): ...this new function.
(aof_data_section): Delete in favor of...
(aof_output_data_section_asm_op): ...this new function.
(aof_asm_init_sections): New function.
(zero_init_section): Moved from config/arm/aof.h.
(aof_dump_imports, aof_file_start): Use switch_to_section.
* config/arm/arm.h (thumb_call_via_label): Update comment.
* config/arm/arm-protos.h (aof_text_section, aof_data_section): Delete.
(common_section): Delete.
* config/arm/pe.h (ASM_DECLARE_FUNCTION_NAME): Use switch_to_section.
(ASM_DECLARE_OBJECT_NAME): Update the type of save_section. Use the
global switch_to_section function instead of the old port-local one.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, DRECTVE_SECTION_FUNCTION)
(SWITCH_TO_SECTION_FUNCTION): Delete.
(drectve_section): Redefine as a macro.
* config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_BSS):
(ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use get_named_section and
switch_to_section.
* config/avr/avr.c (progmem_section): New variable.
(avr_output_progmem_section_asm_op): New function.
(avr_asm_init_sections): New function.
(avr_output_addr_vec_elt): Use switch_to_section.
* config/avr/avr.h (progmem_section): Declare.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(READONLY_DATA_SECTION): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
(ASM_OUTPUT_CASE_LABEL): Use switch_to_section.
* config/avr/avr-protos.h (progmem_section): Delete.
* config/bfin/bfin.h (ASM_OUTPUT_LOCAL): Use switch_to_section.
* config/c4x/c4x.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(INIT_SECTION_FUNCTION, FINI_SECTION_FUNCTION): Delete.
* config/darwin-sections.def: New file.
* config/darwin.c: Define all sections in darwin-sections.def.
(output_objc_section_asm_op, darwin_init_sections): New functions.
(machopic_output_indirection): Use switch_to_section.
(machopic_select_section): Return the selected section rather than
emitting assembly code. Replace the static function table with
inline conditional expressions. Update the tests of last_text_section
and move them into the FUNCTION_DECL block.
(machopic_select_rtx_section): Return the selected section rather than
emitting assembly code.
(machopic_asm_out_constructor, machopic_asm_out_destructor)
(darwin_file_end): Use switch_to_section.
* config/darwin.h: Use darwin-sections.def to declare sections.
(INIT_SECTION_ASM_OP): Remove empty definition.
(HAS_INIT_SECTION): Define this instead.
(SECTION_FUNCTION, EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(READONLY_DATA_SECTION, TARGET_ASM_EXCEPTION_SECTION): Delete.
(TARGET_ASM_EH_FRAME_SECTION): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
* config/darwin-protos.h (darwin_init_sections): Declare.
(machopic_picsymbol_stub_section, machopic_picsymbol_stub1_section)
(machopic_symbol_stub_section, machopic_symbol_stub1_section): Delete.
(machopic_lazy_symbol_ptr_section, machopic_nl_symbol_ptr_section)
(constructor_section, destructor_section, mod_init_section): Delete.
(mod_term_section): Delete.
(darwin_exception_section, darwin_eh_frame_section): Delete.
(machopic_select_section): Return a section.
(machopic_select_rtx_section): Likewise.
(text_coal_section, text_unlikely_section, text_unlikely_coal_section)
(const_section, const_coal_section, const_data_section): Delete.
(const_data_coal_section, data_coal_section, cstring_section): Delete.
(literal4_section, literal8_section, constructor_section): Delete.
(mod_init_section, mod_term_section, destructor_section): Delete.
(objc_class_section, objc_meta_class_section, objc_category_section)
(objc_class_vars_section, objc_instance_vars_section): Delete.
(objc_cls_meth_section, objc_inst_meth_section): Delete.
(objc_cat_cls_meth_section, objc_cat_inst_meth_section): Delete.
(objc_selector_refs_section, objc_selector_fixup_section): Delete.
(objc_symbols_section, objc_module_info_section): Delete.
(objc_image_info_section, objc_protocol_section): Delete.
(objc_string_object_section, objc_constant_string_object_section)
(objc_class_names_section, objc_meth_var_names_section): Delete.
(objc_meth_var_types_section, objc_cls_refs_section): Delete.
(machopic_lazy_symbol_ptr_section, machopic_nl_symbol_ptr_section)
(machopic_symbol_stub_section, machopic_picsymbol_stub_section)
(darwin_exception_section, darwin_eh_frame_section): Delete.
* config/t-darwin (darwin.o): Depend on config/darwin-sections.def.
* config/frv/frv.c (frv_asm_out_constructor): Use switch_to_section.
(frv_asm_out_destructor): Likewise.
* config/frv/frv.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(SDATA_SECTION_FUNCTION, FIXUP_SECTION_FUNCTION): Delete.
(ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use switch_to_section and
get_named_section.
(ASM_OUTPUT_CASE_LABEL): Use switch_to_section.
* config/frv/frv-protos.h (fixup_section, sdata_section, sbss_section)
(data_section): Delete.
* config/i386/cygming.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(DRECTVE_SECTION_FUNCTION): Delete.
(drectve_section): Redefine as a macro that sets in_section after
emitting the directive.
(SWITCH_TO_SECTION_FUNCTION): Delete.
* config/i386/darwin.h (ASM_OUTPUT_ALIGN): Replace call to
in_text_section with comparison between in_section and text_section.
* config/i386/i386.c (x86_64_elf_select_section): Return the section
rather than emitting assembly code. Use get_named_section.
(x86_output_aligned_bss, ix86_file_end): Use switch_to_section and
get_named_section.
(machopic_output_stub): Use switch_to_section.
* config/i386/nwld.c (nwld_named_section_asm_out_constructor)
(nwld_named_section_asm_out_destructor): Use get_section and
switch_to_section.
* config/ia64/ia64.c (ia64_select_rtx_section): Return the section
rather than emitting assembly code.
(ia64_rwreloc_select_section): Likewise.
(ia64_rwreloc_select_rtx_section): Likewise.
* config/ia64/ia64-protos.h (sdata_section, sbss_section): Delete.
* config/ia64/sysv4.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use
switch_to_section.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(SDATA_SECTION_FUNCTION, SBSS_SECTION_FUNCTION): Delete.
* config/iq2000/iq2000.c (iq2000_select_rtx_section): Return the
section rather than emitting assembly code.
(iq2000_select_section): Likewise.
* config/iq2000/iq2000.h (rdata_section, sdata_section): Delete.
(sbss_section): Delete.
* config/m32r/m32r.h (ASM_OUTPUT_ALIGNED_BSS): Use switch_to_section
and get_named_section.
* config/m32r/m32r-protos.h (sbss_section, sdata_section): Delete.
* config/mcore/mcore-elf.h (EXPORTS_SECTION_ASM_OP): Delete.
(SUBTARGET_EXTRA_SECTIONS, SUBTARGET_EXTRA_SECTION_FUNCTIONS): Delete.
(EXPORT_SECTION_FUNCTION, SUBTARGET_SWITCH_SECTIONS): Delete.
(MCORE_EXPORT_NAME): Emit the exports directive directly, then set
in_section to NULL.
(ASM_DECLARE_FUNCTION_NAME): Use switch_to_section.
(ASM_DECLARE_OBJECT_NAME): Update the type of save_section. Use the
global switch_to_section function instead of the old port-local one.
* config/mcore/mcore.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(SWITCH_SECTION_FUNCTION): Delete.
* config/mcore/mcore-pe.h (SUBTARGET_SWITCH_SECTIONS): Delete.
(DRECTVE_SECTION_ASM_OP, SUBTARGET_EXTRA_SECTIONS): Delete.
(SUBTARGET_EXTRA_SECTION_FUNCTIONS, DRECTVE_SECTION_FUNCTION): Delete.
(MCORE_EXPORT_NAME): Emit ".section .drectve" directly, then set
in_section to NULL.
(ASM_DECLARE_OBJECT_NAME): Update the type of save_section. Use the
global switch_to_section function instead of the old port-local one.
(ASM_DECLARE_FUNCTION_NAME): Use switch_to_section.
* config/mips/mips.c (mips_file_start): Update comment.
(mips_output_aligned_bss): Use switch_to_section and get_named_section.
(mips_output_aligned_decl_common): Use switch_to_section.
(mips_select_rtx_section): Return the section rather than emitting
assembly code. Use get_named_section.
(mips_function_rodata_section: Likewise get_section.
(build_mips16_function_stub): Use switch_to_section.
* config/mips/mips.h (ASM_OUTPUT_IDENT): Use switch_to_section.
(SDATA_SECTION_ASM_OP): Delete.
* config/mips/vxworks.h (EXTRA_SECTIONS): Delete.
(EXTRA_SECTION_FUNCTIONS): Delete.
* config/mmix/mmix.c (mmix_file_start, mmix_file_end)
(mmix_asm_output_aligned_local): Use switch_to_section.
* config/pa/pa.c (som_readonly_data_section, som_one_only_data_section)
(som_one_only_readonly_data_section): New variables.
(pa_output_function_epilogue): Set in_section to NULL instead of
calling forget_section.
(output_deferred_plabels): Use select_section.
(pa_asm_output_mi_thunk): Likewise. Set in_section to NULL instead
of calling forget_section.
(pa_asm_output_aligned_bss, pa_asm_output_aligned_common)
(pa_asm_output_aligned_local): Use select_section.
(som_text_section_asm_op): Delete in favor of...
(som_output_text_section_asm_op): ...this new function.
(pa_som_asm_init_sections): New function.
(pa_select_section): Return the section rather than emitting
assembly code.
* config/pa/pa.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(SOM_READONLY_DATA_SECTION_FUNCTION): Delete.
(SOM_ONE_ONLY_READONLY_DATA_SECTION_FUNCTION): Delete.
(SOM_ONE_ONLY_DATA_SECTION_FUNCTION, FORGET_SECTION_FUNCTION): Delete.
* config/pa/pa-protos.h (som_text_section_asm_op): Delete.
(som_readonly_data_section, som_one_only_readonly_data_section)
(som_one_only_data_section, forget_section): Delete.
* config/pa/som.h (TEXT_SECTION_ASM_OP): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
(READONLY_DATA_SECTION, TARGET_ASM_EXCEPTION_SECTION): Delete.
* config/rs6000/rs6000.c (read_only_data_section): New variable.
(private_data_section, read_only_private_data_section): New variables.
(sdata2_section, toc_section): New variables.
(rs6000_file_start): Use switch_to_section.
(rs6000_assemble_integer): Use comparisons against in_section
instead of calling in_toc_section and in_text_section. Use
unlikely_text_section_p.
(rs6000_elf_output_toc_section_asm_op): New function, derived
from the old rs6000/sysv4.h toc_section function.
(rs6000_elf_asm_init_sections): New function.
(rs6000_elf_select_rtx_section, rs6000_elf_select_section): Return
the section rather than emitting assembly code.
(machopic_output_stub): Use switch_to_section.
(toc_section): Delete dummy function.
(rs6000_elf_asm_out_constructor, rs6000_elf_asm_out_destructor): Use
switch_to_section and get_section.
(rs6000_xcoff_output_readonly_section_asm_op): New function.
(rs6000_xcoff_output_readwrite_section_asm_op): New function.
(rs6000_xcoff_output_toc_section_asm_op): New function, derived from
the old rs6000/xcoff.h toc_section function.
(rs6000_xcoff_asm_init_sections): New function.
(rs6000_xcoff_select_section, rs6000_xcoff_select_rtx_section): Return
the section rather than emitting assembly code.
(rs6000_xcoff_file_start): Use switch_to_section.
(rs6000_xcoff_file_end): Likewise.
* config/rs6000/rs6000-protos.h (toc_section, sdata_section): Delete.
(sdata2_section, sbss_section, private_data_section): Delete.
(read_only_data_section, read_only_private_data_section): Delete.
* config/rs6000/sysv4.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(TOC_SECTION_FUNCTION, SDATA_SECTION_FUNCTION, SDATA2_SECTION_FUNCTION)
(SBSS_SECTION_FUNCTION, INIT_SECTION_FUNCTION): Delete.
(FINI_SECTION_FUNCTION): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
(ASM_OUTPUT_ALIGNED_LOCAL): Use switch_to_section.
* config/rs6000/xcoff.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(READ_ONLY_DATA_SECTION_FUNCTION, PRIVATE_DATA_SECTION_FUNCTION)
(READ_ONLY_PRIVATE_DATA_SECTION_FUNCTION, TOC_SECTION_FUNCTION)
(READONLY_DATA_SECTION): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
(ASM_DECLARE_FUNCTION_NAME): Use switch_to_section. Set in_section
to NULL rather than no_section.
(TARGET_ASM_EXCEPTION_SECTION): Delete.
* config/sh/sh.c (sh_file_start): Use switch_to_section.
* config/sparc/sparc.c (emit_pic_helper): Use switch_to_section.
(sparc_output_deferred_case_vectors): Likewise. Remove argument
from call to current_function_section.
* config/stormy16/stormy16.c: Include ggc.h and gt-storm16.h.
(bss100_section): New variable.
(xstormy16_asm_output_aligned_common): Use switch_to_section.
(xstormy16_asm_init_sections): New function.
(xstormy16_asm_out_destructor, xstormy16_asm_out_constructor): Use
switch_to_section and get_section.
(xstormy16_output_addr_vec): Use switch_to_section. Remove argument
from calls to current_function_section.
* config/stormy16/stormy16.h (EXTRA_SECTIONS): Delete.
(XSTORMY16_SECTION_FUNCTION, EXTRA_SECTION_FUNCTIONS): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
* config/stormy16/stormy16-protos.h (bss100_section): Delete.
* config/svr3.h (ASM_OUTPUT_LOCAL): Use switch_to_section.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, INIT_SECTION_FUNCTION)
(FINI_SECTION_FUNCTION): Delete.
* config/v850/v850.c: Include gt-v850.h.
(rosdata_section, rozdata_section, tdata_section, zdata_section)
(zbss_section): New variables.
(v850_output_aligned_bss): Use switch_to_section.
(v850_asm_init_sections): New function.
(v850_select_section): Return the section rather than emitting
assembly code.
* config/v850/v850.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS)
(ZDATA_SECTION_ASM_OP, ZBSS_SECTION_ASM_OP, TDATA_SECTION_ASM_OP)
(ROSDATA_SECTION_ASM_OP, ROZDATA_SECTION_ASM_OP): Delete.
(TARGET_ASM_INIT_SECTIONS): Define.
* config/v850/v850-protos.h (sdata_section, rosdata_section): Delete.
(sbss_section, tdata_section, zdata_section, rozdata_section): Delete.
(zbss_section): Delete.
* config/vax/vaxv.h (ASM_OUTPUT_LOCAL): Use switch_to_section.
* config/vx-common.h (vxworks_exception_section): Delete.
(TARGET_ASM_EXCEPTION_SECTION): Delete.
* config/xtensa/xtensa.c (xtensa_select_rtx_section): Return the
section rather than emitting assembly code.
* config/xtensa/xtensa.h (ASM_OUTPUT_POOL_PROLOGUE): Use
switch_to_section.
* Makefile.in (GTFILES): Add $(srcdir)/output.h.
* coretypes.h (section): New union and typedef.
* dbxout.c (FORCE_TEXT): Use switch_to_section. Remove argument
from call to current_function_section.
(dbxout_function_end, dbxout_init, dbxout_source_file, dbxout_finish)
(dbxout_symbol_location): Use switch_to_section.
* dwarf2out.c (named_section_eh_frame_section): Delete, moving
most of the code into...
(default_eh_frame_section): ...here. Return a section.
(collect2_eh_frame_section): Delete, moving most of the code into..
(switch_to_eh_frame_section): ...this new function.
(debug_info_section, debug_abbrev_section, debug_aranges_section)
(debug_macinfo_section, debug_line_section, debug_loc_section)
(debug_pubnames_section, debug_str_section, debug_ranges_section): New
variables.
(output_call_frame_info): Call switch_to_eh_frame_section instead of
eh_frame_section. Use switch_to_section and get_section.
(dwarf2out_begin_prologue): Use switch_to_section.
(AT_string_form): Check the flags in debug_str_section instead of
DEBUG_STR_SECTION_FLAGS.
(output_comp_unit): Use switch_to_section, get_section, and
debug_info_section.
(output_line_info, secname_for_decl): Use unlikely_text_section_p.
(dwarf2out_begin_block): Use switch_to_section. Remove argument
from call to current_function_section.
(dwarf2out_var_location): Use unlikely_text_section_p.
(dwarf2out_source_line): Use switch_to_section. Remove argument
from call to current_function_section.
(dwarf2out_start_source_file, dwarf2out_end_source_file)
(dwarf2out_define, dwarf2out_undef: Use switch_to_section and
debug_macinfo_section.
(dwarf2out_init): Initialize the new section variables. Use them
instead of calls to named_section_flags. Use switch_to_section.
(output_indirect_string): Use switch_to_section and debug_str_section.
(dwarf2out_finish): Use switch_to_section and the new section
variables.
* except.c (default_exception_section): Return the section instead
of emitting assembly code.
(output_function_exception_table): Use the global exception_section
variable instead of the target hook. Use switch_to_section. Remove
argument from call to current_function_section.
* final.c (HAVE_READONLY_DATA_SECTION): Delete.
(shorten_branches): Use pointer comparisons to detect whether the
text section is the same as readonly_data_section.
(profile_function): Use switch_to_section. Remove argument from
call to current_function_section.
(final_scan_insn): Likewise. Update use of last_text_section.
* gengtype.c (open_base_files): Add an include of output.h.
* output.h (text_section, data_section, readonly_data_section)
(ctors_section, dtors_section, bss_section, init_section)
(fini_section, sdata_section): Turn into section pointers.
(in_text_section, in_unlikely_text_section, exports_section)
(drectve_section, named_section, mergeable_string_section)
(last_text_section_name): Delete.
(default_exception_section, default_eh_frame_section): Return sections.
(SECTION_DECLARED, SECTION_NAMED): New macros.
(SECTION_MACH_DEP): Bump value.
(section_common, named_section, unnamed_section): New structures.
(unnamed_section_callback): New typedef.
(section): New union.
(sbss_section, exception_section, eh_frame_section): New variables.
(in_section, last_text_section): Turn into section pointers.
(get_unnamed_section, get_section, get_named_section): New functions.
(mergeable_constant_section, function_section): Return a section.
(unlikely_text_section): Likewise.
(current_function_section): Likewise. Remove the decl argument.
(unlikely_text_section_p, switch_to_section): New functions.
(output_section_asm_op): New function.
(set_named_section_flags, named_section_flags, named_section_real)
(named_section_first_declaration): Delete.
(default_select_section, default_elf_select_section): Return a section.
(default_elf_select_section_1, default_function_rodata_section)
(default_no_function_rodata_section, default_select_rtx_section)
(default_elf_select_rtx_section): Likewise.
* rtl.h (in_data_section): Delete.
* sdbout.c (sdbout_one_type): Use switch_to_section.
* system.h (EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Poison.
(READONLY_DATA_SECTION, TARGET_ASM_EXCEPTION_SECTION): Poison.
(TARGET_ASM_EH_FRAME_SECTION): Poison.
* target-def.h (TARGET_ASM_INIT_SECTIONS): New macro.
(TARGET_ASM_EXCEPTION_SECTION, TARGET_ASM_EH_FRAME_SECTION): Delete.
(TARGET_ASM_OUT): Update after above changes.
* target.h (init_sections): New hook.
(exception_section, eh_frame_section): Delete.
(select_section, select_rtx_section, function_rodata_section): Return
a section rather than emitting assembly code.
* varasm.c (text_section, data_section, readonly_data_section)
(ctors_section, dtors_section, bss_section, init_section)
(fini_section): Turn into section pointers.
(sdata_section, sbss_section, exception_section): New variables.
(eh_frame_section): New variable.
(in_section): Make global and turn into a section pointer.
(last_text_section): Turn into a section pointer.
(unnamed_sections): New variable.
(in_named_name, last_text_section_name): Delete.
(EXTRA_SECTION_FUNCTIONS): Delete.
(in_named_entry): Delete.
(section_htab): New variable, replacing...
(in_named_htab): ...this deleted variable.
(section_entry_eq, section_entry_hash): New functions, based on...
(in_named_entry_eq, in_named_entry_hash): ...these deleted functions.
(get_unnamed_section, get_section): New functions.
(unlikely_text_section): Return a section instead of emitting
assembly code.
(in_text_section, in_unlikely_text_section, in_data_section): Delete.
(get_named_section_flags, named_section_first_declaration): Delete.
(unlikely_text_section_p): New function.
(named_section_real, named_section): Delete.
(get_named_section): New function.
(asm_output_bss, asm_output_aligned_bss): Use switch_to_section.
(function_section): Return a section rather than emitting
assembly code.
(current_function_section): Likewise. Remove argument. Use
last_text_section if nonnull, otherwise use function_section.
(default_function_rodata_section): Return a section rather than
emitting assembly code. Use get_section.
(default_no_function_rodata_section): Return a section rather than
emitting assembly code.
(variable_section): Use switch_to_section and get_named_section.
(mergeable_string_section): Return a section rather than emitting
assembly code. Use get_section. Make static. Don't take special
countermeasures for empty strings.
(mergeable_constant_section): Return a section rather than emitting
assembly code. Use get_section.
(default_named_section_asm_out_destructor): Use switch_to_section
and get_section.
(default_dtor_section_asm_out_destructor): Use switch_to_section.
(default_named_section_asm_out_constructor): Use switch_to_section
and get_section.
(default_ctor_section_asm_out_constructor): Use switch_to_section.
(assemble_start_function): Likewise. Set last_text_section to
NULL rather than no_section. Change the type of save_section.
(assemble_zeros, assemble_variable): Use the section flags to detect
whether or not a section is text.
(assemble_static_space): Use switch_to_section.
(assemble_trampoline_template): Likewise.
(output_constant_def_contents): Use switch_to_section and
get_named_section.
(output_constant_pool_1): Use switch_to_section. Use the section
flags to see whether sections contain mergeable data.
(init_varasm_once): Initialize section_htab instead of in_named_htab.
Initialize new section variables. Call TARGET_ASM_INIT_SECTIONS.
(default_elf_asm_named_section): Use SECTION_DECLARED to detect
whether a section has already been declared.
(default_select_section, default_elf_select_section): Return a
section rather than emitting assembly code.
(default_elf_select_section_1): Likewise. Use bss_section for
SECCAT_BSS if nonnull. Use get_named_section.
(default_select_rtx_section): Return a section rather than
emitting assembly code.
(default_elf_select_rtx_section): Likewise. Use get_named_section.
(file_end_indicate_exec_stack): Use switch_to_section and get_section.
(output_section_asm_op, switch_to_section): New functions.
* vmsdbgout.c (vmsdbgout_finish): Use switch_to_section and
get_named_section.
* doc/tm.texi: Expand the introduction to the sections documentation.
(TRAMPOLINE_SECTION): Document new interface.
(SDATA_SECTION_ASM_OP): Document new macro.
(READONLY_DATA_SECTION): Delete.
(SDATA_SECTION_ASM_OP): Document new macro.
(EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS): Delete.
(TARGET_ASM_INIT_SECTIONS): Document new hook.
(TARGET_ASM_SELECT_SECTION, TARGET_ASM_FUNCTION_RODATA_SECTION)
(TARGET_ASM_SELECT_RTX_SECTION): Adjust for new interface.
(TARGET_EXCEPTION_SECTION, TARGET_EH_FRAME_SECTION): Delete.
gcc/java/
* class.c (build_utf8_ref, emit_register_classes): Use
switch_to_section and get_section.
From-SVN: r108152
Diffstat (limited to 'gcc/config/darwin.c')
| -rw-r--r-- | gcc/config/darwin.c | 184 |
1 files changed, 120 insertions, 64 deletions
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 54edae4..badc0d3 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -76,6 +76,65 @@ Boston, MA 02110-1301, USA. */ of MACHO_SYMBOL_STATIC for the code that handles @code{static} symbol indirection. */ +/* Define the individual section variables. */ +#define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) section *NAME; +#include "config/darwin-sections.def" +#undef DEF_SECTION + +/* A get_unnamed_section callback used to switch to an ObjC section. + DIRECTIVE is as for output_section_asm_op. */ + +static void +output_objc_section_asm_op (const void *directive) +{ + static int been_here = 0; + + if (been_here == 0) + { + been_here = 1; + /* written, cold -> hot */ + switch_to_section (objc_cat_cls_meth_section); + switch_to_section (objc_cat_inst_meth_section); + switch_to_section (objc_string_object_section); + switch_to_section (objc_constant_string_object_section); + switch_to_section (objc_selector_refs_section); + switch_to_section (objc_selector_fixup_section); + switch_to_section (objc_cls_refs_section); + switch_to_section (objc_class_section); + switch_to_section (objc_meta_class_section); + /* shared, hot -> cold */ + switch_to_section (objc_cls_meth_section); + switch_to_section (objc_inst_meth_section); + switch_to_section (objc_protocol_section); + switch_to_section (objc_class_names_section); + switch_to_section (objc_meth_var_types_section); + switch_to_section (objc_meth_var_names_section); + switch_to_section (objc_category_section); + switch_to_section (objc_class_vars_section); + switch_to_section (objc_instance_vars_section); + switch_to_section (objc_module_info_section); + switch_to_section (objc_symbols_section); + } + output_section_asm_op (directive); +} + +/* Implement TARGET_ASM_INIT_SECTIONS. */ + +void +darwin_init_sections (void) +{ +#define DEF_SECTION(NAME, FLAGS, DIRECTIVE, OBJC) \ + NAME = get_unnamed_section (FLAGS, (OBJC \ + ? output_objc_section_asm_op \ + : output_section_asm_op), \ + "\t" DIRECTIVE); +#include "darwin-sections.def" +#undef DEF_SECTION + + readonly_data_section = const_section; + exception_section = darwin_exception_section; + eh_frame_section = darwin_eh_frame_section; +} int name_needs_quotes (const char *name) @@ -909,7 +968,7 @@ machopic_output_indirection (void **slot, void *data) && (machopic_symbol_defined_p (symbol) || SYMBOL_REF_LOCAL_P (symbol))) { - data_section (); + switch_to_section (data_section); assemble_align (GET_MODE_ALIGNMENT (Pmode)); assemble_label (ptr_name); assemble_integer (gen_rtx_SYMBOL_REF (Pmode, sym_name), @@ -920,7 +979,7 @@ machopic_output_indirection (void **slot, void *data) { rtx init = const0_rtx; - machopic_nl_symbol_ptr_section (); + switch_to_section (machopic_nl_symbol_ptr_section); assemble_name (asm_out_file, ptr_name); fprintf (asm_out_file, ":\n"); @@ -1022,41 +1081,38 @@ darwin_mark_decl_preserved (const char *name) fputc ('\n', asm_out_file); } -void +section * machopic_select_section (tree exp, int reloc, unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED) { - void (*base_function)(void); + section *base_section; bool weak_p = (DECL_P (exp) && DECL_WEAK (exp) && (lookup_attribute ("weak", DECL_ATTRIBUTES (exp)) || ! lookup_attribute ("weak_import", DECL_ATTRIBUTES (exp)))); - static void (* const base_funs[][2])(void) = { - { text_section, text_coal_section }, - { unlikely_text_section, text_unlikely_coal_section }, - { readonly_data_section, const_coal_section }, - { const_data_section, const_data_coal_section }, - { data_section, data_coal_section } - }; - - if (reloc == 0 - && (last_text_section == in_text_unlikely - || last_text_section == in_text_unlikely_coal)) - reloc = 1; - + if (TREE_CODE (exp) == FUNCTION_DECL) - base_function = base_funs[reloc][weak_p]; + { + if (reloc == 1 + || unlikely_text_section_p (last_text_section) + || last_text_section == text_unlikely_coal_section) + base_section = (weak_p + ? text_unlikely_coal_section + : unlikely_text_section ()); + else + base_section = weak_p ? text_coal_section : text_section; + } else if (decl_readonly_section_1 (exp, reloc, MACHOPIC_INDIRECT)) - base_function = base_funs[2][weak_p]; + base_section = weak_p ? const_coal_section : const_section; else if (TREE_READONLY (exp) || TREE_CONSTANT (exp)) - base_function = base_funs[3][weak_p]; + base_section = weak_p ? const_data_coal_section : const_data_section; else - base_function = base_funs[4][weak_p]; + base_section = weak_p ? data_coal_section : data_section; if (TREE_CODE (exp) == STRING_CST && ((size_t) TREE_STRING_LENGTH (exp) == strlen (TREE_STRING_POINTER (exp)) + 1)) - cstring_section (); + return cstring_section; else if ((TREE_CODE (exp) == INTEGER_CST || TREE_CODE (exp) == REAL_CST) && flag_merge_constants) { @@ -1065,13 +1121,13 @@ machopic_select_section (tree exp, int reloc, if (TREE_CODE (size) == INTEGER_CST && TREE_INT_CST_LOW (size) == 4 && TREE_INT_CST_HIGH (size) == 0) - literal4_section (); + return literal4_section; else if (TREE_CODE (size) == INTEGER_CST && TREE_INT_CST_LOW (size) == 8 && TREE_INT_CST_HIGH (size) == 0) - literal8_section (); + return literal8_section; else - base_function (); + return base_section; } else if (TREE_CODE (exp) == CONSTRUCTOR && TREE_TYPE (exp) @@ -1085,12 +1141,12 @@ machopic_select_section (tree exp, int reloc, if (!strcmp (IDENTIFIER_POINTER (name), "__builtin_ObjCString")) { if (flag_next_runtime) - objc_constant_string_object_section (); + return objc_constant_string_object_section; else - objc_string_object_section (); + return objc_string_object_section; } else - base_function (); + return base_section; } else if (TREE_CODE (exp) == VAR_DECL && DECL_NAME (exp) && @@ -1101,89 +1157,89 @@ machopic_select_section (tree exp, int reloc, const char *name = IDENTIFIER_POINTER (DECL_NAME (exp)); if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20)) - objc_cls_meth_section (); + return objc_cls_meth_section; else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23)) - objc_inst_meth_section (); + return objc_inst_meth_section; else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) - objc_cat_cls_meth_section (); + return objc_cat_cls_meth_section; else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) - objc_cat_inst_meth_section (); + return objc_cat_inst_meth_section; else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22)) - objc_class_vars_section (); + return objc_class_vars_section; else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25)) - objc_instance_vars_section (); + return objc_instance_vars_section; else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22)) - objc_cat_cls_meth_section (); + return objc_cat_cls_meth_section; else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17)) - objc_class_names_section (); + return objc_class_names_section; else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20)) - objc_meth_var_names_section (); + return objc_meth_var_names_section; else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20)) - objc_meth_var_types_section (); + return objc_meth_var_types_section; else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22)) - objc_cls_refs_section (); + return objc_cls_refs_section; else if (!strncmp (name, "_OBJC_CLASS_", 12)) - objc_class_section (); + return objc_class_section; else if (!strncmp (name, "_OBJC_METACLASS_", 16)) - objc_meta_class_section (); + return objc_meta_class_section; else if (!strncmp (name, "_OBJC_CATEGORY_", 15)) - objc_category_section (); + return objc_category_section; else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25)) - objc_selector_refs_section (); + return objc_selector_refs_section; else if (!strncmp (name, "_OBJC_SELECTOR_FIXUP", 20)) - objc_selector_fixup_section (); + return objc_selector_fixup_section; else if (!strncmp (name, "_OBJC_SYMBOLS", 13)) - objc_symbols_section (); + return objc_symbols_section; else if (!strncmp (name, "_OBJC_MODULES", 13)) - objc_module_info_section (); + return objc_module_info_section; else if (!strncmp (name, "_OBJC_IMAGE_INFO", 16)) - objc_image_info_section (); + return objc_image_info_section; else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) - objc_cat_inst_meth_section (); + return objc_cat_inst_meth_section; else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) - objc_cat_cls_meth_section (); + return objc_cat_cls_meth_section; else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20)) - objc_cat_cls_meth_section (); + return objc_cat_cls_meth_section; else if (!strncmp (name, "_OBJC_PROTOCOL_", 15)) - objc_protocol_section (); + return objc_protocol_section; else - base_function (); + return base_section; } else - base_function (); + return base_section; } /* This can be called with address expressions as "rtx". They must go in "const". */ -void +section * machopic_select_rtx_section (enum machine_mode mode, rtx x, unsigned HOST_WIDE_INT align ATTRIBUTE_UNUSED) { if (GET_MODE_SIZE (mode) == 8 && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)) - literal8_section (); + return literal8_section; else if (GET_MODE_SIZE (mode) == 4 && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE)) - literal4_section (); + return literal4_section; else if (MACHOPIC_INDIRECT && (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == CONST || GET_CODE (x) == LABEL_REF)) - const_data_section (); + return const_data_section; else - const_section (); + return const_section; } void machopic_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED) { if (MACHOPIC_INDIRECT) - mod_init_section (); + switch_to_section (mod_init_section); else - constructor_section (); + switch_to_section (constructor_section); assemble_align (POINTER_SIZE); assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); @@ -1195,9 +1251,9 @@ void machopic_asm_out_destructor (rtx symbol, int priority ATTRIBUTE_UNUSED) { if (MACHOPIC_INDIRECT) - mod_term_section (); + switch_to_section (mod_term_section); else - destructor_section (); + switch_to_section (destructor_section); assemble_align (POINTER_SIZE); assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); @@ -1389,8 +1445,8 @@ darwin_file_end (void) machopic_finish (asm_out_file); if (strcmp (lang_hooks.name, "GNU C++") == 0) { - constructor_section (); - destructor_section (); + switch_to_section (constructor_section); + switch_to_section (destructor_section); ASM_OUTPUT_ALIGN (asm_out_file, 1); } fprintf (asm_out_file, "\t.subsections_via_symbols\n"); |
