OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [linker.c] - Blame information for rev 213

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.