Typo.
[external/binutils.git] / bfd / linker.c
1 /* linker.c -- BFD linker routines
2    Copyright (C) 1993, 94 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., 675 Mass Ave, Cambridge, MA 02139, 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>> for an undefined
196         symbol or <<bfd_com_section>> 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.  The <<written>> field in the
384         <<bfd_link_hash_entry>> structure may be used to determine
385         which entries in the hash table have not already been written
386         out.
387
388         The <<strip>> field of the <<bfd_link_info>> structure
389         controls which symbols are written out.  The possible values
390         are listed in <<bfdlink.h>>.  If the value is <<strip_some>>,
391         then the <<keep_hash>> field of the <<bfd_link_info>>
392         structure is a hash table of symbols to keep; each symbol
393         should be looked up in this hash table, and only symbols which
394         are present should be included in the output file.
395
396         If the <<strip>> field of the <<bfd_link_info>> structure
397         permits local symbols to be written out, the <<discard>> field
398         is used to further controls which local symbols are included
399         in the output file.  If the value is <<discard_l>>, then all
400         local symbols which begin with a certain prefix are discarded;
401         this prefix is described by the <<lprefix>> and
402         <<lprefix_len>> fields of the <<bfd_link_info>> structure.
403
404         The a.out backend handles symbols by calling
405         <<aout_link_write_symbols>> on each input BFD and then
406         traversing the global hash table with the function
407         <<aout_link_write_other_symbol>>.  It builds a string table
408         while writing out the symbols, which is written to the output
409         file at the end of <<NAME(aout,final_link)>>.
410 */
411
412 static struct bfd_hash_entry *generic_link_hash_newfunc
413   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *,
414            const char *));
415 static boolean generic_link_read_symbols
416   PARAMS ((bfd *));
417 static boolean generic_link_add_symbols
418   PARAMS ((bfd *, struct bfd_link_info *, boolean collect));
419 static boolean generic_link_add_object_symbols
420   PARAMS ((bfd *, struct bfd_link_info *, boolean collect));
421 static boolean generic_link_check_archive_element_no_collect
422   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
423 static boolean generic_link_check_archive_element_collect
424   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
425 static boolean generic_link_check_archive_element
426   PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded, boolean collect));
427 static boolean generic_link_add_symbol_list
428   PARAMS ((bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **,
429            boolean collect));
430 static boolean generic_add_output_symbol
431   PARAMS ((bfd *, size_t *psymalloc, asymbol *));
432 static boolean default_fill_link_order
433   PARAMS ((bfd *, struct bfd_link_info *, asection *,
434            struct bfd_link_order *));
435 static boolean default_indirect_link_order
436   PARAMS ((bfd *, struct bfd_link_info *, asection *,
437            struct bfd_link_order *));
438
439 /* The link hash table structure is defined in bfdlink.h.  It provides
440    a base hash table which the backend specific hash tables are built
441    upon.  */
442
443 /* Routine to create an entry in the link hash table.  */
444
445 struct bfd_hash_entry *
446 _bfd_link_hash_newfunc (entry, table, string)
447      struct bfd_hash_entry *entry;
448      struct bfd_hash_table *table;
449      const char *string;
450 {
451   struct bfd_link_hash_entry *ret = (struct bfd_link_hash_entry *) entry;
452
453   /* Allocate the structure if it has not already been allocated by a
454      subclass.  */
455   if (ret == (struct bfd_link_hash_entry *) NULL)
456     ret = ((struct bfd_link_hash_entry *)
457            bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry)));
458   if (ret == (struct bfd_link_hash_entry *) NULL)
459     {
460       bfd_set_error (bfd_error_no_memory);
461       return NULL;
462     }
463
464   /* Call the allocation method of the superclass.  */
465   ret = ((struct bfd_link_hash_entry *)
466          bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
467
468   if (ret)
469     {
470       /* Initialize the local fields.  */
471       ret->type = bfd_link_hash_new;
472       ret->written = false;
473       ret->next = NULL;
474     }
475
476   return (struct bfd_hash_entry *) ret;
477 }
478
479 /* Initialize a link hash table.  The BFD argument is the one
480    responsible for creating this table.  */
481
482 boolean
483 _bfd_link_hash_table_init (table, abfd, newfunc)
484      struct bfd_link_hash_table *table;
485      bfd *abfd;
486      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
487                                                 struct bfd_hash_table *,
488                                                 const char *));
489 {
490   table->creator = abfd->xvec;
491   table->undefs = NULL;
492   table->undefs_tail = NULL;
493   return bfd_hash_table_init (&table->table, newfunc);
494 }
495
496 /* Look up a symbol in a link hash table.  If follow is true, we
497    follow bfd_link_hash_indirect and bfd_link_hash_warning links to
498    the real symbol.  */
499
500 struct bfd_link_hash_entry *
501 bfd_link_hash_lookup (table, string, create, copy, follow)
502      struct bfd_link_hash_table *table;
503      const char *string;
504      boolean create;
505      boolean copy;
506      boolean follow;
507 {
508   struct bfd_link_hash_entry *ret;
509
510   ret = ((struct bfd_link_hash_entry *)
511          bfd_hash_lookup (&table->table, string, create, copy));
512
513   if (follow && ret != (struct bfd_link_hash_entry *) NULL)
514     {
515       while (ret->type == bfd_link_hash_indirect
516              || ret->type == bfd_link_hash_warning)
517         ret = ret->u.i.link;
518     }
519
520   return ret;
521 }
522
523 /* Traverse a generic link hash table.  The only reason this is not a
524    macro is to do better type checking.  This code presumes that an
525    argument passed as a struct bfd_hash_entry * may be caught as a
526    struct bfd_link_hash_entry * with no explicit cast required on the
527    call.  */
528
529 void 
530 bfd_link_hash_traverse (table, func, info)
531      struct bfd_link_hash_table *table;
532      boolean (*func) PARAMS ((struct bfd_link_hash_entry *, PTR));
533      PTR info;
534 {
535   bfd_hash_traverse (&table->table,
536                      ((boolean (*) PARAMS ((struct bfd_hash_entry *, PTR)))
537                       func),
538                      info);
539 }
540
541 /* Add a symbol to the linker hash table undefs list.  */
542
543 INLINE void
544 bfd_link_add_undef (table, h)
545      struct bfd_link_hash_table *table;
546      struct bfd_link_hash_entry *h;
547 {
548   BFD_ASSERT (h->next == NULL);
549   if (table->undefs_tail != (struct bfd_link_hash_entry *) NULL)
550     table->undefs_tail->next = h;
551   if (table->undefs == (struct bfd_link_hash_entry *) NULL)
552     table->undefs = h;
553   table->undefs_tail = h;
554 }
555 \f
556 /* Routine to create an entry in an generic link hash table.  */
557
558 static struct bfd_hash_entry *
559 generic_link_hash_newfunc (entry, table, string)
560      struct bfd_hash_entry *entry;
561      struct bfd_hash_table *table;
562      const char *string;
563 {
564   struct generic_link_hash_entry *ret =
565     (struct generic_link_hash_entry *) entry;
566
567   /* Allocate the structure if it has not already been allocated by a
568      subclass.  */
569   if (ret == (struct generic_link_hash_entry *) NULL)
570     ret = ((struct generic_link_hash_entry *)
571            bfd_hash_allocate (table, sizeof (struct generic_link_hash_entry)));
572   if (ret == (struct generic_link_hash_entry *) NULL)
573     {
574       bfd_set_error (bfd_error_no_memory);
575       return NULL;
576     }
577
578   /* Call the allocation method of the superclass.  */
579   ret = ((struct generic_link_hash_entry *)
580          _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
581                                  table, string));
582
583   if (ret)
584     {
585       /* Set local fields.  */
586       ret->sym = NULL;
587     }
588
589   return (struct bfd_hash_entry *) ret;
590 }
591
592 /* Create an generic link hash table.  */
593
594 struct bfd_link_hash_table *
595 _bfd_generic_link_hash_table_create (abfd)
596      bfd *abfd;
597 {
598   struct generic_link_hash_table *ret;
599
600   ret = ((struct generic_link_hash_table *)
601          malloc (sizeof (struct generic_link_hash_table)));
602   if (!ret)
603       {
604         bfd_set_error (bfd_error_no_memory);
605         return (struct bfd_link_hash_table *) NULL;
606       }
607   if (! _bfd_link_hash_table_init (&ret->root, abfd,
608                                    generic_link_hash_newfunc))
609     {
610       free (ret);
611       return (struct bfd_link_hash_table *) NULL;
612     }
613   return &ret->root;
614 }
615
616 /* Grab the symbols for an object file when doing a generic link.  We
617    store the symbols in the outsymbols field.  We need to keep them
618    around for the entire link to ensure that we only read them once.
619    If we read them multiple times, we might wind up with relocs and
620    the hash table pointing to different instances of the symbol
621    structure.  */
622
623 static boolean
624 generic_link_read_symbols (abfd)
625      bfd *abfd;
626 {
627   if (abfd->outsymbols == (asymbol **) NULL)
628     {
629       long symsize;
630       long symcount;
631
632       symsize = bfd_get_symtab_upper_bound (abfd);
633       if (symsize < 0)
634         return false;
635       abfd->outsymbols = (asymbol **) bfd_alloc (abfd, symsize);
636       if (abfd->outsymbols == NULL && symsize != 0)
637         {
638           bfd_set_error (bfd_error_no_memory);
639           return false;
640         }
641       symcount = bfd_canonicalize_symtab (abfd, abfd->outsymbols);
642       if (symcount < 0)
643         return false;
644       abfd->symcount = symcount;
645     }
646
647   return true;
648 }
649 \f
650 /* Generic function to add symbols to from an object file to the
651    global hash table.  This version does not automatically collect
652    constructors by name.  */
653
654 boolean
655 _bfd_generic_link_add_symbols (abfd, info)
656      bfd *abfd;
657      struct bfd_link_info *info;
658 {
659   return generic_link_add_symbols (abfd, info, false);
660 }
661
662 /* Generic function to add symbols from an object file to the global
663    hash table.  This version automatically collects constructors by
664    name, as the collect2 program does.  It should be used for any
665    target which does not provide some other mechanism for setting up
666    constructors and destructors; these are approximately those targets
667    for which gcc uses collect2 and do not support stabs.  */
668
669 boolean
670 _bfd_generic_link_add_symbols_collect (abfd, info)
671      bfd *abfd;
672      struct bfd_link_info *info;
673 {
674   return generic_link_add_symbols (abfd, info, true);
675 }
676
677 /* Add symbols from an object file to the global hash table.  */
678
679 static boolean
680 generic_link_add_symbols (abfd, info, collect)
681      bfd *abfd;
682      struct bfd_link_info *info;
683      boolean collect;
684 {
685   boolean ret;
686
687   switch (bfd_get_format (abfd))
688     {
689     case bfd_object:
690       ret = generic_link_add_object_symbols (abfd, info, collect);
691       break;
692     case bfd_archive:
693       ret = (_bfd_generic_link_add_archive_symbols
694              (abfd, info,
695               (collect
696                ? generic_link_check_archive_element_collect
697                : generic_link_check_archive_element_no_collect)));
698       break;
699     default:
700       bfd_set_error (bfd_error_wrong_format);
701       ret = false;
702     }
703
704   return ret;
705 }
706
707 /* Add symbols from an object file to the global hash table.  */
708
709 static boolean
710 generic_link_add_object_symbols (abfd, info, collect)
711      bfd *abfd;
712      struct bfd_link_info *info;
713      boolean collect;
714 {
715   if (! generic_link_read_symbols (abfd))
716     return false;
717   return generic_link_add_symbol_list (abfd, info,
718                                        _bfd_generic_link_get_symcount (abfd),
719                                        _bfd_generic_link_get_symbols (abfd),
720                                        collect);
721 }
722 \f
723 /* We build a hash table of all symbols defined in an archive.  */
724
725 /* An archive symbol may be defined by multiple archive elements.
726    This linked list is used to hold the elements.  */
727
728 struct archive_list
729 {
730   struct archive_list *next;
731   int indx;
732 };
733
734 /* An entry in an archive hash table.  */
735
736 struct archive_hash_entry
737 {
738   struct bfd_hash_entry root;
739   /* Where the symbol is defined.  */
740   struct archive_list *defs;
741 };
742
743 /* An archive hash table itself.  */
744
745 struct archive_hash_table
746 {
747   struct bfd_hash_table table;
748 };
749
750 static struct bfd_hash_entry *archive_hash_newfunc
751   PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
752 static boolean archive_hash_table_init
753   PARAMS ((struct archive_hash_table *,
754            struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
755                                        struct bfd_hash_table *,
756                                        const char *)));
757
758 /* Create a new entry for an archive hash table.  */
759
760 static struct bfd_hash_entry *
761 archive_hash_newfunc (entry, table, string)
762      struct bfd_hash_entry *entry;
763      struct bfd_hash_table *table;
764      const char *string;
765 {
766   struct archive_hash_entry *ret = (struct archive_hash_entry *) entry;
767
768   /* Allocate the structure if it has not already been allocated by a
769      subclass.  */
770   if (ret == (struct archive_hash_entry *) NULL)
771     ret = ((struct archive_hash_entry *)
772            bfd_hash_allocate (table, sizeof (struct archive_hash_entry)));
773   if (ret == (struct archive_hash_entry *) NULL)
774     {
775       bfd_set_error (bfd_error_no_memory);
776       return NULL;
777     }
778
779   /* Call the allocation method of the superclass.  */
780   ret = ((struct archive_hash_entry *)
781          bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
782
783   if (ret)
784     {
785       /* Initialize the local fields.  */
786       ret->defs = (struct archive_list *) NULL;
787     }
788
789   return (struct bfd_hash_entry *) ret;
790 }
791
792 /* Initialize an archive hash table.  */
793
794 static boolean
795 archive_hash_table_init (table, newfunc)
796      struct archive_hash_table *table;
797      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
798                                                 struct bfd_hash_table *,
799                                                 const char *));
800 {
801   return bfd_hash_table_init (&table->table, newfunc);
802 }
803
804 /* Look up an entry in an archive hash table.  */
805
806 #define archive_hash_lookup(t, string, create, copy) \
807   ((struct archive_hash_entry *) \
808    bfd_hash_lookup (&(t)->table, (string), (create), (copy)))
809
810 /* Free an archive hash table.  */
811
812 #define archive_hash_table_free(t) bfd_hash_table_free (&(t)->table)
813
814 /* Generic function to add symbols from an archive file to the global
815    hash file.  This function presumes that the archive symbol table
816    has already been read in (this is normally done by the
817    bfd_check_format entry point).  It looks through the undefined and
818    common symbols and searches the archive symbol table for them.  If
819    it finds an entry, it includes the associated object file in the
820    link.
821
822    The old linker looked through the archive symbol table for
823    undefined symbols.  We do it the other way around, looking through
824    undefined symbols for symbols defined in the archive.  The
825    advantage of the newer scheme is that we only have to look through
826    the list of undefined symbols once, whereas the old method had to
827    re-search the symbol table each time a new object file was added.
828
829    The CHECKFN argument is used to see if an object file should be
830    included.  CHECKFN should set *PNEEDED to true if the object file
831    should be included, and must also call the bfd_link_info
832    add_archive_element callback function and handle adding the symbols
833    to the global hash table.  CHECKFN should only return false if some
834    sort of error occurs.
835
836    For some formats, such as a.out, it is possible to look through an
837    object file but not actually include it in the link.  The
838    archive_pass field in a BFD is used to avoid checking the symbols
839    of an object files too many times.  When an object is included in
840    the link, archive_pass is set to -1.  If an object is scanned but
841    not included, archive_pass is set to the pass number.  The pass
842    number is incremented each time a new object file is included.  The
843    pass number is used because when a new object file is included it
844    may create new undefined symbols which cause a previously examined
845    object file to be included.  */
846
847 boolean
848 _bfd_generic_link_add_archive_symbols (abfd, info, checkfn)
849      bfd *abfd;
850      struct bfd_link_info *info;
851      boolean (*checkfn) PARAMS ((bfd *, struct bfd_link_info *,
852                                  boolean *pneeded));
853 {
854   carsym *arsyms;
855   carsym *arsym_end;
856   register carsym *arsym;
857   int pass;
858   struct archive_hash_table arsym_hash;
859   int indx;
860   struct bfd_link_hash_entry **pundef;
861
862   if (! bfd_has_map (abfd))
863     {
864       bfd_set_error (bfd_error_no_symbols);
865       return false;
866     }
867
868   arsyms = bfd_ardata (abfd)->symdefs;
869   arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
870
871   /* In order to quickly determine whether an symbol is defined in
872      this archive, we build a hash table of the symbols.  */
873   if (! archive_hash_table_init (&arsym_hash, archive_hash_newfunc))
874     return false;
875   for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
876     {
877       struct archive_hash_entry *arh;
878       struct archive_list *l, **pp;
879
880       arh = archive_hash_lookup (&arsym_hash, arsym->name, true, false);
881       if (arh == (struct archive_hash_entry *) NULL)
882         goto error_return;
883       l = (struct archive_list *)
884         obstack_alloc (&(&(&arsym_hash)->table)->memory,
885                        sizeof (struct archive_list));
886       if (l == NULL)
887         {
888           bfd_set_error (bfd_error_no_memory);
889           goto error_return;
890         }
891       l->indx = indx;
892       for (pp = &arh->defs;
893            *pp != (struct archive_list *) NULL;
894            pp = &(*pp)->next)
895         ;
896       *pp = l;
897       l->next = NULL;
898     }
899
900   pass = 1;
901
902   /* New undefined symbols are added to the end of the list, so we
903      only need to look through it once.  */
904   pundef = &info->hash->undefs;
905   while (*pundef != (struct bfd_link_hash_entry *) NULL)
906     {
907       struct bfd_link_hash_entry *h;
908       struct archive_hash_entry *arh;
909       struct archive_list *l;
910
911       h = *pundef;
912
913       /* When a symbol is defined, it is not necessarily removed from
914          the list.  */
915       if (h->type != bfd_link_hash_undefined
916           && h->type != bfd_link_hash_common)
917         {
918           /* Remove this entry from the list, for general cleanliness
919              and because we are going to look through the list again
920              if we search any more libraries.  We can't remove the
921              entry if it is the tail, because that would lose any
922              entries we add to the list later on.  */
923           if (*pundef != info->hash->undefs_tail)
924             *pundef = (*pundef)->next;
925           else
926             pundef = &(*pundef)->next;
927           continue;
928         }
929
930       /* Look for this symbol in the archive symbol map.  */
931       arh = archive_hash_lookup (&arsym_hash, h->root.string, false, false);
932       if (arh == (struct archive_hash_entry *) NULL)
933         {
934           pundef = &(*pundef)->next;
935           continue;
936         }
937
938       /* Look at all the objects which define this symbol.  */
939       for (l = arh->defs; l != (struct archive_list *) NULL; l = l->next)
940         {
941           bfd *element;
942           boolean needed;
943
944           /* If the symbol has gotten defined along the way, quit.  */
945           if (h->type != bfd_link_hash_undefined
946               && h->type != bfd_link_hash_common)
947             break;
948
949           element = bfd_get_elt_at_index (abfd, l->indx);
950           if (element == (bfd *) NULL)
951             goto error_return;
952
953           /* If we've already included this element, or if we've
954              already checked it on this pass, continue.  */
955           if (element->archive_pass == -1
956               || element->archive_pass == pass)
957             continue;
958
959           /* If we can't figure this element out, just ignore it.  */
960           if (! bfd_check_format (element, bfd_object))
961             {
962               element->archive_pass = -1;
963               continue;
964             }
965
966           /* CHECKFN will see if this element should be included, and
967              go ahead and include it if appropriate.  */
968           if (! (*checkfn) (element, info, &needed))
969             goto error_return;
970
971           if (! needed)
972             element->archive_pass = pass;
973           else
974             {
975               element->archive_pass = -1;
976
977               /* Increment the pass count to show that we may need to
978                  recheck object files which were already checked.  */
979               ++pass;
980             }
981         }
982
983       pundef = &(*pundef)->next;
984     }
985
986   archive_hash_table_free (&arsym_hash);
987
988   return true;
989
990  error_return:
991   archive_hash_table_free (&arsym_hash);
992   return false;
993 }
994 \f
995 /* See if we should include an archive element.  This version is used
996    when we do not want to automatically collect constructors based on
997    the symbol name, presumably because we have some other mechanism
998    for finding them.  */
999
1000 static boolean
1001 generic_link_check_archive_element_no_collect (abfd, info, pneeded)
1002      bfd *abfd;
1003      struct bfd_link_info *info;
1004      boolean *pneeded;
1005 {
1006   return generic_link_check_archive_element (abfd, info, pneeded, false);
1007 }
1008
1009 /* See if we should include an archive element.  This version is used
1010    when we want to automatically collect constructors based on the
1011    symbol name, as collect2 does.  */
1012
1013 static boolean
1014 generic_link_check_archive_element_collect (abfd, info, pneeded)
1015      bfd *abfd;
1016      struct bfd_link_info *info;
1017      boolean *pneeded;
1018 {
1019   return generic_link_check_archive_element (abfd, info, pneeded, true);
1020 }
1021
1022 /* See if we should include an archive element.  Optionally collect
1023    constructors.  */
1024
1025 static boolean
1026 generic_link_check_archive_element (abfd, info, pneeded, collect)
1027      bfd *abfd;
1028      struct bfd_link_info *info;
1029      boolean *pneeded;
1030      boolean collect;
1031 {
1032   asymbol **pp, **ppend;
1033
1034   *pneeded = false;
1035
1036   if (! generic_link_read_symbols (abfd))
1037     return false;
1038
1039   pp = _bfd_generic_link_get_symbols (abfd);
1040   ppend = pp + _bfd_generic_link_get_symcount (abfd);
1041   for (; pp < ppend; pp++)
1042     {
1043       asymbol *p;
1044       struct bfd_link_hash_entry *h;
1045
1046       p = *pp;
1047
1048       /* We are only interested in globally visible symbols.  */
1049       if (! bfd_is_com_section (p->section)
1050           && (p->flags & (BSF_GLOBAL | BSF_INDIRECT | BSF_WEAK)) == 0)
1051         continue;
1052
1053       /* We are only interested if we know something about this
1054          symbol, and it is undefined or common.  An undefined weak
1055          symbol (type bfd_link_hash_weak) is not considered to be a
1056          reference when pulling files out of an archive.  See the SVR4
1057          ABI, p. 4-27.  */
1058       h = bfd_link_hash_lookup (info->hash, bfd_asymbol_name (p), false,
1059                                 false, true);
1060       if (h == (struct bfd_link_hash_entry *) NULL
1061           || (h->type != bfd_link_hash_undefined
1062               && h->type != bfd_link_hash_common))
1063         continue;
1064
1065       /* P is a symbol we are looking for.  */
1066
1067       if (! bfd_is_com_section (p->section))
1068         {
1069           bfd_size_type symcount;
1070           asymbol **symbols;
1071
1072           /* This object file defines this symbol, so pull it in.  */
1073           if (! (*info->callbacks->add_archive_element) (info, abfd,
1074                                                          bfd_asymbol_name (p)))
1075             return false;
1076           symcount = _bfd_generic_link_get_symcount (abfd);
1077           symbols = _bfd_generic_link_get_symbols (abfd);
1078           if (! generic_link_add_symbol_list (abfd, info, symcount,
1079                                               symbols, collect))
1080             return false;
1081           *pneeded = true;
1082           return true;
1083         }
1084
1085       /* P is a common symbol.  */
1086
1087       if (h->type == bfd_link_hash_undefined)
1088         {
1089           bfd *symbfd;
1090
1091           symbfd = h->u.undef.abfd;
1092           if (symbfd == (bfd *) NULL)
1093             {
1094               /* This symbol was created as undefined from outside
1095                  BFD.  We assume that we should link in the object
1096                  file.  This is for the -u option in the linker.  */
1097               if (! (*info->callbacks->add_archive_element)
1098                   (info, abfd, bfd_asymbol_name (p)))
1099                 return false;
1100               *pneeded = true;
1101               return true;
1102             }
1103
1104           /* Turn the symbol into a common symbol but do not link in
1105              the object file.  This is how a.out works.  Object
1106              formats that require different semantics must implement
1107              this function differently.  This symbol is already on the
1108              undefs list.  We add the section to a common section
1109              attached to symbfd to ensure that it is in a BFD which
1110              will be linked in.  */
1111           h->type = bfd_link_hash_common;
1112           h->u.c.size = bfd_asymbol_value (p);
1113           if (p->section == &bfd_com_section)
1114             h->u.c.section = bfd_make_section_old_way (symbfd, "COMMON");
1115           else
1116             h->u.c.section = bfd_make_section_old_way (symbfd,
1117                                                        p->section->name);
1118           h->u.c.section->flags = SEC_ALLOC;
1119         }
1120       else
1121         {
1122           /* Adjust the size of the common symbol if necessary.  This
1123              is how a.out works.  Object formats that require
1124              different semantics must implement this function
1125              differently.  */
1126           if (bfd_asymbol_value (p) > h->u.c.size)
1127             h->u.c.size = bfd_asymbol_value (p);
1128         }
1129     }
1130
1131   /* This archive element is not needed.  */
1132   return true;
1133 }
1134
1135 /* Add the symbols from an object file to the global hash table.  ABFD
1136    is the object file.  INFO is the linker information.  SYMBOL_COUNT
1137    is the number of symbols.  SYMBOLS is the list of symbols.  COLLECT
1138    is true if constructors should be automatically collected by name
1139    as is done by collect2.  */
1140
1141 static boolean
1142 generic_link_add_symbol_list (abfd, info, symbol_count, symbols, collect)
1143      bfd *abfd;
1144      struct bfd_link_info *info;
1145      bfd_size_type symbol_count;
1146      asymbol **symbols;
1147      boolean collect;
1148 {
1149   asymbol **pp, **ppend;
1150
1151   pp = symbols;
1152   ppend = symbols + symbol_count;
1153   for (; pp < ppend; pp++)
1154     {
1155       asymbol *p;
1156
1157       p = *pp;
1158
1159       if ((p->flags & (BSF_INDIRECT
1160                        | BSF_WARNING
1161                        | BSF_GLOBAL
1162                        | BSF_CONSTRUCTOR
1163                        | BSF_WEAK)) != 0
1164           || bfd_get_section (p) == &bfd_und_section
1165           || bfd_is_com_section (bfd_get_section (p))
1166           || bfd_get_section (p) == &bfd_ind_section)
1167         {
1168           const char *name;
1169           const char *string;
1170           struct generic_link_hash_entry *h;
1171
1172           name = bfd_asymbol_name (p);
1173           if ((p->flags & BSF_INDIRECT) != 0
1174               || p->section == &bfd_ind_section)
1175             string = bfd_asymbol_name ((asymbol *) p->value);
1176           else if ((p->flags & BSF_WARNING) != 0)
1177             {
1178               /* The name of P is actually the warning string, and the
1179                  value is actually a pointer to the symbol to warn
1180                  about.  */
1181               string = name;
1182               name = bfd_asymbol_name ((asymbol *) p->value);
1183             }
1184           else
1185             string = NULL;
1186
1187           h = NULL;
1188           if (! (_bfd_generic_link_add_one_symbol
1189                  (info, abfd, name, p->flags, bfd_get_section (p),
1190                   p->value, string, false, collect,
1191                   (struct bfd_link_hash_entry **) &h)))
1192             return false;
1193
1194           /* Save the BFD symbol so that we don't lose any backend
1195              specific information that may be attached to it.  We only
1196              want this one if it gives more information than the
1197              existing one; we don't want to replace a defined symbol
1198              with an undefined one.  This routine may be called with a
1199              hash table other than the generic hash table, so we only
1200              do this if we are certain that the hash table is a
1201              generic one.  */
1202           if (info->hash->creator == abfd->xvec)
1203             {
1204               if (h->sym == (asymbol *) NULL
1205                   || (bfd_get_section (p) != &bfd_und_section
1206                       && (! bfd_is_com_section (bfd_get_section (p))
1207                           || (bfd_get_section (h->sym) == &bfd_und_section))))
1208                 {
1209                   h->sym = p;
1210                   /* BSF_OLD_COMMON is a hack to support COFF reloc
1211                      reading, and it should go away when the COFF
1212                      linker is switched to the new version.  */
1213                   if (bfd_is_com_section (bfd_get_section (p)))
1214                     p->flags |= BSF_OLD_COMMON;
1215                 }
1216
1217               /* Store a back pointer from the symbol to the hash
1218                  table entry for the benefit of relaxation code until
1219                  it gets rewritten to not use asymbol structures.  */
1220               p->udata = (PTR) h;
1221             }
1222         }
1223     }
1224
1225   return true;
1226 }
1227 \f
1228 /* We use a state table to deal with adding symbols from an object
1229    file.  The first index into the state table describes the symbol
1230    from the object file.  The second index into the state table is the
1231    type of the symbol in the hash table.  */
1232
1233 /* The symbol from the object file is turned into one of these row
1234    values.  */
1235
1236 enum link_row
1237 {
1238   UNDEF_ROW,            /* Undefined.  */
1239   UNDEFW_ROW,           /* Weak undefined.  */
1240   DEF_ROW,              /* Defined.  */
1241   DEFW_ROW,             /* Weak defined.  */
1242   COMMON_ROW,           /* Common.  */
1243   INDR_ROW,             /* Indirect.  */
1244   WARN_ROW,             /* Warning.  */
1245   SET_ROW               /* Member of set.  */
1246 };
1247
1248 /* The actions to take in the state table.  */
1249
1250 enum link_action
1251 {
1252   FAIL,         /* Abort. */
1253   UND,          /* Mark symbol undefined.  */
1254   WEAK,         /* Mark symbol weak undefined.  */
1255   DEF,          /* Mark symbol defined.  */
1256   COM,          /* Mark symbol common.  */
1257   CREF,         /* Possibly warn about common reference to defined symbol.  */
1258   CDEF,         /* Define existing common symbol.  */
1259   NOACT,        /* No action.  */
1260   BIG,          /* Mark symbol common using largest size.  */
1261   MDEF,         /* Multiple definition error.  */
1262   IND,          /* Make indirect symbol.  */
1263   SET,          /* Add value to set.  */
1264   MWARN,        /* Make warning symbol.  */
1265   WARN,         /* Issue warning.  */
1266   CYCLE,        /* Repeat with symbol pointed to.  */
1267   WARNC         /* Issue warning and then CYCLE.  */
1268 };
1269
1270 /* The state table itself.  The first index is a link_row and the
1271    second index is a bfd_link_hash_type.  */
1272
1273 static const enum link_action link_action[8][7] =
1274 {
1275   /* current\prev    new    undef  weak   def    com    indr   warn  */
1276   /* UNDEF_ROW  */  {UND,   NOACT, NOACT, NOACT, NOACT, CYCLE, WARNC },
1277   /* UNDEFW_ROW */  {WEAK,  WEAK,  NOACT, NOACT, NOACT, CYCLE, WARNC },
1278   /* DEF_ROW    */  {DEF,   DEF,   DEF,   MDEF,  CDEF,  CYCLE, CYCLE },
1279   /* DEFW_ROW   */  {DEF,   DEF,   DEF,   NOACT, NOACT, CYCLE, CYCLE },
1280   /* COMMON_ROW */  {COM,   COM,   COM,   CREF,  BIG,   CYCLE, WARNC },
1281   /* INDR_ROW   */  {IND,   IND,   IND,   MDEF,  MDEF,  MDEF,  WARNC },
1282   /* WARN_ROW   */  {MWARN, WARN,  WARN,  MWARN, MWARN, MWARN, NOACT },
1283   /* SET_ROW    */  {SET,   SET,   SET,   SET,   SET,   CYCLE, WARNC }
1284 };
1285
1286 /* Add a symbol to the global hash table.
1287    ABFD is the BFD the symbol comes from.
1288    NAME is the name of the symbol.
1289    FLAGS is the BSF_* bits associated with the symbol.
1290    SECTION is the section in which the symbol is defined; this may be
1291      bfd_und_section or bfd_com_section.
1292    VALUE is the value of the symbol, relative to the section.
1293    STRING is used for either an indirect symbol, in which case it is
1294      the name of the symbol to indirect to, or a warning symbol, in
1295      which case it is the warning string.
1296    COPY is true if NAME or STRING must be copied into locally
1297      allocated memory if they need to be saved.
1298    COLLECT is true if we should automatically collect gcc constructor
1299      or destructor names as collect2 does.
1300    HASHP, if not NULL, is a place to store the created hash table
1301      entry; if *HASHP is not NULL, the caller has already looked up
1302      the hash table entry, and stored it in *HASHP. */
1303
1304 boolean
1305 _bfd_generic_link_add_one_symbol (info, abfd, name, flags, section, value,
1306                                   string, copy, collect, hashp)
1307      struct bfd_link_info *info;
1308      bfd *abfd;
1309      const char *name;
1310      flagword flags;
1311      asection *section;
1312      bfd_vma value;
1313      const char *string;
1314      boolean copy;
1315      boolean collect;
1316      struct bfd_link_hash_entry **hashp;
1317 {
1318   enum link_row row;
1319   struct bfd_link_hash_entry *h;
1320   boolean cycle;
1321
1322   if (section == &bfd_ind_section
1323       || (flags & BSF_INDIRECT) != 0)
1324     row = INDR_ROW;
1325   else if ((flags & BSF_WARNING) != 0)
1326     row = WARN_ROW;
1327   else if ((flags & BSF_CONSTRUCTOR) != 0)
1328     row = SET_ROW;
1329   else if (section == &bfd_und_section)
1330     {
1331       if ((flags & BSF_WEAK) != 0)
1332         row = UNDEFW_ROW;
1333       else
1334         row = UNDEF_ROW;
1335     }
1336   else if ((flags & BSF_WEAK) != 0)
1337     row = DEFW_ROW;
1338   else if (bfd_is_com_section (section))
1339     row = COMMON_ROW;
1340   else
1341     row = DEF_ROW;
1342
1343   if (hashp != NULL && *hashp != NULL)
1344     {
1345       h = *hashp;
1346       BFD_ASSERT (strcmp (h->root.string, name) == 0);
1347     }
1348   else
1349     {
1350       h = bfd_link_hash_lookup (info->hash, name, true, copy, false);
1351       if (h == NULL)
1352         {
1353           if (hashp != NULL)
1354             *hashp = NULL;
1355           return false;
1356         }
1357     }
1358
1359   if (info->notice_hash != (struct bfd_hash_table *) NULL
1360       && (bfd_hash_lookup (info->notice_hash, name, false, false)
1361           != (struct bfd_hash_entry *) NULL))
1362     {
1363       if (! (*info->callbacks->notice) (info, name, abfd, section, value))
1364         return false;
1365     }
1366
1367   if (hashp != (struct bfd_link_hash_entry **) NULL)
1368     *hashp = h;
1369
1370   do
1371     {
1372       enum link_action action;
1373
1374       cycle = false;
1375       action = link_action[(int) row][(int) h->type];
1376       switch (action)
1377         {
1378         case FAIL:
1379           abort ();
1380         case UND:
1381           h->type = bfd_link_hash_undefined;
1382           h->u.undef.abfd = abfd;
1383           bfd_link_add_undef (info->hash, h);
1384           break;
1385         case WEAK:
1386           h->type = bfd_link_hash_weak;
1387           h->u.undef.abfd = abfd;
1388           break;
1389         case CDEF:
1390           BFD_ASSERT (h->type == bfd_link_hash_common);
1391           if (! ((*info->callbacks->multiple_common)
1392                  (info, name,
1393                   h->u.c.section->owner, bfd_link_hash_common, h->u.c.size,
1394                   abfd, bfd_link_hash_defined, (bfd_vma) 0)))
1395             return false;
1396           /* Fall through.  */
1397         case DEF:
1398           h->type = bfd_link_hash_defined;
1399           h->u.def.section = section;
1400           h->u.def.value = value;
1401
1402           /* If we have been asked to, we act like collect2 and
1403              identify all functions that might be global constructors
1404              and destructors and pass them up in a callback.  We only
1405              do this for certain object file types, since many object
1406              file types can handle this automatically.  */
1407           if (collect && name[0] == '_')
1408             {
1409               const char *s;
1410
1411               /* A constructor or destructor name starts like this:
1412                    _+GLOBAL_[_.$][ID][_.$]
1413                  where the first [_.$] and the second are the same
1414                  character (we accept any character there, in case a
1415                  new object file format comes along with even worse
1416                  naming restrictions).  */
1417
1418 #define CONS_PREFIX "GLOBAL_"
1419 #define CONS_PREFIX_LEN (sizeof CONS_PREFIX - 1)
1420
1421               s = name + 1;
1422               while (*s == '_')
1423                 ++s;
1424               if (s[0] == 'G'
1425                   && strncmp (s, CONS_PREFIX, CONS_PREFIX_LEN - 1) == 0)
1426                 {
1427                   char c;
1428
1429                   c = s[CONS_PREFIX_LEN + 1];
1430                   if ((c == 'I' || c == 'D')
1431                       && s[CONS_PREFIX_LEN] == s[CONS_PREFIX_LEN + 2])
1432                     {
1433                       if (! ((*info->callbacks->constructor)
1434                              (info,
1435                               c == 'I' ? true : false,
1436                               name, abfd, section, value)))
1437                         return false;
1438                     }
1439                 }
1440             }
1441
1442           break;
1443         case COM:
1444           if (h->type == bfd_link_hash_new)
1445             bfd_link_add_undef (info->hash, h);
1446           h->type = bfd_link_hash_common;
1447           h->u.c.size = value;
1448           if (section == &bfd_com_section)
1449             {
1450               h->u.c.section = bfd_make_section_old_way (abfd, "COMMON");
1451               h->u.c.section->flags = SEC_ALLOC;
1452             }
1453           else if (section->owner != abfd)
1454             {
1455               h->u.c.section = bfd_make_section_old_way (abfd, section->name);
1456               h->u.c.section->flags = SEC_ALLOC;
1457             }
1458           else
1459             h->u.c.section = section;
1460           break;
1461         case NOACT:
1462           break;
1463         case BIG:
1464           BFD_ASSERT (h->type == bfd_link_hash_common);
1465           if (! ((*info->callbacks->multiple_common)
1466                  (info, name,
1467                   h->u.c.section->owner, bfd_link_hash_common, h->u.c.size,
1468                   abfd, bfd_link_hash_common, value)))
1469             return false;
1470           if (value > h->u.c.size)
1471             h->u.c.size = value;
1472           break;
1473         case CREF:
1474           BFD_ASSERT (h->type == bfd_link_hash_defined);
1475           if (! ((*info->callbacks->multiple_common)
1476                  (info, name,
1477                   h->u.def.section->owner, bfd_link_hash_defined, (bfd_vma) 0,
1478                   abfd, bfd_link_hash_common, value)))
1479             return false;
1480           break;
1481         case MDEF:
1482           {
1483             asection *msec;
1484             bfd_vma mval;
1485
1486             switch (h->type)
1487               {
1488               case bfd_link_hash_defined:
1489                 msec = h->u.def.section;
1490                 mval = h->u.def.value;
1491                 break;
1492               case bfd_link_hash_common:
1493                 msec = &bfd_com_section;
1494                 mval = h->u.c.size;
1495                 break;
1496               case bfd_link_hash_indirect:
1497                 msec = &bfd_ind_section;
1498                 mval = 0;
1499                 break;
1500               default:
1501                 abort ();
1502               }
1503               
1504             if (! ((*info->callbacks->multiple_definition)
1505                    (info, name, msec->owner, msec, mval, abfd, section,
1506                     value)))
1507               return false;
1508           }
1509           break;
1510         case IND:
1511           {
1512             struct bfd_link_hash_entry *inh;
1513
1514             /* STRING is the name of the symbol we want to indirect
1515                to.  */
1516             inh = bfd_link_hash_lookup (info->hash, string, true, copy,
1517                                         false);
1518             if (inh == (struct bfd_link_hash_entry *) NULL)
1519               return false;
1520             if (inh->type == bfd_link_hash_new)
1521               {
1522                 inh->type = bfd_link_hash_undefined;
1523                 inh->u.undef.abfd = abfd;
1524                 bfd_link_add_undef (info->hash, inh);
1525               }
1526             h->type = bfd_link_hash_indirect;
1527             h->u.i.link = inh;
1528           }
1529           break;
1530         case SET:
1531           if (! (*info->callbacks->add_to_set) (info, h, BFD_RELOC_CTOR,
1532                                                 abfd, section, value))
1533             return false;
1534           break;
1535         case WARN:
1536         case WARNC:
1537           if (h->u.i.warning != NULL)
1538             {
1539               if (! (*info->callbacks->warning) (info, h->u.i.warning))
1540                 return false;
1541               /* Only issue a warning once.  */
1542               h->u.i.warning = NULL;
1543             }
1544           if (action == WARN)
1545             break;
1546           /* Fall through.  */
1547         case CYCLE:
1548           h = h->u.i.link;
1549           cycle = true;
1550           break;
1551         case MWARN:
1552           {
1553             struct bfd_link_hash_entry *sub;
1554
1555             /* STRING is the warning to give.  */
1556             sub = ((struct bfd_link_hash_entry *)
1557                    bfd_hash_allocate (&info->hash->table,
1558                                       sizeof (struct bfd_link_hash_entry)));
1559             if (!sub)
1560               {
1561                 bfd_set_error (bfd_error_no_memory);
1562                 return false;
1563               }
1564             *sub = *h;
1565             h->type = bfd_link_hash_warning;
1566             h->u.i.link = sub;
1567             if (! copy)
1568               h->u.i.warning = string;
1569             else
1570               {
1571                 char *w;
1572
1573                 w = bfd_hash_allocate (&info->hash->table,
1574                                        strlen (string) + 1);
1575                 strcpy (w, string);
1576                 h->u.i.warning = w;
1577               }
1578           }
1579           break;
1580         }
1581     }
1582   while (cycle);
1583
1584   return true;
1585 }
1586 \f
1587 /* Generic final link routine.  */
1588
1589 boolean
1590 _bfd_generic_final_link (abfd, info)
1591      bfd *abfd;
1592      struct bfd_link_info *info;
1593 {
1594   bfd *sub;
1595   asection *o;
1596   struct bfd_link_order *p;
1597   size_t outsymalloc;
1598   struct generic_write_global_symbol_info wginfo;
1599
1600   abfd->outsymbols = (asymbol **) NULL;
1601   abfd->symcount = 0;
1602   outsymalloc = 0;
1603
1604   /* Build the output symbol table.  */
1605   for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
1606     if (! _bfd_generic_link_output_symbols (abfd, sub, info, &outsymalloc))
1607       return false;
1608
1609   /* Accumulate the global symbols.  */
1610   wginfo.info = info;
1611   wginfo.output_bfd = abfd;
1612   wginfo.psymalloc = &outsymalloc;
1613   _bfd_generic_link_hash_traverse (_bfd_generic_hash_table (info),
1614                                    _bfd_generic_link_write_global_symbol,
1615                                    (PTR) &wginfo);
1616
1617   if (info->relocateable)
1618     {
1619       /* Allocate space for the output relocs for each section.  */
1620       for (o = abfd->sections;
1621            o != (asection *) NULL;
1622            o = o->next)
1623         {
1624           o->reloc_count = 0;
1625           for (p = o->link_order_head;
1626                p != (struct bfd_link_order *) NULL;
1627                p = p->next)
1628             {
1629               if (p->type == bfd_section_reloc_link_order
1630                   || p->type == bfd_symbol_reloc_link_order)
1631                 ++o->reloc_count;
1632               else if (p->type == bfd_indirect_link_order)
1633                 {
1634                   asection *input_section;
1635                   bfd *input_bfd;
1636                   long relsize;
1637                   arelent **relocs;
1638                   asymbol **symbols;
1639                   long reloc_count;
1640
1641                   input_section = p->u.indirect.section;
1642                   input_bfd = input_section->owner;
1643                   relsize = bfd_get_reloc_upper_bound (input_bfd,
1644                                                        input_section);
1645                   if (relsize < 0)
1646                     return false;
1647                   relocs = (arelent **) malloc ((size_t) relsize);
1648                   if (!relocs && relsize != 0)
1649                     {
1650                       bfd_set_error (bfd_error_no_memory);
1651                       return false;
1652                     }
1653                   symbols = _bfd_generic_link_get_symbols (input_bfd);
1654                   reloc_count = bfd_canonicalize_reloc (input_bfd,
1655                                                         input_section,
1656                                                         relocs,
1657                                                         symbols);
1658                   if (reloc_count < 0)
1659                     return false;
1660                   BFD_ASSERT (reloc_count == input_section->reloc_count);
1661                   o->reloc_count += reloc_count;
1662                   free (relocs);
1663                 }
1664             }
1665           if (o->reloc_count > 0)
1666             {
1667               o->orelocation = ((arelent **)
1668                                 bfd_alloc (abfd,
1669                                            (o->reloc_count
1670                                             * sizeof (arelent *))));
1671               if (!o->orelocation)
1672                 {
1673                   bfd_set_error (bfd_error_no_memory);
1674                   return false;
1675                 }
1676               o->flags |= SEC_RELOC;
1677               /* Reset the count so that it can be used as an index
1678                  when putting in the output relocs.  */
1679               o->reloc_count = 0;
1680             }
1681         }
1682     }
1683
1684   /* Handle all the link order information for the sections.  */
1685   for (o = abfd->sections;
1686        o != (asection *) NULL;
1687        o = o->next)
1688     {
1689       for (p = o->link_order_head;
1690            p != (struct bfd_link_order *) NULL;
1691            p = p->next)
1692         {
1693           switch (p->type)
1694             {
1695             case bfd_section_reloc_link_order:
1696             case bfd_symbol_reloc_link_order:
1697               if (! _bfd_generic_reloc_link_order (abfd, info, o, p))
1698                 return false;
1699               break;
1700             default:
1701               if (! _bfd_default_link_order (abfd, info, o, p))
1702                 return false;
1703               break;
1704             }
1705         }
1706     }
1707
1708   return true;
1709 }
1710
1711 /* Add an output symbol to the output BFD.  */
1712
1713 static boolean
1714 generic_add_output_symbol (output_bfd, psymalloc, sym)
1715      bfd *output_bfd;
1716      size_t *psymalloc;
1717      asymbol *sym;
1718 {
1719   if (output_bfd->symcount >= *psymalloc)
1720     {
1721       asymbol **newsyms;
1722
1723       if (*psymalloc == 0)
1724         *psymalloc = 124;
1725       else
1726         *psymalloc *= 2;
1727       if (output_bfd->outsymbols == (asymbol **) NULL)
1728         newsyms = (asymbol **) malloc (*psymalloc * sizeof (asymbol *));
1729       else
1730         newsyms = (asymbol **) realloc (output_bfd->outsymbols,
1731                                         *psymalloc * sizeof (asymbol *));
1732       if (newsyms == (asymbol **) NULL)
1733         {
1734           bfd_set_error (bfd_error_no_memory);
1735           return false;
1736         }
1737       output_bfd->outsymbols = newsyms;
1738     }
1739
1740   output_bfd->outsymbols[output_bfd->symcount] = sym;
1741   ++output_bfd->symcount;
1742
1743   return true;
1744 }
1745
1746 /* Handle the symbols for an input BFD.  */
1747
1748 boolean
1749 _bfd_generic_link_output_symbols (output_bfd, input_bfd, info, psymalloc)
1750      bfd *output_bfd;
1751      bfd *input_bfd;
1752      struct bfd_link_info *info;
1753      size_t *psymalloc;
1754 {
1755   asymbol **sym_ptr;
1756   asymbol **sym_end;
1757
1758   if (! generic_link_read_symbols (input_bfd))
1759     return false;
1760
1761   /* Create a filename symbol if we are supposed to.  */
1762   if (info->create_object_symbols_section != (asection *) NULL)
1763     {
1764       asection *sec;
1765
1766       for (sec = input_bfd->sections;
1767            sec != (asection *) NULL;
1768            sec = sec->next)
1769         {
1770           if (sec->output_section == info->create_object_symbols_section)
1771             {
1772               asymbol *newsym;
1773
1774               newsym = bfd_make_empty_symbol (input_bfd);
1775               if (!newsym)
1776                 return false;
1777               newsym->name = input_bfd->filename;
1778               newsym->value = 0;
1779               newsym->flags = BSF_LOCAL | BSF_FILE;
1780               newsym->section = sec;
1781
1782               if (! generic_add_output_symbol (output_bfd, psymalloc,
1783                                                newsym))
1784                 return false;
1785
1786               break;
1787             }
1788         }
1789     }
1790
1791   /* Adjust the values of the globally visible symbols, and write out
1792      local symbols.  */
1793   sym_ptr = _bfd_generic_link_get_symbols (input_bfd);
1794   sym_end = sym_ptr + _bfd_generic_link_get_symcount (input_bfd);
1795   for (; sym_ptr < sym_end; sym_ptr++)
1796     {
1797       asymbol *sym;
1798       struct generic_link_hash_entry *h;
1799       boolean output;
1800
1801       h = (struct generic_link_hash_entry *) NULL;
1802       sym = *sym_ptr;
1803       if ((sym->flags & (BSF_INDIRECT
1804                          | BSF_WARNING
1805                          | BSF_GLOBAL
1806                          | BSF_CONSTRUCTOR
1807                          | BSF_WEAK)) != 0
1808           || bfd_get_section (sym) == &bfd_und_section
1809           || bfd_is_com_section (bfd_get_section (sym))
1810           || bfd_get_section (sym) == &bfd_ind_section)
1811         {
1812           h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info),
1813                                              bfd_asymbol_name (sym),
1814                                              false, false, true);
1815           if (h != (struct generic_link_hash_entry *) NULL)
1816             {
1817               /* Force all references to this symbol to point to
1818                  the same area in memory.  It is possible that
1819                  this routine will be called with a hash table
1820                  other than a generic hash table, so we double
1821                  check that.  */
1822               if (info->hash->creator == input_bfd->xvec)
1823                 {
1824                   if (h->sym != (asymbol *) NULL)
1825                     *sym_ptr = sym = h->sym;
1826                 }
1827
1828               switch (h->root.type)
1829                 {
1830                 default:
1831                 case bfd_link_hash_new:
1832                   abort ();
1833                 case bfd_link_hash_undefined:
1834                 case bfd_link_hash_weak:
1835                   break;
1836                 case bfd_link_hash_defined:
1837                   sym->value = h->root.u.def.value;
1838                   sym->section = h->root.u.def.section;
1839                   sym->flags |= BSF_GLOBAL;
1840                   break;
1841                 case bfd_link_hash_common:
1842                   sym->value = h->root.u.c.size;
1843                   sym->flags |= BSF_GLOBAL;
1844                   if (! bfd_is_com_section (sym->section))
1845                     {
1846                       BFD_ASSERT (sym->section == &bfd_und_section);
1847                       sym->section = &bfd_com_section;
1848                     }
1849                   /* We do not set the section of the symbol to
1850                      h->root.u.c.section.  That value was saved so
1851                      that we would know where to allocate the symbol
1852                      if it was defined.  In this case the type is
1853                      still bfd_link_hash_common, so we did not define
1854                      it, so we do not want to use that section.  */
1855                   break;
1856                 }
1857             }
1858         }
1859
1860       /* This switch is straight from the old code in
1861          write_file_locals in ldsym.c.  */
1862       if (info->strip == strip_some
1863           && (bfd_hash_lookup (info->keep_hash, bfd_asymbol_name (sym),
1864                                false, false)
1865               == (struct bfd_hash_entry *) NULL))
1866         output = false;
1867       else if ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0)
1868         {
1869           /* If this symbol is marked as occurring now, rather
1870              than at the end, output it now.  This is used for
1871              COFF C_EXT FCN symbols.  FIXME: There must be a
1872              better way.  */
1873           if (bfd_asymbol_bfd (sym) == input_bfd
1874               && (sym->flags & BSF_NOT_AT_END) != 0)
1875             output = true;
1876           else
1877             output = false;
1878         }
1879       else if (sym->section == &bfd_ind_section)
1880         output = false;
1881       else if ((sym->flags & BSF_DEBUGGING) != 0)
1882         {
1883           if (info->strip == strip_none)
1884             output = true;
1885           else
1886             output = false;
1887         }
1888       else if (sym->section == &bfd_und_section
1889                || bfd_is_com_section (sym->section))
1890         output = false;
1891       else if ((sym->flags & BSF_LOCAL) != 0)
1892         {
1893           if ((sym->flags & BSF_WARNING) != 0)
1894             output = false;
1895           else
1896             {
1897               switch (info->discard)
1898                 {
1899                 default:
1900                 case discard_all:
1901                   output = false;
1902                   break;
1903                 case discard_l:
1904                   if (bfd_asymbol_name (sym)[0] == info->lprefix[0]
1905                       && (info->lprefix_len == 1
1906                           || strncmp (bfd_asymbol_name (sym), info->lprefix,
1907                                       info->lprefix_len) == 0))
1908                     output = false;
1909                   else
1910                     output = true;
1911                   break;
1912                 case discard_none:
1913                   output = true;
1914                   break;
1915                 }
1916             }
1917         }
1918       else if ((sym->flags & BSF_CONSTRUCTOR))
1919         {
1920           if (info->strip != strip_all)
1921             output = true;
1922           else
1923             output = false;
1924         }
1925       else
1926         abort ();
1927
1928       if (output)
1929         {
1930           if (! generic_add_output_symbol (output_bfd, psymalloc, sym))
1931             return false;
1932           if (h != (struct generic_link_hash_entry *) NULL)
1933             h->root.written = true;
1934         }
1935     }
1936
1937   return true;
1938 }
1939
1940 /* Write out a global symbol, if it hasn't already been written out.
1941    This is called for each symbol in the hash table.  */
1942
1943 boolean
1944 _bfd_generic_link_write_global_symbol (h, data)
1945      struct generic_link_hash_entry *h;
1946      PTR data;
1947 {
1948   struct generic_write_global_symbol_info *wginfo =
1949     (struct generic_write_global_symbol_info *) data;
1950   asymbol *sym;
1951
1952   if (h->root.written)
1953     return true;
1954
1955   h->root.written = true;
1956
1957   if (wginfo->info->strip == strip_all
1958       || (wginfo->info->strip == strip_some
1959           && bfd_hash_lookup (wginfo->info->keep_hash, h->root.root.string,
1960                               false, false) == NULL))
1961     return true;
1962
1963   if (h->sym != (asymbol *) NULL)
1964     {
1965       sym = h->sym;
1966       BFD_ASSERT (strcmp (bfd_asymbol_name (sym), h->root.root.string) == 0);
1967     }
1968   else
1969     {
1970       sym = bfd_make_empty_symbol (wginfo->output_bfd);
1971       if (!sym)
1972         return false;
1973       sym->name = h->root.root.string;
1974       sym->flags = 0;
1975     }
1976
1977   switch (h->root.type)
1978     {
1979     default:
1980     case bfd_link_hash_new:
1981       abort ();
1982     case bfd_link_hash_undefined:
1983       sym->section = &bfd_und_section;
1984       sym->value = 0;
1985       break;
1986     case bfd_link_hash_weak:
1987       sym->section = &bfd_und_section;
1988       sym->value = 0;
1989       sym->flags |= BSF_WEAK;
1990       break;
1991     case bfd_link_hash_defined:
1992       sym->section = h->root.u.def.section;
1993       sym->value = h->root.u.def.value;
1994       break;
1995     case bfd_link_hash_common:
1996       sym->value = h->root.u.c.size;
1997       if (! bfd_is_com_section (sym->section))
1998         {
1999           BFD_ASSERT (sym->section == &bfd_und_section);
2000           sym->section = &bfd_com_section;
2001         }
2002       /* Do not set the section; see _bfd_generic_link_output_symbols.  */
2003       break;
2004     case bfd_link_hash_indirect:
2005     case bfd_link_hash_warning:
2006       /* FIXME: What should we do here?  */
2007       break;
2008     }
2009
2010   sym->flags |= BSF_GLOBAL;
2011
2012   if (! generic_add_output_symbol (wginfo->output_bfd, wginfo->psymalloc,
2013                                    sym))
2014     {
2015       /* FIXME: No way to return failure.  */
2016       abort ();
2017     }
2018
2019   return true;
2020 }
2021
2022 /* Create a relocation.  */
2023
2024 boolean
2025 _bfd_generic_reloc_link_order (abfd, info, sec, link_order)
2026      bfd *abfd;
2027      struct bfd_link_info *info;
2028      asection *sec;
2029      struct bfd_link_order *link_order;
2030 {
2031   arelent *r;
2032
2033   if (! info->relocateable)
2034     abort ();
2035   if (sec->orelocation == (arelent **) NULL)
2036     abort ();
2037
2038   r = (arelent *) bfd_alloc (abfd, sizeof (arelent));
2039   if (r == (arelent *) NULL)
2040     {
2041       bfd_set_error (bfd_error_no_memory);
2042       return false;
2043     }
2044       
2045   r->address = link_order->offset;
2046   r->howto = bfd_reloc_type_lookup (abfd, link_order->u.reloc.p->reloc);
2047   if (r->howto == (const reloc_howto_type *) NULL)
2048     {
2049       bfd_set_error (bfd_error_bad_value);
2050       return false;
2051     }
2052
2053   /* Get the symbol to use for the relocation.  */
2054   if (link_order->type == bfd_section_reloc_link_order)
2055     r->sym_ptr_ptr = link_order->u.reloc.p->u.section->symbol_ptr_ptr;
2056   else
2057     {
2058       struct generic_link_hash_entry *h;
2059
2060       h = _bfd_generic_link_hash_lookup (_bfd_generic_hash_table (info),
2061                                          link_order->u.reloc.p->u.name,
2062                                          false, false, true);
2063       if (h == (struct generic_link_hash_entry *) NULL
2064           || ! h->root.written)
2065         {
2066           if (! ((*info->callbacks->unattached_reloc)
2067                  (info, link_order->u.reloc.p->u.name,
2068                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
2069             return false;
2070           bfd_set_error (bfd_error_bad_value);
2071           return false;
2072         }
2073       r->sym_ptr_ptr = &h->sym;
2074     }
2075
2076   /* If this is an inplace reloc, write the addend to the object file.
2077      Otherwise, store it in the reloc addend.  */
2078   if (! r->howto->partial_inplace)
2079     r->addend = link_order->u.reloc.p->addend;
2080   else
2081     {
2082       bfd_size_type size;
2083       bfd_reloc_status_type rstat;
2084       bfd_byte *buf;
2085       boolean ok;
2086
2087       size = bfd_get_reloc_size (r->howto);
2088       buf = (bfd_byte *) bfd_zmalloc (size);
2089       if (buf == (bfd_byte *) NULL)
2090         {
2091           bfd_set_error (bfd_error_no_memory);
2092           return false;
2093         }
2094       rstat = _bfd_relocate_contents (r->howto, abfd,
2095                                       link_order->u.reloc.p->addend, buf);
2096       switch (rstat)
2097         {
2098         case bfd_reloc_ok:
2099           break;
2100         default:
2101         case bfd_reloc_outofrange:
2102           abort ();
2103         case bfd_reloc_overflow:
2104           if (! ((*info->callbacks->reloc_overflow)
2105                  (info,
2106                   (link_order->type == bfd_section_reloc_link_order
2107                    ? bfd_section_name (abfd, link_order->u.reloc.p->u.section)
2108                    : link_order->u.reloc.p->u.name),
2109                   r->howto->name, link_order->u.reloc.p->addend,
2110                   (bfd *) NULL, (asection *) NULL, (bfd_vma) 0)))
2111             {
2112               free (buf);
2113               return false;
2114             }
2115           break;
2116         }
2117       ok = bfd_set_section_contents (abfd, sec, (PTR) buf,
2118                                      (file_ptr) link_order->offset, size);
2119       free (buf);
2120       if (! ok)
2121         return false;
2122
2123       r->addend = 0;
2124     }
2125
2126   sec->orelocation[sec->reloc_count] = r;
2127   ++sec->reloc_count;
2128
2129   return true;
2130 }
2131 \f
2132 /* Allocate a new link_order for a section.  */
2133
2134 struct bfd_link_order *
2135 bfd_new_link_order (abfd, section)
2136      bfd *abfd;
2137      asection *section;
2138 {
2139   struct bfd_link_order *new;
2140
2141   new = ((struct bfd_link_order *)
2142          bfd_alloc_by_size_t (abfd, sizeof (struct bfd_link_order)));
2143   if (!new)
2144     {
2145       bfd_set_error (bfd_error_no_memory);
2146       return NULL;
2147     }
2148
2149   new->type = bfd_undefined_link_order;
2150   new->offset = 0;
2151   new->size = 0;
2152   new->next = (struct bfd_link_order *) NULL;
2153
2154   if (section->link_order_tail != (struct bfd_link_order *) NULL)
2155     section->link_order_tail->next = new;
2156   else
2157     section->link_order_head = new;
2158   section->link_order_tail = new;
2159
2160   return new;
2161 }
2162
2163 /* Default link order processing routine.  Note that we can not handle
2164    the reloc_link_order types here, since they depend upon the details
2165    of how the particular backends generates relocs.  */
2166
2167 boolean
2168 _bfd_default_link_order (abfd, info, sec, link_order)
2169      bfd *abfd;
2170      struct bfd_link_info *info;
2171      asection *sec;
2172      struct bfd_link_order *link_order;
2173 {
2174   switch (link_order->type)
2175     {
2176     case bfd_undefined_link_order:
2177     case bfd_section_reloc_link_order:
2178     case bfd_symbol_reloc_link_order:
2179     default:
2180       abort ();
2181     case bfd_indirect_link_order:
2182       return default_indirect_link_order (abfd, info, sec, link_order);
2183     case bfd_fill_link_order:
2184       return default_fill_link_order (abfd, info, sec, link_order);
2185     case bfd_data_link_order:
2186       return bfd_set_section_contents (abfd, sec,
2187                                        (PTR) link_order->u.data.contents,
2188                                        (file_ptr) link_order->offset,
2189                                        link_order->size);
2190     }
2191 }
2192
2193 /* Default routine to handle a bfd_fill_link_order.  */
2194
2195 /*ARGSUSED*/
2196 static boolean
2197 default_fill_link_order (abfd, info, sec, link_order)
2198      bfd *abfd;
2199      struct bfd_link_info *info;
2200      asection *sec;
2201      struct bfd_link_order *link_order;
2202 {
2203   size_t size;
2204   char *space;
2205   size_t i;
2206   int fill;
2207   boolean result;
2208
2209   BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0);
2210
2211   size = (size_t) link_order->size;
2212   space = (char *) malloc (size);
2213   if (space == NULL && size != 0)
2214     {
2215       bfd_set_error (bfd_error_no_memory);
2216       return false;
2217     }
2218
2219   fill = link_order->u.fill.value;
2220   for (i = 0; i < size; i += 2)
2221     space[i] = fill >> 8;
2222   for (i = 1; i < size; i += 2)
2223     space[i] = fill;
2224   result = bfd_set_section_contents (abfd, sec, space,
2225                                      (file_ptr) link_order->offset,
2226                                      link_order->size);
2227   free (space);
2228   return result;
2229 }
2230
2231 /* Default routine to handle a bfd_indirect_link_order.  */
2232
2233 static boolean
2234 default_indirect_link_order (output_bfd, info, output_section, link_order)
2235      bfd *output_bfd;
2236      struct bfd_link_info *info;
2237      asection *output_section;
2238      struct bfd_link_order *link_order;
2239 {
2240   asection *input_section;
2241   bfd *input_bfd;
2242   bfd_byte *contents = NULL;
2243   bfd_byte *new_contents;
2244
2245   BFD_ASSERT ((output_section->flags & SEC_HAS_CONTENTS) != 0);
2246
2247   if (link_order->size == 0)
2248     return true;
2249
2250   input_section = link_order->u.indirect.section;
2251   input_bfd = input_section->owner;
2252
2253   BFD_ASSERT (input_section->output_section == output_section);
2254   BFD_ASSERT (input_section->output_offset == link_order->offset);
2255   BFD_ASSERT (input_section->_cooked_size == link_order->size);
2256
2257   if (info->relocateable
2258       && input_section->reloc_count > 0
2259       && output_section->orelocation == (arelent **) NULL)
2260     {
2261       /* Space has not been allocated for the output relocations.
2262          This can happen when we are called by a specific backend
2263          because somebody is attempting to link together different
2264          types of object files.  Handling this case correctly is
2265          difficult, and sometimes impossible.  */
2266       abort ();
2267     }
2268
2269   /* Get the canonical symbols.  The generic linker will always have
2270      retrieved them by this point, but we may be being called by a
2271      specific linker when linking different types of object files
2272      together.  */
2273   if (! generic_link_read_symbols (input_bfd))
2274     return false;
2275
2276   /* Get and relocate the section contents.  */
2277   contents = (bfd_byte *) malloc (bfd_section_size (input_bfd, input_section));
2278   if (contents == NULL && bfd_section_size (input_bfd, input_section) != 0)
2279     {
2280       bfd_set_error (bfd_error_no_memory);
2281       goto error_return;
2282     }
2283   new_contents = (bfd_get_relocated_section_contents
2284                   (output_bfd, info, link_order, contents, info->relocateable,
2285                    _bfd_generic_link_get_symbols (input_bfd)));
2286   if (!new_contents)
2287     goto error_return;
2288
2289   /* Output the section contents.  */
2290   if (! bfd_set_section_contents (output_bfd, output_section,
2291                                   (PTR) new_contents,
2292                                   link_order->offset, link_order->size))
2293     goto error_return;
2294
2295   if (contents != NULL)
2296     free (contents);
2297   return true;
2298
2299  error_return:
2300   if (contents != NULL)
2301     free (contents);
2302   return false;
2303 }
2304
2305 /* A little routine to count the number of relocs in a link_order
2306    list.  */
2307
2308 unsigned int
2309 _bfd_count_link_order_relocs (link_order)
2310      struct bfd_link_order *link_order;
2311 {
2312   register unsigned int c;
2313   register struct bfd_link_order *l;
2314
2315   c = 0;
2316   for (l = link_order; l != (struct bfd_link_order *) NULL; l = l->next)
2317     {
2318       if (l->type == bfd_section_reloc_link_order
2319           || l->type == bfd_symbol_reloc_link_order)
2320         ++c;
2321     }
2322
2323   return c;
2324 }