Coverage Report

Created: 2023-06-29 07:06

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