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