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