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