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