| 1 |
709 |
jeremybenn |
/* Copyright (C) 2005, 2006, 2010 Free Software Foundation, Inc.
|
| 2 |
|
|
|
| 3 |
|
|
This file is part of GCC.
|
| 4 |
|
|
|
| 5 |
|
|
GCC is free software; you can redistribute it and/or modify it under
|
| 6 |
|
|
the terms of the GNU General Public License as published by the Free
|
| 7 |
|
|
Software Foundation; either version 3, or (at your option) any later
|
| 8 |
|
|
version.
|
| 9 |
|
|
|
| 10 |
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
| 11 |
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
| 12 |
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
| 13 |
|
|
for more details.
|
| 14 |
|
|
|
| 15 |
|
|
You should have received a copy of the GNU General Public License
|
| 16 |
|
|
along with GCC; see the file COPYING3. If not see
|
| 17 |
|
|
. */
|
| 18 |
|
|
|
| 19 |
|
|
/* Since Darwin's ld will not allow zero-sized objects, and gcc wants them,
|
| 20 |
|
|
we emit one byte (in darwin.c) when such an object is encountered.
|
| 21 |
|
|
|
| 22 |
|
|
This messes up section anchoring because the emitted byte is not counted
|
| 23 |
|
|
outside the port. To cope with this, we set aside sections for zero-sized
|
| 24 |
|
|
objects and disallow those sections from participating in section anchors
|
| 25 |
|
|
("zobj_" sections, below).
|
| 26 |
|
|
|
| 27 |
|
|
Items that might be coalesced by the linker are prevented from participating,
|
| 28 |
|
|
(and those in mergeable sections are disallowed in varasm.c). */
|
| 29 |
|
|
|
| 30 |
|
|
/* The .text section is generated in varasm.c */
|
| 31 |
|
|
DEF_SECTION (text_coal_section, SECTION_CODE|SECTION_NO_ANCHOR,
|
| 32 |
|
|
".section __TEXT,__textcoal_nt,coalesced,pure_instructions", 0)
|
| 33 |
|
|
|
| 34 |
|
|
DEF_SECTION (text_hot_section, SECTION_CODE,
|
| 35 |
|
|
".section __TEXT,__text_hot,regular,pure_instructions", 0)
|
| 36 |
|
|
DEF_SECTION (text_cold_section, SECTION_CODE,
|
| 37 |
|
|
".section __TEXT,__text_cold,regular,pure_instructions", 0)
|
| 38 |
|
|
DEF_SECTION (text_startup_section, SECTION_CODE,
|
| 39 |
|
|
".section __TEXT,__text_startup,regular,pure_instructions", 0)
|
| 40 |
|
|
DEF_SECTION (text_exit_section, SECTION_CODE,
|
| 41 |
|
|
".section __TEXT,__text_exit,regular,pure_instructions", 0)
|
| 42 |
|
|
|
| 43 |
|
|
DEF_SECTION (text_hot_coal_section, SECTION_CODE,
|
| 44 |
|
|
".section __TEXT,__text_hot_coal,coalesced,pure_instructions", 0)
|
| 45 |
|
|
DEF_SECTION (text_cold_coal_section, SECTION_CODE,
|
| 46 |
|
|
".section __TEXT,__text_cold_coal,coalesced,pure_instructions", 0)
|
| 47 |
|
|
DEF_SECTION (text_startup_coal_section, SECTION_CODE,
|
| 48 |
|
|
".section __TEXT,__text_stt_coal,coalesced,pure_instructions", 0)
|
| 49 |
|
|
DEF_SECTION (text_exit_coal_section, SECTION_CODE,
|
| 50 |
|
|
".section __TEXT,__text_exit_coal,coalesced,pure_instructions", 0)
|
| 51 |
|
|
|
| 52 |
|
|
/* const */
|
| 53 |
|
|
DEF_SECTION (const_section, 0, ".const", 0)
|
| 54 |
|
|
DEF_SECTION (const_coal_section, SECTION_NO_ANCHOR,
|
| 55 |
|
|
".section __TEXT,__const_coal,coalesced", 0)
|
| 56 |
|
|
/* Place to put zero-sized to avoid issues with section anchors. */
|
| 57 |
|
|
DEF_SECTION (zobj_const_section, SECTION_NO_ANCHOR,
|
| 58 |
|
|
".section\t__DATA,__zobj_const", 0)
|
| 59 |
|
|
|
| 60 |
|
|
/* Write-able data. '.data' handled in varasm.c */
|
| 61 |
|
|
DEF_SECTION (static_data_section, SECTION_WRITE, ".static_data", 0)
|
| 62 |
|
|
DEF_SECTION (data_coal_section, SECTION_WRITE|SECTION_NO_ANCHOR,
|
| 63 |
|
|
".section __DATA,__datacoal_nt,coalesced", 0)
|
| 64 |
|
|
/* Place to put zero-sized to avoid issues with section anchors. */
|
| 65 |
|
|
DEF_SECTION (zobj_data_section, SECTION_WRITE|SECTION_NO_ANCHOR,
|
| 66 |
|
|
".section\t__DATA,__zobj_data", 0)
|
| 67 |
|
|
|
| 68 |
|
|
/* BSS - .lcomm / .zerofill __DATA,__bss sections cannot be switched to
|
| 69 |
|
|
explicitly (will create an assembler error). */
|
| 70 |
|
|
DEF_SECTION (zobj_bss_section, SECTION_WRITE|SECTION_BSS|SECTION_NO_ANCHOR,
|
| 71 |
|
|
".section\t__DATA,__zobj_bss", 0)
|
| 72 |
|
|
|
| 73 |
|
|
/* const data */
|
| 74 |
|
|
DEF_SECTION (const_data_section, 0, ".const_data", 0)
|
| 75 |
|
|
DEF_SECTION (const_data_coal_section, SECTION_NO_ANCHOR,
|
| 76 |
|
|
".section __DATA,__const_coal,coalesced", 0)
|
| 77 |
|
|
/* Place to put zero-sized to avoid issues with section anchors. */
|
| 78 |
|
|
DEF_SECTION (zobj_const_data_section, SECTION_NO_ANCHOR,
|
| 79 |
|
|
".section\t__DATA,__zobj_cnst_data", 0)
|
| 80 |
|
|
|
| 81 |
|
|
/* Strings and other literals. */
|
| 82 |
|
|
DEF_SECTION (cstring_section, SECTION_MERGE | SECTION_STRINGS, ".cstring", 0)
|
| 83 |
|
|
DEF_SECTION (literal4_section, SECTION_MERGE, ".literal4", 0)
|
| 84 |
|
|
DEF_SECTION (literal8_section, SECTION_MERGE, ".literal8", 0)
|
| 85 |
|
|
DEF_SECTION (literal16_section, SECTION_MERGE, ".literal16", 0)
|
| 86 |
|
|
/* Unlike constant NSStrings, constant CFStrings do not live in the
|
| 87 |
|
|
__OBJC segment since they may also occur in pure C or C++ programs. */
|
| 88 |
|
|
DEF_SECTION (cfstring_constant_object_section, 0,
|
| 89 |
|
|
".section __DATA, __cfstring", 0)
|
| 90 |
|
|
|
| 91 |
|
|
/* Module init, term, constructors & destructors. */
|
| 92 |
|
|
DEF_SECTION (mod_init_section, 0, ".mod_init_func", 0)
|
| 93 |
|
|
DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0)
|
| 94 |
|
|
DEF_SECTION (constructor_section, 0, ".constructor", 0)
|
| 95 |
|
|
DEF_SECTION (destructor_section, 0, ".destructor", 0)
|
| 96 |
|
|
|
| 97 |
|
|
/* Objective-C ABI=0 (Original version) sections. */
|
| 98 |
|
|
DEF_SECTION (objc_class_section, 0, ".objc_class", 1)
|
| 99 |
|
|
DEF_SECTION (objc_meta_class_section, 0, ".objc_meta_class", 1)
|
| 100 |
|
|
DEF_SECTION (objc_category_section, 0, ".objc_category", 1)
|
| 101 |
|
|
DEF_SECTION (objc_class_vars_section, 0, ".objc_class_vars", 1)
|
| 102 |
|
|
DEF_SECTION (objc_instance_vars_section, 0, ".objc_instance_vars", 1)
|
| 103 |
|
|
DEF_SECTION (objc_cls_meth_section, 0, ".objc_cls_meth", 1)
|
| 104 |
|
|
DEF_SECTION (objc_inst_meth_section, 0, ".objc_inst_meth", 1)
|
| 105 |
|
|
DEF_SECTION (objc_cat_cls_meth_section, 0, ".objc_cat_cls_meth", 1)
|
| 106 |
|
|
DEF_SECTION (objc_cat_inst_meth_section, 0, ".objc_cat_inst_meth", 1)
|
| 107 |
|
|
DEF_SECTION (objc_selector_refs_section, SECTION_MERGE, ".objc_message_refs", 1)
|
| 108 |
|
|
DEF_SECTION (objc_selector_fixup_section, 0,
|
| 109 |
|
|
".section __OBJC, __sel_fixup, regular, no_dead_strip", 1)
|
| 110 |
|
|
DEF_SECTION (objc_symbols_section, 0, ".objc_symbols", 1)
|
| 111 |
|
|
DEF_SECTION (objc_module_info_section, 0, ".objc_module_info", 1)
|
| 112 |
|
|
DEF_SECTION (objc_protocol_section, 0, ".objc_protocol", 1)
|
| 113 |
|
|
DEF_SECTION (objc_string_object_section, 0, ".objc_string_object", 1)
|
| 114 |
|
|
DEF_SECTION (objc_constant_string_object_section, 0,
|
| 115 |
|
|
".section __OBJC, __cstring_object, regular, no_dead_strip", 0)
|
| 116 |
|
|
|
| 117 |
|
|
/* Fix-and-Continue image marker. */
|
| 118 |
|
|
DEF_SECTION (objc_image_info_section, 0,
|
| 119 |
|
|
".section __OBJC, __image_info, regular, no_dead_strip", 1)
|
| 120 |
|
|
DEF_SECTION (objc_class_names_section, 0, ".objc_class_names", 1)
|
| 121 |
|
|
DEF_SECTION (objc_meth_var_names_section, 0, ".objc_meth_var_names", 1)
|
| 122 |
|
|
DEF_SECTION (objc_meth_var_types_section, 0, ".objc_meth_var_types", 1)
|
| 123 |
|
|
DEF_SECTION (objc_cls_refs_section, SECTION_MERGE, ".objc_cls_refs", 1)
|
| 124 |
|
|
|
| 125 |
|
|
/* Stubs and symbol indirection sections. */
|
| 126 |
|
|
/* lazy symbol pointers. */
|
| 127 |
|
|
DEF_SECTION (machopic_lazy_symbol_ptr_section, SECTION_NO_ANCHOR,
|
| 128 |
|
|
".lazy_symbol_pointer", 0)
|
| 129 |
|
|
DEF_SECTION (machopic_lazy_symbol_ptr2_section, SECTION_NO_ANCHOR,
|
| 130 |
|
|
".section __DATA, __la_sym_ptr2,lazy_symbol_pointers", 0)
|
| 131 |
|
|
DEF_SECTION (machopic_lazy_symbol_ptr3_section, SECTION_NO_ANCHOR,
|
| 132 |
|
|
".section __DATA, __la_sym_ptr3,lazy_symbol_pointers", 0)
|
| 133 |
|
|
/* non-lazy symbol pointers. */
|
| 134 |
|
|
DEF_SECTION (machopic_nl_symbol_ptr_section, SECTION_NO_ANCHOR,
|
| 135 |
|
|
MACHOPIC_NL_SYMBOL_PTR_SECTION, 0)
|
| 136 |
|
|
/* Symbol stubs. */
|
| 137 |
|
|
DEF_SECTION (machopic_symbol_stub_section, SECTION_NO_ANCHOR,
|
| 138 |
|
|
".symbol_stub", 0)
|
| 139 |
|
|
DEF_SECTION (machopic_symbol_stub1_section, SECTION_NO_ANCHOR,
|
| 140 |
|
|
".section __TEXT,__symbol_stub1,symbol_stubs,"
|
| 141 |
|
|
"pure_instructions,16", 0)
|
| 142 |
|
|
/* PIC symbol stubs. */
|
| 143 |
|
|
DEF_SECTION (machopic_picsymbol_stub_section, SECTION_NO_ANCHOR,
|
| 144 |
|
|
".picsymbol_stub", 0)
|
| 145 |
|
|
DEF_SECTION (machopic_picsymbol_stub1_section, SECTION_NO_ANCHOR,
|
| 146 |
|
|
".section __TEXT,__picsymbolstub1,symbol_stubs,"
|
| 147 |
|
|
"pure_instructions,32", 0)
|
| 148 |
|
|
DEF_SECTION (machopic_picsymbol_stub2_section, SECTION_NO_ANCHOR,
|
| 149 |
|
|
".section __TEXT,__picsymbolstub2,symbol_stubs,pure_instructions,25", 0)
|
| 150 |
|
|
DEF_SECTION (machopic_picsymbol_stub3_section, SECTION_NO_ANCHOR,
|
| 151 |
|
|
".section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5", 0)
|
| 152 |
|
|
|
| 153 |
|
|
/* Exception-related. */
|
| 154 |
|
|
DEF_SECTION (darwin_exception_section, SECTION_NO_ANCHOR,
|
| 155 |
|
|
".section __DATA,__gcc_except_tab", 0)
|
| 156 |
|
|
DEF_SECTION (darwin_eh_frame_section, SECTION_NO_ANCHOR,
|
| 157 |
|
|
".section " EH_FRAME_SECTION_NAME ",__eh_frame"
|
| 158 |
|
|
EH_FRAME_SECTION_ATTR, 0)
|
| 159 |
|
|
|
| 160 |
|
|
/* Sections for ObjC ABI=1 (ObjC 'V1' extensions) */
|
| 161 |
|
|
DEF_SECTION (objc1_class_ext_section, 0,
|
| 162 |
|
|
".section __OBJC, __class_ext, regular, no_dead_strip", 1)
|
| 163 |
|
|
DEF_SECTION (objc1_prop_list_section, 0,
|
| 164 |
|
|
".section __OBJC, __property, regular, no_dead_strip", 1)
|
| 165 |
|
|
DEF_SECTION (objc1_protocol_ext_section, 0,
|
| 166 |
|
|
".section __OBJC, __protocol_ext, regular, no_dead_strip", 1)
|
| 167 |
|
|
|
| 168 |
|
|
/* Sections for ObjC ABI=2 (m64). */
|
| 169 |
|
|
DEF_SECTION (objc2_message_refs_section, 0,
|
| 170 |
|
|
".section __DATA, __objc_msgrefs, regular, no_dead_strip", 1)
|
| 171 |
|
|
DEF_SECTION (objc2_classdefs_section, 0, ".section __DATA, __objc_data", 1)
|
| 172 |
|
|
DEF_SECTION (objc2_metadata_section, 0, ".section __DATA, __objc_const", 1)
|
| 173 |
|
|
|
| 174 |
|
|
DEF_SECTION (objc2_classrefs_section, 0,
|
| 175 |
|
|
".section __DATA, __objc_classrefs, regular, no_dead_strip", 1)
|
| 176 |
|
|
DEF_SECTION (objc2_classlist_section, 0,
|
| 177 |
|
|
".section __DATA, __objc_classlist, regular, no_dead_strip", 1)
|
| 178 |
|
|
DEF_SECTION (objc2_categorylist_section, 0,
|
| 179 |
|
|
".section __DATA, __objc_catlist, regular, no_dead_strip", 1)
|
| 180 |
|
|
DEF_SECTION (objc2_selector_refs_section, 0,
|
| 181 |
|
|
".section __DATA, __objc_selrefs, literal_pointers, no_dead_strip", 1)
|
| 182 |
|
|
DEF_SECTION (objc2_nonlazy_class_section, 0,
|
| 183 |
|
|
".section __DATA, __objc_nlclslist, regular, no_dead_strip", 1)
|
| 184 |
|
|
DEF_SECTION (objc2_nonlazy_category_section, 0,
|
| 185 |
|
|
".section __DATA, __objc_nlcatlist, regular, no_dead_strip", 1)
|
| 186 |
|
|
DEF_SECTION (objc2_protocollist_section, 0,
|
| 187 |
|
|
".section __DATA, __objc_protolist, regular, no_dead_strip", 1)
|
| 188 |
|
|
DEF_SECTION (objc2_protocolrefs_section, 0,
|
| 189 |
|
|
".section __DATA, __objc_protorefs, regular, no_dead_strip", 1)
|
| 190 |
|
|
DEF_SECTION (objc2_super_classrefs_section, 0,
|
| 191 |
|
|
".section __DATA, __objc_superrefs, regular, no_dead_strip", 1)
|
| 192 |
|
|
DEF_SECTION (objc2_image_info_section, 0,
|
| 193 |
|
|
".section __DATA, __objc_imageinfo, regular, no_dead_strip", 1)
|
| 194 |
|
|
DEF_SECTION (objc2_constant_string_object_section, 0,
|
| 195 |
|
|
".section __DATA, __objc_stringobj, regular, no_dead_strip", 1)
|