Coverage Report

Created: 2025-06-24 06:45

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