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