1 /* linker.c -- BFD linker routines
2    Copyright (C) 1993-2021 Free Software Foundation, Inc.
3    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
4 
5    This file is part of BFD, the Binary File Descriptor library.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20    MA 02110-1301, USA.  */
21 
22 #include "sysdep.h"
23 #include "bfd.h"
24 #include "libbfd.h"
25 #include "bfdlink.h"
26 #include "genlink.h"
27 
28 /*
29 SECTION
30 	Linker Functions
31 
32 @cindex Linker
33 	The linker uses three special entry points in the BFD target
34 	vector.  It is not necessary to write special routines for
35 	these entry points when creating a new BFD back end, since
36 	generic versions are provided.  However, writing them can
37 	speed up linking and make it use significantly less runtime
38 	memory.
39 
40 	The first routine creates a hash table used by the other
41 	routines.  The second routine adds the symbols from an object
42 	file to the hash table.  The third routine takes all the
43 	object files and links them together to create the output
44 	file.  These routines are designed so that the linker proper
45 	does not need to know anything about the symbols in the object
46 	files that it is linking.  The linker merely arranges the
47 	sections as directed by the linker script and lets BFD handle
48 	the details of symbols and relocs.
49 
50 	The second routine and third routines are passed a pointer to
51 	a <<struct bfd_link_info>> structure (defined in
52 	<<bfdlink.h>>) which holds information relevant to the link,
53 	including the linker hash table (which was created by the
54 	first routine) and a set of callback functions to the linker
55 	proper.
56 
57 	The generic linker routines are in <<linker.c>>, and use the
58 	header file <<genlink.h>>.  As of this writing, the only back
59 	ends which have implemented versions of these routines are
60 	a.out (in <<aoutx.h>>) and ECOFF (in <<ecoff.c>>).  The a.out
61 	routines are used as examples throughout this section.
62 
63 @menu
64 @* Creating a Linker Hash Table::
65 @* Adding Symbols to the Hash Table::
66 @* Performing the Final Link::
67 @end menu
68 
69 INODE
70 Creating a Linker Hash Table, Adding Symbols to the Hash Table, Linker Functions, Linker Functions
71 SUBSECTION
72 	Creating a linker hash table
73 
74 @cindex _bfd_link_hash_table_create in target vector
75 @cindex target vector (_bfd_link_hash_table_create)
76 	The linker routines must create a hash table, which must be
77 	derived from <<struct bfd_link_hash_table>> described in
78 	<<bfdlink.c>>.  @xref{Hash Tables}, for information on how to
79 	create a derived hash table.  This entry point is called using
80 	the target vector of the linker output file.
81 
82 	The <<_bfd_link_hash_table_create>> entry point must allocate
83 	and initialize an instance of the desired hash table.  If the
84 	back end does not require any additional information to be
85 	stored with the entries in the hash table, the entry point may
86 	simply create a <<struct bfd_link_hash_table>>.  Most likely,
87 	however, some additional information will be needed.
88 
89 	For example, with each entry in the hash table the a.out
90 	linker keeps the index the symbol has in the final output file
91 	(this index number is used so that when doing a relocatable
92 	link the symbol index used in the output file can be quickly
93 	filled in when copying over a reloc).  The a.out linker code
94 	defines the required structures and functions for a hash table
95 	derived from <<struct bfd_link_hash_table>>.  The a.out linker
96 	hash table is created by the function
97 	<<NAME(aout,link_hash_table_create)>>; it simply allocates
98 	space for the hash table, initializes it, and returns a
99 	pointer to it.
100 
101 	When writing the linker routines for a new back end, you will
102 	generally not know exactly which fields will be required until
103 	you have finished.  You should simply create a new hash table
104 	which defines no additional fields, and then simply add fields
105 	as they become necessary.
106 
107 INODE
108 Adding Symbols to the Hash Table, Performing the Final Link, Creating a Linker Hash Table, Linker Functions
109 SUBSECTION
110 	Adding symbols to the hash table
111 
112 @cindex _bfd_link_add_symbols in target vector
113 @cindex target vector (_bfd_link_add_symbols)
114 	The linker proper will call the <<_bfd_link_add_symbols>>
115 	entry point for each object file or archive which is to be
116 	linked (typically these are the files named on the command
117 	line, but some may also come from the linker script).  The
118 	entry point is responsible for examining the file.  For an
119 	object file, BFD must add any relevant symbol information to
120 	the hash table.  For an archive, BFD must determine which
121 	elements of the archive should be used and adding them to the
122 	link.
123 
124 	The a.out version of this entry point is
125 	<<NAME(aout,link_add_symbols)>>.
126 
127 @menu
128 @* Differing file formats::
129 @* Adding symbols from an object file::
130 @* Adding symbols from an archive::
131 @end menu
132 
133 INODE
134 Differing file formats, Adding symbols from an object file, Adding Symbols to the Hash Table, Adding Symbols to the Hash Table
135 SUBSUBSECTION
136 	Differing file formats
137 
138 	Normally all the files involved in a link will be of the same
139 	format, but it is also possible to link together different
140 	format object files, and the back end must support that.  The
141 	<<_bfd_link_add_symbols>> entry point is called via the target
142 	vector of the file to be added.  This has an important
143 	consequence: the function may not assume that the hash table
144 	is the type created by the corresponding
145 	<<_bfd_link_hash_table_create>> vector.  All the
146 	<<_bfd_link_add_symbols>> function can assume about the hash
147 	table is that it is derived from <<struct
148 	bfd_link_hash_table>>.
149 
150 	Sometimes the <<_bfd_link_add_symbols>> function must store
151 	some information in the hash table entry to be used by the
152 	<<_bfd_final_link>> function.  In such a case the output bfd
153 	xvec must be checked to make sure that the hash table was
154 	created by an object file of the same format.
155 
156 	The <<_bfd_final_link>> routine must be prepared to handle a
157 	hash entry without any extra information added by the
158 	<<_bfd_link_add_symbols>> function.  A hash entry without
159 	extra information will also occur when the linker script
160 	directs the linker to create a symbol.  Note that, regardless
161 	of how a hash table entry is added, all the fields will be
162 	initialized to some sort of null value by the hash table entry
163 	initialization function.
164 
165 	See <<ecoff_link_add_externals>> for an example of how to
166 	check the output bfd before saving information (in this
167 	case, the ECOFF external symbol debugging information) in a
168 	hash table entry.
169 
170 INODE
171 Adding symbols from an object file, Adding symbols from an archive, Differing file formats, Adding Symbols to the Hash Table
172 SUBSUBSECTION
173 	Adding symbols from an object file
174 
175 	When the <<_bfd_link_add_symbols>> routine is passed an object
176 	file, it must add all externally visible symbols in that
177 	object file to the hash table.  The actual work of adding the
178 	symbol to the hash table is normally handled by the function
179 	<<_bfd_generic_link_add_one_symbol>>.  The
180 	<<_bfd_link_add_symbols>> routine is responsible for reading
181 	all the symbols from the object file and passing the correct
182 	information to <<_bfd_generic_link_add_one_symbol>>.
183 
184 	The <<_bfd_link_add_symbols>> routine should not use
185 	<<bfd_canonicalize_symtab>> to read the symbols.  The point of
186 	providing this routine is to avoid the overhead of converting
187 	the symbols into generic <<asymbol>> structures.
188 
189 @findex _bfd_generic_link_add_one_symbol
190 	<<_bfd_generic_link_add_one_symbol>> handles the details of
191 	combining common symbols, warning about multiple definitions,
192 	and so forth.  It takes arguments which describe the symbol to
193 	add, notably symbol flags, a section, and an offset.  The
194 	symbol flags include such things as <<BSF_WEAK>> or
195 	<<BSF_INDIRECT>>.  The section is a section in the object
196 	file, or something like <<bfd_und_section_ptr>> for an undefined
197 	symbol or <<bfd_com_section_ptr>> for a common symbol.
198 
199 	If the <<_bfd_final_link>> routine is also going to need to
200 	read the symbol information, the <<_bfd_link_add_symbols>>
201 	routine should save it somewhere attached to the object file
202 	BFD.  However, the information should only be saved if the
203 	<<keep_memory>> field of the <<info>> argument is TRUE, so
204 	that the <<-no-keep-memory>> linker switch is effective.
205 
206 	The a.out function which adds symbols from an object file is
207 	<<aout_link_add_object_symbols>>, and most of the interesting
208 	work is in <<aout_link_add_symbols>>.  The latter saves
209 	pointers to the hash tables entries created by
210 	<<_bfd_generic_link_add_one_symbol>> indexed by symbol number,
211 	so that the <<_bfd_final_link>> routine does not have to call
212 	the hash table lookup routine to locate the entry.
213 
214 INODE
215 Adding symbols from an archive, , Adding symbols from an object file, Adding Symbols to the Hash Table
216 SUBSUBSECTION
217 	Adding symbols from an archive
218 
219 	When the <<_bfd_link_add_symbols>> routine is passed an
220 	archive, it must look through the symbols defined by the
221 	archive and decide which elements of the archive should be
222 	included in the link.  For each such element it must call the
223 	<<add_archive_element>> linker callback, and it must add the
224 	symbols from the object file to the linker hash table.  (The
225 	callback may in fact indicate that a replacement BFD should be
226 	used, in which case the symbols from that BFD should be added
227 	to the linker hash table instead.)
228 
229 @findex _bfd_generic_link_add_archive_symbols
230 	In most cases the work of looking through the symbols in the
231 	archive should be done by the
232 	<<_bfd_generic_link_add_archive_symbols>> function.
233 	<<_bfd_generic_link_add_archive_symbols>> is passed a function
234 	to call to make the final decision about adding an archive
235 	element to the link and to do the actual work of adding the
236 	symbols to the linker hash table.  If the element is to
237 	be included, the <<add_archive_element>> linker callback
238 	routine must be called with the element as an argument, and
239 	the element's symbols must be added to the linker hash table
240 	just as though the element had itself been passed to the
241 	<<_bfd_link_add_symbols>> function.
242 
243 	When the a.out <<_bfd_link_add_symbols>> function receives an
244 	archive, it calls <<_bfd_generic_link_add_archive_symbols>>
245 	passing <<aout_link_check_archive_element>> as the function
246 	argument. <<aout_link_check_archive_element>> calls
247 	<<aout_link_check_ar_symbols>>.  If the latter decides to add
248 	the element (an element is only added if it provides a real,
249 	non-common, definition for a previously undefined or common
250 	symbol) it calls the <<add_archive_element>> callback and then
251 	<<aout_link_check_archive_element>> calls
252 	<<aout_link_add_symbols>> to actually add the symbols to the
253 	linker hash table - possibly those of a substitute BFD, if the
254 	<<add_archive_element>> callback avails itself of that option.
255 
256 	The ECOFF back end is unusual in that it does not normally
257 	call <<_bfd_generic_link_add_archive_symbols>>, because ECOFF
258 	archives already contain a hash table of symbols.  The ECOFF
259 	back end searches the archive itself to avoid the overhead of
260 	creating a new hash table.
261 
262 INODE
263 Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions
264 SUBSECTION
265 	Performing the final link
266 
267 @cindex _bfd_link_final_link in target vector
268 @cindex target vector (_bfd_final_link)
269 	When all the input files have been processed, the linker calls
270 	the <<_bfd_final_link>> entry point of the output BFD.  This
271 	routine is responsible for producing the final output file,
272 	which has several aspects.  It must relocate the contents of
273 	the input sections and copy the data into the output sections.
274 	It must build an output symbol table including any local
275 	symbols from the input files and the global symbols from the
276 	hash table.  When producing relocatable output, it must
277 	modify the input relocs and write them into the output file.
278 	There may also be object format dependent work to be done.
279 
280 	The linker will also call the <<write_object_contents>> entry
281 	point when the BFD is closed.  The two entry points must work
282 	together in order to produce the correct output file.
283 
284 	The details of how this works are inevitably dependent upon
285 	the specific object file format.  The a.out
286 	<<_bfd_final_link>> routine is <<NAME(aout,final_link)>>.
287 
288 @menu
289 @* Information provided by the linker::
290 @* Relocating the section contents::
291 @* Writing the symbol table::
292 @end menu
293 
294 INODE
295 Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link
296 SUBSUBSECTION
297 	Information provided by the linker
298 
299 	Before the linker calls the <<_bfd_final_link>> entry point,
300 	it sets up some data structures for the function to use.
301 
302 	The <<input_bfds>> field of the <<bfd_link_info>> structure
303 	will point to a list of all the input files included in the
304 	link.  These files are linked through the <<link.next>> field
305 	of the <<bfd>> structure.
306 
307 	Each section in the output file will have a list of
308 	<<link_order>> structures attached to the <<map_head.link_order>>
309 	field (the <<link_order>> structure is defined in
310 	<<bfdlink.h>>).  These structures describe how to create the
311 	contents of the output section in terms of the contents of
312 	various input sections, fill constants, and, eventually, other
313 	types of information.  They also describe relocs that must be
314 	created by the BFD backend, but do not correspond to any input
315 	file; this is used to support -Ur, which builds constructors
316 	while generating a relocatable object file.
317 
318 INODE
319 Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link
320 SUBSUBSECTION
321 	Relocating the section contents
322 
323 	The <<_bfd_final_link>> function should look through the
324 	<<link_order>> structures attached to each section of the
325 	output file.  Each <<link_order>> structure should either be
326 	handled specially, or it should be passed to the function
327 	<<_bfd_default_link_order>> which will do the right thing
328 	(<<_bfd_default_link_order>> is defined in <<linker.c>>).
329 
330 	For efficiency, a <<link_order>> of type
331 	<<bfd_indirect_link_order>> whose associated section belongs
332 	to a BFD of the same format as the output BFD must be handled
333 	specially.  This type of <<link_order>> describes part of an
334 	output section in terms of a section belonging to one of the
335 	input files.  The <<_bfd_final_link>> function should read the
336 	contents of the section and any associated relocs, apply the
337 	relocs to the section contents, and write out the modified
338 	section contents.  If performing a relocatable link, the
339 	relocs themselves must also be modified and written out.
340 
341 @findex _bfd_relocate_contents
342 @findex _bfd_final_link_relocate
343 	The functions <<_bfd_relocate_contents>> and
344 	<<_bfd_final_link_relocate>> provide some general support for
345 	performing the actual relocations, notably overflow checking.
346 	Their arguments include information about the symbol the
347 	relocation is against and a <<reloc_howto_type>> argument
348 	which describes the relocation to perform.  These functions
349 	are defined in <<reloc.c>>.
350 
351 	The a.out function which handles reading, relocating, and
352 	writing section contents is <<aout_link_input_section>>.  The
353 	actual relocation is done in <<aout_link_input_section_std>>
354 	and <<aout_link_input_section_ext>>.
355 
356 INODE
357 Writing the symbol table, , Relocating the section contents, Performing the Final Link
358 SUBSUBSECTION
359 	Writing the symbol table
360 
361 	The <<_bfd_final_link>> function must gather all the symbols
362 	in the input files and write them out.  It must also write out
363 	all the symbols in the global hash table.  This must be
364 	controlled by the <<strip>> and <<discard>> fields of the
365 	<<bfd_link_info>> structure.
366 
367 	The local symbols of the input files will not have been
368 	entered into the linker hash table.  The <<_bfd_final_link>>
369 	routine must consider each input file and include the symbols
370 	in the output file.  It may be convenient to do this when
371 	looking through the <<link_order>> structures, or it may be
372 	done by stepping through the <<input_bfds>> list.
373 
374 	The <<_bfd_final_link>> routine must also traverse the global
375 	hash table to gather all the externally visible symbols.  It
376 	is possible that most of the externally visible symbols may be
377 	written out when considering the symbols of each input file,
378 	but it is still necessary to traverse the hash table since the
379 	linker script may have defined some symbols that are not in
380 	any of the input files.
381 
382 	The <<strip>> field of the <<bfd_link_info>> structure
383 	controls which symbols are written out.  The possible values
384 	are listed in <<bfdlink.h>>.  If the value is <<strip_some>>,
385 	then the <<keep_hash>> field of the <<bfd_link_info>>
386 	structure is a hash table of symbols to keep; each symbol
387 	should be looked up in this hash table, and only symbols which
388 	are present should be included in the output file.
389 
390 	If the <<strip>> field of the <<bfd_link_info>> structure
391 	permits local symbols to be written out, the <<discard>> field
392 	is used to further controls which local symbols are included
393 	in the output file.  If the value is <<discard_l>>, then all
394 	local symbols which begin with a certain prefix are discarded;
395 	this is controlled by the <<bfd_is_local_label_name>> entry point.
396 
397 	The a.out backend handles symbols by calling
398 	<<aout_link_write_symbols>> on each input BFD and then
399 	traversing the global hash table with the function
400 	<<aout_link_write_other_symbol>>.  It builds a string table
401 	while writing out the symbols, which is written to the output
402 	file at the end of <<NAME(aout,final_link)>>.
403 */
404 
405 static bool generic_link_add_object_symbols
406   (bfd *, struct bfd_link_info *);
407 static bool generic_link_check_archive_element
408   (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
409    bool *);
410 static bool generic_link_add_symbol_list
411   (bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **);
412 static bool generic_add_output_symbol
413   (bfd *, size_t *psymalloc, asymbol *);
414 static bool default_data_link_order
415   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
416 static bool default_indirect_link_order
417   (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *,
418    bool);
419 
420 /* The link hash table structure is defined in bfdlink.h.  It provides
421    a base hash table which the backend specific hash tables are built
422    upon.  */
423 
424 /* Routine to create an entry in the link hash table.  */
425 
426 struct bfd_hash_entry *
_bfd_link_hash_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table,const char * string)427 _bfd_link_hash_newfunc (struct bfd_hash_entry *entry,
428 			struct bfd_hash_table *table,
429 			const char *string)
430 {
431   /* Allocate the structure if it has not already been allocated by a
432      subclass.  */
433   if (entry == NULL)
434     {
435       entry = (struct bfd_hash_entry *)
436 	  bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry));
437       if (entry == NULL)
438 	return entry;
439     }
440 
441   /* Call the allocation method of the superclass.  */
442   entry = bfd_hash_newfunc (entry, table, string);
443   if (entry)
444     {
445       struct bfd_link_hash_entry *h = (struct bfd_link_hash_entry *) entry;
446 
447       /* Initialize the local fields.  */
448       memset ((char *) &h->root + sizeof (h->root), 0,
449 	      sizeof (*h) - sizeof (h->root));
450     }
451 
452   return entry;
453 }
454 
455 /* Initialize a link hash table.  The BFD argument is the one
456    responsible for creating this table.  */
457 
458 bool
_bfd_link_hash_table_init(struct bfd_link_hash_table * table,bfd * abfd ATTRIBUTE_UNUSED,struct bfd_hash_entry * (* newfunc)(struct bfd_hash_entry *,struct bfd_hash_table *,const char *),unsigned int entsize)459 _bfd_link_hash_table_init
460   (struct bfd_link_hash_table *table,
461    bfd *abfd ATTRIBUTE_UNUSED,
462    struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
463 				      struct bfd_hash_table *,
464 				      const char *),
465    unsigned int entsize)
466 {
467   bool ret;
468 
469   BFD_ASSERT (!abfd->is_linker_output && !abfd->link.hash);
470   table->undefs = NULL;
471   table->undefs_tail = NULL;
472   table->type = bfd_link_generic_hash_table;
473 
474   ret = bfd_hash_table_init (&table->table, newfunc, entsize);
475   if (ret)
476     {
477       /* Arrange for destruction of this hash table on closing ABFD.  */
478       table->hash_table_free = _bfd_generic_link_hash_table_free;
479       abfd->link.hash = table;
480       abfd->is_linker_output = true;
481     }
482   return ret;
483 }
484 
485 /* Look up a symbol in a link hash table.  If follow is TRUE, we
486    follow bfd_link_hash_indirect and bfd_link_hash_warning links to
487    the real symbol.
488 
489 .{* Return TRUE if the symbol described by a linker hash entry H
490 .   is going to be absolute.  Linker-script defined symbols can be
491 .   converted from absolute to section-relative ones late in the
492 .   link.  Use this macro to correctly determine whether the symbol
493 .   will actually end up absolute in output.  *}
494 .#define bfd_is_abs_symbol(H) \
495 .  (((H)->type == bfd_link_hash_defined \
496 .    || (H)->type == bfd_link_hash_defweak) \
497 .   && bfd_is_abs_section ((H)->u.def.section) \
498 .   && !(H)->rel_from_abs)
499 .
500 */
501 
502 struct bfd_link_hash_entry *
bfd_link_hash_lookup(struct bfd_link_hash_table * table,const char * string,bool create,bool copy,bool follow)503 bfd_link_hash_lookup (struct bfd_link_hash_table *table,
504 		      const char *string,
505 		      bool create,
506 		      bool copy,
507 		      bool follow)
508 {
509   struct bfd_link_hash_entry *ret;
510 
511   if (table == NULL || string == NULL)
512     return NULL;
513 
514   ret = ((struct bfd_link_hash_entry *)
515 	 bfd_hash_lookup (&table->table, string, create, copy));
516 
517   if (follow && ret != NULL)
518     {
519       while (ret->type == bfd_link_hash_indirect
520 	     || ret->type == bfd_link_hash_warning)
521 	ret = ret->u.i.link;
522     }
523 
524   return ret;
525 }
526 
527 /* Look up a symbol in the main linker hash table if the symbol might
528    be wrapped.  This should only be used for references to an
529    undefined symbol, not for definitions of a symbol.  */
530 
531 struct bfd_link_hash_entry *
bfd_wrapped_link_hash_lookup(bfd * abfd,struct bfd_link_info * info,const char * string,bool create,bool copy,bool follow)532 bfd_wrapped_link_hash_lookup (bfd *abfd,
533 			      struct bfd_link_info *info,
534 			      const char *string,
535 			      bool create,
536 			      bool copy,
537 			      bool follow)
538 {
539   size_t amt;
540 
541   if (info->wrap_hash != NULL)
542     {
543       const char *l;
544       char prefix = '\0';
545 
546       l = string;
547       if (*l == bfd_get_symbol_leading_char (abfd) || *l == info->wrap_char)
548 	{
549 	  prefix = *l;
550 	  ++l;
551 	}
552 
553 #undef WRAP
554 #define WRAP "__wrap_"
555 
556       if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL)
557 	{
558 	  char *n;
559 	  struct bfd_link_hash_entry *h;
560 
561 	  /* This symbol is being wrapped.  We want to replace all
562 	     references to SYM with references to __wrap_SYM.  */
563 
564 	  amt = strlen (l) + sizeof WRAP + 1;
565 	  n = (char *) bfd_malloc (amt);
566 	  if (n == NULL)
567 	    return NULL;
568 
569 	  n[0] = prefix;
570 	  n[1] = '\0';
571 	  strcat (n, WRAP);
572 	  strcat (n, l);
573 	  h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
574 	  free (n);
575 	  return h;
576 	}
577 
578 #undef  REAL
579 #define REAL "__real_"
580 
581       if (*l == '_'
582 	  && startswith (l, REAL)
583 	  && bfd_hash_lookup (info->wrap_hash, l + sizeof REAL - 1,
584 			      false, false) != NULL)
585 	{
586 	  char *n;
587 	  struct bfd_link_hash_entry *h;
588 
589 	  /* This is a reference to __real_SYM, where SYM is being
590 	     wrapped.  We want to replace all references to __real_SYM
591 	     with references to SYM.  */
592 
593 	  amt = strlen (l + sizeof REAL - 1) + 2;
594 	  n = (char *) bfd_malloc (amt);
595 	  if (n == NULL)
596 	    return NULL;
597 
598 	  n[0] = prefix;
599 	  n[1] = '\0';
600 	  strcat (n, l + sizeof REAL - 1);
601 	  h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
602 	  free (n);
603 	  return h;
604 	}
605 
606 #undef REAL
607     }
608 
609   return bfd_link_hash_lookup (info->hash, string, create, copy, follow);
610 }
611 
612 /* If H is a wrapped symbol, ie. the symbol name starts with "__wrap_"
613    and the remainder is found in wrap_hash, return the real symbol.  */
614 
615 struct bfd_link_hash_entry *
unwrap_hash_lookup(struct bfd_link_info * info,bfd * input_bfd,struct bfd_link_hash_entry * h)616 unwrap_hash_lookup (struct bfd_link_info *info,
617 		    bfd *input_bfd,
618 		    struct bfd_link_hash_entry *h)
619 {
620   const char *l = h->root.string;
621 
622   if (*l == bfd_get_symbol_leading_char (input_bfd)
623       || *l == info->wrap_char)
624     ++l;
625 
626   if (startswith (l, WRAP))
627     {
628       l += sizeof WRAP - 1;
629 
630       if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL)
631 	{
632 	  char save = 0;
633 	  if (l - (sizeof WRAP - 1) != h->root.string)
634 	    {
635 	      --l;
636 	      save = *l;
637 	      *(char *) l = *h->root.string;
638 	    }
639 	  h = bfd_link_hash_lookup (info->hash, l, false, false, false);
640 	  if (save)
641 	    *(char *) l = save;
642 	}
643     }
644   return h;
645 }
646 #undef WRAP
647 
648 /* Traverse a generic link hash table.  Differs from bfd_hash_traverse
649    in the treatment of warning symbols.  When warning symbols are
650    created they replace the real symbol, so you don't get to see the
651    real symbol in a bfd_hash_traverse.  This traversal calls func with
652    the real symbol.  */
653 
654 void
bfd_link_hash_traverse(struct bfd_link_hash_table * htab,bool (* func)(struct bfd_link_hash_entry *,void *),void * info)655 bfd_link_hash_traverse
656   (struct bfd_link_hash_table *htab,
657    bool (*func) (struct bfd_link_hash_entry *, void *),
658    void *info)
659 {
660   unsigned int i;
661 
662   htab->table.frozen = 1;
663   for (i = 0; i < htab->table.size; i++)
664     {
665       struct bfd_link_hash_entry *p;
666 
667       p = (struct bfd_link_hash_entry *) htab->table.table[i];
668       for (; p != NULL; p = (struct bfd_link_hash_entry *) p->root.next)
669 	if (!(*func) (p->type == bfd_link_hash_warning ? p->u.i.link : p, info))
670 	  goto out;
671     }
672  out:
673   htab->table.frozen = 0;
674 }
675 
676 /* Add a symbol to the linker hash table undefs list.  */
677 
678 void
bfd_link_add_undef(struct bfd_link_hash_table * table,struct bfd_link_hash_entry * h)679 bfd_link_add_undef (struct bfd_link_hash_table *table,
680 		    struct bfd_link_hash_entry *h)
681 {
682   BFD_ASSERT (h->u.undef.next == NULL);
683   if (table->undefs_tail != NULL)
684     table->undefs_tail->u.undef.next = h;
685   if (table->undefs == NULL)
686     table->undefs = h;
687   table->undefs_tail = h;
688 }
689 
690 /* The undefs list was designed so that in normal use we don't need to
691    remove entries.  However, if symbols on the list are changed from
692    bfd_link_hash_undefined to either bfd_link_hash_undefweak or
693    bfd_link_hash_new for some reason, then they must be removed from the
694    list.  Failure to do so might result in the linker attempting to add
695    the symbol to the list again at a later stage.  */
696 
697 void
bfd_link_repair_undef_list(struct bfd_link_hash_table * table)698 bfd_link_repair_undef_list (struct bfd_link_hash_table *table)
699 {
700   struct bfd_link_hash_entry **pun;
701 
702   pun = &table->undefs;
703   while (*pun != NULL)
704     {
705       struct bfd_link_hash_entry *h = *pun;
706 
707       if (h->type == bfd_link_hash_new
708 	  || h->type == bfd_link_hash_undefweak)
709 	{
710 	  *pun = h->u.undef.next;
711 	  h->u.undef.next = NULL;
712 	  if (h == table->undefs_tail)
713 	    {
714 	      if (pun == &table->undefs)
715 		table->undefs_tail = NULL;
716 	      else
717 		/* pun points at an u.undef.next field.  Go back to
718 		   the start of the link_hash_entry.  */
719 		table->undefs_tail = (struct bfd_link_hash_entry *)
720 		  ((char *) pun - ((char *) &h->u.undef.next - (char *) h));
721 	      break;
722 	    }
723 	}
724       else
725 	pun = &h->u.undef.next;
726     }
727 }
728 
729 /* Routine to create an entry in a generic link hash table.  */
730 
731 struct bfd_hash_entry *
_bfd_generic_link_hash_newfunc(struct bfd_hash_entry * entry,struct bfd_hash_table * table,const char * string)732 _bfd_generic_link_hash_newfunc (struct bfd_hash_entry *entry,
733 				struct bfd_hash_table *table,
734 				const char *string)
735 {
736   /* Allocate the structure if it has not already been allocated by a
737      subclass.  */
738   if (entry == NULL)
739     {
740       entry = (struct bfd_hash_entry *)
741 	bfd_hash_allocate (table, sizeof (struct generic_link_hash_entry));
742       if (entry == NULL)
743 	return entry;
744     }
745 
746   /* Call the allocation method of the superclass.  */
747   entry = _bfd_link_hash_newfunc (entry, table, string);
748   if (entry)
749     {
750       struct generic_link_hash_entry *ret;
751 
752       /* Set local fields.  */
753       ret = (struct generic_link_hash_entry *) entry;
754       ret->written = false;
755       ret->sym = NULL;
756     }
757 
758   return entry;
759 }
760 
761 /* Create a generic link hash table.  */
762 
763 struct bfd_link_hash_table *
_bfd_generic_link_hash_table_create(bfd * abfd)764 _bfd_generic_link_hash_table_create (bfd *abfd)
765 {
766   struct generic_link_hash_table *ret;
767   size_t amt = sizeof (struct generic_link_hash_table);
768 
769   ret = (struct generic_link_hash_table *) bfd_malloc (amt);
770   if (ret == NULL)
771     return NULL;
772   if (! _bfd_link_hash_table_init (&ret->root, abfd,
773 				   _bfd_generic_link_hash_newfunc,
774 				   sizeof (struct generic_link_hash_entry)))
775     {
776       free (ret);
777       return NULL;
778     }
779   return &ret->root;
780 }
781 
782 void
_bfd_generic_link_hash_table_free(bfd * obfd)783 _bfd_generic_link_hash_table_free (bfd *obfd)
784 {
785   struct generic_link_hash_table *ret;
786 
787   BFD_ASSERT (obfd->is_linker_output && obfd->link.hash);
788   ret = (struct generic_link_hash_table *) obfd->link.hash;
789   bfd_hash_table_free (&ret->root.table);
790   free (ret);
791   obfd->link.hash = NULL;
792   obfd->is_linker_output = false;
793 }
794 
795 /* Grab the symbols for an object file when doing a generic link.  We
796    store the symbols in the outsymbols field.  We need to keep them
797    around for the entire link to ensure that we only read them once.
798    If we read them multiple times, we might wind up with relocs and
799    the hash table pointing to different instances of the symbol
800    structure.  */
801 
802 bool
bfd_generic_link_read_symbols(bfd * abfd)803 bfd_generic_link_read_symbols (bfd *abfd)
804 {
805   if (bfd_get_outsymbols (abfd) == NULL)
806     {
807       long symsize;
808       long symcount;
809 
810       symsize = bfd_get_symtab_upper_bound (abfd);
811       if (symsize < 0)
812 	return false;
813       abfd->outsymbols = bfd_alloc (abfd, symsize);
814       if (bfd_get_outsymbols (abfd) == NULL && symsize != 0)
815 	return false;
816       symcount = bfd_canonicalize_symtab (abfd, bfd_get_outsymbols (abfd));
817       if (symcount < 0)
818 	return false;
819       abfd->symcount = symcount;
820     }
821 
822   return true;
823 }
824 
825 /* Indicate that we are only retrieving symbol values from this
826    section.  We want the symbols to act as though the values in the
827    file are absolute.  */
828 
829 void
_bfd_generic_link_just_syms(asection * sec,struct bfd_link_info * info ATTRIBUTE_UNUSED)830 _bfd_generic_link_just_syms (asection *sec,
831 			     struct bfd_link_info *info ATTRIBUTE_UNUSED)
832 {
833   sec->sec_info_type = SEC_INFO_TYPE_JUST_SYMS;
834   sec->output_section = bfd_abs_section_ptr;
835   sec->output_offset = sec->vma;
836 }
837 
838 /* Copy the symbol type and other attributes for a linker script
839    assignment from HSRC to HDEST.
840    The default implementation does nothing.  */
841 void
_bfd_generic_copy_link_hash_symbol_type(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * hdest ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * hsrc ATTRIBUTE_UNUSED)842 _bfd_generic_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
843     struct bfd_link_hash_entry *hdest ATTRIBUTE_UNUSED,
844     struct bfd_link_hash_entry *hsrc ATTRIBUTE_UNUSED)
845 {
846 }
847 
848 /* Generic function to add symbols from an object file to the
849    global hash table.  */
850 
851 bool
_bfd_generic_link_add_symbols(bfd * abfd,struct bfd_link_info * info)852 _bfd_generic_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
853 {
854   bool ret;
855 
856   switch (bfd_get_format (abfd))
857     {
858     case bfd_object:
859       ret = generic_link_add_object_symbols (abfd, info);
860       break;
861     case bfd_archive:
862       ret = (_bfd_generic_link_add_archive_symbols
863 	     (abfd, info, generic_link_check_archive_element));
864       break;
865     default:
866       bfd_set_error (bfd_error_wrong_format);
867       ret = false;
868     }
869 
870   return ret;
871 }
872 
873 /* Add symbols from an object file to the global hash table.  */
874 
875 static bool
generic_link_add_object_symbols(bfd * abfd,struct bfd_link_info * info)876 generic_link_add_object_symbols (bfd *abfd,
877 				 struct bfd_link_info *info)
878 {
879   bfd_size_type symcount;
880   struct bfd_symbol **outsyms;
881 
882   if (!bfd_generic_link_read_symbols (abfd))
883     return false;
884   symcount = _bfd_generic_link_get_symcount (abfd);
885   outsyms = _bfd_generic_link_get_symbols (abfd);
886   return generic_link_add_symbol_list (abfd, info, symcount, outsyms);
887 }
888 
889 /* Generic function to add symbols from an archive file to the global
890    hash file.  This function presumes that the archive symbol table
891    has already been read in (this is normally done by the
892    bfd_check_format entry point).  It looks through the archive symbol
893    table for symbols that are undefined or common in the linker global
894    symbol hash table.  When one is found, the CHECKFN argument is used
895    to see if an object file should be included.  This allows targets
896    to customize common symbol behaviour.  CHECKFN should set *PNEEDED
897    to TRUE if the object file should be included, and must also call
898    the bfd_link_info add_archive_element callback function and handle
899    adding the symbols to the global hash table.  CHECKFN must notice
900    if the callback indicates a substitute BFD, and arrange to add
901    those symbols instead if it does so.  CHECKFN should only return
902    FALSE if some sort of error occurs.  */
903 
904 bool
_bfd_generic_link_add_archive_symbols(bfd * abfd,struct bfd_link_info * info,bool (* checkfn)(bfd *,struct bfd_link_info *,struct bfd_link_hash_entry *,const char *,bool *))905 _bfd_generic_link_add_archive_symbols
906   (bfd *abfd,
907    struct bfd_link_info *info,
908    bool (*checkfn) (bfd *, struct bfd_link_info *,
909 		    struct bfd_link_hash_entry *, const char *, bool *))
910 {
911   bool loop;
912   bfd_size_type amt;
913   unsigned char *included;
914 
915   if (! bfd_has_map (abfd))
916     {
917       /* An empty archive is a special case.  */
918       if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
919 	return true;
920       bfd_set_error (bfd_error_no_armap);
921       return false;
922     }
923 
924   amt = bfd_ardata (abfd)->symdef_count;
925   if (amt == 0)
926     return true;
927   amt *= sizeof (*included);
928   included = (unsigned char *) bfd_zmalloc (amt);
929   if (included == NULL)
930     return false;
931 
932   do
933     {
934       carsym *arsyms;
935       carsym *arsym_end;
936       carsym *arsym;
937       unsigned int indx;
938       file_ptr last_ar_offset = -1;
939       bool needed = false;
940       bfd *element = NULL;
941 
942       loop = false;
943       arsyms = bfd_ardata (abfd)->symdefs;
944       arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
945       for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
946 	{
947 	  struct bfd_link_hash_entry *h;
948 	  struct bfd_link_hash_entry *undefs_tail;
949 
950 	  if (included[indx])
951 	    continue;
952 	  if (needed && arsym->file_offset == last_ar_offset)
953 	    {
954 	      included[indx] = 1;
955 	      continue;
956 	    }
957 
958 	  if (arsym->name == NULL)
959 	    goto error_return;
960 
961 	  h = bfd_link_hash_lookup (info->hash, arsym->name,
962 				    false, false, true);
963 
964 	  if (h == NULL
965 	      && info->pei386_auto_import
966 	      && startswith (arsym->name, "__imp_"))
967 	    h = bfd_link_hash_lookup (info->hash, arsym->name + 6,
968 				      false, false, true);
969 	  if (h == NULL)
970 	    continue;
971 
972 	  if (h->type != bfd_link_hash_undefined
973 	      && h->type != bfd_link_hash_common)
974 	    {
975 	      if (h->type != bfd_link_hash_undefweak)
976 		/* Symbol must be defined.  Don't check it again.  */
977 		included[indx] = 1;
978 	      continue;
979 	    }
980 
981 	  if (last_ar_offset != arsym->file_offset)
982 	    {
983 	      last_ar_offset = arsym->file_offset;
984 	      element = _bfd_get_elt_at_filepos (abfd, last_ar_offset);
985 	      if (element == NULL
986 		  || !bfd_check_format (element, bfd_object))
987 		goto error_return;
988 	    }
989 
990 	  undefs_tail = info->hash->undefs_tail;
991 
992 	  /* CHECKFN will see if this element should be included, and
993 	     go ahead and include it if appropriate.  */
994 	  if (! (*checkfn) (element, info, h, arsym->name, &needed))
995 	    goto error_return;
996 
997 	  if (needed)
998 	    {
999 	      unsigned int mark;
1000 
1001 	      /* Look backward to mark all symbols from this object file
1002 		 which we have already seen in this pass.  */
1003 	      mark = indx;
1004 	      do
1005 		{
1006 		  included[mark] = 1;
1007 		  if (mark == 0)
1008 		    break;
1009 		  --mark;
1010 		}
1011 	      while (arsyms[mark].file_offset == last_ar_offset);
1012 
1013 	      if (undefs_tail != info->hash->undefs_tail)
1014 		loop = true;
1015 	    }
1016 	}
1017     } while (loop);
1018 
1019   free (included);
1020   return true;
1021 
1022  error_return:
1023   free (included);
1024   return false;
1025 }
1026 
1027 /* See if we should include an archive element.  */
1028 
1029 static bool
generic_link_check_archive_element(bfd * abfd,struct bfd_link_info * info,struct bfd_link_hash_entry * h,const char * name ATTRIBUTE_UNUSED,bool * pneeded)1030 generic_link_check_archive_element (bfd *abfd,
1031 				    struct bfd_link_info *info,
1032 				    struct bfd_link_hash_entry *h,
1033 				    const char *name ATTRIBUTE_UNUSED,
1034 				    bool *pneeded)
1035 {
1036   asymbol **pp, **ppend;
1037 
1038   *pneeded = false;
1039 
1040   if (!bfd_generic_link_read_symbols (abfd))
1041     return false;
1042 
1043   pp = _bfd_generic_link_get_symbols (abfd);
1044   ppend = pp + _bfd_generic_link_get_symcount (abfd);
1045   for (; pp < ppend; pp++)
1046     {
1047       asymbol *p;
1048 
1049       p = *pp;
1050 
1051       /* We are only interested in globally visible symbols.  */
1052       if (! bfd_is_com_section (p->section)
1053 	  && (p->flags & (BSF_GLOBAL | BSF_INDIRECT | BSF_WEAK)) == 0)
1054 	continue;
1055 
1056       /* We are only interested if we know something about this
1057 	 symbol, and it is undefined or common.  An undefined weak
1058 	 symbol (type bfd_link_hash_undefweak) is not considered to be
1059 	 a reference when pulling files out of an archive.  See the
1060 	 SVR4 ABI, p. 4-27.  */
1061       h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), false,
1062 				false, true);
1063       if (h == NULL
1064 	  || (h->type != bfd_link_hash_undefined
1065 	      && h->type != bfd_link_hash_common))
1066 	continue;
1067 
1068       /* P is a symbol we are looking for.  */
1069 
1070       if (! bfd_is_com_section (p->section)
1071 	  || (h->type == bfd_link_hash_undefined
1072 	      && h->u.undef.abfd == NULL))
1073 	{
1074 	  /* P is not a common symbol, or an undefined reference was
1075 	     created from outside BFD such as from a linker -u option.
1076 	     This object file defines the symbol, so pull it in.  */
1077 	  *pneeded = true;
1078 	  if (!(*info->callbacks
1079 		->add_archive_element) (info, abfd, bfd_asymbol_name (p),
1080 					&abfd))
1081 	    return false;
1082 	  /* Potentially, the add_archive_element hook may have set a
1083 	     substitute BFD for us.  */
1084 	  return bfd_link_add_symbols (abfd, info);
1085 	}
1086 
1087       /* P is a common symbol.  */
1088 
1089       if (h->type == bfd_link_hash_undefined)
1090 	{
1091 	  bfd *symbfd;
1092 	  bfd_vma size;
1093 	  unsigned int power;
1094 
1095 	  /* Turn the symbol into a common symbol but do not link in
1096 	     the object file.  This is how a.out works.  Object
1097 	     formats that require different semantics must implement
1098 	     this function differently.  This symbol is already on the
1099 	     undefs list.  We add the section to a common section
1100 	     attached to symbfd to ensure that it is in a BFD which
1101 	     will be linked in.  */
1102 	  symbfd = h->u.undef.abfd;
1103 	  h->type = bfd_link_hash_common;
1104 	  h->u.c.p = (struct bfd_link_hash_common_entry *)
1105 	    bfd_hash_allocate (&info->hash->table,
1106 			       sizeof (struct bfd_link_hash_common_entry));
1107 	  if (h->u.c.p == NULL)
1108 	    return false;
1109 
1110 	  size = bfd_asymbol_value (p);
1111 	  h->u.c.size = size;
1112 
1113 	  power = bfd_log2 (size);
1114 	  if (power > 4)
1115 	    power = 4;
1116 	  h->u.c.p->alignment_power = power;
1117 
1118 	  if (p->section == bfd_com_section_ptr)
1119 	    h->u.c.p->section = bfd_make_section_old_way (symbfd, "COMMON");
1120 	  else
1121 	    h->u.c.p->section = bfd_make_section_old_way (symbfd,
1122 							  p->section->name);
1123 	  h->u.c.p->section->flags |= SEC_ALLOC;
1124 	}
1125       else
1126 	{
1127 	  /* Adjust the size of the common symbol if necessary.  This
1128 	     is how a.out works.  Object formats that require
1129 	     different semantics must implement this function
1130 	     differently.  */
1131 	  if (bfd_asymbol_value (p) > h->u.c.size)
1132 	    h->u.c.size = bfd_asymbol_value (p);
1133 	}
1134     }
1135 
1136   /* This archive element is not needed.  */
1137   return true;
1138 }
1139 
1140 /* Add the symbols from an object file to the global hash table.  ABFD
1141    is the object file.  INFO is the linker information.  SYMBOL_COUNT
1142    is the number of symbols.  SYMBOLS is the list of symbols.  */
1143 
1144 static bool
generic_link_add_symbol_list(bfd * abfd,struct bfd_link_info * info,bfd_size_type symbol_count,asymbol ** symbols)1145 generic_link_add_symbol_list (bfd *abfd,
1146 			      struct bfd_link_info *info,
1147 			      bfd_size_type symbol_count,
1148 			      asymbol **symbols)
1149 {
1150   asymbol **pp, **ppend;
1151 
1152   pp = symbols;
1153   ppend = symbols + symbol_count;
1154   for (; pp < ppend; pp++)
1155     {
1156       asymbol *p;
1157 
1158       p = *pp;
1159 
1160       if ((p->flags & (BSF_INDIRECT
1161 		       | BSF_WARNING
1162 		       | BSF_GLOBAL
1163 		       | BSF_CONSTRUCTOR
1164 		       | BSF_WEAK)) != 0
1165 	  || bfd_is_und_section (bfd_asymbol_section (p))
1166 	  || bfd_is_com_section (bfd_asymbol_section (p))
1167 	  || bfd_is_ind_section (bfd_asymbol_section (p)))
1168 	{
1169 	  const char *name;
1170 	  const char *string;
1171 	  struct generic_link_hash_entry *h;
1172 	  struct bfd_link_hash_entry *bh;
1173 
1174 	  string = name = bfd_asymbol_name (p);
1175 	  if (((p->flags & BSF_INDIRECT) != 0
1176 	       || bfd_is_ind_section (p->section))
1177 	      && pp + 1 < ppend)
1178 	    {
1179 	      pp++;
1180 	      string = bfd_asymbol_name (*pp);
1181 	    }
1182 	  else if ((p->flags & BSF_WARNING) != 0
1183 		   && pp + 1 < ppend)
1184 	    {
1185 	      /* The name of P is actually the warning string, and the
1186 		 next symbol is the one to warn about.  */
1187 	      pp++;
1188 	      name = bfd_asymbol_name (*pp);
1189 	    }
1190 
1191 	  bh = NULL;
1192 	  if (! (_bfd_generic_link_add_one_symbol
1193 		 (info, abfd, name, p->flags, bfd_asymbol_section (p),
1194 		  p->value, string, false, false, &bh)))
1195 	    return false;
1196 	  h = (struct generic_link_hash_entry *) bh;
1197 
1198 	  /* If this is a constructor symbol, and the linker didn't do
1199 	     anything with it, then we want to just pass the symbol
1200 	     through to the output file.  This will happen when
1201 	     linking with -r.  */
1202 	  if ((p->flags & BSF_CONSTRUCTOR) != 0
1203 	      && (h == NULL || h->root.type == bfd_link_hash_new))
1204 	    {
1205 	      p->udata.p = NULL;
1206 	      continue;
1207 	    }
1208 
1209 	  /* Save the BFD symbol so that we don't lose any backend
1210 	     specific information that may be attached to it.  We only
1211 	     want this one if it gives more information than the
1212 	     existing one; we don't want to replace a defined symbol
1213 	     with an undefined one.  This routine may be called with a
1214 	     hash table other than the generic hash table, so we only
1215 	     do this if we are certain that the hash table is a
1216 	     generic one.  */
1217 	  if (info->output_bfd->xvec == abfd->xvec)
1218 	    {
1219 	      if (h->sym == NULL
1220 		  || (! bfd_is_und_section (bfd_asymbol_section (p))
1221 		      && (! bfd_is_com_section (bfd_asymbol_section (p))
1222 			  || bfd_is_und_section (bfd_asymbol_section (h->sym)))))
1223 		{
1224 		  h->sym = p;
1225 		  /* BSF_OLD_COMMON is a hack to support COFF reloc
1226 		     reading, and it should go away when the COFF
1227 		     linker is switched to the new version.  */
1228 		  if (bfd_is_com_section (bfd_asymbol_section (p)))
1229 		    p->flags |= BSF_OLD_COMMON;
1230 		}
1231 	    }
1232 
1233 	  /* Store a back pointer from the symbol to the hash
1234 	     table entry for the benefit of relaxation code until
1235 	     it gets rewritten to not use asymbol structures.
1236 	     Setting this is also used to check whether these
1237 	     symbols were set up by the generic linker.  */
1238 	  p->udata.p = h;
1239 	}
1240     }
1241 
1242   return true;
1243 }
1244 
1245 /* We use a state table to deal with adding symbols from an object
1246    file.  The first index into the state table describes the symbol
1247    from the object file.  The second index into the state table is the
1248    type of the symbol in the hash table.  */
1249 
1250 /* The symbol from the object file is turned into one of these row
1251    values.  */
1252 
1253 enum link_row
1254 {
1255   UNDEF_ROW,		/* Undefined.  */
1256   UNDEFW_ROW,		/* Weak undefined.  */
1257   DEF_ROW,		/* Defined.  */
1258   DEFW_ROW,		/* Weak defined.  */
1259   COMMON_ROW,		/* Common.  */
1260   INDR_ROW,		/* Indirect.  */
1261   WARN_ROW,		/* Warning.  */
1262   SET_ROW		/* Member of set.  */
1263 };
1264 
1265 /* apparently needed for Hitachi 3050R(HI-UX/WE2)? */
1266 #undef FAIL
1267 
1268 /* The actions to take in the state table.  */
1269 
1270 enum link_action
1271 {
1272   FAIL,		/* Abort.  */
1273   UND,		/* Mark symbol undefined.  */
1274   WEAK,		/* Mark symbol weak undefined.  */
1275   DEF,		/* Mark symbol defined.  */
1276   DEFW,		/* Mark symbol weak defined.  */
1277   COM,		/* Mark symbol common.  */
1278   REF,		/* Mark defined symbol referenced.  */
1279   CREF,		/* Possibly warn about common reference to defined symbol.  */
1280   CDEF,		/* Define existing common symbol.  */
1281   NOACT,	/* No action.  */
1282   BIG,		/* Mark symbol common using largest size.  */
1283   MDEF,		/* Multiple definition error.  */
1284   MIND,		/* Multiple indirect symbols.  */
1285   IND,		/* Make indirect symbol.  */
1286   CIND,		/* Make indirect symbol from existing common symbol.  */
1287   SET,		/* Add value to set.  */
1288   MWARN,	/* Make warning symbol.  */
1289   WARN,		/* Warn if referenced, else MWARN.  */
1290   CYCLE,	/* Repeat with symbol pointed to.  */
1291   REFC,		/* Mark indirect symbol referenced and then CYCLE.  */
1292   WARNC		/* Issue warning and then CYCLE.  */
1293 };
1294 
1295 /* The state table itself.  The first index is a link_row and the
1296    second index is a bfd_link_hash_type.  */
1297 
1298 static const enum link_action link_action[8][8] =
1299 {
1300   /* current\prev    new    undef  undefw def    defw   com    indr   warn  */
1301   /* UNDEF_ROW	*/  {UND,   NOACT, UND,   REF,   REF,   NOACT, REFC,  WARNC },
1302   /* UNDEFW_ROW	*/  {WEAK,  NOACT, NOACT, REF,   REF,   NOACT, REFC,  WARNC },
1303   /* DEF_ROW	*/  {DEF,   DEF,   DEF,   MDEF,  DEF,   CDEF,  MIND,  CYCLE },
1304   /* DEFW_ROW	*/  {DEFW,  DEFW,  DEFW,  NOACT, NOACT, NOACT, NOACT, CYCLE },
1305   /* COMMON_ROW	*/  {COM,   COM,   COM,   CREF,  COM,   BIG,   REFC,  WARNC },
1306   /* INDR_ROW	*/  {IND,   IND,   IND,   MDEF,  IND,   CIND,  MIND,  CYCLE },
1307   /* WARN_ROW   */  {MWARN, WARN,  WARN,  WARN,  WARN,  WARN,  WARN,  NOACT },
1308   /* SET_ROW	*/  {SET,   SET,   SET,   SET,   SET,   SET,   CYCLE, CYCLE }
1309 };
1310 
1311 /* Most of the entries in the LINK_ACTION table are straightforward,
1312    but a few are somewhat subtle.
1313 
1314    A reference to an indirect symbol (UNDEF_ROW/indr or
1315    UNDEFW_ROW/indr) is counted as a reference both to the indirect
1316    symbol and to the symbol the indirect symbol points to.
1317 
1318    A reference to a warning symbol (UNDEF_ROW/warn or UNDEFW_ROW/warn)
1319    causes the warning to be issued.
1320 
1321    A common definition of an indirect symbol (COMMON_ROW/indr) is
1322    treated as a multiple definition error.  Likewise for an indirect
1323    definition of a common symbol (INDR_ROW/com).
1324 
1325    An indirect definition of a warning (INDR_ROW/warn) does not cause
1326    the warning to be issued.
1327 
1328    If a warning is created for an indirect symbol (WARN_ROW/indr) no
1329    warning is created for the symbol the indirect symbol points to.
1330 
1331    Adding an entry to a set does not count as a reference to a set,
1332    and no warning is issued (SET_ROW/warn).  */
1333 
1334 /* Return the BFD in which a hash entry has been defined, if known.  */
1335 
1336 static bfd *
hash_entry_bfd(struct bfd_link_hash_entry * h)1337 hash_entry_bfd (struct bfd_link_hash_entry *h)
1338 {
1339   while (h->type == bfd_link_hash_warning)
1340     h = h->u.i.link;
1341   switch (h->type)
1342     {
1343     default:
1344       return NULL;
1345     case bfd_link_hash_undefined:
1346     case bfd_link_hash_undefweak:
1347       return h->u.undef.abfd;
1348     case bfd_link_hash_defined:
1349     case bfd_link_hash_defweak:
1350       return h->u.def.section->owner;
1351     case bfd_link_hash_common:
1352       return h->u.c.p->section->owner;
1353     }
1354   /*NOTREACHED*/
1355 }
1356 
1357 /* Add a symbol to the global hash table.
1358    ABFD is the BFD the symbol comes from.
1359    NAME is the name of the symbol.
1360    FLAGS is the BSF_* bits associated with the symbol.
1361    SECTION is the section in which the symbol is defined; this may be
1362      bfd_und_section_ptr or bfd_com_section_ptr.
1363    VALUE is the value of the symbol, relative to the section.
1364    STRING is used for either an indirect symbol, in which case it is
1365      the name of the symbol to indirect to, or a warning symbol, in
1366      which case it is the warning string.
1367    COPY is TRUE if NAME or STRING must be copied into locally
1368      allocated memory if they need to be saved.
1369    COLLECT is TRUE if we should automatically collect gcc constructor
1370      or destructor names as collect2 does.
1371    HASHP, if not NULL, is a place to store the created hash table
1372      entry; if *HASHP is not NULL, the caller has already looked up
1373      the hash table entry, and stored it in *HASHP.  */
1374 
1375 bool
_bfd_generic_link_add_one_symbol(struct bfd_link_info * info,bfd * abfd,const char * name,flagword flags,asection * section,bfd_vma value,const char * string,bool copy,bool collect,struct bfd_link_hash_entry ** hashp)1376 _bfd_generic_link_add_one_symbol (struct bfd_link_info *info,
1377 				  bfd *abfd,
1378 				  const char *name,
1379 				  flagword flags,
1380 				  asection *section,
1381 				  bfd_vma value,
1382 				  const char *string,
1383 				  bool copy,
1384 				  bool collect,
1385 				  struct bfd_link_hash_entry **hashp)
1386 {
1387   enum link_row row;
1388   struct bfd_link_hash_entry *h;
1389   struct bfd_link_hash_entry *inh = NULL;
1390   bool cycle;
1391 
1392   BFD_ASSERT (section != NULL);
1393 
1394   if (bfd_is_ind_section (section)
1395       || (flags & BSF_INDIRECT) != 0)
1396     {
1397       row = INDR_ROW;
1398       /* Create the indirect symbol here.  This is for the benefit of
1399 	 the plugin "notice" function.
1400 	 STRING is the name of the symbol we want to indirect to.  */
1401       inh = bfd_wrapped_link_hash_lookup (abfd, info, string, true,
1402 					  copy, false);
1403       if (inh == NULL)
1404 	return false;
1405     }
1406   else if ((flags & BSF_WARNING) != 0)
1407     row = WARN_ROW;
1408   else if ((flags & BSF_CONSTRUCTOR) != 0)
1409     row = SET_ROW;
1410   else if (bfd_is_und_section (section))
1411     {
1412       if ((flags & BSF_WEAK) != 0)
1413 	row = UNDEFW_ROW;
1414       else
1415 	row = UNDEF_ROW;
1416     }
1417   else if ((flags & BSF_WEAK) != 0)
1418     row = DEFW_ROW;
1419   else if (bfd_is_com_section (section))
1420     {
1421       row = COMMON_ROW;
1422       if (!bfd_link_relocatable (info)
1423 	  && name[0] == '_'
1424 	  && name[1] == '_'
1425 	  && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0)
1426 	_bfd_error_handler
1427 	  (_("%pB: plugin needed to handle lto object"), abfd);
1428     }
1429   else
1430     row = DEF_ROW;
1431 
1432   if (hashp != NULL && *hashp != NULL)
1433     h = *hashp;
1434   else
1435     {
1436       if (row == UNDEF_ROW || row == UNDEFW_ROW)
1437 	h = bfd_wrapped_link_hash_lookup (abfd, info, name, true, copy, false);
1438       else
1439 	h = bfd_link_hash_lookup (info->hash, name, true, copy, false);
1440       if (h == NULL)
1441 	{
1442 	  if (hashp != NULL)
1443 	    *hashp = NULL;
1444 	  return false;
1445 	}
1446     }
1447 
1448   if (info->notice_all
1449       || (info->notice_hash != NULL
1450 	  && bfd_hash_lookup (info->notice_hash, name, false, false) != NULL))
1451     {
1452       if (! (*info->callbacks->notice) (info, h, inh,
1453 					abfd, section, value, flags))
1454 	return false;
1455     }
1456 
1457   if (hashp != NULL)
1458     *hashp = h;
1459 
1460   do
1461     {
1462       enum link_action action;
1463       int prev;
1464 
1465       prev = h->type;
1466       /* Treat symbols defined by early linker script pass as undefined.  */
1467       if (h->ldscript_def)
1468 	prev = bfd_link_hash_undefined;
1469       cycle = false;
1470       action = link_action[(int) row][prev];
1471       switch (action)
1472 	{
1473 	case FAIL:
1474 	  abort ();
1475 
1476 	case NOACT:
1477 	  /* Do nothing.  */
1478 	  break;
1479 
1480 	case UND:
1481 	  /* Make a new undefined symbol.  */
1482 	  h->type = bfd_link_hash_undefined;
1483 	  h->u.undef.abfd = abfd;
1484 	  bfd_link_add_undef (info->hash, h);
1485 	  break;
1486 
1487 	case WEAK:
1488 	  /* Make a new weak undefined symbol.  */
1489 	  h->type = bfd_link_hash_undefweak;
1490 	  h->u.undef.abfd = abfd;
1491 	  break;
1492 
1493 	case CDEF:
1494 	  /* We have found a definition for a symbol which was
1495 	     previously common.  */
1496 	  BFD_ASSERT (h->type == bfd_link_hash_common);
1497 	  (*info->callbacks->multiple_common) (info, h, abfd,
1498 					       bfd_link_hash_defined, 0);
1499 	  /* Fall through.  */
1500 	case DEF:
1501 	case DEFW:
1502 	  {
1503 	    enum bfd_link_hash_type oldtype;
1504 
1505 	    /* Define a symbol.  */
1506 	    oldtype = h->type;
1507 	    if (action == DEFW)
1508 	      h->type = bfd_link_hash_defweak;
1509 	    else
1510 	      h->type = bfd_link_hash_defined;
1511 	    h->u.def.section = section;
1512 	    h->u.def.value = value;
1513 	    h->linker_def = 0;
1514 	    h->ldscript_def = 0;
1515 
1516 	    /* If we have been asked to, we act like collect2 and
1517 	       identify all functions that might be global
1518 	       constructors and destructors and pass them up in a
1519 	       callback.  We only do this for certain object file
1520 	       types, since many object file types can handle this
1521 	       automatically.  */
1522 	    if (collect && name[0] == '_')
1523 	      {
1524 		const char *s;
1525 
1526 		/* A constructor or destructor name starts like this:
1527 		   _+GLOBAL_[_.$][ID][_.$] where the first [_.$] and
1528 		   the second are the same character (we accept any
1529 		   character there, in case a new object file format
1530 		   comes along with even worse naming restrictions).  */
1531 
1532 #define CONS_PREFIX "GLOBAL_"
1533 #define CONS_PREFIX_LEN (sizeof CONS_PREFIX - 1)
1534 
1535 		s = name + 1;
1536 		while (*s == '_')
1537 		  ++s;
1538 		if (s[0] == 'G' && startswith (s, CONS_PREFIX))
1539 		  {
1540 		    char c;
1541 
1542 		    c = s[CONS_PREFIX_LEN + 1];
1543 		    if ((c == 'I' || c == 'D')
1544 			&& s[CONS_PREFIX_LEN] == s[CONS_PREFIX_LEN + 2])
1545 		      {
1546 			/* If this is a definition of a symbol which
1547 			   was previously weakly defined, we are in
1548 			   trouble.  We have already added a
1549 			   constructor entry for the weak defined
1550 			   symbol, and now we are trying to add one
1551 			   for the new symbol.  Fortunately, this case
1552 			   should never arise in practice.  */
1553 			if (oldtype == bfd_link_hash_defweak)
1554 			  abort ();
1555 
1556 			(*info->callbacks->constructor) (info, c == 'I',
1557 							 h->root.string, abfd,
1558 							 section, value);
1559 		      }
1560 		  }
1561 	      }
1562 	  }
1563 
1564 	  break;
1565 
1566 	case COM:
1567 	  /* We have found a common definition for a symbol.  */
1568 	  if (h->type == bfd_link_hash_new)
1569 	    bfd_link_add_undef (info->hash, h);
1570 	  h->type = bfd_link_hash_common;
1571 	  h->u.c.p = (struct bfd_link_hash_common_entry *)
1572 	    bfd_hash_allocate (&info->hash->table,
1573 			       sizeof (struct bfd_link_hash_common_entry));
1574 	  if (h->u.c.p == NULL)
1575 	    return false;
1576 
1577 	  h->u.c.size = value;
1578 
1579 	  /* Select a default alignment based on the size.  This may
1580 	     be overridden by the caller.  */
1581 	  {
1582 	    unsigned int power;
1583 
1584 	    power = bfd_log2 (value);
1585 	    if (power > 4)
1586 	      power = 4;
1587 	    h->u.c.p->alignment_power = power;
1588 	  }
1589 
1590 	  /* The section of a common symbol is only used if the common
1591 	     symbol is actually allocated.  It basically provides a
1592 	     hook for the linker script to decide which output section
1593 	     the common symbols should be put in.  In most cases, the
1594 	     section of a common symbol will be bfd_com_section_ptr,
1595 	     the code here will choose a common symbol section named
1596 	     "COMMON", and the linker script will contain *(COMMON) in
1597 	     the appropriate place.  A few targets use separate common
1598 	     sections for small symbols, and they require special
1599 	     handling.  */
1600 	  if (section == bfd_com_section_ptr)
1601 	    {
1602 	      h->u.c.p->section = bfd_make_section_old_way (abfd, "COMMON");
1603 	      h->u.c.p->section->flags |= SEC_ALLOC;
1604 	    }
1605 	  else if (section->owner != abfd)
1606 	    {
1607 	      h->u.c.p->section = bfd_make_section_old_way (abfd,
1608 							    section->name);
1609 	      h->u.c.p->section->flags |= SEC_ALLOC;
1610 	    }
1611 	  else
1612 	    h->u.c.p->section = section;
1613 	  h->linker_def = 0;
1614 	  h->ldscript_def = 0;
1615 	  break;
1616 
1617 	case REF:
1618 	  /* A reference to a defined symbol.  */
1619 	  if (h->u.undef.next == NULL && info->hash->undefs_tail != h)
1620 	    h->u.undef.next = h;
1621 	  break;
1622 
1623 	case BIG:
1624 	  /* We have found a common definition for a symbol which
1625 	     already had a common definition.  Use the maximum of the
1626 	     two sizes, and use the section required by the larger symbol.  */
1627 	  BFD_ASSERT (h->type == bfd_link_hash_common);
1628 	  (*info->callbacks->multiple_common) (info, h, abfd,
1629 					       bfd_link_hash_common, value);
1630 	  if (value > h->u.c.size)
1631 	    {
1632 	      unsigned int power;
1633 
1634 	      h->u.c.size = value;
1635 
1636 	      /* Select a default alignment based on the size.  This may
1637 		 be overridden by the caller.  */
1638 	      power = bfd_log2 (value);
1639 	      if (power > 4)
1640 		power = 4;
1641 	      h->u.c.p->alignment_power = power;
1642 
1643 	      /* Some systems have special treatment for small commons,
1644 		 hence we want to select the section used by the larger
1645 		 symbol.  This makes sure the symbol does not go in a
1646 		 small common section if it is now too large.  */
1647 	      if (section == bfd_com_section_ptr)
1648 		{
1649 		  h->u.c.p->section
1650 		    = bfd_make_section_old_way (abfd, "COMMON");
1651 		  h->u.c.p->section->flags |= SEC_ALLOC;
1652 		}
1653 	      else if (section->owner != abfd)
1654 		{
1655 		  h->u.c.p->section
1656 		    = bfd_make_section_old_way (abfd, section->name);
1657 		  h->u.c.p->section->flags |= SEC_ALLOC;
1658 		}
1659 	      else
1660 		h->u.c.p->section = section;
1661 	    }
1662 	  break;
1663 
1664 	case CREF:
1665 	  /* We have found a common definition for a symbol which
1666 	     was already defined.  */
1667 	  (*info->callbacks->multiple_common) (info, h, abfd,
1668 					       bfd_link_hash_common, value);
1669 	  break;
1670 
1671 	case MIND:
1672 	  /* Multiple indirect symbols.  This is OK if they both point
1673 	     to the same symbol.  */
1674 	  if (h->u.i.link->type == bfd_link_hash_defweak)
1675 	    {
1676 	      /* It is also OK to redefine a symbol that indirects to
1677 		 a weak definition.  So for sym@ver -> sym@@ver where
1678 		 sym@@ver is weak and we have a new strong sym@ver,
1679 		 redefine sym@@ver.  Of course if there exists
1680 		 sym -> sym@@ver then this also redefines sym.  */
1681 	      h = h->u.i.link;
1682 	      cycle = true;
1683 	      break;
1684 	    }
1685 	  if (strcmp (h->u.i.link->root.string, string) == 0)
1686 	    break;
1687 	  /* Fall through.  */
1688 	case MDEF:
1689 	  /* Handle a multiple definition.  */
1690 	  (*info->callbacks->multiple_definition) (info, h,
1691 						   abfd, section, value);
1692 	  break;
1693 
1694 	case CIND:
1695 	  /* Create an indirect symbol from an existing common symbol.  */
1696 	  BFD_ASSERT (h->type == bfd_link_hash_common);
1697 	  (*info->callbacks->multiple_common) (info, h, abfd,
1698 					       bfd_link_hash_indirect, 0);
1699 	  /* Fall through.  */
1700 	case IND:
1701 	  if (inh->type == bfd_link_hash_indirect
1702 	      && inh->u.i.link == h)
1703 	    {
1704 	      _bfd_error_handler
1705 		/* xgettext:c-format */
1706 		(_("%pB: indirect symbol `%s' to `%s' is a loop"),
1707 		 abfd, name, string);
1708 	      bfd_set_error (bfd_error_invalid_operation);
1709 	      return false;
1710 	    }
1711 	  if (inh->type == bfd_link_hash_new)
1712 	    {
1713 	      inh->type = bfd_link_hash_undefined;
1714 	      inh->u.undef.abfd = abfd;
1715 	      bfd_link_add_undef (info->hash, inh);
1716 	    }
1717 
1718 	  /* If the indirect symbol has been referenced, we need to
1719 	     push the reference down to the symbol we are referencing.  */
1720 	  if (h->type != bfd_link_hash_new)
1721 	    {
1722 	      /* ??? If inh->type == bfd_link_hash_undefweak this
1723 		 converts inh to bfd_link_hash_undefined.  */
1724 	      row = UNDEF_ROW;
1725 	      cycle = true;
1726 	    }
1727 
1728 	  h->type = bfd_link_hash_indirect;
1729 	  h->u.i.link = inh;
1730 	  /* Not setting h = h->u.i.link here means that when cycle is
1731 	     set above we'll always go to REFC, and then cycle again
1732 	     to the indirected symbol.  This means that any successful
1733 	     change of an existing symbol to indirect counts as a
1734 	     reference.  ??? That may not be correct when the existing
1735 	     symbol was defweak.  */
1736 	  break;
1737 
1738 	case SET:
1739 	  /* Add an entry to a set.  */
1740 	  (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR,
1741 					  abfd, section, value);
1742 	  break;
1743 
1744 	case WARNC:
1745 	  /* Issue a warning and cycle, except when the reference is
1746 	     in LTO IR.  */
1747 	  if (h->u.i.warning != NULL
1748 	      && (abfd->flags & BFD_PLUGIN) == 0)
1749 	    {
1750 	      (*info->callbacks->warning) (info, h->u.i.warning,
1751 					   h->root.string, abfd, NULL, 0);
1752 	      /* Only issue a warning once.  */
1753 	      h->u.i.warning = NULL;
1754 	    }
1755 	  /* Fall through.  */
1756 	case CYCLE:
1757 	  /* Try again with the referenced symbol.  */
1758 	  h = h->u.i.link;
1759 	  cycle = true;
1760 	  break;
1761 
1762 	case REFC:
1763 	  /* A reference to an indirect symbol.  */
1764 	  if (h->u.undef.next == NULL && info->hash->undefs_tail != h)
1765 	    h->u.undef.next = h;
1766 	  h = h->u.i.link;
1767 	  cycle = true;
1768 	  break;
1769 
1770 	case WARN:
1771 	  /* Warn if this symbol has been referenced already from non-IR,
1772 	     otherwise add a warning.  */
1773 	  if ((!info->lto_plugin_active
1774 	       && (h->u.undef.next != NULL || info->hash->undefs_tail == h))
1775 	      || h->non_ir_ref_regular
1776 	      || h->non_ir_ref_dynamic)
1777 	    {
1778 	      (*info->callbacks->warning) (info, string, h->root.string,
1779 					   hash_entry_bfd (h), NULL, 0);
1780 	      break;
1781 	    }
1782 	  /* Fall through.  */
1783 	case MWARN:
1784 	  /* Make a warning symbol.  */
1785 	  {
1786 	    struct bfd_link_hash_entry *sub;
1787 
1788 	    /* STRING is the warning to give.  */
1789 	    sub = ((struct bfd_link_hash_entry *)
1790 		   ((*info->hash->table.newfunc)
1791 		    (NULL, &info->hash->table, h->root.string)));
1792 	    if (sub == NULL)
1793 	      return false;
1794 	    *sub = *h;
1795 	    sub->type = bfd_link_hash_warning;
1796 	    sub->u.i.link = h;
1797 	    if (! copy)
1798 	      sub->u.i.warning = string;
1799 	    else
1800 	      {
1801 		char *w;
1802 		size_t len = strlen (string) + 1;
1803 
1804 		w = (char *) bfd_hash_allocate (&info->hash->table, len);
1805 		if (w == NULL)
1806 		  return false;
1807 		memcpy (w, string, len);
1808 		sub->u.i.warning = w;
1809 	      }
1810 
1811 	    bfd_hash_replace (&info->hash->table,
1812 			      (struct bfd_hash_entry *) h,
1813 			      (struct bfd_hash_entry *) sub);
1814 	    if (hashp != NULL)
1815 	      *hashp = sub;
1816 	  }
1817 	  break;
1818 	}
1819     }
1820   while (cycle);
1821 
1822   return true;
1823 }
1824 
1825 /* Generic final link routine.  */
1826 
1827 bool
_bfd_generic_final_link(bfd * abfd,struct bfd_link_info * info)1828 _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info)
1829 {
1830   bfd *sub;
1831   asection *o;
1832   struct bfd_link_order *p;
1833   size_t outsymalloc;
1834   struct generic_write_global_symbol_info wginfo;
1835 
1836   abfd->outsymbols = NULL;
1837   abfd->symcount = 0;
1838   outsymalloc = 0;
1839 
1840   /* Mark all sections which will be included in the output file.  */
1841   for (o = abfd->sections; o != NULL; o = o->next)
1842     for (p = o->map_head.link_order; p != NULL; p = p->next)
1843       if (p->type == bfd_indirect_link_order)
1844 	p->u.indirect.section->linker_mark = true;
1845 
1846   /* Build the output symbol table.  */
1847   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
1848     if (! _bfd_generic_link_output_symbols (abfd, sub, info, &outsymalloc))
1849       return false;
1850 
1851   /* Accumulate the global symbols.  */
1852   wginfo.info = info;
1853   wginfo.output_bfd = abfd;
1854   wginfo.psymalloc = &outsymalloc;
1855   _bfd_generic_link_hash_traverse (_bfd_generic_hash_table (info),
1856 				   _bfd_generic_link_write_global_symbol,
1857 				   &wginfo);
1858 
1859   /* Make sure we have a trailing NULL pointer on OUTSYMBOLS.  We
1860      shouldn't really need one, since we have SYMCOUNT, but some old
1861      code still expects one.  */
1862   if (! generic_add_output_symbol (abfd, &outsymalloc, NULL))
1863     return false;
1864 
1865   if (bfd_link_relocatable (info))
1866     {
1867       /* Allocate space for the output relocs for each section.  */
1868       for (o = abfd->sections; o != NULL; o = o->next)
1869 	{
1870 	  o->reloc_count = 0;
1871 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
1872 	    {
1873 	      if (p->type == bfd_section_reloc_link_order
1874 		  || p->type == bfd_symbol_reloc_link_order)
1875 		++o->reloc_count;
1876 	      else if (p->type == bfd_indirect_link_order)
1877 		{
1878 		  asection *input_section;
1879 		  bfd *input_bfd;
1880 		  long relsize;
1881 		  arelent **relocs;
1882 		  asymbol **symbols;
1883 		  long reloc_count;
1884 
1885 		  input_section = p->u.indirect.section;
1886 		  input_bfd = input_section->owner;
1887 		  relsize = bfd_get_reloc_upper_bound (input_bfd,
1888 						       input_section);
1889 		  if (relsize < 0)
1890 		    return false;
1891 		  relocs = (arelent **) bfd_malloc (relsize);
1892 		  if (!relocs && relsize != 0)
1893 		    return false;
1894 		  symbols = _bfd_generic_link_get_symbols (input_bfd);
1895 		  reloc_count = bfd_canonicalize_reloc (input_bfd,
1896 							input_section,
1897 							relocs,
1898 							symbols);
1899 		  free (relocs);
1900 		  if (reloc_count < 0)
1901 		    return false;
1902 		  BFD_ASSERT ((unsigned long) reloc_count
1903 			      == input_section->reloc_count);
1904 		  o->reloc_count += reloc_count;
1905 		}
1906 	    }
1907 	  if (o->reloc_count > 0)
1908 	    {
1909 	      bfd_size_type amt;
1910 
1911 	      amt = o->reloc_count;
1912 	      amt *= sizeof (arelent *);
1913 	      o->orelocation = (struct reloc_cache_entry **) bfd_alloc (abfd, amt);
1914 	      if (!o->orelocation)
1915 		return false;
1916 	      o->flags |= SEC_RELOC;
1917 	      /* Reset the count so that it can be used as an index
1918 		 when putting in the output relocs.  */
1919 	      o->reloc_count = 0;
1920 	    }
1921 	}
1922     }
1923 
1924   /* Handle all the link order information for the sections.  */
1925   for (o = abfd->sections; o != NULL; o = o->next)
1926     {
1927       for (p = o->map_head.link_order; p != NULL; p = p->next)
1928 	{
1929 	  switch (p->type)
1930 	    {
1931 	    case bfd_section_reloc_link_order:
1932 	    case bfd_symbol_reloc_link_order:
1933 	      if (! _bfd_generic_reloc_link_order (abfd, info, o, p))
1934 		return false;
1935 	      break;
1936 	    case bfd_indirect_link_order:
1937 	      if (! default_indirect_link_order (abfd, info, o, p, true))
1938 		return false;
1939 	      break;
1940 	    default:
1941 	      if (! _bfd_default_link_order (abfd, info, o, p))
1942 		return false;
1943 	      break;
1944 	    }
1945 	}
1946     }
1947 
1948   return true;
1949 }
1950 
1951 /* Add an output symbol to the output BFD.  */
1952 
1953 static bool
generic_add_output_symbol(bfd * output_bfd,size_t * psymalloc,asymbol * sym)1954 generic_add_output_symbol (bfd *output_bfd, size_t *psymalloc, asymbol *sym)
1955 {
1956   if (bfd_get_symcount (output_bfd) >= *psymalloc)
1957     {
1958       asymbol **newsyms;
1959       bfd_size_type amt;
1960 
1961       if (*psymalloc == 0)
1962 	*psymalloc = 124;
1963       else
1964 	*psymalloc *= 2;
1965       amt = *psymalloc;
1966       amt *= sizeof (asymbol *);
1967       newsyms = (asymbol **) bfd_realloc (bfd_get_outsymbols (output_bfd), amt);
1968       if (newsyms == NULL)
1969 	return false;
1970       output_bfd->outsymbols = newsyms;
1971     }
1972 
1973   output_bfd->outsymbols[output_bfd->symcount] = sym;
1974   if (sym != NULL)
1975     ++output_bfd->symcount;
1976 
1977   return true;
1978 }
1979 
1980 /* Handle the symbols for an input BFD.  */
1981 
1982 bool
_bfd_generic_link_output_symbols(bfd * output_bfd,bfd * input_bfd,struct bfd_link_info * info,size_t * psymalloc)1983 _bfd_generic_link_output_symbols (bfd *output_bfd,
1984 				  bfd *input_bfd,
1985 				  struct bfd_link_info *info,
1986 				  size_t *psymalloc)
1987 {
1988   asymbol **sym_ptr;
1989   asymbol **sym_end;
1990 
1991   if (!bfd_generic_link_read_symbols (input_bfd))
1992     return false;
1993 
1994   /* Create a filename symbol if we are supposed to.  */
1995   if (info->create_object_symbols_section != NULL)
1996     {
1997       asection *sec;
1998 
1999       for (sec = input_bfd->sections; sec != NULL; sec = sec->next)
2000 	{
2001 	  if (sec->output_section == info->create_object_symbols_section)
2002 	    {
2003 	      asymbol *newsym;
2004 
2005 	      newsym = bfd_make_empty_symbol (input_bfd);
2006 	      if (!newsym)
2007 		return false;
2008 	      newsym->name = bfd_get_filename (input_bfd);
2009 	      newsym->value = 0;
2010 	      newsym->flags = BSF_LOCAL | BSF_FILE;
2011 	      newsym->section = sec;
2012 
2013 	      if (! generic_add_output_symbol (output_bfd, psymalloc,
2014 					       newsym))
2015 		return false;
2016 
2017 	      break;
2018 	    }
2019 	}
2020     }
2021 
2022   /* Adjust the values of the globally visible symbols, and write out
2023      local symbols.  */
2024   sym_ptr = _bfd_generic_link_get_symbols (input_bfd);
2025   sym_end = sym_ptr + _bfd_generic_link_get_symcount (input_bfd);
2026   for (; sym_ptr < sym_end; sym_ptr++)
2027     {
2028       asymbol *sym;
2029       struct generic_link_hash_entry *h;
2030       bool output;
2031 
2032       h = NULL;
2033       sym = *sym_ptr;
2034       if ((sym->flags & (BSF_INDIRECT
2035 			 | BSF_WARNING
2036 			 | BSF_GLOBAL
2037 			 | BSF_CONSTRUCTOR
2038 			 | BSF_WEAK)) != 0
2039 	  || bfd_is_und_section (bfd_asymbol_section (sym))
2040 	  || bfd_is_com_section (bfd_asymbol_section (sym))
2041 	  || bfd_is_ind_section (bfd_asymbol_section (sym)))
2042 	{
2043 	  if (sym->udata.p != NULL)
2044 	    h = (struct generic_link_hash_entry *) sym->udata.p;
2045 	  else if ((sym->flags & BSF_CONSTRUCTOR) != 0)
2046 	    {
2047 	      /* This case normally means that the main linker code
2048 		 deliberately ignored this constructor symbol.  We
2049 		 should just pass it through.  This will screw up if
2050 		 the constructor symbol is from a different,
2051 		 non-generic, object file format, but the case will
2052 		 only arise when linking with -r, which will probably
2053 		 fail anyhow, since there will be no way to represent
2054 		 the relocs in the output format being used.  */
2055 	      h = NULL;
2056 	    }
2057 	  else if (bfd_is_und_section (bfd_asymbol_section (sym)))
2058 	    h = ((struct generic_link_hash_entry *)
2059 		 bfd_wrapped_link_hash_lookup (output_bfd, info,
2060 					       bfd_asymbol_name (sym),
2061 					       false, false, true));
2062 	  else
2063 	    h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info),
2064 					       bfd_asymbol_name (sym),
2065 					       false, false, true);
2066 
2067 	  if (h != NULL)
2068 	    {
2069 	      /* Force all references to this symbol to point to
2070 		 the same area in memory.  It is possible that
2071 		 this routine will be called with a hash table
2072 		 other than a generic hash table, so we double
2073 		 check that.  */
2074 	      if (info->output_bfd->xvec == input_bfd->xvec)
2075 		{
2076 		  if (h->sym != NULL)
2077 		    *sym_ptr = sym = h->sym;
2078 		}
2079 
2080 	      switch (h->root.type)
2081 		{
2082 		default:
2083 		case bfd_link_hash_new:
2084 		  abort ();
2085 		case bfd_link_hash_undefined:
2086 		  break;
2087 		case bfd_link_hash_undefweak:
2088 		  sym->flags |= BSF_WEAK;
2089 		  break;
2090 		case bfd_link_hash_indirect:
2091 		  h = (struct generic_link_hash_entry *) h->root.u.i.link;
2092 		  /* fall through */
2093 		case bfd_link_hash_defined:
2094 		  sym->flags |= BSF_GLOBAL;
2095 		  sym->flags &=~ (BSF_WEAK | BSF_CONSTRUCTOR);
2096 		  sym->value = h->root.u.def.value;
2097 		  sym->section = h->root.u.def.section;
2098 		  break;
2099 		case bfd_link_hash_defweak:
2100 		  sym->flags |= BSF_WEAK;
2101 		  sym->flags &=~ BSF_CONSTRUCTOR;
2102 		  sym->value = h->root.u.def.value;
2103 		  sym->section = h->root.u.def.section;
2104 		  break;
2105 		case bfd_link_hash_common:
2106 		  sym->value = h->root.u.c.size;
2107 		  sym->flags |= BSF_GLOBAL;
2108 		  if (! bfd_is_com_section (sym->section))
2109 		    {
2110 		      BFD_ASSERT (bfd_is_und_section (sym->section));
2111 		      sym->section = bfd_com_section_ptr;
2112 		    }
2113 		  /* We do not set the section of the symbol to
2114 		     h->root.u.c.p->section.  That value was saved so
2115 		     that we would know where to allocate the symbol
2116 		     if it was defined.  In this case the type is
2117 		     still bfd_link_hash_common, so we did not define
2118 		     it, so we do not want to use that section.  */
2119 		  break;
2120 		}
2121 	    }
2122 	}
2123 
2124       if ((sym->flags & BSF_KEEP) == 0
2125 	  && (info->strip == strip_all
2126 	      || (info->strip == strip_some
2127 		  && bfd_hash_lookup (info->keep_hash, bfd_asymbol_name (sym),
2128 				      false, false) == NULL)))
2129 	output = false;
2130       else if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0)
2131 	{
2132 	  /* If this symbol is marked as occurring now, rather
2133 	     than at the end, output it now.  This is used for
2134 	     COFF C_EXT FCN symbols.  FIXME: There must be a
2135 	     better way.  */
2136 	  if (bfd_asymbol_bfd (sym) == input_bfd
2137 	      && (sym->flags & BSF_NOT_AT_END) != 0)
2138 	    output = true;
2139 	  else
2140 	    output = false;
2141 	}
2142       else if ((sym->flags & BSF_KEEP) != 0)
2143 	output = true;
2144       else if (bfd_is_ind_section (sym->section))
2145 	output = false;
2146       else if ((sym->flags & BSF_DEBUGGING) != 0)
2147 	{
2148 	  if (info->strip == strip_none)
2149 	    output = true;
2150 	  else
2151 	    output = false;
2152 	}
2153       else if (bfd_is_und_section (sym->section)
2154 	       || bfd_is_com_section (sym->section))
2155 	output = false;
2156       else if ((sym->flags & BSF_LOCAL) != 0)
2157 	{
2158 	  if ((sym->flags & BSF_WARNING) != 0)
2159 	    output = false;
2160 	  else
2161 	    {
2162 	      switch (info->discard)
2163 		{
2164 		default:
2165 		case discard_all:
2166 		  output = false;
2167 		  break;
2168 		case discard_sec_merge:
2169 		  output = true;
2170 		  if (bfd_link_relocatable (info)
2171 		      || ! (sym->section->flags & SEC_MERGE))
2172 		    break;
2173 		  /* FALLTHROUGH */
2174 		case discard_l:
2175 		  if (bfd_is_local_label (input_bfd, sym))
2176 		    output = false;
2177 		  else
2178 		    output = true;
2179 		  break;
2180 		case discard_none:
2181 		  output = true;
2182 		  break;
2183 		}
2184 	    }
2185 	}
2186       else if ((sym->flags & BSF_CONSTRUCTOR))
2187 	{
2188 	  if (info->strip != strip_all)
2189 	    output = true;
2190 	  else
2191 	    output = false;
2192 	}
2193       else if (sym->flags == 0
2194 	       && (sym->section->owner->flags & BFD_PLUGIN) != 0)
2195 	/* LTO doesn't set symbol information.  We get here with the
2196 	   generic linker for a symbol that was "common" but no longer
2197 	   needs to be global.  */
2198 	output = false;
2199       else
2200 	abort ();
2201 
2202       /* If this symbol is in a section which is not being included
2203 	 in the output file, then we don't want to output the
2204 	 symbol.  */
2205       if (!bfd_is_abs_section (sym->section)
2206 	  && bfd_section_removed_from_list (output_bfd,
2207 					    sym->section->output_section))
2208 	output = false;
2209 
2210       if (output)
2211 	{
2212 	  if (! generic_add_output_symbol (output_bfd, psymalloc, sym))
2213 	    return false;
2214 	  if (h != NULL)
2215 	    h->written = true;
2216 	}
2217     }
2218 
2219   return true;
2220 }
2221 
2222 /* Set the section and value of a generic BFD symbol based on a linker
2223    hash table entry.  */
2224 
2225 static void
set_symbol_from_hash(asymbol * sym,struct bfd_link_hash_entry * h)2226 set_symbol_from_hash (asymbol *sym, struct bfd_link_hash_entry *h)
2227 {
2228   switch (h->type)
2229     {
2230     default:
2231       abort ();
2232       break;
2233     case bfd_link_hash_new:
2234       /* This can happen when a constructor symbol is seen but we are
2235 	 not building constructors.  */
2236       if (sym->section != NULL)
2237 	{
2238 	  BFD_ASSERT ((sym->flags & BSF_CONSTRUCTOR) != 0);
2239 	}
2240       else
2241 	{
2242 	  sym->flags |= BSF_CONSTRUCTOR;
2243 	  sym->section = bfd_abs_section_ptr;
2244 	  sym->value = 0;
2245 	}
2246       break;
2247     case bfd_link_hash_undefined:
2248       sym->section = bfd_und_section_ptr;
2249       sym->value = 0;
2250       break;
2251     case bfd_link_hash_undefweak:
2252       sym->section = bfd_und_section_ptr;
2253       sym->value = 0;
2254       sym->flags |= BSF_WEAK;
2255       break;
2256     case bfd_link_hash_defined:
2257       sym->section = h->u.def.section;
2258       sym->value = h->u.def.value;
2259       break;
2260     case bfd_link_hash_defweak:
2261       sym->flags |= BSF_WEAK;
2262       sym->section = h->u.def.section;
2263       sym->value = h->u.def.value;
2264       break;
2265     case bfd_link_hash_common:
2266       sym->value = h->u.c.size;
2267       if (sym->section == NULL)
2268 	sym->section = bfd_com_section_ptr;
2269       else if (! bfd_is_com_section (sym->section))
2270 	{
2271 	  BFD_ASSERT (bfd_is_und_section (sym->section));
2272 	  sym->section = bfd_com_section_ptr;
2273 	}
2274       /* Do not set the section; see _bfd_generic_link_output_symbols.  */
2275       break;
2276     case bfd_link_hash_indirect:
2277     case bfd_link_hash_warning:
2278       /* FIXME: What should we do here?  */
2279       break;
2280     }
2281 }
2282 
2283 /* Write out a global symbol, if it hasn't already been written out.
2284    This is called for each symbol in the hash table.  */
2285 
2286 bool
_bfd_generic_link_write_global_symbol(struct generic_link_hash_entry * h,void * data)2287 _bfd_generic_link_write_global_symbol (struct generic_link_hash_entry *h,
2288 				       void *data)
2289 {
2290   struct generic_write_global_symbol_info *wginfo =
2291       (struct generic_write_global_symbol_info *) data;
2292   asymbol *sym;
2293 
2294   if (h->written)
2295     return true;
2296 
2297   h->written = true;
2298 
2299   if (wginfo->info->strip == strip_all
2300       || (wginfo->info->strip == strip_some
2301 	  && bfd_hash_lookup (wginfo->info->keep_hash, h->root.root.string,
2302 			      false, false) == NULL))
2303     return true;
2304 
2305   if (h->sym != NULL)
2306     sym = h->sym;
2307   else
2308     {
2309       sym = bfd_make_empty_symbol (wginfo->output_bfd);
2310       if (!sym)
2311 	return false;
2312       sym->name = h->root.root.string;
2313       sym->flags = 0;
2314     }
2315 
2316   set_symbol_from_hash (sym, &h->root);
2317 
2318   sym->flags |= BSF_GLOBAL;
2319 
2320   if (! generic_add_output_symbol (wginfo->output_bfd, wginfo->psymalloc,
2321 				   sym))
2322     {
2323       /* FIXME: No way to return failure.  */
2324       abort ();
2325     }
2326 
2327   return true;
2328 }
2329 
2330 /* Create a relocation.  */
2331 
2332 bool
_bfd_generic_reloc_link_order(bfd * abfd,struct bfd_link_info * info,asection * sec,struct bfd_link_order * link_order)2333 _bfd_generic_reloc_link_order (bfd *abfd,
2334 			       struct bfd_link_info *info,
2335 			       asection *sec,
2336 			       struct bfd_link_order *link_order)
2337 {
2338   arelent *r;
2339 
2340   if (! bfd_link_relocatable (info))
2341     abort ();
2342   if (sec->orelocation == NULL)
2343     abort ();
2344 
2345   r = (arelent *) bfd_alloc (abfd, sizeof (arelent));
2346   if (r == NULL)
2347     return false;
2348 
2349   r->address = link_order->offset;
2350   r->howto = bfd_reloc_type_lookup (abfd, link_order->u.reloc.p->reloc);
2351   if (r->howto == 0)
2352     {
2353       bfd_set_error (bfd_error_bad_value);
2354       return false;
2355     }
2356 
2357   /* Get the symbol to use for the relocation.  */
2358   if (link_order->type == bfd_section_reloc_link_order)
2359     r->sym_ptr_ptr = link_order->u.reloc.p->u.section->symbol_ptr_ptr;
2360   else
2361     {
2362       struct generic_link_hash_entry *h;
2363 
2364       h = ((struct generic_link_hash_entry *)
2365 	   bfd_wrapped_link_hash_lookup (abfd, info,
2366 					 link_order->u.reloc.p->u.name,
2367 					 false, false, true));
2368       if (h == NULL
2369 	  || ! h->written)
2370 	{
2371 	  (*info->callbacks->unattached_reloc)
2372 	    (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
2373 	  bfd_set_error (bfd_error_bad_value);
2374 	  return false;
2375 	}
2376       r->sym_ptr_ptr = &h->sym;
2377     }
2378 
2379   /* If this is an inplace reloc, write the addend to the object file.
2380      Otherwise, store it in the reloc addend.  */
2381   if (! r->howto->partial_inplace)
2382     r->addend = link_order->u.reloc.p->addend;
2383   else
2384     {
2385       bfd_size_type size;
2386       bfd_reloc_status_type rstat;
2387       bfd_byte *buf;
2388       bool ok;
2389       file_ptr loc;
2390 
2391       size = bfd_get_reloc_size (r->howto);
2392       buf = (bfd_byte *) bfd_zmalloc (size);
2393       if (buf == NULL && size != 0)
2394 	return false;
2395       rstat = _bfd_relocate_contents (r->howto, abfd,
2396 				      (bfd_vma) link_order->u.reloc.p->addend,
2397 				      buf);
2398       switch (rstat)
2399 	{
2400 	case bfd_reloc_ok:
2401 	  break;
2402 	default:
2403 	case bfd_reloc_outofrange:
2404 	  abort ();
2405 	case bfd_reloc_overflow:
2406 	  (*info->callbacks->reloc_overflow)
2407 	    (info, NULL,
2408 	     (link_order->type == bfd_section_reloc_link_order
2409 	      ? bfd_section_name (link_order->u.reloc.p->u.section)
2410 	      : link_order->u.reloc.p->u.name),
2411 	     r->howto->name, link_order->u.reloc.p->addend,
2412 	     NULL, NULL, 0);
2413 	  break;
2414 	}
2415       loc = link_order->offset * bfd_octets_per_byte (abfd, sec);
2416       ok = bfd_set_section_contents (abfd, sec, buf, loc, size);
2417       free (buf);
2418       if (! ok)
2419 	return false;
2420 
2421       r->addend = 0;
2422     }
2423 
2424   sec->orelocation[sec->reloc_count] = r;
2425   ++sec->reloc_count;
2426 
2427   return true;
2428 }
2429 
2430 /* Allocate a new link_order for a section.  */
2431 
2432 struct bfd_link_order *
bfd_new_link_order(bfd * abfd,asection * section)2433 bfd_new_link_order (bfd *abfd, asection *section)
2434 {
2435   size_t amt = sizeof (struct bfd_link_order);
2436   struct bfd_link_order *new_lo;
2437 
2438   new_lo = (struct bfd_link_order *) bfd_zalloc (abfd, amt);
2439   if (!new_lo)
2440     return NULL;
2441 
2442   new_lo->type = bfd_undefined_link_order;
2443 
2444   if (section->map_tail.link_order != NULL)
2445     section->map_tail.link_order->next = new_lo;
2446   else
2447     section->map_head.link_order = new_lo;
2448   section->map_tail.link_order = new_lo;
2449 
2450   return new_lo;
2451 }
2452 
2453 /* Default link order processing routine.  Note that we can not handle
2454    the reloc_link_order types here, since they depend upon the details
2455    of how the particular backends generates relocs.  */
2456 
2457 bool
_bfd_default_link_order(bfd * abfd,struct bfd_link_info * info,asection * sec,struct bfd_link_order * link_order)2458 _bfd_default_link_order (bfd *abfd,
2459 			 struct bfd_link_info *info,
2460 			 asection *sec,
2461 			 struct bfd_link_order *link_order)
2462 {
2463   switch (link_order->type)
2464     {
2465     case bfd_undefined_link_order:
2466     case bfd_section_reloc_link_order:
2467     case bfd_symbol_reloc_link_order:
2468     default:
2469       abort ();
2470     case bfd_indirect_link_order:
2471       return default_indirect_link_order (abfd, info, sec, link_order,
2472 					  false);
2473     case bfd_data_link_order:
2474       return default_data_link_order (abfd, info, sec, link_order);
2475     }
2476 }
2477 
2478 /* Default routine to handle a bfd_data_link_order.  */
2479 
2480 static bool
default_data_link_order(bfd * abfd,struct bfd_link_info * info,asection * sec,struct bfd_link_order * link_order)2481 default_data_link_order (bfd *abfd,
2482 			 struct bfd_link_info *info,
2483 			 asection *sec,
2484 			 struct bfd_link_order *link_order)
2485 {
2486   bfd_size_type size;
2487   size_t fill_size;
2488   bfd_byte *fill;
2489   file_ptr loc;
2490   bool result;
2491 
2492   BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0);
2493 
2494   size = link_order->size;
2495   if (size == 0)
2496     return true;
2497 
2498   fill = link_order->u.data.contents;
2499   fill_size = link_order->u.data.size;
2500   if (fill_size == 0)
2501     {
2502       fill = abfd->arch_info->fill (size, info->big_endian,
2503 				    (sec->flags & SEC_CODE) != 0);
2504       if (fill == NULL)
2505 	return false;
2506     }
2507   else if (fill_size < size)
2508     {
2509       bfd_byte *p;
2510       fill = (bfd_byte *) bfd_malloc (size);
2511       if (fill == NULL)
2512 	return false;
2513       p = fill;
2514       if (fill_size == 1)
2515 	memset (p, (int) link_order->u.data.contents[0], (size_t) size);
2516       else
2517 	{
2518 	  do
2519 	    {
2520 	      memcpy (p, link_order->u.data.contents, fill_size);
2521 	      p += fill_size;
2522 	      size -= fill_size;
2523 	    }
2524 	  while (size >= fill_size);
2525 	  if (size != 0)
2526 	    memcpy (p, link_order->u.data.contents, (size_t) size);
2527 	  size = link_order->size;
2528 	}
2529     }
2530 
2531   loc = link_order->offset * bfd_octets_per_byte (abfd, sec);
2532   result = bfd_set_section_contents (abfd, sec, fill, loc, size);
2533 
2534   if (fill != link_order->u.data.contents)
2535     free (fill);
2536   return result;
2537 }
2538 
2539 /* Default routine to handle a bfd_indirect_link_order.  */
2540 
2541 static bool
default_indirect_link_order(bfd * output_bfd,struct bfd_link_info * info,asection * output_section,struct bfd_link_order * link_order,bool generic_linker)2542 default_indirect_link_order (bfd *output_bfd,
2543 			     struct bfd_link_info *info,
2544 			     asection *output_section,
2545 			     struct bfd_link_order *link_order,
2546 			     bool generic_linker)
2547 {
2548   asection *input_section;
2549   bfd *input_bfd;
2550   bfd_byte *contents = NULL;
2551   bfd_byte *new_contents;
2552   bfd_size_type sec_size;
2553   file_ptr loc;
2554 
2555   BFD_ASSERT ((output_section->flags & SEC_HAS_CONTENTS) != 0);
2556 
2557   input_section = link_order->u.indirect.section;
2558   input_bfd = input_section->owner;
2559   if (input_section->size == 0)
2560     return true;
2561 
2562   BFD_ASSERT (input_section->output_section == output_section);
2563   BFD_ASSERT (input_section->output_offset == link_order->offset);
2564   BFD_ASSERT (input_section->size == link_order->size);
2565 
2566   if (bfd_link_relocatable (info)
2567       && input_section->reloc_count > 0
2568       && output_section->orelocation == NULL)
2569     {
2570       /* Space has not been allocated for the output relocations.
2571 	 This can happen when we are called by a specific backend
2572 	 because somebody is attempting to link together different
2573 	 types of object files.  Handling this case correctly is
2574 	 difficult, and sometimes impossible.  */
2575       _bfd_error_handler
2576 	/* xgettext:c-format */
2577 	(_("attempt to do relocatable link with %s input and %s output"),
2578 	 bfd_get_target (input_bfd), bfd_get_target (output_bfd));
2579       bfd_set_error (bfd_error_wrong_format);
2580       return false;
2581     }
2582 
2583   if (! generic_linker)
2584     {
2585       asymbol **sympp;
2586       asymbol **symppend;
2587 
2588       /* Get the canonical symbols.  The generic linker will always
2589 	 have retrieved them by this point, but we are being called by
2590 	 a specific linker, presumably because we are linking
2591 	 different types of object files together.  */
2592       if (!bfd_generic_link_read_symbols (input_bfd))
2593 	return false;
2594 
2595       /* Since we have been called by a specific linker, rather than
2596 	 the generic linker, the values of the symbols will not be
2597 	 right.  They will be the values as seen in the input file,
2598 	 not the values of the final link.  We need to fix them up
2599 	 before we can relocate the section.  */
2600       sympp = _bfd_generic_link_get_symbols (input_bfd);
2601       symppend = sympp + _bfd_generic_link_get_symcount (input_bfd);
2602       for (; sympp < symppend; sympp++)
2603 	{
2604 	  asymbol *sym;
2605 	  struct bfd_link_hash_entry *h;
2606 
2607 	  sym = *sympp;
2608 
2609 	  if ((sym->flags & (BSF_INDIRECT
2610 			     | BSF_WARNING
2611 			     | BSF_GLOBAL
2612 			     | BSF_CONSTRUCTOR
2613 			     | BSF_WEAK)) != 0
2614 	      || bfd_is_und_section (bfd_asymbol_section (sym))
2615 	      || bfd_is_com_section (bfd_asymbol_section (sym))
2616 	      || bfd_is_ind_section (bfd_asymbol_section (sym)))
2617 	    {
2618 	      /* sym->udata may have been set by
2619 		 generic_link_add_symbol_list.  */
2620 	      if (sym->udata.p != NULL)
2621 		h = (struct bfd_link_hash_entry *) sym->udata.p;
2622 	      else if (bfd_is_und_section (bfd_asymbol_section (sym)))
2623 		h = bfd_wrapped_link_hash_lookup (output_bfd, info,
2624 						  bfd_asymbol_name (sym),
2625 						  false, false, true);
2626 	      else
2627 		h = bfd_link_hash_lookup (info->hash,
2628 					  bfd_asymbol_name (sym),
2629 					  false, false, true);
2630 	      if (h != NULL)
2631 		set_symbol_from_hash (sym, h);
2632 	    }
2633 	}
2634     }
2635 
2636   if ((output_section->flags & (SEC_GROUP | SEC_LINKER_CREATED)) == SEC_GROUP
2637       && input_section->size != 0)
2638     {
2639       /* Group section contents are set by bfd_elf_set_group_contents.  */
2640       if (!output_bfd->output_has_begun)
2641 	{
2642 	  /* FIXME: This hack ensures bfd_elf_set_group_contents is called.  */
2643 	  if (!bfd_set_section_contents (output_bfd, output_section, "", 0, 1))
2644 	    goto error_return;
2645 	}
2646       new_contents = output_section->contents;
2647       BFD_ASSERT (new_contents != NULL);
2648       BFD_ASSERT (input_section->output_offset == 0);
2649     }
2650   else
2651     {
2652       /* Get and relocate the section contents.  */
2653       sec_size = (input_section->rawsize > input_section->size
2654 		  ? input_section->rawsize
2655 		  : input_section->size);
2656       contents = (bfd_byte *) bfd_malloc (sec_size);
2657       if (contents == NULL && sec_size != 0)
2658 	goto error_return;
2659       new_contents = (bfd_get_relocated_section_contents
2660 		      (output_bfd, info, link_order, contents,
2661 		       bfd_link_relocatable (info),
2662 		       _bfd_generic_link_get_symbols (input_bfd)));
2663       if (!new_contents)
2664 	goto error_return;
2665     }
2666 
2667   /* Output the section contents.  */
2668   loc = (input_section->output_offset
2669 	 * bfd_octets_per_byte (output_bfd, output_section));
2670   if (! bfd_set_section_contents (output_bfd, output_section,
2671 				  new_contents, loc, input_section->size))
2672     goto error_return;
2673 
2674   free (contents);
2675   return true;
2676 
2677  error_return:
2678   free (contents);
2679   return false;
2680 }
2681 
2682 /* A little routine to count the number of relocs in a link_order
2683    list.  */
2684 
2685 unsigned int
_bfd_count_link_order_relocs(struct bfd_link_order * link_order)2686 _bfd_count_link_order_relocs (struct bfd_link_order *link_order)
2687 {
2688   register unsigned int c;
2689   register struct bfd_link_order *l;
2690 
2691   c = 0;
2692   for (l = link_order; l != NULL; l = l->next)
2693     {
2694       if (l->type == bfd_section_reloc_link_order
2695 	  || l->type == bfd_symbol_reloc_link_order)
2696 	++c;
2697     }
2698 
2699   return c;
2700 }
2701 
2702 /*
2703 FUNCTION
2704 	bfd_link_split_section
2705 
2706 SYNOPSIS
2707 	bool bfd_link_split_section (bfd *abfd, asection *sec);
2708 
2709 DESCRIPTION
2710 	Return nonzero if @var{sec} should be split during a
2711 	reloceatable or final link.
2712 
2713 .#define bfd_link_split_section(abfd, sec) \
2714 .	BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
2715 .
2716 
2717 */
2718 
2719 bool
_bfd_generic_link_split_section(bfd * abfd ATTRIBUTE_UNUSED,asection * sec ATTRIBUTE_UNUSED)2720 _bfd_generic_link_split_section (bfd *abfd ATTRIBUTE_UNUSED,
2721 				 asection *sec ATTRIBUTE_UNUSED)
2722 {
2723   return false;
2724 }
2725 
2726 /*
2727 FUNCTION
2728 	bfd_section_already_linked
2729 
2730 SYNOPSIS
2731 	bool bfd_section_already_linked (bfd *abfd,
2732 					 asection *sec,
2733 					 struct bfd_link_info *info);
2734 
2735 DESCRIPTION
2736 	Check if @var{data} has been already linked during a reloceatable
2737 	or final link.  Return TRUE if it has.
2738 
2739 .#define bfd_section_already_linked(abfd, sec, info) \
2740 .	BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
2741 .
2742 
2743 */
2744 
2745 /* Sections marked with the SEC_LINK_ONCE flag should only be linked
2746    once into the output.  This routine checks each section, and
2747    arrange to discard it if a section of the same name has already
2748    been linked.  This code assumes that all relevant sections have the
2749    SEC_LINK_ONCE flag set; that is, it does not depend solely upon the
2750    section name.  bfd_section_already_linked is called via
2751    bfd_map_over_sections.  */
2752 
2753 /* The hash table.  */
2754 
2755 static struct bfd_hash_table _bfd_section_already_linked_table;
2756 
2757 /* Support routines for the hash table used by section_already_linked,
2758    initialize the table, traverse, lookup, fill in an entry and remove
2759    the table.  */
2760 
2761 void
bfd_section_already_linked_table_traverse(bool (* func)(struct bfd_section_already_linked_hash_entry *,void *),void * info)2762 bfd_section_already_linked_table_traverse
2763   (bool (*func) (struct bfd_section_already_linked_hash_entry *, void *),
2764    void *info)
2765 {
2766   bfd_hash_traverse (&_bfd_section_already_linked_table,
2767 		     (bool (*) (struct bfd_hash_entry *, void *)) func,
2768 		     info);
2769 }
2770 
2771 struct bfd_section_already_linked_hash_entry *
bfd_section_already_linked_table_lookup(const char * name)2772 bfd_section_already_linked_table_lookup (const char *name)
2773 {
2774   return ((struct bfd_section_already_linked_hash_entry *)
2775 	  bfd_hash_lookup (&_bfd_section_already_linked_table, name,
2776 			   true, false));
2777 }
2778 
2779 bool
bfd_section_already_linked_table_insert(struct bfd_section_already_linked_hash_entry * already_linked_list,asection * sec)2780 bfd_section_already_linked_table_insert
2781   (struct bfd_section_already_linked_hash_entry *already_linked_list,
2782    asection *sec)
2783 {
2784   struct bfd_section_already_linked *l;
2785 
2786   /* Allocate the memory from the same obstack as the hash table is
2787      kept in.  */
2788   l = (struct bfd_section_already_linked *)
2789       bfd_hash_allocate (&_bfd_section_already_linked_table, sizeof *l);
2790   if (l == NULL)
2791     return false;
2792   l->sec = sec;
2793   l->next = already_linked_list->entry;
2794   already_linked_list->entry = l;
2795   return true;
2796 }
2797 
2798 static struct bfd_hash_entry *
already_linked_newfunc(struct bfd_hash_entry * entry ATTRIBUTE_UNUSED,struct bfd_hash_table * table,const char * string ATTRIBUTE_UNUSED)2799 already_linked_newfunc (struct bfd_hash_entry *entry ATTRIBUTE_UNUSED,
2800 			struct bfd_hash_table *table,
2801 			const char *string ATTRIBUTE_UNUSED)
2802 {
2803   struct bfd_section_already_linked_hash_entry *ret =
2804     (struct bfd_section_already_linked_hash_entry *)
2805       bfd_hash_allocate (table, sizeof *ret);
2806 
2807   if (ret == NULL)
2808     return NULL;
2809 
2810   ret->entry = NULL;
2811 
2812   return &ret->root;
2813 }
2814 
2815 bool
bfd_section_already_linked_table_init(void)2816 bfd_section_already_linked_table_init (void)
2817 {
2818   return bfd_hash_table_init_n (&_bfd_section_already_linked_table,
2819 				already_linked_newfunc,
2820 				sizeof (struct bfd_section_already_linked_hash_entry),
2821 				42);
2822 }
2823 
2824 void
bfd_section_already_linked_table_free(void)2825 bfd_section_already_linked_table_free (void)
2826 {
2827   bfd_hash_table_free (&_bfd_section_already_linked_table);
2828 }
2829 
2830 /* Report warnings as appropriate for duplicate section SEC.
2831    Return FALSE if we decide to keep SEC after all.  */
2832 
2833 bool
_bfd_handle_already_linked(asection * sec,struct bfd_section_already_linked * l,struct bfd_link_info * info)2834 _bfd_handle_already_linked (asection *sec,
2835 			    struct bfd_section_already_linked *l,
2836 			    struct bfd_link_info *info)
2837 {
2838   switch (sec->flags & SEC_LINK_DUPLICATES)
2839     {
2840     default:
2841       abort ();
2842 
2843     case SEC_LINK_DUPLICATES_DISCARD:
2844       /* If we found an LTO IR match for this comdat group on
2845 	 the first pass, replace it with the LTO output on the
2846 	 second pass.  We can't simply choose real object
2847 	 files over IR because the first pass may contain a
2848 	 mix of LTO and normal objects and we must keep the
2849 	 first match, be it IR or real.  */
2850       if (sec->owner->lto_output
2851 	  && (l->sec->owner->flags & BFD_PLUGIN) != 0)
2852 	{
2853 	  l->sec = sec;
2854 	  return false;
2855 	}
2856       break;
2857 
2858     case SEC_LINK_DUPLICATES_ONE_ONLY:
2859       info->callbacks->einfo
2860 	/* xgettext:c-format */
2861 	(_("%pB: ignoring duplicate section `%pA'\n"),
2862 	 sec->owner, sec);
2863       break;
2864 
2865     case SEC_LINK_DUPLICATES_SAME_SIZE:
2866       if ((l->sec->owner->flags & BFD_PLUGIN) != 0)
2867 	;
2868       else if (sec->size != l->sec->size)
2869 	info->callbacks->einfo
2870 	  /* xgettext:c-format */
2871 	  (_("%pB: duplicate section `%pA' has different size\n"),
2872 	   sec->owner, sec);
2873       break;
2874 
2875     case SEC_LINK_DUPLICATES_SAME_CONTENTS:
2876       if ((l->sec->owner->flags & BFD_PLUGIN) != 0)
2877 	;
2878       else if (sec->size != l->sec->size)
2879 	info->callbacks->einfo
2880 	  /* xgettext:c-format */
2881 	  (_("%pB: duplicate section `%pA' has different size\n"),
2882 	   sec->owner, sec);
2883       else if (sec->size != 0)
2884 	{
2885 	  bfd_byte *sec_contents, *l_sec_contents = NULL;
2886 
2887 	  if (!bfd_malloc_and_get_section (sec->owner, sec, &sec_contents))
2888 	    info->callbacks->einfo
2889 	      /* xgettext:c-format */
2890 	      (_("%pB: could not read contents of section `%pA'\n"),
2891 	       sec->owner, sec);
2892 	  else if (!bfd_malloc_and_get_section (l->sec->owner, l->sec,
2893 						&l_sec_contents))
2894 	    info->callbacks->einfo
2895 	      /* xgettext:c-format */
2896 	      (_("%pB: could not read contents of section `%pA'\n"),
2897 	       l->sec->owner, l->sec);
2898 	  else if (memcmp (sec_contents, l_sec_contents, sec->size) != 0)
2899 	    info->callbacks->einfo
2900 	      /* xgettext:c-format */
2901 	      (_("%pB: duplicate section `%pA' has different contents\n"),
2902 	       sec->owner, sec);
2903 
2904 	  free (sec_contents);
2905 	  free (l_sec_contents);
2906 	}
2907       break;
2908     }
2909 
2910   /* Set the output_section field so that lang_add_section
2911      does not create a lang_input_section structure for this
2912      section.  Since there might be a symbol in the section
2913      being discarded, we must retain a pointer to the section
2914      which we are really going to use.  */
2915   sec->output_section = bfd_abs_section_ptr;
2916   sec->kept_section = l->sec;
2917   return true;
2918 }
2919 
2920 /* This is used on non-ELF inputs.  */
2921 
2922 bool
_bfd_generic_section_already_linked(bfd * abfd ATTRIBUTE_UNUSED,asection * sec,struct bfd_link_info * info)2923 _bfd_generic_section_already_linked (bfd *abfd ATTRIBUTE_UNUSED,
2924 				     asection *sec,
2925 				     struct bfd_link_info *info)
2926 {
2927   const char *name;
2928   struct bfd_section_already_linked *l;
2929   struct bfd_section_already_linked_hash_entry *already_linked_list;
2930 
2931   if ((sec->flags & SEC_LINK_ONCE) == 0)
2932     return false;
2933 
2934   /* The generic linker doesn't handle section groups.  */
2935   if ((sec->flags & SEC_GROUP) != 0)
2936     return false;
2937 
2938   /* FIXME: When doing a relocatable link, we may have trouble
2939      copying relocations in other sections that refer to local symbols
2940      in the section being discarded.  Those relocations will have to
2941      be converted somehow; as of this writing I'm not sure that any of
2942      the backends handle that correctly.
2943 
2944      It is tempting to instead not discard link once sections when
2945      doing a relocatable link (technically, they should be discarded
2946      whenever we are building constructors).  However, that fails,
2947      because the linker winds up combining all the link once sections
2948      into a single large link once section, which defeats the purpose
2949      of having link once sections in the first place.  */
2950 
2951   name = bfd_section_name (sec);
2952 
2953   already_linked_list = bfd_section_already_linked_table_lookup (name);
2954 
2955   l = already_linked_list->entry;
2956   if (l != NULL)
2957     {
2958       /* The section has already been linked.  See if we should
2959 	 issue a warning.  */
2960       return _bfd_handle_already_linked (sec, l, info);
2961     }
2962 
2963   /* This is the first section with this name.  Record it.  */
2964   if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
2965     info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
2966   return false;
2967 }
2968 
2969 /* Choose a neighbouring section to S in OBFD that will be output, or
2970    the absolute section if ADDR is out of bounds of the neighbours.  */
2971 
2972 asection *
_bfd_nearby_section(bfd * obfd,asection * s,bfd_vma addr)2973 _bfd_nearby_section (bfd *obfd, asection *s, bfd_vma addr)
2974 {
2975   asection *next, *prev, *best;
2976 
2977   /* Find preceding kept section.  */
2978   for (prev = s->prev; prev != NULL; prev = prev->prev)
2979     if ((prev->flags & SEC_EXCLUDE) == 0
2980 	&& !bfd_section_removed_from_list (obfd, prev))
2981       break;
2982 
2983   /* Find following kept section.  Start at prev->next because
2984      other sections may have been added after S was removed.  */
2985   if (s->prev != NULL)
2986     next = s->prev->next;
2987   else
2988     next = s->owner->sections;
2989   for (; next != NULL; next = next->next)
2990     if ((next->flags & SEC_EXCLUDE) == 0
2991 	&& !bfd_section_removed_from_list (obfd, next))
2992       break;
2993 
2994   /* Choose better of two sections, based on flags.  The idea
2995      is to choose a section that will be in the same segment
2996      as S would have been if it was kept.  */
2997   best = next;
2998   if (prev == NULL)
2999     {
3000       if (next == NULL)
3001 	best = bfd_abs_section_ptr;
3002     }
3003   else if (next == NULL)
3004     best = prev;
3005   else if (((prev->flags ^ next->flags)
3006 	    & (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_LOAD)) != 0)
3007     {
3008       if (((next->flags ^ s->flags)
3009 	   & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0
3010 	  /* We prefer to choose a loaded section.  Section S
3011 	     doesn't have SEC_LOAD set (it being excluded, that
3012 	     part of the flag processing didn't happen) so we
3013 	     can't compare that flag to those of NEXT and PREV.  */
3014 	  || ((prev->flags & SEC_LOAD) != 0
3015 	      && (next->flags & SEC_LOAD) == 0))
3016 	best = prev;
3017     }
3018   else if (((prev->flags ^ next->flags) & SEC_READONLY) != 0)
3019     {
3020       if (((next->flags ^ s->flags) & SEC_READONLY) != 0)
3021 	best = prev;
3022     }
3023   else if (((prev->flags ^ next->flags) & SEC_CODE) != 0)
3024     {
3025       if (((next->flags ^ s->flags) & SEC_CODE) != 0)
3026 	best = prev;
3027     }
3028   else
3029     {
3030       /* Flags we care about are the same.  Prefer the following
3031 	 section if that will result in a positive valued sym.  */
3032       if (addr < next->vma)
3033 	best = prev;
3034     }
3035 
3036   return best;
3037 }
3038 
3039 /* Convert symbols in excluded output sections to use a kept section.  */
3040 
3041 static bool
fix_syms(struct bfd_link_hash_entry * h,void * data)3042 fix_syms (struct bfd_link_hash_entry *h, void *data)
3043 {
3044   bfd *obfd = (bfd *) data;
3045 
3046   if (h->type == bfd_link_hash_defined
3047       || h->type == bfd_link_hash_defweak)
3048     {
3049       asection *s = h->u.def.section;
3050       if (s != NULL
3051 	  && s->output_section != NULL
3052 	  && (s->output_section->flags & SEC_EXCLUDE) != 0
3053 	  && bfd_section_removed_from_list (obfd, s->output_section))
3054 	{
3055 	  asection *op;
3056 
3057 	  h->u.def.value += s->output_offset + s->output_section->vma;
3058 	  op = _bfd_nearby_section (obfd, s->output_section, h->u.def.value);
3059 	  h->u.def.value -= op->vma;
3060 	  h->u.def.section = op;
3061 	}
3062     }
3063 
3064   return true;
3065 }
3066 
3067 void
_bfd_fix_excluded_sec_syms(bfd * obfd,struct bfd_link_info * info)3068 _bfd_fix_excluded_sec_syms (bfd *obfd, struct bfd_link_info *info)
3069 {
3070   bfd_link_hash_traverse (info->hash, fix_syms, obfd);
3071 }
3072 
3073 /*
3074 FUNCTION
3075 	bfd_generic_define_common_symbol
3076 
3077 SYNOPSIS
3078 	bool bfd_generic_define_common_symbol
3079 	  (bfd *output_bfd, struct bfd_link_info *info,
3080 	   struct bfd_link_hash_entry *h);
3081 
3082 DESCRIPTION
3083 	Convert common symbol @var{h} into a defined symbol.
3084 	Return TRUE on success and FALSE on failure.
3085 
3086 .#define bfd_define_common_symbol(output_bfd, info, h) \
3087 .	BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
3088 .
3089 */
3090 
3091 bool
bfd_generic_define_common_symbol(bfd * output_bfd,struct bfd_link_info * info ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * h)3092 bfd_generic_define_common_symbol (bfd *output_bfd,
3093 				  struct bfd_link_info *info ATTRIBUTE_UNUSED,
3094 				  struct bfd_link_hash_entry *h)
3095 {
3096   unsigned int power_of_two;
3097   bfd_vma alignment, size;
3098   asection *section;
3099 
3100   BFD_ASSERT (h != NULL && h->type == bfd_link_hash_common);
3101 
3102   size = h->u.c.size;
3103   power_of_two = h->u.c.p->alignment_power;
3104   section = h->u.c.p->section;
3105 
3106   /* Increase the size of the section to align the common symbol.
3107      The alignment must be a power of two.  But if the section does
3108      not have any alignment requirement then do not increase the
3109      alignment unnecessarily.  */
3110   if (power_of_two)
3111     alignment = bfd_octets_per_byte (output_bfd, section) << power_of_two;
3112   else
3113     alignment = 1;
3114   BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment);
3115   section->size += alignment - 1;
3116   section->size &= -alignment;
3117 
3118   /* Adjust the section's overall alignment if necessary.  */
3119   if (power_of_two > section->alignment_power)
3120     section->alignment_power = power_of_two;
3121 
3122   /* Change the symbol from common to defined.  */
3123   h->type = bfd_link_hash_defined;
3124   h->u.def.section = section;
3125   h->u.def.value = section->size;
3126 
3127   /* Increase the size of the section.  */
3128   section->size += size;
3129 
3130   /* Make sure the section is allocated in memory, and make sure that
3131      it is no longer a common section.  */
3132   section->flags |= SEC_ALLOC;
3133   section->flags &= ~(SEC_IS_COMMON | SEC_HAS_CONTENTS);
3134   return true;
3135 }
3136 
3137 /*
3138 FUNCTION
3139 	_bfd_generic_link_hide_symbol
3140 
3141 SYNOPSIS
3142 	void _bfd_generic_link_hide_symbol
3143 	  (bfd *output_bfd, struct bfd_link_info *info,
3144 	   struct bfd_link_hash_entry *h);
3145 
3146 DESCRIPTION
3147 	Hide symbol @var{h}.
3148 	This is an internal function.  It should not be called from
3149 	outside the BFD library.
3150 
3151 .#define bfd_link_hide_symbol(output_bfd, info, h) \
3152 .	BFD_SEND (output_bfd, _bfd_link_hide_symbol, (output_bfd, info, h))
3153 .
3154 */
3155 
3156 void
_bfd_generic_link_hide_symbol(bfd * output_bfd ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * h ATTRIBUTE_UNUSED)3157 _bfd_generic_link_hide_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
3158 			       struct bfd_link_info *info ATTRIBUTE_UNUSED,
3159 			       struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED)
3160 {
3161 }
3162 
3163 /*
3164 FUNCTION
3165 	bfd_generic_define_start_stop
3166 
3167 SYNOPSIS
3168 	struct bfd_link_hash_entry *bfd_generic_define_start_stop
3169 	  (struct bfd_link_info *info,
3170 	   const char *symbol, asection *sec);
3171 
3172 DESCRIPTION
3173 	Define a __start, __stop, .startof. or .sizeof. symbol.
3174 	Return the symbol or NULL if no such undefined symbol exists.
3175 
3176 .#define bfd_define_start_stop(output_bfd, info, symbol, sec) \
3177 .	BFD_SEND (output_bfd, _bfd_define_start_stop, (info, symbol, sec))
3178 .
3179 */
3180 
3181 struct bfd_link_hash_entry *
bfd_generic_define_start_stop(struct bfd_link_info * info,const char * symbol,asection * sec)3182 bfd_generic_define_start_stop (struct bfd_link_info *info,
3183 			       const char *symbol, asection *sec)
3184 {
3185   struct bfd_link_hash_entry *h;
3186 
3187   h = bfd_link_hash_lookup (info->hash, symbol, false, false, true);
3188   if (h != NULL
3189       && !h->ldscript_def
3190       && (h->type == bfd_link_hash_undefined
3191 	  || h->type == bfd_link_hash_undefweak))
3192     {
3193       h->type = bfd_link_hash_defined;
3194       h->u.def.section = sec;
3195       h->u.def.value = 0;
3196       return h;
3197     }
3198   return NULL;
3199 }
3200 
3201 /*
3202 FUNCTION
3203 	bfd_find_version_for_sym
3204 
3205 SYNOPSIS
3206 	struct bfd_elf_version_tree * bfd_find_version_for_sym
3207 	  (struct bfd_elf_version_tree *verdefs,
3208 	   const char *sym_name, bool *hide);
3209 
3210 DESCRIPTION
3211 	Search an elf version script tree for symbol versioning
3212 	info and export / don't-export status for a given symbol.
3213 	Return non-NULL on success and NULL on failure; also sets
3214 	the output @samp{hide} boolean parameter.
3215 
3216 */
3217 
3218 struct bfd_elf_version_tree *
bfd_find_version_for_sym(struct bfd_elf_version_tree * verdefs,const char * sym_name,bool * hide)3219 bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs,
3220 			  const char *sym_name,
3221 			  bool *hide)
3222 {
3223   struct bfd_elf_version_tree *t;
3224   struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver;
3225   struct bfd_elf_version_tree *star_local_ver, *star_global_ver;
3226 
3227   local_ver = NULL;
3228   global_ver = NULL;
3229   star_local_ver = NULL;
3230   star_global_ver = NULL;
3231   exist_ver = NULL;
3232   for (t = verdefs; t != NULL; t = t->next)
3233     {
3234       if (t->globals.list != NULL)
3235 	{
3236 	  struct bfd_elf_version_expr *d = NULL;
3237 
3238 	  while ((d = (*t->match) (&t->globals, d, sym_name)) != NULL)
3239 	    {
3240 	      if (d->literal || strcmp (d->pattern, "*") != 0)
3241 		global_ver = t;
3242 	      else
3243 		star_global_ver = t;
3244 	      if (d->symver)
3245 		exist_ver = t;
3246 	      d->script = 1;
3247 	      /* If the match is a wildcard pattern, keep looking for
3248 		 a more explicit, perhaps even local, match.  */
3249 	      if (d->literal)
3250 		break;
3251 	    }
3252 
3253 	  if (d != NULL)
3254 	    break;
3255 	}
3256 
3257       if (t->locals.list != NULL)
3258 	{
3259 	  struct bfd_elf_version_expr *d = NULL;
3260 
3261 	  while ((d = (*t->match) (&t->locals, d, sym_name)) != NULL)
3262 	    {
3263 	      if (d->literal || strcmp (d->pattern, "*") != 0)
3264 		local_ver = t;
3265 	      else
3266 		star_local_ver = t;
3267 	      /* If the match is a wildcard pattern, keep looking for
3268 		 a more explicit, perhaps even global, match.  */
3269 	      if (d->literal)
3270 		{
3271 		  /* An exact match overrides a global wildcard.  */
3272 		  global_ver = NULL;
3273 		  star_global_ver = NULL;
3274 		  break;
3275 		}
3276 	    }
3277 
3278 	  if (d != NULL)
3279 	    break;
3280 	}
3281     }
3282 
3283   if (global_ver == NULL && local_ver == NULL)
3284     global_ver = star_global_ver;
3285 
3286   if (global_ver != NULL)
3287     {
3288       /* If we already have a versioned symbol that matches the
3289 	 node for this symbol, then we don't want to create a
3290 	 duplicate from the unversioned symbol.  Instead hide the
3291 	 unversioned symbol.  */
3292       *hide = exist_ver == global_ver;
3293       return global_ver;
3294     }
3295 
3296   if (local_ver == NULL)
3297     local_ver = star_local_ver;
3298 
3299   if (local_ver != NULL)
3300     {
3301       *hide = true;
3302       return local_ver;
3303     }
3304 
3305   return NULL;
3306 }
3307 
3308 /*
3309 FUNCTION
3310 	bfd_hide_sym_by_version
3311 
3312 SYNOPSIS
3313 	bool bfd_hide_sym_by_version
3314 	  (struct bfd_elf_version_tree *verdefs, const char *sym_name);
3315 
3316 DESCRIPTION
3317 	Search an elf version script tree for symbol versioning
3318 	info for a given symbol.  Return TRUE if the symbol is hidden.
3319 
3320 */
3321 
3322 bool
bfd_hide_sym_by_version(struct bfd_elf_version_tree * verdefs,const char * sym_name)3323 bfd_hide_sym_by_version (struct bfd_elf_version_tree *verdefs,
3324 			 const char *sym_name)
3325 {
3326   bool hidden = false;
3327   bfd_find_version_for_sym (verdefs, sym_name, &hidden);
3328   return hidden;
3329 }
3330 
3331 /*
3332 FUNCTION
3333 	bfd_link_check_relocs
3334 
3335 SYNOPSIS
3336 	bool bfd_link_check_relocs
3337 	  (bfd *abfd, struct bfd_link_info *info);
3338 
3339 DESCRIPTION
3340 	Checks the relocs in ABFD for validity.
3341 	Does not execute the relocs.
3342 	Return TRUE if everything is OK, FALSE otherwise.
3343 	This is the external entry point to this code.
3344 */
3345 
3346 bool
bfd_link_check_relocs(bfd * abfd,struct bfd_link_info * info)3347 bfd_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
3348 {
3349   return BFD_SEND (abfd, _bfd_link_check_relocs, (abfd, info));
3350 }
3351 
3352 /*
3353 FUNCTION
3354 	_bfd_generic_link_check_relocs
3355 
3356 SYNOPSIS
3357 	bool _bfd_generic_link_check_relocs
3358 	  (bfd *abfd, struct bfd_link_info *info);
3359 
3360 DESCRIPTION
3361 	Stub function for targets that do not implement reloc checking.
3362 	Return TRUE.
3363 	This is an internal function.  It should not be called from
3364 	outside the BFD library.
3365 */
3366 
3367 bool
_bfd_generic_link_check_relocs(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED)3368 _bfd_generic_link_check_relocs (bfd *abfd ATTRIBUTE_UNUSED,
3369 				struct bfd_link_info *info ATTRIBUTE_UNUSED)
3370 {
3371   return true;
3372 }
3373 
3374 /*
3375 FUNCTION
3376 	bfd_merge_private_bfd_data
3377 
3378 SYNOPSIS
3379 	bool bfd_merge_private_bfd_data
3380 	  (bfd *ibfd, struct bfd_link_info *info);
3381 
3382 DESCRIPTION
3383 	Merge private BFD information from the BFD @var{ibfd} to the
3384 	the output file BFD when linking.  Return <<TRUE>> on success,
3385 	<<FALSE>> on error.  Possible error returns are:
3386 
3387 	o <<bfd_error_no_memory>> -
3388 	Not enough memory exists to create private data for @var{obfd}.
3389 
3390 .#define bfd_merge_private_bfd_data(ibfd, info) \
3391 .	BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
3392 .		  (ibfd, info))
3393 */
3394 
3395 /*
3396 INTERNAL_FUNCTION
3397 	_bfd_generic_verify_endian_match
3398 
3399 SYNOPSIS
3400 	bool _bfd_generic_verify_endian_match
3401 	  (bfd *ibfd, struct bfd_link_info *info);
3402 
3403 DESCRIPTION
3404 	Can be used from / for bfd_merge_private_bfd_data to check that
3405 	endianness matches between input and output file.  Returns
3406 	TRUE for a match, otherwise returns FALSE and emits an error.
3407 */
3408 
3409 bool
_bfd_generic_verify_endian_match(bfd * ibfd,struct bfd_link_info * info)3410 _bfd_generic_verify_endian_match (bfd *ibfd, struct bfd_link_info *info)
3411 {
3412   bfd *obfd = info->output_bfd;
3413 
3414   if (ibfd->xvec->byteorder != obfd->xvec->byteorder
3415       && ibfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN
3416       && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
3417     {
3418       if (bfd_big_endian (ibfd))
3419 	_bfd_error_handler (_("%pB: compiled for a big endian system "
3420 			      "and target is little endian"), ibfd);
3421       else
3422 	_bfd_error_handler (_("%pB: compiled for a little endian system "
3423 			      "and target is big endian"), ibfd);
3424       bfd_set_error (bfd_error_wrong_format);
3425       return false;
3426     }
3427 
3428   return true;
3429 }
3430 
3431 int
_bfd_nolink_sizeof_headers(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED)3432 _bfd_nolink_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
3433 			    struct bfd_link_info *info ATTRIBUTE_UNUSED)
3434 {
3435   return 0;
3436 }
3437 
3438 bool
_bfd_nolink_bfd_relax_section(bfd * abfd,asection * section ATTRIBUTE_UNUSED,struct bfd_link_info * link_info ATTRIBUTE_UNUSED,bool * again ATTRIBUTE_UNUSED)3439 _bfd_nolink_bfd_relax_section (bfd *abfd,
3440 			       asection *section ATTRIBUTE_UNUSED,
3441 			       struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
3442 			       bool *again ATTRIBUTE_UNUSED)
3443 {
3444   return _bfd_bool_bfd_false_error (abfd);
3445 }
3446 
3447 bfd_byte *
_bfd_nolink_bfd_get_relocated_section_contents(bfd * abfd,struct bfd_link_info * link_info ATTRIBUTE_UNUSED,struct bfd_link_order * link_order ATTRIBUTE_UNUSED,bfd_byte * data ATTRIBUTE_UNUSED,bool relocatable ATTRIBUTE_UNUSED,asymbol ** symbols ATTRIBUTE_UNUSED)3448 _bfd_nolink_bfd_get_relocated_section_contents
3449     (bfd *abfd,
3450      struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
3451      struct bfd_link_order *link_order ATTRIBUTE_UNUSED,
3452      bfd_byte *data ATTRIBUTE_UNUSED,
3453      bool relocatable ATTRIBUTE_UNUSED,
3454      asymbol **symbols ATTRIBUTE_UNUSED)
3455 {
3456   return (bfd_byte *) _bfd_ptr_bfd_null_error (abfd);
3457 }
3458 
3459 bool
_bfd_nolink_bfd_lookup_section_flags(struct bfd_link_info * info ATTRIBUTE_UNUSED,struct flag_info * flaginfo ATTRIBUTE_UNUSED,asection * section)3460 _bfd_nolink_bfd_lookup_section_flags
3461     (struct bfd_link_info *info ATTRIBUTE_UNUSED,
3462      struct flag_info *flaginfo ATTRIBUTE_UNUSED,
3463      asection *section)
3464 {
3465   return _bfd_bool_bfd_false_error (section->owner);
3466 }
3467 
3468 bool
_bfd_nolink_bfd_is_group_section(bfd * abfd,const asection * sec ATTRIBUTE_UNUSED)3469 _bfd_nolink_bfd_is_group_section (bfd *abfd,
3470 				  const asection *sec ATTRIBUTE_UNUSED)
3471 {
3472   return _bfd_bool_bfd_false_error (abfd);
3473 }
3474 
3475 const char *
_bfd_nolink_bfd_group_name(bfd * abfd,const asection * sec ATTRIBUTE_UNUSED)3476 _bfd_nolink_bfd_group_name (bfd *abfd,
3477 			    const asection *sec ATTRIBUTE_UNUSED)
3478 {
3479   return _bfd_ptr_bfd_null_error (abfd);
3480 }
3481 
3482 bool
_bfd_nolink_bfd_discard_group(bfd * abfd,asection * sec ATTRIBUTE_UNUSED)3483 _bfd_nolink_bfd_discard_group (bfd *abfd, asection *sec ATTRIBUTE_UNUSED)
3484 {
3485   return _bfd_bool_bfd_false_error (abfd);
3486 }
3487 
3488 struct bfd_link_hash_table *
_bfd_nolink_bfd_link_hash_table_create(bfd * abfd)3489 _bfd_nolink_bfd_link_hash_table_create (bfd *abfd)
3490 {
3491   return (struct bfd_link_hash_table *) _bfd_ptr_bfd_null_error (abfd);
3492 }
3493 
3494 void
_bfd_nolink_bfd_link_just_syms(asection * sec ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED)3495 _bfd_nolink_bfd_link_just_syms (asection *sec ATTRIBUTE_UNUSED,
3496 				struct bfd_link_info *info ATTRIBUTE_UNUSED)
3497 {
3498 }
3499 
3500 void
_bfd_nolink_bfd_copy_link_hash_symbol_type(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * from ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * to ATTRIBUTE_UNUSED)3501 _bfd_nolink_bfd_copy_link_hash_symbol_type
3502     (bfd *abfd ATTRIBUTE_UNUSED,
3503      struct bfd_link_hash_entry *from ATTRIBUTE_UNUSED,
3504      struct bfd_link_hash_entry *to ATTRIBUTE_UNUSED)
3505 {
3506 }
3507 
3508 bool
_bfd_nolink_bfd_link_split_section(bfd * abfd,asection * sec ATTRIBUTE_UNUSED)3509 _bfd_nolink_bfd_link_split_section (bfd *abfd, asection *sec ATTRIBUTE_UNUSED)
3510 {
3511   return _bfd_bool_bfd_false_error (abfd);
3512 }
3513 
3514 bool
_bfd_nolink_section_already_linked(bfd * abfd,asection * sec ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED)3515 _bfd_nolink_section_already_linked (bfd *abfd,
3516 				    asection *sec ATTRIBUTE_UNUSED,
3517 				    struct bfd_link_info *info ATTRIBUTE_UNUSED)
3518 {
3519   return _bfd_bool_bfd_false_error (abfd);
3520 }
3521 
3522 bool
_bfd_nolink_bfd_define_common_symbol(bfd * abfd,struct bfd_link_info * info ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * h ATTRIBUTE_UNUSED)3523 _bfd_nolink_bfd_define_common_symbol
3524     (bfd *abfd,
3525      struct bfd_link_info *info ATTRIBUTE_UNUSED,
3526      struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED)
3527 {
3528   return _bfd_bool_bfd_false_error (abfd);
3529 }
3530 
3531 struct bfd_link_hash_entry *
_bfd_nolink_bfd_define_start_stop(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name ATTRIBUTE_UNUSED,asection * sec)3532 _bfd_nolink_bfd_define_start_stop (struct bfd_link_info *info ATTRIBUTE_UNUSED,
3533 				   const char *name ATTRIBUTE_UNUSED,
3534 				   asection *sec)
3535 {
3536   return (struct bfd_link_hash_entry *) _bfd_ptr_bfd_null_error (sec->owner);
3537 }
3538