Coverage Report

Created: 2023-08-28 06:30

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