]>
Commit | Line | Data |
---|---|---|
a5544970 | 1 | /* Copyright (C) 2005-2019 Free Software Foundation, Inc. |
ad41bd84 JM |
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 | <http://www.gnu.org/licenses/>. */ | |
18 | ||
46a99b06 IS |
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 | ||
fbbfcaf1 | 30 | /* The .text section is generated in varasm.c */ |
46a99b06 | 31 | DEF_SECTION (text_coal_section, SECTION_CODE|SECTION_NO_ANCHOR, |
d6b5193b | 32 | ".section __TEXT,__textcoal_nt,coalesced,pure_instructions", 0) |
46a99b06 | 33 | |
794fa8a6 IS |
34 | /* We define a picbase thunks section separately, so that we can override the |
35 | def to be '.text' for versions of ld64 that handle coalescing. */ | |
36 | DEF_SECTION (picbase_thunk_section, SECTION_CODE|SECTION_NO_ANCHOR, | |
37 | ".section __TEXT,__textcoal_nt,coalesced,pure_instructions", 0) | |
38 | ||
1f81953b IS |
39 | DEF_SECTION (text_hot_section, SECTION_CODE, |
40 | ".section __TEXT,__text_hot,regular,pure_instructions", 0) | |
41 | DEF_SECTION (text_cold_section, SECTION_CODE, | |
42 | ".section __TEXT,__text_cold,regular,pure_instructions", 0) | |
43 | DEF_SECTION (text_startup_section, SECTION_CODE, | |
44 | ".section __TEXT,__text_startup,regular,pure_instructions", 0) | |
45 | DEF_SECTION (text_exit_section, SECTION_CODE, | |
46 | ".section __TEXT,__text_exit,regular,pure_instructions", 0) | |
47 | ||
48 | DEF_SECTION (text_hot_coal_section, SECTION_CODE, | |
49 | ".section __TEXT,__text_hot_coal,coalesced,pure_instructions", 0) | |
50 | DEF_SECTION (text_cold_coal_section, SECTION_CODE, | |
51 | ".section __TEXT,__text_cold_coal,coalesced,pure_instructions", 0) | |
52 | DEF_SECTION (text_startup_coal_section, SECTION_CODE, | |
53 | ".section __TEXT,__text_stt_coal,coalesced,pure_instructions", 0) | |
54 | DEF_SECTION (text_exit_coal_section, SECTION_CODE, | |
55 | ".section __TEXT,__text_exit_coal,coalesced,pure_instructions", 0) | |
56 | ||
46a99b06 | 57 | /* const */ |
d6b5193b | 58 | DEF_SECTION (const_section, 0, ".const", 0) |
46a99b06 | 59 | DEF_SECTION (const_coal_section, SECTION_NO_ANCHOR, |
d6b5193b | 60 | ".section __TEXT,__const_coal,coalesced", 0) |
46a99b06 IS |
61 | /* Place to put zero-sized to avoid issues with section anchors. */ |
62 | DEF_SECTION (zobj_const_section, SECTION_NO_ANCHOR, | |
63 | ".section\t__DATA,__zobj_const", 0) | |
64 | ||
65 | /* Write-able data. '.data' handled in varasm.c */ | |
66 | DEF_SECTION (static_data_section, SECTION_WRITE, ".static_data", 0) | |
67 | DEF_SECTION (data_coal_section, SECTION_WRITE|SECTION_NO_ANCHOR, | |
68 | ".section __DATA,__datacoal_nt,coalesced", 0) | |
69 | /* Place to put zero-sized to avoid issues with section anchors. */ | |
70 | DEF_SECTION (zobj_data_section, SECTION_WRITE|SECTION_NO_ANCHOR, | |
71 | ".section\t__DATA,__zobj_data", 0) | |
72 | ||
73 | /* BSS - .lcomm / .zerofill __DATA,__bss sections cannot be switched to | |
74 | explicitly (will create an assembler error). */ | |
75 | DEF_SECTION (zobj_bss_section, SECTION_WRITE|SECTION_BSS|SECTION_NO_ANCHOR, | |
76 | ".section\t__DATA,__zobj_bss", 0) | |
77 | ||
78 | /* const data */ | |
d6b5193b | 79 | DEF_SECTION (const_data_section, 0, ".const_data", 0) |
46a99b06 | 80 | DEF_SECTION (const_data_coal_section, SECTION_NO_ANCHOR, |
d6b5193b | 81 | ".section __DATA,__const_coal,coalesced", 0) |
46a99b06 IS |
82 | /* Place to put zero-sized to avoid issues with section anchors. */ |
83 | DEF_SECTION (zobj_const_data_section, SECTION_NO_ANCHOR, | |
0a5a95f2 | 84 | ".section\t__DATA,__zobj_cnst_data", 0) |
46a99b06 IS |
85 | |
86 | /* Strings and other literals. */ | |
59ff4a1c | 87 | DEF_SECTION (cstring_section, SECTION_MERGE | SECTION_STRINGS, ".cstring", 0) |
ab0ff804 AP |
88 | DEF_SECTION (literal4_section, SECTION_MERGE, ".literal4", 0) |
89 | DEF_SECTION (literal8_section, SECTION_MERGE, ".literal8", 0) | |
f7288899 | 90 | DEF_SECTION (literal16_section, SECTION_MERGE, ".literal16", 0) |
46a99b06 IS |
91 | /* Unlike constant NSStrings, constant CFStrings do not live in the |
92 | __OBJC segment since they may also occur in pure C or C++ programs. */ | |
93 | DEF_SECTION (cfstring_constant_object_section, 0, | |
94 | ".section __DATA, __cfstring", 0) | |
95 | ||
96 | /* Module init, term, constructors & destructors. */ | |
d6b5193b RS |
97 | DEF_SECTION (mod_init_section, 0, ".mod_init_func", 0) |
98 | DEF_SECTION (mod_term_section, 0, ".mod_term_func", 0) | |
46a99b06 | 99 | DEF_SECTION (constructor_section, 0, ".constructor", 0) |
d6b5193b | 100 | DEF_SECTION (destructor_section, 0, ".destructor", 0) |
46a99b06 | 101 | |
d764a8e6 | 102 | /* Objective-C ABI=0 (Original version) sections. */ |
d6b5193b RS |
103 | DEF_SECTION (objc_class_section, 0, ".objc_class", 1) |
104 | DEF_SECTION (objc_meta_class_section, 0, ".objc_meta_class", 1) | |
105 | DEF_SECTION (objc_category_section, 0, ".objc_category", 1) | |
106 | DEF_SECTION (objc_class_vars_section, 0, ".objc_class_vars", 1) | |
107 | DEF_SECTION (objc_instance_vars_section, 0, ".objc_instance_vars", 1) | |
108 | DEF_SECTION (objc_cls_meth_section, 0, ".objc_cls_meth", 1) | |
109 | DEF_SECTION (objc_inst_meth_section, 0, ".objc_inst_meth", 1) | |
110 | DEF_SECTION (objc_cat_cls_meth_section, 0, ".objc_cat_cls_meth", 1) | |
111 | DEF_SECTION (objc_cat_inst_meth_section, 0, ".objc_cat_inst_meth", 1) | |
ab0ff804 | 112 | DEF_SECTION (objc_selector_refs_section, SECTION_MERGE, ".objc_message_refs", 1) |
d6b5193b RS |
113 | DEF_SECTION (objc_selector_fixup_section, 0, |
114 | ".section __OBJC, __sel_fixup, regular, no_dead_strip", 1) | |
115 | DEF_SECTION (objc_symbols_section, 0, ".objc_symbols", 1) | |
116 | DEF_SECTION (objc_module_info_section, 0, ".objc_module_info", 1) | |
117 | DEF_SECTION (objc_protocol_section, 0, ".objc_protocol", 1) | |
118 | DEF_SECTION (objc_string_object_section, 0, ".objc_string_object", 1) | |
119 | DEF_SECTION (objc_constant_string_object_section, 0, | |
d764a8e6 | 120 | ".section __OBJC, __cstring_object, regular, no_dead_strip", 0) |
d6b5193b RS |
121 | |
122 | /* Fix-and-Continue image marker. */ | |
123 | DEF_SECTION (objc_image_info_section, 0, | |
124 | ".section __OBJC, __image_info, regular, no_dead_strip", 1) | |
125 | DEF_SECTION (objc_class_names_section, 0, ".objc_class_names", 1) | |
126 | DEF_SECTION (objc_meth_var_names_section, 0, ".objc_meth_var_names", 1) | |
127 | DEF_SECTION (objc_meth_var_types_section, 0, ".objc_meth_var_types", 1) | |
ab0ff804 | 128 | DEF_SECTION (objc_cls_refs_section, SECTION_MERGE, ".objc_cls_refs", 1) |
46a99b06 IS |
129 | |
130 | /* Stubs and symbol indirection sections. */ | |
fee3eacd | 131 | /* lazy symbol pointers. */ |
46a99b06 IS |
132 | DEF_SECTION (machopic_lazy_symbol_ptr_section, SECTION_NO_ANCHOR, |
133 | ".lazy_symbol_pointer", 0) | |
134 | DEF_SECTION (machopic_lazy_symbol_ptr2_section, SECTION_NO_ANCHOR, | |
fee3eacd | 135 | ".section __DATA, __la_sym_ptr2,lazy_symbol_pointers", 0) |
46a99b06 | 136 | DEF_SECTION (machopic_lazy_symbol_ptr3_section, SECTION_NO_ANCHOR, |
fee3eacd IS |
137 | ".section __DATA, __la_sym_ptr3,lazy_symbol_pointers", 0) |
138 | /* non-lazy symbol pointers. */ | |
46a99b06 | 139 | DEF_SECTION (machopic_nl_symbol_ptr_section, SECTION_NO_ANCHOR, |
fee3eacd IS |
140 | MACHOPIC_NL_SYMBOL_PTR_SECTION, 0) |
141 | /* Symbol stubs. */ | |
46a99b06 IS |
142 | DEF_SECTION (machopic_symbol_stub_section, SECTION_NO_ANCHOR, |
143 | ".symbol_stub", 0) | |
144 | DEF_SECTION (machopic_symbol_stub1_section, SECTION_NO_ANCHOR, | |
d6b5193b RS |
145 | ".section __TEXT,__symbol_stub1,symbol_stubs," |
146 | "pure_instructions,16", 0) | |
fee3eacd | 147 | /* PIC symbol stubs. */ |
46a99b06 IS |
148 | DEF_SECTION (machopic_picsymbol_stub_section, SECTION_NO_ANCHOR, |
149 | ".picsymbol_stub", 0) | |
150 | DEF_SECTION (machopic_picsymbol_stub1_section, SECTION_NO_ANCHOR, | |
d6b5193b RS |
151 | ".section __TEXT,__picsymbolstub1,symbol_stubs," |
152 | "pure_instructions,32", 0) | |
46a99b06 | 153 | DEF_SECTION (machopic_picsymbol_stub2_section, SECTION_NO_ANCHOR, |
fee3eacd | 154 | ".section __TEXT,__picsymbolstub2,symbol_stubs,pure_instructions,25", 0) |
46a99b06 | 155 | DEF_SECTION (machopic_picsymbol_stub3_section, SECTION_NO_ANCHOR, |
fee3eacd | 156 | ".section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5", 0) |
46a99b06 | 157 | |
fee3eacd | 158 | /* Exception-related. */ |
46a99b06 | 159 | DEF_SECTION (darwin_exception_section, SECTION_NO_ANCHOR, |
d6b5193b | 160 | ".section __DATA,__gcc_except_tab", 0) |
46a99b06 | 161 | DEF_SECTION (darwin_eh_frame_section, SECTION_NO_ANCHOR, |
d6b5193b RS |
162 | ".section " EH_FRAME_SECTION_NAME ",__eh_frame" |
163 | EH_FRAME_SECTION_ATTR, 0) | |
d764a8e6 IS |
164 | |
165 | /* Sections for ObjC ABI=1 (ObjC 'V1' extensions) */ | |
166 | DEF_SECTION (objc1_class_ext_section, 0, | |
167 | ".section __OBJC, __class_ext, regular, no_dead_strip", 1) | |
168 | DEF_SECTION (objc1_prop_list_section, 0, | |
169 | ".section __OBJC, __property, regular, no_dead_strip", 1) | |
170 | DEF_SECTION (objc1_protocol_ext_section, 0, | |
171 | ".section __OBJC, __protocol_ext, regular, no_dead_strip", 1) | |
172 | ||
173 | /* Sections for ObjC ABI=2 (m64). */ | |
174 | DEF_SECTION (objc2_message_refs_section, 0, | |
175 | ".section __DATA, __objc_msgrefs, regular, no_dead_strip", 1) | |
176 | DEF_SECTION (objc2_classdefs_section, 0, ".section __DATA, __objc_data", 1) | |
177 | DEF_SECTION (objc2_metadata_section, 0, ".section __DATA, __objc_const", 1) | |
178 | ||
179 | DEF_SECTION (objc2_classrefs_section, 0, | |
180 | ".section __DATA, __objc_classrefs, regular, no_dead_strip", 1) | |
181 | DEF_SECTION (objc2_classlist_section, 0, | |
182 | ".section __DATA, __objc_classlist, regular, no_dead_strip", 1) | |
183 | DEF_SECTION (objc2_categorylist_section, 0, | |
184 | ".section __DATA, __objc_catlist, regular, no_dead_strip", 1) | |
185 | DEF_SECTION (objc2_selector_refs_section, 0, | |
186 | ".section __DATA, __objc_selrefs, literal_pointers, no_dead_strip", 1) | |
187 | DEF_SECTION (objc2_nonlazy_class_section, 0, | |
188 | ".section __DATA, __objc_nlclslist, regular, no_dead_strip", 1) | |
189 | DEF_SECTION (objc2_nonlazy_category_section, 0, | |
190 | ".section __DATA, __objc_nlcatlist, regular, no_dead_strip", 1) | |
191 | DEF_SECTION (objc2_protocollist_section, 0, | |
192 | ".section __DATA, __objc_protolist, regular, no_dead_strip", 1) | |
193 | DEF_SECTION (objc2_protocolrefs_section, 0, | |
194 | ".section __DATA, __objc_protorefs, regular, no_dead_strip", 1) | |
195 | DEF_SECTION (objc2_super_classrefs_section, 0, | |
196 | ".section __DATA, __objc_superrefs, regular, no_dead_strip", 1) | |
197 | DEF_SECTION (objc2_image_info_section, 0, | |
198 | ".section __DATA, __objc_imageinfo, regular, no_dead_strip", 1) | |
199 | DEF_SECTION (objc2_constant_string_object_section, 0, | |
200 | ".section __DATA, __objc_stringobj, regular, no_dead_strip", 1) |