Merge from vendor branch OPENSSH:
[dragonfly.git] / contrib / binutils / bfd / linker.c
1 /* linker.c -- BFD linker routines
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
3    Free Software Foundation, Inc.
4    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
5
6 This file is part of BFD, the Binary File Descriptor library.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
21
22 #include "bfd.h"
23 #include "sysdep.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 relocateable
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 <<creator>>
153         field of the hash table must be checked to make sure that the
154         hash table was 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 <<creator>> field 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.
225
226 @findex _bfd_generic_link_add_archive_symbols
227         In most cases the work of looking through the symbols in the
228         archive should be done by the
229         <<_bfd_generic_link_add_archive_symbols>> function.  This
230         function builds a hash table from the archive symbol table and
231         looks through the list of undefined symbols to see which
232         elements should be included.
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.
237
238         The function passed to
239         <<_bfd_generic_link_add_archive_symbols>> must read the
240         symbols of the archive element and decide whether the archive
241         element should be included in the link.  If the element is to
242         be included, the <<add_archive_element>> linker callback
243         routine must be called with the element as an argument, and
244         the elements symbols must be added to the linker hash table
245         just as though the element had itself been passed to the
246         <<_bfd_link_add_symbols>> function.
247
248         When the a.out <<_bfd_link_add_symbols>> function receives an
249         archive, it calls <<_bfd_generic_link_add_archive_symbols>>
250         passing <<aout_link_check_archive_element>> as the function
251         argument. <<aout_link_check_archive_element>> calls
252         <<aout_link_check_ar_symbols>>.  If the latter decides to add
253         the element (an element is only added if it provides a real,
254         non-common, definition for a previously undefined or common
255         symbol) it calls the <<add_archive_element>> callback and then
256         <<aout_link_check_archive_element>> calls
257         <<aout_link_add_symbols>> to actually add the symbols to the
258         linker hash table.
259
260         The ECOFF back end is unusual in that it does not normally
261         call <<_bfd_generic_link_add_archive_symbols>>, because ECOFF
262         archives already contain a hash table of symbols.  The ECOFF
263         back end searches the archive itself to avoid the overhead of
264         creating a new hash table.
265
266 INODE
267 Performing the Final Link, , Adding Symbols to the Hash Table, Linker Functions
268 SUBSECTION
269         Performing the final link
270
271 @cindex _bfd_link_final_link in target vector
272 @cindex target vector (_bfd_final_link)
273         When all the input files have been processed, the linker calls
274         the <<_bfd_final_link>> entry point of the output BFD.  This
275         routine is responsible for producing the final output file,
276         which has several aspects.  It must relocate the contents of
277         the input sections and copy the data into the output sections.
278         It must build an output symbol table including any local
279         symbols from the input files and the global symbols from the
280         hash table.  When producing relocateable output, it must
281         modify the input relocs and write them into the output file.
282         There may also be object format dependent work to be done.
283
284         The linker will also call the <<write_object_contents>> entry
285         point when the BFD is closed.  The two entry points must work
286         together in order to produce the correct output file.
287
288         The details of how this works are inevitably dependent upon
289         the specific object file format.  The a.out
290         <<_bfd_final_link>> routine is <<NAME(aout,final_link)>>.
291
292 @menu
293 @* Information provided by the linker::
294 @* Relocating the section contents::
295 @* Writing the symbol table::
296 @end menu
297
298 INODE
299 Information provided by the linker, Relocating the section contents, Performing the Final Link, Performing the Final Link
300 SUBSUBSECTION
301         Information provided by the linker
302
303         Before the linker calls the <<_bfd_final_link>> entry point,
304         it sets up some data structures for the function to use.
305
306         The <<input_bfds>> field of the <<bfd_link_info>> structure
307         will point to a list of all the input files included in the
308         link.  These files are linked through the <<link_next>> field
309         of the <<bfd>> structure.
310
311         Each section in the output file will have a list of
312         <<link_order>> structures attached to the <<link_order_head>>
313         field (the <<link_order>> structure is defined in
314         <<bfdlink.h>>).  These structures describe how to create the
315         contents of the output section in terms of the contents of
316         various input sections, fill constants, and, eventually, other
317         types of information.  They also describe relocs that must be
318         created by the BFD backend, but do not correspond to any input
319         file; this is used to support -Ur, which builds constructors
320         while generating a relocateable object file.
321
322 INODE
323 Relocating the section contents, Writing the symbol table, Information provided by the linker, Performing the Final Link
324 SUBSUBSECTION
325         Relocating the section contents
326
327         The <<_bfd_final_link>> function should look through the
328         <<link_order>> structures attached to each section of the
329         output file.  Each <<link_order>> structure should either be
330         handled specially, or it should be passed to the function
331         <<_bfd_default_link_order>> which will do the right thing
332         (<<_bfd_default_link_order>> is defined in <<linker.c>>).
333
334         For efficiency, a <<link_order>> of type
335         <<bfd_indirect_link_order>> whose associated section belongs
336         to a BFD of the same format as the output BFD must be handled
337         specially.  This type of <<link_order>> describes part of an
338         output section in terms of a section belonging to one of the
339         input files.  The <<_bfd_final_link>> function should read the
340         contents of the section and any associated relocs, apply the
341         relocs to the section contents, and write out the modified
342         section contents.  If performing a relocateable link, the
343         relocs themselves must also be modified and written out.
344
345 @findex _bfd_relocate_contents
346 @findex _bfd_final_link_relocate
347         The functions <<_bfd_relocate_contents>> and
348         <<_bfd_final_link_relocate>> provide some general support for
349         performing the actual relocations, notably overflow checking.
350         Their arguments include information about the symbol the
351         relocation is against and a <<reloc_howto_type>> argument
352         which describes the relocation to perform.  These functions
353         are defined in <<reloc.c>>.
354
355         The a.out function which handles reading, relocating, and
356         writing section contents is <<aout_link_input_section>>.  The
357         actual relocation is done in <<aout_link_input_section_std>>
358         and <<aout_link_input_section_ext>>.
359
360 INODE
361 Writing the symbol table, , Relocating the section contents, Performing the Final Link
362 SUBSUBSECTION
363         Writing the symbol table
364
365         The <<_bfd_final_link>> function must gather all the symbols
366         in the input files and write them out.  It must also write out
367         all the symbols in the global hash table.  This must be
368         controlled by the <<strip>> and <<discard>> fields of the
369         <<bfd_link_info>> structure.
370
371         The local symbols of the input files will not have been
372         entered into the linker hash table.  The <<_bfd_final_link>>
373         routine must consider each input file and include the symbols
374         in the output file.  It may be convenient to do this when
375         looking through the <<link_order>> structures, or it may be
376         done by stepping through the <<input_bfds>> list.
377
378         The <<_bfd_final_link>> routine must also traverse the global
379         hash table to gather all the externally visible symbols.  It
380         is possible that most of the externally visible symbols may be
381         written out when considering the symbols of each input file,
382         but it is still necessary to traverse the hash table since the
383         linker script may have defined some symbols that are not in
384         any of the input files.
385
386         The <<strip>> field of the <<bfd_link_info>> structure
387         controls which symbols are written out.  The possible values
388         are listed in <<bfdlink.h>>.  If the value is <<strip_some>>,
389         then the <<keep_hash>> field of the <<bfd_link_info>>
390         structure is a hash table of symbols to keep; each symbol
391         should be looked up in this hash table, and only symbols which
392         are present should be included in the output file.
393
394         If the <<strip>> field of the <<bfd_link_info>> structure
395         permits local symbols to be written out, the <<discard>> field
396         is used to further controls which local symbols are included
397         in the output file.  If the value is <<discard_l>>, then all
398         local symbols which begin with a certain prefix are discarded;
399         this is controlled by the <<bfd_is_local_label_name>> entry point.
400
401         The a.out backend handles symbols by calling
402         <<aout_link_write_symbols>> on each input BFD and then
403         traversing the global hash table with the function
404         <<aout_link_write_other_symbol>>.  It builds a string table
405         while writing out the symbols, which is written to the output
406         file at the end of <<NAME(aout,final_link)>>.
407 */
408
409 static boolean generic_link_read_symbols
410   PARAMS ((bfd *));
411 static boolean generic_link_add_symbols
412   PARAMS ((bfd *, struct bfd_link_info *, boolean collect));
413 static boolean generic_link_add_object_symbols
414   PARAMS ((bfd *, struct bfd_link_info *, boolean collect));
415 static boolean generic_link_check_archive_element_no_collect
416   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
417 static boolean generic_link_check_archive_element_collect
418   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
419 static boolean generic_link_check_archive_element
420   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded, boolean collect));
421 static boolean generic_link_add_symbol_list
422   PARAMS ((bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **,
423            boolean collect));
424 static bfd *hash_entry_bfd PARAMS ((struct bfd_link_hash_entry *));
425 static void set_symbol_from_hash
426   PARAMS ((asymbol *, struct bfd_link_hash_entry *));
427 static boolean generic_add_output_symbol
428   PARAMS ((bfd *, size_t *psymalloc, asymbol *));
429 static boolean default_fill_link_order
430   PARAMS ((bfd *, struct bfd_link_info *, asection *,
431            struct bfd_link_order *));
432 static boolean default_indirect_link_order
433   PARAMS ((bfd *, struct bfd_link_info *, asection *,
434            struct bfd_link_order *, boolean));
435
436 /* The link hash table structure is defined in bfdlink.h.  It provides
437    a base hash table which the backend specific hash tables are built
438    upon.  */
439
440 /* Routine to create an entry in the link hash table.  */
441
442 struct bfd_hash_entry *
443 _bfd_link_hash_newfunc (entry, table, string)
444      struct bfd_hash_entry *entry;
445      struct bfd_hash_table *table;
446      const char *string;
447 {
448   /* Allocate the structure if it has not already been allocated by a
449      subclass.  */
450   if (entry == NULL)
451     {
452       entry = bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry));
453       if (entry == NULL)
454         return entry;
455     }
456
457   /* Call the allocation method of the superclass.  */
458   entry = bfd_hash_newfunc (entry, table, string);
459   if (entry)
460     {
461       struct bfd_link_hash_entry *h = (struct bfd_link_hash_entry *) entry;
462
463       /* Initialize the local fields.  */
464       h->type = bfd_link_hash_new;
465       h->next = NULL;
466     }
467
468   return entry;
469 }
470
471 /* Initialize a link hash table.  The BFD argument is the one
472    responsible for creating this table.  */
473
474 boolean
475 _bfd_link_hash_table_init (table, abfd, newfunc)
476      struct bfd_link_hash_table *table;
477      bfd *abfd;
478      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
479                                                 struct bfd_hash_table *,
480                                                 const char *));
481 {
482   table->creator = abfd->xvec;
483   table->undefs = NULL;
484   table->undefs_tail = NULL;
485   table->type = bfd_link_generic_hash_table;
486
487   return bfd_hash_table_init (&table->table, newfunc);
488 }
489
490 /* Look up a symbol in a link hash table.  If follow is true, we
491    follow bfd_link_hash_indirect and bfd_link_hash_warning links to
492    the real symbol.  */
493
494 struct bfd_link_hash_entry *
495 bfd_link_hash_lookup (table, string, create, copy, follow)
496      struct bfd_link_hash_table *table;
497      const char *string;
498      boolean create;
499      boolean copy;
500      boolean follow;
501 {
502   struct bfd_link_hash_entry *ret;
503
504   ret = ((struct bfd_link_hash_entry *)
505          bfd_hash_lookup (&table->table, string, create, copy));
506
507   if (follow && ret != (struct bfd_link_hash_entry *) NULL)
508     {
509       while (ret->type == bfd_link_hash_indirect
510              || ret->type == bfd_link_hash_warning)
511         ret = ret->u.i.link;
512     }
513
514   return ret;
515 }
516
517 /* Look up a symbol in the main linker hash table if the symbol might
518    be wrapped.  This should only be used for references to an
519    undefined symbol, not for definitions of a symbol.  */
520
521 struct bfd_link_hash_entry *
522 bfd_wrapped_link_hash_lookup (abfd, info, string, create, copy, follow)
523      bfd *abfd;
524      struct bfd_link_info *info;
525      const char *string;
526      boolean create;
527      boolean copy;
528      boolean follow;
529 {
530   bfd_size_type amt;
531
532   if (info->wrap_hash != NULL)
533     {
534       const char *l;
535
536       l = string;
537       if (*l == bfd_get_symbol_leading_char (abfd))
538         ++l;
539
540 #undef WRAP
541 #define WRAP "__wrap_"
542
543       if (bfd_hash_lookup (info->wrap_hash, l, false, false) != NULL)
544         {
545           char *n;
546           struct bfd_link_hash_entry *h;
547
548           /* This symbol is being wrapped.  We want to replace all
549              references to SYM with references to __wrap_SYM.  */
550
551           amt = strlen (l) + sizeof WRAP + 1;
552           n = (char *) bfd_malloc (amt);
553           if (n == NULL)
554             return NULL;
555
556           /* Note that symbol_leading_char may be '\0'.  */
557           n[0] = bfd_get_symbol_leading_char (abfd);
558           n[1] = '\0';
559           strcat (n, WRAP);
560           strcat (n, l);
561           h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
562           free (n);
563           return h;
564         }
565
566 #undef WRAP
567
568 #undef REAL
569 #define REAL "__real_"
570
571       if (*l == '_'
572           && strncmp (l, REAL, sizeof REAL - 1) == 0
573           && bfd_hash_lookup (info->wrap_hash, l + sizeof REAL - 1,
574                               false, false) != NULL)
575         {
576           char *n;
577           struct bfd_link_hash_entry *h;
578
579           /* This is a reference to __real_SYM, where SYM is being
580              wrapped.  We want to replace all references to __real_SYM
581              with references to SYM.  */
582
583           amt = strlen (l + sizeof REAL - 1) + 2;
584           n = (char *) bfd_malloc (amt);
585           if (n == NULL)
586             return NULL;
587
588           /* Note that symbol_leading_char may be '\0'.  */
589           n[0] = bfd_get_symbol_leading_char (abfd);
590           n[1] = '\0';
591           strcat (n, l + sizeof REAL - 1);
592           h = bfd_link_hash_lookup (info->hash, n, create, true, follow);
593           free (n);
594           return h;
595         }
596
597 #undef REAL
598     }
599
600   return bfd_link_hash_lookup (info->hash, string, create, copy, follow);
601 }
602
603 /* Traverse a generic link hash table.  The only reason this is not a
604    macro is to do better type checking.  This code presumes that an
605    argument passed as a struct bfd_hash_entry * may be caught as a
606    struct bfd_link_hash_entry * with no explicit cast required on the
607    call.  */
608
609 void
610 bfd_link_hash_traverse (table, func, info)
611      struct bfd_link_hash_table *table;
612      boolean (*func) PARAMS ((struct bfd_link_hash_entry *, PTR));
613      PTR info;
614 {
615   bfd_hash_traverse (&table->table,
616                      ((boolean (*) PARAMS ((struct bfd_hash_entry *, PTR)))
617                       func),
618                      info);
619 }
620
621 /* Add a symbol to the linker hash table undefs list.  */
622
623 INLINE void
624 bfd_link_add_undef (table, h)
625      struct bfd_link_hash_table *table;
626      struct bfd_link_hash_entry *h;
627 {
628   BFD_ASSERT (h->next == NULL);
629   if (table->undefs_tail != (struct bfd_link_hash_entry *) NULL)
630     table->undefs_tail->next = h;
631   if (table->undefs == (struct bfd_link_hash_entry *) NULL)
632     table->undefs = h;
633   table->undefs_tail = h;
634 }
635 \f
636 /* Routine to create an entry in an generic link hash table.  */
637
638 struct bfd_hash_entry *
639 _bfd_generic_link_hash_newfunc (entry, table, string)
640      struct bfd_hash_entry *entry;
641      struct bfd_hash_table *table;
642      const char *string;
643 {
644   /* Allocate the structure if it has not already been allocated by a
645      subclass.  */
646   if (entry == NULL)
647     {
648       entry = bfd_hash_allocate (table,
649                                  sizeof (struct generic_link_hash_entry));
650       if (entry == NULL)
651         return entry;
652     }
653
654   /* Call the allocation method of the superclass.  */
655   entry = _bfd_link_hash_newfunc (entry, table, string);
656   if (entry)
657     {
658       struct generic_link_hash_entry *ret;
659
660       /* Set local fields.  */
661       ret = (struct generic_link_hash_entry *) entry;
662       ret->written = false;
663       ret->sym = NULL;
664     }
665
666   return entry;
667 }
668
669 /* Create an generic link hash table.  */
670
671 struct bfd_link_hash_table *
672 _bfd_generic_link_hash_table_create (abfd)
673      bfd *abfd;
674 {
675   struct generic_link_hash_table *ret;
676   bfd_size_type amt = sizeof (struct generic_link_hash_table);
677
678   ret = (struct generic_link_hash_table *) bfd_alloc (abfd, amt);
679   if (ret == NULL)
680     return (struct bfd_link_hash_table *) NULL;
681   if (! _bfd_link_hash_table_init (&ret->root, abfd,
682                                    _bfd_generic_link_hash_newfunc))
683     {
684       free (ret);
685       return (struct bfd_link_hash_table *) NULL;
686     }
687   return &ret->root;
688 }
689
690 /* Grab the symbols for an object file when doing a generic link.  We
691    store the symbols in the outsymbols field.  We need to keep them
692    around for the entire link to ensure that we only read them once.
693    If we read them multiple times, we might wind up with relocs and
694    the hash table pointing to different instances of the symbol
695    structure.  */
696
697 static boolean
698 generic_link_read_symbols (abfd)
699      bfd *abfd;
700 {
701   if (bfd_get_outsymbols (abfd) == (asymbol **) NULL)
702     {
703       long symsize;
704       long symcount;
705
706       symsize = bfd_get_symtab_upper_bound (abfd);
707       if (symsize < 0)
708         return false;
709       bfd_get_outsymbols (abfd) =
710         (asymbol **) bfd_alloc (abfd, (bfd_size_type) symsize);
711       if (bfd_get_outsymbols (abfd) == NULL && symsize != 0)
712         return false;
713       symcount = bfd_canonicalize_symtab (abfd, bfd_get_outsymbols (abfd));
714       if (symcount < 0)
715         return false;
716       bfd_get_symcount (abfd) = symcount;
717     }
718
719   return true;
720 }
721 \f
722 /* Generic function to add symbols to from an object file to the
723    global hash table.  This version does not automatically collect
724    constructors by name.  */
725
726 boolean
727 _bfd_generic_link_add_symbols (abfd, info)
728      bfd *abfd;
729      struct bfd_link_info *info;
730 {
731   return generic_link_add_symbols (abfd, info, false);
732 }
733
734 /* Generic function to add symbols from an object file to the global
735    hash table.  This version automatically collects constructors by
736    name, as the collect2 program does.  It should be used for any
737    target which does not provide some other mechanism for setting up
738    constructors and destructors; these are approximately those targets
739    for which gcc uses collect2 and do not support stabs.  */
740
741 boolean
742 _bfd_generic_link_add_symbols_collect (abfd, info)
743      bfd *abfd;
744      struct bfd_link_info *info;
745 {
746   return generic_link_add_symbols (abfd, info, true);
747 }
748
749 /* Add symbols from an object file to the global hash table.  */
750
751 static boolean
752 generic_link_add_symbols (abfd, info, collect)
753      bfd *abfd;
754      struct bfd_link_info *info;
755      boolean collect;
756 {
757   boolean ret;
758
759   switch (bfd_get_format (abfd))
760     {
761     case bfd_object:
762       ret = generic_link_add_object_symbols (abfd, info, collect);
763       break;
764     case bfd_archive:
765       ret = (_bfd_generic_link_add_archive_symbols
766              (abfd, info,
767               (collect
768                ? generic_link_check_archive_element_collect
769                : generic_link_check_archive_element_no_collect)));
770       break;
771     default:
772       bfd_set_error (bfd_error_wrong_format);
773       ret = false;
774     }
775
776   return ret;
777 }
778
779 /* Add symbols from an object file to the global hash table.  */
780
781 static boolean
782 generic_link_add_object_symbols (abfd, info, collect)
783      bfd *abfd;
784      struct bfd_link_info *info;
785      boolean collect;
786 {
787   bfd_size_type symcount;
788   struct symbol_cache_entry **outsyms;
789
790   if (! generic_link_read_symbols (abfd))
791     return false;
792   symcount = _bfd_generic_link_get_symcount (abfd);
793   outsyms = _bfd_generic_link_get_symbols (abfd);
794   return generic_link_add_symbol_list (abfd, info, symcount, outsyms, collect);
795 }
796 \f
797 /* We build a hash table of all symbols defined in an archive.  */
798
799 /* An archive symbol may be defined by multiple archive elements.
800    This linked list is used to hold the elements.  */
801
802 struct archive_list
803 {
804   struct archive_list *next;
805   unsigned int indx;
806 };
807
808 /* An entry in an archive hash table.  */
809
810 struct archive_hash_entry
811 {
812   struct bfd_hash_entry root;
813   /* Where the symbol is defined.  */
814   struct archive_list *defs;
815 };
816
817 /* An archive hash table itself.  */
818
819 struct archive_hash_table
820 {
821   struct bfd_hash_table table;
822 };
823
824 static struct bfd_hash_entry *archive_hash_newfunc
825   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
826 static boolean archive_hash_table_init
827   PARAMS ((struct archive_hash_table *,
828            struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
829                                        struct bfd_hash_table *,
830                                        const char *)));
831
832 /* Create a new entry for an archive hash table.  */
833
834 static struct bfd_hash_entry *
835 archive_hash_newfunc (entry, table, string)
836      struct bfd_hash_entry *entry;
837      struct bfd_hash_table *table;
838      const char *string;
839 {
840   struct archive_hash_entry *ret = (struct archive_hash_entry *) entry;
841
842   /* Allocate the structure if it has not already been allocated by a
843      subclass.  */
844   if (ret == (struct archive_hash_entry *) NULL)
845     ret = ((struct archive_hash_entry *)
846            bfd_hash_allocate (table, sizeof (struct archive_hash_entry)));
847   if (ret == (struct archive_hash_entry *) NULL)
848     return NULL;
849
850   /* Call the allocation method of the superclass.  */
851   ret = ((struct archive_hash_entry *)
852          bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
853
854   if (ret)
855     {
856       /* Initialize the local fields.  */
857       ret->defs = (struct archive_list *) NULL;
858     }
859
860   return (struct bfd_hash_entry *) ret;
861 }
862
863 /* Initialize an archive hash table.  */
864
865 static boolean
866 archive_hash_table_init (table, newfunc)
867      struct archive_hash_table *table;
868      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
869                                                 struct bfd_hash_table *,
870                                                 const char *));
871 {
872   return bfd_hash_table_init (&table->table, newfunc);
873 }
874
875 /* Look up an entry in an archive hash table.  */
876
877 #define archive_hash_lookup(t, string, create, copy) \
878   ((struct archive_hash_entry *) \
879    bfd_hash_lookup (&(t)->table, (string), (create), (copy)))
880
881 /* Allocate space in an archive hash table.  */
882
883 #define archive_hash_allocate(t, size) bfd_hash_allocate (&(t)->table, (size))
884
885 /* Free an archive hash table.  */
886
887 #define archive_hash_table_free(t) bfd_hash_table_free (&(t)->table)
888
889 /* Generic function to add symbols from an archive file to the global
890    hash file.  This function presumes that the archive symbol table
891    has already been read in (this is normally done by the
892    bfd_check_format entry point).  It looks through the undefined and
893    common symbols and searches the archive symbol table for them.  If
894    it finds an entry, it includes the associated object file in the
895    link.
896
897    The old linker looked through the archive symbol table for
898    undefined symbols.  We do it the other way around, looking through
899    undefined symbols for symbols defined in the archive.  The
900    advantage of the newer scheme is that we only have to look through
901    the list of undefined symbols once, whereas the old method had to
902    re-search the symbol table each time a new object file was added.
903
904    The CHECKFN argument is used to see if an object file should be
905    included.  CHECKFN should set *PNEEDED to true if the object file
906    should be included, and must also call the bfd_link_info
907    add_archive_element callback function and handle adding the symbols
908    to the global hash table.  CHECKFN should only return false if some
909    sort of error occurs.
910
911    For some formats, such as a.out, it is possible to look through an
912    object file but not actually include it in the link.  The
913    archive_pass field in a BFD is used to avoid checking the symbols
914    of an object files too many times.  When an object is included in
915    the link, archive_pass is set to -1.  If an object is scanned but
916    not included, archive_pass is set to the pass number.  The pass
917    number is incremented each time a new object file is included.  The
918    pass number is used because when a new object file is included it
919    may create new undefined symbols which cause a previously examined
920    object file to be included.  */
921
922 boolean
923 _bfd_generic_link_add_archive_symbols (abfd, info, checkfn)
924      bfd *abfd;
925      struct bfd_link_info *info;
926      boolean (*checkfn) PARAMS ((bfd *, struct bfd_link_info *,
927                                  boolean *pneeded));
928 {
929   carsym *arsyms;
930   carsym *arsym_end;
931   register carsym *arsym;
932   int pass;
933   struct archive_hash_table arsym_hash;
934   unsigned int indx;
935   struct bfd_link_hash_entry **pundef;
936
937   if (! bfd_has_map (abfd))
938     {
939       /* An empty archive is a special case.  */
940       if (bfd_openr_next_archived_file (abfd, (bfd *) NULL) == NULL)
941         return true;
942       bfd_set_error (bfd_error_no_armap);
943       return false;
944     }
945
946   arsyms = bfd_ardata (abfd)->symdefs;
947   arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
948
949   /* In order to quickly determine whether an symbol is defined in
950      this archive, we build a hash table of the symbols.  */
951   if (! archive_hash_table_init (&arsym_hash, archive_hash_newfunc))
952     return false;
953   for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
954     {
955       struct archive_hash_entry *arh;
956       struct archive_list *l, **pp;
957
958       arh = archive_hash_lookup (&arsym_hash, arsym->name, true, false);
959       if (arh == (struct archive_hash_entry *) NULL)
960         goto error_return;
961       l = ((struct archive_list *)
962            archive_hash_allocate (&arsym_hash, sizeof (struct archive_list)));
963       if (l == NULL)
964         goto error_return;
965       l->indx = indx;
966       for (pp = &arh->defs;
967            *pp != (struct archive_list *) NULL;
968            pp = &(*pp)->next)
969         ;
970       *pp = l;
971       l->next = NULL;
972     }
973
974   /* The archive_pass field in the archive itself is used to
975      initialize PASS, sine we may search the same archive multiple
976      times.  */
977   pass = abfd->archive_pass + 1;
978
979   /* New undefined symbols are added to the end of the list, so we
980      only need to look through it once.  */
981   pundef = &info->hash->undefs;
982   while (*pundef != (struct bfd_link_hash_entry *) NULL)
983     {
984       struct bfd_link_hash_entry *h;
985       struct archive_hash_entry *arh;
986       struct archive_list *l;
987
988       h = *pundef;
989
990       /* When a symbol is defined, it is not necessarily removed from
991          the list.  */
992       if (h->type != bfd_link_hash_undefined
993           && h->type != bfd_link_hash_common)
994         {
995           /* Remove this entry from the list, for general cleanliness
996              and because we are going to look through the list again
997              if we search any more libraries.  We can't remove the
998              entry if it is the tail, because that would lose any
999              entries we add to the list later on (it would also cause
1000              us to lose track of whether the symbol has been
1001              referenced).  */
1002           if (*pundef != info->hash->undefs_tail)
1003             *pundef = (*pundef)->next;
1004           else
1005             pundef = &(*pundef)->next;
1006           continue;
1007         }
1008
1009       /* Look for this symbol in the archive symbol map.  */
1010       arh = archive_hash_lookup (&arsym_hash, h->root.string, false, false);
1011       if (arh == (struct archive_hash_entry *) NULL)
1012         {
1013           /* If we haven't found the exact symbol we're looking for,
1014              let's look for its import thunk */
1015           if (info->pei386_auto_import)
1016             {
1017               bfd_size_type amt = strlen (h->root.string) + 10;
1018               char *buf = (char *) bfd_malloc (amt);
1019               if (buf == NULL)
1020                 return false;
1021
1022               sprintf (buf, "__imp_%s", h->root.string);
1023               arh = archive_hash_lookup (&arsym_hash, buf, false, false);
1024               free(buf);
1025             }
1026           if (arh == (struct archive_hash_entry *) NULL)
1027             {
1028               pundef = &(*pundef)->next;
1029               continue;
1030             }
1031         }
1032       /* Look at all the objects which define this symbol.  */
1033       for (l = arh->defs; l != (struct archive_list *) NULL; l = l->next)
1034         {
1035           bfd *element;
1036           boolean needed;
1037
1038           /* If the symbol has gotten defined along the way, quit.  */
1039           if (h->type != bfd_link_hash_undefined
1040               && h->type != bfd_link_hash_common)
1041             break;
1042
1043           element = bfd_get_elt_at_index (abfd, l->indx);
1044           if (element == (bfd *) NULL)
1045             goto error_return;
1046
1047           /* If we've already included this element, or if we've
1048              already checked it on this pass, continue.  */
1049           if (element->archive_pass == -1
1050               || element->archive_pass == pass)
1051             continue;
1052
1053           /* If we can't figure this element out, just ignore it.  */
1054           if (! bfd_check_format (element, bfd_object))
1055             {
1056               element->archive_pass = -1;
1057               continue;
1058             }
1059
1060           /* CHECKFN will see if this element should be included, and
1061              go ahead and include it if appropriate.  */
1062           if (! (*checkfn) (element, info, &needed))
1063             goto error_return;
1064
1065           if (! needed)
1066             element->archive_pass = pass;
1067           else
1068             {
1069               element->archive_pass = -1;
1070
1071               /* Increment the pass count to show that we may need to
1072                  recheck object files which were already checked.  */
1073               ++pass;
1074             }
1075         }
1076
1077       pundef = &(*pundef)->next;
1078     }
1079
1080   archive_hash_table_free (&arsym_hash);
1081
1082   /* Save PASS in case we are called again.  */
1083   abfd->archive_pass = pass;
1084
1085   return true;
1086
1087  error_return:
1088   archive_hash_table_free (&arsym_hash);
1089   return false;
1090 }
1091 \f
1092 /* See if we should include an archive element.  This version is used
1093    when we do not want to automatically collect constructors based on
1094    the symbol name, presumably because we have some other mechanism
1095    for finding them.  */
1096
1097 static boolean
1098 generic_link_check_archive_element_no_collect (abfd, info, pneeded)
1099      bfd *abfd;
1100      struct bfd_link_info *info;
1101      boolean *pneeded;
1102 {
1103   return generic_link_check_archive_element (abfd, info, pneeded, false);
1104 }
1105
1106 /* See if we should include an archive element.  This version is used
1107    when we want to automatically collect constructors based on the
1108    symbol name, as collect2 does.  */
1109
1110 static boolean
1111 generic_link_check_archive_element_collect (abfd, info, pneeded)
1112      bfd *abfd;
1113      struct bfd_link_info *info;
1114      boolean *pneeded;
1115 {
1116   return generic_link_check_archive_element (abfd, info, pneeded, true);
1117 }
1118
1119 /* See if we should include an archive element.  Optionally collect
1120    constructors.  */
1121
1122 static boolean
1123 generic_link_check_archive_element (abfd, info, pneeded, collect)
1124      bfd *abfd;
1125      struct bfd_link_info *info;
1126      boolean *pneeded;
1127      boolean collect;
1128 {
1129   asymbol **pp, **ppend;
1130
1131   *pneeded = false;
1132
1133   if (! generic_link_read_symbols (abfd))
1134     return false;
1135
1136   pp = _bfd_generic_link_get_symbols (abfd);
1137   ppend = pp + _bfd_generic_link_get_symcount (abfd);
1138   for (; pp < ppend; pp++)
1139     {
1140       asymbol *p;
1141       struct bfd_link_hash_entry *h;
1142
1143       p = *pp;
1144
1145       /* We are only interested in globally visible symbols.  */
1146       if (! bfd_is_com_section (p->section)
1147           && (p->flags & (BSF_GLOBAL | BSF_INDIRECT | BSF_WEAK)) == 0)
1148         continue;
1149
1150       /* We are only interested if we know something about this
1151          symbol, and it is undefined or common.  An undefined weak
1152          symbol (type bfd_link_hash_undefweak) is not considered to be
1153          a reference when pulling files out of an archive.  See the
1154          SVR4 ABI, p. 4-27.  */
1155       h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), false,
1156                                 false, true);
1157       if (h == (struct bfd_link_hash_entry *) NULL
1158           || (h->type != bfd_link_hash_undefined
1159               && h->type != bfd_link_hash_common))
1160         continue;
1161
1162       /* P is a symbol we are looking for.  */
1163
1164       if (! bfd_is_com_section (p->section))
1165         {
1166           bfd_size_type symcount;
1167           asymbol **symbols;
1168
1169           /* This object file defines this symbol, so pull it in.  */
1170           if (! (*info->callbacks->add_archive_element) (info, abfd,
1171                                                          bfd_asymbol_name (p)))
1172             return false;
1173           symcount = _bfd_generic_link_get_symcount (abfd);
1174           symbols = _bfd_generic_link_get_symbols (abfd);
1175           if (! generic_link_add_symbol_list (abfd, info, symcount,
1176                                               symbols, collect))
1177             return false;
1178           *pneeded = true;
1179           return true;
1180         }
1181
1182       /* P is a common symbol.  */
1183
1184       if (h->type == bfd_link_hash_undefined)
1185         {
1186           bfd *symbfd;
1187           bfd_vma size;
1188           unsigned int power;
1189
1190           symbfd = h->u.undef.abfd;
1191           if (symbfd == (bfd *) NULL)
1192             {
1193               /* This symbol was created as undefined from outside
1194                  BFD.  We assume that we should link in the object
1195                  file.  This is for the -u option in the linker.  */
1196               if (! (*info->callbacks->add_archive_element)
1197                   (info, abfd, bfd_asymbol_name (p)))
1198                 return false;
1199               *pneeded = true;
1200               return true;
1201             }
1202
1203           /* Turn the symbol into a common symbol but do not link in
1204              the object file.  This is how a.out works.  Object
1205              formats that require different semantics must implement
1206              this function differently.  This symbol is already on the
1207              undefs list.  We add the section to a common section
1208              attached to symbfd to ensure that it is in a BFD which
1209              will be linked in.  */
1210           h->type = bfd_link_hash_common;
1211           h->u.c.p =
1212             ((struct bfd_link_hash_common_entry *)
1213              bfd_hash_allocate (&info->hash->table,
1214                                 sizeof (struct bfd_link_hash_common_entry)));
1215           if (h->u.c.p == NULL)
1216             return false;
1217
1218           size = bfd_asymbol_value (p);
1219           h->u.c.size = size;
1220
1221           power = bfd_log2 (size);
1222           if (power > 4)
1223             power = 4;
1224           h->u.c.p->alignment_power = power;
1225
1226           if (p->section == bfd_com_section_ptr)
1227             h->u.c.p->section = bfd_make_section_old_way (symbfd, "COMMON");
1228           else
1229             h->u.c.p->section = bfd_make_section_old_way (symbfd,
1230                                                           p->section->name);
1231           h->u.c.p->section->flags = SEC_ALLOC;
1232         }
1233       else
1234         {
1235           /* Adjust the size of the common symbol if necessary.  This
1236              is how a.out works.  Object formats that require
1237              different semantics must implement this function
1238              differently.  */
1239           if (bfd_asymbol_value (p) > h->u.c.size)
1240             h->u.c.size = bfd_asymbol_value (p);
1241         }
1242     }
1243
1244   /* This archive element is not needed.  */
1245   return true;
1246 }
1247
1248 /* Add the symbols from an object file to the global hash table.  ABFD
1249    is the object file.  INFO is the linker information.  SYMBOL_COUNT
1250    is the number of symbols.  SYMBOLS is the list of symbols.  COLLECT
1251    is true if constructors should be automatically collected by name
1252    as is done by collect2.  */
1253
1254 static boolean
1255 generic_link_add_symbol_list (abfd, info, symbol_count, symbols, collect)
1256      bfd *abfd;
1257      struct bfd_link_info *info;
1258      bfd_size_type symbol_count;
1259      asymbol **symbols;
1260      boolean collect;
1261 {
1262   asymbol **pp, **ppend;
1263
1264   pp = symbols;
1265   ppend = symbols + symbol_count;
1266   for (; pp < ppend; pp++)
1267     {
1268       asymbol *p;
1269
1270       p = *pp;
1271
1272       if ((p->flags & (BSF_INDIRECT
1273                        | BSF_WARNING
1274                        | BSF_GLOBAL
1275                        | BSF_CONSTRUCTOR
1276                        | BSF_WEAK)) != 0
1277           || bfd_is_und_section (bfd_get_section (p))
1278           || bfd_is_com_section (bfd_get_section (p))
1279           || bfd_is_ind_section (bfd_get_section (p)))
1280         {
1281           const char *name;
1282           const char *string;
1283           struct generic_link_hash_entry *h;
1284
1285           name = bfd_asymbol_name (p);
1286           if (((p->flags & BSF_INDIRECT) != 0
1287                || bfd_is_ind_section (p->section))
1288               && pp + 1 < ppend)
1289             {
1290               pp++;
1291               string = bfd_asymbol_name (*pp);
1292             }
1293           else if ((p->flags & BSF_WARNING) != 0
1294                    && pp + 1 < ppend)
1295             {
1296               /* The name of P is actually the warning string, and the
1297                  next symbol is the one to warn about.  */
1298               string = name;
1299               pp++;
1300               name = bfd_asymbol_name (*pp);
1301             }
1302           else
1303             string = NULL;
1304
1305           h = NULL;
1306           if (! (_bfd_generic_link_add_one_symbol
1307                  (info, abfd, name, p->flags, bfd_get_section (p),
1308                   p->value, string, false, collect,
1309                   (struct bfd_link_hash_entry **) &h)))
1310             return false;
1311
1312           /* If this is a constructor symbol, and the linker didn't do
1313              anything with it, then we want to just pass the symbol
1314              through to the output file.  This will happen when
1315              linking with -r.  */
1316           if ((p->flags & BSF_CONSTRUCTOR) != 0
1317               && (h == NULL || h->root.type == bfd_link_hash_new))
1318             {
1319               p->udata.p = NULL;
1320               continue;
1321             }
1322
1323           /* Save the BFD symbol so that we don't lose any backend
1324              specific information that may be attached to it.  We only
1325              want this one if it gives more information than the
1326              existing one; we don't want to replace a defined symbol
1327              with an undefined one.  This routine may be called with a
1328              hash table other than the generic hash table, so we only
1329              do this if we are certain that the hash table is a
1330              generic one.  */
1331           if (info->hash->creator == abfd->xvec)
1332             {
1333               if (h->sym == (asymbol *) NULL
1334                   || (! bfd_is_und_section (bfd_get_section (p))
1335                       && (! bfd_is_com_section (bfd_get_section (p))
1336                           || bfd_is_und_section (bfd_get_section (h->sym)))))
1337                 {
1338                   h->sym = p;
1339                   /* BSF_OLD_COMMON is a hack to support COFF reloc
1340                      reading, and it should go away when the COFF
1341                      linker is switched to the new version.  */
1342                   if (bfd_is_com_section (bfd_get_section (p)))
1343                     p->flags |= BSF_OLD_COMMON;
1344                 }
1345             }
1346
1347           /* Store a back pointer from the symbol to the hash
1348              table entry for the benefit of relaxation code until
1349              it gets rewritten to not use asymbol structures.
1350              Setting this is also used to check whether these
1351              symbols were set up by the generic linker.  */
1352           p->udata.p = (PTR) h;
1353         }
1354     }
1355
1356   return true;
1357 }
1358 \f
1359 /* We use a state table to deal with adding symbols from an object
1360    file.  The first index into the state table describes the symbol
1361    from the object file.  The second index into the state table is the
1362    type of the symbol in the hash table.  */
1363
1364 /* The symbol from the object file is turned into one of these row
1365    values.  */
1366
1367 enum link_row
1368 {
1369   UNDEF_ROW,            /* Undefined.  */
1370   UNDEFW_ROW,           /* Weak undefined.  */
1371   DEF_ROW,              /* Defined.  */
1372   DEFW_ROW,             /* Weak defined.  */
1373   COMMON_ROW,           /* Common.  */
1374   INDR_ROW,             /* Indirect.  */
1375   WARN_ROW,             /* Warning.  */
1376   SET_ROW               /* Member of set.  */
1377 };
1378
1379 /* apparently needed for Hitachi 3050R(HI-UX/WE2)? */
1380 #undef FAIL
1381
1382 /* The actions to take in the state table.  */
1383
1384 enum link_action
1385 {
1386   FAIL,         /* Abort.  */
1387   UND,          /* Mark symbol undefined.  */
1388   WEAK,         /* Mark symbol weak undefined.  */
1389   DEF,          /* Mark symbol defined.  */
1390   DEFW,         /* Mark symbol weak defined.  */
1391   COM,          /* Mark symbol common.  */
1392   REF,          /* Mark defined symbol referenced.  */
1393   CREF,         /* Possibly warn about common reference to defined symbol.  */
1394   CDEF,         /* Define existing common symbol.  */
1395   NOACT,        /* No action.  */
1396   BIG,          /* Mark symbol common using largest size.  */
1397   MDEF,         /* Multiple definition error.  */
1398   MIND,         /* Multiple indirect symbols.  */
1399   IND,          /* Make indirect symbol.  */
1400   CIND,         /* Make indirect symbol from existing common symbol.  */
1401   SET,          /* Add value to set.  */
1402   MWARN,        /* Make warning symbol.  */
1403   WARN,         /* Issue warning.  */
1404   CWARN,        /* Warn if referenced, else MWARN.  */
1405   CYCLE,        /* Repeat with symbol pointed to.  */
1406   REFC,         /* Mark indirect symbol referenced and then CYCLE.  */
1407   WARNC         /* Issue warning and then CYCLE.  */
1408 };
1409
1410 /* The state table itself.  The first index is a link_row and the
1411    second index is a bfd_link_hash_type.  */
1412
1413 static const enum link_action link_action[8][8] =
1414 {
1415   /* current\prev    new    undef  undefw def    defw   com    indr   warn  */
1416   /* UNDEF_ROW  */  {UND,   NOACT, UND,   REF,   REF,   NOACT, REFC,  WARNC },
1417   /* UNDEFW_ROW */  {WEAK,  NOACT, NOACT, REF,   REF,   NOACT, REFC,  WARNC },
1418   /* DEF_ROW    */  {DEF,   DEF,   DEF,   MDEF,  DEF,   CDEF,  MDEF,  CYCLE },
1419   /* DEFW_ROW   */  {DEFW,  DEFW,  DEFW,  NOACT, NOACT, NOACT, NOACT, CYCLE },
1420   /* COMMON_ROW */  {COM,   COM,   COM,   CREF,  COM,   BIG,   REFC,  WARNC },
1421   /* INDR_ROW   */  {IND,   IND,   IND,   MDEF,  IND,   CIND,  MIND,  CYCLE },
1422   /* WARN_ROW   */  {MWARN, WARN,  WARN,  CWARN, CWARN, WARN,  CWARN, NOACT },
1423   /* SET_ROW    */  {SET,   SET,   SET,   SET,   SET,   SET,   CYCLE, CYCLE }
1424 };
1425
1426 /* Most of the entries in the LINK_ACTION table are straightforward,
1427    but a few are somewhat subtle.
1428
1429    A reference to an indirect symbol (UNDEF_ROW/indr or
1430    UNDEFW_ROW/indr) is counted as a reference both to the indirect
1431    symbol and to the symbol the indirect symbol points to.
1432
1433    A reference to a warning symbol (UNDEF_ROW/warn or UNDEFW_ROW/warn)
1434    causes the warning to be issued.
1435
1436    A common definition of an indirect symbol (COMMON_ROW/indr) is
1437    treated as a multiple definition error.  Likewise for an indirect
1438    definition of a common symbol (INDR_ROW/com).
1439
1440    An indirect definition of a warning (INDR_ROW/warn) does not cause
1441    the warning to be issued.
1442
1443    If a warning is created for an indirect symbol (WARN_ROW/indr) no
1444    warning is created for the symbol the indirect symbol points to.
1445
1446    Adding an entry to a set does not count as a reference to a set,
1447    and no warning is issued (SET_ROW/warn).  */
1448
1449 /* Return the BFD in which a hash entry has been defined, if known.  */
1450
1451 static bfd *
1452 hash_entry_bfd (h)
1453      struct bfd_link_hash_entry *h;
1454 {
1455   while (h->type == bfd_link_hash_warning)
1456     h = h->u.i.link;
1457   switch (h->type)
1458     {
1459     default:
1460       return NULL;
1461     case bfd_link_hash_undefined:
1462     case bfd_link_hash_undefweak:
1463       return h->u.undef.abfd;
1464     case bfd_link_hash_defined:
1465     case bfd_link_hash_defweak:
1466       return h->u.def.section->owner;
1467     case bfd_link_hash_common:
1468       return h->u.c.p->section->owner;
1469     }
1470   /*NOTREACHED*/
1471 }
1472
1473 /* Add a symbol to the global hash table.
1474    ABFD is the BFD the symbol comes from.
1475    NAME is the name of the symbol.
1476    FLAGS is the BSF_* bits associated with the symbol.
1477    SECTION is the section in which the symbol is defined; this may be
1478      bfd_und_section_ptr or bfd_com_section_ptr.
1479    VALUE is the value of the symbol, relative to the section.
1480    STRING is used for either an indirect symbol, in which case it is
1481      the name of the symbol to indirect to, or a warning symbol, in
1482      which case it is the warning string.
1483    COPY is true if NAME or STRING must be copied into locally
1484      allocated memory if they need to be saved.
1485    COLLECT is true if we should automatically collect gcc constructor
1486      or destructor names as collect2 does.
1487    HASHP, if not NULL, is a place to store the created hash table
1488      entry; if *HASHP is not NULL, the caller has already looked up
1489      the hash table entry, and stored it in *HASHP.  */
1490
1491 boolean
1492 _bfd_generic_link_add_one_symbol (info, abfd, name, flags, section, value,
1493                                   string, copy, collect, hashp)
1494      struct bfd_link_info *info;
1495      bfd *abfd;
1496      const char *name;
1497      flagword flags;
1498      asection *section;
1499      bfd_vma value;
1500      const char *string;
1501      boolean copy;
1502      boolean collect;
1503      struct bfd_link_hash_entry **hashp;
1504 {
1505   enum link_row row;
1506   struct bfd_link_hash_entry *h;
1507   boolean cycle;
1508
1509   if (bfd_is_ind_section (section)
1510       || (flags & BSF_INDIRECT) != 0)
1511     row = INDR_ROW;
1512   else if ((flags & BSF_WARNING) != 0)
1513     row = WARN_ROW;
1514   else if ((flags & BSF_CONSTRUCTOR) != 0)
1515     row = SET_ROW;
1516   else if (bfd_is_und_section (section))
1517     {
1518       if ((flags & BSF_WEAK) != 0)
1519         row = UNDEFW_ROW;
1520       else
1521         row = UNDEF_ROW;
1522     }
1523   else if ((flags & BSF_WEAK) != 0)
1524     row = DEFW_ROW;
1525   else if (bfd_is_com_section (section))
1526     row = COMMON_ROW;
1527   else
1528     row = DEF_ROW;
1529
1530   if (hashp != NULL && *hashp != NULL)
1531     h = *hashp;
1532   else
1533     {
1534       if (row == UNDEF_ROW || row == UNDEFW_ROW)
1535         h = bfd_wrapped_link_hash_lookup (abfd, info, name, true, copy, false);
1536       else
1537         h = bfd_link_hash_lookup (info->hash, name, true, copy, false);
1538       if (h == NULL)
1539         {
1540           if (hashp != NULL)
1541             *hashp = NULL;
1542           return false;
1543         }
1544     }
1545
1546   if (info->notice_all
1547       || (info->notice_hash != (struct bfd_hash_table *) NULL
1548           && (bfd_hash_lookup (info->notice_hash, name, false, false)
1549               != (struct bfd_hash_entry *) NULL)))
1550     {
1551       if (! (*info->callbacks->notice) (info, h->root.string, abfd, section,
1552                                         value))
1553         return false;
1554     }
1555
1556   if (hashp != (struct bfd_link_hash_entry **) NULL)
1557     *hashp = h;
1558
1559   do
1560     {
1561       enum link_action action;
1562
1563       cycle = false;
1564       action = link_action[(int) row][(int) h->type];
1565       switch (action)
1566         {
1567         case FAIL:
1568           abort ();
1569
1570         case NOACT:
1571           /* Do nothing.  */
1572           break;
1573
1574         case UND:
1575           /* Make a new undefined symbol.  */
1576           h->type = bfd_link_hash_undefined;
1577           h->u.undef.abfd = abfd;
1578           bfd_link_add_undef (info->hash, h);
1579           break;
1580
1581         case WEAK:
1582           /* Make a new weak undefined symbol.  */
1583           h->type = bfd_link_hash_undefweak;
1584           h->u.undef.abfd = abfd;
1585           break;
1586
1587         case CDEF:
1588           /* We have found a definition for a symbol which was
1589              previously common.  */
1590           BFD_ASSERT (h->type == bfd_link_hash_common);
1591           if (! ((*info->callbacks->multiple_common)
1592                  (info, h->root.string,
1593                   h->u.c.p->section->owner, bfd_link_hash_common, h->u.c.size,
1594                   abfd, bfd_link_hash_defined, (bfd_vma) 0)))
1595             return false;
1596           /* Fall through.  */
1597         case DEF:
1598         case DEFW:
1599           {
1600             enum bfd_link_hash_type oldtype;
1601
1602             /* Define a symbol.  */
1603             oldtype = h->type;
1604             if (action == DEFW)
1605               h->type = bfd_link_hash_defweak;
1606             else
1607               h->type = bfd_link_hash_defined;
1608             h->u.def.section = section;
1609             h->u.def.value = value;
1610
1611             /* If we have been asked to, we act like collect2 and
1612                identify all functions that might be global
1613                constructors and destructors and pass them up in a
1614                callback.  We only do this for certain object file
1615                types, since many object file types can handle this
1616                automatically.  */
1617             if (collect && name[0] == '_')
1618               {
1619                 const char *s;
1620
1621                 /* A constructor or destructor name starts like this:
1622                    _+GLOBAL_[_.$][ID][_.$] where the first [_.$] and
1623                    the second are the same character (we accept any
1624                    character there, in case a new object file format
1625                    comes along with even worse naming restrictions).  */
1626
1627 #define CONS_PREFIX "GLOBAL_"
1628 #define CONS_PREFIX_LEN (sizeof CONS_PREFIX - 1)
1629
1630                 s = name + 1;
1631                 while (*s == '_')
1632                   ++s;
1633                 if (s[0] == 'G'
1634                     && strncmp (s, CONS_PREFIX, CONS_PREFIX_LEN - 1) == 0)
1635                   {
1636                     char c;
1637
1638                     c = s[CONS_PREFIX_LEN + 1];
1639                     if ((c == 'I' || c == 'D')
1640                         && s[CONS_PREFIX_LEN] == s[CONS_PREFIX_LEN + 2])
1641                       {
1642                         /* If this is a definition of a symbol which
1643                            was previously weakly defined, we are in
1644                            trouble.  We have already added a
1645                            constructor entry for the weak defined
1646                            symbol, and now we are trying to add one
1647                            for the new symbol.  Fortunately, this case
1648                            should never arise in practice.  */
1649                         if (oldtype == bfd_link_hash_defweak)
1650                           abort ();
1651
1652                         if (! ((*info->callbacks->constructor)
1653                                (info,
1654                                 c == 'I' ? true : false,
1655                                 h->root.string, abfd, section, value)))
1656                           return false;
1657                       }
1658                   }
1659               }
1660           }
1661
1662           break;
1663
1664         case COM:
1665           /* We have found a common definition for a symbol.  */
1666           if (h->type == bfd_link_hash_new)
1667             bfd_link_add_undef (info->hash, h);
1668           h->type = bfd_link_hash_common;
1669           h->u.c.p =
1670             ((struct bfd_link_hash_common_entry *)
1671              bfd_hash_allocate (&info->hash->table,
1672                                 sizeof (struct bfd_link_hash_common_entry)));
1673           if (h->u.c.p == NULL)
1674             return false;
1675
1676           h->u.c.size = value;
1677
1678           /* Select a default alignment based on the size.  This may
1679              be overridden by the caller.  */
1680           {
1681             unsigned int power;
1682
1683             power = bfd_log2 (value);
1684             if (power > 4)
1685               power = 4;
1686             h->u.c.p->alignment_power = power;
1687           }
1688
1689           /* The section of a common symbol is only used if the common
1690              symbol is actually allocated.  It basically provides a
1691              hook for the linker script to decide which output section
1692              the common symbols should be put in.  In most cases, the
1693              section of a common symbol will be bfd_com_section_ptr,
1694              the code here will choose a common symbol section named
1695              "COMMON", and the linker script will contain *(COMMON) in
1696              the appropriate place.  A few targets use separate common
1697              sections for small symbols, and they require special
1698              handling.  */
1699           if (section == bfd_com_section_ptr)
1700             {
1701               h->u.c.p->section = bfd_make_section_old_way (abfd, "COMMON");
1702               h->u.c.p->section->flags = SEC_ALLOC;
1703             }
1704           else if (section->owner != abfd)
1705             {
1706               h->u.c.p->section = bfd_make_section_old_way (abfd,
1707                                                             section->name);
1708               h->u.c.p->section->flags = SEC_ALLOC;
1709             }
1710           else
1711             h->u.c.p->section = section;
1712           break;
1713
1714         case REF:
1715           /* A reference to a defined symbol.  */
1716           if (h->next == NULL && info->hash->undefs_tail != h)
1717             h->next = h;
1718           break;
1719
1720         case BIG:
1721           /* We have found a common definition for a symbol which
1722              already had a common definition.  Use the maximum of the
1723              two sizes, and use the section required by the larger symbol.  */
1724           BFD_ASSERT (h->type == bfd_link_hash_common);
1725           if (! ((*info->callbacks->multiple_common)
1726                  (info, h->root.string,
1727                   h->u.c.p->section->owner, bfd_link_hash_common, h->u.c.size,
1728                   abfd, bfd_link_hash_common, value)))
1729             return false;
1730           if (value > h->u.c.size)
1731             {
1732               unsigned int power;
1733
1734               h->u.c.size = value;
1735
1736               /* Select a default alignment based on the size.  This may
1737                  be overridden by the caller.  */
1738               power = bfd_log2 (value);
1739               if (power > 4)
1740                 power = 4;
1741               h->u.c.p->alignment_power = power;
1742
1743               /* Some systems have special treatment for small commons,
1744                  hence we want to select the section used by the larger
1745                  symbol.  This makes sure the symbol does not go in a
1746                  small common section if it is now too large.  */
1747               if (section == bfd_com_section_ptr)
1748                 {
1749                   h->u.c.p->section
1750                     = bfd_make_section_old_way (abfd, "COMMON");
1751                   h->u.c.p->section->flags = SEC_ALLOC;
1752                 }
1753               else if (section->owner != abfd)
1754                 {
1755                   h->u.c.p->section
1756                     = bfd_make_section_old_way (abfd, section->name);
1757                   h->u.c.p->section->flags = SEC_ALLOC;
1758                 }
1759               else
1760                 h->u.c.p->section = section;
1761             }
1762           break;
1763
1764         case CREF:
1765           {
1766             bfd *obfd;
1767
1768             /* We have found a common definition for a symbol which
1769                was already defined.  FIXME: It would nice if we could
1770                report the BFD which defined an indirect symbol, but we
1771                don't have anywhere to store the information.  */
1772             if (h->type == bfd_link_hash_defined
1773                 || h->type == bfd_link_hash_defweak)
1774               obfd = h->u.def.section->owner;
1775             else
1776               obfd = NULL;
1777             if (! ((*info->callbacks->multiple_common)
1778                    (info, h->root.string, obfd, h->type, (bfd_vma) 0,
1779                     abfd, bfd_link_hash_common, value)))
1780               return false;
1781           }
1782           break;
1783
1784         case MIND:
1785           /* Multiple indirect symbols.  This is OK if they both point
1786              to the same symbol.  */
1787           if (strcmp (h->u.i.link->root.string, string) == 0)
1788             break;
1789           /* Fall through.  */
1790         case MDEF:
1791           /* Handle a multiple definition.  */
1792           {
1793             asection *msec = NULL;
1794             bfd_vma mval = 0;
1795
1796             switch (h->type)
1797               {
1798               case bfd_link_hash_defined:
1799                 msec = h->u.def.section;
1800                 mval = h->u.def.value;
1801                 break;
1802               case bfd_link_hash_indirect:
1803                 msec = bfd_ind_section_ptr;
1804                 mval = 0;
1805                 break;
1806               default:
1807                 abort ();
1808               }
1809
1810             /* Ignore a redefinition of an absolute symbol to the same
1811                value; it's harmless.  */
1812             if (h->type == bfd_link_hash_defined
1813                 && bfd_is_abs_section (msec)
1814                 && bfd_is_abs_section (section)
1815                 && value == mval)
1816               break;
1817
1818             if (! ((*info->callbacks->multiple_definition)
1819                    (info, h->root.string, msec->owner, msec, mval, abfd,
1820                     section, value)))
1821               return false;
1822           }
1823           break;
1824
1825         case CIND:
1826           /* Create an indirect symbol from an existing common symbol.  */
1827           BFD_ASSERT (h->type == bfd_link_hash_common);
1828           if (! ((*info->callbacks->multiple_common)
1829                  (info, h->root.string,
1830                   h->u.c.p->section->owner, bfd_link_hash_common, h->u.c.size,
1831                   abfd, bfd_link_hash_indirect, (bfd_vma) 0)))
1832             return false;
1833           /* Fall through.  */
1834         case IND:
1835           /* Create an indirect symbol.  */
1836           {
1837             struct bfd_link_hash_entry *inh;
1838
1839             /* STRING is the name of the symbol we want to indirect
1840                to.  */
1841             inh = bfd_wrapped_link_hash_lookup (abfd, info, string, true,
1842                                                 copy, false);
1843             if (inh == (struct bfd_link_hash_entry *) NULL)
1844               return false;
1845             if (inh->type == bfd_link_hash_indirect
1846                 && inh->u.i.link == h)
1847               {
1848                 (*_bfd_error_handler)
1849                   (_("%s: indirect symbol `%s' to `%s' is a loop"),
1850                    bfd_archive_filename (abfd), name, string);
1851                 bfd_set_error (bfd_error_invalid_operation);
1852                 return false;
1853               }
1854             if (inh->type == bfd_link_hash_new)
1855               {
1856                 inh->type = bfd_link_hash_undefined;
1857                 inh->u.undef.abfd = abfd;
1858                 bfd_link_add_undef (info->hash, inh);
1859               }
1860
1861             /* If the indirect symbol has been referenced, we need to
1862                push the reference down to the symbol we are
1863                referencing.  */
1864             if (h->type != bfd_link_hash_new)
1865               {
1866                 row = UNDEF_ROW;
1867                 cycle = true;
1868               }
1869
1870             h->type = bfd_link_hash_indirect;
1871             h->u.i.link = inh;
1872           }
1873           break;
1874
1875         case SET:
1876           /* Add an entry to a set.  */
1877           if (! (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR,
1878                                                 abfd, section, value))
1879             return false;
1880           break;
1881
1882         case WARNC:
1883           /* Issue a warning and cycle.  */
1884           if (h->u.i.warning != NULL)
1885             {
1886               if (! (*info->callbacks->warning) (info, h->u.i.warning,
1887                                                  h->root.string, abfd,
1888                                                  (asection *) NULL,
1889                                                  (bfd_vma) 0))
1890                 return false;
1891               /* Only issue a warning once.  */
1892               h->u.i.warning = NULL;
1893             }
1894           /* Fall through.  */
1895         case CYCLE:
1896           /* Try again with the referenced symbol.  */
1897           h = h->u.i.link;
1898           cycle = true;
1899           break;
1900
1901         case REFC:
1902           /* A reference to an indirect symbol.  */
1903           if (h->next == NULL && info->hash->undefs_tail != h)
1904             h->next = h;
1905           h = h->u.i.link;
1906           cycle = true;
1907           break;
1908
1909         case WARN:
1910           /* Issue a warning.  */
1911           if (! (*info->callbacks->warning) (info, string, h->root.string,
1912                                              hash_entry_bfd (h),
1913                                              (asection *) NULL, (bfd_vma) 0))
1914             return false;
1915           break;
1916
1917         case CWARN:
1918           /* Warn if this symbol has been referenced already,
1919              otherwise add a warning.  A symbol has been referenced if
1920              the next field is not NULL, or it is the tail of the
1921              undefined symbol list.  The REF case above helps to
1922              ensure this.  */
1923           if (h->next != NULL || info->hash->undefs_tail == h)
1924             {
1925               if (! (*info->callbacks->warning) (info, string, h->root.string,
1926                                                  hash_entry_bfd (h),
1927                                                  (asection *) NULL,
1928                                                  (bfd_vma) 0))
1929                 return false;
1930               break;
1931             }
1932           /* Fall through.  */
1933         case MWARN:
1934           /* Make a warning symbol.  */
1935           {
1936             struct bfd_link_hash_entry *sub;
1937
1938             /* STRING is the warning to give.  */
1939             sub = ((struct bfd_link_hash_entry *)
1940                    ((*info->hash->table.newfunc)
1941                     ((struct bfd_hash_entry *) NULL, &info->hash->table,
1942                      h->root.string)));
1943             if (sub == NULL)
1944               return false;
1945             *sub = *h;
1946             sub->type = bfd_link_hash_warning;
1947             sub->u.i.link = h;
1948             if (! copy)
1949               sub->u.i.warning = string;
1950             else
1951               {
1952                 char *w;
1953
1954                 w = bfd_hash_allocate (&info->hash->table,
1955                                        strlen (string) + 1);
1956                 if (w == NULL)
1957                   return false;
1958                 strcpy (w, string);
1959                 sub->u.i.warning = w;
1960               }
1961
1962             bfd_hash_replace (&info->hash->table,
1963                               (struct bfd_hash_entry *) h,
1964                               (struct bfd_hash_entry *) sub);
1965             if (hashp != NULL)
1966               *hashp = sub;
1967           }
1968           break;
1969         }
1970     }
1971   while (cycle);
1972
1973   return true;
1974 }
1975 \f
1976 /* Generic final link routine.  */
1977
1978 boolean
1979 _bfd_generic_final_link (abfd, info)
1980      bfd *abfd;
1981      struct bfd_link_info *info;
1982 {
1983   bfd *sub;
1984   asection *o;
1985   struct bfd_link_order *p;
1986   size_t outsymalloc;
1987   struct generic_write_global_symbol_info wginfo;
1988
1989   bfd_get_outsymbols (abfd) = (asymbol **) NULL;
1990   bfd_get_symcount (abfd) = 0;
1991   outsymalloc = 0;
1992
1993   /* Mark all sections which will be included in the output file.  */
1994   for (o = abfd->sections; o != NULL; o = o->next)
1995     for (p = o->link_order_head; p != NULL; p = p->next)
1996       if (p->type == bfd_indirect_link_order)
1997         p->u.indirect.section->linker_mark = true;
1998
1999   /* Build the output symbol table.  */
2000   for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
2001     if (! _bfd_generic_link_output_symbols (abfd, sub, info, &outsymalloc))
2002       return false;
2003
2004   /* Accumulate the global symbols.  */
2005   wginfo.info = info;
2006   wginfo.output_bfd = abfd;
2007   wginfo.psymalloc = &outsymalloc;
2008   _bfd_generic_link_hash_traverse (_bfd_generic_hash_table (info),
2009                                    _bfd_generic_link_write_global_symbol,
2010                                    (PTR) &wginfo);
2011
2012   /* Make sure we have a trailing NULL pointer on OUTSYMBOLS.  We
2013      shouldn't really need one, since we have SYMCOUNT, but some old
2014      code still expects one.  */
2015   if (! generic_add_output_symbol (abfd, &outsymalloc, NULL))
2016     return false;
2017
2018   if (info->relocateable)
2019     {
2020       /* Allocate space for the output relocs for each section.  */
2021       for (o = abfd->sections;
2022            o != (asection *) NULL;
2023            o = o->next)
2024         {
2025           o->reloc_count = 0;
2026           for (p = o->link_order_head;
2027                p != (struct bfd_link_order *) NULL;
2028                p = p->next)
2029             {
2030               if (p->type == bfd_section_reloc_link_order
2031                   || p->type == bfd_symbol_reloc_link_order)
2032                 ++o->reloc_count;
2033               else if (p->type == bfd_indirect_link_order)
2034                 {
2035                   asection *input_section;
2036                   bfd *input_bfd;
2037                   long relsize;
2038                   arelent **relocs;
2039                   asymbol **symbols;
2040                   long reloc_count;
2041
2042                   input_section = p->u.indirect.section;
2043                   input_bfd = input_section->owner;
2044                   relsize = bfd_get_reloc_upper_bound (input_bfd,
2045                                                        input_section);
2046                   if (relsize < 0)
2047                     return false;
2048                   relocs = (arelent **) bfd_malloc ((bfd_size_type) relsize);
2049                   if (!relocs && relsize != 0)
2050                     return false;
2051                   symbols = _bfd_generic_link_get_symbols (input_bfd);
2052                   reloc_count = bfd_canonicalize_reloc (input_bfd,
2053                                                         input_section,
2054                                                         relocs,
2055                                                         symbols);
2056                   if (reloc_count < 0)
2057                     return false;
2058                   BFD_ASSERT ((unsigned long) reloc_count
2059                               == input_section->reloc_count);
2060                   o->reloc_count += reloc_count;
2061                   free (relocs);
2062                 }
2063             }
2064           if (o->reloc_count > 0)
2065             {
2066               bfd_size_type amt;
2067
2068               amt = o->reloc_count;
2069               amt *= sizeof (arelent *);
2070               o->orelocation = (arelent **) bfd_alloc (abfd, amt);
2071               if (!o->orelocation)
2072                 return false;
2073               o->flags |= SEC_RELOC;
2074               /* Reset the count so that it can be used as an index
2075                  when putting in the output relocs.  */
2076               o->reloc_count = 0;
2077             }
2078         }
2079     }
2080
2081   /* Handle all the link order information for the sections.  */
2082   for (o = abfd->sections;
2083        o != (asection *) NULL;
2084        o = o->next)
2085     {
2086       for (p = o->link_order_head;
2087            p != (struct bfd_link_order *) NULL;
2088            p = p->next)
2089         {
2090           switch (p->type)
2091             {
2092             case bfd_section_reloc_link_order:
2093             case bfd_symbol_reloc_link_order:
2094               if (! _bfd_generic_reloc_link_order (abfd, info, o, p))
2095                 return false;
2096               break;
2097             case bfd_indirect_link_order:
2098               if (! default_indirect_link_order (abfd, info, o, p, true))
2099                 return false;
2100               break;
2101             default:
2102               if (! _bfd_default_link_order (abfd, info, o, p))
2103                 return false;
2104               break;
2105             }
2106         }
2107     }
2108
2109   return true;
2110 }
2111
2112 /* Add an output symbol to the output BFD.  */
2113
2114 static boolean
2115 generic_add_output_symbol (output_bfd, psymalloc, sym)
2116      bfd *output_bfd;
2117      size_t *psymalloc;
2118      asymbol *sym;
2119 {
2120   if (bfd_get_symcount (output_bfd) >= *psymalloc)
2121     {
2122       asymbol **newsyms;
2123       bfd_size_type amt;
2124
2125       if (*psymalloc == 0)
2126         *psymalloc = 124;
2127       else
2128         *psymalloc *= 2;
2129       amt = *psymalloc;
2130       amt *= sizeof (asymbol *);
2131       newsyms = (asymbol **) bfd_realloc (bfd_get_outsymbols (output_bfd), amt);
2132       if (newsyms == (asymbol **) NULL)
2133         return false;
2134       bfd_get_outsymbols (output_bfd) = newsyms;
2135     }
2136
2137   bfd_get_outsymbols (output_bfd) [bfd_get_symcount (output_bfd)] = sym;
2138   if (sym != NULL)
2139     ++ bfd_get_symcount (output_bfd);
2140
2141   return true;
2142 }
2143
2144 /* Handle the symbols for an input BFD.  */
2145
2146 boolean
2147 _bfd_generic_link_output_symbols (output_bfd, input_bfd, info, psymalloc)
2148      bfd *output_bfd;
2149      bfd *input_bfd;
2150      struct bfd_link_info *info;
2151      size_t *psymalloc;
2152 {
2153   asymbol **sym_ptr;
2154   asymbol **sym_end;
2155
2156   if (! generic_link_read_symbols (input_bfd))
2157     return false;
2158
2159   /* Create a filename symbol if we are supposed to.  */
2160   if (info->create_object_symbols_section != (asection *) NULL)
2161     {
2162       asection *sec;
2163
2164       for (sec = input_bfd->sections;
2165            sec != (asection *) NULL;
2166            sec = sec->next)
2167         {
2168           if (sec->output_section == info->create_object_symbols_section)
2169             {
2170               asymbol *newsym;
2171
2172               newsym = bfd_make_empty_symbol (input_bfd);
2173               if (!newsym)
2174                 return false;
2175               newsym->name = input_bfd->filename;
2176               newsym->value = 0;
2177               newsym->flags = BSF_LOCAL | BSF_FILE;
2178               newsym->section = sec;
2179
2180               if (! generic_add_output_symbol (output_bfd, psymalloc,
2181                                                newsym))
2182                 return false;
2183
2184               break;
2185             }
2186         }
2187     }
2188
2189   /* Adjust the values of the globally visible symbols, and write out
2190      local symbols.  */
2191   sym_ptr = _bfd_generic_link_get_symbols (input_bfd);
2192   sym_end = sym_ptr + _bfd_generic_link_get_symcount (input_bfd);
2193   for (; sym_ptr < sym_end; sym_ptr++)
2194     {
2195       asymbol *sym;
2196       struct generic_link_hash_entry *h;
2197       boolean output;
2198
2199       h = (struct generic_link_hash_entry *) NULL;
2200       sym = *sym_ptr;
2201       if ((sym->flags & (BSF_INDIRECT
2202                          | BSF_WARNING
2203                          | BSF_GLOBAL
2204                          | BSF_CONSTRUCTOR
2205                          | BSF_WEAK)) != 0
2206           || bfd_is_und_section (bfd_get_section (sym))
2207           || bfd_is_com_section (bfd_get_section (sym))
2208           || bfd_is_ind_section (bfd_get_section (sym)))
2209         {
2210           if (sym->udata.p != NULL)
2211             h = (struct generic_link_hash_entry *) sym->udata.p;
2212           else if ((sym->flags & BSF_CONSTRUCTOR) != 0)
2213             {
2214               /* This case normally means that the main linker code
2215                  deliberately ignored this constructor symbol.  We
2216                  should just pass it through.  This will screw up if
2217                  the constructor symbol is from a different,
2218                  non-generic, object file format, but the case will
2219                  only arise when linking with -r, which will probably
2220                  fail anyhow, since there will be no way to represent
2221                  the relocs in the output format being used.  */
2222               h = NULL;
2223             }
2224           else if (bfd_is_und_section (bfd_get_section (sym)))
2225             h = ((struct generic_link_hash_entry *)
2226                  bfd_wrapped_link_hash_lookup (output_bfd, info,
2227                                                bfd_asymbol_name (sym),
2228                                                false, false, true));
2229           else
2230             h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info),
2231                                                bfd_asymbol_name (sym),
2232                                                false, false, true);
2233
2234           if (h != (struct generic_link_hash_entry *) NULL)
2235             {
2236               /* Force all references to this symbol to point to
2237                  the same area in memory.  It is possible that
2238                  this routine will be called with a hash table
2239                  other than a generic hash table, so we double
2240                  check that.  */
2241               if (info->hash->creator == input_bfd->xvec)
2242                 {
2243                   if (h->sym != (asymbol *) NULL)
2244                     *sym_ptr = sym = h->sym;
2245                 }
2246
2247               switch (h->root.type)
2248                 {
2249                 default:
2250                 case bfd_link_hash_new:
2251                   abort ();
2252                 case bfd_link_hash_undefined:
2253                   break;
2254                 case bfd_link_hash_undefweak:
2255                   sym->flags |= BSF_WEAK;
2256                   break;
2257                 case bfd_link_hash_indirect:
2258                   h = (struct generic_link_hash_entry *) h->root.u.i.link;
2259                   /* fall through */
2260                 case bfd_link_hash_defined:
2261                   sym->flags |= BSF_GLOBAL;
2262                   sym->flags &=~ BSF_CONSTRUCTOR;
2263                   sym->value = h->root.u.def.value;
2264                   sym->section = h->root.u.def.section;
2265                   break;
2266                 case bfd_link_hash_defweak:
2267                   sym->flags |= BSF_WEAK;
2268                   sym->flags &=~ BSF_CONSTRUCTOR;
2269                   sym->value = h->root.u.def.value;
2270                   sym->section = h->root.u.def.section;
2271                   break;
2272                 case bfd_link_hash_common:
2273                   sym->value = h->root.u.c.size;
2274                   sym->flags |= BSF_GLOBAL;
2275                   if (! bfd_is_com_section (sym->section))
2276                     {
2277                       BFD_ASSERT (bfd_is_und_section (sym->section));
2278                       sym->section = bfd_com_section_ptr;
2279                     }
2280                   /* We do not set the section of the symbol to
2281                      h->root.u.c.p->section.  That value was saved so
2282                      that we would know where to allocate the symbol
2283                      if it was defined.  In this case the type is
2284                      still bfd_link_hash_common, so we did not define
2285                      it, so we do not want to use that section.  */
2286                   break;
2287                 }
2288             }
2289         }
2290
2291       /* This switch is straight from the old code in
2292          write_file_locals in ldsym.c.  */
2293       if (info->strip == strip_all
2294           || (info->strip == strip_some
2295               && (bfd_hash_lookup (info->keep_hash, bfd_asymbol_name (sym),
2296                                    false, false)
2297                   == (struct bfd_hash_entry *) NULL)))
2298         output = false;
2299       else if ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0)
2300         {
2301           /* If this symbol is marked as occurring now, rather
2302              than at the end, output it now.  This is used for
2303              COFF C_EXT FCN symbols.  FIXME: There must be a
2304              better way.  */
2305           if (bfd_asymbol_bfd (sym) == input_bfd
2306               && (sym->flags & BSF_NOT_AT_END) != 0)
2307             output = true;
2308           else
2309             output = false;
2310         }
2311       else if (bfd_is_ind_section (sym->section))
2312         output = false;
2313       else if ((sym->flags & BSF_DEBUGGING) != 0)
2314         {
2315           if (info->strip == strip_none)
2316             output = true;
2317           else
2318             output = false;
2319         }
2320       else if (bfd_is_und_section (sym->section)
2321                || bfd_is_com_section (sym->section))
2322         output = false;
2323       else if ((sym->flags & BSF_LOCAL) != 0)
2324         {
2325           if ((sym->flags & BSF_WARNING) != 0)
2326             output = false;
2327           else
2328             {
2329               switch (info->discard)
2330                 {
2331                 default:
2332                 case discard_all:
2333                   output = false;
2334                   break;
2335                 case discard_sec_merge:
2336                   output = true;
2337                   if (info->relocateable
2338                       || ! (sym->section->flags & SEC_MERGE))
2339                     break;
2340                   /* FALLTHROUGH */
2341                 case discard_l:
2342                   if (bfd_is_local_label (input_bfd, sym))
2343                     output = false;
2344                   else
2345                     output = true;
2346                   break;
2347                 case discard_none:
2348                   output = true;
2349                   break;
2350                 }
2351             }
2352         }
2353       else if ((sym->flags & BSF_CONSTRUCTOR))
2354         {
2355           if (info->strip != strip_all)
2356             output = true;
2357           else
2358             output = false;
2359         }
2360       else
2361         abort ();
2362
2363       /* If this symbol is in a section which is not being included
2364          in the output file, then we don't want to output the symbol.
2365
2366          Gross.  .bss and similar sections won't have the linker_mark
2367          field set.  */
2368       if ((sym->section->flags & SEC_HAS_CONTENTS) != 0
2369           && sym->section->linker_mark == false)
2370         output = false;
2371
2372       if (output)
2373         {
2374           if (! generic_add_output_symbol (output_bfd, psymalloc, sym))
2375             return false;
2376           if (h != (struct generic_link_hash_entry *) NULL)
2377             h->written = true;
2378         }
2379     }
2380
2381   return true;
2382 }
2383
2384 /* Set the section and value of a generic BFD symbol based on a linker
2385    hash table entry.  */
2386
2387 static void
2388 set_symbol_from_hash (sym, h)
2389      asymbol *sym;
2390      struct bfd_link_hash_entry *h;
2391 {
2392   switch (h->type)
2393     {
2394     default:
2395       abort ();
2396       break;
2397     case bfd_link_hash_new:
2398       /* This can happen when a constructor symbol is seen but we are
2399          not building constructors.  */
2400       if (sym->section != NULL)
2401         {
2402           BFD_ASSERT ((sym->flags & BSF_CONSTRUCTOR) != 0);
2403         }
2404       else
2405         {
2406           sym->flags |= BSF_CONSTRUCTOR;
2407           sym->section = bfd_abs_section_ptr;
2408           sym->value = 0;
2409         }
2410       break;
2411     case bfd_link_hash_undefined:
2412       sym->section = bfd_und_section_ptr;
2413       sym->value = 0;
2414       break;
2415     case bfd_link_hash_undefweak:
2416       sym->section = bfd_und_section_ptr;
2417       sym->value = 0;
2418       sym->flags |= BSF_WEAK;
2419       break;
2420     case bfd_link_hash_defined:
2421       sym->section = h->u.def.section;
2422       sym->value = h->u.def.value;
2423       break;
2424     case bfd_link_hash_defweak:
2425       sym->flags |= BSF_WEAK;
2426       sym->section = h->u.def.section;
2427       sym->value = h->u.def.value;
2428       break;
2429     case bfd_link_hash_common:
2430       sym->value = h->u.c.size;
2431       if (sym->section == NULL)
2432         sym->section = bfd_com_section_ptr;
2433       else if (! bfd_is_com_section (sym->section))
2434         {
2435           BFD_ASSERT (bfd_is_und_section (sym->section));
2436           sym->section = bfd_com_section_ptr;
2437         }
2438       /* Do not set the section; see _bfd_generic_link_output_symbols.  */
2439       break;
2440     case bfd_link_hash_indirect:
2441     case bfd_link_hash_warning:
2442       /* FIXME: What should we do here?  */
2443       break;
2444     }
2445 }
2446
2447 /* Write out a global symbol, if it hasn't already been written out.
2448    This is called for each symbol in the hash table.  */
2449
2450 boolean
2451 _bfd_generic_link_write_global_symbol (h, data)
2452      struct generic_link_hash_entry *h;
2453      PTR data;
2454 {
2455   struct generic_write_global_symbol_info *wginfo =
2456     (struct generic_write_global_symbol_info *) data;
2457   asymbol *sym;
2458
2459   if (h->root.type == bfd_link_hash_warning)
2460     h = (struct generic_link_hash_entry *) h->root.u.i.link;
2461
2462   if (h->written)
2463     return true;
2464
2465   h->written = true;
2466
2467   if (wginfo->info->strip == strip_all
2468       || (wginfo->info->strip == strip_some
2469           && bfd_hash_lookup (wginfo->info->keep_hash, h->root.root.string,
2470                               false, false) == NULL))
2471     return true;
2472
2473   if (h->sym != (asymbol *) NULL)
2474     sym = h->sym;
2475   else
2476     {
2477       sym = bfd_make_empty_symbol (wginfo->output_bfd);
2478       if (!sym)
2479         return false;
2480       sym->name = h->root.root.string;
2481       sym->flags = 0;
2482     }
2483
2484   set_symbol_from_hash (sym, &h->root);
2485
2486   sym->flags |= BSF_GLOBAL;
2487
2488   if (! generic_add_output_symbol (wginfo->output_bfd, wginfo->psymalloc,
2489                                    sym))
2490     {
2491       /* FIXME: No way to return failure.  */
2492       abort ();
2493     }
2494
2495   return true;
2496 }
2497
2498 /* Create a relocation.  */
2499
2500 boolean
2501 _bfd_generic_reloc_link_order (abfd, info, sec, link_order)
2502      bfd *abfd;
2503      struct bfd_link_info *info;
2504      asection *sec;
2505      struct bfd_link_order *link_order;
2506 {
2507   arelent *r;
2508
2509   if (! info->relocateable)
2510     abort ();
2511   if (sec->orelocation == (arelent **) NULL)
2512     abort ();
2513
2514   r = (arelent *) bfd_alloc (abfd, (bfd_size_type) sizeof (arelent));
2515   if (r == (arelent *) NULL)
2516     return false;
2517
2518   r->address = link_order->offset;
2519   r->howto = bfd_reloc_type_lookup (abfd, link_order->u.reloc.p->reloc);
2520   if (r->howto == 0)
2521     {
2522       bfd_set_error (bfd_error_bad_value);
2523       return false;
2524     }
2525
2526   /* Get the symbol to use for the relocation.  */
2527   if (link_order->type == bfd_section_reloc_link_order)
2528     r->sym_ptr_ptr = link_order->u.reloc.p->u.section->symbol_ptr_ptr;
2529   else
2530     {
2531       struct generic_link_hash_entry *h;
2532
2533       h = ((struct generic_link_hash_entry *)
2534            bfd_wrapped_link_hash_lookup (abfd, info,
2535                                          link_order->u.reloc.p->u.name,
2536                                          false, false, true));
2537       if (h == (struct generic_link_hash_entry *) NULL
2538           || ! h->written)
2539         {
2540           if (! ((*info->callbacks->unattached_reloc)
2541                  (info, link_order->u.reloc.p->u.name,
2542                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
2543             return false;
2544           bfd_set_error (bfd_error_bad_value);
2545           return false;
2546         }
2547       r->sym_ptr_ptr = &h->sym;
2548     }
2549
2550   /* If this is an inplace reloc, write the addend to the object file.
2551      Otherwise, store it in the reloc addend.  */
2552   if (! r->howto->partial_inplace)
2553     r->addend = link_order->u.reloc.p->addend;
2554   else
2555     {
2556       bfd_size_type size;
2557       bfd_reloc_status_type rstat;
2558       bfd_byte *buf;
2559       boolean ok;
2560       file_ptr loc;
2561
2562       size = bfd_get_reloc_size (r->howto);
2563       buf = (bfd_byte *) bfd_zmalloc (size);
2564       if (buf == (bfd_byte *) NULL)
2565         return false;
2566       rstat = _bfd_relocate_contents (r->howto, abfd,
2567                                       (bfd_vma) link_order->u.reloc.p->addend,
2568                                       buf);
2569       switch (rstat)
2570         {
2571         case bfd_reloc_ok:
2572           break;
2573         default:
2574         case bfd_reloc_outofrange:
2575           abort ();
2576         case bfd_reloc_overflow:
2577           if (! ((*info->callbacks->reloc_overflow)
2578                  (info,
2579                   (link_order->type == bfd_section_reloc_link_order
2580                    ? bfd_section_name (abfd, link_order->u.reloc.p->u.section)
2581                    : link_order->u.reloc.p->u.name),
2582                   r->howto->name, link_order->u.reloc.p->addend,
2583                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
2584             {
2585               free (buf);
2586               return false;
2587             }
2588           break;
2589         }
2590       loc = link_order->offset * bfd_octets_per_byte (abfd);
2591       ok = bfd_set_section_contents (abfd, sec, (PTR) buf, loc,
2592                                      (bfd_size_type) size);
2593       free (buf);
2594       if (! ok)
2595         return false;
2596
2597       r->addend = 0;
2598     }
2599
2600   sec->orelocation[sec->reloc_count] = r;
2601   ++sec->reloc_count;
2602
2603   return true;
2604 }
2605 \f
2606 /* Allocate a new link_order for a section.  */
2607
2608 struct bfd_link_order *
2609 bfd_new_link_order (abfd, section)
2610      bfd *abfd;
2611      asection *section;
2612 {
2613   bfd_size_type amt = sizeof (struct bfd_link_order);
2614   struct bfd_link_order *new = (struct bfd_link_order *) bfd_alloc (abfd, amt);
2615   if (!new)
2616     return NULL;
2617
2618   new->type = bfd_undefined_link_order;
2619   new->offset = 0;
2620   new->size = 0;
2621   new->next = (struct bfd_link_order *) NULL;
2622
2623   if (section->link_order_tail != (struct bfd_link_order *) NULL)
2624     section->link_order_tail->next = new;
2625   else
2626     section->link_order_head = new;
2627   section->link_order_tail = new;
2628
2629   return new;
2630 }
2631
2632 /* Default link order processing routine.  Note that we can not handle
2633    the reloc_link_order types here, since they depend upon the details
2634    of how the particular backends generates relocs.  */
2635
2636 boolean
2637 _bfd_default_link_order (abfd, info, sec, link_order)
2638      bfd *abfd;
2639      struct bfd_link_info *info;
2640      asection *sec;
2641      struct bfd_link_order *link_order;
2642 {
2643   file_ptr loc;
2644
2645   switch (link_order->type)
2646     {
2647     case bfd_undefined_link_order:
2648     case bfd_section_reloc_link_order:
2649     case bfd_symbol_reloc_link_order:
2650     default:
2651       abort ();
2652     case bfd_indirect_link_order:
2653       return default_indirect_link_order (abfd, info, sec, link_order,
2654                                           false);
2655     case bfd_fill_link_order:
2656       return default_fill_link_order (abfd, info, sec, link_order);
2657     case bfd_data_link_order:
2658       loc = link_order->offset * bfd_octets_per_byte (abfd);
2659       return bfd_set_section_contents (abfd, sec,
2660                                        (PTR) link_order->u.data.contents,
2661                                        loc, link_order->size);
2662     }
2663 }
2664
2665 /* Default routine to handle a bfd_fill_link_order.  */
2666
2667 static boolean
2668 default_fill_link_order (abfd, info, sec, link_order)
2669      bfd *abfd;
2670      struct bfd_link_info *info ATTRIBUTE_UNUSED;
2671      asection *sec;
2672      struct bfd_link_order *link_order;
2673 {
2674   bfd_size_type size;
2675   unsigned char *space;
2676   size_t i;
2677   unsigned int fill;
2678   file_ptr loc;
2679   boolean result;
2680
2681   BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0);
2682
2683   size = link_order->size;
2684   if (size == 0)
2685     return true;
2686
2687   space = (unsigned char *) bfd_malloc (size);
2688   if (space == NULL)
2689     return false;
2690
2691   fill = link_order->u.fill.value;
2692   for (i = 0; i < size; i += 4)
2693     space[i] = fill >> 24;
2694   for (i = 1; i < size; i += 4)
2695     space[i] = fill >> 16;
2696   for (i = 2; i < size; i += 4)
2697     space[i] = fill >> 8;
2698   for (i = 3; i < size; i += 4)
2699     space[i] = fill;
2700
2701   loc = link_order->offset * bfd_octets_per_byte (abfd);
2702   result = bfd_set_section_contents (abfd, sec, space, loc, size);
2703
2704   free (space);
2705   return result;
2706 }
2707
2708 /* Default routine to handle a bfd_indirect_link_order.  */
2709
2710 static boolean
2711 default_indirect_link_order (output_bfd, info, output_section, link_order,
2712                              generic_linker)
2713      bfd *output_bfd;
2714      struct bfd_link_info *info;
2715      asection *output_section;
2716      struct bfd_link_order *link_order;
2717      boolean generic_linker;
2718 {
2719   asection *input_section;
2720   bfd *input_bfd;
2721   bfd_byte *contents = NULL;
2722   bfd_byte *new_contents;
2723   bfd_size_type sec_size;
2724   file_ptr loc;
2725
2726   BFD_ASSERT ((output_section->flags & SEC_HAS_CONTENTS) != 0);
2727
2728   if (link_order->size == 0)
2729     return true;
2730
2731   input_section = link_order->u.indirect.section;
2732   input_bfd = input_section->owner;
2733
2734   BFD_ASSERT (input_section->output_section == output_section);
2735   BFD_ASSERT (input_section->output_offset == link_order->offset);
2736   BFD_ASSERT (input_section->_cooked_size == link_order->size);
2737
2738   if (info->relocateable
2739       && input_section->reloc_count > 0
2740       && output_section->orelocation == (arelent **) NULL)
2741     {
2742       /* Space has not been allocated for the output relocations.
2743          This can happen when we are called by a specific backend
2744          because somebody is attempting to link together different
2745          types of object files.  Handling this case correctly is
2746          difficult, and sometimes impossible.  */
2747       (*_bfd_error_handler)
2748         (_("Attempt to do relocateable link with %s input and %s output"),
2749          bfd_get_target (input_bfd), bfd_get_target (output_bfd));
2750       bfd_set_error (bfd_error_wrong_format);
2751       return false;
2752     }
2753
2754   if (! generic_linker)
2755     {
2756       asymbol **sympp;
2757       asymbol **symppend;
2758
2759       /* Get the canonical symbols.  The generic linker will always
2760          have retrieved them by this point, but we are being called by
2761          a specific linker, presumably because we are linking
2762          different types of object files together.  */
2763       if (! generic_link_read_symbols (input_bfd))
2764         return false;
2765
2766       /* Since we have been called by a specific linker, rather than
2767          the generic linker, the values of the symbols will not be
2768          right.  They will be the values as seen in the input file,
2769          not the values of the final link.  We need to fix them up
2770          before we can relocate the section.  */
2771       sympp = _bfd_generic_link_get_symbols (input_bfd);
2772       symppend = sympp + _bfd_generic_link_get_symcount (input_bfd);
2773       for (; sympp < symppend; sympp++)
2774         {
2775           asymbol *sym;
2776           struct bfd_link_hash_entry *h;
2777
2778           sym = *sympp;
2779
2780           if ((sym->flags & (BSF_INDIRECT
2781                              | BSF_WARNING
2782                              | BSF_GLOBAL
2783                              | BSF_CONSTRUCTOR
2784                              | BSF_WEAK)) != 0
2785               || bfd_is_und_section (bfd_get_section (sym))
2786               || bfd_is_com_section (bfd_get_section (sym))
2787               || bfd_is_ind_section (bfd_get_section (sym)))
2788             {
2789               /* sym->udata may have been set by
2790                  generic_link_add_symbol_list.  */
2791               if (sym->udata.p != NULL)
2792                 h = (struct bfd_link_hash_entry *) sym->udata.p;
2793               else if (bfd_is_und_section (bfd_get_section (sym)))
2794                 h = bfd_wrapped_link_hash_lookup (output_bfd, info,
2795                                                   bfd_asymbol_name (sym),
2796                                                   false, false, true);
2797               else
2798                 h = bfd_link_hash_lookup (info->hash,
2799                                           bfd_asymbol_name (sym),
2800                                           false, false, true);
2801               if (h != NULL)
2802                 set_symbol_from_hash (sym, h);
2803             }
2804         }
2805     }
2806
2807   /* Get and relocate the section contents.  */
2808   sec_size = bfd_section_size (input_bfd, input_section);
2809   contents = ((bfd_byte *) bfd_malloc (sec_size));
2810   if (contents == NULL && sec_size != 0)
2811     goto error_return;
2812   new_contents = (bfd_get_relocated_section_contents
2813                   (output_bfd, info, link_order, contents, info->relocateable,
2814                    _bfd_generic_link_get_symbols (input_bfd)));
2815   if (!new_contents)
2816     goto error_return;
2817
2818   /* Output the section contents.  */
2819   loc = link_order->offset * bfd_octets_per_byte (output_bfd);
2820   if (! bfd_set_section_contents (output_bfd, output_section,
2821                                   (PTR) new_contents, loc, link_order->size))
2822     goto error_return;
2823
2824   if (contents != NULL)
2825     free (contents);
2826   return true;
2827
2828  error_return:
2829   if (contents != NULL)
2830     free (contents);
2831   return false;
2832 }
2833
2834 /* A little routine to count the number of relocs in a link_order
2835    list.  */
2836
2837 unsigned int
2838 _bfd_count_link_order_relocs (link_order)
2839      struct bfd_link_order *link_order;
2840 {
2841   register unsigned int c;
2842   register struct bfd_link_order *l;
2843
2844   c = 0;
2845   for (l = link_order; l != (struct bfd_link_order *) NULL; l = l->next)
2846     {
2847       if (l->type == bfd_section_reloc_link_order
2848           || l->type == bfd_symbol_reloc_link_order)
2849         ++c;
2850     }
2851
2852   return c;
2853 }
2854
2855 /*
2856 FUNCTION
2857         bfd_link_split_section
2858
2859 SYNOPSIS
2860         boolean bfd_link_split_section(bfd *abfd, asection *sec);
2861
2862 DESCRIPTION
2863         Return nonzero if @var{sec} should be split during a
2864         reloceatable or final link.
2865
2866 .#define bfd_link_split_section(abfd, sec) \
2867 .       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
2868 .
2869
2870 */
2871
2872 boolean
2873 _bfd_generic_link_split_section (abfd, sec)
2874      bfd *abfd ATTRIBUTE_UNUSED;
2875      asection *sec ATTRIBUTE_UNUSED;
2876 {
2877   return false;
2878 }