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