xref: /dflybsd-src/contrib/binutils-2.34/gold/defstd.cc (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj // defstd.cc -- define standard symbols for gold.
2*fae548d3Szrj 
3*fae548d3Szrj // Copyright (C) 2006-2020 Free Software Foundation, Inc.
4*fae548d3Szrj // Written by Ian Lance Taylor <iant@google.com>.
5*fae548d3Szrj 
6*fae548d3Szrj // This file is part of gold.
7*fae548d3Szrj 
8*fae548d3Szrj // This program is free software; you can redistribute it and/or modify
9*fae548d3Szrj // it under the terms of the GNU General Public License as published by
10*fae548d3Szrj // the Free Software Foundation; either version 3 of the License, or
11*fae548d3Szrj // (at your option) any later version.
12*fae548d3Szrj 
13*fae548d3Szrj // This program is distributed in the hope that it will be useful,
14*fae548d3Szrj // but WITHOUT ANY WARRANTY; without even the implied warranty of
15*fae548d3Szrj // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*fae548d3Szrj // GNU General Public License for more details.
17*fae548d3Szrj 
18*fae548d3Szrj // You should have received a copy of the GNU General Public License
19*fae548d3Szrj // along with this program; if not, write to the Free Software
20*fae548d3Szrj // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21*fae548d3Szrj // MA 02110-1301, USA.
22*fae548d3Szrj 
23*fae548d3Szrj #include "gold.h"
24*fae548d3Szrj 
25*fae548d3Szrj #include "symtab.h"
26*fae548d3Szrj #include "layout.h"
27*fae548d3Szrj #include "defstd.h"
28*fae548d3Szrj 
29*fae548d3Szrj // This is a simple file which defines the standard symbols like
30*fae548d3Szrj // "_end".
31*fae548d3Szrj 
32*fae548d3Szrj namespace
33*fae548d3Szrj {
34*fae548d3Szrj 
35*fae548d3Szrj using namespace gold;
36*fae548d3Szrj 
37*fae548d3Szrj const Define_symbol_in_section in_section[] =
38*fae548d3Szrj {
39*fae548d3Szrj   {
40*fae548d3Szrj     "__preinit_array_start",	// name
41*fae548d3Szrj     ".preinit_array",		// output_section
42*fae548d3Szrj     0,				// value
43*fae548d3Szrj     0,				// size
44*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
45*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
46*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
47*fae548d3Szrj     0,				// nonvis
48*fae548d3Szrj     false,			// offset_is_from_end
49*fae548d3Szrj     true			// only_if_ref
50*fae548d3Szrj   },
51*fae548d3Szrj   {
52*fae548d3Szrj     "__preinit_array_end",	// name
53*fae548d3Szrj     ".preinit_array",		// output_section
54*fae548d3Szrj     0,				// value
55*fae548d3Szrj     0,				// size
56*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
57*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
58*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
59*fae548d3Szrj     0,				// nonvis
60*fae548d3Szrj     true,			// offset_is_from_end
61*fae548d3Szrj     true			// only_if_ref
62*fae548d3Szrj   },
63*fae548d3Szrj   {
64*fae548d3Szrj     "__init_array_start",	// name
65*fae548d3Szrj     ".init_array",		// output_section
66*fae548d3Szrj     0,				// value
67*fae548d3Szrj     0,				// size
68*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
69*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
70*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
71*fae548d3Szrj     0,				// nonvis
72*fae548d3Szrj     false,			// offset_is_from_end
73*fae548d3Szrj     true			// only_if_ref
74*fae548d3Szrj   },
75*fae548d3Szrj   {
76*fae548d3Szrj     "__init_array_end",		// name
77*fae548d3Szrj     ".init_array",		// output_section
78*fae548d3Szrj     0,				// value
79*fae548d3Szrj     0,				// size
80*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
81*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
82*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
83*fae548d3Szrj     0,				// nonvis
84*fae548d3Szrj     true,			// offset_is_from_end
85*fae548d3Szrj     true			// only_if_ref
86*fae548d3Szrj   },
87*fae548d3Szrj   {
88*fae548d3Szrj     "__fini_array_start",	// name
89*fae548d3Szrj     ".fini_array",		// output_section
90*fae548d3Szrj     0,				// value
91*fae548d3Szrj     0,				// size
92*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
93*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
94*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
95*fae548d3Szrj     0,				// nonvis
96*fae548d3Szrj     false,			// offset_is_from_end
97*fae548d3Szrj     true			// only_if_ref
98*fae548d3Szrj   },
99*fae548d3Szrj   {
100*fae548d3Szrj     "__fini_array_end",		// name
101*fae548d3Szrj     ".fini_array",		// output_section
102*fae548d3Szrj     0,				// value
103*fae548d3Szrj     0,				// size
104*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
105*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
106*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
107*fae548d3Szrj     0,				// nonvis
108*fae548d3Szrj     true,			// offset_is_from_end
109*fae548d3Szrj     true			// only_if_ref
110*fae548d3Szrj   },
111*fae548d3Szrj   {
112*fae548d3Szrj     "__stack",			// name
113*fae548d3Szrj     ".stack",			// output_section
114*fae548d3Szrj     0,				// value
115*fae548d3Szrj     0,				// size
116*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
117*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
118*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
119*fae548d3Szrj     0,				// nonvis
120*fae548d3Szrj     false,			// offset_is_from_end
121*fae548d3Szrj     true			// only_if_ref
122*fae548d3Szrj   },
123*fae548d3Szrj };
124*fae548d3Szrj 
125*fae548d3Szrj const int in_section_count = sizeof in_section / sizeof in_section[0];
126*fae548d3Szrj 
127*fae548d3Szrj const Define_symbol_in_segment in_segment[] =
128*fae548d3Szrj {
129*fae548d3Szrj   {
130*fae548d3Szrj     "__executable_start",	// name
131*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
132*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_set
133*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
134*fae548d3Szrj     0,				// value
135*fae548d3Szrj     0,				// size
136*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
137*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
138*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
139*fae548d3Szrj     0,				// nonvis
140*fae548d3Szrj     Symbol::SEGMENT_START,	// offset_from_base
141*fae548d3Szrj     true			// only_if_ref
142*fae548d3Szrj   },
143*fae548d3Szrj   {
144*fae548d3Szrj     "__ehdr_start",		// name
145*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
146*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_set
147*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
148*fae548d3Szrj     0,				// value
149*fae548d3Szrj     0,				// size
150*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
151*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
152*fae548d3Szrj     elfcpp::STV_HIDDEN,		// visibility
153*fae548d3Szrj     0,				// nonvis
154*fae548d3Szrj     Symbol::SEGMENT_START,	// offset_from_base
155*fae548d3Szrj     true			// only_if_ref
156*fae548d3Szrj   },
157*fae548d3Szrj   {
158*fae548d3Szrj     "etext",			// name
159*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
160*fae548d3Szrj     elfcpp::PF_X,		// segment_flags_set
161*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_clear
162*fae548d3Szrj     0,				// value
163*fae548d3Szrj     0,				// size
164*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
165*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
166*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
167*fae548d3Szrj     0,				// nonvis
168*fae548d3Szrj     Symbol::SEGMENT_END,	// offset_from_base
169*fae548d3Szrj     true			// only_if_ref
170*fae548d3Szrj   },
171*fae548d3Szrj   {
172*fae548d3Szrj     "_etext",			// name
173*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
174*fae548d3Szrj     elfcpp::PF_X,		// segment_flags_set
175*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_clear
176*fae548d3Szrj     0,				// value
177*fae548d3Szrj     0,				// size
178*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
179*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
180*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
181*fae548d3Szrj     0,				// nonvis
182*fae548d3Szrj     Symbol::SEGMENT_END,	// offset_from_base
183*fae548d3Szrj     true			// only_if_ref
184*fae548d3Szrj   },
185*fae548d3Szrj   {
186*fae548d3Szrj     "__etext",			// name
187*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
188*fae548d3Szrj     elfcpp::PF_X,		// segment_flags_set
189*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_clear
190*fae548d3Szrj     0,				// value
191*fae548d3Szrj     0,				// size
192*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
193*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
194*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
195*fae548d3Szrj     0,				// nonvis
196*fae548d3Szrj     Symbol::SEGMENT_END,	// offset_from_base
197*fae548d3Szrj     true			// only_if_ref
198*fae548d3Szrj   },
199*fae548d3Szrj   {
200*fae548d3Szrj     "_edata",			// name
201*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
202*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_set
203*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
204*fae548d3Szrj     0,				// value
205*fae548d3Szrj     0,				// size
206*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
207*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
208*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
209*fae548d3Szrj     0,				// nonvis
210*fae548d3Szrj     Symbol::SEGMENT_BSS,	// offset_from_base
211*fae548d3Szrj     false			// only_if_ref
212*fae548d3Szrj   },
213*fae548d3Szrj   {
214*fae548d3Szrj     "edata",			// name
215*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
216*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_set
217*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
218*fae548d3Szrj     0,				// value
219*fae548d3Szrj     0,				// size
220*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
221*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
222*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
223*fae548d3Szrj     0,				// nonvis
224*fae548d3Szrj     Symbol::SEGMENT_BSS,	// offset_from_base
225*fae548d3Szrj     true			// only_if_ref
226*fae548d3Szrj   },
227*fae548d3Szrj   {
228*fae548d3Szrj     "__bss_start",		// name
229*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
230*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_set
231*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
232*fae548d3Szrj     0,				// value
233*fae548d3Szrj     0,				// size
234*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
235*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
236*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
237*fae548d3Szrj     0,				// nonvis
238*fae548d3Szrj     Symbol::SEGMENT_BSS,	// offset_from_base
239*fae548d3Szrj     false			// only_if_ref
240*fae548d3Szrj   },
241*fae548d3Szrj   {
242*fae548d3Szrj     "_end",			// name
243*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
244*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_set
245*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
246*fae548d3Szrj     0,				// value
247*fae548d3Szrj     0,				// size
248*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
249*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
250*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
251*fae548d3Szrj     0,				// nonvis
252*fae548d3Szrj     Symbol::SEGMENT_END,	// offset_from_base
253*fae548d3Szrj     false			// only_if_ref
254*fae548d3Szrj   },
255*fae548d3Szrj   {
256*fae548d3Szrj     "end",			// name
257*fae548d3Szrj     elfcpp::PT_LOAD,		// segment_type
258*fae548d3Szrj     elfcpp::PF_W,		// segment_flags_set
259*fae548d3Szrj     elfcpp::PF(0),		// segment_flags_clear
260*fae548d3Szrj     0,				// value
261*fae548d3Szrj     0,				// size
262*fae548d3Szrj     elfcpp::STT_NOTYPE,		// type
263*fae548d3Szrj     elfcpp::STB_GLOBAL,		// binding
264*fae548d3Szrj     elfcpp::STV_DEFAULT,	// visibility
265*fae548d3Szrj     0,				// nonvis
266*fae548d3Szrj     Symbol::SEGMENT_END,	// offset_from_base
267*fae548d3Szrj     true			// only_if_ref
268*fae548d3Szrj   }
269*fae548d3Szrj };
270*fae548d3Szrj 
271*fae548d3Szrj const int in_segment_count = sizeof in_segment / sizeof in_segment[0];
272*fae548d3Szrj 
273*fae548d3Szrj } // End anonymous namespace.
274*fae548d3Szrj 
275*fae548d3Szrj namespace gold
276*fae548d3Szrj {
277*fae548d3Szrj 
278*fae548d3Szrj void
define_standard_symbols(Symbol_table * symtab,const Layout * layout)279*fae548d3Szrj define_standard_symbols(Symbol_table* symtab, const Layout* layout)
280*fae548d3Szrj {
281*fae548d3Szrj   bool saw_sections_clause = layout->script_options()->saw_sections_clause();
282*fae548d3Szrj   symtab->define_symbols(layout, in_section_count, in_section,
283*fae548d3Szrj 			 saw_sections_clause);
284*fae548d3Szrj   symtab->define_symbols(layout, in_segment_count, in_segment,
285*fae548d3Szrj 			 saw_sections_clause);
286*fae548d3Szrj }
287*fae548d3Szrj 
288*fae548d3Szrj } // End namespace gold.
289