]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/elflink.c
Fix __bss_start assertion failure in _bfd_elf_fix_symbol_flags
[thirdparty/binutils-gdb.git] / bfd / elflink.c
CommitLineData
252b5132 1/* ELF linking support for BFD.
82704155 2 Copyright (C) 1995-2019 Free Software Foundation, Inc.
252b5132 3
8fdd7217 4 This file is part of BFD, the Binary File Descriptor library.
252b5132 5
8fdd7217
NC
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
cd123cb7 8 the Free Software Foundation; either version 3 of the License, or
8fdd7217 9 (at your option) any later version.
252b5132 10
8fdd7217
NC
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
252b5132 15
8fdd7217
NC
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
cd123cb7
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
252b5132 20
252b5132 21#include "sysdep.h"
3db64b00 22#include "bfd.h"
252b5132
RH
23#include "bfdlink.h"
24#include "libbfd.h"
25#define ARCH_SIZE 0
26#include "elf-bfd.h"
4ad4eba5 27#include "safe-ctype.h"
ccf2f652 28#include "libiberty.h"
66eb6687 29#include "objalloc.h"
08ce1d72 30#if BFD_SUPPORTS_PLUGINS
7d0b9ebc 31#include "plugin-api.h"
7dc3990e
L
32#include "plugin.h"
33#endif
252b5132 34
28caa186
AM
35/* This struct is used to pass information to routines called via
36 elf_link_hash_traverse which must return failure. */
37
38struct elf_info_failed
39{
40 struct bfd_link_info *info;
28caa186
AM
41 bfd_boolean failed;
42};
43
44/* This structure is used to pass information to
45 _bfd_elf_link_find_version_dependencies. */
46
47struct elf_find_verdep_info
48{
49 /* General link information. */
50 struct bfd_link_info *info;
51 /* The number of dependencies. */
52 unsigned int vers;
53 /* Whether we had a failure. */
54 bfd_boolean failed;
55};
56
57static bfd_boolean _bfd_elf_fix_symbol_flags
58 (struct elf_link_hash_entry *, struct elf_info_failed *);
59
2f0c68f2
CM
60asection *
61_bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
62 unsigned long r_symndx,
63 bfd_boolean discard)
64{
65 if (r_symndx >= cookie->locsymcount
66 || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
67 {
68 struct elf_link_hash_entry *h;
69
70 h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
71
72 while (h->root.type == bfd_link_hash_indirect
73 || h->root.type == bfd_link_hash_warning)
74 h = (struct elf_link_hash_entry *) h->root.u.i.link;
75
76 if ((h->root.type == bfd_link_hash_defined
77 || h->root.type == bfd_link_hash_defweak)
78 && discarded_section (h->root.u.def.section))
07d6d2b8 79 return h->root.u.def.section;
2f0c68f2
CM
80 else
81 return NULL;
82 }
83 else
84 {
85 /* It's not a relocation against a global symbol,
86 but it could be a relocation against a local
87 symbol for a discarded section. */
88 asection *isec;
89 Elf_Internal_Sym *isym;
90
91 /* Need to: get the symbol; get the section. */
92 isym = &cookie->locsyms[r_symndx];
93 isec = bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
94 if (isec != NULL
95 && discard ? discarded_section (isec) : 1)
96 return isec;
97 }
98 return NULL;
99}
100
d98685ac
AM
101/* Define a symbol in a dynamic linkage section. */
102
103struct elf_link_hash_entry *
104_bfd_elf_define_linkage_sym (bfd *abfd,
105 struct bfd_link_info *info,
106 asection *sec,
107 const char *name)
108{
109 struct elf_link_hash_entry *h;
110 struct bfd_link_hash_entry *bh;
ccabcbe5 111 const struct elf_backend_data *bed;
d98685ac
AM
112
113 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
114 if (h != NULL)
115 {
116 /* Zap symbol defined in an as-needed lib that wasn't linked.
117 This is a symptom of a larger problem: Absolute symbols
118 defined in shared libraries can't be overridden, because we
119 lose the link to the bfd which is via the symbol section. */
120 h->root.type = bfd_link_hash_new;
ad32986f 121 bh = &h->root;
d98685ac 122 }
ad32986f
NC
123 else
124 bh = NULL;
d98685ac 125
cf18fda4 126 bed = get_elf_backend_data (abfd);
d98685ac 127 if (!_bfd_generic_link_add_one_symbol (info, abfd, name, BSF_GLOBAL,
cf18fda4 128 sec, 0, NULL, FALSE, bed->collect,
d98685ac
AM
129 &bh))
130 return NULL;
131 h = (struct elf_link_hash_entry *) bh;
ad32986f 132 BFD_ASSERT (h != NULL);
d98685ac 133 h->def_regular = 1;
e28df02b 134 h->non_elf = 0;
12b2843a 135 h->root.linker_def = 1;
d98685ac 136 h->type = STT_OBJECT;
00b7642b
AM
137 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
138 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
d98685ac 139
ccabcbe5 140 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
d98685ac
AM
141 return h;
142}
143
b34976b6 144bfd_boolean
268b6b39 145_bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
252b5132
RH
146{
147 flagword flags;
aad5d350 148 asection *s;
252b5132 149 struct elf_link_hash_entry *h;
9c5bfbb7 150 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6de2ae4a 151 struct elf_link_hash_table *htab = elf_hash_table (info);
252b5132
RH
152
153 /* This function may be called more than once. */
ce558b89 154 if (htab->sgot != NULL)
b34976b6 155 return TRUE;
252b5132 156
e5a52504 157 flags = bed->dynamic_sec_flags;
252b5132 158
14b2f831
AM
159 s = bfd_make_section_anyway_with_flags (abfd,
160 (bed->rela_plts_and_copies_p
161 ? ".rela.got" : ".rel.got"),
162 (bed->dynamic_sec_flags
163 | SEC_READONLY));
6de2ae4a
L
164 if (s == NULL
165 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
166 return FALSE;
167 htab->srelgot = s;
252b5132 168
14b2f831 169 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
64e77c6d
L
170 if (s == NULL
171 || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
172 return FALSE;
173 htab->sgot = s;
174
252b5132
RH
175 if (bed->want_got_plt)
176 {
14b2f831 177 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
252b5132 178 if (s == NULL
6de2ae4a
L
179 || !bfd_set_section_alignment (abfd, s,
180 bed->s->log_file_align))
b34976b6 181 return FALSE;
6de2ae4a 182 htab->sgotplt = s;
252b5132
RH
183 }
184
64e77c6d
L
185 /* The first bit of the global offset table is the header. */
186 s->size += bed->got_header_size;
187
2517a57f
AM
188 if (bed->want_got_sym)
189 {
190 /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
191 (or .got.plt) section. We don't do this in the linker script
192 because we don't want to define the symbol if we are not creating
193 a global offset table. */
6de2ae4a
L
194 h = _bfd_elf_define_linkage_sym (abfd, info, s,
195 "_GLOBAL_OFFSET_TABLE_");
2517a57f 196 elf_hash_table (info)->hgot = h;
d98685ac
AM
197 if (h == NULL)
198 return FALSE;
2517a57f 199 }
252b5132 200
b34976b6 201 return TRUE;
252b5132
RH
202}
203\f
7e9f0867
AM
204/* Create a strtab to hold the dynamic symbol names. */
205static bfd_boolean
206_bfd_elf_link_create_dynstrtab (bfd *abfd, struct bfd_link_info *info)
207{
208 struct elf_link_hash_table *hash_table;
209
210 hash_table = elf_hash_table (info);
211 if (hash_table->dynobj == NULL)
6cd255ca
L
212 {
213 /* We may not set dynobj, an input file holding linker created
214 dynamic sections to abfd, which may be a dynamic object with
215 its own dynamic sections. We need to find a normal input file
216 to hold linker created sections if possible. */
217 if ((abfd->flags & (DYNAMIC | BFD_PLUGIN)) != 0)
218 {
219 bfd *ibfd;
57963c05 220 asection *s;
6cd255ca 221 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
6645479e 222 if ((ibfd->flags
57963c05
AM
223 & (DYNAMIC | BFD_LINKER_CREATED | BFD_PLUGIN)) == 0
224 && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
4de5434b 225 && elf_object_id (ibfd) == elf_hash_table_id (hash_table)
57963c05
AM
226 && !((s = ibfd->sections) != NULL
227 && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS))
6cd255ca
L
228 {
229 abfd = ibfd;
230 break;
231 }
232 }
233 hash_table->dynobj = abfd;
234 }
7e9f0867
AM
235
236 if (hash_table->dynstr == NULL)
237 {
238 hash_table->dynstr = _bfd_elf_strtab_init ();
239 if (hash_table->dynstr == NULL)
240 return FALSE;
241 }
242 return TRUE;
243}
244
45d6a902
AM
245/* Create some sections which will be filled in with dynamic linking
246 information. ABFD is an input file which requires dynamic sections
247 to be created. The dynamic sections take up virtual memory space
248 when the final executable is run, so we need to create them before
249 addresses are assigned to the output sections. We work out the
250 actual contents and size of these sections later. */
252b5132 251
b34976b6 252bfd_boolean
268b6b39 253_bfd_elf_link_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
252b5132 254{
45d6a902 255 flagword flags;
91d6fa6a 256 asection *s;
9c5bfbb7 257 const struct elf_backend_data *bed;
9637f6ef 258 struct elf_link_hash_entry *h;
252b5132 259
0eddce27 260 if (! is_elf_hash_table (info->hash))
45d6a902
AM
261 return FALSE;
262
263 if (elf_hash_table (info)->dynamic_sections_created)
264 return TRUE;
265
7e9f0867
AM
266 if (!_bfd_elf_link_create_dynstrtab (abfd, info))
267 return FALSE;
45d6a902 268
7e9f0867 269 abfd = elf_hash_table (info)->dynobj;
e5a52504
MM
270 bed = get_elf_backend_data (abfd);
271
272 flags = bed->dynamic_sec_flags;
45d6a902
AM
273
274 /* A dynamically linked executable has a .interp section, but a
275 shared library does not. */
9b8b325a 276 if (bfd_link_executable (info) && !info->nointerp)
252b5132 277 {
14b2f831
AM
278 s = bfd_make_section_anyway_with_flags (abfd, ".interp",
279 flags | SEC_READONLY);
3496cb2a 280 if (s == NULL)
45d6a902
AM
281 return FALSE;
282 }
bb0deeff 283
45d6a902
AM
284 /* Create sections to hold version informations. These are removed
285 if they are not needed. */
14b2f831
AM
286 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_d",
287 flags | SEC_READONLY);
45d6a902 288 if (s == NULL
45d6a902
AM
289 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
290 return FALSE;
291
14b2f831
AM
292 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version",
293 flags | SEC_READONLY);
45d6a902 294 if (s == NULL
45d6a902
AM
295 || ! bfd_set_section_alignment (abfd, s, 1))
296 return FALSE;
297
14b2f831
AM
298 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.version_r",
299 flags | SEC_READONLY);
45d6a902 300 if (s == NULL
45d6a902
AM
301 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
302 return FALSE;
303
14b2f831
AM
304 s = bfd_make_section_anyway_with_flags (abfd, ".dynsym",
305 flags | SEC_READONLY);
45d6a902 306 if (s == NULL
45d6a902
AM
307 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
308 return FALSE;
cae1fbbb 309 elf_hash_table (info)->dynsym = s;
45d6a902 310
14b2f831
AM
311 s = bfd_make_section_anyway_with_flags (abfd, ".dynstr",
312 flags | SEC_READONLY);
3496cb2a 313 if (s == NULL)
45d6a902
AM
314 return FALSE;
315
14b2f831 316 s = bfd_make_section_anyway_with_flags (abfd, ".dynamic", flags);
45d6a902 317 if (s == NULL
45d6a902
AM
318 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
319 return FALSE;
320
321 /* The special symbol _DYNAMIC is always set to the start of the
77cfaee6
AM
322 .dynamic section. We could set _DYNAMIC in a linker script, but we
323 only want to define it if we are, in fact, creating a .dynamic
324 section. We don't want to define it if there is no .dynamic
325 section, since on some ELF platforms the start up code examines it
326 to decide how to initialize the process. */
9637f6ef
L
327 h = _bfd_elf_define_linkage_sym (abfd, info, s, "_DYNAMIC");
328 elf_hash_table (info)->hdynamic = h;
329 if (h == NULL)
45d6a902
AM
330 return FALSE;
331
fdc90cb4
JJ
332 if (info->emit_hash)
333 {
14b2f831
AM
334 s = bfd_make_section_anyway_with_flags (abfd, ".hash",
335 flags | SEC_READONLY);
fdc90cb4
JJ
336 if (s == NULL
337 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
338 return FALSE;
339 elf_section_data (s)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;
340 }
341
342 if (info->emit_gnu_hash)
343 {
14b2f831
AM
344 s = bfd_make_section_anyway_with_flags (abfd, ".gnu.hash",
345 flags | SEC_READONLY);
fdc90cb4
JJ
346 if (s == NULL
347 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
348 return FALSE;
349 /* For 64-bit ELF, .gnu.hash is a non-uniform entity size section:
350 4 32-bit words followed by variable count of 64-bit words, then
351 variable count of 32-bit words. */
352 if (bed->s->arch_size == 64)
353 elf_section_data (s)->this_hdr.sh_entsize = 0;
354 else
355 elf_section_data (s)->this_hdr.sh_entsize = 4;
356 }
45d6a902
AM
357
358 /* Let the backend create the rest of the sections. This lets the
359 backend set the right flags. The backend will normally create
360 the .got and .plt sections. */
894891db
NC
361 if (bed->elf_backend_create_dynamic_sections == NULL
362 || ! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
45d6a902
AM
363 return FALSE;
364
365 elf_hash_table (info)->dynamic_sections_created = TRUE;
366
367 return TRUE;
368}
369
370/* Create dynamic sections when linking against a dynamic object. */
371
372bfd_boolean
268b6b39 373_bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
45d6a902
AM
374{
375 flagword flags, pltflags;
7325306f 376 struct elf_link_hash_entry *h;
45d6a902 377 asection *s;
9c5bfbb7 378 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6de2ae4a 379 struct elf_link_hash_table *htab = elf_hash_table (info);
45d6a902 380
252b5132
RH
381 /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
382 .rel[a].bss sections. */
e5a52504 383 flags = bed->dynamic_sec_flags;
252b5132
RH
384
385 pltflags = flags;
252b5132 386 if (bed->plt_not_loaded)
6df4d94c
MM
387 /* We do not clear SEC_ALLOC here because we still want the OS to
388 allocate space for the section; it's just that there's nothing
389 to read in from the object file. */
5d1634d7 390 pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
6df4d94c
MM
391 else
392 pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD;
252b5132
RH
393 if (bed->plt_readonly)
394 pltflags |= SEC_READONLY;
395
14b2f831 396 s = bfd_make_section_anyway_with_flags (abfd, ".plt", pltflags);
252b5132 397 if (s == NULL
252b5132 398 || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
b34976b6 399 return FALSE;
6de2ae4a 400 htab->splt = s;
252b5132 401
d98685ac
AM
402 /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
403 .plt section. */
7325306f
RS
404 if (bed->want_plt_sym)
405 {
406 h = _bfd_elf_define_linkage_sym (abfd, info, s,
407 "_PROCEDURE_LINKAGE_TABLE_");
408 elf_hash_table (info)->hplt = h;
409 if (h == NULL)
410 return FALSE;
411 }
252b5132 412
14b2f831
AM
413 s = bfd_make_section_anyway_with_flags (abfd,
414 (bed->rela_plts_and_copies_p
415 ? ".rela.plt" : ".rel.plt"),
416 flags | SEC_READONLY);
252b5132 417 if (s == NULL
45d6a902 418 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
b34976b6 419 return FALSE;
6de2ae4a 420 htab->srelplt = s;
252b5132
RH
421
422 if (! _bfd_elf_create_got_section (abfd, info))
b34976b6 423 return FALSE;
252b5132 424
3018b441
RH
425 if (bed->want_dynbss)
426 {
427 /* The .dynbss section is a place to put symbols which are defined
428 by dynamic objects, are referenced by regular objects, and are
429 not functions. We must allocate space for them in the process
430 image and use a R_*_COPY reloc to tell the dynamic linker to
431 initialize them at run time. The linker script puts the .dynbss
432 section into the .bss section of the final image. */
14b2f831 433 s = bfd_make_section_anyway_with_flags (abfd, ".dynbss",
afbf7e8e 434 SEC_ALLOC | SEC_LINKER_CREATED);
3496cb2a 435 if (s == NULL)
b34976b6 436 return FALSE;
9d19e4fd 437 htab->sdynbss = s;
252b5132 438
5474d94f
AM
439 if (bed->want_dynrelro)
440 {
441 /* Similarly, but for symbols that were originally in read-only
afbf7e8e
AM
442 sections. This section doesn't really need to have contents,
443 but make it like other .data.rel.ro sections. */
5474d94f 444 s = bfd_make_section_anyway_with_flags (abfd, ".data.rel.ro",
afbf7e8e 445 flags);
5474d94f
AM
446 if (s == NULL)
447 return FALSE;
448 htab->sdynrelro = s;
449 }
450
3018b441 451 /* The .rel[a].bss section holds copy relocs. This section is not
77cfaee6
AM
452 normally needed. We need to create it here, though, so that the
453 linker will map it to an output section. We can't just create it
454 only if we need it, because we will not know whether we need it
455 until we have seen all the input files, and the first time the
456 main linker code calls BFD after examining all the input files
457 (size_dynamic_sections) the input sections have already been
458 mapped to the output sections. If the section turns out not to
459 be needed, we can discard it later. We will never need this
460 section when generating a shared object, since they do not use
461 copy relocs. */
9d19e4fd 462 if (bfd_link_executable (info))
3018b441 463 {
14b2f831
AM
464 s = bfd_make_section_anyway_with_flags (abfd,
465 (bed->rela_plts_and_copies_p
466 ? ".rela.bss" : ".rel.bss"),
467 flags | SEC_READONLY);
3018b441 468 if (s == NULL
45d6a902 469 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
b34976b6 470 return FALSE;
9d19e4fd 471 htab->srelbss = s;
5474d94f
AM
472
473 if (bed->want_dynrelro)
474 {
475 s = (bfd_make_section_anyway_with_flags
476 (abfd, (bed->rela_plts_and_copies_p
477 ? ".rela.data.rel.ro" : ".rel.data.rel.ro"),
478 flags | SEC_READONLY));
479 if (s == NULL
480 || ! bfd_set_section_alignment (abfd, s,
481 bed->s->log_file_align))
482 return FALSE;
483 htab->sreldynrelro = s;
484 }
3018b441 485 }
252b5132
RH
486 }
487
b34976b6 488 return TRUE;
252b5132
RH
489}
490\f
252b5132
RH
491/* Record a new dynamic symbol. We record the dynamic symbols as we
492 read the input files, since we need to have a list of all of them
493 before we can determine the final sizes of the output sections.
494 Note that we may actually call this function even though we are not
495 going to output any dynamic symbols; in some cases we know that a
496 symbol should be in the dynamic symbol table, but only if there is
497 one. */
498
b34976b6 499bfd_boolean
c152c796
AM
500bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
501 struct elf_link_hash_entry *h)
252b5132
RH
502{
503 if (h->dynindx == -1)
504 {
2b0f7ef9 505 struct elf_strtab_hash *dynstr;
68b6ddd0 506 char *p;
252b5132 507 const char *name;
ef53be89 508 size_t indx;
252b5132 509
7a13edea
NC
510 /* XXX: The ABI draft says the linker must turn hidden and
511 internal symbols into STB_LOCAL symbols when producing the
512 DSO. However, if ld.so honors st_other in the dynamic table,
513 this would not be necessary. */
514 switch (ELF_ST_VISIBILITY (h->other))
515 {
516 case STV_INTERNAL:
517 case STV_HIDDEN:
9d6eee78
L
518 if (h->root.type != bfd_link_hash_undefined
519 && h->root.type != bfd_link_hash_undefweak)
38048eb9 520 {
f5385ebf 521 h->forced_local = 1;
67687978
PB
522 if (!elf_hash_table (info)->is_relocatable_executable)
523 return TRUE;
7a13edea 524 }
0444bdd4 525
7a13edea
NC
526 default:
527 break;
528 }
529
252b5132
RH
530 h->dynindx = elf_hash_table (info)->dynsymcount;
531 ++elf_hash_table (info)->dynsymcount;
532
533 dynstr = elf_hash_table (info)->dynstr;
534 if (dynstr == NULL)
535 {
536 /* Create a strtab to hold the dynamic symbol names. */
2b0f7ef9 537 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
252b5132 538 if (dynstr == NULL)
b34976b6 539 return FALSE;
252b5132
RH
540 }
541
542 /* We don't put any version information in the dynamic string
aad5d350 543 table. */
252b5132
RH
544 name = h->root.root.string;
545 p = strchr (name, ELF_VER_CHR);
68b6ddd0
AM
546 if (p != NULL)
547 /* We know that the p points into writable memory. In fact,
548 there are only a few symbols that have read-only names, being
549 those like _GLOBAL_OFFSET_TABLE_ that are created specially
550 by the backends. Most symbols will have names pointing into
551 an ELF string table read from a file, or to objalloc memory. */
552 *p = 0;
553
554 indx = _bfd_elf_strtab_add (dynstr, name, p != NULL);
555
556 if (p != NULL)
557 *p = ELF_VER_CHR;
252b5132 558
ef53be89 559 if (indx == (size_t) -1)
b34976b6 560 return FALSE;
252b5132
RH
561 h->dynstr_index = indx;
562 }
563
b34976b6 564 return TRUE;
252b5132 565}
45d6a902 566\f
55255dae
L
567/* Mark a symbol dynamic. */
568
28caa186 569static void
55255dae 570bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info,
40b36307
L
571 struct elf_link_hash_entry *h,
572 Elf_Internal_Sym *sym)
55255dae 573{
40b36307 574 struct bfd_elf_dynamic_list *d = info->dynamic_list;
55255dae 575
40b36307 576 /* It may be called more than once on the same H. */
0e1862bb 577 if(h->dynamic || bfd_link_relocatable (info))
55255dae
L
578 return;
579
40b36307
L
580 if ((info->dynamic_data
581 && (h->type == STT_OBJECT
b8871f35 582 || h->type == STT_COMMON
40b36307 583 || (sym != NULL
b8871f35
L
584 && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT
585 || ELF_ST_TYPE (sym->st_info) == STT_COMMON))))
a0c8462f 586 || (d != NULL
73ec947d 587 && h->non_elf
40b36307 588 && (*d->match) (&d->head, NULL, h->root.root.string)))
416c34d6
L
589 {
590 h->dynamic = 1;
591 /* NB: If a symbol is made dynamic by --dynamic-list, it has
592 non-IR reference. */
593 h->root.non_ir_ref_dynamic = 1;
594 }
55255dae
L
595}
596
45d6a902
AM
597/* Record an assignment to a symbol made by a linker script. We need
598 this in case some dynamic object refers to this symbol. */
599
600bfd_boolean
fe21a8fc
L
601bfd_elf_record_link_assignment (bfd *output_bfd,
602 struct bfd_link_info *info,
268b6b39 603 const char *name,
fe21a8fc
L
604 bfd_boolean provide,
605 bfd_boolean hidden)
45d6a902 606{
00cbee0a 607 struct elf_link_hash_entry *h, *hv;
4ea42fb7 608 struct elf_link_hash_table *htab;
00cbee0a 609 const struct elf_backend_data *bed;
45d6a902 610
0eddce27 611 if (!is_elf_hash_table (info->hash))
45d6a902
AM
612 return TRUE;
613
4ea42fb7
AM
614 htab = elf_hash_table (info);
615 h = elf_link_hash_lookup (htab, name, !provide, TRUE, FALSE);
45d6a902 616 if (h == NULL)
4ea42fb7 617 return provide;
45d6a902 618
8e2a4f11
AM
619 if (h->root.type == bfd_link_hash_warning)
620 h = (struct elf_link_hash_entry *) h->root.u.i.link;
621
0f550b3d
L
622 if (h->versioned == unknown)
623 {
624 /* Set versioned if symbol version is unknown. */
625 char *version = strrchr (name, ELF_VER_CHR);
626 if (version)
627 {
628 if (version > name && version[-1] != ELF_VER_CHR)
629 h->versioned = versioned_hidden;
630 else
631 h->versioned = versioned;
632 }
633 }
634
73ec947d
AM
635 /* Symbols defined in a linker script but not referenced anywhere
636 else will have non_elf set. */
637 if (h->non_elf)
638 {
639 bfd_elf_link_mark_dynamic_symbol (info, h, NULL);
640 h->non_elf = 0;
641 }
642
00cbee0a 643 switch (h->root.type)
77cfaee6 644 {
00cbee0a
L
645 case bfd_link_hash_defined:
646 case bfd_link_hash_defweak:
647 case bfd_link_hash_common:
648 break;
649 case bfd_link_hash_undefweak:
650 case bfd_link_hash_undefined:
651 /* Since we're defining the symbol, don't let it seem to have not
652 been defined. record_dynamic_symbol and size_dynamic_sections
653 may depend on this. */
4ea42fb7 654 h->root.type = bfd_link_hash_new;
77cfaee6
AM
655 if (h->root.u.undef.next != NULL || htab->root.undefs_tail == &h->root)
656 bfd_link_repair_undef_list (&htab->root);
00cbee0a
L
657 break;
658 case bfd_link_hash_new:
00cbee0a
L
659 break;
660 case bfd_link_hash_indirect:
661 /* We had a versioned symbol in a dynamic library. We make the
a0c8462f 662 the versioned symbol point to this one. */
00cbee0a
L
663 bed = get_elf_backend_data (output_bfd);
664 hv = h;
665 while (hv->root.type == bfd_link_hash_indirect
666 || hv->root.type == bfd_link_hash_warning)
667 hv = (struct elf_link_hash_entry *) hv->root.u.i.link;
668 /* We don't need to update h->root.u since linker will set them
669 later. */
670 h->root.type = bfd_link_hash_undefined;
671 hv->root.type = bfd_link_hash_indirect;
672 hv->root.u.i.link = (struct bfd_link_hash_entry *) h;
673 (*bed->elf_backend_copy_indirect_symbol) (info, h, hv);
674 break;
8e2a4f11
AM
675 default:
676 BFD_FAIL ();
c2596ca5 677 return FALSE;
55255dae 678 }
45d6a902
AM
679
680 /* If this symbol is being provided by the linker script, and it is
681 currently defined by a dynamic object, but not by a regular
682 object, then mark it as undefined so that the generic linker will
683 force the correct value. */
684 if (provide
f5385ebf
AM
685 && h->def_dynamic
686 && !h->def_regular)
45d6a902
AM
687 h->root.type = bfd_link_hash_undefined;
688
48e30f52
L
689 /* If this symbol is currently defined by a dynamic object, but not
690 by a regular object, then clear out any version information because
691 the symbol will not be associated with the dynamic object any
692 more. */
693 if (h->def_dynamic && !h->def_regular)
b531344c
MR
694 h->verinfo.verdef = NULL;
695
696 /* Make sure this symbol is not garbage collected. */
697 h->mark = 1;
45d6a902 698
f5385ebf 699 h->def_regular = 1;
45d6a902 700
eb8476a6 701 if (hidden)
fe21a8fc 702 {
91d6fa6a 703 bed = get_elf_backend_data (output_bfd);
b8297068
AM
704 if (ELF_ST_VISIBILITY (h->other) != STV_INTERNAL)
705 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
fe21a8fc
L
706 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
707 }
708
6fa3860b
PB
709 /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared objects
710 and executables. */
0e1862bb 711 if (!bfd_link_relocatable (info)
6fa3860b
PB
712 && h->dynindx != -1
713 && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
714 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL))
715 h->forced_local = 1;
716
f5385ebf
AM
717 if ((h->def_dynamic
718 || h->ref_dynamic
6b3b0ab8
L
719 || bfd_link_dll (info)
720 || elf_hash_table (info)->is_relocatable_executable)
34a87bb0 721 && !h->forced_local
45d6a902
AM
722 && h->dynindx == -1)
723 {
c152c796 724 if (! bfd_elf_link_record_dynamic_symbol (info, h))
45d6a902
AM
725 return FALSE;
726
727 /* If this is a weak defined symbol, and we know a corresponding
728 real symbol from the same dynamic object, make sure the real
729 symbol is also made into a dynamic symbol. */
60d67dc8 730 if (h->is_weakalias)
45d6a902 731 {
60d67dc8
AM
732 struct elf_link_hash_entry *def = weakdef (h);
733
734 if (def->dynindx == -1
735 && !bfd_elf_link_record_dynamic_symbol (info, def))
45d6a902
AM
736 return FALSE;
737 }
738 }
739
740 return TRUE;
741}
42751cf3 742
8c58d23b
AM
743/* Record a new local dynamic symbol. Returns 0 on failure, 1 on
744 success, and 2 on a failure caused by attempting to record a symbol
745 in a discarded section, eg. a discarded link-once section symbol. */
746
747int
c152c796
AM
748bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info,
749 bfd *input_bfd,
750 long input_indx)
8c58d23b
AM
751{
752 bfd_size_type amt;
753 struct elf_link_local_dynamic_entry *entry;
754 struct elf_link_hash_table *eht;
755 struct elf_strtab_hash *dynstr;
ef53be89 756 size_t dynstr_index;
8c58d23b
AM
757 char *name;
758 Elf_External_Sym_Shndx eshndx;
759 char esym[sizeof (Elf64_External_Sym)];
760
0eddce27 761 if (! is_elf_hash_table (info->hash))
8c58d23b
AM
762 return 0;
763
764 /* See if the entry exists already. */
765 for (entry = elf_hash_table (info)->dynlocal; entry ; entry = entry->next)
766 if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
767 return 1;
768
769 amt = sizeof (*entry);
a50b1753 770 entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt);
8c58d23b
AM
771 if (entry == NULL)
772 return 0;
773
774 /* Go find the symbol, so that we can find it's name. */
775 if (!bfd_elf_get_elf_syms (input_bfd, &elf_tdata (input_bfd)->symtab_hdr,
268b6b39 776 1, input_indx, &entry->isym, esym, &eshndx))
8c58d23b
AM
777 {
778 bfd_release (input_bfd, entry);
779 return 0;
780 }
781
782 if (entry->isym.st_shndx != SHN_UNDEF
4fbb74a6 783 && entry->isym.st_shndx < SHN_LORESERVE)
8c58d23b
AM
784 {
785 asection *s;
786
787 s = bfd_section_from_elf_index (input_bfd, entry->isym.st_shndx);
788 if (s == NULL || bfd_is_abs_section (s->output_section))
789 {
790 /* We can still bfd_release here as nothing has done another
791 bfd_alloc. We can't do this later in this function. */
792 bfd_release (input_bfd, entry);
793 return 2;
794 }
795 }
796
797 name = (bfd_elf_string_from_elf_section
798 (input_bfd, elf_tdata (input_bfd)->symtab_hdr.sh_link,
799 entry->isym.st_name));
800
801 dynstr = elf_hash_table (info)->dynstr;
802 if (dynstr == NULL)
803 {
804 /* Create a strtab to hold the dynamic symbol names. */
805 elf_hash_table (info)->dynstr = dynstr = _bfd_elf_strtab_init ();
806 if (dynstr == NULL)
807 return 0;
808 }
809
b34976b6 810 dynstr_index = _bfd_elf_strtab_add (dynstr, name, FALSE);
ef53be89 811 if (dynstr_index == (size_t) -1)
8c58d23b
AM
812 return 0;
813 entry->isym.st_name = dynstr_index;
814
815 eht = elf_hash_table (info);
816
817 entry->next = eht->dynlocal;
818 eht->dynlocal = entry;
819 entry->input_bfd = input_bfd;
820 entry->input_indx = input_indx;
821 eht->dynsymcount++;
822
823 /* Whatever binding the symbol had before, it's now local. */
824 entry->isym.st_info
825 = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (entry->isym.st_info));
826
827 /* The dynindx will be set at the end of size_dynamic_sections. */
828
829 return 1;
830}
831
30b30c21 832/* Return the dynindex of a local dynamic symbol. */
42751cf3 833
30b30c21 834long
268b6b39
AM
835_bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *info,
836 bfd *input_bfd,
837 long input_indx)
30b30c21
RH
838{
839 struct elf_link_local_dynamic_entry *e;
840
841 for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
842 if (e->input_bfd == input_bfd && e->input_indx == input_indx)
843 return e->dynindx;
844 return -1;
845}
846
847/* This function is used to renumber the dynamic symbols, if some of
848 them are removed because they are marked as local. This is called
849 via elf_link_hash_traverse. */
850
b34976b6 851static bfd_boolean
268b6b39
AM
852elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h,
853 void *data)
42751cf3 854{
a50b1753 855 size_t *count = (size_t *) data;
30b30c21 856
6fa3860b
PB
857 if (h->forced_local)
858 return TRUE;
859
860 if (h->dynindx != -1)
861 h->dynindx = ++(*count);
862
863 return TRUE;
864}
865
866
867/* Like elf_link_renumber_hash_table_dynsyms, but just number symbols with
868 STB_LOCAL binding. */
869
870static bfd_boolean
871elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h,
872 void *data)
873{
a50b1753 874 size_t *count = (size_t *) data;
6fa3860b 875
6fa3860b
PB
876 if (!h->forced_local)
877 return TRUE;
878
42751cf3 879 if (h->dynindx != -1)
30b30c21
RH
880 h->dynindx = ++(*count);
881
b34976b6 882 return TRUE;
42751cf3 883}
30b30c21 884
aee6f5b4
AO
885/* Return true if the dynamic symbol for a given section should be
886 omitted when creating a shared library. */
887bfd_boolean
d00dd7dc
AM
888_bfd_elf_omit_section_dynsym_default (bfd *output_bfd ATTRIBUTE_UNUSED,
889 struct bfd_link_info *info,
890 asection *p)
aee6f5b4 891{
74541ad4 892 struct elf_link_hash_table *htab;
ca55926c 893 asection *ip;
74541ad4 894
aee6f5b4
AO
895 switch (elf_section_data (p)->this_hdr.sh_type)
896 {
897 case SHT_PROGBITS:
898 case SHT_NOBITS:
899 /* If sh_type is yet undecided, assume it could be
900 SHT_PROGBITS/SHT_NOBITS. */
901 case SHT_NULL:
74541ad4 902 htab = elf_hash_table (info);
74541ad4
AM
903 if (htab->text_index_section != NULL)
904 return p != htab->text_index_section && p != htab->data_index_section;
905
ca55926c 906 return (htab->dynobj != NULL
3d4d4302 907 && (ip = bfd_get_linker_section (htab->dynobj, p->name)) != NULL
ca55926c 908 && ip->output_section == p);
aee6f5b4
AO
909
910 /* There shouldn't be section relative relocations
911 against any other section. */
912 default:
913 return TRUE;
914 }
915}
916
d00dd7dc
AM
917bfd_boolean
918_bfd_elf_omit_section_dynsym_all
919 (bfd *output_bfd ATTRIBUTE_UNUSED,
920 struct bfd_link_info *info ATTRIBUTE_UNUSED,
921 asection *p ATTRIBUTE_UNUSED)
922{
923 return TRUE;
924}
925
062e2358 926/* Assign dynsym indices. In a shared library we generate a section
6fa3860b
PB
927 symbol for each output section, which come first. Next come symbols
928 which have been forced to local binding. Then all of the back-end
929 allocated local dynamic syms, followed by the rest of the global
63f452a8
AM
930 symbols. If SECTION_SYM_COUNT is NULL, section dynindx is not set.
931 (This prevents the early call before elf_backend_init_index_section
932 and strip_excluded_output_sections setting dynindx for sections
933 that are stripped.) */
30b30c21 934
554220db
AM
935static unsigned long
936_bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
937 struct bfd_link_info *info,
938 unsigned long *section_sym_count)
30b30c21
RH
939{
940 unsigned long dynsymcount = 0;
63f452a8 941 bfd_boolean do_sec = section_sym_count != NULL;
30b30c21 942
0e1862bb
L
943 if (bfd_link_pic (info)
944 || elf_hash_table (info)->is_relocatable_executable)
30b30c21 945 {
aee6f5b4 946 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
30b30c21
RH
947 asection *p;
948 for (p = output_bfd->sections; p ; p = p->next)
8c37241b 949 if ((p->flags & SEC_EXCLUDE) == 0
aee6f5b4 950 && (p->flags & SEC_ALLOC) != 0
7f923b7f 951 && elf_hash_table (info)->dynamic_relocs
aee6f5b4 952 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
63f452a8
AM
953 {
954 ++dynsymcount;
955 if (do_sec)
956 elf_section_data (p)->dynindx = dynsymcount;
957 }
958 else if (do_sec)
74541ad4 959 elf_section_data (p)->dynindx = 0;
30b30c21 960 }
63f452a8
AM
961 if (do_sec)
962 *section_sym_count = dynsymcount;
30b30c21 963
6fa3860b
PB
964 elf_link_hash_traverse (elf_hash_table (info),
965 elf_link_renumber_local_hash_table_dynsyms,
966 &dynsymcount);
967
30b30c21
RH
968 if (elf_hash_table (info)->dynlocal)
969 {
970 struct elf_link_local_dynamic_entry *p;
971 for (p = elf_hash_table (info)->dynlocal; p ; p = p->next)
972 p->dynindx = ++dynsymcount;
973 }
90ac2420 974 elf_hash_table (info)->local_dynsymcount = dynsymcount;
30b30c21
RH
975
976 elf_link_hash_traverse (elf_hash_table (info),
977 elf_link_renumber_hash_table_dynsyms,
978 &dynsymcount);
979
d5486c43
L
980 /* There is an unused NULL entry at the head of the table which we
981 must account for in our count even if the table is empty since it
982 is intended for the mandatory DT_SYMTAB tag (.dynsym section) in
983 .dynamic section. */
984 dynsymcount++;
30b30c21 985
ccabcbe5
AM
986 elf_hash_table (info)->dynsymcount = dynsymcount;
987 return dynsymcount;
30b30c21 988}
252b5132 989
54ac0771
L
990/* Merge st_other field. */
991
992static void
993elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h,
b8417128 994 const Elf_Internal_Sym *isym, asection *sec,
cd3416da 995 bfd_boolean definition, bfd_boolean dynamic)
54ac0771
L
996{
997 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
998
999 /* If st_other has a processor-specific meaning, specific
cd3416da 1000 code might be needed here. */
54ac0771
L
1001 if (bed->elf_backend_merge_symbol_attribute)
1002 (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition,
1003 dynamic);
1004
cd3416da 1005 if (!dynamic)
54ac0771 1006 {
cd3416da
AM
1007 unsigned symvis = ELF_ST_VISIBILITY (isym->st_other);
1008 unsigned hvis = ELF_ST_VISIBILITY (h->other);
54ac0771 1009
cd3416da
AM
1010 /* Keep the most constraining visibility. Leave the remainder
1011 of the st_other field to elf_backend_merge_symbol_attribute. */
1012 if (symvis - 1 < hvis - 1)
1013 h->other = symvis | (h->other & ~ELF_ST_VISIBILITY (-1));
54ac0771 1014 }
b8417128
AM
1015 else if (definition
1016 && ELF_ST_VISIBILITY (isym->st_other) != STV_DEFAULT
1017 && (sec->flags & SEC_READONLY) == 0)
6cabe1ea 1018 h->protected_def = 1;
54ac0771
L
1019}
1020
4f3fedcf
AM
1021/* This function is called when we want to merge a new symbol with an
1022 existing symbol. It handles the various cases which arise when we
1023 find a definition in a dynamic object, or when there is already a
1024 definition in a dynamic object. The new symbol is described by
1025 NAME, SYM, PSEC, and PVALUE. We set SYM_HASH to the hash table
1026 entry. We set POLDBFD to the old symbol's BFD. We set POLD_WEAK
1027 if the old symbol was weak. We set POLD_ALIGNMENT to the alignment
1028 of an old common symbol. We set OVERRIDE if the old symbol is
1029 overriding a new definition. We set TYPE_CHANGE_OK if it is OK for
1030 the type to change. We set SIZE_CHANGE_OK if it is OK for the size
1031 to change. By OK to change, we mean that we shouldn't warn if the
1032 type or size does change. */
45d6a902 1033
8a56bd02 1034static bfd_boolean
268b6b39
AM
1035_bfd_elf_merge_symbol (bfd *abfd,
1036 struct bfd_link_info *info,
1037 const char *name,
1038 Elf_Internal_Sym *sym,
1039 asection **psec,
1040 bfd_vma *pvalue,
4f3fedcf
AM
1041 struct elf_link_hash_entry **sym_hash,
1042 bfd **poldbfd,
37a9e49a 1043 bfd_boolean *pold_weak,
af44c138 1044 unsigned int *pold_alignment,
268b6b39
AM
1045 bfd_boolean *skip,
1046 bfd_boolean *override,
1047 bfd_boolean *type_change_ok,
6e33951e
L
1048 bfd_boolean *size_change_ok,
1049 bfd_boolean *matched)
252b5132 1050{
7479dfd4 1051 asection *sec, *oldsec;
45d6a902 1052 struct elf_link_hash_entry *h;
90c984fc 1053 struct elf_link_hash_entry *hi;
45d6a902
AM
1054 struct elf_link_hash_entry *flip;
1055 int bind;
1056 bfd *oldbfd;
1057 bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;
0a36a439 1058 bfd_boolean newweak, oldweak, newfunc, oldfunc;
a4d8e49b 1059 const struct elf_backend_data *bed;
6e33951e 1060 char *new_version;
93f4de39 1061 bfd_boolean default_sym = *matched;
45d6a902
AM
1062
1063 *skip = FALSE;
1064 *override = FALSE;
1065
1066 sec = *psec;
1067 bind = ELF_ST_BIND (sym->st_info);
1068
1069 if (! bfd_is_und_section (sec))
1070 h = elf_link_hash_lookup (elf_hash_table (info), name, TRUE, FALSE, FALSE);
1071 else
1072 h = ((struct elf_link_hash_entry *)
1073 bfd_wrapped_link_hash_lookup (abfd, info, name, TRUE, FALSE, FALSE));
1074 if (h == NULL)
1075 return FALSE;
1076 *sym_hash = h;
252b5132 1077
88ba32a0
L
1078 bed = get_elf_backend_data (abfd);
1079
6e33951e 1080 /* NEW_VERSION is the symbol version of the new symbol. */
422f1182 1081 if (h->versioned != unversioned)
6e33951e 1082 {
422f1182
L
1083 /* Symbol version is unknown or versioned. */
1084 new_version = strrchr (name, ELF_VER_CHR);
1085 if (new_version)
1086 {
1087 if (h->versioned == unknown)
1088 {
1089 if (new_version > name && new_version[-1] != ELF_VER_CHR)
1090 h->versioned = versioned_hidden;
1091 else
1092 h->versioned = versioned;
1093 }
1094 new_version += 1;
1095 if (new_version[0] == '\0')
1096 new_version = NULL;
1097 }
1098 else
1099 h->versioned = unversioned;
6e33951e 1100 }
422f1182
L
1101 else
1102 new_version = NULL;
6e33951e 1103
90c984fc
L
1104 /* For merging, we only care about real symbols. But we need to make
1105 sure that indirect symbol dynamic flags are updated. */
1106 hi = h;
45d6a902
AM
1107 while (h->root.type == bfd_link_hash_indirect
1108 || h->root.type == bfd_link_hash_warning)
1109 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1110
6e33951e
L
1111 if (!*matched)
1112 {
1113 if (hi == h || h->root.type == bfd_link_hash_new)
1114 *matched = TRUE;
1115 else
1116 {
ae7683d2 1117 /* OLD_HIDDEN is true if the existing symbol is only visible
6e33951e 1118 to the symbol with the same symbol version. NEW_HIDDEN is
ae7683d2 1119 true if the new symbol is only visible to the symbol with
6e33951e 1120 the same symbol version. */
422f1182
L
1121 bfd_boolean old_hidden = h->versioned == versioned_hidden;
1122 bfd_boolean new_hidden = hi->versioned == versioned_hidden;
6e33951e
L
1123 if (!old_hidden && !new_hidden)
1124 /* The new symbol matches the existing symbol if both
1125 aren't hidden. */
1126 *matched = TRUE;
1127 else
1128 {
1129 /* OLD_VERSION is the symbol version of the existing
1130 symbol. */
422f1182
L
1131 char *old_version;
1132
1133 if (h->versioned >= versioned)
1134 old_version = strrchr (h->root.root.string,
1135 ELF_VER_CHR) + 1;
1136 else
1137 old_version = NULL;
6e33951e
L
1138
1139 /* The new symbol matches the existing symbol if they
1140 have the same symbol version. */
1141 *matched = (old_version == new_version
1142 || (old_version != NULL
1143 && new_version != NULL
1144 && strcmp (old_version, new_version) == 0));
1145 }
1146 }
1147 }
1148
934bce08
AM
1149 /* OLDBFD and OLDSEC are a BFD and an ASECTION associated with the
1150 existing symbol. */
1151
1152 oldbfd = NULL;
1153 oldsec = NULL;
1154 switch (h->root.type)
1155 {
1156 default:
1157 break;
1158
1159 case bfd_link_hash_undefined:
1160 case bfd_link_hash_undefweak:
1161 oldbfd = h->root.u.undef.abfd;
1162 break;
1163
1164 case bfd_link_hash_defined:
1165 case bfd_link_hash_defweak:
1166 oldbfd = h->root.u.def.section->owner;
1167 oldsec = h->root.u.def.section;
1168 break;
1169
1170 case bfd_link_hash_common:
1171 oldbfd = h->root.u.c.p->section->owner;
1172 oldsec = h->root.u.c.p->section;
1173 if (pold_alignment)
1174 *pold_alignment = h->root.u.c.p->alignment_power;
1175 break;
1176 }
1177 if (poldbfd && *poldbfd == NULL)
1178 *poldbfd = oldbfd;
1179
1180 /* Differentiate strong and weak symbols. */
1181 newweak = bind == STB_WEAK;
1182 oldweak = (h->root.type == bfd_link_hash_defweak
1183 || h->root.type == bfd_link_hash_undefweak);
1184 if (pold_weak)
1185 *pold_weak = oldweak;
1186
40b36307 1187 /* We have to check it for every instance since the first few may be
ee659f1f 1188 references and not all compilers emit symbol type for undefined
40b36307
L
1189 symbols. */
1190 bfd_elf_link_mark_dynamic_symbol (info, h, sym);
1191
ee659f1f
AM
1192 /* NEWDYN and OLDDYN indicate whether the new or old symbol,
1193 respectively, is from a dynamic object. */
1194
1195 newdyn = (abfd->flags & DYNAMIC) != 0;
1196
1197 /* ref_dynamic_nonweak and dynamic_def flags track actual undefined
1198 syms and defined syms in dynamic libraries respectively.
1199 ref_dynamic on the other hand can be set for a symbol defined in
1200 a dynamic library, and def_dynamic may not be set; When the
1201 definition in a dynamic lib is overridden by a definition in the
1202 executable use of the symbol in the dynamic lib becomes a
1203 reference to the executable symbol. */
1204 if (newdyn)
1205 {
1206 if (bfd_is_und_section (sec))
1207 {
1208 if (bind != STB_WEAK)
1209 {
1210 h->ref_dynamic_nonweak = 1;
1211 hi->ref_dynamic_nonweak = 1;
1212 }
1213 }
1214 else
1215 {
6e33951e
L
1216 /* Update the existing symbol only if they match. */
1217 if (*matched)
1218 h->dynamic_def = 1;
ee659f1f
AM
1219 hi->dynamic_def = 1;
1220 }
1221 }
1222
45d6a902
AM
1223 /* If we just created the symbol, mark it as being an ELF symbol.
1224 Other than that, there is nothing to do--there is no merge issue
1225 with a newly defined symbol--so we just return. */
1226
1227 if (h->root.type == bfd_link_hash_new)
252b5132 1228 {
f5385ebf 1229 h->non_elf = 0;
45d6a902
AM
1230 return TRUE;
1231 }
252b5132 1232
45d6a902
AM
1233 /* In cases involving weak versioned symbols, we may wind up trying
1234 to merge a symbol with itself. Catch that here, to avoid the
1235 confusion that results if we try to override a symbol with
1236 itself. The additional tests catch cases like
1237 _GLOBAL_OFFSET_TABLE_, which are regular symbols defined in a
1238 dynamic object, which we do want to handle here. */
1239 if (abfd == oldbfd
895fa45f 1240 && (newweak || oldweak)
45d6a902 1241 && ((abfd->flags & DYNAMIC) == 0
f5385ebf 1242 || !h->def_regular))
45d6a902
AM
1243 return TRUE;
1244
707bba77 1245 olddyn = FALSE;
45d6a902
AM
1246 if (oldbfd != NULL)
1247 olddyn = (oldbfd->flags & DYNAMIC) != 0;
707bba77 1248 else if (oldsec != NULL)
45d6a902 1249 {
707bba77 1250 /* This handles the special SHN_MIPS_{TEXT,DATA} section
45d6a902 1251 indices used by MIPS ELF. */
707bba77 1252 olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
45d6a902 1253 }
252b5132 1254
1a3b5c34
AM
1255 /* Handle a case where plugin_notice won't be called and thus won't
1256 set the non_ir_ref flags on the first pass over symbols. */
1257 if (oldbfd != NULL
1258 && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
1259 && newdyn != olddyn)
1260 {
1261 h->root.non_ir_ref_dynamic = TRUE;
1262 hi->root.non_ir_ref_dynamic = TRUE;
1263 }
1264
45d6a902
AM
1265 /* NEWDEF and OLDDEF indicate whether the new or old symbol,
1266 respectively, appear to be a definition rather than reference. */
1267
707bba77 1268 newdef = !bfd_is_und_section (sec) && !bfd_is_com_section (sec);
45d6a902 1269
707bba77
AM
1270 olddef = (h->root.type != bfd_link_hash_undefined
1271 && h->root.type != bfd_link_hash_undefweak
202ac193 1272 && h->root.type != bfd_link_hash_common);
45d6a902 1273
0a36a439
L
1274 /* NEWFUNC and OLDFUNC indicate whether the new or old symbol,
1275 respectively, appear to be a function. */
1276
1277 newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1278 && bed->is_function_type (ELF_ST_TYPE (sym->st_info)));
1279
1280 oldfunc = (h->type != STT_NOTYPE
1281 && bed->is_function_type (h->type));
1282
c5d37467 1283 if (!(newfunc && oldfunc)
5b677558
AM
1284 && ELF_ST_TYPE (sym->st_info) != h->type
1285 && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE
1286 && h->type != STT_NOTYPE
c5d37467
AM
1287 && (newdef || bfd_is_com_section (sec))
1288 && (olddef || h->root.type == bfd_link_hash_common))
580a2b6e 1289 {
c5d37467
AM
1290 /* If creating a default indirect symbol ("foo" or "foo@") from
1291 a dynamic versioned definition ("foo@@") skip doing so if
1292 there is an existing regular definition with a different
1293 type. We don't want, for example, a "time" variable in the
1294 executable overriding a "time" function in a shared library. */
1295 if (newdyn
1296 && !olddyn)
1297 {
1298 *skip = TRUE;
1299 return TRUE;
1300 }
1301
1302 /* When adding a symbol from a regular object file after we have
1303 created indirect symbols, undo the indirection and any
1304 dynamic state. */
1305 if (hi != h
1306 && !newdyn
1307 && olddyn)
1308 {
1309 h = hi;
1310 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1311 h->forced_local = 0;
1312 h->ref_dynamic = 0;
1313 h->def_dynamic = 0;
1314 h->dynamic_def = 0;
1315 if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1316 {
1317 h->root.type = bfd_link_hash_undefined;
1318 h->root.u.undef.abfd = abfd;
1319 }
1320 else
1321 {
1322 h->root.type = bfd_link_hash_new;
1323 h->root.u.undef.abfd = NULL;
1324 }
1325 return TRUE;
1326 }
580a2b6e
L
1327 }
1328
4c34aff8
AM
1329 /* Check TLS symbols. We don't check undefined symbols introduced
1330 by "ld -u" which have no type (and oldbfd NULL), and we don't
1331 check symbols from plugins because they also have no type. */
1332 if (oldbfd != NULL
1333 && (oldbfd->flags & BFD_PLUGIN) == 0
1334 && (abfd->flags & BFD_PLUGIN) == 0
1335 && ELF_ST_TYPE (sym->st_info) != h->type
1336 && (ELF_ST_TYPE (sym->st_info) == STT_TLS || h->type == STT_TLS))
7479dfd4
L
1337 {
1338 bfd *ntbfd, *tbfd;
1339 bfd_boolean ntdef, tdef;
1340 asection *ntsec, *tsec;
1341
1342 if (h->type == STT_TLS)
1343 {
3b36f7e6 1344 ntbfd = abfd;
7479dfd4
L
1345 ntsec = sec;
1346 ntdef = newdef;
1347 tbfd = oldbfd;
1348 tsec = oldsec;
1349 tdef = olddef;
1350 }
1351 else
1352 {
1353 ntbfd = oldbfd;
1354 ntsec = oldsec;
1355 ntdef = olddef;
1356 tbfd = abfd;
1357 tsec = sec;
1358 tdef = newdef;
1359 }
1360
1361 if (tdef && ntdef)
4eca0228 1362 _bfd_error_handler
695344c0 1363 /* xgettext:c-format */
871b3ab2
AM
1364 (_("%s: TLS definition in %pB section %pA "
1365 "mismatches non-TLS definition in %pB section %pA"),
c08bb8dd 1366 h->root.root.string, tbfd, tsec, ntbfd, ntsec);
7479dfd4 1367 else if (!tdef && !ntdef)
4eca0228 1368 _bfd_error_handler
695344c0 1369 /* xgettext:c-format */
871b3ab2
AM
1370 (_("%s: TLS reference in %pB "
1371 "mismatches non-TLS reference in %pB"),
c08bb8dd 1372 h->root.root.string, tbfd, ntbfd);
7479dfd4 1373 else if (tdef)
4eca0228 1374 _bfd_error_handler
695344c0 1375 /* xgettext:c-format */
871b3ab2
AM
1376 (_("%s: TLS definition in %pB section %pA "
1377 "mismatches non-TLS reference in %pB"),
c08bb8dd 1378 h->root.root.string, tbfd, tsec, ntbfd);
7479dfd4 1379 else
4eca0228 1380 _bfd_error_handler
695344c0 1381 /* xgettext:c-format */
871b3ab2
AM
1382 (_("%s: TLS reference in %pB "
1383 "mismatches non-TLS definition in %pB section %pA"),
c08bb8dd 1384 h->root.root.string, tbfd, ntbfd, ntsec);
7479dfd4
L
1385
1386 bfd_set_error (bfd_error_bad_value);
1387 return FALSE;
1388 }
1389
45d6a902
AM
1390 /* If the old symbol has non-default visibility, we ignore the new
1391 definition from a dynamic object. */
1392 if (newdyn
9c7a29a3 1393 && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
45d6a902
AM
1394 && !bfd_is_und_section (sec))
1395 {
1396 *skip = TRUE;
1397 /* Make sure this symbol is dynamic. */
f5385ebf 1398 h->ref_dynamic = 1;
90c984fc 1399 hi->ref_dynamic = 1;
45d6a902
AM
1400 /* A protected symbol has external availability. Make sure it is
1401 recorded as dynamic.
1402
1403 FIXME: Should we check type and size for protected symbol? */
1404 if (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
c152c796 1405 return bfd_elf_link_record_dynamic_symbol (info, h);
45d6a902
AM
1406 else
1407 return TRUE;
1408 }
1409 else if (!newdyn
9c7a29a3 1410 && ELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT
f5385ebf 1411 && h->def_dynamic)
45d6a902
AM
1412 {
1413 /* If the new symbol with non-default visibility comes from a
1414 relocatable file and the old definition comes from a dynamic
1415 object, we remove the old definition. */
6c9b78e6 1416 if (hi->root.type == bfd_link_hash_indirect)
d2dee3b2
L
1417 {
1418 /* Handle the case where the old dynamic definition is
1419 default versioned. We need to copy the symbol info from
1420 the symbol with default version to the normal one if it
1421 was referenced before. */
1422 if (h->ref_regular)
1423 {
6c9b78e6 1424 hi->root.type = h->root.type;
d2dee3b2 1425 h->root.type = bfd_link_hash_indirect;
6c9b78e6 1426 (*bed->elf_backend_copy_indirect_symbol) (info, hi, h);
aed81c4e 1427
6c9b78e6 1428 h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
aed81c4e 1429 if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
d2dee3b2 1430 {
aed81c4e
MR
1431 /* If the new symbol is hidden or internal, completely undo
1432 any dynamic link state. */
1433 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1434 h->forced_local = 0;
1435 h->ref_dynamic = 0;
d2dee3b2
L
1436 }
1437 else
aed81c4e
MR
1438 h->ref_dynamic = 1;
1439
1440 h->def_dynamic = 0;
aed81c4e
MR
1441 /* FIXME: Should we check type and size for protected symbol? */
1442 h->size = 0;
1443 h->type = 0;
1444
6c9b78e6 1445 h = hi;
d2dee3b2
L
1446 }
1447 else
6c9b78e6 1448 h = hi;
d2dee3b2 1449 }
1de1a317 1450
f5eda473
AM
1451 /* If the old symbol was undefined before, then it will still be
1452 on the undefs list. If the new symbol is undefined or
1453 common, we can't make it bfd_link_hash_new here, because new
1454 undefined or common symbols will be added to the undefs list
1455 by _bfd_generic_link_add_one_symbol. Symbols may not be
1456 added twice to the undefs list. Also, if the new symbol is
1457 undefweak then we don't want to lose the strong undef. */
1458 if (h->root.u.undef.next || info->hash->undefs_tail == &h->root)
1de1a317 1459 {
1de1a317 1460 h->root.type = bfd_link_hash_undefined;
1de1a317
L
1461 h->root.u.undef.abfd = abfd;
1462 }
1463 else
1464 {
1465 h->root.type = bfd_link_hash_new;
1466 h->root.u.undef.abfd = NULL;
1467 }
1468
f5eda473 1469 if (ELF_ST_VISIBILITY (sym->st_other) != STV_PROTECTED)
252b5132 1470 {
f5eda473
AM
1471 /* If the new symbol is hidden or internal, completely undo
1472 any dynamic link state. */
1473 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1474 h->forced_local = 0;
1475 h->ref_dynamic = 0;
45d6a902 1476 }
f5eda473
AM
1477 else
1478 h->ref_dynamic = 1;
1479 h->def_dynamic = 0;
45d6a902
AM
1480 /* FIXME: Should we check type and size for protected symbol? */
1481 h->size = 0;
1482 h->type = 0;
1483 return TRUE;
1484 }
14a793b2 1485
15b43f48
AM
1486 /* If a new weak symbol definition comes from a regular file and the
1487 old symbol comes from a dynamic library, we treat the new one as
1488 strong. Similarly, an old weak symbol definition from a regular
1489 file is treated as strong when the new symbol comes from a dynamic
1490 library. Further, an old weak symbol from a dynamic library is
1491 treated as strong if the new symbol is from a dynamic library.
1492 This reflects the way glibc's ld.so works.
1493
165f707a
AM
1494 Also allow a weak symbol to override a linker script symbol
1495 defined by an early pass over the script. This is done so the
1496 linker knows the symbol is defined in an object file, for the
1497 DEFINED script function.
1498
15b43f48
AM
1499 Do this before setting *type_change_ok or *size_change_ok so that
1500 we warn properly when dynamic library symbols are overridden. */
1501
165f707a 1502 if (newdef && !newdyn && (olddyn || h->root.ldscript_def))
0f8a2703 1503 newweak = FALSE;
15b43f48 1504 if (olddef && newdyn)
0f8a2703
AM
1505 oldweak = FALSE;
1506
d334575b 1507 /* Allow changes between different types of function symbol. */
0a36a439 1508 if (newfunc && oldfunc)
fcb93ecf
PB
1509 *type_change_ok = TRUE;
1510
79349b09
AM
1511 /* It's OK to change the type if either the existing symbol or the
1512 new symbol is weak. A type change is also OK if the old symbol
1513 is undefined and the new symbol is defined. */
252b5132 1514
79349b09
AM
1515 if (oldweak
1516 || newweak
1517 || (newdef
1518 && h->root.type == bfd_link_hash_undefined))
1519 *type_change_ok = TRUE;
1520
1521 /* It's OK to change the size if either the existing symbol or the
1522 new symbol is weak, or if the old symbol is undefined. */
1523
1524 if (*type_change_ok
1525 || h->root.type == bfd_link_hash_undefined)
1526 *size_change_ok = TRUE;
45d6a902 1527
45d6a902
AM
1528 /* NEWDYNCOMMON and OLDDYNCOMMON indicate whether the new or old
1529 symbol, respectively, appears to be a common symbol in a dynamic
1530 object. If a symbol appears in an uninitialized section, and is
1531 not weak, and is not a function, then it may be a common symbol
1532 which was resolved when the dynamic object was created. We want
1533 to treat such symbols specially, because they raise special
1534 considerations when setting the symbol size: if the symbol
1535 appears as a common symbol in a regular object, and the size in
1536 the regular object is larger, we must make sure that we use the
1537 larger size. This problematic case can always be avoided in C,
1538 but it must be handled correctly when using Fortran shared
1539 libraries.
1540
1541 Note that if NEWDYNCOMMON is set, NEWDEF will be set, and
1542 likewise for OLDDYNCOMMON and OLDDEF.
1543
1544 Note that this test is just a heuristic, and that it is quite
1545 possible to have an uninitialized symbol in a shared object which
1546 is really a definition, rather than a common symbol. This could
1547 lead to some minor confusion when the symbol really is a common
1548 symbol in some regular object. However, I think it will be
1549 harmless. */
1550
1551 if (newdyn
1552 && newdef
79349b09 1553 && !newweak
45d6a902
AM
1554 && (sec->flags & SEC_ALLOC) != 0
1555 && (sec->flags & SEC_LOAD) == 0
1556 && sym->st_size > 0
0a36a439 1557 && !newfunc)
45d6a902
AM
1558 newdyncommon = TRUE;
1559 else
1560 newdyncommon = FALSE;
1561
1562 if (olddyn
1563 && olddef
1564 && h->root.type == bfd_link_hash_defined
f5385ebf 1565 && h->def_dynamic
45d6a902
AM
1566 && (h->root.u.def.section->flags & SEC_ALLOC) != 0
1567 && (h->root.u.def.section->flags & SEC_LOAD) == 0
1568 && h->size > 0
0a36a439 1569 && !oldfunc)
45d6a902
AM
1570 olddyncommon = TRUE;
1571 else
1572 olddyncommon = FALSE;
1573
a4d8e49b
L
1574 /* We now know everything about the old and new symbols. We ask the
1575 backend to check if we can merge them. */
5d13b3b3
AM
1576 if (bed->merge_symbol != NULL)
1577 {
1578 if (!bed->merge_symbol (h, sym, psec, newdef, olddef, oldbfd, oldsec))
1579 return FALSE;
1580 sec = *psec;
1581 }
a4d8e49b 1582
a83ef4d1
L
1583 /* There are multiple definitions of a normal symbol. Skip the
1584 default symbol as well as definition from an IR object. */
93f4de39 1585 if (olddef && !olddyn && !oldweak && newdef && !newdyn && !newweak
a83ef4d1
L
1586 && !default_sym && h->def_regular
1587 && !(oldbfd != NULL
1588 && (oldbfd->flags & BFD_PLUGIN) != 0
1589 && (abfd->flags & BFD_PLUGIN) == 0))
93f4de39
RL
1590 {
1591 /* Handle a multiple definition. */
1592 (*info->callbacks->multiple_definition) (info, &h->root,
1593 abfd, sec, *pvalue);
1594 *skip = TRUE;
1595 return TRUE;
1596 }
1597
45d6a902
AM
1598 /* If both the old and the new symbols look like common symbols in a
1599 dynamic object, set the size of the symbol to the larger of the
1600 two. */
1601
1602 if (olddyncommon
1603 && newdyncommon
1604 && sym->st_size != h->size)
1605 {
1606 /* Since we think we have two common symbols, issue a multiple
1607 common warning if desired. Note that we only warn if the
1608 size is different. If the size is the same, we simply let
1609 the old symbol override the new one as normally happens with
1610 symbols defined in dynamic objects. */
1611
1a72702b
AM
1612 (*info->callbacks->multiple_common) (info, &h->root, abfd,
1613 bfd_link_hash_common, sym->st_size);
45d6a902
AM
1614 if (sym->st_size > h->size)
1615 h->size = sym->st_size;
252b5132 1616
45d6a902 1617 *size_change_ok = TRUE;
252b5132
RH
1618 }
1619
45d6a902
AM
1620 /* If we are looking at a dynamic object, and we have found a
1621 definition, we need to see if the symbol was already defined by
1622 some other object. If so, we want to use the existing
1623 definition, and we do not want to report a multiple symbol
1624 definition error; we do this by clobbering *PSEC to be
1625 bfd_und_section_ptr.
1626
1627 We treat a common symbol as a definition if the symbol in the
1628 shared library is a function, since common symbols always
1629 represent variables; this can cause confusion in principle, but
1630 any such confusion would seem to indicate an erroneous program or
1631 shared library. We also permit a common symbol in a regular
8170f769 1632 object to override a weak symbol in a shared object. */
45d6a902
AM
1633
1634 if (newdyn
1635 && newdef
77cfaee6 1636 && (olddef
45d6a902 1637 || (h->root.type == bfd_link_hash_common
8170f769 1638 && (newweak || newfunc))))
45d6a902
AM
1639 {
1640 *override = TRUE;
1641 newdef = FALSE;
1642 newdyncommon = FALSE;
252b5132 1643
45d6a902
AM
1644 *psec = sec = bfd_und_section_ptr;
1645 *size_change_ok = TRUE;
252b5132 1646
45d6a902
AM
1647 /* If we get here when the old symbol is a common symbol, then
1648 we are explicitly letting it override a weak symbol or
1649 function in a dynamic object, and we don't want to warn about
1650 a type change. If the old symbol is a defined symbol, a type
1651 change warning may still be appropriate. */
252b5132 1652
45d6a902
AM
1653 if (h->root.type == bfd_link_hash_common)
1654 *type_change_ok = TRUE;
1655 }
1656
1657 /* Handle the special case of an old common symbol merging with a
1658 new symbol which looks like a common symbol in a shared object.
1659 We change *PSEC and *PVALUE to make the new symbol look like a
91134c82
L
1660 common symbol, and let _bfd_generic_link_add_one_symbol do the
1661 right thing. */
45d6a902
AM
1662
1663 if (newdyncommon
1664 && h->root.type == bfd_link_hash_common)
1665 {
1666 *override = TRUE;
1667 newdef = FALSE;
1668 newdyncommon = FALSE;
1669 *pvalue = sym->st_size;
a4d8e49b 1670 *psec = sec = bed->common_section (oldsec);
45d6a902
AM
1671 *size_change_ok = TRUE;
1672 }
1673
c5e2cead 1674 /* Skip weak definitions of symbols that are already defined. */
f41d945b 1675 if (newdef && olddef && newweak)
54ac0771 1676 {
35ed3f94 1677 /* Don't skip new non-IR weak syms. */
3a5dbfb2
AM
1678 if (!(oldbfd != NULL
1679 && (oldbfd->flags & BFD_PLUGIN) != 0
35ed3f94 1680 && (abfd->flags & BFD_PLUGIN) == 0))
57fa7b8c
AM
1681 {
1682 newdef = FALSE;
1683 *skip = TRUE;
1684 }
54ac0771
L
1685
1686 /* Merge st_other. If the symbol already has a dynamic index,
1687 but visibility says it should not be visible, turn it into a
1688 local symbol. */
b8417128 1689 elf_merge_st_other (abfd, h, sym, sec, newdef, newdyn);
54ac0771
L
1690 if (h->dynindx != -1)
1691 switch (ELF_ST_VISIBILITY (h->other))
1692 {
1693 case STV_INTERNAL:
1694 case STV_HIDDEN:
1695 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
1696 break;
1697 }
1698 }
c5e2cead 1699
45d6a902
AM
1700 /* If the old symbol is from a dynamic object, and the new symbol is
1701 a definition which is not from a dynamic object, then the new
1702 symbol overrides the old symbol. Symbols from regular files
1703 always take precedence over symbols from dynamic objects, even if
1704 they are defined after the dynamic object in the link.
1705
1706 As above, we again permit a common symbol in a regular object to
1707 override a definition in a shared object if the shared object
0f8a2703 1708 symbol is a function or is weak. */
45d6a902
AM
1709
1710 flip = NULL;
77cfaee6 1711 if (!newdyn
45d6a902
AM
1712 && (newdef
1713 || (bfd_is_com_section (sec)
0a36a439 1714 && (oldweak || oldfunc)))
45d6a902
AM
1715 && olddyn
1716 && olddef
f5385ebf 1717 && h->def_dynamic)
45d6a902
AM
1718 {
1719 /* Change the hash table entry to undefined, and let
1720 _bfd_generic_link_add_one_symbol do the right thing with the
1721 new definition. */
1722
1723 h->root.type = bfd_link_hash_undefined;
1724 h->root.u.undef.abfd = h->root.u.def.section->owner;
1725 *size_change_ok = TRUE;
1726
1727 olddef = FALSE;
1728 olddyncommon = FALSE;
1729
1730 /* We again permit a type change when a common symbol may be
1731 overriding a function. */
1732
1733 if (bfd_is_com_section (sec))
0a36a439
L
1734 {
1735 if (oldfunc)
1736 {
1737 /* If a common symbol overrides a function, make sure
1738 that it isn't defined dynamically nor has type
1739 function. */
1740 h->def_dynamic = 0;
1741 h->type = STT_NOTYPE;
1742 }
1743 *type_change_ok = TRUE;
1744 }
45d6a902 1745
6c9b78e6
AM
1746 if (hi->root.type == bfd_link_hash_indirect)
1747 flip = hi;
45d6a902
AM
1748 else
1749 /* This union may have been set to be non-NULL when this symbol
1750 was seen in a dynamic object. We must force the union to be
1751 NULL, so that it is correct for a regular symbol. */
1752 h->verinfo.vertree = NULL;
1753 }
1754
1755 /* Handle the special case of a new common symbol merging with an
1756 old symbol that looks like it might be a common symbol defined in
1757 a shared object. Note that we have already handled the case in
1758 which a new common symbol should simply override the definition
1759 in the shared library. */
1760
1761 if (! newdyn
1762 && bfd_is_com_section (sec)
1763 && olddyncommon)
1764 {
1765 /* It would be best if we could set the hash table entry to a
1766 common symbol, but we don't know what to use for the section
1767 or the alignment. */
1a72702b
AM
1768 (*info->callbacks->multiple_common) (info, &h->root, abfd,
1769 bfd_link_hash_common, sym->st_size);
45d6a902 1770
4cc11e76 1771 /* If the presumed common symbol in the dynamic object is
45d6a902
AM
1772 larger, pretend that the new symbol has its size. */
1773
1774 if (h->size > *pvalue)
1775 *pvalue = h->size;
1776
af44c138
L
1777 /* We need to remember the alignment required by the symbol
1778 in the dynamic object. */
1779 BFD_ASSERT (pold_alignment);
1780 *pold_alignment = h->root.u.def.section->alignment_power;
45d6a902
AM
1781
1782 olddef = FALSE;
1783 olddyncommon = FALSE;
1784
1785 h->root.type = bfd_link_hash_undefined;
1786 h->root.u.undef.abfd = h->root.u.def.section->owner;
1787
1788 *size_change_ok = TRUE;
1789 *type_change_ok = TRUE;
1790
6c9b78e6
AM
1791 if (hi->root.type == bfd_link_hash_indirect)
1792 flip = hi;
45d6a902
AM
1793 else
1794 h->verinfo.vertree = NULL;
1795 }
1796
1797 if (flip != NULL)
1798 {
1799 /* Handle the case where we had a versioned symbol in a dynamic
1800 library and now find a definition in a normal object. In this
1801 case, we make the versioned symbol point to the normal one. */
45d6a902 1802 flip->root.type = h->root.type;
00cbee0a 1803 flip->root.u.undef.abfd = h->root.u.undef.abfd;
45d6a902
AM
1804 h->root.type = bfd_link_hash_indirect;
1805 h->root.u.i.link = (struct bfd_link_hash_entry *) flip;
fcfa13d2 1806 (*bed->elf_backend_copy_indirect_symbol) (info, flip, h);
f5385ebf 1807 if (h->def_dynamic)
45d6a902 1808 {
f5385ebf
AM
1809 h->def_dynamic = 0;
1810 flip->ref_dynamic = 1;
45d6a902
AM
1811 }
1812 }
1813
45d6a902
AM
1814 return TRUE;
1815}
1816
1817/* This function is called to create an indirect symbol from the
1818 default for the symbol with the default version if needed. The
4f3fedcf 1819 symbol is described by H, NAME, SYM, SEC, and VALUE. We
0f8a2703 1820 set DYNSYM if the new indirect symbol is dynamic. */
45d6a902 1821
28caa186 1822static bfd_boolean
268b6b39
AM
1823_bfd_elf_add_default_symbol (bfd *abfd,
1824 struct bfd_link_info *info,
1825 struct elf_link_hash_entry *h,
1826 const char *name,
1827 Elf_Internal_Sym *sym,
4f3fedcf
AM
1828 asection *sec,
1829 bfd_vma value,
1830 bfd **poldbfd,
e3c9d234 1831 bfd_boolean *dynsym)
45d6a902
AM
1832{
1833 bfd_boolean type_change_ok;
1834 bfd_boolean size_change_ok;
1835 bfd_boolean skip;
1836 char *shortname;
1837 struct elf_link_hash_entry *hi;
1838 struct bfd_link_hash_entry *bh;
9c5bfbb7 1839 const struct elf_backend_data *bed;
45d6a902
AM
1840 bfd_boolean collect;
1841 bfd_boolean dynamic;
e3c9d234 1842 bfd_boolean override;
45d6a902
AM
1843 char *p;
1844 size_t len, shortlen;
ffd65175 1845 asection *tmp_sec;
6e33951e 1846 bfd_boolean matched;
45d6a902 1847
422f1182
L
1848 if (h->versioned == unversioned || h->versioned == versioned_hidden)
1849 return TRUE;
1850
45d6a902
AM
1851 /* If this symbol has a version, and it is the default version, we
1852 create an indirect symbol from the default name to the fully
1853 decorated name. This will cause external references which do not
1854 specify a version to be bound to this version of the symbol. */
1855 p = strchr (name, ELF_VER_CHR);
422f1182
L
1856 if (h->versioned == unknown)
1857 {
1858 if (p == NULL)
1859 {
1860 h->versioned = unversioned;
1861 return TRUE;
1862 }
1863 else
1864 {
1865 if (p[1] != ELF_VER_CHR)
1866 {
1867 h->versioned = versioned_hidden;
1868 return TRUE;
1869 }
1870 else
1871 h->versioned = versioned;
1872 }
1873 }
4373f8af
L
1874 else
1875 {
1876 /* PR ld/19073: We may see an unversioned definition after the
1877 default version. */
1878 if (p == NULL)
1879 return TRUE;
1880 }
45d6a902 1881
45d6a902
AM
1882 bed = get_elf_backend_data (abfd);
1883 collect = bed->collect;
1884 dynamic = (abfd->flags & DYNAMIC) != 0;
1885
1886 shortlen = p - name;
a50b1753 1887 shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1);
45d6a902
AM
1888 if (shortname == NULL)
1889 return FALSE;
1890 memcpy (shortname, name, shortlen);
1891 shortname[shortlen] = '\0';
1892
1893 /* We are going to create a new symbol. Merge it with any existing
1894 symbol with this name. For the purposes of the merge, act as
1895 though we were defining the symbol we just defined, although we
1896 actually going to define an indirect symbol. */
1897 type_change_ok = FALSE;
1898 size_change_ok = FALSE;
6e33951e 1899 matched = TRUE;
ffd65175
AM
1900 tmp_sec = sec;
1901 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
4f3fedcf 1902 &hi, poldbfd, NULL, NULL, &skip, &override,
6e33951e 1903 &type_change_ok, &size_change_ok, &matched))
45d6a902
AM
1904 return FALSE;
1905
1906 if (skip)
1907 goto nondefault;
1908
5b677558
AM
1909 if (hi->def_regular)
1910 {
1911 /* If the undecorated symbol will have a version added by a
1912 script different to H, then don't indirect to/from the
1913 undecorated symbol. This isn't ideal because we may not yet
1914 have seen symbol versions, if given by a script on the
1915 command line rather than via --version-script. */
1916 if (hi->verinfo.vertree == NULL && info->version_info != NULL)
1917 {
1918 bfd_boolean hide;
1919
1920 hi->verinfo.vertree
1921 = bfd_find_version_for_sym (info->version_info,
1922 hi->root.root.string, &hide);
1923 if (hi->verinfo.vertree != NULL && hide)
1924 {
1925 (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
1926 goto nondefault;
1927 }
1928 }
1929 if (hi->verinfo.vertree != NULL
1930 && strcmp (p + 1 + (p[1] == '@'), hi->verinfo.vertree->name) != 0)
1931 goto nondefault;
1932 }
1933
45d6a902
AM
1934 if (! override)
1935 {
c6e8a9a8 1936 /* Add the default symbol if not performing a relocatable link. */
0e1862bb 1937 if (! bfd_link_relocatable (info))
c6e8a9a8
L
1938 {
1939 bh = &hi->root;
fbcc8baf 1940 if (bh->type == bfd_link_hash_defined
6cc71b82 1941 && bh->u.def.section->owner != NULL
fbcc8baf
L
1942 && (bh->u.def.section->owner->flags & BFD_PLUGIN) != 0)
1943 {
1944 /* Mark the previous definition from IR object as
1945 undefined so that the generic linker will override
1946 it. */
1947 bh->type = bfd_link_hash_undefined;
1948 bh->u.undef.abfd = bh->u.def.section->owner;
1949 }
c6e8a9a8
L
1950 if (! (_bfd_generic_link_add_one_symbol
1951 (info, abfd, shortname, BSF_INDIRECT,
1952 bfd_ind_section_ptr,
1953 0, name, FALSE, collect, &bh)))
1954 return FALSE;
1955 hi = (struct elf_link_hash_entry *) bh;
1956 }
45d6a902
AM
1957 }
1958 else
1959 {
1960 /* In this case the symbol named SHORTNAME is overriding the
1961 indirect symbol we want to add. We were planning on making
1962 SHORTNAME an indirect symbol referring to NAME. SHORTNAME
1963 is the name without a version. NAME is the fully versioned
1964 name, and it is the default version.
1965
1966 Overriding means that we already saw a definition for the
1967 symbol SHORTNAME in a regular object, and it is overriding
1968 the symbol defined in the dynamic object.
1969
1970 When this happens, we actually want to change NAME, the
1971 symbol we just added, to refer to SHORTNAME. This will cause
1972 references to NAME in the shared object to become references
1973 to SHORTNAME in the regular object. This is what we expect
1974 when we override a function in a shared object: that the
1975 references in the shared object will be mapped to the
1976 definition in the regular object. */
1977
1978 while (hi->root.type == bfd_link_hash_indirect
1979 || hi->root.type == bfd_link_hash_warning)
1980 hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
1981
1982 h->root.type = bfd_link_hash_indirect;
1983 h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
f5385ebf 1984 if (h->def_dynamic)
45d6a902 1985 {
f5385ebf
AM
1986 h->def_dynamic = 0;
1987 hi->ref_dynamic = 1;
1988 if (hi->ref_regular
1989 || hi->def_regular)
45d6a902 1990 {
c152c796 1991 if (! bfd_elf_link_record_dynamic_symbol (info, hi))
45d6a902
AM
1992 return FALSE;
1993 }
1994 }
1995
1996 /* Now set HI to H, so that the following code will set the
1997 other fields correctly. */
1998 hi = h;
1999 }
2000
fab4a87f
L
2001 /* Check if HI is a warning symbol. */
2002 if (hi->root.type == bfd_link_hash_warning)
2003 hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
2004
45d6a902
AM
2005 /* If there is a duplicate definition somewhere, then HI may not
2006 point to an indirect symbol. We will have reported an error to
2007 the user in that case. */
2008
2009 if (hi->root.type == bfd_link_hash_indirect)
2010 {
2011 struct elf_link_hash_entry *ht;
2012
45d6a902 2013 ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
fcfa13d2 2014 (*bed->elf_backend_copy_indirect_symbol) (info, ht, hi);
45d6a902 2015
68c88cd4
AM
2016 /* A reference to the SHORTNAME symbol from a dynamic library
2017 will be satisfied by the versioned symbol at runtime. In
2018 effect, we have a reference to the versioned symbol. */
2019 ht->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
2020 hi->dynamic_def |= ht->dynamic_def;
2021
45d6a902
AM
2022 /* See if the new flags lead us to realize that the symbol must
2023 be dynamic. */
2024 if (! *dynsym)
2025 {
2026 if (! dynamic)
2027 {
0e1862bb 2028 if (! bfd_link_executable (info)
90c984fc 2029 || hi->def_dynamic
f5385ebf 2030 || hi->ref_dynamic)
45d6a902
AM
2031 *dynsym = TRUE;
2032 }
2033 else
2034 {
f5385ebf 2035 if (hi->ref_regular)
45d6a902
AM
2036 *dynsym = TRUE;
2037 }
2038 }
2039 }
2040
2041 /* We also need to define an indirection from the nondefault version
2042 of the symbol. */
2043
2044nondefault:
2045 len = strlen (name);
a50b1753 2046 shortname = (char *) bfd_hash_allocate (&info->hash->table, len);
45d6a902
AM
2047 if (shortname == NULL)
2048 return FALSE;
2049 memcpy (shortname, name, shortlen);
2050 memcpy (shortname + shortlen, p + 1, len - shortlen);
2051
2052 /* Once again, merge with any existing symbol. */
2053 type_change_ok = FALSE;
2054 size_change_ok = FALSE;
ffd65175
AM
2055 tmp_sec = sec;
2056 if (!_bfd_elf_merge_symbol (abfd, info, shortname, sym, &tmp_sec, &value,
115c6d5c 2057 &hi, poldbfd, NULL, NULL, &skip, &override,
6e33951e 2058 &type_change_ok, &size_change_ok, &matched))
45d6a902
AM
2059 return FALSE;
2060
2061 if (skip)
2062 return TRUE;
2063
2064 if (override)
2065 {
2066 /* Here SHORTNAME is a versioned name, so we don't expect to see
2067 the type of override we do in the case above unless it is
4cc11e76 2068 overridden by a versioned definition. */
45d6a902
AM
2069 if (hi->root.type != bfd_link_hash_defined
2070 && hi->root.type != bfd_link_hash_defweak)
4eca0228 2071 _bfd_error_handler
695344c0 2072 /* xgettext:c-format */
871b3ab2 2073 (_("%pB: unexpected redefinition of indirect versioned symbol `%s'"),
d003868e 2074 abfd, shortname);
45d6a902
AM
2075 }
2076 else
2077 {
2078 bh = &hi->root;
2079 if (! (_bfd_generic_link_add_one_symbol
2080 (info, abfd, shortname, BSF_INDIRECT,
268b6b39 2081 bfd_ind_section_ptr, 0, name, FALSE, collect, &bh)))
45d6a902
AM
2082 return FALSE;
2083 hi = (struct elf_link_hash_entry *) bh;
2084
2085 /* If there is a duplicate definition somewhere, then HI may not
2086 point to an indirect symbol. We will have reported an error
2087 to the user in that case. */
2088
2089 if (hi->root.type == bfd_link_hash_indirect)
2090 {
fcfa13d2 2091 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
68c88cd4
AM
2092 h->ref_dynamic_nonweak |= hi->ref_dynamic_nonweak;
2093 hi->dynamic_def |= h->dynamic_def;
45d6a902
AM
2094
2095 /* See if the new flags lead us to realize that the symbol
2096 must be dynamic. */
2097 if (! *dynsym)
2098 {
2099 if (! dynamic)
2100 {
0e1862bb 2101 if (! bfd_link_executable (info)
f5385ebf 2102 || hi->ref_dynamic)
45d6a902
AM
2103 *dynsym = TRUE;
2104 }
2105 else
2106 {
f5385ebf 2107 if (hi->ref_regular)
45d6a902
AM
2108 *dynsym = TRUE;
2109 }
2110 }
2111 }
2112 }
2113
2114 return TRUE;
2115}
2116\f
2117/* This routine is used to export all defined symbols into the dynamic
2118 symbol table. It is called via elf_link_hash_traverse. */
2119
28caa186 2120static bfd_boolean
268b6b39 2121_bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data)
45d6a902 2122{
a50b1753 2123 struct elf_info_failed *eif = (struct elf_info_failed *) data;
45d6a902
AM
2124
2125 /* Ignore indirect symbols. These are added by the versioning code. */
2126 if (h->root.type == bfd_link_hash_indirect)
2127 return TRUE;
2128
7686d77d
AM
2129 /* Ignore this if we won't export it. */
2130 if (!eif->info->export_dynamic && !h->dynamic)
2131 return TRUE;
45d6a902
AM
2132
2133 if (h->dynindx == -1
fd91d419
L
2134 && (h->def_regular || h->ref_regular)
2135 && ! bfd_hide_sym_by_version (eif->info->version_info,
2136 h->root.root.string))
45d6a902 2137 {
fd91d419 2138 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
45d6a902 2139 {
fd91d419
L
2140 eif->failed = TRUE;
2141 return FALSE;
45d6a902
AM
2142 }
2143 }
2144
2145 return TRUE;
2146}
2147\f
2148/* Look through the symbols which are defined in other shared
2149 libraries and referenced here. Update the list of version
2150 dependencies. This will be put into the .gnu.version_r section.
2151 This function is called via elf_link_hash_traverse. */
2152
28caa186 2153static bfd_boolean
268b6b39
AM
2154_bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h,
2155 void *data)
45d6a902 2156{
a50b1753 2157 struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
45d6a902
AM
2158 Elf_Internal_Verneed *t;
2159 Elf_Internal_Vernaux *a;
2160 bfd_size_type amt;
2161
45d6a902
AM
2162 /* We only care about symbols defined in shared objects with version
2163 information. */
f5385ebf
AM
2164 if (!h->def_dynamic
2165 || h->def_regular
45d6a902 2166 || h->dynindx == -1
7b20f099
AM
2167 || h->verinfo.verdef == NULL
2168 || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
2169 & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
45d6a902
AM
2170 return TRUE;
2171
2172 /* See if we already know about this version. */
28caa186
AM
2173 for (t = elf_tdata (rinfo->info->output_bfd)->verref;
2174 t != NULL;
2175 t = t->vn_nextref)
45d6a902
AM
2176 {
2177 if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
2178 continue;
2179
2180 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2181 if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
2182 return TRUE;
2183
2184 break;
2185 }
2186
2187 /* This is a new version. Add it to tree we are building. */
2188
2189 if (t == NULL)
2190 {
2191 amt = sizeof *t;
a50b1753 2192 t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt);
45d6a902
AM
2193 if (t == NULL)
2194 {
2195 rinfo->failed = TRUE;
2196 return FALSE;
2197 }
2198
2199 t->vn_bfd = h->verinfo.verdef->vd_bfd;
28caa186
AM
2200 t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref;
2201 elf_tdata (rinfo->info->output_bfd)->verref = t;
45d6a902
AM
2202 }
2203
2204 amt = sizeof *a;
a50b1753 2205 a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt);
14b1c01e
AM
2206 if (a == NULL)
2207 {
2208 rinfo->failed = TRUE;
2209 return FALSE;
2210 }
45d6a902
AM
2211
2212 /* Note that we are copying a string pointer here, and testing it
2213 above. If bfd_elf_string_from_elf_section is ever changed to
2214 discard the string data when low in memory, this will have to be
2215 fixed. */
2216 a->vna_nodename = h->verinfo.verdef->vd_nodename;
2217
2218 a->vna_flags = h->verinfo.verdef->vd_flags;
2219 a->vna_nextptr = t->vn_auxptr;
2220
2221 h->verinfo.verdef->vd_exp_refno = rinfo->vers;
2222 ++rinfo->vers;
2223
2224 a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;
2225
2226 t->vn_auxptr = a;
2227
2228 return TRUE;
2229}
2230
099bb8fb
L
2231/* Return TRUE and set *HIDE to TRUE if the versioned symbol is
2232 hidden. Set *T_P to NULL if there is no match. */
2233
2234static bfd_boolean
2235_bfd_elf_link_hide_versioned_symbol (struct bfd_link_info *info,
2236 struct elf_link_hash_entry *h,
2237 const char *version_p,
2238 struct bfd_elf_version_tree **t_p,
2239 bfd_boolean *hide)
2240{
2241 struct bfd_elf_version_tree *t;
2242
2243 /* Look for the version. If we find it, it is no longer weak. */
2244 for (t = info->version_info; t != NULL; t = t->next)
2245 {
2246 if (strcmp (t->name, version_p) == 0)
2247 {
2248 size_t len;
2249 char *alc;
2250 struct bfd_elf_version_expr *d;
2251
2252 len = version_p - h->root.root.string;
2253 alc = (char *) bfd_malloc (len);
2254 if (alc == NULL)
2255 return FALSE;
2256 memcpy (alc, h->root.root.string, len - 1);
2257 alc[len - 1] = '\0';
2258 if (alc[len - 2] == ELF_VER_CHR)
2259 alc[len - 2] = '\0';
2260
2261 h->verinfo.vertree = t;
2262 t->used = TRUE;
2263 d = NULL;
2264
2265 if (t->globals.list != NULL)
2266 d = (*t->match) (&t->globals, NULL, alc);
2267
2268 /* See if there is anything to force this symbol to
2269 local scope. */
2270 if (d == NULL && t->locals.list != NULL)
2271 {
2272 d = (*t->match) (&t->locals, NULL, alc);
2273 if (d != NULL
2274 && h->dynindx != -1
2275 && ! info->export_dynamic)
2276 *hide = TRUE;
2277 }
2278
2279 free (alc);
2280 break;
2281 }
2282 }
2283
2284 *t_p = t;
2285
2286 return TRUE;
2287}
2288
2289/* Return TRUE if the symbol H is hidden by version script. */
2290
2291bfd_boolean
2292_bfd_elf_link_hide_sym_by_version (struct bfd_link_info *info,
2293 struct elf_link_hash_entry *h)
2294{
2295 const char *p;
2296 bfd_boolean hide = FALSE;
2297 const struct elf_backend_data *bed
2298 = get_elf_backend_data (info->output_bfd);
2299
2300 /* Version script only hides symbols defined in regular objects. */
2301 if (!h->def_regular && !ELF_COMMON_DEF_P (h))
2302 return TRUE;
2303
2304 p = strchr (h->root.root.string, ELF_VER_CHR);
2305 if (p != NULL && h->verinfo.vertree == NULL)
2306 {
2307 struct bfd_elf_version_tree *t;
2308
2309 ++p;
2310 if (*p == ELF_VER_CHR)
2311 ++p;
2312
2313 if (*p != '\0'
2314 && _bfd_elf_link_hide_versioned_symbol (info, h, p, &t, &hide)
2315 && hide)
2316 {
2317 if (hide)
2318 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2319 return TRUE;
2320 }
2321 }
2322
2323 /* If we don't have a version for this symbol, see if we can find
2324 something. */
2325 if (h->verinfo.vertree == NULL && info->version_info != NULL)
2326 {
2327 h->verinfo.vertree
2328 = bfd_find_version_for_sym (info->version_info,
2329 h->root.root.string, &hide);
2330 if (h->verinfo.vertree != NULL && hide)
2331 {
2332 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2333 return TRUE;
2334 }
2335 }
2336
2337 return FALSE;
2338}
2339
45d6a902
AM
2340/* Figure out appropriate versions for all the symbols. We may not
2341 have the version number script until we have read all of the input
2342 files, so until that point we don't know which symbols should be
2343 local. This function is called via elf_link_hash_traverse. */
2344
28caa186 2345static bfd_boolean
268b6b39 2346_bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
45d6a902 2347{
28caa186 2348 struct elf_info_failed *sinfo;
45d6a902 2349 struct bfd_link_info *info;
9c5bfbb7 2350 const struct elf_backend_data *bed;
45d6a902
AM
2351 struct elf_info_failed eif;
2352 char *p;
099bb8fb 2353 bfd_boolean hide;
45d6a902 2354
a50b1753 2355 sinfo = (struct elf_info_failed *) data;
45d6a902
AM
2356 info = sinfo->info;
2357
45d6a902
AM
2358 /* Fix the symbol flags. */
2359 eif.failed = FALSE;
2360 eif.info = info;
2361 if (! _bfd_elf_fix_symbol_flags (h, &eif))
2362 {
2363 if (eif.failed)
2364 sinfo->failed = TRUE;
2365 return FALSE;
2366 }
2367
0a640d71
L
2368 bed = get_elf_backend_data (info->output_bfd);
2369
45d6a902
AM
2370 /* We only need version numbers for symbols defined in regular
2371 objects. */
f5385ebf 2372 if (!h->def_regular)
0a640d71
L
2373 {
2374 /* Hide symbols defined in discarded input sections. */
2375 if ((h->root.type == bfd_link_hash_defined
2376 || h->root.type == bfd_link_hash_defweak)
2377 && discarded_section (h->root.u.def.section))
2378 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2379 return TRUE;
2380 }
45d6a902 2381
099bb8fb 2382 hide = FALSE;
45d6a902
AM
2383 p = strchr (h->root.root.string, ELF_VER_CHR);
2384 if (p != NULL && h->verinfo.vertree == NULL)
2385 {
2386 struct bfd_elf_version_tree *t;
45d6a902 2387
45d6a902
AM
2388 ++p;
2389 if (*p == ELF_VER_CHR)
6e33951e 2390 ++p;
45d6a902
AM
2391
2392 /* If there is no version string, we can just return out. */
2393 if (*p == '\0')
6e33951e 2394 return TRUE;
45d6a902 2395
099bb8fb 2396 if (!_bfd_elf_link_hide_versioned_symbol (info, h, p, &t, &hide))
45d6a902 2397 {
099bb8fb
L
2398 sinfo->failed = TRUE;
2399 return FALSE;
45d6a902
AM
2400 }
2401
099bb8fb
L
2402 if (hide)
2403 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
2404
45d6a902
AM
2405 /* If we are building an application, we need to create a
2406 version node for this version. */
0e1862bb 2407 if (t == NULL && bfd_link_executable (info))
45d6a902
AM
2408 {
2409 struct bfd_elf_version_tree **pp;
2410 int version_index;
2411
2412 /* If we aren't going to export this symbol, we don't need
2413 to worry about it. */
2414 if (h->dynindx == -1)
2415 return TRUE;
2416
ef53be89
AM
2417 t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd,
2418 sizeof *t);
45d6a902
AM
2419 if (t == NULL)
2420 {
2421 sinfo->failed = TRUE;
2422 return FALSE;
2423 }
2424
45d6a902 2425 t->name = p;
45d6a902
AM
2426 t->name_indx = (unsigned int) -1;
2427 t->used = TRUE;
2428
2429 version_index = 1;
2430 /* Don't count anonymous version tag. */
fd91d419
L
2431 if (sinfo->info->version_info != NULL
2432 && sinfo->info->version_info->vernum == 0)
45d6a902 2433 version_index = 0;
fd91d419
L
2434 for (pp = &sinfo->info->version_info;
2435 *pp != NULL;
2436 pp = &(*pp)->next)
45d6a902
AM
2437 ++version_index;
2438 t->vernum = version_index;
2439
2440 *pp = t;
2441
2442 h->verinfo.vertree = t;
2443 }
2444 else if (t == NULL)
2445 {
2446 /* We could not find the version for a symbol when
2447 generating a shared archive. Return an error. */
4eca0228 2448 _bfd_error_handler
695344c0 2449 /* xgettext:c-format */
871b3ab2 2450 (_("%pB: version node not found for symbol %s"),
28caa186 2451 info->output_bfd, h->root.root.string);
45d6a902
AM
2452 bfd_set_error (bfd_error_bad_value);
2453 sinfo->failed = TRUE;
2454 return FALSE;
2455 }
45d6a902
AM
2456 }
2457
2458 /* If we don't have a version for this symbol, see if we can find
2459 something. */
099bb8fb
L
2460 if (!hide
2461 && h->verinfo.vertree == NULL
2462 && sinfo->info->version_info != NULL)
45d6a902 2463 {
fd91d419
L
2464 h->verinfo.vertree
2465 = bfd_find_version_for_sym (sinfo->info->version_info,
2466 h->root.root.string, &hide);
1e8fa21e
AM
2467 if (h->verinfo.vertree != NULL && hide)
2468 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
45d6a902
AM
2469 }
2470
2471 return TRUE;
2472}
2473\f
45d6a902
AM
2474/* Read and swap the relocs from the section indicated by SHDR. This
2475 may be either a REL or a RELA section. The relocations are
2476 translated into RELA relocations and stored in INTERNAL_RELOCS,
2477 which should have already been allocated to contain enough space.
2478 The EXTERNAL_RELOCS are a buffer where the external form of the
2479 relocations should be stored.
2480
2481 Returns FALSE if something goes wrong. */
2482
2483static bfd_boolean
268b6b39 2484elf_link_read_relocs_from_section (bfd *abfd,
243ef1e0 2485 asection *sec,
268b6b39
AM
2486 Elf_Internal_Shdr *shdr,
2487 void *external_relocs,
2488 Elf_Internal_Rela *internal_relocs)
45d6a902 2489{
9c5bfbb7 2490 const struct elf_backend_data *bed;
268b6b39 2491 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
45d6a902
AM
2492 const bfd_byte *erela;
2493 const bfd_byte *erelaend;
2494 Elf_Internal_Rela *irela;
243ef1e0
L
2495 Elf_Internal_Shdr *symtab_hdr;
2496 size_t nsyms;
45d6a902 2497
45d6a902
AM
2498 /* Position ourselves at the start of the section. */
2499 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0)
2500 return FALSE;
2501
2502 /* Read the relocations. */
2503 if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
2504 return FALSE;
2505
243ef1e0 2506 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
ce98a316 2507 nsyms = NUM_SHDR_ENTRIES (symtab_hdr);
243ef1e0 2508
45d6a902
AM
2509 bed = get_elf_backend_data (abfd);
2510
2511 /* Convert the external relocations to the internal format. */
2512 if (shdr->sh_entsize == bed->s->sizeof_rel)
2513 swap_in = bed->s->swap_reloc_in;
2514 else if (shdr->sh_entsize == bed->s->sizeof_rela)
2515 swap_in = bed->s->swap_reloca_in;
2516 else
2517 {
2518 bfd_set_error (bfd_error_wrong_format);
2519 return FALSE;
2520 }
2521
a50b1753 2522 erela = (const bfd_byte *) external_relocs;
f55b1e32
AM
2523 /* Setting erelaend like this and comparing with <= handles case of
2524 a fuzzed object with sh_size not a multiple of sh_entsize. */
2525 erelaend = erela + shdr->sh_size - shdr->sh_entsize;
45d6a902 2526 irela = internal_relocs;
f55b1e32 2527 while (erela <= erelaend)
45d6a902 2528 {
243ef1e0
L
2529 bfd_vma r_symndx;
2530
45d6a902 2531 (*swap_in) (abfd, erela, irela);
243ef1e0
L
2532 r_symndx = ELF32_R_SYM (irela->r_info);
2533 if (bed->s->arch_size == 64)
2534 r_symndx >>= 24;
ce98a316
NC
2535 if (nsyms > 0)
2536 {
2537 if ((size_t) r_symndx >= nsyms)
2538 {
4eca0228 2539 _bfd_error_handler
695344c0 2540 /* xgettext:c-format */
2dcf00ce
AM
2541 (_("%pB: bad reloc symbol index (%#" PRIx64 " >= %#lx)"
2542 " for offset %#" PRIx64 " in section `%pA'"),
2543 abfd, (uint64_t) r_symndx, (unsigned long) nsyms,
2544 (uint64_t) irela->r_offset, sec);
ce98a316
NC
2545 bfd_set_error (bfd_error_bad_value);
2546 return FALSE;
2547 }
2548 }
cf35638d 2549 else if (r_symndx != STN_UNDEF)
243ef1e0 2550 {
4eca0228 2551 _bfd_error_handler
695344c0 2552 /* xgettext:c-format */
2dcf00ce
AM
2553 (_("%pB: non-zero symbol index (%#" PRIx64 ")"
2554 " for offset %#" PRIx64 " in section `%pA'"
ce98a316 2555 " when the object file has no symbol table"),
2dcf00ce
AM
2556 abfd, (uint64_t) r_symndx,
2557 (uint64_t) irela->r_offset, sec);
243ef1e0
L
2558 bfd_set_error (bfd_error_bad_value);
2559 return FALSE;
2560 }
45d6a902
AM
2561 irela += bed->s->int_rels_per_ext_rel;
2562 erela += shdr->sh_entsize;
2563 }
2564
2565 return TRUE;
2566}
2567
2568/* Read and swap the relocs for a section O. They may have been
2569 cached. If the EXTERNAL_RELOCS and INTERNAL_RELOCS arguments are
2570 not NULL, they are used as buffers to read into. They are known to
2571 be large enough. If the INTERNAL_RELOCS relocs argument is NULL,
2572 the return value is allocated using either malloc or bfd_alloc,
2573 according to the KEEP_MEMORY argument. If O has two relocation
2574 sections (both REL and RELA relocations), then the REL_HDR
2575 relocations will appear first in INTERNAL_RELOCS, followed by the
d4730f92 2576 RELA_HDR relocations. */
45d6a902
AM
2577
2578Elf_Internal_Rela *
268b6b39
AM
2579_bfd_elf_link_read_relocs (bfd *abfd,
2580 asection *o,
2581 void *external_relocs,
2582 Elf_Internal_Rela *internal_relocs,
2583 bfd_boolean keep_memory)
45d6a902 2584{
268b6b39 2585 void *alloc1 = NULL;
45d6a902 2586 Elf_Internal_Rela *alloc2 = NULL;
9c5bfbb7 2587 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
d4730f92
BS
2588 struct bfd_elf_section_data *esdo = elf_section_data (o);
2589 Elf_Internal_Rela *internal_rela_relocs;
45d6a902 2590
d4730f92
BS
2591 if (esdo->relocs != NULL)
2592 return esdo->relocs;
45d6a902
AM
2593
2594 if (o->reloc_count == 0)
2595 return NULL;
2596
45d6a902
AM
2597 if (internal_relocs == NULL)
2598 {
2599 bfd_size_type size;
2600
056bafd4 2601 size = (bfd_size_type) o->reloc_count * sizeof (Elf_Internal_Rela);
45d6a902 2602 if (keep_memory)
a50b1753 2603 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
45d6a902 2604 else
a50b1753 2605 internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
45d6a902
AM
2606 if (internal_relocs == NULL)
2607 goto error_return;
2608 }
2609
2610 if (external_relocs == NULL)
2611 {
d4730f92
BS
2612 bfd_size_type size = 0;
2613
2614 if (esdo->rel.hdr)
2615 size += esdo->rel.hdr->sh_size;
2616 if (esdo->rela.hdr)
2617 size += esdo->rela.hdr->sh_size;
45d6a902 2618
268b6b39 2619 alloc1 = bfd_malloc (size);
45d6a902
AM
2620 if (alloc1 == NULL)
2621 goto error_return;
2622 external_relocs = alloc1;
2623 }
2624
d4730f92
BS
2625 internal_rela_relocs = internal_relocs;
2626 if (esdo->rel.hdr)
2627 {
2628 if (!elf_link_read_relocs_from_section (abfd, o, esdo->rel.hdr,
2629 external_relocs,
2630 internal_relocs))
2631 goto error_return;
2632 external_relocs = (((bfd_byte *) external_relocs)
2633 + esdo->rel.hdr->sh_size);
2634 internal_rela_relocs += (NUM_SHDR_ENTRIES (esdo->rel.hdr)
2635 * bed->s->int_rels_per_ext_rel);
2636 }
2637
2638 if (esdo->rela.hdr
2639 && (!elf_link_read_relocs_from_section (abfd, o, esdo->rela.hdr,
2640 external_relocs,
2641 internal_rela_relocs)))
45d6a902
AM
2642 goto error_return;
2643
2644 /* Cache the results for next time, if we can. */
2645 if (keep_memory)
d4730f92 2646 esdo->relocs = internal_relocs;
45d6a902
AM
2647
2648 if (alloc1 != NULL)
2649 free (alloc1);
2650
2651 /* Don't free alloc2, since if it was allocated we are passing it
2652 back (under the name of internal_relocs). */
2653
2654 return internal_relocs;
2655
2656 error_return:
2657 if (alloc1 != NULL)
2658 free (alloc1);
2659 if (alloc2 != NULL)
4dd07732
AM
2660 {
2661 if (keep_memory)
2662 bfd_release (abfd, alloc2);
2663 else
2664 free (alloc2);
2665 }
45d6a902
AM
2666 return NULL;
2667}
2668
2669/* Compute the size of, and allocate space for, REL_HDR which is the
2670 section header for a section containing relocations for O. */
2671
28caa186 2672static bfd_boolean
9eaff861
AO
2673_bfd_elf_link_size_reloc_section (bfd *abfd,
2674 struct bfd_elf_section_reloc_data *reldata)
45d6a902 2675{
9eaff861 2676 Elf_Internal_Shdr *rel_hdr = reldata->hdr;
45d6a902
AM
2677
2678 /* That allows us to calculate the size of the section. */
9eaff861 2679 rel_hdr->sh_size = rel_hdr->sh_entsize * reldata->count;
45d6a902
AM
2680
2681 /* The contents field must last into write_object_contents, so we
2682 allocate it with bfd_alloc rather than malloc. Also since we
2683 cannot be sure that the contents will actually be filled in,
2684 we zero the allocated space. */
a50b1753 2685 rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size);
45d6a902
AM
2686 if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0)
2687 return FALSE;
2688
d4730f92 2689 if (reldata->hashes == NULL && reldata->count)
45d6a902
AM
2690 {
2691 struct elf_link_hash_entry **p;
2692
ca4be51c
AM
2693 p = ((struct elf_link_hash_entry **)
2694 bfd_zmalloc (reldata->count * sizeof (*p)));
45d6a902
AM
2695 if (p == NULL)
2696 return FALSE;
2697
d4730f92 2698 reldata->hashes = p;
45d6a902
AM
2699 }
2700
2701 return TRUE;
2702}
2703
2704/* Copy the relocations indicated by the INTERNAL_RELOCS (which
2705 originated from the section given by INPUT_REL_HDR) to the
2706 OUTPUT_BFD. */
2707
2708bfd_boolean
268b6b39
AM
2709_bfd_elf_link_output_relocs (bfd *output_bfd,
2710 asection *input_section,
2711 Elf_Internal_Shdr *input_rel_hdr,
eac338cf
PB
2712 Elf_Internal_Rela *internal_relocs,
2713 struct elf_link_hash_entry **rel_hash
2714 ATTRIBUTE_UNUSED)
45d6a902
AM
2715{
2716 Elf_Internal_Rela *irela;
2717 Elf_Internal_Rela *irelaend;
2718 bfd_byte *erel;
d4730f92 2719 struct bfd_elf_section_reloc_data *output_reldata;
45d6a902 2720 asection *output_section;
9c5bfbb7 2721 const struct elf_backend_data *bed;
268b6b39 2722 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
d4730f92 2723 struct bfd_elf_section_data *esdo;
45d6a902
AM
2724
2725 output_section = input_section->output_section;
45d6a902 2726
d4730f92
BS
2727 bed = get_elf_backend_data (output_bfd);
2728 esdo = elf_section_data (output_section);
2729 if (esdo->rel.hdr && esdo->rel.hdr->sh_entsize == input_rel_hdr->sh_entsize)
45d6a902 2730 {
d4730f92
BS
2731 output_reldata = &esdo->rel;
2732 swap_out = bed->s->swap_reloc_out;
45d6a902 2733 }
d4730f92
BS
2734 else if (esdo->rela.hdr
2735 && esdo->rela.hdr->sh_entsize == input_rel_hdr->sh_entsize)
45d6a902 2736 {
d4730f92
BS
2737 output_reldata = &esdo->rela;
2738 swap_out = bed->s->swap_reloca_out;
45d6a902
AM
2739 }
2740 else
2741 {
4eca0228 2742 _bfd_error_handler
695344c0 2743 /* xgettext:c-format */
871b3ab2 2744 (_("%pB: relocation size mismatch in %pB section %pA"),
d003868e 2745 output_bfd, input_section->owner, input_section);
297d8443 2746 bfd_set_error (bfd_error_wrong_format);
45d6a902
AM
2747 return FALSE;
2748 }
2749
d4730f92
BS
2750 erel = output_reldata->hdr->contents;
2751 erel += output_reldata->count * input_rel_hdr->sh_entsize;
45d6a902
AM
2752 irela = internal_relocs;
2753 irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr)
2754 * bed->s->int_rels_per_ext_rel);
2755 while (irela < irelaend)
2756 {
2757 (*swap_out) (output_bfd, irela, erel);
2758 irela += bed->s->int_rels_per_ext_rel;
2759 erel += input_rel_hdr->sh_entsize;
2760 }
2761
2762 /* Bump the counter, so that we know where to add the next set of
2763 relocations. */
d4730f92 2764 output_reldata->count += NUM_SHDR_ENTRIES (input_rel_hdr);
45d6a902
AM
2765
2766 return TRUE;
2767}
2768\f
508c3946
L
2769/* Make weak undefined symbols in PIE dynamic. */
2770
2771bfd_boolean
2772_bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info,
2773 struct elf_link_hash_entry *h)
2774{
0e1862bb 2775 if (bfd_link_pie (info)
508c3946
L
2776 && h->dynindx == -1
2777 && h->root.type == bfd_link_hash_undefweak)
2778 return bfd_elf_link_record_dynamic_symbol (info, h);
2779
2780 return TRUE;
2781}
2782
45d6a902
AM
2783/* Fix up the flags for a symbol. This handles various cases which
2784 can only be fixed after all the input files are seen. This is
2785 currently called by both adjust_dynamic_symbol and
2786 assign_sym_version, which is unnecessary but perhaps more robust in
2787 the face of future changes. */
2788
28caa186 2789static bfd_boolean
268b6b39
AM
2790_bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
2791 struct elf_info_failed *eif)
45d6a902 2792{
33774f08 2793 const struct elf_backend_data *bed;
508c3946 2794
45d6a902
AM
2795 /* If this symbol was mentioned in a non-ELF file, try to set
2796 DEF_REGULAR and REF_REGULAR correctly. This is the only way to
2797 permit a non-ELF file to correctly refer to a symbol defined in
2798 an ELF dynamic object. */
f5385ebf 2799 if (h->non_elf)
45d6a902
AM
2800 {
2801 while (h->root.type == bfd_link_hash_indirect)
2802 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2803
2804 if (h->root.type != bfd_link_hash_defined
2805 && h->root.type != bfd_link_hash_defweak)
f5385ebf
AM
2806 {
2807 h->ref_regular = 1;
2808 h->ref_regular_nonweak = 1;
2809 }
45d6a902
AM
2810 else
2811 {
2812 if (h->root.u.def.section->owner != NULL
2813 && (bfd_get_flavour (h->root.u.def.section->owner)
2814 == bfd_target_elf_flavour))
f5385ebf
AM
2815 {
2816 h->ref_regular = 1;
2817 h->ref_regular_nonweak = 1;
2818 }
45d6a902 2819 else
f5385ebf 2820 h->def_regular = 1;
45d6a902
AM
2821 }
2822
2823 if (h->dynindx == -1
f5385ebf
AM
2824 && (h->def_dynamic
2825 || h->ref_dynamic))
45d6a902 2826 {
c152c796 2827 if (! bfd_elf_link_record_dynamic_symbol (eif->info, h))
45d6a902
AM
2828 {
2829 eif->failed = TRUE;
2830 return FALSE;
2831 }
2832 }
2833 }
2834 else
2835 {
f5385ebf 2836 /* Unfortunately, NON_ELF is only correct if the symbol
45d6a902
AM
2837 was first seen in a non-ELF file. Fortunately, if the symbol
2838 was first seen in an ELF file, we're probably OK unless the
2839 symbol was defined in a non-ELF file. Catch that case here.
2840 FIXME: We're still in trouble if the symbol was first seen in
2841 a dynamic object, and then later in a non-ELF regular object. */
2842 if ((h->root.type == bfd_link_hash_defined
2843 || h->root.type == bfd_link_hash_defweak)
f5385ebf 2844 && !h->def_regular
45d6a902
AM
2845 && (h->root.u.def.section->owner != NULL
2846 ? (bfd_get_flavour (h->root.u.def.section->owner)
2847 != bfd_target_elf_flavour)
2848 : (bfd_is_abs_section (h->root.u.def.section)
f5385ebf
AM
2849 && !h->def_dynamic)))
2850 h->def_regular = 1;
45d6a902
AM
2851 }
2852
508c3946 2853 /* Backend specific symbol fixup. */
33774f08
AM
2854 bed = get_elf_backend_data (elf_hash_table (eif->info)->dynobj);
2855 if (bed->elf_backend_fixup_symbol
2856 && !(*bed->elf_backend_fixup_symbol) (eif->info, h))
2857 return FALSE;
508c3946 2858
45d6a902
AM
2859 /* If this is a final link, and the symbol was defined as a common
2860 symbol in a regular object file, and there was no definition in
2861 any dynamic object, then the linker will have allocated space for
f5385ebf 2862 the symbol in a common section but the DEF_REGULAR
45d6a902
AM
2863 flag will not have been set. */
2864 if (h->root.type == bfd_link_hash_defined
f5385ebf
AM
2865 && !h->def_regular
2866 && h->ref_regular
2867 && !h->def_dynamic
96f29d96 2868 && (h->root.u.def.section->owner->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
f5385ebf 2869 h->def_regular = 1;
45d6a902 2870
af0bfb9c
AM
2871 /* Symbols defined in discarded sections shouldn't be dynamic. */
2872 if (h->root.type == bfd_link_hash_undefined && h->indx == -3)
2873 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2874
4deb8f71
L
2875 /* If a weak undefined symbol has non-default visibility, we also
2876 hide it from the dynamic linker. */
af0bfb9c
AM
2877 else if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2878 && h->root.type == bfd_link_hash_undefweak)
4deb8f71
L
2879 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2880
2881 /* A hidden versioned symbol in executable should be forced local if
2882 it is is locally defined, not referenced by shared library and not
2883 exported. */
2884 else if (bfd_link_executable (eif->info)
2885 && h->versioned == versioned_hidden
2886 && !eif->info->export_dynamic
2887 && !h->dynamic
2888 && !h->ref_dynamic
2889 && h->def_regular)
2890 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
2891
45d6a902
AM
2892 /* If -Bsymbolic was used (which means to bind references to global
2893 symbols to the definition within the shared object), and this
2894 symbol was defined in a regular object, then it actually doesn't
9c7a29a3
AM
2895 need a PLT entry. Likewise, if the symbol has non-default
2896 visibility. If the symbol has hidden or internal visibility, we
c1be741f 2897 will force it local. */
4deb8f71
L
2898 else if (h->needs_plt
2899 && bfd_link_pic (eif->info)
2900 && is_elf_hash_table (eif->info->hash)
2901 && (SYMBOLIC_BIND (eif->info, h)
2902 || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
2903 && h->def_regular)
45d6a902 2904 {
45d6a902
AM
2905 bfd_boolean force_local;
2906
45d6a902
AM
2907 force_local = (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
2908 || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN);
2909 (*bed->elf_backend_hide_symbol) (eif->info, h, force_local);
2910 }
2911
45d6a902
AM
2912 /* If this is a weak defined symbol in a dynamic object, and we know
2913 the real definition in the dynamic object, copy interesting flags
2914 over to the real definition. */
60d67dc8 2915 if (h->is_weakalias)
45d6a902 2916 {
60d67dc8
AM
2917 struct elf_link_hash_entry *def = weakdef (h);
2918
45d6a902
AM
2919 /* If the real definition is defined by a regular object file,
2920 don't do anything special. See the longer description in
5b9d7a9a
AM
2921 _bfd_elf_adjust_dynamic_symbol, below. If the def is not
2922 bfd_link_hash_defined as it was when put on the alias list
2923 then it must have originally been a versioned symbol (for
2924 which a non-versioned indirect symbol is created) and later
2925 a definition for the non-versioned symbol is found. In that
2926 case the indirection is flipped with the versioned symbol
2927 becoming an indirect pointing at the non-versioned symbol.
2928 Thus, not an alias any more. */
2929 if (def->def_regular
2930 || def->root.type != bfd_link_hash_defined)
60d67dc8
AM
2931 {
2932 h = def;
2933 while ((h = h->u.alias) != def)
2934 h->is_weakalias = 0;
2935 }
45d6a902 2936 else
a26587ba 2937 {
4e6b54a6
AM
2938 while (h->root.type == bfd_link_hash_indirect)
2939 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4e6b54a6
AM
2940 BFD_ASSERT (h->root.type == bfd_link_hash_defined
2941 || h->root.type == bfd_link_hash_defweak);
60d67dc8 2942 BFD_ASSERT (def->def_dynamic);
60d67dc8 2943 (*bed->elf_backend_copy_indirect_symbol) (eif->info, def, h);
a26587ba 2944 }
45d6a902
AM
2945 }
2946
2947 return TRUE;
2948}
2949
2950/* Make the backend pick a good value for a dynamic symbol. This is
2951 called via elf_link_hash_traverse, and also calls itself
2952 recursively. */
2953
28caa186 2954static bfd_boolean
268b6b39 2955_bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data)
45d6a902 2956{
a50b1753 2957 struct elf_info_failed *eif = (struct elf_info_failed *) data;
559192d8 2958 struct elf_link_hash_table *htab;
9c5bfbb7 2959 const struct elf_backend_data *bed;
45d6a902 2960
0eddce27 2961 if (! is_elf_hash_table (eif->info->hash))
45d6a902
AM
2962 return FALSE;
2963
45d6a902
AM
2964 /* Ignore indirect symbols. These are added by the versioning code. */
2965 if (h->root.type == bfd_link_hash_indirect)
2966 return TRUE;
2967
2968 /* Fix the symbol flags. */
2969 if (! _bfd_elf_fix_symbol_flags (h, eif))
2970 return FALSE;
2971
559192d8
AM
2972 htab = elf_hash_table (eif->info);
2973 bed = get_elf_backend_data (htab->dynobj);
2974
954b63d4
AM
2975 if (h->root.type == bfd_link_hash_undefweak)
2976 {
2977 if (eif->info->dynamic_undefined_weak == 0)
559192d8 2978 (*bed->elf_backend_hide_symbol) (eif->info, h, TRUE);
954b63d4
AM
2979 else if (eif->info->dynamic_undefined_weak > 0
2980 && h->ref_regular
2981 && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2982 && !bfd_hide_sym_by_version (eif->info->version_info,
2983 h->root.root.string))
2984 {
2985 if (!bfd_elf_link_record_dynamic_symbol (eif->info, h))
2986 {
2987 eif->failed = TRUE;
2988 return FALSE;
2989 }
2990 }
2991 }
2992
45d6a902
AM
2993 /* If this symbol does not require a PLT entry, and it is not
2994 defined by a dynamic object, or is not referenced by a regular
2995 object, ignore it. We do have to handle a weak defined symbol,
2996 even if no regular object refers to it, if we decided to add it
2997 to the dynamic symbol table. FIXME: Do we normally need to worry
2998 about symbols which are defined by one dynamic object and
2999 referenced by another one? */
f5385ebf 3000 if (!h->needs_plt
91e21fb7 3001 && h->type != STT_GNU_IFUNC
f5385ebf
AM
3002 && (h->def_regular
3003 || !h->def_dynamic
3004 || (!h->ref_regular
60d67dc8 3005 && (!h->is_weakalias || weakdef (h)->dynindx == -1))))
45d6a902 3006 {
a6aa5195 3007 h->plt = elf_hash_table (eif->info)->init_plt_offset;
45d6a902
AM
3008 return TRUE;
3009 }
3010
3011 /* If we've already adjusted this symbol, don't do it again. This
3012 can happen via a recursive call. */
f5385ebf 3013 if (h->dynamic_adjusted)
45d6a902
AM
3014 return TRUE;
3015
3016 /* Don't look at this symbol again. Note that we must set this
3017 after checking the above conditions, because we may look at a
3018 symbol once, decide not to do anything, and then get called
3019 recursively later after REF_REGULAR is set below. */
f5385ebf 3020 h->dynamic_adjusted = 1;
45d6a902
AM
3021
3022 /* If this is a weak definition, and we know a real definition, and
3023 the real symbol is not itself defined by a regular object file,
3024 then get a good value for the real definition. We handle the
3025 real symbol first, for the convenience of the backend routine.
3026
3027 Note that there is a confusing case here. If the real definition
3028 is defined by a regular object file, we don't get the real symbol
3029 from the dynamic object, but we do get the weak symbol. If the
3030 processor backend uses a COPY reloc, then if some routine in the
3031 dynamic object changes the real symbol, we will not see that
3032 change in the corresponding weak symbol. This is the way other
3033 ELF linkers work as well, and seems to be a result of the shared
3034 library model.
3035
3036 I will clarify this issue. Most SVR4 shared libraries define the
3037 variable _timezone and define timezone as a weak synonym. The
3038 tzset call changes _timezone. If you write
3039 extern int timezone;
3040 int _timezone = 5;
3041 int main () { tzset (); printf ("%d %d\n", timezone, _timezone); }
3042 you might expect that, since timezone is a synonym for _timezone,
3043 the same number will print both times. However, if the processor
3044 backend uses a COPY reloc, then actually timezone will be copied
3045 into your process image, and, since you define _timezone
3046 yourself, _timezone will not. Thus timezone and _timezone will
3047 wind up at different memory locations. The tzset call will set
3048 _timezone, leaving timezone unchanged. */
3049
60d67dc8 3050 if (h->is_weakalias)
45d6a902 3051 {
60d67dc8
AM
3052 struct elf_link_hash_entry *def = weakdef (h);
3053
ec24dc88 3054 /* If we get to this point, there is an implicit reference to
60d67dc8
AM
3055 the alias by a regular object file via the weak symbol H. */
3056 def->ref_regular = 1;
45d6a902 3057
ec24dc88 3058 /* Ensure that the backend adjust_dynamic_symbol function sees
60d67dc8
AM
3059 the strong alias before H by recursively calling ourselves. */
3060 if (!_bfd_elf_adjust_dynamic_symbol (def, eif))
45d6a902
AM
3061 return FALSE;
3062 }
3063
3064 /* If a symbol has no type and no size and does not require a PLT
3065 entry, then we are probably about to do the wrong thing here: we
3066 are probably going to create a COPY reloc for an empty object.
3067 This case can arise when a shared object is built with assembly
3068 code, and the assembly code fails to set the symbol type. */
3069 if (h->size == 0
3070 && h->type == STT_NOTYPE
f5385ebf 3071 && !h->needs_plt)
4eca0228 3072 _bfd_error_handler
45d6a902
AM
3073 (_("warning: type and size of dynamic symbol `%s' are not defined"),
3074 h->root.root.string);
3075
45d6a902
AM
3076 if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
3077 {
3078 eif->failed = TRUE;
3079 return FALSE;
3080 }
3081
3082 return TRUE;
3083}
3084
027297b7
L
3085/* Adjust the dynamic symbol, H, for copy in the dynamic bss section,
3086 DYNBSS. */
3087
3088bfd_boolean
6cabe1ea
AM
3089_bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info,
3090 struct elf_link_hash_entry *h,
027297b7
L
3091 asection *dynbss)
3092{
91ac5911 3093 unsigned int power_of_two;
027297b7
L
3094 bfd_vma mask;
3095 asection *sec = h->root.u.def.section;
3096
de194d85 3097 /* The section alignment of the definition is the maximum alignment
91ac5911
L
3098 requirement of symbols defined in the section. Since we don't
3099 know the symbol alignment requirement, we start with the
3100 maximum alignment and check low bits of the symbol address
3101 for the minimum alignment. */
3102 power_of_two = bfd_get_section_alignment (sec->owner, sec);
3103 mask = ((bfd_vma) 1 << power_of_two) - 1;
3104 while ((h->root.u.def.value & mask) != 0)
3105 {
3106 mask >>= 1;
3107 --power_of_two;
3108 }
027297b7 3109
91ac5911
L
3110 if (power_of_two > bfd_get_section_alignment (dynbss->owner,
3111 dynbss))
027297b7
L
3112 {
3113 /* Adjust the section alignment if needed. */
3114 if (! bfd_set_section_alignment (dynbss->owner, dynbss,
91ac5911 3115 power_of_two))
027297b7
L
3116 return FALSE;
3117 }
3118
91ac5911 3119 /* We make sure that the symbol will be aligned properly. */
027297b7
L
3120 dynbss->size = BFD_ALIGN (dynbss->size, mask + 1);
3121
3122 /* Define the symbol as being at this point in DYNBSS. */
3123 h->root.u.def.section = dynbss;
3124 h->root.u.def.value = dynbss->size;
3125
3126 /* Increment the size of DYNBSS to make room for the symbol. */
3127 dynbss->size += h->size;
3128
f7483970
L
3129 /* No error if extern_protected_data is true. */
3130 if (h->protected_def
889c2a67
L
3131 && (!info->extern_protected_data
3132 || (info->extern_protected_data < 0
3133 && !get_elf_backend_data (dynbss->owner)->extern_protected_data)))
d07a1b05 3134 info->callbacks->einfo
c1c8c1ef 3135 (_("%P: copy reloc against protected `%pT' is dangerous\n"),
d07a1b05 3136 h->root.root.string);
6cabe1ea 3137
027297b7
L
3138 return TRUE;
3139}
3140
45d6a902
AM
3141/* Adjust all external symbols pointing into SEC_MERGE sections
3142 to reflect the object merging within the sections. */
3143
28caa186 3144static bfd_boolean
268b6b39 3145_bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
45d6a902
AM
3146{
3147 asection *sec;
3148
45d6a902
AM
3149 if ((h->root.type == bfd_link_hash_defined
3150 || h->root.type == bfd_link_hash_defweak)
3151 && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
dbaa2011 3152 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
45d6a902 3153 {
a50b1753 3154 bfd *output_bfd = (bfd *) data;
45d6a902
AM
3155
3156 h->root.u.def.value =
3157 _bfd_merged_section_offset (output_bfd,
3158 &h->root.u.def.section,
3159 elf_section_data (sec)->sec_info,
753731ee 3160 h->root.u.def.value);
45d6a902
AM
3161 }
3162
3163 return TRUE;
3164}
986a241f
RH
3165
3166/* Returns false if the symbol referred to by H should be considered
3167 to resolve local to the current module, and true if it should be
3168 considered to bind dynamically. */
3169
3170bfd_boolean
268b6b39
AM
3171_bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *h,
3172 struct bfd_link_info *info,
89a2ee5a 3173 bfd_boolean not_local_protected)
986a241f
RH
3174{
3175 bfd_boolean binding_stays_local_p;
fcb93ecf
PB
3176 const struct elf_backend_data *bed;
3177 struct elf_link_hash_table *hash_table;
986a241f
RH
3178
3179 if (h == NULL)
3180 return FALSE;
3181
3182 while (h->root.type == bfd_link_hash_indirect
3183 || h->root.type == bfd_link_hash_warning)
3184 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3185
3186 /* If it was forced local, then clearly it's not dynamic. */
3187 if (h->dynindx == -1)
3188 return FALSE;
f5385ebf 3189 if (h->forced_local)
986a241f
RH
3190 return FALSE;
3191
3192 /* Identify the cases where name binding rules say that a
3193 visible symbol resolves locally. */
0e1862bb
L
3194 binding_stays_local_p = (bfd_link_executable (info)
3195 || SYMBOLIC_BIND (info, h));
986a241f
RH
3196
3197 switch (ELF_ST_VISIBILITY (h->other))
3198 {
3199 case STV_INTERNAL:
3200 case STV_HIDDEN:
3201 return FALSE;
3202
3203 case STV_PROTECTED:
fcb93ecf
PB
3204 hash_table = elf_hash_table (info);
3205 if (!is_elf_hash_table (hash_table))
3206 return FALSE;
3207
3208 bed = get_elf_backend_data (hash_table->dynobj);
3209
986a241f
RH
3210 /* Proper resolution for function pointer equality may require
3211 that these symbols perhaps be resolved dynamically, even though
3212 we should be resolving them to the current module. */
89a2ee5a 3213 if (!not_local_protected || !bed->is_function_type (h->type))
986a241f
RH
3214 binding_stays_local_p = TRUE;
3215 break;
3216
3217 default:
986a241f
RH
3218 break;
3219 }
3220
aa37626c 3221 /* If it isn't defined locally, then clearly it's dynamic. */
89a2ee5a 3222 if (!h->def_regular && !ELF_COMMON_DEF_P (h))
aa37626c
L
3223 return TRUE;
3224
986a241f
RH
3225 /* Otherwise, the symbol is dynamic if binding rules don't tell
3226 us that it remains local. */
3227 return !binding_stays_local_p;
3228}
f6c52c13
AM
3229
3230/* Return true if the symbol referred to by H should be considered
3231 to resolve local to the current module, and false otherwise. Differs
3232 from (the inverse of) _bfd_elf_dynamic_symbol_p in the treatment of
2e76e85a 3233 undefined symbols. The two functions are virtually identical except
0fad2956
MR
3234 for the place where dynindx == -1 is tested. If that test is true,
3235 _bfd_elf_dynamic_symbol_p will say the symbol is local, while
3236 _bfd_elf_symbol_refs_local_p will say the symbol is local only for
3237 defined symbols.
89a2ee5a
AM
3238 It might seem that _bfd_elf_dynamic_symbol_p could be rewritten as
3239 !_bfd_elf_symbol_refs_local_p, except that targets differ in their
3240 treatment of undefined weak symbols. For those that do not make
3241 undefined weak symbols dynamic, both functions may return false. */
f6c52c13
AM
3242
3243bfd_boolean
268b6b39
AM
3244_bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h,
3245 struct bfd_link_info *info,
3246 bfd_boolean local_protected)
f6c52c13 3247{
fcb93ecf
PB
3248 const struct elf_backend_data *bed;
3249 struct elf_link_hash_table *hash_table;
3250
f6c52c13
AM
3251 /* If it's a local sym, of course we resolve locally. */
3252 if (h == NULL)
3253 return TRUE;
3254
d95edcac
L
3255 /* STV_HIDDEN or STV_INTERNAL ones must be local. */
3256 if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN
3257 || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
3258 return TRUE;
3259
0fad2956
MR
3260 /* Forced local symbols resolve locally. */
3261 if (h->forced_local)
3262 return TRUE;
3263
7e2294f9
AO
3264 /* Common symbols that become definitions don't get the DEF_REGULAR
3265 flag set, so test it first, and don't bail out. */
3266 if (ELF_COMMON_DEF_P (h))
3267 /* Do nothing. */;
f6c52c13 3268 /* If we don't have a definition in a regular file, then we can't
49ff44d6
L
3269 resolve locally. The sym is either undefined or dynamic. */
3270 else if (!h->def_regular)
f6c52c13
AM
3271 return FALSE;
3272
0fad2956 3273 /* Non-dynamic symbols resolve locally. */
f6c52c13
AM
3274 if (h->dynindx == -1)
3275 return TRUE;
3276
3277 /* At this point, we know the symbol is defined and dynamic. In an
3278 executable it must resolve locally, likewise when building symbolic
3279 shared libraries. */
0e1862bb 3280 if (bfd_link_executable (info) || SYMBOLIC_BIND (info, h))
f6c52c13
AM
3281 return TRUE;
3282
3283 /* Now deal with defined dynamic symbols in shared libraries. Ones
3284 with default visibility might not resolve locally. */
3285 if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3286 return FALSE;
3287
fcb93ecf
PB
3288 hash_table = elf_hash_table (info);
3289 if (!is_elf_hash_table (hash_table))
3290 return TRUE;
3291
3292 bed = get_elf_backend_data (hash_table->dynobj);
3293
f7483970
L
3294 /* If extern_protected_data is false, STV_PROTECTED non-function
3295 symbols are local. */
889c2a67
L
3296 if ((!info->extern_protected_data
3297 || (info->extern_protected_data < 0
3298 && !bed->extern_protected_data))
3299 && !bed->is_function_type (h->type))
1c16dfa5
L
3300 return TRUE;
3301
f6c52c13 3302 /* Function pointer equality tests may require that STV_PROTECTED
2676a7d9
AM
3303 symbols be treated as dynamic symbols. If the address of a
3304 function not defined in an executable is set to that function's
3305 plt entry in the executable, then the address of the function in
3306 a shared library must also be the plt entry in the executable. */
f6c52c13
AM
3307 return local_protected;
3308}
e1918d23
AM
3309
3310/* Caches some TLS segment info, and ensures that the TLS segment vma is
3311 aligned. Returns the first TLS output section. */
3312
3313struct bfd_section *
3314_bfd_elf_tls_setup (bfd *obfd, struct bfd_link_info *info)
3315{
3316 struct bfd_section *sec, *tls;
3317 unsigned int align = 0;
3318
3319 for (sec = obfd->sections; sec != NULL; sec = sec->next)
3320 if ((sec->flags & SEC_THREAD_LOCAL) != 0)
3321 break;
3322 tls = sec;
3323
3324 for (; sec != NULL && (sec->flags & SEC_THREAD_LOCAL) != 0; sec = sec->next)
3325 if (sec->alignment_power > align)
3326 align = sec->alignment_power;
3327
3328 elf_hash_table (info)->tls_sec = tls;
3329
3330 /* Ensure the alignment of the first section is the largest alignment,
3331 so that the tls segment starts aligned. */
3332 if (tls != NULL)
3333 tls->alignment_power = align;
3334
3335 return tls;
3336}
0ad989f9
L
3337
3338/* Return TRUE iff this is a non-common, definition of a non-function symbol. */
3339static bfd_boolean
3340is_global_data_symbol_definition (bfd *abfd ATTRIBUTE_UNUSED,
3341 Elf_Internal_Sym *sym)
3342{
a4d8e49b
L
3343 const struct elf_backend_data *bed;
3344
0ad989f9
L
3345 /* Local symbols do not count, but target specific ones might. */
3346 if (ELF_ST_BIND (sym->st_info) != STB_GLOBAL
3347 && ELF_ST_BIND (sym->st_info) < STB_LOOS)
3348 return FALSE;
3349
fcb93ecf 3350 bed = get_elf_backend_data (abfd);
0ad989f9 3351 /* Function symbols do not count. */
fcb93ecf 3352 if (bed->is_function_type (ELF_ST_TYPE (sym->st_info)))
0ad989f9
L
3353 return FALSE;
3354
3355 /* If the section is undefined, then so is the symbol. */
3356 if (sym->st_shndx == SHN_UNDEF)
3357 return FALSE;
3358
3359 /* If the symbol is defined in the common section, then
3360 it is a common definition and so does not count. */
a4d8e49b 3361 if (bed->common_definition (sym))
0ad989f9
L
3362 return FALSE;
3363
3364 /* If the symbol is in a target specific section then we
3365 must rely upon the backend to tell us what it is. */
3366 if (sym->st_shndx >= SHN_LORESERVE && sym->st_shndx < SHN_ABS)
3367 /* FIXME - this function is not coded yet:
3368
3369 return _bfd_is_global_symbol_definition (abfd, sym);
3370
3371 Instead for now assume that the definition is not global,
3372 Even if this is wrong, at least the linker will behave
3373 in the same way that it used to do. */
3374 return FALSE;
3375
3376 return TRUE;
3377}
3378
3379/* Search the symbol table of the archive element of the archive ABFD
3380 whose archive map contains a mention of SYMDEF, and determine if
3381 the symbol is defined in this element. */
3382static bfd_boolean
3383elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
3384{
3385 Elf_Internal_Shdr * hdr;
ef53be89
AM
3386 size_t symcount;
3387 size_t extsymcount;
3388 size_t extsymoff;
0ad989f9
L
3389 Elf_Internal_Sym *isymbuf;
3390 Elf_Internal_Sym *isym;
3391 Elf_Internal_Sym *isymend;
3392 bfd_boolean result;
3393
3394 abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
3395 if (abfd == NULL)
3396 return FALSE;
3397
3398 if (! bfd_check_format (abfd, bfd_object))
3399 return FALSE;
3400
7dc3990e
L
3401 /* Select the appropriate symbol table. If we don't know if the
3402 object file is an IR object, give linker LTO plugin a chance to
3403 get the correct symbol table. */
3404 if (abfd->plugin_format == bfd_plugin_yes
08ce1d72 3405#if BFD_SUPPORTS_PLUGINS
7dc3990e
L
3406 || (abfd->plugin_format == bfd_plugin_unknown
3407 && bfd_link_plugin_object_p (abfd))
3408#endif
3409 )
3410 {
3411 /* Use the IR symbol table if the object has been claimed by
3412 plugin. */
3413 abfd = abfd->plugin_dummy_bfd;
3414 hdr = &elf_tdata (abfd)->symtab_hdr;
3415 }
3416 else if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
0ad989f9
L
3417 hdr = &elf_tdata (abfd)->symtab_hdr;
3418 else
3419 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3420
3421 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3422
3423 /* The sh_info field of the symtab header tells us where the
3424 external symbols start. We don't care about the local symbols. */
3425 if (elf_bad_symtab (abfd))
3426 {
3427 extsymcount = symcount;
3428 extsymoff = 0;
3429 }
3430 else
3431 {
3432 extsymcount = symcount - hdr->sh_info;
3433 extsymoff = hdr->sh_info;
3434 }
3435
3436 if (extsymcount == 0)
3437 return FALSE;
3438
3439 /* Read in the symbol table. */
3440 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
3441 NULL, NULL, NULL);
3442 if (isymbuf == NULL)
3443 return FALSE;
3444
3445 /* Scan the symbol table looking for SYMDEF. */
3446 result = FALSE;
3447 for (isym = isymbuf, isymend = isymbuf + extsymcount; isym < isymend; isym++)
3448 {
3449 const char *name;
3450
3451 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
3452 isym->st_name);
3453 if (name == NULL)
3454 break;
3455
3456 if (strcmp (name, symdef->name) == 0)
3457 {
3458 result = is_global_data_symbol_definition (abfd, isym);
3459 break;
3460 }
3461 }
3462
3463 free (isymbuf);
3464
3465 return result;
3466}
3467\f
5a580b3a
AM
3468/* Add an entry to the .dynamic table. */
3469
3470bfd_boolean
3471_bfd_elf_add_dynamic_entry (struct bfd_link_info *info,
3472 bfd_vma tag,
3473 bfd_vma val)
3474{
3475 struct elf_link_hash_table *hash_table;
3476 const struct elf_backend_data *bed;
3477 asection *s;
3478 bfd_size_type newsize;
3479 bfd_byte *newcontents;
3480 Elf_Internal_Dyn dyn;
3481
3482 hash_table = elf_hash_table (info);
3483 if (! is_elf_hash_table (hash_table))
3484 return FALSE;
3485
7f923b7f
AM
3486 if (tag == DT_RELA || tag == DT_REL)
3487 hash_table->dynamic_relocs = TRUE;
3488
5a580b3a 3489 bed = get_elf_backend_data (hash_table->dynobj);
3d4d4302 3490 s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
5a580b3a
AM
3491 BFD_ASSERT (s != NULL);
3492
eea6121a 3493 newsize = s->size + bed->s->sizeof_dyn;
a50b1753 3494 newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
5a580b3a
AM
3495 if (newcontents == NULL)
3496 return FALSE;
3497
3498 dyn.d_tag = tag;
3499 dyn.d_un.d_val = val;
eea6121a 3500 bed->s->swap_dyn_out (hash_table->dynobj, &dyn, newcontents + s->size);
5a580b3a 3501
eea6121a 3502 s->size = newsize;
5a580b3a
AM
3503 s->contents = newcontents;
3504
3505 return TRUE;
3506}
3507
3508/* Add a DT_NEEDED entry for this dynamic object if DO_IT is true,
3509 otherwise just check whether one already exists. Returns -1 on error,
3510 1 if a DT_NEEDED tag already exists, and 0 on success. */
3511
4ad4eba5 3512static int
7e9f0867
AM
3513elf_add_dt_needed_tag (bfd *abfd,
3514 struct bfd_link_info *info,
4ad4eba5
AM
3515 const char *soname,
3516 bfd_boolean do_it)
5a580b3a
AM
3517{
3518 struct elf_link_hash_table *hash_table;
ef53be89 3519 size_t strindex;
5a580b3a 3520
7e9f0867
AM
3521 if (!_bfd_elf_link_create_dynstrtab (abfd, info))
3522 return -1;
3523
5a580b3a 3524 hash_table = elf_hash_table (info);
5a580b3a 3525 strindex = _bfd_elf_strtab_add (hash_table->dynstr, soname, FALSE);
ef53be89 3526 if (strindex == (size_t) -1)
5a580b3a
AM
3527 return -1;
3528
02be4619 3529 if (_bfd_elf_strtab_refcount (hash_table->dynstr, strindex) != 1)
5a580b3a
AM
3530 {
3531 asection *sdyn;
3532 const struct elf_backend_data *bed;
3533 bfd_byte *extdyn;
3534
3535 bed = get_elf_backend_data (hash_table->dynobj);
3d4d4302 3536 sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
7e9f0867
AM
3537 if (sdyn != NULL)
3538 for (extdyn = sdyn->contents;
3539 extdyn < sdyn->contents + sdyn->size;
3540 extdyn += bed->s->sizeof_dyn)
3541 {
3542 Elf_Internal_Dyn dyn;
5a580b3a 3543
7e9f0867
AM
3544 bed->s->swap_dyn_in (hash_table->dynobj, extdyn, &dyn);
3545 if (dyn.d_tag == DT_NEEDED
3546 && dyn.d_un.d_val == strindex)
3547 {
3548 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3549 return 1;
3550 }
3551 }
5a580b3a
AM
3552 }
3553
3554 if (do_it)
3555 {
7e9f0867
AM
3556 if (!_bfd_elf_link_create_dynamic_sections (hash_table->dynobj, info))
3557 return -1;
3558
5a580b3a
AM
3559 if (!_bfd_elf_add_dynamic_entry (info, DT_NEEDED, strindex))
3560 return -1;
3561 }
3562 else
3563 /* We were just checking for existence of the tag. */
3564 _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
3565
3566 return 0;
3567}
3568
7b15fa7a
AM
3569/* Return true if SONAME is on the needed list between NEEDED and STOP
3570 (or the end of list if STOP is NULL), and needed by a library that
3571 will be loaded. */
3572
010e5ae2 3573static bfd_boolean
7b15fa7a
AM
3574on_needed_list (const char *soname,
3575 struct bfd_link_needed_list *needed,
3576 struct bfd_link_needed_list *stop)
010e5ae2 3577{
7b15fa7a
AM
3578 struct bfd_link_needed_list *look;
3579 for (look = needed; look != stop; look = look->next)
3580 if (strcmp (soname, look->name) == 0
3581 && ((elf_dyn_lib_class (look->by) & DYN_AS_NEEDED) == 0
3582 /* If needed by a library that itself is not directly
3583 needed, recursively check whether that library is
3584 indirectly needed. Since we add DT_NEEDED entries to
3585 the end of the list, library dependencies appear after
3586 the library. Therefore search prior to the current
3587 LOOK, preventing possible infinite recursion. */
3588 || on_needed_list (elf_dt_name (look->by), needed, look)))
010e5ae2
AM
3589 return TRUE;
3590
3591 return FALSE;
3592}
3593
14160578 3594/* Sort symbol by value, section, and size. */
4ad4eba5
AM
3595static int
3596elf_sort_symbol (const void *arg1, const void *arg2)
5a580b3a
AM
3597{
3598 const struct elf_link_hash_entry *h1;
3599 const struct elf_link_hash_entry *h2;
10b7e05b 3600 bfd_signed_vma vdiff;
5a580b3a
AM
3601
3602 h1 = *(const struct elf_link_hash_entry **) arg1;
3603 h2 = *(const struct elf_link_hash_entry **) arg2;
10b7e05b
NC
3604 vdiff = h1->root.u.def.value - h2->root.u.def.value;
3605 if (vdiff != 0)
3606 return vdiff > 0 ? 1 : -1;
3607 else
3608 {
d3435ae8 3609 int sdiff = h1->root.u.def.section->id - h2->root.u.def.section->id;
10b7e05b
NC
3610 if (sdiff != 0)
3611 return sdiff > 0 ? 1 : -1;
3612 }
14160578
AM
3613 vdiff = h1->size - h2->size;
3614 return vdiff == 0 ? 0 : vdiff > 0 ? 1 : -1;
5a580b3a 3615}
4ad4eba5 3616
5a580b3a
AM
3617/* This function is used to adjust offsets into .dynstr for
3618 dynamic symbols. This is called via elf_link_hash_traverse. */
3619
3620static bfd_boolean
3621elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data)
3622{
a50b1753 3623 struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;
5a580b3a 3624
5a580b3a
AM
3625 if (h->dynindx != -1)
3626 h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
3627 return TRUE;
3628}
3629
3630/* Assign string offsets in .dynstr, update all structures referencing
3631 them. */
3632
4ad4eba5
AM
3633static bfd_boolean
3634elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info)
5a580b3a
AM
3635{
3636 struct elf_link_hash_table *hash_table = elf_hash_table (info);
3637 struct elf_link_local_dynamic_entry *entry;
3638 struct elf_strtab_hash *dynstr = hash_table->dynstr;
3639 bfd *dynobj = hash_table->dynobj;
3640 asection *sdyn;
3641 bfd_size_type size;
3642 const struct elf_backend_data *bed;
3643 bfd_byte *extdyn;
3644
3645 _bfd_elf_strtab_finalize (dynstr);
3646 size = _bfd_elf_strtab_size (dynstr);
3647
3648 bed = get_elf_backend_data (dynobj);
3d4d4302 3649 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
5a580b3a
AM
3650 BFD_ASSERT (sdyn != NULL);
3651
3652 /* Update all .dynamic entries referencing .dynstr strings. */
3653 for (extdyn = sdyn->contents;
eea6121a 3654 extdyn < sdyn->contents + sdyn->size;
5a580b3a
AM
3655 extdyn += bed->s->sizeof_dyn)
3656 {
3657 Elf_Internal_Dyn dyn;
3658
3659 bed->s->swap_dyn_in (dynobj, extdyn, &dyn);
3660 switch (dyn.d_tag)
3661 {
3662 case DT_STRSZ:
3663 dyn.d_un.d_val = size;
3664 break;
3665 case DT_NEEDED:
3666 case DT_SONAME:
3667 case DT_RPATH:
3668 case DT_RUNPATH:
3669 case DT_FILTER:
3670 case DT_AUXILIARY:
7ee314fa
AM
3671 case DT_AUDIT:
3672 case DT_DEPAUDIT:
5a580b3a
AM
3673 dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
3674 break;
3675 default:
3676 continue;
3677 }
3678 bed->s->swap_dyn_out (dynobj, &dyn, extdyn);
3679 }
3680
3681 /* Now update local dynamic symbols. */
3682 for (entry = hash_table->dynlocal; entry ; entry = entry->next)
3683 entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
3684 entry->isym.st_name);
3685
3686 /* And the rest of dynamic symbols. */
3687 elf_link_hash_traverse (hash_table, elf_adjust_dynstr_offsets, dynstr);
3688
3689 /* Adjust version definitions. */
3690 if (elf_tdata (output_bfd)->cverdefs)
3691 {
3692 asection *s;
3693 bfd_byte *p;
ef53be89 3694 size_t i;
5a580b3a
AM
3695 Elf_Internal_Verdef def;
3696 Elf_Internal_Verdaux defaux;
3697
3d4d4302 3698 s = bfd_get_linker_section (dynobj, ".gnu.version_d");
5a580b3a
AM
3699 p = s->contents;
3700 do
3701 {
3702 _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
3703 &def);
3704 p += sizeof (Elf_External_Verdef);
3e3b46e5
PB
3705 if (def.vd_aux != sizeof (Elf_External_Verdef))
3706 continue;
5a580b3a
AM
3707 for (i = 0; i < def.vd_cnt; ++i)
3708 {
3709 _bfd_elf_swap_verdaux_in (output_bfd,
3710 (Elf_External_Verdaux *) p, &defaux);
3711 defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
3712 defaux.vda_name);
3713 _bfd_elf_swap_verdaux_out (output_bfd,
3714 &defaux, (Elf_External_Verdaux *) p);
3715 p += sizeof (Elf_External_Verdaux);
3716 }
3717 }
3718 while (def.vd_next);
3719 }
3720
3721 /* Adjust version references. */
3722 if (elf_tdata (output_bfd)->verref)
3723 {
3724 asection *s;
3725 bfd_byte *p;
ef53be89 3726 size_t i;
5a580b3a
AM
3727 Elf_Internal_Verneed need;
3728 Elf_Internal_Vernaux needaux;
3729
3d4d4302 3730 s = bfd_get_linker_section (dynobj, ".gnu.version_r");
5a580b3a
AM
3731 p = s->contents;
3732 do
3733 {
3734 _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
3735 &need);
3736 need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
3737 _bfd_elf_swap_verneed_out (output_bfd, &need,
3738 (Elf_External_Verneed *) p);
3739 p += sizeof (Elf_External_Verneed);
3740 for (i = 0; i < need.vn_cnt; ++i)
3741 {
3742 _bfd_elf_swap_vernaux_in (output_bfd,
3743 (Elf_External_Vernaux *) p, &needaux);
3744 needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
3745 needaux.vna_name);
3746 _bfd_elf_swap_vernaux_out (output_bfd,
3747 &needaux,
3748 (Elf_External_Vernaux *) p);
3749 p += sizeof (Elf_External_Vernaux);
3750 }
3751 }
3752 while (need.vn_next);
3753 }
3754
3755 return TRUE;
3756}
3757\f
13285a1b
AM
3758/* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3759 The default is to only match when the INPUT and OUTPUT are exactly
3760 the same target. */
3761
3762bfd_boolean
3763_bfd_elf_default_relocs_compatible (const bfd_target *input,
3764 const bfd_target *output)
3765{
3766 return input == output;
3767}
3768
3769/* Return TRUE iff relocations for INPUT are compatible with OUTPUT.
3770 This version is used when different targets for the same architecture
3771 are virtually identical. */
3772
3773bfd_boolean
3774_bfd_elf_relocs_compatible (const bfd_target *input,
3775 const bfd_target *output)
3776{
3777 const struct elf_backend_data *obed, *ibed;
3778
3779 if (input == output)
3780 return TRUE;
3781
3782 ibed = xvec_get_elf_backend_data (input);
3783 obed = xvec_get_elf_backend_data (output);
3784
3785 if (ibed->arch != obed->arch)
3786 return FALSE;
3787
3788 /* If both backends are using this function, deem them compatible. */
3789 return ibed->relocs_compatible == obed->relocs_compatible;
3790}
3791
e5034e59
AM
3792/* Make a special call to the linker "notice" function to tell it that
3793 we are about to handle an as-needed lib, or have finished
1b786873 3794 processing the lib. */
e5034e59
AM
3795
3796bfd_boolean
3797_bfd_elf_notice_as_needed (bfd *ibfd,
3798 struct bfd_link_info *info,
3799 enum notice_asneeded_action act)
3800{
46135103 3801 return (*info->callbacks->notice) (info, NULL, NULL, ibfd, NULL, act, 0);
e5034e59
AM
3802}
3803
d9689752
L
3804/* Check relocations an ELF object file. */
3805
3806bfd_boolean
3807_bfd_elf_link_check_relocs (bfd *abfd, struct bfd_link_info *info)
3808{
3809 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3810 struct elf_link_hash_table *htab = elf_hash_table (info);
3811
3812 /* If this object is the same format as the output object, and it is
3813 not a shared library, then let the backend look through the
3814 relocs.
3815
3816 This is required to build global offset table entries and to
3817 arrange for dynamic relocs. It is not required for the
3818 particular common case of linking non PIC code, even when linking
3819 against shared libraries, but unfortunately there is no way of
3820 knowing whether an object file has been compiled PIC or not.
3821 Looking through the relocs is not particularly time consuming.
3822 The problem is that we must either (1) keep the relocs in memory,
3823 which causes the linker to require additional runtime memory or
3824 (2) read the relocs twice from the input file, which wastes time.
3825 This would be a good case for using mmap.
3826
3827 I have no idea how to handle linking PIC code into a file of a
3828 different format. It probably can't be done. */
3829 if ((abfd->flags & DYNAMIC) == 0
3830 && is_elf_hash_table (htab)
3831 && bed->check_relocs != NULL
3832 && elf_object_id (abfd) == elf_hash_table_id (htab)
3833 && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec))
3834 {
3835 asection *o;
3836
3837 for (o = abfd->sections; o != NULL; o = o->next)
3838 {
3839 Elf_Internal_Rela *internal_relocs;
3840 bfd_boolean ok;
3841
5ce03cea 3842 /* Don't check relocations in excluded sections. */
d9689752 3843 if ((o->flags & SEC_RELOC) == 0
5ce03cea 3844 || (o->flags & SEC_EXCLUDE) != 0
d9689752
L
3845 || o->reloc_count == 0
3846 || ((info->strip == strip_all || info->strip == strip_debugger)
3847 && (o->flags & SEC_DEBUGGING) != 0)
3848 || bfd_is_abs_section (o->output_section))
3849 continue;
3850
3851 internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
3852 info->keep_memory);
3853 if (internal_relocs == NULL)
3854 return FALSE;
3855
3856 ok = (*bed->check_relocs) (abfd, info, o, internal_relocs);
3857
3858 if (elf_section_data (o)->relocs != internal_relocs)
3859 free (internal_relocs);
3860
3861 if (! ok)
3862 return FALSE;
3863 }
3864 }
3865
3866 return TRUE;
3867}
3868
4ad4eba5
AM
3869/* Add symbols from an ELF object file to the linker hash table. */
3870
3871static bfd_boolean
3872elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
3873{
a0c402a5 3874 Elf_Internal_Ehdr *ehdr;
4ad4eba5 3875 Elf_Internal_Shdr *hdr;
ef53be89
AM
3876 size_t symcount;
3877 size_t extsymcount;
3878 size_t extsymoff;
4ad4eba5
AM
3879 struct elf_link_hash_entry **sym_hash;
3880 bfd_boolean dynamic;
3881 Elf_External_Versym *extversym = NULL;
be22c732 3882 Elf_External_Versym *extversym_end = NULL;
4ad4eba5
AM
3883 Elf_External_Versym *ever;
3884 struct elf_link_hash_entry *weaks;
3885 struct elf_link_hash_entry **nondeflt_vers = NULL;
ef53be89 3886 size_t nondeflt_vers_cnt = 0;
4ad4eba5
AM
3887 Elf_Internal_Sym *isymbuf = NULL;
3888 Elf_Internal_Sym *isym;
3889 Elf_Internal_Sym *isymend;
3890 const struct elf_backend_data *bed;
3891 bfd_boolean add_needed;
66eb6687 3892 struct elf_link_hash_table *htab;
4ad4eba5 3893 bfd_size_type amt;
66eb6687 3894 void *alloc_mark = NULL;
4f87808c
AM
3895 struct bfd_hash_entry **old_table = NULL;
3896 unsigned int old_size = 0;
3897 unsigned int old_count = 0;
66eb6687 3898 void *old_tab = NULL;
66eb6687
AM
3899 void *old_ent;
3900 struct bfd_link_hash_entry *old_undefs = NULL;
3901 struct bfd_link_hash_entry *old_undefs_tail = NULL;
5b677558 3902 void *old_strtab = NULL;
66eb6687 3903 size_t tabsize = 0;
db6a5d5f 3904 asection *s;
29a9f53e 3905 bfd_boolean just_syms;
4ad4eba5 3906
66eb6687 3907 htab = elf_hash_table (info);
4ad4eba5 3908 bed = get_elf_backend_data (abfd);
4ad4eba5
AM
3909
3910 if ((abfd->flags & DYNAMIC) == 0)
3911 dynamic = FALSE;
3912 else
3913 {
3914 dynamic = TRUE;
3915
3916 /* You can't use -r against a dynamic object. Also, there's no
3917 hope of using a dynamic object which does not exactly match
3918 the format of the output file. */
0e1862bb 3919 if (bfd_link_relocatable (info)
66eb6687 3920 || !is_elf_hash_table (htab)
f13a99db 3921 || info->output_bfd->xvec != abfd->xvec)
4ad4eba5 3922 {
0e1862bb 3923 if (bfd_link_relocatable (info))
9a0789ec
NC
3924 bfd_set_error (bfd_error_invalid_operation);
3925 else
3926 bfd_set_error (bfd_error_wrong_format);
4ad4eba5
AM
3927 goto error_return;
3928 }
3929 }
3930
a0c402a5
L
3931 ehdr = elf_elfheader (abfd);
3932 if (info->warn_alternate_em
3933 && bed->elf_machine_code != ehdr->e_machine
3934 && ((bed->elf_machine_alt1 != 0
3935 && ehdr->e_machine == bed->elf_machine_alt1)
3936 || (bed->elf_machine_alt2 != 0
3937 && ehdr->e_machine == bed->elf_machine_alt2)))
9793eb77 3938 _bfd_error_handler
695344c0 3939 /* xgettext:c-format */
9793eb77 3940 (_("alternate ELF machine code found (%d) in %pB, expecting %d"),
a0c402a5
L
3941 ehdr->e_machine, abfd, bed->elf_machine_code);
3942
4ad4eba5
AM
3943 /* As a GNU extension, any input sections which are named
3944 .gnu.warning.SYMBOL are treated as warning symbols for the given
3945 symbol. This differs from .gnu.warning sections, which generate
3946 warnings when they are included in an output file. */
dd98f8d2 3947 /* PR 12761: Also generate this warning when building shared libraries. */
db6a5d5f 3948 for (s = abfd->sections; s != NULL; s = s->next)
4ad4eba5 3949 {
db6a5d5f 3950 const char *name;
4ad4eba5 3951
db6a5d5f
AM
3952 name = bfd_get_section_name (abfd, s);
3953 if (CONST_STRNEQ (name, ".gnu.warning."))
4ad4eba5 3954 {
db6a5d5f
AM
3955 char *msg;
3956 bfd_size_type sz;
3957
3958 name += sizeof ".gnu.warning." - 1;
3959
3960 /* If this is a shared object, then look up the symbol
3961 in the hash table. If it is there, and it is already
3962 been defined, then we will not be using the entry
3963 from this shared object, so we don't need to warn.
3964 FIXME: If we see the definition in a regular object
3965 later on, we will warn, but we shouldn't. The only
3966 fix is to keep track of what warnings we are supposed
3967 to emit, and then handle them all at the end of the
3968 link. */
3969 if (dynamic)
4ad4eba5 3970 {
db6a5d5f
AM
3971 struct elf_link_hash_entry *h;
3972
3973 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
3974
3975 /* FIXME: What about bfd_link_hash_common? */
3976 if (h != NULL
3977 && (h->root.type == bfd_link_hash_defined
3978 || h->root.type == bfd_link_hash_defweak))
3979 continue;
3980 }
4ad4eba5 3981
db6a5d5f
AM
3982 sz = s->size;
3983 msg = (char *) bfd_alloc (abfd, sz + 1);
3984 if (msg == NULL)
3985 goto error_return;
4ad4eba5 3986
db6a5d5f
AM
3987 if (! bfd_get_section_contents (abfd, s, msg, 0, sz))
3988 goto error_return;
4ad4eba5 3989
db6a5d5f 3990 msg[sz] = '\0';
4ad4eba5 3991
db6a5d5f
AM
3992 if (! (_bfd_generic_link_add_one_symbol
3993 (info, abfd, name, BSF_WARNING, s, 0, msg,
3994 FALSE, bed->collect, NULL)))
3995 goto error_return;
4ad4eba5 3996
0e1862bb 3997 if (bfd_link_executable (info))
db6a5d5f
AM
3998 {
3999 /* Clobber the section size so that the warning does
4000 not get copied into the output file. */
4001 s->size = 0;
11d2f718 4002
db6a5d5f
AM
4003 /* Also set SEC_EXCLUDE, so that symbols defined in
4004 the warning section don't get copied to the output. */
4005 s->flags |= SEC_EXCLUDE;
4ad4eba5
AM
4006 }
4007 }
4008 }
4009
29a9f53e
L
4010 just_syms = ((s = abfd->sections) != NULL
4011 && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
4012
4ad4eba5
AM
4013 add_needed = TRUE;
4014 if (! dynamic)
4015 {
4016 /* If we are creating a shared library, create all the dynamic
4017 sections immediately. We need to attach them to something,
4018 so we attach them to this BFD, provided it is the right
bf89386a
L
4019 format and is not from ld --just-symbols. Always create the
4020 dynamic sections for -E/--dynamic-list. FIXME: If there
29a9f53e
L
4021 are no input BFD's of the same format as the output, we can't
4022 make a shared library. */
4023 if (!just_syms
bf89386a 4024 && (bfd_link_pic (info)
9c1d7a08 4025 || (!bfd_link_relocatable (info)
3c5fce9b 4026 && info->nointerp
9c1d7a08 4027 && (info->export_dynamic || info->dynamic)))
66eb6687 4028 && is_elf_hash_table (htab)
f13a99db 4029 && info->output_bfd->xvec == abfd->xvec
66eb6687 4030 && !htab->dynamic_sections_created)
4ad4eba5
AM
4031 {
4032 if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
4033 goto error_return;
4034 }
4035 }
66eb6687 4036 else if (!is_elf_hash_table (htab))
4ad4eba5
AM
4037 goto error_return;
4038 else
4039 {
4ad4eba5 4040 const char *soname = NULL;
7ee314fa 4041 char *audit = NULL;
4ad4eba5 4042 struct bfd_link_needed_list *rpath = NULL, *runpath = NULL;
9acc85a6 4043 const Elf_Internal_Phdr *phdr;
4ad4eba5
AM
4044 int ret;
4045
4046 /* ld --just-symbols and dynamic objects don't mix very well.
92fd189d 4047 ld shouldn't allow it. */
29a9f53e 4048 if (just_syms)
92fd189d 4049 abort ();
4ad4eba5
AM
4050
4051 /* If this dynamic lib was specified on the command line with
4052 --as-needed in effect, then we don't want to add a DT_NEEDED
4053 tag unless the lib is actually used. Similary for libs brought
e56f61be
L
4054 in by another lib's DT_NEEDED. When --no-add-needed is used
4055 on a dynamic lib, we don't want to add a DT_NEEDED entry for
4056 any dynamic library in DT_NEEDED tags in the dynamic lib at
4057 all. */
4058 add_needed = (elf_dyn_lib_class (abfd)
4059 & (DYN_AS_NEEDED | DYN_DT_NEEDED
4060 | DYN_NO_NEEDED)) == 0;
4ad4eba5
AM
4061
4062 s = bfd_get_section_by_name (abfd, ".dynamic");
4063 if (s != NULL)
4064 {
4065 bfd_byte *dynbuf;
4066 bfd_byte *extdyn;
cb33740c 4067 unsigned int elfsec;
4ad4eba5
AM
4068 unsigned long shlink;
4069
eea6121a 4070 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
f8703194
L
4071 {
4072error_free_dyn:
4073 free (dynbuf);
4074 goto error_return;
4075 }
4ad4eba5
AM
4076
4077 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
cb33740c 4078 if (elfsec == SHN_BAD)
4ad4eba5
AM
4079 goto error_free_dyn;
4080 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
4081
4082 for (extdyn = dynbuf;
9bff840e 4083 extdyn <= dynbuf + s->size - bed->s->sizeof_dyn;
4ad4eba5
AM
4084 extdyn += bed->s->sizeof_dyn)
4085 {
4086 Elf_Internal_Dyn dyn;
4087
4088 bed->s->swap_dyn_in (abfd, extdyn, &dyn);
4089 if (dyn.d_tag == DT_SONAME)
4090 {
4091 unsigned int tagv = dyn.d_un.d_val;
4092 soname = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4093 if (soname == NULL)
4094 goto error_free_dyn;
4095 }
4096 if (dyn.d_tag == DT_NEEDED)
4097 {
4098 struct bfd_link_needed_list *n, **pn;
4099 char *fnm, *anm;
4100 unsigned int tagv = dyn.d_un.d_val;
4101
4102 amt = sizeof (struct bfd_link_needed_list);
a50b1753 4103 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4ad4eba5
AM
4104 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4105 if (n == NULL || fnm == NULL)
4106 goto error_free_dyn;
4107 amt = strlen (fnm) + 1;
a50b1753 4108 anm = (char *) bfd_alloc (abfd, amt);
4ad4eba5
AM
4109 if (anm == NULL)
4110 goto error_free_dyn;
4111 memcpy (anm, fnm, amt);
4112 n->name = anm;
4113 n->by = abfd;
4114 n->next = NULL;
66eb6687 4115 for (pn = &htab->needed; *pn != NULL; pn = &(*pn)->next)
4ad4eba5
AM
4116 ;
4117 *pn = n;
4118 }
4119 if (dyn.d_tag == DT_RUNPATH)
4120 {
4121 struct bfd_link_needed_list *n, **pn;
4122 char *fnm, *anm;
4123 unsigned int tagv = dyn.d_un.d_val;
4124
4125 amt = sizeof (struct bfd_link_needed_list);
a50b1753 4126 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4ad4eba5
AM
4127 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4128 if (n == NULL || fnm == NULL)
4129 goto error_free_dyn;
4130 amt = strlen (fnm) + 1;
a50b1753 4131 anm = (char *) bfd_alloc (abfd, amt);
4ad4eba5
AM
4132 if (anm == NULL)
4133 goto error_free_dyn;
4134 memcpy (anm, fnm, amt);
4135 n->name = anm;
4136 n->by = abfd;
4137 n->next = NULL;
4138 for (pn = & runpath;
4139 *pn != NULL;
4140 pn = &(*pn)->next)
4141 ;
4142 *pn = n;
4143 }
4144 /* Ignore DT_RPATH if we have seen DT_RUNPATH. */
4145 if (!runpath && dyn.d_tag == DT_RPATH)
4146 {
4147 struct bfd_link_needed_list *n, **pn;
4148 char *fnm, *anm;
4149 unsigned int tagv = dyn.d_un.d_val;
4150
4151 amt = sizeof (struct bfd_link_needed_list);
a50b1753 4152 n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4ad4eba5
AM
4153 fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4154 if (n == NULL || fnm == NULL)
4155 goto error_free_dyn;
4156 amt = strlen (fnm) + 1;
a50b1753 4157 anm = (char *) bfd_alloc (abfd, amt);
4ad4eba5 4158 if (anm == NULL)
f8703194 4159 goto error_free_dyn;
4ad4eba5
AM
4160 memcpy (anm, fnm, amt);
4161 n->name = anm;
4162 n->by = abfd;
4163 n->next = NULL;
4164 for (pn = & rpath;
4165 *pn != NULL;
4166 pn = &(*pn)->next)
4167 ;
4168 *pn = n;
4169 }
7ee314fa
AM
4170 if (dyn.d_tag == DT_AUDIT)
4171 {
4172 unsigned int tagv = dyn.d_un.d_val;
4173 audit = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
4174 }
4ad4eba5
AM
4175 }
4176
4177 free (dynbuf);
4178 }
4179
4180 /* DT_RUNPATH overrides DT_RPATH. Do _NOT_ bfd_release, as that
4181 frees all more recently bfd_alloc'd blocks as well. */
4182 if (runpath)
4183 rpath = runpath;
4184
4185 if (rpath)
4186 {
4187 struct bfd_link_needed_list **pn;
66eb6687 4188 for (pn = &htab->runpath; *pn != NULL; pn = &(*pn)->next)
4ad4eba5
AM
4189 ;
4190 *pn = rpath;
4191 }
4192
9acc85a6
AM
4193 /* If we have a PT_GNU_RELRO program header, mark as read-only
4194 all sections contained fully therein. This makes relro
4195 shared library sections appear as they will at run-time. */
4196 phdr = elf_tdata (abfd)->phdr + elf_elfheader (abfd)->e_phnum;
54025d58 4197 while (phdr-- > elf_tdata (abfd)->phdr)
9acc85a6
AM
4198 if (phdr->p_type == PT_GNU_RELRO)
4199 {
4200 for (s = abfd->sections; s != NULL; s = s->next)
4201 if ((s->flags & SEC_ALLOC) != 0
4202 && s->vma >= phdr->p_vaddr
4203 && s->vma + s->size <= phdr->p_vaddr + phdr->p_memsz)
4204 s->flags |= SEC_READONLY;
4205 break;
4206 }
4207
4ad4eba5
AM
4208 /* We do not want to include any of the sections in a dynamic
4209 object in the output file. We hack by simply clobbering the
4210 list of sections in the BFD. This could be handled more
4211 cleanly by, say, a new section flag; the existing
4212 SEC_NEVER_LOAD flag is not the one we want, because that one
4213 still implies that the section takes up space in the output
4214 file. */
4215 bfd_section_list_clear (abfd);
4216
4ad4eba5
AM
4217 /* Find the name to use in a DT_NEEDED entry that refers to this
4218 object. If the object has a DT_SONAME entry, we use it.
4219 Otherwise, if the generic linker stuck something in
4220 elf_dt_name, we use that. Otherwise, we just use the file
4221 name. */
4222 if (soname == NULL || *soname == '\0')
4223 {
4224 soname = elf_dt_name (abfd);
4225 if (soname == NULL || *soname == '\0')
4226 soname = bfd_get_filename (abfd);
4227 }
4228
4229 /* Save the SONAME because sometimes the linker emulation code
4230 will need to know it. */
4231 elf_dt_name (abfd) = soname;
4232
7e9f0867 4233 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4ad4eba5
AM
4234 if (ret < 0)
4235 goto error_return;
4236
4237 /* If we have already included this dynamic object in the
4238 link, just ignore it. There is no reason to include a
4239 particular dynamic object more than once. */
4240 if (ret > 0)
4241 return TRUE;
7ee314fa
AM
4242
4243 /* Save the DT_AUDIT entry for the linker emulation code. */
68ffbac6 4244 elf_dt_audit (abfd) = audit;
4ad4eba5
AM
4245 }
4246
4247 /* If this is a dynamic object, we always link against the .dynsym
4248 symbol table, not the .symtab symbol table. The dynamic linker
4249 will only see the .dynsym symbol table, so there is no reason to
4250 look at .symtab for a dynamic object. */
4251
4252 if (! dynamic || elf_dynsymtab (abfd) == 0)
4253 hdr = &elf_tdata (abfd)->symtab_hdr;
4254 else
4255 hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4256
4257 symcount = hdr->sh_size / bed->s->sizeof_sym;
4258
4259 /* The sh_info field of the symtab header tells us where the
4260 external symbols start. We don't care about the local symbols at
4261 this point. */
4262 if (elf_bad_symtab (abfd))
4263 {
4264 extsymcount = symcount;
4265 extsymoff = 0;
4266 }
4267 else
4268 {
4269 extsymcount = symcount - hdr->sh_info;
4270 extsymoff = hdr->sh_info;
4271 }
4272
f45794cb 4273 sym_hash = elf_sym_hashes (abfd);
012b2306 4274 if (extsymcount != 0)
4ad4eba5
AM
4275 {
4276 isymbuf = bfd_elf_get_elf_syms (abfd, hdr, extsymcount, extsymoff,
4277 NULL, NULL, NULL);
4278 if (isymbuf == NULL)
4279 goto error_return;
4280
4ad4eba5 4281 if (sym_hash == NULL)
012b2306
AM
4282 {
4283 /* We store a pointer to the hash table entry for each
4284 external symbol. */
ef53be89
AM
4285 amt = extsymcount;
4286 amt *= sizeof (struct elf_link_hash_entry *);
012b2306
AM
4287 sym_hash = (struct elf_link_hash_entry **) bfd_zalloc (abfd, amt);
4288 if (sym_hash == NULL)
4289 goto error_free_sym;
4290 elf_sym_hashes (abfd) = sym_hash;
4291 }
4ad4eba5
AM
4292 }
4293
4294 if (dynamic)
4295 {
4296 /* Read in any version definitions. */
fc0e6df6
PB
4297 if (!_bfd_elf_slurp_version_tables (abfd,
4298 info->default_imported_symver))
4ad4eba5
AM
4299 goto error_free_sym;
4300
4301 /* Read in the symbol versions, but don't bother to convert them
4302 to internal format. */
4303 if (elf_dynversym (abfd) != 0)
4304 {
4305 Elf_Internal_Shdr *versymhdr;
4306
4307 versymhdr = &elf_tdata (abfd)->dynversym_hdr;
be22c732
NC
4308 amt = versymhdr->sh_size;
4309 extversym = (Elf_External_Versym *) bfd_malloc (amt);
4ad4eba5
AM
4310 if (extversym == NULL)
4311 goto error_free_sym;
4ad4eba5
AM
4312 if (bfd_seek (abfd, versymhdr->sh_offset, SEEK_SET) != 0
4313 || bfd_bread (extversym, amt, abfd) != amt)
4314 goto error_free_vers;
be22c732 4315 extversym_end = extversym + (amt / sizeof (* extversym));
4ad4eba5
AM
4316 }
4317 }
4318
66eb6687
AM
4319 /* If we are loading an as-needed shared lib, save the symbol table
4320 state before we start adding symbols. If the lib turns out
4321 to be unneeded, restore the state. */
4322 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
4323 {
4324 unsigned int i;
4325 size_t entsize;
4326
4327 for (entsize = 0, i = 0; i < htab->root.table.size; i++)
4328 {
4329 struct bfd_hash_entry *p;
2de92251 4330 struct elf_link_hash_entry *h;
66eb6687
AM
4331
4332 for (p = htab->root.table.table[i]; p != NULL; p = p->next)
2de92251
AM
4333 {
4334 h = (struct elf_link_hash_entry *) p;
4335 entsize += htab->root.table.entsize;
4336 if (h->root.type == bfd_link_hash_warning)
4337 entsize += htab->root.table.entsize;
4338 }
66eb6687
AM
4339 }
4340
4341 tabsize = htab->root.table.size * sizeof (struct bfd_hash_entry *);
f45794cb 4342 old_tab = bfd_malloc (tabsize + entsize);
66eb6687
AM
4343 if (old_tab == NULL)
4344 goto error_free_vers;
4345
4346 /* Remember the current objalloc pointer, so that all mem for
4347 symbols added can later be reclaimed. */
4348 alloc_mark = bfd_hash_allocate (&htab->root.table, 1);
4349 if (alloc_mark == NULL)
4350 goto error_free_vers;
4351
5061a885
AM
4352 /* Make a special call to the linker "notice" function to
4353 tell it that we are about to handle an as-needed lib. */
e5034e59 4354 if (!(*bed->notice_as_needed) (abfd, info, notice_as_needed))
9af2a943 4355 goto error_free_vers;
5061a885 4356
f45794cb
AM
4357 /* Clone the symbol table. Remember some pointers into the
4358 symbol table, and dynamic symbol count. */
4359 old_ent = (char *) old_tab + tabsize;
66eb6687 4360 memcpy (old_tab, htab->root.table.table, tabsize);
66eb6687
AM
4361 old_undefs = htab->root.undefs;
4362 old_undefs_tail = htab->root.undefs_tail;
4f87808c
AM
4363 old_table = htab->root.table.table;
4364 old_size = htab->root.table.size;
4365 old_count = htab->root.table.count;
5b677558
AM
4366 old_strtab = _bfd_elf_strtab_save (htab->dynstr);
4367 if (old_strtab == NULL)
4368 goto error_free_vers;
66eb6687
AM
4369
4370 for (i = 0; i < htab->root.table.size; i++)
4371 {
4372 struct bfd_hash_entry *p;
2de92251 4373 struct elf_link_hash_entry *h;
66eb6687
AM
4374
4375 for (p = htab->root.table.table[i]; p != NULL; p = p->next)
4376 {
4377 memcpy (old_ent, p, htab->root.table.entsize);
4378 old_ent = (char *) old_ent + htab->root.table.entsize;
2de92251
AM
4379 h = (struct elf_link_hash_entry *) p;
4380 if (h->root.type == bfd_link_hash_warning)
4381 {
4382 memcpy (old_ent, h->root.u.i.link, htab->root.table.entsize);
4383 old_ent = (char *) old_ent + htab->root.table.entsize;
4384 }
66eb6687
AM
4385 }
4386 }
4387 }
4ad4eba5 4388
66eb6687 4389 weaks = NULL;
be22c732
NC
4390 if (extversym == NULL)
4391 ever = NULL;
4392 else if (extversym + extsymoff < extversym_end)
4393 ever = extversym + extsymoff;
4394 else
4395 {
4396 /* xgettext:c-format */
4397 _bfd_error_handler (_("%pB: invalid version offset %lx (max %lx)"),
4398 abfd, (long) extsymoff,
4399 (long) (extversym_end - extversym) / sizeof (* extversym));
4400 bfd_set_error (bfd_error_bad_value);
4401 goto error_free_vers;
4402 }
4403
4ad4eba5
AM
4404 for (isym = isymbuf, isymend = isymbuf + extsymcount;
4405 isym < isymend;
4406 isym++, sym_hash++, ever = (ever != NULL ? ever + 1 : NULL))
4407 {
4408 int bind;
4409 bfd_vma value;
af44c138 4410 asection *sec, *new_sec;
4ad4eba5
AM
4411 flagword flags;
4412 const char *name;
4413 struct elf_link_hash_entry *h;
90c984fc 4414 struct elf_link_hash_entry *hi;
4ad4eba5
AM
4415 bfd_boolean definition;
4416 bfd_boolean size_change_ok;
4417 bfd_boolean type_change_ok;
37a9e49a
L
4418 bfd_boolean new_weak;
4419 bfd_boolean old_weak;
4ad4eba5 4420 bfd_boolean override;
a4d8e49b 4421 bfd_boolean common;
97196564 4422 bfd_boolean discarded;
4ad4eba5
AM
4423 unsigned int old_alignment;
4424 bfd *old_bfd;
6e33951e 4425 bfd_boolean matched;
4ad4eba5
AM
4426
4427 override = FALSE;
4428
4429 flags = BSF_NO_FLAGS;
4430 sec = NULL;
4431 value = isym->st_value;
a4d8e49b 4432 common = bed->common_definition (isym);
2980ccad
L
4433 if (common && info->inhibit_common_definition)
4434 {
4435 /* Treat common symbol as undefined for --no-define-common. */
4436 isym->st_shndx = SHN_UNDEF;
4437 common = FALSE;
4438 }
97196564 4439 discarded = FALSE;
4ad4eba5
AM
4440
4441 bind = ELF_ST_BIND (isym->st_info);
3e7a7d11 4442 switch (bind)
4ad4eba5 4443 {
3e7a7d11 4444 case STB_LOCAL:
4ad4eba5
AM
4445 /* This should be impossible, since ELF requires that all
4446 global symbols follow all local symbols, and that sh_info
4447 point to the first global symbol. Unfortunately, Irix 5
4448 screws this up. */
fe3fef62
AM
4449 if (elf_bad_symtab (abfd))
4450 continue;
4451
4452 /* If we aren't prepared to handle locals within the globals
6835821b 4453 then we'll likely segfault on a NULL section. */
fe3fef62
AM
4454 bfd_set_error (bfd_error_bad_value);
4455 goto error_free_vers;
3e7a7d11
NC
4456
4457 case STB_GLOBAL:
a4d8e49b 4458 if (isym->st_shndx != SHN_UNDEF && !common)
4ad4eba5 4459 flags = BSF_GLOBAL;
3e7a7d11
NC
4460 break;
4461
4462 case STB_WEAK:
4463 flags = BSF_WEAK;
4464 break;
4465
4466 case STB_GNU_UNIQUE:
4467 flags = BSF_GNU_UNIQUE;
4468 break;
4469
4470 default:
4ad4eba5 4471 /* Leave it up to the processor backend. */
3e7a7d11 4472 break;
4ad4eba5
AM
4473 }
4474
4475 if (isym->st_shndx == SHN_UNDEF)
4476 sec = bfd_und_section_ptr;
cb33740c
AM
4477 else if (isym->st_shndx == SHN_ABS)
4478 sec = bfd_abs_section_ptr;
4479 else if (isym->st_shndx == SHN_COMMON)
4480 {
4481 sec = bfd_com_section_ptr;
4482 /* What ELF calls the size we call the value. What ELF
4483 calls the value we call the alignment. */
4484 value = isym->st_size;
4485 }
4486 else
4ad4eba5
AM
4487 {
4488 sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
4489 if (sec == NULL)
4490 sec = bfd_abs_section_ptr;
dbaa2011 4491 else if (discarded_section (sec))
529fcb95 4492 {
e5d08002
L
4493 /* Symbols from discarded section are undefined. We keep
4494 its visibility. */
529fcb95 4495 sec = bfd_und_section_ptr;
97196564 4496 discarded = TRUE;
529fcb95
PB
4497 isym->st_shndx = SHN_UNDEF;
4498 }
4ad4eba5
AM
4499 else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
4500 value -= sec->vma;
4501 }
4ad4eba5
AM
4502
4503 name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4504 isym->st_name);
4505 if (name == NULL)
4506 goto error_free_vers;
4507
4508 if (isym->st_shndx == SHN_COMMON
02d00247
AM
4509 && (abfd->flags & BFD_PLUGIN) != 0)
4510 {
4511 asection *xc = bfd_get_section_by_name (abfd, "COMMON");
4512
4513 if (xc == NULL)
4514 {
4515 flagword sflags = (SEC_ALLOC | SEC_IS_COMMON | SEC_KEEP
4516 | SEC_EXCLUDE);
4517 xc = bfd_make_section_with_flags (abfd, "COMMON", sflags);
4518 if (xc == NULL)
4519 goto error_free_vers;
4520 }
4521 sec = xc;
4522 }
4523 else if (isym->st_shndx == SHN_COMMON
4524 && ELF_ST_TYPE (isym->st_info) == STT_TLS
0e1862bb 4525 && !bfd_link_relocatable (info))
4ad4eba5
AM
4526 {
4527 asection *tcomm = bfd_get_section_by_name (abfd, ".tcommon");
4528
4529 if (tcomm == NULL)
4530 {
02d00247
AM
4531 flagword sflags = (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_IS_COMMON
4532 | SEC_LINKER_CREATED);
4533 tcomm = bfd_make_section_with_flags (abfd, ".tcommon", sflags);
3496cb2a 4534 if (tcomm == NULL)
4ad4eba5
AM
4535 goto error_free_vers;
4536 }
4537 sec = tcomm;
4538 }
66eb6687 4539 else if (bed->elf_add_symbol_hook)
4ad4eba5 4540 {
66eb6687
AM
4541 if (! (*bed->elf_add_symbol_hook) (abfd, info, isym, &name, &flags,
4542 &sec, &value))
4ad4eba5
AM
4543 goto error_free_vers;
4544
4545 /* The hook function sets the name to NULL if this symbol
4546 should be skipped for some reason. */
4547 if (name == NULL)
4548 continue;
4549 }
4550
4551 /* Sanity check that all possibilities were handled. */
4552 if (sec == NULL)
4553 {
4554 bfd_set_error (bfd_error_bad_value);
4555 goto error_free_vers;
4556 }
4557
191c0c42
AM
4558 /* Silently discard TLS symbols from --just-syms. There's
4559 no way to combine a static TLS block with a new TLS block
4560 for this executable. */
4561 if (ELF_ST_TYPE (isym->st_info) == STT_TLS
4562 && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
4563 continue;
4564
4ad4eba5
AM
4565 if (bfd_is_und_section (sec)
4566 || bfd_is_com_section (sec))
4567 definition = FALSE;
4568 else
4569 definition = TRUE;
4570
4571 size_change_ok = FALSE;
66eb6687 4572 type_change_ok = bed->type_change_ok;
37a9e49a 4573 old_weak = FALSE;
6e33951e 4574 matched = FALSE;
4ad4eba5
AM
4575 old_alignment = 0;
4576 old_bfd = NULL;
af44c138 4577 new_sec = sec;
4ad4eba5 4578
66eb6687 4579 if (is_elf_hash_table (htab))
4ad4eba5
AM
4580 {
4581 Elf_Internal_Versym iver;
4582 unsigned int vernum = 0;
4583 bfd_boolean skip;
4584
fc0e6df6 4585 if (ever == NULL)
4ad4eba5 4586 {
fc0e6df6
PB
4587 if (info->default_imported_symver)
4588 /* Use the default symbol version created earlier. */
4589 iver.vs_vers = elf_tdata (abfd)->cverdefs;
4590 else
4591 iver.vs_vers = 0;
4592 }
be22c732
NC
4593 else if (ever >= extversym_end)
4594 {
4595 /* xgettext:c-format */
4596 _bfd_error_handler (_("%pB: not enough version information"),
4597 abfd);
4598 bfd_set_error (bfd_error_bad_value);
4599 goto error_free_vers;
4600 }
fc0e6df6
PB
4601 else
4602 _bfd_elf_swap_versym_in (abfd, ever, &iver);
4603
4604 vernum = iver.vs_vers & VERSYM_VERSION;
4605
4606 /* If this is a hidden symbol, or if it is not version
4607 1, we append the version name to the symbol name.
cc86ff91
EB
4608 However, we do not modify a non-hidden absolute symbol
4609 if it is not a function, because it might be the version
4610 symbol itself. FIXME: What if it isn't? */
fc0e6df6 4611 if ((iver.vs_vers & VERSYM_HIDDEN) != 0
fcb93ecf
PB
4612 || (vernum > 1
4613 && (!bfd_is_abs_section (sec)
4614 || bed->is_function_type (ELF_ST_TYPE (isym->st_info)))))
fc0e6df6
PB
4615 {
4616 const char *verstr;
4617 size_t namelen, verlen, newlen;
4618 char *newname, *p;
4619
4620 if (isym->st_shndx != SHN_UNDEF)
4ad4eba5 4621 {
fc0e6df6
PB
4622 if (vernum > elf_tdata (abfd)->cverdefs)
4623 verstr = NULL;
4624 else if (vernum > 1)
4625 verstr =
4626 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
4627 else
4628 verstr = "";
4ad4eba5 4629
fc0e6df6 4630 if (verstr == NULL)
4ad4eba5 4631 {
4eca0228 4632 _bfd_error_handler
695344c0 4633 /* xgettext:c-format */
871b3ab2 4634 (_("%pB: %s: invalid version %u (max %d)"),
fc0e6df6
PB
4635 abfd, name, vernum,
4636 elf_tdata (abfd)->cverdefs);
4637 bfd_set_error (bfd_error_bad_value);
4638 goto error_free_vers;
4ad4eba5 4639 }
fc0e6df6
PB
4640 }
4641 else
4642 {
4643 /* We cannot simply test for the number of
4644 entries in the VERNEED section since the
4645 numbers for the needed versions do not start
4646 at 0. */
4647 Elf_Internal_Verneed *t;
4648
4649 verstr = NULL;
4650 for (t = elf_tdata (abfd)->verref;
4651 t != NULL;
4652 t = t->vn_nextref)
4ad4eba5 4653 {
fc0e6df6 4654 Elf_Internal_Vernaux *a;
4ad4eba5 4655
fc0e6df6
PB
4656 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
4657 {
4658 if (a->vna_other == vernum)
4ad4eba5 4659 {
fc0e6df6
PB
4660 verstr = a->vna_nodename;
4661 break;
4ad4eba5 4662 }
4ad4eba5 4663 }
fc0e6df6
PB
4664 if (a != NULL)
4665 break;
4666 }
4667 if (verstr == NULL)
4668 {
4eca0228 4669 _bfd_error_handler
695344c0 4670 /* xgettext:c-format */
871b3ab2 4671 (_("%pB: %s: invalid needed version %d"),
fc0e6df6
PB
4672 abfd, name, vernum);
4673 bfd_set_error (bfd_error_bad_value);
4674 goto error_free_vers;
4ad4eba5 4675 }
4ad4eba5 4676 }
fc0e6df6
PB
4677
4678 namelen = strlen (name);
4679 verlen = strlen (verstr);
4680 newlen = namelen + verlen + 2;
4681 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4682 && isym->st_shndx != SHN_UNDEF)
4683 ++newlen;
4684
a50b1753 4685 newname = (char *) bfd_hash_allocate (&htab->root.table, newlen);
fc0e6df6
PB
4686 if (newname == NULL)
4687 goto error_free_vers;
4688 memcpy (newname, name, namelen);
4689 p = newname + namelen;
4690 *p++ = ELF_VER_CHR;
4691 /* If this is a defined non-hidden version symbol,
4692 we add another @ to the name. This indicates the
4693 default version of the symbol. */
4694 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
4695 && isym->st_shndx != SHN_UNDEF)
4696 *p++ = ELF_VER_CHR;
4697 memcpy (p, verstr, verlen + 1);
4698
4699 name = newname;
4ad4eba5
AM
4700 }
4701
cd3416da
AM
4702 /* If this symbol has default visibility and the user has
4703 requested we not re-export it, then mark it as hidden. */
a0d49154 4704 if (!bfd_is_und_section (sec)
cd3416da 4705 && !dynamic
ce875075 4706 && abfd->no_export
cd3416da
AM
4707 && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
4708 isym->st_other = (STV_HIDDEN
4709 | (isym->st_other & ~ELF_ST_VISIBILITY (-1)));
4710
4f3fedcf
AM
4711 if (!_bfd_elf_merge_symbol (abfd, info, name, isym, &sec, &value,
4712 sym_hash, &old_bfd, &old_weak,
4713 &old_alignment, &skip, &override,
6e33951e
L
4714 &type_change_ok, &size_change_ok,
4715 &matched))
4ad4eba5
AM
4716 goto error_free_vers;
4717
4718 if (skip)
4719 continue;
4720
6e33951e
L
4721 /* Override a definition only if the new symbol matches the
4722 existing one. */
4723 if (override && matched)
4ad4eba5
AM
4724 definition = FALSE;
4725
4726 h = *sym_hash;
4727 while (h->root.type == bfd_link_hash_indirect
4728 || h->root.type == bfd_link_hash_warning)
4729 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4730
4ad4eba5 4731 if (elf_tdata (abfd)->verdef != NULL
4ad4eba5
AM
4732 && vernum > 1
4733 && definition)
4734 h->verinfo.verdef = &elf_tdata (abfd)->verdef[vernum - 1];
4735 }
4736
4737 if (! (_bfd_generic_link_add_one_symbol
66eb6687 4738 (info, abfd, name, flags, sec, value, NULL, FALSE, bed->collect,
4ad4eba5
AM
4739 (struct bfd_link_hash_entry **) sym_hash)))
4740 goto error_free_vers;
4741
ac98f9e2
L
4742 if ((abfd->flags & DYNAMIC) == 0
4743 && (bfd_get_flavour (info->output_bfd)
4744 == bfd_target_elf_flavour))
4745 {
4746 if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
4747 elf_tdata (info->output_bfd)->has_gnu_symbols
4748 |= elf_gnu_symbol_ifunc;
4749 if ((flags & BSF_GNU_UNIQUE))
4750 elf_tdata (info->output_bfd)->has_gnu_symbols
4751 |= elf_gnu_symbol_unique;
4752 }
a43942db 4753
4ad4eba5 4754 h = *sym_hash;
90c984fc
L
4755 /* We need to make sure that indirect symbol dynamic flags are
4756 updated. */
4757 hi = h;
4ad4eba5
AM
4758 while (h->root.type == bfd_link_hash_indirect
4759 || h->root.type == bfd_link_hash_warning)
4760 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3e7a7d11 4761
97196564
L
4762 /* Setting the index to -3 tells elf_link_output_extsym that
4763 this symbol is defined in a discarded section. */
4764 if (discarded)
4765 h->indx = -3;
4766
4ad4eba5
AM
4767 *sym_hash = h;
4768
37a9e49a 4769 new_weak = (flags & BSF_WEAK) != 0;
4ad4eba5
AM
4770 if (dynamic
4771 && definition
37a9e49a 4772 && new_weak
fcb93ecf 4773 && !bed->is_function_type (ELF_ST_TYPE (isym->st_info))
66eb6687 4774 && is_elf_hash_table (htab)
60d67dc8 4775 && h->u.alias == NULL)
4ad4eba5
AM
4776 {
4777 /* Keep a list of all weak defined non function symbols from
60d67dc8
AM
4778 a dynamic object, using the alias field. Later in this
4779 function we will set the alias field to the correct
4ad4eba5
AM
4780 value. We only put non-function symbols from dynamic
4781 objects on this list, because that happens to be the only
4782 time we need to know the normal symbol corresponding to a
4783 weak symbol, and the information is time consuming to
60d67dc8 4784 figure out. If the alias field is not already NULL,
4ad4eba5
AM
4785 then this symbol was already defined by some previous
4786 dynamic object, and we will be using that previous
4787 definition anyhow. */
4788
60d67dc8 4789 h->u.alias = weaks;
4ad4eba5 4790 weaks = h;
4ad4eba5
AM
4791 }
4792
4793 /* Set the alignment of a common symbol. */
a4d8e49b 4794 if ((common || bfd_is_com_section (sec))
4ad4eba5
AM
4795 && h->root.type == bfd_link_hash_common)
4796 {
4797 unsigned int align;
4798
a4d8e49b 4799 if (common)
af44c138
L
4800 align = bfd_log2 (isym->st_value);
4801 else
4802 {
4803 /* The new symbol is a common symbol in a shared object.
4804 We need to get the alignment from the section. */
4805 align = new_sec->alignment_power;
4806 }
595213d4 4807 if (align > old_alignment)
4ad4eba5
AM
4808 h->root.u.c.p->alignment_power = align;
4809 else
4810 h->root.u.c.p->alignment_power = old_alignment;
4811 }
4812
66eb6687 4813 if (is_elf_hash_table (htab))
4ad4eba5 4814 {
4f3fedcf
AM
4815 /* Set a flag in the hash table entry indicating the type of
4816 reference or definition we just found. A dynamic symbol
4817 is one which is referenced or defined by both a regular
4818 object and a shared object. */
4819 bfd_boolean dynsym = FALSE;
4820
4821 /* Plugin symbols aren't normal. Don't set def_regular or
4822 ref_regular for them, or make them dynamic. */
4823 if ((abfd->flags & BFD_PLUGIN) != 0)
4824 ;
4825 else if (! dynamic)
4826 {
4827 if (! definition)
4828 {
4829 h->ref_regular = 1;
4830 if (bind != STB_WEAK)
4831 h->ref_regular_nonweak = 1;
4832 }
4833 else
4834 {
4835 h->def_regular = 1;
4836 if (h->def_dynamic)
4837 {
4838 h->def_dynamic = 0;
4839 h->ref_dynamic = 1;
4840 }
4841 }
4842
4843 /* If the indirect symbol has been forced local, don't
4844 make the real symbol dynamic. */
4845 if ((h == hi || !hi->forced_local)
0e1862bb 4846 && (bfd_link_dll (info)
4f3fedcf
AM
4847 || h->def_dynamic
4848 || h->ref_dynamic))
4849 dynsym = TRUE;
4850 }
4851 else
4852 {
4853 if (! definition)
4854 {
4855 h->ref_dynamic = 1;
4856 hi->ref_dynamic = 1;
4857 }
4858 else
4859 {
4860 h->def_dynamic = 1;
4861 hi->def_dynamic = 1;
4862 }
4863
4864 /* If the indirect symbol has been forced local, don't
4865 make the real symbol dynamic. */
4866 if ((h == hi || !hi->forced_local)
4867 && (h->def_regular
4868 || h->ref_regular
60d67dc8
AM
4869 || (h->is_weakalias
4870 && weakdef (h)->dynindx != -1)))
4f3fedcf
AM
4871 dynsym = TRUE;
4872 }
4873
4874 /* Check to see if we need to add an indirect symbol for
4875 the default name. */
4876 if (definition
4877 || (!override && h->root.type == bfd_link_hash_common))
4878 if (!_bfd_elf_add_default_symbol (abfd, info, h, name, isym,
4879 sec, value, &old_bfd, &dynsym))
4880 goto error_free_vers;
4ad4eba5
AM
4881
4882 /* Check the alignment when a common symbol is involved. This
4883 can change when a common symbol is overridden by a normal
4884 definition or a common symbol is ignored due to the old
4885 normal definition. We need to make sure the maximum
4886 alignment is maintained. */
a4d8e49b 4887 if ((old_alignment || common)
4ad4eba5
AM
4888 && h->root.type != bfd_link_hash_common)
4889 {
4890 unsigned int common_align;
4891 unsigned int normal_align;
4892 unsigned int symbol_align;
4893 bfd *normal_bfd;
4894 bfd *common_bfd;
4895
3a81e825
AM
4896 BFD_ASSERT (h->root.type == bfd_link_hash_defined
4897 || h->root.type == bfd_link_hash_defweak);
4898
4ad4eba5
AM
4899 symbol_align = ffs (h->root.u.def.value) - 1;
4900 if (h->root.u.def.section->owner != NULL
0616a280
AM
4901 && (h->root.u.def.section->owner->flags
4902 & (DYNAMIC | BFD_PLUGIN)) == 0)
4ad4eba5
AM
4903 {
4904 normal_align = h->root.u.def.section->alignment_power;
4905 if (normal_align > symbol_align)
4906 normal_align = symbol_align;
4907 }
4908 else
4909 normal_align = symbol_align;
4910
4911 if (old_alignment)
4912 {
4913 common_align = old_alignment;
4914 common_bfd = old_bfd;
4915 normal_bfd = abfd;
4916 }
4917 else
4918 {
4919 common_align = bfd_log2 (isym->st_value);
4920 common_bfd = abfd;
4921 normal_bfd = old_bfd;
4922 }
4923
4924 if (normal_align < common_align)
d07676f8
NC
4925 {
4926 /* PR binutils/2735 */
4927 if (normal_bfd == NULL)
4eca0228 4928 _bfd_error_handler
695344c0 4929 /* xgettext:c-format */
9793eb77 4930 (_("warning: alignment %u of common symbol `%s' in %pB is"
871b3ab2 4931 " greater than the alignment (%u) of its section %pA"),
c08bb8dd
AM
4932 1 << common_align, name, common_bfd,
4933 1 << normal_align, h->root.u.def.section);
d07676f8 4934 else
4eca0228 4935 _bfd_error_handler
695344c0 4936 /* xgettext:c-format */
9793eb77 4937 (_("warning: alignment %u of symbol `%s' in %pB"
871b3ab2 4938 " is smaller than %u in %pB"),
c08bb8dd
AM
4939 1 << normal_align, name, normal_bfd,
4940 1 << common_align, common_bfd);
d07676f8 4941 }
4ad4eba5
AM
4942 }
4943
83ad0046 4944 /* Remember the symbol size if it isn't undefined. */
3a81e825
AM
4945 if (isym->st_size != 0
4946 && isym->st_shndx != SHN_UNDEF
4ad4eba5
AM
4947 && (definition || h->size == 0))
4948 {
83ad0046
L
4949 if (h->size != 0
4950 && h->size != isym->st_size
4951 && ! size_change_ok)
4eca0228 4952 _bfd_error_handler
695344c0 4953 /* xgettext:c-format */
9793eb77 4954 (_("warning: size of symbol `%s' changed"
2dcf00ce
AM
4955 " from %" PRIu64 " in %pB to %" PRIu64 " in %pB"),
4956 name, (uint64_t) h->size, old_bfd,
4957 (uint64_t) isym->st_size, abfd);
4ad4eba5
AM
4958
4959 h->size = isym->st_size;
4960 }
4961
4962 /* If this is a common symbol, then we always want H->SIZE
4963 to be the size of the common symbol. The code just above
4964 won't fix the size if a common symbol becomes larger. We
4965 don't warn about a size change here, because that is
4f3fedcf 4966 covered by --warn-common. Allow changes between different
fcb93ecf 4967 function types. */
4ad4eba5
AM
4968 if (h->root.type == bfd_link_hash_common)
4969 h->size = h->root.u.c.size;
4970
4971 if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE
37a9e49a
L
4972 && ((definition && !new_weak)
4973 || (old_weak && h->root.type == bfd_link_hash_common)
4974 || h->type == STT_NOTYPE))
4ad4eba5 4975 {
2955ec4c
L
4976 unsigned int type = ELF_ST_TYPE (isym->st_info);
4977
4978 /* Turn an IFUNC symbol from a DSO into a normal FUNC
4979 symbol. */
4980 if (type == STT_GNU_IFUNC
4981 && (abfd->flags & DYNAMIC) != 0)
4982 type = STT_FUNC;
4ad4eba5 4983
2955ec4c
L
4984 if (h->type != type)
4985 {
4986 if (h->type != STT_NOTYPE && ! type_change_ok)
695344c0 4987 /* xgettext:c-format */
4eca0228 4988 _bfd_error_handler
9793eb77 4989 (_("warning: type of symbol `%s' changed"
871b3ab2 4990 " from %d to %d in %pB"),
c08bb8dd 4991 name, h->type, type, abfd);
2955ec4c
L
4992
4993 h->type = type;
4994 }
4ad4eba5
AM
4995 }
4996
54ac0771 4997 /* Merge st_other field. */
b8417128 4998 elf_merge_st_other (abfd, h, isym, sec, definition, dynamic);
4ad4eba5 4999
c3df8c14 5000 /* We don't want to make debug symbol dynamic. */
0e1862bb
L
5001 if (definition
5002 && (sec->flags & SEC_DEBUGGING)
5003 && !bfd_link_relocatable (info))
c3df8c14
AM
5004 dynsym = FALSE;
5005
4f3fedcf
AM
5006 /* Nor should we make plugin symbols dynamic. */
5007 if ((abfd->flags & BFD_PLUGIN) != 0)
5008 dynsym = FALSE;
5009
35fc36a8 5010 if (definition)
35399224
L
5011 {
5012 h->target_internal = isym->st_target_internal;
5013 h->unique_global = (flags & BSF_GNU_UNIQUE) != 0;
5014 }
35fc36a8 5015
4ad4eba5
AM
5016 if (definition && !dynamic)
5017 {
5018 char *p = strchr (name, ELF_VER_CHR);
5019 if (p != NULL && p[1] != ELF_VER_CHR)
5020 {
5021 /* Queue non-default versions so that .symver x, x@FOO
5022 aliases can be checked. */
66eb6687 5023 if (!nondeflt_vers)
4ad4eba5 5024 {
66eb6687
AM
5025 amt = ((isymend - isym + 1)
5026 * sizeof (struct elf_link_hash_entry *));
ca4be51c
AM
5027 nondeflt_vers
5028 = (struct elf_link_hash_entry **) bfd_malloc (amt);
14b1c01e
AM
5029 if (!nondeflt_vers)
5030 goto error_free_vers;
4ad4eba5 5031 }
66eb6687 5032 nondeflt_vers[nondeflt_vers_cnt++] = h;
4ad4eba5
AM
5033 }
5034 }
5035
5036 if (dynsym && h->dynindx == -1)
5037 {
c152c796 5038 if (! bfd_elf_link_record_dynamic_symbol (info, h))
4ad4eba5 5039 goto error_free_vers;
60d67dc8
AM
5040 if (h->is_weakalias
5041 && weakdef (h)->dynindx == -1)
4ad4eba5 5042 {
60d67dc8 5043 if (!bfd_elf_link_record_dynamic_symbol (info, weakdef (h)))
4ad4eba5
AM
5044 goto error_free_vers;
5045 }
5046 }
1f599d0e 5047 else if (h->dynindx != -1)
4ad4eba5
AM
5048 /* If the symbol already has a dynamic index, but
5049 visibility says it should not be visible, turn it into
5050 a local symbol. */
5051 switch (ELF_ST_VISIBILITY (h->other))
5052 {
5053 case STV_INTERNAL:
5054 case STV_HIDDEN:
5055 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
5056 dynsym = FALSE;
5057 break;
5058 }
5059
aef28989
L
5060 /* Don't add DT_NEEDED for references from the dummy bfd nor
5061 for unmatched symbol. */
4ad4eba5 5062 if (!add_needed
aef28989 5063 && matched
4ad4eba5 5064 && definition
010e5ae2 5065 && ((dynsym
ffa9430d 5066 && h->ref_regular_nonweak
4f3fedcf
AM
5067 && (old_bfd == NULL
5068 || (old_bfd->flags & BFD_PLUGIN) == 0))
ffa9430d 5069 || (h->ref_dynamic_nonweak
010e5ae2 5070 && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
7b15fa7a
AM
5071 && !on_needed_list (elf_dt_name (abfd),
5072 htab->needed, NULL))))
4ad4eba5
AM
5073 {
5074 int ret;
5075 const char *soname = elf_dt_name (abfd);
5076
16e4ecc0
AM
5077 info->callbacks->minfo ("%!", soname, old_bfd,
5078 h->root.root.string);
5079
4ad4eba5
AM
5080 /* A symbol from a library loaded via DT_NEEDED of some
5081 other library is referenced by a regular object.
e56f61be 5082 Add a DT_NEEDED entry for it. Issue an error if
b918acf9
NC
5083 --no-add-needed is used and the reference was not
5084 a weak one. */
4f3fedcf 5085 if (old_bfd != NULL
b918acf9 5086 && (elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
e56f61be 5087 {
4eca0228 5088 _bfd_error_handler
695344c0 5089 /* xgettext:c-format */
871b3ab2 5090 (_("%pB: undefined reference to symbol '%s'"),
4f3fedcf 5091 old_bfd, name);
ff5ac77b 5092 bfd_set_error (bfd_error_missing_dso);
e56f61be
L
5093 goto error_free_vers;
5094 }
5095
a50b1753 5096 elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class)
ca4be51c 5097 (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED);
a5db907e 5098
4ad4eba5 5099 add_needed = TRUE;
7e9f0867 5100 ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
4ad4eba5
AM
5101 if (ret < 0)
5102 goto error_free_vers;
5103
5104 BFD_ASSERT (ret == 0);
5105 }
5106 }
5107 }
5108
a83ef4d1
L
5109 if (info->lto_plugin_active
5110 && !bfd_link_relocatable (info)
5111 && (abfd->flags & BFD_PLUGIN) == 0
5112 && !just_syms
5113 && extsymcount)
5114 {
5115 int r_sym_shift;
5116
5117 if (bed->s->arch_size == 32)
5118 r_sym_shift = 8;
5119 else
5120 r_sym_shift = 32;
5121
5122 /* If linker plugin is enabled, set non_ir_ref_regular on symbols
5123 referenced in regular objects so that linker plugin will get
5124 the correct symbol resolution. */
5125
5126 sym_hash = elf_sym_hashes (abfd);
5127 for (s = abfd->sections; s != NULL; s = s->next)
5128 {
5129 Elf_Internal_Rela *internal_relocs;
5130 Elf_Internal_Rela *rel, *relend;
5131
5132 /* Don't check relocations in excluded sections. */
5133 if ((s->flags & SEC_RELOC) == 0
5134 || s->reloc_count == 0
5135 || (s->flags & SEC_EXCLUDE) != 0
5136 || ((info->strip == strip_all
5137 || info->strip == strip_debugger)
5138 && (s->flags & SEC_DEBUGGING) != 0))
5139 continue;
5140
5141 internal_relocs = _bfd_elf_link_read_relocs (abfd, s, NULL,
5142 NULL,
5143 info->keep_memory);
5144 if (internal_relocs == NULL)
5145 goto error_free_vers;
5146
5147 rel = internal_relocs;
5148 relend = rel + s->reloc_count;
5149 for ( ; rel < relend; rel++)
5150 {
5151 unsigned long r_symndx = rel->r_info >> r_sym_shift;
5152 struct elf_link_hash_entry *h;
5153
5154 /* Skip local symbols. */
5155 if (r_symndx < extsymoff)
5156 continue;
5157
5158 h = sym_hash[r_symndx - extsymoff];
5159 if (h != NULL)
5160 h->root.non_ir_ref_regular = 1;
5161 }
5162
5163 if (elf_section_data (s)->relocs != internal_relocs)
5164 free (internal_relocs);
5165 }
5166 }
5167
66eb6687
AM
5168 if (extversym != NULL)
5169 {
5170 free (extversym);
5171 extversym = NULL;
5172 }
5173
5174 if (isymbuf != NULL)
5175 {
5176 free (isymbuf);
5177 isymbuf = NULL;
5178 }
5179
5180 if ((elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0)
5181 {
5182 unsigned int i;
5183
5184 /* Restore the symbol table. */
f45794cb
AM
5185 old_ent = (char *) old_tab + tabsize;
5186 memset (elf_sym_hashes (abfd), 0,
5187 extsymcount * sizeof (struct elf_link_hash_entry *));
4f87808c
AM
5188 htab->root.table.table = old_table;
5189 htab->root.table.size = old_size;
5190 htab->root.table.count = old_count;
66eb6687 5191 memcpy (htab->root.table.table, old_tab, tabsize);
66eb6687
AM
5192 htab->root.undefs = old_undefs;
5193 htab->root.undefs_tail = old_undefs_tail;
5b677558
AM
5194 _bfd_elf_strtab_restore (htab->dynstr, old_strtab);
5195 free (old_strtab);
5196 old_strtab = NULL;
66eb6687
AM
5197 for (i = 0; i < htab->root.table.size; i++)
5198 {
5199 struct bfd_hash_entry *p;
5200 struct elf_link_hash_entry *h;
3e0882af
L
5201 bfd_size_type size;
5202 unsigned int alignment_power;
4070765b 5203 unsigned int non_ir_ref_dynamic;
66eb6687
AM
5204
5205 for (p = htab->root.table.table[i]; p != NULL; p = p->next)
5206 {
5207 h = (struct elf_link_hash_entry *) p;
2de92251
AM
5208 if (h->root.type == bfd_link_hash_warning)
5209 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2de92251 5210
3e0882af
L
5211 /* Preserve the maximum alignment and size for common
5212 symbols even if this dynamic lib isn't on DT_NEEDED
a4542f1b 5213 since it can still be loaded at run time by another
3e0882af
L
5214 dynamic lib. */
5215 if (h->root.type == bfd_link_hash_common)
5216 {
5217 size = h->root.u.c.size;
5218 alignment_power = h->root.u.c.p->alignment_power;
5219 }
5220 else
5221 {
5222 size = 0;
5223 alignment_power = 0;
5224 }
4070765b 5225 /* Preserve non_ir_ref_dynamic so that this symbol
59fa66c5
L
5226 will be exported when the dynamic lib becomes needed
5227 in the second pass. */
4070765b 5228 non_ir_ref_dynamic = h->root.non_ir_ref_dynamic;
66eb6687
AM
5229 memcpy (p, old_ent, htab->root.table.entsize);
5230 old_ent = (char *) old_ent + htab->root.table.entsize;
2de92251
AM
5231 h = (struct elf_link_hash_entry *) p;
5232 if (h->root.type == bfd_link_hash_warning)
5233 {
5234 memcpy (h->root.u.i.link, old_ent, htab->root.table.entsize);
5235 old_ent = (char *) old_ent + htab->root.table.entsize;
a4542f1b 5236 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2de92251 5237 }
a4542f1b 5238 if (h->root.type == bfd_link_hash_common)
3e0882af
L
5239 {
5240 if (size > h->root.u.c.size)
5241 h->root.u.c.size = size;
5242 if (alignment_power > h->root.u.c.p->alignment_power)
5243 h->root.u.c.p->alignment_power = alignment_power;
5244 }
4070765b 5245 h->root.non_ir_ref_dynamic = non_ir_ref_dynamic;
66eb6687
AM
5246 }
5247 }
5248
5061a885
AM
5249 /* Make a special call to the linker "notice" function to
5250 tell it that symbols added for crefs may need to be removed. */
e5034e59 5251 if (!(*bed->notice_as_needed) (abfd, info, notice_not_needed))
9af2a943 5252 goto error_free_vers;
5061a885 5253
66eb6687
AM
5254 free (old_tab);
5255 objalloc_free_block ((struct objalloc *) htab->root.table.memory,
5256 alloc_mark);
5257 if (nondeflt_vers != NULL)
5258 free (nondeflt_vers);
5259 return TRUE;
5260 }
2de92251 5261
66eb6687
AM
5262 if (old_tab != NULL)
5263 {
e5034e59 5264 if (!(*bed->notice_as_needed) (abfd, info, notice_needed))
9af2a943 5265 goto error_free_vers;
66eb6687
AM
5266 free (old_tab);
5267 old_tab = NULL;
5268 }
5269
c6e8a9a8
L
5270 /* Now that all the symbols from this input file are created, if
5271 not performing a relocatable link, handle .symver foo, foo@BAR
5272 such that any relocs against foo become foo@BAR. */
0e1862bb 5273 if (!bfd_link_relocatable (info) && nondeflt_vers != NULL)
4ad4eba5 5274 {
ef53be89 5275 size_t cnt, symidx;
4ad4eba5
AM
5276
5277 for (cnt = 0; cnt < nondeflt_vers_cnt; ++cnt)
5278 {
5279 struct elf_link_hash_entry *h = nondeflt_vers[cnt], *hi;
5280 char *shortname, *p;
5281
5282 p = strchr (h->root.root.string, ELF_VER_CHR);
5283 if (p == NULL
5284 || (h->root.type != bfd_link_hash_defined
5285 && h->root.type != bfd_link_hash_defweak))
5286 continue;
5287
5288 amt = p - h->root.root.string;
a50b1753 5289 shortname = (char *) bfd_malloc (amt + 1);
14b1c01e
AM
5290 if (!shortname)
5291 goto error_free_vers;
4ad4eba5
AM
5292 memcpy (shortname, h->root.root.string, amt);
5293 shortname[amt] = '\0';
5294
5295 hi = (struct elf_link_hash_entry *)
66eb6687 5296 bfd_link_hash_lookup (&htab->root, shortname,
4ad4eba5
AM
5297 FALSE, FALSE, FALSE);
5298 if (hi != NULL
5299 && hi->root.type == h->root.type
5300 && hi->root.u.def.value == h->root.u.def.value
5301 && hi->root.u.def.section == h->root.u.def.section)
5302 {
5303 (*bed->elf_backend_hide_symbol) (info, hi, TRUE);
5304 hi->root.type = bfd_link_hash_indirect;
5305 hi->root.u.i.link = (struct bfd_link_hash_entry *) h;
fcfa13d2 5306 (*bed->elf_backend_copy_indirect_symbol) (info, h, hi);
4ad4eba5
AM
5307 sym_hash = elf_sym_hashes (abfd);
5308 if (sym_hash)
5309 for (symidx = 0; symidx < extsymcount; ++symidx)
5310 if (sym_hash[symidx] == hi)
5311 {
5312 sym_hash[symidx] = h;
5313 break;
5314 }
5315 }
5316 free (shortname);
5317 }
5318 free (nondeflt_vers);
5319 nondeflt_vers = NULL;
5320 }
5321
60d67dc8 5322 /* Now set the alias field correctly for all the weak defined
4ad4eba5
AM
5323 symbols we found. The only way to do this is to search all the
5324 symbols. Since we only need the information for non functions in
5325 dynamic objects, that's the only time we actually put anything on
5326 the list WEAKS. We need this information so that if a regular
5327 object refers to a symbol defined weakly in a dynamic object, the
5328 real symbol in the dynamic object is also put in the dynamic
5329 symbols; we also must arrange for both symbols to point to the
5330 same memory location. We could handle the general case of symbol
5331 aliasing, but a general symbol alias can only be generated in
5332 assembler code, handling it correctly would be very time
5333 consuming, and other ELF linkers don't handle general aliasing
5334 either. */
5335 if (weaks != NULL)
5336 {
5337 struct elf_link_hash_entry **hpp;
5338 struct elf_link_hash_entry **hppend;
5339 struct elf_link_hash_entry **sorted_sym_hash;
5340 struct elf_link_hash_entry *h;
5341 size_t sym_count;
5342
5343 /* Since we have to search the whole symbol list for each weak
5344 defined symbol, search time for N weak defined symbols will be
5345 O(N^2). Binary search will cut it down to O(NlogN). */
ef53be89
AM
5346 amt = extsymcount;
5347 amt *= sizeof (struct elf_link_hash_entry *);
a50b1753 5348 sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt);
4ad4eba5
AM
5349 if (sorted_sym_hash == NULL)
5350 goto error_return;
5351 sym_hash = sorted_sym_hash;
5352 hpp = elf_sym_hashes (abfd);
5353 hppend = hpp + extsymcount;
5354 sym_count = 0;
5355 for (; hpp < hppend; hpp++)
5356 {
5357 h = *hpp;
5358 if (h != NULL
5359 && h->root.type == bfd_link_hash_defined
fcb93ecf 5360 && !bed->is_function_type (h->type))
4ad4eba5
AM
5361 {
5362 *sym_hash = h;
5363 sym_hash++;
5364 sym_count++;
5365 }
5366 }
5367
5368 qsort (sorted_sym_hash, sym_count,
5369 sizeof (struct elf_link_hash_entry *),
5370 elf_sort_symbol);
5371
5372 while (weaks != NULL)
5373 {
5374 struct elf_link_hash_entry *hlook;
5375 asection *slook;
5376 bfd_vma vlook;
ed54588d 5377 size_t i, j, idx = 0;
4ad4eba5
AM
5378
5379 hlook = weaks;
60d67dc8
AM
5380 weaks = hlook->u.alias;
5381 hlook->u.alias = NULL;
4ad4eba5 5382
e3e53eed
AM
5383 if (hlook->root.type != bfd_link_hash_defined
5384 && hlook->root.type != bfd_link_hash_defweak)
5385 continue;
5386
4ad4eba5
AM
5387 slook = hlook->root.u.def.section;
5388 vlook = hlook->root.u.def.value;
5389
4ad4eba5
AM
5390 i = 0;
5391 j = sym_count;
14160578 5392 while (i != j)
4ad4eba5
AM
5393 {
5394 bfd_signed_vma vdiff;
5395 idx = (i + j) / 2;
14160578 5396 h = sorted_sym_hash[idx];
4ad4eba5
AM
5397 vdiff = vlook - h->root.u.def.value;
5398 if (vdiff < 0)
5399 j = idx;
5400 else if (vdiff > 0)
5401 i = idx + 1;
5402 else
5403 {
d3435ae8 5404 int sdiff = slook->id - h->root.u.def.section->id;
4ad4eba5
AM
5405 if (sdiff < 0)
5406 j = idx;
5407 else if (sdiff > 0)
5408 i = idx + 1;
5409 else
14160578 5410 break;
4ad4eba5
AM
5411 }
5412 }
5413
5414 /* We didn't find a value/section match. */
14160578 5415 if (i == j)
4ad4eba5
AM
5416 continue;
5417
14160578
AM
5418 /* With multiple aliases, or when the weak symbol is already
5419 strongly defined, we have multiple matching symbols and
5420 the binary search above may land on any of them. Step
5421 one past the matching symbol(s). */
5422 while (++idx != j)
5423 {
5424 h = sorted_sym_hash[idx];
5425 if (h->root.u.def.section != slook
5426 || h->root.u.def.value != vlook)
5427 break;
5428 }
5429
5430 /* Now look back over the aliases. Since we sorted by size
5431 as well as value and section, we'll choose the one with
5432 the largest size. */
5433 while (idx-- != i)
4ad4eba5 5434 {
14160578 5435 h = sorted_sym_hash[idx];
4ad4eba5
AM
5436
5437 /* Stop if value or section doesn't match. */
14160578
AM
5438 if (h->root.u.def.section != slook
5439 || h->root.u.def.value != vlook)
4ad4eba5
AM
5440 break;
5441 else if (h != hlook)
5442 {
60d67dc8
AM
5443 struct elf_link_hash_entry *t;
5444
5445 hlook->u.alias = h;
5446 hlook->is_weakalias = 1;
5447 t = h;
5448 if (t->u.alias != NULL)
5449 while (t->u.alias != h)
5450 t = t->u.alias;
5451 t->u.alias = hlook;
4ad4eba5
AM
5452
5453 /* If the weak definition is in the list of dynamic
5454 symbols, make sure the real definition is put
5455 there as well. */
5456 if (hlook->dynindx != -1 && h->dynindx == -1)
5457 {
c152c796 5458 if (! bfd_elf_link_record_dynamic_symbol (info, h))
4dd07732
AM
5459 {
5460 err_free_sym_hash:
5461 free (sorted_sym_hash);
5462 goto error_return;
5463 }
4ad4eba5
AM
5464 }
5465
5466 /* If the real definition is in the list of dynamic
5467 symbols, make sure the weak definition is put
5468 there as well. If we don't do this, then the
5469 dynamic loader might not merge the entries for the
5470 real definition and the weak definition. */
5471 if (h->dynindx != -1 && hlook->dynindx == -1)
5472 {
c152c796 5473 if (! bfd_elf_link_record_dynamic_symbol (info, hlook))
4dd07732 5474 goto err_free_sym_hash;
4ad4eba5
AM
5475 }
5476 break;
5477 }
5478 }
5479 }
5480
5481 free (sorted_sym_hash);
5482 }
5483
33177bb1
AM
5484 if (bed->check_directives
5485 && !(*bed->check_directives) (abfd, info))
5486 return FALSE;
85fbca6a 5487
4ad4eba5
AM
5488 /* If this is a non-traditional link, try to optimize the handling
5489 of the .stab/.stabstr sections. */
5490 if (! dynamic
5491 && ! info->traditional_format
66eb6687 5492 && is_elf_hash_table (htab)
4ad4eba5
AM
5493 && (info->strip != strip_all && info->strip != strip_debugger))
5494 {
5495 asection *stabstr;
5496
5497 stabstr = bfd_get_section_by_name (abfd, ".stabstr");
5498 if (stabstr != NULL)
5499 {
5500 bfd_size_type string_offset = 0;
5501 asection *stab;
5502
5503 for (stab = abfd->sections; stab; stab = stab->next)
0112cd26 5504 if (CONST_STRNEQ (stab->name, ".stab")
4ad4eba5
AM
5505 && (!stab->name[5] ||
5506 (stab->name[5] == '.' && ISDIGIT (stab->name[6])))
5507 && (stab->flags & SEC_MERGE) == 0
5508 && !bfd_is_abs_section (stab->output_section))
5509 {
5510 struct bfd_elf_section_data *secdata;
5511
5512 secdata = elf_section_data (stab);
66eb6687
AM
5513 if (! _bfd_link_section_stabs (abfd, &htab->stab_info, stab,
5514 stabstr, &secdata->sec_info,
4ad4eba5
AM
5515 &string_offset))
5516 goto error_return;
5517 if (secdata->sec_info)
dbaa2011 5518 stab->sec_info_type = SEC_INFO_TYPE_STABS;
4ad4eba5
AM
5519 }
5520 }
5521 }
5522
66eb6687 5523 if (is_elf_hash_table (htab) && add_needed)
4ad4eba5
AM
5524 {
5525 /* Add this bfd to the loaded list. */
5526 struct elf_link_loaded_list *n;
5527
ca4be51c 5528 n = (struct elf_link_loaded_list *) bfd_alloc (abfd, sizeof (*n));
4ad4eba5
AM
5529 if (n == NULL)
5530 goto error_return;
5531 n->abfd = abfd;
66eb6687
AM
5532 n->next = htab->loaded;
5533 htab->loaded = n;
4ad4eba5
AM
5534 }
5535
5536 return TRUE;
5537
5538 error_free_vers:
66eb6687
AM
5539 if (old_tab != NULL)
5540 free (old_tab);
5b677558
AM
5541 if (old_strtab != NULL)
5542 free (old_strtab);
4ad4eba5
AM
5543 if (nondeflt_vers != NULL)
5544 free (nondeflt_vers);
5545 if (extversym != NULL)
5546 free (extversym);
5547 error_free_sym:
5548 if (isymbuf != NULL)
5549 free (isymbuf);
5550 error_return:
5551 return FALSE;
5552}
5553
8387904d
AM
5554/* Return the linker hash table entry of a symbol that might be
5555 satisfied by an archive symbol. Return -1 on error. */
5556
5557struct elf_link_hash_entry *
5558_bfd_elf_archive_symbol_lookup (bfd *abfd,
5559 struct bfd_link_info *info,
5560 const char *name)
5561{
5562 struct elf_link_hash_entry *h;
5563 char *p, *copy;
5564 size_t len, first;
5565
2a41f396 5566 h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE);
8387904d
AM
5567 if (h != NULL)
5568 return h;
5569
5570 /* If this is a default version (the name contains @@), look up the
5571 symbol again with only one `@' as well as without the version.
5572 The effect is that references to the symbol with and without the
5573 version will be matched by the default symbol in the archive. */
5574
5575 p = strchr (name, ELF_VER_CHR);
5576 if (p == NULL || p[1] != ELF_VER_CHR)
5577 return h;
5578
5579 /* First check with only one `@'. */
5580 len = strlen (name);
a50b1753 5581 copy = (char *) bfd_alloc (abfd, len);
8387904d 5582 if (copy == NULL)
e99955cd 5583 return (struct elf_link_hash_entry *) -1;
8387904d
AM
5584
5585 first = p - name + 1;
5586 memcpy (copy, name, first);
5587 memcpy (copy + first, name + first + 1, len - first);
5588
2a41f396 5589 h = elf_link_hash_lookup (elf_hash_table (info), copy, FALSE, FALSE, TRUE);
8387904d
AM
5590 if (h == NULL)
5591 {
5592 /* We also need to check references to the symbol without the
5593 version. */
5594 copy[first - 1] = '\0';
5595 h = elf_link_hash_lookup (elf_hash_table (info), copy,
2a41f396 5596 FALSE, FALSE, TRUE);
8387904d
AM
5597 }
5598
5599 bfd_release (abfd, copy);
5600 return h;
5601}
5602
0ad989f9 5603/* Add symbols from an ELF archive file to the linker hash table. We
13e570f8
AM
5604 don't use _bfd_generic_link_add_archive_symbols because we need to
5605 handle versioned symbols.
0ad989f9
L
5606
5607 Fortunately, ELF archive handling is simpler than that done by
5608 _bfd_generic_link_add_archive_symbols, which has to allow for a.out
5609 oddities. In ELF, if we find a symbol in the archive map, and the
5610 symbol is currently undefined, we know that we must pull in that
5611 object file.
5612
5613 Unfortunately, we do have to make multiple passes over the symbol
5614 table until nothing further is resolved. */
5615
4ad4eba5
AM
5616static bfd_boolean
5617elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
0ad989f9
L
5618{
5619 symindex c;
13e570f8 5620 unsigned char *included = NULL;
0ad989f9
L
5621 carsym *symdefs;
5622 bfd_boolean loop;
5623 bfd_size_type amt;
8387904d
AM
5624 const struct elf_backend_data *bed;
5625 struct elf_link_hash_entry * (*archive_symbol_lookup)
5626 (bfd *, struct bfd_link_info *, const char *);
0ad989f9
L
5627
5628 if (! bfd_has_map (abfd))
5629 {
5630 /* An empty archive is a special case. */
5631 if (bfd_openr_next_archived_file (abfd, NULL) == NULL)
5632 return TRUE;
5633 bfd_set_error (bfd_error_no_armap);
5634 return FALSE;
5635 }
5636
5637 /* Keep track of all symbols we know to be already defined, and all
5638 files we know to be already included. This is to speed up the
5639 second and subsequent passes. */
5640 c = bfd_ardata (abfd)->symdef_count;
5641 if (c == 0)
5642 return TRUE;
5643 amt = c;
13e570f8
AM
5644 amt *= sizeof (*included);
5645 included = (unsigned char *) bfd_zmalloc (amt);
5646 if (included == NULL)
5647 return FALSE;
0ad989f9
L
5648
5649 symdefs = bfd_ardata (abfd)->symdefs;
8387904d
AM
5650 bed = get_elf_backend_data (abfd);
5651 archive_symbol_lookup = bed->elf_backend_archive_symbol_lookup;
0ad989f9
L
5652
5653 do
5654 {
5655 file_ptr last;
5656 symindex i;
5657 carsym *symdef;
5658 carsym *symdefend;
5659
5660 loop = FALSE;
5661 last = -1;
5662
5663 symdef = symdefs;
5664 symdefend = symdef + c;
5665 for (i = 0; symdef < symdefend; symdef++, i++)
5666 {
5667 struct elf_link_hash_entry *h;
5668 bfd *element;
5669 struct bfd_link_hash_entry *undefs_tail;
5670 symindex mark;
5671
13e570f8 5672 if (included[i])
0ad989f9
L
5673 continue;
5674 if (symdef->file_offset == last)
5675 {
5676 included[i] = TRUE;
5677 continue;
5678 }
5679
8387904d 5680 h = archive_symbol_lookup (abfd, info, symdef->name);
e99955cd 5681 if (h == (struct elf_link_hash_entry *) -1)
8387904d 5682 goto error_return;
0ad989f9
L
5683
5684 if (h == NULL)
5685 continue;
5686
5687 if (h->root.type == bfd_link_hash_common)
5688 {
5689 /* We currently have a common symbol. The archive map contains
5690 a reference to this symbol, so we may want to include it. We
5691 only want to include it however, if this archive element
5692 contains a definition of the symbol, not just another common
5693 declaration of it.
5694
5695 Unfortunately some archivers (including GNU ar) will put
5696 declarations of common symbols into their archive maps, as
5697 well as real definitions, so we cannot just go by the archive
5698 map alone. Instead we must read in the element's symbol
5699 table and check that to see what kind of symbol definition
5700 this is. */
5701 if (! elf_link_is_defined_archive_symbol (abfd, symdef))
5702 continue;
5703 }
5704 else if (h->root.type != bfd_link_hash_undefined)
5705 {
5706 if (h->root.type != bfd_link_hash_undefweak)
13e570f8
AM
5707 /* Symbol must be defined. Don't check it again. */
5708 included[i] = TRUE;
0ad989f9
L
5709 continue;
5710 }
5711
5712 /* We need to include this archive member. */
5713 element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
5714 if (element == NULL)
5715 goto error_return;
5716
5717 if (! bfd_check_format (element, bfd_object))
5718 goto error_return;
5719
0ad989f9
L
5720 undefs_tail = info->hash->undefs_tail;
5721
0e144ba7
AM
5722 if (!(*info->callbacks
5723 ->add_archive_element) (info, element, symdef->name, &element))
b95a0a31 5724 continue;
0e144ba7 5725 if (!bfd_link_add_symbols (element, info))
0ad989f9
L
5726 goto error_return;
5727
5728 /* If there are any new undefined symbols, we need to make
5729 another pass through the archive in order to see whether
5730 they can be defined. FIXME: This isn't perfect, because
5731 common symbols wind up on undefs_tail and because an
5732 undefined symbol which is defined later on in this pass
5733 does not require another pass. This isn't a bug, but it
5734 does make the code less efficient than it could be. */
5735 if (undefs_tail != info->hash->undefs_tail)
5736 loop = TRUE;
5737
5738 /* Look backward to mark all symbols from this object file
5739 which we have already seen in this pass. */
5740 mark = i;
5741 do
5742 {
5743 included[mark] = TRUE;
5744 if (mark == 0)
5745 break;
5746 --mark;
5747 }
5748 while (symdefs[mark].file_offset == symdef->file_offset);
5749
5750 /* We mark subsequent symbols from this object file as we go
5751 on through the loop. */
5752 last = symdef->file_offset;
5753 }
5754 }
5755 while (loop);
5756
0ad989f9
L
5757 free (included);
5758
5759 return TRUE;
5760
5761 error_return:
0ad989f9
L
5762 if (included != NULL)
5763 free (included);
5764 return FALSE;
5765}
4ad4eba5
AM
5766
5767/* Given an ELF BFD, add symbols to the global hash table as
5768 appropriate. */
5769
5770bfd_boolean
5771bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
5772{
5773 switch (bfd_get_format (abfd))
5774 {
5775 case bfd_object:
5776 return elf_link_add_object_symbols (abfd, info);
5777 case bfd_archive:
5778 return elf_link_add_archive_symbols (abfd, info);
5779 default:
5780 bfd_set_error (bfd_error_wrong_format);
5781 return FALSE;
5782 }
5783}
5a580b3a 5784\f
14b1c01e
AM
5785struct hash_codes_info
5786{
5787 unsigned long *hashcodes;
5788 bfd_boolean error;
5789};
a0c8462f 5790
5a580b3a
AM
5791/* This function will be called though elf_link_hash_traverse to store
5792 all hash value of the exported symbols in an array. */
5793
5794static bfd_boolean
5795elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data)
5796{
a50b1753 5797 struct hash_codes_info *inf = (struct hash_codes_info *) data;
5a580b3a 5798 const char *name;
5a580b3a
AM
5799 unsigned long ha;
5800 char *alc = NULL;
5801
5a580b3a
AM
5802 /* Ignore indirect symbols. These are added by the versioning code. */
5803 if (h->dynindx == -1)
5804 return TRUE;
5805
5806 name = h->root.root.string;
422f1182 5807 if (h->versioned >= versioned)
5a580b3a 5808 {
422f1182
L
5809 char *p = strchr (name, ELF_VER_CHR);
5810 if (p != NULL)
14b1c01e 5811 {
422f1182
L
5812 alc = (char *) bfd_malloc (p - name + 1);
5813 if (alc == NULL)
5814 {
5815 inf->error = TRUE;
5816 return FALSE;
5817 }
5818 memcpy (alc, name, p - name);
5819 alc[p - name] = '\0';
5820 name = alc;
14b1c01e 5821 }
5a580b3a
AM
5822 }
5823
5824 /* Compute the hash value. */
5825 ha = bfd_elf_hash (name);
5826
5827 /* Store the found hash value in the array given as the argument. */
14b1c01e 5828 *(inf->hashcodes)++ = ha;
5a580b3a
AM
5829
5830 /* And store it in the struct so that we can put it in the hash table
5831 later. */
f6e332e6 5832 h->u.elf_hash_value = ha;
5a580b3a
AM
5833
5834 if (alc != NULL)
5835 free (alc);
5836
5837 return TRUE;
5838}
5839
fdc90cb4
JJ
5840struct collect_gnu_hash_codes
5841{
5842 bfd *output_bfd;
5843 const struct elf_backend_data *bed;
5844 unsigned long int nsyms;
5845 unsigned long int maskbits;
5846 unsigned long int *hashcodes;
5847 unsigned long int *hashval;
5848 unsigned long int *indx;
5849 unsigned long int *counts;
5850 bfd_vma *bitmask;
5851 bfd_byte *contents;
5852 long int min_dynindx;
5853 unsigned long int bucketcount;
5854 unsigned long int symindx;
5855 long int local_indx;
5856 long int shift1, shift2;
5857 unsigned long int mask;
14b1c01e 5858 bfd_boolean error;
fdc90cb4
JJ
5859};
5860
5861/* This function will be called though elf_link_hash_traverse to store
5862 all hash value of the exported symbols in an array. */
5863
5864static bfd_boolean
5865elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data)
5866{
a50b1753 5867 struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
fdc90cb4 5868 const char *name;
fdc90cb4
JJ
5869 unsigned long ha;
5870 char *alc = NULL;
5871
fdc90cb4
JJ
5872 /* Ignore indirect symbols. These are added by the versioning code. */
5873 if (h->dynindx == -1)
5874 return TRUE;
5875
5876 /* Ignore also local symbols and undefined symbols. */
5877 if (! (*s->bed->elf_hash_symbol) (h))
5878 return TRUE;
5879
5880 name = h->root.root.string;
422f1182 5881 if (h->versioned >= versioned)
fdc90cb4 5882 {
422f1182
L
5883 char *p = strchr (name, ELF_VER_CHR);
5884 if (p != NULL)
14b1c01e 5885 {
422f1182
L
5886 alc = (char *) bfd_malloc (p - name + 1);
5887 if (alc == NULL)
5888 {
5889 s->error = TRUE;
5890 return FALSE;
5891 }
5892 memcpy (alc, name, p - name);
5893 alc[p - name] = '\0';
5894 name = alc;
14b1c01e 5895 }
fdc90cb4
JJ
5896 }
5897
5898 /* Compute the hash value. */
5899 ha = bfd_elf_gnu_hash (name);
5900
5901 /* Store the found hash value in the array for compute_bucket_count,
5902 and also for .dynsym reordering purposes. */
5903 s->hashcodes[s->nsyms] = ha;
5904 s->hashval[h->dynindx] = ha;
5905 ++s->nsyms;
5906 if (s->min_dynindx < 0 || s->min_dynindx > h->dynindx)
5907 s->min_dynindx = h->dynindx;
5908
5909 if (alc != NULL)
5910 free (alc);
5911
5912 return TRUE;
5913}
5914
5915/* This function will be called though elf_link_hash_traverse to do
5916 final dynaminc symbol renumbering. */
5917
5918static bfd_boolean
5919elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data)
5920{
a50b1753 5921 struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data;
fdc90cb4
JJ
5922 unsigned long int bucket;
5923 unsigned long int val;
5924
fdc90cb4
JJ
5925 /* Ignore indirect symbols. */
5926 if (h->dynindx == -1)
5927 return TRUE;
5928
5929 /* Ignore also local symbols and undefined symbols. */
5930 if (! (*s->bed->elf_hash_symbol) (h))
5931 {
5932 if (h->dynindx >= s->min_dynindx)
5933 h->dynindx = s->local_indx++;
5934 return TRUE;
5935 }
5936
5937 bucket = s->hashval[h->dynindx] % s->bucketcount;
5938 val = (s->hashval[h->dynindx] >> s->shift1)
5939 & ((s->maskbits >> s->shift1) - 1);
5940 s->bitmask[val] |= ((bfd_vma) 1) << (s->hashval[h->dynindx] & s->mask);
5941 s->bitmask[val]
5942 |= ((bfd_vma) 1) << ((s->hashval[h->dynindx] >> s->shift2) & s->mask);
5943 val = s->hashval[h->dynindx] & ~(unsigned long int) 1;
5944 if (s->counts[bucket] == 1)
5945 /* Last element terminates the chain. */
5946 val |= 1;
5947 bfd_put_32 (s->output_bfd, val,
5948 s->contents + (s->indx[bucket] - s->symindx) * 4);
5949 --s->counts[bucket];
5950 h->dynindx = s->indx[bucket]++;
5951 return TRUE;
5952}
5953
5954/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */
5955
5956bfd_boolean
5957_bfd_elf_hash_symbol (struct elf_link_hash_entry *h)
5958{
5959 return !(h->forced_local
5960 || h->root.type == bfd_link_hash_undefined
5961 || h->root.type == bfd_link_hash_undefweak
5962 || ((h->root.type == bfd_link_hash_defined
5963 || h->root.type == bfd_link_hash_defweak)
5964 && h->root.u.def.section->output_section == NULL));
5965}
5966
5a580b3a
AM
5967/* Array used to determine the number of hash table buckets to use
5968 based on the number of symbols there are. If there are fewer than
5969 3 symbols we use 1 bucket, fewer than 17 symbols we use 3 buckets,
5970 fewer than 37 we use 17 buckets, and so forth. We never use more
5971 than 32771 buckets. */
5972
5973static const size_t elf_buckets[] =
5974{
5975 1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
5976 16411, 32771, 0
5977};
5978
5979/* Compute bucket count for hashing table. We do not use a static set
5980 of possible tables sizes anymore. Instead we determine for all
5981 possible reasonable sizes of the table the outcome (i.e., the
5982 number of collisions etc) and choose the best solution. The
5983 weighting functions are not too simple to allow the table to grow
5984 without bounds. Instead one of the weighting factors is the size.
5985 Therefore the result is always a good payoff between few collisions
5986 (= short chain lengths) and table size. */
5987static size_t
b20dd2ce 5988compute_bucket_count (struct bfd_link_info *info ATTRIBUTE_UNUSED,
d40f3da9
AM
5989 unsigned long int *hashcodes ATTRIBUTE_UNUSED,
5990 unsigned long int nsyms,
5991 int gnu_hash)
5a580b3a 5992{
5a580b3a 5993 size_t best_size = 0;
5a580b3a 5994 unsigned long int i;
5a580b3a 5995
5a580b3a
AM
5996 /* We have a problem here. The following code to optimize the table
5997 size requires an integer type with more the 32 bits. If
5998 BFD_HOST_U_64_BIT is set we know about such a type. */
5999#ifdef BFD_HOST_U_64_BIT
6000 if (info->optimize)
6001 {
5a580b3a
AM
6002 size_t minsize;
6003 size_t maxsize;
6004 BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0);
5a580b3a 6005 bfd *dynobj = elf_hash_table (info)->dynobj;
d40f3da9 6006 size_t dynsymcount = elf_hash_table (info)->dynsymcount;
5a580b3a 6007 const struct elf_backend_data *bed = get_elf_backend_data (dynobj);
fdc90cb4 6008 unsigned long int *counts;
d40f3da9 6009 bfd_size_type amt;
0883b6e0 6010 unsigned int no_improvement_count = 0;
5a580b3a
AM
6011
6012 /* Possible optimization parameters: if we have NSYMS symbols we say
6013 that the hashing table must at least have NSYMS/4 and at most
6014 2*NSYMS buckets. */
6015 minsize = nsyms / 4;
6016 if (minsize == 0)
6017 minsize = 1;
6018 best_size = maxsize = nsyms * 2;
fdc90cb4
JJ
6019 if (gnu_hash)
6020 {
6021 if (minsize < 2)
6022 minsize = 2;
6023 if ((best_size & 31) == 0)
6024 ++best_size;
6025 }
5a580b3a
AM
6026
6027 /* Create array where we count the collisions in. We must use bfd_malloc
6028 since the size could be large. */
6029 amt = maxsize;
6030 amt *= sizeof (unsigned long int);
a50b1753 6031 counts = (unsigned long int *) bfd_malloc (amt);
5a580b3a 6032 if (counts == NULL)
fdc90cb4 6033 return 0;
5a580b3a
AM
6034
6035 /* Compute the "optimal" size for the hash table. The criteria is a
6036 minimal chain length. The minor criteria is (of course) the size
6037 of the table. */
6038 for (i = minsize; i < maxsize; ++i)
6039 {
6040 /* Walk through the array of hashcodes and count the collisions. */
6041 BFD_HOST_U_64_BIT max;
6042 unsigned long int j;
6043 unsigned long int fact;
6044
fdc90cb4
JJ
6045 if (gnu_hash && (i & 31) == 0)
6046 continue;
6047
5a580b3a
AM
6048 memset (counts, '\0', i * sizeof (unsigned long int));
6049
6050 /* Determine how often each hash bucket is used. */
6051 for (j = 0; j < nsyms; ++j)
6052 ++counts[hashcodes[j] % i];
6053
6054 /* For the weight function we need some information about the
6055 pagesize on the target. This is information need not be 100%
6056 accurate. Since this information is not available (so far) we
6057 define it here to a reasonable default value. If it is crucial
6058 to have a better value some day simply define this value. */
6059# ifndef BFD_TARGET_PAGESIZE
6060# define BFD_TARGET_PAGESIZE (4096)
6061# endif
6062
fdc90cb4
JJ
6063 /* We in any case need 2 + DYNSYMCOUNT entries for the size values
6064 and the chains. */
6065 max = (2 + dynsymcount) * bed->s->sizeof_hash_entry;
5a580b3a
AM
6066
6067# if 1
6068 /* Variant 1: optimize for short chains. We add the squares
6069 of all the chain lengths (which favors many small chain
6070 over a few long chains). */
6071 for (j = 0; j < i; ++j)
6072 max += counts[j] * counts[j];
6073
6074 /* This adds penalties for the overall size of the table. */
fdc90cb4 6075 fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5a580b3a
AM
6076 max *= fact * fact;
6077# else
6078 /* Variant 2: Optimize a lot more for small table. Here we
6079 also add squares of the size but we also add penalties for
6080 empty slots (the +1 term). */
6081 for (j = 0; j < i; ++j)
6082 max += (1 + counts[j]) * (1 + counts[j]);
6083
6084 /* The overall size of the table is considered, but not as
6085 strong as in variant 1, where it is squared. */
fdc90cb4 6086 fact = i / (BFD_TARGET_PAGESIZE / bed->s->sizeof_hash_entry) + 1;
5a580b3a
AM
6087 max *= fact;
6088# endif
6089
6090 /* Compare with current best results. */
6091 if (max < best_chlen)
6092 {
6093 best_chlen = max;
6094 best_size = i;
ca4be51c 6095 no_improvement_count = 0;
5a580b3a 6096 }
0883b6e0
NC
6097 /* PR 11843: Avoid futile long searches for the best bucket size
6098 when there are a large number of symbols. */
6099 else if (++no_improvement_count == 100)
6100 break;
5a580b3a
AM
6101 }
6102
6103 free (counts);
6104 }
6105 else
6106#endif /* defined (BFD_HOST_U_64_BIT) */
6107 {
6108 /* This is the fallback solution if no 64bit type is available or if we
6109 are not supposed to spend much time on optimizations. We select the
6110 bucket count using a fixed set of numbers. */
6111 for (i = 0; elf_buckets[i] != 0; i++)
6112 {
6113 best_size = elf_buckets[i];
fdc90cb4 6114 if (nsyms < elf_buckets[i + 1])
5a580b3a
AM
6115 break;
6116 }
fdc90cb4
JJ
6117 if (gnu_hash && best_size < 2)
6118 best_size = 2;
5a580b3a
AM
6119 }
6120
5a580b3a
AM
6121 return best_size;
6122}
6123
d0bf826b
AM
6124/* Size any SHT_GROUP section for ld -r. */
6125
6126bfd_boolean
6127_bfd_elf_size_group_sections (struct bfd_link_info *info)
6128{
6129 bfd *ibfd;
57963c05 6130 asection *s;
d0bf826b 6131
c72f2fb2 6132 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
d0bf826b 6133 if (bfd_get_flavour (ibfd) == bfd_target_elf_flavour
57963c05
AM
6134 && (s = ibfd->sections) != NULL
6135 && s->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
d0bf826b
AM
6136 && !_bfd_elf_fixup_group_sections (ibfd, bfd_abs_section_ptr))
6137 return FALSE;
6138 return TRUE;
6139}
6140
04c3a755
NS
6141/* Set a default stack segment size. The value in INFO wins. If it
6142 is unset, LEGACY_SYMBOL's value is used, and if that symbol is
6143 undefined it is initialized. */
6144
6145bfd_boolean
6146bfd_elf_stack_segment_size (bfd *output_bfd,
6147 struct bfd_link_info *info,
6148 const char *legacy_symbol,
6149 bfd_vma default_size)
6150{
6151 struct elf_link_hash_entry *h = NULL;
6152
6153 /* Look for legacy symbol. */
6154 if (legacy_symbol)
6155 h = elf_link_hash_lookup (elf_hash_table (info), legacy_symbol,
6156 FALSE, FALSE, FALSE);
6157 if (h && (h->root.type == bfd_link_hash_defined
6158 || h->root.type == bfd_link_hash_defweak)
6159 && h->def_regular
6160 && (h->type == STT_NOTYPE || h->type == STT_OBJECT))
6161 {
6162 /* The symbol has no type if specified on the command line. */
6163 h->type = STT_OBJECT;
6164 if (info->stacksize)
695344c0 6165 /* xgettext:c-format */
871b3ab2 6166 _bfd_error_handler (_("%pB: stack size specified and %s set"),
4eca0228 6167 output_bfd, legacy_symbol);
04c3a755 6168 else if (h->root.u.def.section != bfd_abs_section_ptr)
695344c0 6169 /* xgettext:c-format */
871b3ab2 6170 _bfd_error_handler (_("%pB: %s not absolute"),
4eca0228 6171 output_bfd, legacy_symbol);
04c3a755
NS
6172 else
6173 info->stacksize = h->root.u.def.value;
6174 }
6175
6176 if (!info->stacksize)
6177 /* If the user didn't set a size, or explicitly inhibit the
6178 size, set it now. */
6179 info->stacksize = default_size;
6180
6181 /* Provide the legacy symbol, if it is referenced. */
6182 if (h && (h->root.type == bfd_link_hash_undefined
6183 || h->root.type == bfd_link_hash_undefweak))
6184 {
6185 struct bfd_link_hash_entry *bh = NULL;
6186
6187 if (!(_bfd_generic_link_add_one_symbol
6188 (info, output_bfd, legacy_symbol,
6189 BSF_GLOBAL, bfd_abs_section_ptr,
6190 info->stacksize >= 0 ? info->stacksize : 0,
6191 NULL, FALSE, get_elf_backend_data (output_bfd)->collect, &bh)))
6192 return FALSE;
6193
6194 h = (struct elf_link_hash_entry *) bh;
6195 h->def_regular = 1;
6196 h->type = STT_OBJECT;
6197 }
6198
6199 return TRUE;
6200}
6201
b531344c
MR
6202/* Sweep symbols in swept sections. Called via elf_link_hash_traverse. */
6203
6204struct elf_gc_sweep_symbol_info
6205{
6206 struct bfd_link_info *info;
6207 void (*hide_symbol) (struct bfd_link_info *, struct elf_link_hash_entry *,
6208 bfd_boolean);
6209};
6210
6211static bfd_boolean
6212elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
6213{
6214 if (!h->mark
6215 && (((h->root.type == bfd_link_hash_defined
6216 || h->root.type == bfd_link_hash_defweak)
6217 && !((h->def_regular || ELF_COMMON_DEF_P (h))
6218 && h->root.u.def.section->gc_mark))
6219 || h->root.type == bfd_link_hash_undefined
6220 || h->root.type == bfd_link_hash_undefweak))
6221 {
6222 struct elf_gc_sweep_symbol_info *inf;
6223
6224 inf = (struct elf_gc_sweep_symbol_info *) data;
6225 (*inf->hide_symbol) (inf->info, h, TRUE);
6226 h->def_regular = 0;
6227 h->ref_regular = 0;
6228 h->ref_regular_nonweak = 0;
6229 }
6230
6231 return TRUE;
6232}
6233
5a580b3a
AM
6234/* Set up the sizes and contents of the ELF dynamic sections. This is
6235 called by the ELF linker emulation before_allocation routine. We
6236 must set the sizes of the sections before the linker sets the
6237 addresses of the various sections. */
6238
6239bfd_boolean
6240bfd_elf_size_dynamic_sections (bfd *output_bfd,
6241 const char *soname,
6242 const char *rpath,
6243 const char *filter_shlib,
7ee314fa
AM
6244 const char *audit,
6245 const char *depaudit,
5a580b3a
AM
6246 const char * const *auxiliary_filters,
6247 struct bfd_link_info *info,
fd91d419 6248 asection **sinterpptr)
5a580b3a 6249{
5a580b3a
AM
6250 bfd *dynobj;
6251 const struct elf_backend_data *bed;
5a580b3a
AM
6252
6253 *sinterpptr = NULL;
6254
5a580b3a
AM
6255 if (!is_elf_hash_table (info->hash))
6256 return TRUE;
6257
5a580b3a
AM
6258 dynobj = elf_hash_table (info)->dynobj;
6259
9a2a56cc 6260 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
5a580b3a 6261 {
902e9fc7
MR
6262 struct bfd_elf_version_tree *verdefs;
6263 struct elf_info_failed asvinfo;
5a580b3a
AM
6264 struct bfd_elf_version_tree *t;
6265 struct bfd_elf_version_expr *d;
902e9fc7 6266 asection *s;
e6699019 6267 size_t soname_indx;
7ee314fa 6268
5a580b3a
AM
6269 /* If we are supposed to export all symbols into the dynamic symbol
6270 table (this is not the normal case), then do so. */
55255dae 6271 if (info->export_dynamic
0e1862bb 6272 || (bfd_link_executable (info) && info->dynamic))
5a580b3a 6273 {
3d13f3e9
AM
6274 struct elf_info_failed eif;
6275
6276 eif.info = info;
6277 eif.failed = FALSE;
5a580b3a
AM
6278 elf_link_hash_traverse (elf_hash_table (info),
6279 _bfd_elf_export_symbol,
6280 &eif);
6281 if (eif.failed)
6282 return FALSE;
6283 }
6284
e6699019
L
6285 if (soname != NULL)
6286 {
6287 soname_indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6288 soname, TRUE);
6289 if (soname_indx == (size_t) -1
6290 || !_bfd_elf_add_dynamic_entry (info, DT_SONAME, soname_indx))
6291 return FALSE;
6292 }
6293 else
6294 soname_indx = (size_t) -1;
6295
5a580b3a 6296 /* Make all global versions with definition. */
fd91d419 6297 for (t = info->version_info; t != NULL; t = t->next)
5a580b3a 6298 for (d = t->globals.list; d != NULL; d = d->next)
ae5a3597 6299 if (!d->symver && d->literal)
5a580b3a
AM
6300 {
6301 const char *verstr, *name;
6302 size_t namelen, verlen, newlen;
93252b1c 6303 char *newname, *p, leading_char;
5a580b3a
AM
6304 struct elf_link_hash_entry *newh;
6305
93252b1c 6306 leading_char = bfd_get_symbol_leading_char (output_bfd);
ae5a3597 6307 name = d->pattern;
93252b1c 6308 namelen = strlen (name) + (leading_char != '\0');
5a580b3a
AM
6309 verstr = t->name;
6310 verlen = strlen (verstr);
6311 newlen = namelen + verlen + 3;
6312
a50b1753 6313 newname = (char *) bfd_malloc (newlen);
5a580b3a
AM
6314 if (newname == NULL)
6315 return FALSE;
93252b1c
MF
6316 newname[0] = leading_char;
6317 memcpy (newname + (leading_char != '\0'), name, namelen);
5a580b3a
AM
6318
6319 /* Check the hidden versioned definition. */
6320 p = newname + namelen;
6321 *p++ = ELF_VER_CHR;
6322 memcpy (p, verstr, verlen + 1);
6323 newh = elf_link_hash_lookup (elf_hash_table (info),
6324 newname, FALSE, FALSE,
6325 FALSE);
6326 if (newh == NULL
6327 || (newh->root.type != bfd_link_hash_defined
6328 && newh->root.type != bfd_link_hash_defweak))
6329 {
6330 /* Check the default versioned definition. */
6331 *p++ = ELF_VER_CHR;
6332 memcpy (p, verstr, verlen + 1);
6333 newh = elf_link_hash_lookup (elf_hash_table (info),
6334 newname, FALSE, FALSE,
6335 FALSE);
6336 }
6337 free (newname);
6338
6339 /* Mark this version if there is a definition and it is
6340 not defined in a shared object. */
6341 if (newh != NULL
f5385ebf 6342 && !newh->def_dynamic
5a580b3a
AM
6343 && (newh->root.type == bfd_link_hash_defined
6344 || newh->root.type == bfd_link_hash_defweak))
6345 d->symver = 1;
6346 }
6347
6348 /* Attach all the symbols to their version information. */
5a580b3a 6349 asvinfo.info = info;
5a580b3a
AM
6350 asvinfo.failed = FALSE;
6351
6352 elf_link_hash_traverse (elf_hash_table (info),
6353 _bfd_elf_link_assign_sym_version,
6354 &asvinfo);
6355 if (asvinfo.failed)
6356 return FALSE;
6357
6358 if (!info->allow_undefined_version)
6359 {
6360 /* Check if all global versions have a definition. */
3d13f3e9 6361 bfd_boolean all_defined = TRUE;
fd91d419 6362 for (t = info->version_info; t != NULL; t = t->next)
5a580b3a 6363 for (d = t->globals.list; d != NULL; d = d->next)
ae5a3597 6364 if (d->literal && !d->symver && !d->script)
5a580b3a 6365 {
4eca0228 6366 _bfd_error_handler
5a580b3a
AM
6367 (_("%s: undefined version: %s"),
6368 d->pattern, t->name);
6369 all_defined = FALSE;
6370 }
6371
6372 if (!all_defined)
6373 {
6374 bfd_set_error (bfd_error_bad_value);
6375 return FALSE;
6376 }
6377 }
6378
902e9fc7
MR
6379 /* Set up the version definition section. */
6380 s = bfd_get_linker_section (dynobj, ".gnu.version_d");
6381 BFD_ASSERT (s != NULL);
5a580b3a 6382
902e9fc7
MR
6383 /* We may have created additional version definitions if we are
6384 just linking a regular application. */
6385 verdefs = info->version_info;
5a580b3a 6386
902e9fc7
MR
6387 /* Skip anonymous version tag. */
6388 if (verdefs != NULL && verdefs->vernum == 0)
6389 verdefs = verdefs->next;
5a580b3a 6390
902e9fc7
MR
6391 if (verdefs == NULL && !info->create_default_symver)
6392 s->flags |= SEC_EXCLUDE;
6393 else
5a580b3a 6394 {
902e9fc7
MR
6395 unsigned int cdefs;
6396 bfd_size_type size;
6397 bfd_byte *p;
6398 Elf_Internal_Verdef def;
6399 Elf_Internal_Verdaux defaux;
6400 struct bfd_link_hash_entry *bh;
6401 struct elf_link_hash_entry *h;
6402 const char *name;
5a580b3a 6403
902e9fc7
MR
6404 cdefs = 0;
6405 size = 0;
5a580b3a 6406
902e9fc7
MR
6407 /* Make space for the base version. */
6408 size += sizeof (Elf_External_Verdef);
6409 size += sizeof (Elf_External_Verdaux);
6410 ++cdefs;
6411
6412 /* Make space for the default version. */
6413 if (info->create_default_symver)
6414 {
6415 size += sizeof (Elf_External_Verdef);
6416 ++cdefs;
3e3b46e5
PB
6417 }
6418
5a580b3a
AM
6419 for (t = verdefs; t != NULL; t = t->next)
6420 {
6421 struct bfd_elf_version_deps *n;
6422
a6cc6b3b
RO
6423 /* Don't emit base version twice. */
6424 if (t->vernum == 0)
6425 continue;
6426
5a580b3a
AM
6427 size += sizeof (Elf_External_Verdef);
6428 size += sizeof (Elf_External_Verdaux);
6429 ++cdefs;
6430
6431 for (n = t->deps; n != NULL; n = n->next)
6432 size += sizeof (Elf_External_Verdaux);
6433 }
6434
eea6121a 6435 s->size = size;
a50b1753 6436 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
eea6121a 6437 if (s->contents == NULL && s->size != 0)
5a580b3a
AM
6438 return FALSE;
6439
6440 /* Fill in the version definition section. */
6441
6442 p = s->contents;
6443
6444 def.vd_version = VER_DEF_CURRENT;
6445 def.vd_flags = VER_FLG_BASE;
6446 def.vd_ndx = 1;
6447 def.vd_cnt = 1;
3e3b46e5
PB
6448 if (info->create_default_symver)
6449 {
6450 def.vd_aux = 2 * sizeof (Elf_External_Verdef);
6451 def.vd_next = sizeof (Elf_External_Verdef);
6452 }
6453 else
6454 {
6455 def.vd_aux = sizeof (Elf_External_Verdef);
6456 def.vd_next = (sizeof (Elf_External_Verdef)
6457 + sizeof (Elf_External_Verdaux));
6458 }
5a580b3a 6459
ef53be89 6460 if (soname_indx != (size_t) -1)
5a580b3a
AM
6461 {
6462 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6463 soname_indx);
6464 def.vd_hash = bfd_elf_hash (soname);
6465 defaux.vda_name = soname_indx;
3e3b46e5 6466 name = soname;
5a580b3a
AM
6467 }
6468 else
6469 {
ef53be89 6470 size_t indx;
5a580b3a 6471
06084812 6472 name = lbasename (output_bfd->filename);
5a580b3a
AM
6473 def.vd_hash = bfd_elf_hash (name);
6474 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6475 name, FALSE);
ef53be89 6476 if (indx == (size_t) -1)
5a580b3a
AM
6477 return FALSE;
6478 defaux.vda_name = indx;
6479 }
6480 defaux.vda_next = 0;
6481
6482 _bfd_elf_swap_verdef_out (output_bfd, &def,
6483 (Elf_External_Verdef *) p);
6484 p += sizeof (Elf_External_Verdef);
3e3b46e5
PB
6485 if (info->create_default_symver)
6486 {
6487 /* Add a symbol representing this version. */
6488 bh = NULL;
6489 if (! (_bfd_generic_link_add_one_symbol
6490 (info, dynobj, name, BSF_GLOBAL, bfd_abs_section_ptr,
6491 0, NULL, FALSE,
6492 get_elf_backend_data (dynobj)->collect, &bh)))
6493 return FALSE;
6494 h = (struct elf_link_hash_entry *) bh;
6495 h->non_elf = 0;
6496 h->def_regular = 1;
6497 h->type = STT_OBJECT;
6498 h->verinfo.vertree = NULL;
6499
6500 if (! bfd_elf_link_record_dynamic_symbol (info, h))
6501 return FALSE;
6502
6503 /* Create a duplicate of the base version with the same
6504 aux block, but different flags. */
6505 def.vd_flags = 0;
6506 def.vd_ndx = 2;
6507 def.vd_aux = sizeof (Elf_External_Verdef);
6508 if (verdefs)
6509 def.vd_next = (sizeof (Elf_External_Verdef)
6510 + sizeof (Elf_External_Verdaux));
6511 else
6512 def.vd_next = 0;
6513 _bfd_elf_swap_verdef_out (output_bfd, &def,
6514 (Elf_External_Verdef *) p);
6515 p += sizeof (Elf_External_Verdef);
6516 }
5a580b3a
AM
6517 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6518 (Elf_External_Verdaux *) p);
6519 p += sizeof (Elf_External_Verdaux);
6520
6521 for (t = verdefs; t != NULL; t = t->next)
6522 {
6523 unsigned int cdeps;
6524 struct bfd_elf_version_deps *n;
5a580b3a 6525
a6cc6b3b
RO
6526 /* Don't emit the base version twice. */
6527 if (t->vernum == 0)
6528 continue;
6529
5a580b3a
AM
6530 cdeps = 0;
6531 for (n = t->deps; n != NULL; n = n->next)
6532 ++cdeps;
6533
6534 /* Add a symbol representing this version. */
6535 bh = NULL;
6536 if (! (_bfd_generic_link_add_one_symbol
6537 (info, dynobj, t->name, BSF_GLOBAL, bfd_abs_section_ptr,
6538 0, NULL, FALSE,
6539 get_elf_backend_data (dynobj)->collect, &bh)))
6540 return FALSE;
6541 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
6542 h->non_elf = 0;
6543 h->def_regular = 1;
5a580b3a
AM
6544 h->type = STT_OBJECT;
6545 h->verinfo.vertree = t;
6546
c152c796 6547 if (! bfd_elf_link_record_dynamic_symbol (info, h))
5a580b3a
AM
6548 return FALSE;
6549
6550 def.vd_version = VER_DEF_CURRENT;
6551 def.vd_flags = 0;
6552 if (t->globals.list == NULL
6553 && t->locals.list == NULL
6554 && ! t->used)
6555 def.vd_flags |= VER_FLG_WEAK;
3e3b46e5 6556 def.vd_ndx = t->vernum + (info->create_default_symver ? 2 : 1);
5a580b3a
AM
6557 def.vd_cnt = cdeps + 1;
6558 def.vd_hash = bfd_elf_hash (t->name);
6559 def.vd_aux = sizeof (Elf_External_Verdef);
6560 def.vd_next = 0;
a6cc6b3b
RO
6561
6562 /* If a basever node is next, it *must* be the last node in
6563 the chain, otherwise Verdef construction breaks. */
6564 if (t->next != NULL && t->next->vernum == 0)
6565 BFD_ASSERT (t->next->next == NULL);
6566
6567 if (t->next != NULL && t->next->vernum != 0)
5a580b3a
AM
6568 def.vd_next = (sizeof (Elf_External_Verdef)
6569 + (cdeps + 1) * sizeof (Elf_External_Verdaux));
6570
6571 _bfd_elf_swap_verdef_out (output_bfd, &def,
6572 (Elf_External_Verdef *) p);
6573 p += sizeof (Elf_External_Verdef);
6574
6575 defaux.vda_name = h->dynstr_index;
6576 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6577 h->dynstr_index);
6578 defaux.vda_next = 0;
6579 if (t->deps != NULL)
6580 defaux.vda_next = sizeof (Elf_External_Verdaux);
6581 t->name_indx = defaux.vda_name;
6582
6583 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6584 (Elf_External_Verdaux *) p);
6585 p += sizeof (Elf_External_Verdaux);
6586
6587 for (n = t->deps; n != NULL; n = n->next)
6588 {
6589 if (n->version_needed == NULL)
6590 {
6591 /* This can happen if there was an error in the
6592 version script. */
6593 defaux.vda_name = 0;
6594 }
6595 else
6596 {
6597 defaux.vda_name = n->version_needed->name_indx;
6598 _bfd_elf_strtab_addref (elf_hash_table (info)->dynstr,
6599 defaux.vda_name);
6600 }
6601 if (n->next == NULL)
6602 defaux.vda_next = 0;
6603 else
6604 defaux.vda_next = sizeof (Elf_External_Verdaux);
6605
6606 _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
6607 (Elf_External_Verdaux *) p);
6608 p += sizeof (Elf_External_Verdaux);
6609 }
6610 }
6611
5a580b3a
AM
6612 elf_tdata (output_bfd)->cverdefs = cdefs;
6613 }
902e9fc7
MR
6614 }
6615
6616 bed = get_elf_backend_data (output_bfd);
6617
6618 if (info->gc_sections && bed->can_gc_sections)
6619 {
6620 struct elf_gc_sweep_symbol_info sweep_info;
902e9fc7
MR
6621
6622 /* Remove the symbols that were in the swept sections from the
3d13f3e9 6623 dynamic symbol table. */
902e9fc7
MR
6624 sweep_info.info = info;
6625 sweep_info.hide_symbol = bed->elf_backend_hide_symbol;
6626 elf_link_hash_traverse (elf_hash_table (info), elf_gc_sweep_symbol,
6627 &sweep_info);
3d13f3e9
AM
6628 }
6629
6630 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6631 {
6632 asection *s;
6633 struct elf_find_verdep_info sinfo;
6634
6635 /* Work out the size of the version reference section. */
6636
6637 s = bfd_get_linker_section (dynobj, ".gnu.version_r");
6638 BFD_ASSERT (s != NULL);
902e9fc7 6639
3d13f3e9
AM
6640 sinfo.info = info;
6641 sinfo.vers = elf_tdata (output_bfd)->cverdefs;
6642 if (sinfo.vers == 0)
6643 sinfo.vers = 1;
6644 sinfo.failed = FALSE;
6645
6646 elf_link_hash_traverse (elf_hash_table (info),
6647 _bfd_elf_link_find_version_dependencies,
6648 &sinfo);
6649 if (sinfo.failed)
6650 return FALSE;
6651
6652 if (elf_tdata (output_bfd)->verref == NULL)
6653 s->flags |= SEC_EXCLUDE;
6654 else
6655 {
6656 Elf_Internal_Verneed *vn;
6657 unsigned int size;
6658 unsigned int crefs;
6659 bfd_byte *p;
6660
6661 /* Build the version dependency section. */
6662 size = 0;
6663 crefs = 0;
6664 for (vn = elf_tdata (output_bfd)->verref;
6665 vn != NULL;
6666 vn = vn->vn_nextref)
6667 {
6668 Elf_Internal_Vernaux *a;
6669
6670 size += sizeof (Elf_External_Verneed);
6671 ++crefs;
6672 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6673 size += sizeof (Elf_External_Vernaux);
6674 }
6675
6676 s->size = size;
6677 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
6678 if (s->contents == NULL)
6679 return FALSE;
6680
6681 p = s->contents;
6682 for (vn = elf_tdata (output_bfd)->verref;
6683 vn != NULL;
6684 vn = vn->vn_nextref)
6685 {
6686 unsigned int caux;
6687 Elf_Internal_Vernaux *a;
6688 size_t indx;
6689
6690 caux = 0;
6691 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6692 ++caux;
6693
6694 vn->vn_version = VER_NEED_CURRENT;
6695 vn->vn_cnt = caux;
6696 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6697 elf_dt_name (vn->vn_bfd) != NULL
6698 ? elf_dt_name (vn->vn_bfd)
6699 : lbasename (vn->vn_bfd->filename),
6700 FALSE);
6701 if (indx == (size_t) -1)
6702 return FALSE;
6703 vn->vn_file = indx;
6704 vn->vn_aux = sizeof (Elf_External_Verneed);
6705 if (vn->vn_nextref == NULL)
6706 vn->vn_next = 0;
6707 else
6708 vn->vn_next = (sizeof (Elf_External_Verneed)
6709 + caux * sizeof (Elf_External_Vernaux));
6710
6711 _bfd_elf_swap_verneed_out (output_bfd, vn,
6712 (Elf_External_Verneed *) p);
6713 p += sizeof (Elf_External_Verneed);
6714
6715 for (a = vn->vn_auxptr; a != NULL; a = a->vna_nextptr)
6716 {
6717 a->vna_hash = bfd_elf_hash (a->vna_nodename);
6718 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6719 a->vna_nodename, FALSE);
6720 if (indx == (size_t) -1)
6721 return FALSE;
6722 a->vna_name = indx;
6723 if (a->vna_nextptr == NULL)
6724 a->vna_next = 0;
6725 else
6726 a->vna_next = sizeof (Elf_External_Vernaux);
6727
6728 _bfd_elf_swap_vernaux_out (output_bfd, a,
6729 (Elf_External_Vernaux *) p);
6730 p += sizeof (Elf_External_Vernaux);
6731 }
6732 }
6733
6734 elf_tdata (output_bfd)->cverrefs = crefs;
6735 }
902e9fc7
MR
6736 }
6737
6738 /* Any syms created from now on start with -1 in
6739 got.refcount/offset and plt.refcount/offset. */
6740 elf_hash_table (info)->init_got_refcount
6741 = elf_hash_table (info)->init_got_offset;
6742 elf_hash_table (info)->init_plt_refcount
6743 = elf_hash_table (info)->init_plt_offset;
6744
6745 if (bfd_link_relocatable (info)
6746 && !_bfd_elf_size_group_sections (info))
6747 return FALSE;
6748
6749 /* The backend may have to create some sections regardless of whether
6750 we're dynamic or not. */
6751 if (bed->elf_backend_always_size_sections
6752 && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
6753 return FALSE;
6754
6755 /* Determine any GNU_STACK segment requirements, after the backend
6756 has had a chance to set a default segment size. */
6757 if (info->execstack)
6758 elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
6759 else if (info->noexecstack)
6760 elf_stack_flags (output_bfd) = PF_R | PF_W;
6761 else
6762 {
6763 bfd *inputobj;
6764 asection *notesec = NULL;
6765 int exec = 0;
6766
6767 for (inputobj = info->input_bfds;
6768 inputobj;
6769 inputobj = inputobj->link.next)
6770 {
6771 asection *s;
6772
6773 if (inputobj->flags
6774 & (DYNAMIC | EXEC_P | BFD_PLUGIN | BFD_LINKER_CREATED))
6775 continue;
57963c05
AM
6776 s = inputobj->sections;
6777 if (s == NULL || s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
6778 continue;
6779
902e9fc7
MR
6780 s = bfd_get_section_by_name (inputobj, ".note.GNU-stack");
6781 if (s)
6782 {
6783 if (s->flags & SEC_CODE)
6784 exec = PF_X;
6785 notesec = s;
6786 }
6787 else if (bed->default_execstack)
6788 exec = PF_X;
6789 }
6790 if (notesec || info->stacksize > 0)
6791 elf_stack_flags (output_bfd) = PF_R | PF_W | exec;
6792 if (notesec && exec && bfd_link_relocatable (info)
6793 && notesec->output_section != bfd_abs_section_ptr)
6794 notesec->output_section->flags |= SEC_CODE;
6795 }
6796
6797 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
6798 {
6799 struct elf_info_failed eif;
6800 struct elf_link_hash_entry *h;
6801 asection *dynstr;
6802 asection *s;
6803
6804 *sinterpptr = bfd_get_linker_section (dynobj, ".interp");
6805 BFD_ASSERT (*sinterpptr != NULL || !bfd_link_executable (info) || info->nointerp);
6806
902e9fc7
MR
6807 if (info->symbolic)
6808 {
6809 if (!_bfd_elf_add_dynamic_entry (info, DT_SYMBOLIC, 0))
6810 return FALSE;
6811 info->flags |= DF_SYMBOLIC;
6812 }
6813
6814 if (rpath != NULL)
6815 {
6816 size_t indx;
6817 bfd_vma tag;
6818
6819 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, rpath,
6820 TRUE);
6821 if (indx == (size_t) -1)
6822 return FALSE;
6823
6824 tag = info->new_dtags ? DT_RUNPATH : DT_RPATH;
6825 if (!_bfd_elf_add_dynamic_entry (info, tag, indx))
6826 return FALSE;
6827 }
6828
6829 if (filter_shlib != NULL)
6830 {
6831 size_t indx;
6832
6833 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6834 filter_shlib, TRUE);
6835 if (indx == (size_t) -1
6836 || !_bfd_elf_add_dynamic_entry (info, DT_FILTER, indx))
6837 return FALSE;
6838 }
6839
6840 if (auxiliary_filters != NULL)
6841 {
6842 const char * const *p;
6843
6844 for (p = auxiliary_filters; *p != NULL; p++)
6845 {
6846 size_t indx;
6847
6848 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr,
6849 *p, TRUE);
6850 if (indx == (size_t) -1
6851 || !_bfd_elf_add_dynamic_entry (info, DT_AUXILIARY, indx))
6852 return FALSE;
6853 }
6854 }
6855
6856 if (audit != NULL)
6857 {
6858 size_t indx;
6859
6860 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, audit,
6861 TRUE);
6862 if (indx == (size_t) -1
6863 || !_bfd_elf_add_dynamic_entry (info, DT_AUDIT, indx))
6864 return FALSE;
6865 }
6866
6867 if (depaudit != NULL)
6868 {
6869 size_t indx;
6870
6871 indx = _bfd_elf_strtab_add (elf_hash_table (info)->dynstr, depaudit,
6872 TRUE);
6873 if (indx == (size_t) -1
6874 || !_bfd_elf_add_dynamic_entry (info, DT_DEPAUDIT, indx))
6875 return FALSE;
6876 }
6877
6878 eif.info = info;
6879 eif.failed = FALSE;
6880
6881 /* Find all symbols which were defined in a dynamic object and make
6882 the backend pick a reasonable value for them. */
6883 elf_link_hash_traverse (elf_hash_table (info),
6884 _bfd_elf_adjust_dynamic_symbol,
6885 &eif);
6886 if (eif.failed)
6887 return FALSE;
6888
6889 /* Add some entries to the .dynamic section. We fill in some of the
6890 values later, in bfd_elf_final_link, but we must add the entries
6891 now so that we know the final size of the .dynamic section. */
6892
6893 /* If there are initialization and/or finalization functions to
6894 call then add the corresponding DT_INIT/DT_FINI entries. */
6895 h = (info->init_function
6896 ? elf_link_hash_lookup (elf_hash_table (info),
6897 info->init_function, FALSE,
6898 FALSE, FALSE)
6899 : NULL);
6900 if (h != NULL
6901 && (h->ref_regular
6902 || h->def_regular))
6903 {
6904 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT, 0))
6905 return FALSE;
6906 }
6907 h = (info->fini_function
6908 ? elf_link_hash_lookup (elf_hash_table (info),
6909 info->fini_function, FALSE,
6910 FALSE, FALSE)
6911 : NULL);
6912 if (h != NULL
6913 && (h->ref_regular
6914 || h->def_regular))
6915 {
6916 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI, 0))
6917 return FALSE;
6918 }
6919
6920 s = bfd_get_section_by_name (output_bfd, ".preinit_array");
6921 if (s != NULL && s->linker_has_input)
6922 {
6923 /* DT_PREINIT_ARRAY is not allowed in shared library. */
6924 if (! bfd_link_executable (info))
6925 {
6926 bfd *sub;
6927 asection *o;
6928
57963c05
AM
6929 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
6930 if (bfd_get_flavour (sub) == bfd_target_elf_flavour
6931 && (o = sub->sections) != NULL
6932 && o->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
902e9fc7
MR
6933 for (o = sub->sections; o != NULL; o = o->next)
6934 if (elf_section_data (o)->this_hdr.sh_type
6935 == SHT_PREINIT_ARRAY)
6936 {
6937 _bfd_error_handler
871b3ab2 6938 (_("%pB: .preinit_array section is not allowed in DSO"),
902e9fc7
MR
6939 sub);
6940 break;
6941 }
6942
6943 bfd_set_error (bfd_error_nonrepresentable_section);
6944 return FALSE;
6945 }
6946
6947 if (!_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAY, 0)
6948 || !_bfd_elf_add_dynamic_entry (info, DT_PREINIT_ARRAYSZ, 0))
6949 return FALSE;
6950 }
6951 s = bfd_get_section_by_name (output_bfd, ".init_array");
6952 if (s != NULL && s->linker_has_input)
6953 {
6954 if (!_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAY, 0)
6955 || !_bfd_elf_add_dynamic_entry (info, DT_INIT_ARRAYSZ, 0))
6956 return FALSE;
6957 }
6958 s = bfd_get_section_by_name (output_bfd, ".fini_array");
6959 if (s != NULL && s->linker_has_input)
6960 {
6961 if (!_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAY, 0)
6962 || !_bfd_elf_add_dynamic_entry (info, DT_FINI_ARRAYSZ, 0))
6963 return FALSE;
6964 }
6965
6966 dynstr = bfd_get_linker_section (dynobj, ".dynstr");
6967 /* If .dynstr is excluded from the link, we don't want any of
6968 these tags. Strictly, we should be checking each section
6969 individually; This quick check covers for the case where
6970 someone does a /DISCARD/ : { *(*) }. */
6971 if (dynstr != NULL && dynstr->output_section != bfd_abs_section_ptr)
6972 {
6973 bfd_size_type strsize;
6974
6975 strsize = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
6976 if ((info->emit_hash
6977 && !_bfd_elf_add_dynamic_entry (info, DT_HASH, 0))
6978 || (info->emit_gnu_hash
6979 && !_bfd_elf_add_dynamic_entry (info, DT_GNU_HASH, 0))
6980 || !_bfd_elf_add_dynamic_entry (info, DT_STRTAB, 0)
6981 || !_bfd_elf_add_dynamic_entry (info, DT_SYMTAB, 0)
6982 || !_bfd_elf_add_dynamic_entry (info, DT_STRSZ, strsize)
6983 || !_bfd_elf_add_dynamic_entry (info, DT_SYMENT,
6984 bed->s->sizeof_sym))
6985 return FALSE;
6986 }
6987 }
6988
6989 if (! _bfd_elf_maybe_strip_eh_frame_hdr (info))
6990 return FALSE;
6991
6992 /* The backend must work out the sizes of all the other dynamic
6993 sections. */
6994 if (dynobj != NULL
6995 && bed->elf_backend_size_dynamic_sections != NULL
6996 && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
6997 return FALSE;
6998
6999 if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
7000 {
902e9fc7
MR
7001 if (elf_tdata (output_bfd)->cverdefs)
7002 {
7003 unsigned int crefs = elf_tdata (output_bfd)->cverdefs;
7004
7005 if (!_bfd_elf_add_dynamic_entry (info, DT_VERDEF, 0)
7006 || !_bfd_elf_add_dynamic_entry (info, DT_VERDEFNUM, crefs))
7007 return FALSE;
7008 }
7009
7010 if ((info->new_dtags && info->flags) || (info->flags & DF_STATIC_TLS))
7011 {
7012 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS, info->flags))
7013 return FALSE;
7014 }
7015 else if (info->flags & DF_BIND_NOW)
7016 {
7017 if (!_bfd_elf_add_dynamic_entry (info, DT_BIND_NOW, 0))
7018 return FALSE;
7019 }
7020
7021 if (info->flags_1)
7022 {
7023 if (bfd_link_executable (info))
7024 info->flags_1 &= ~ (DF_1_INITFIRST
7025 | DF_1_NODELETE
7026 | DF_1_NOOPEN);
7027 if (!_bfd_elf_add_dynamic_entry (info, DT_FLAGS_1, info->flags_1))
7028 return FALSE;
7029 }
7030
7031 if (elf_tdata (output_bfd)->cverrefs)
7032 {
7033 unsigned int crefs = elf_tdata (output_bfd)->cverrefs;
7034
7035 if (!_bfd_elf_add_dynamic_entry (info, DT_VERNEED, 0)
7036 || !_bfd_elf_add_dynamic_entry (info, DT_VERNEEDNUM, crefs))
7037 return FALSE;
7038 }
5a580b3a 7039
8423293d
AM
7040 if ((elf_tdata (output_bfd)->cverrefs == 0
7041 && elf_tdata (output_bfd)->cverdefs == 0)
63f452a8 7042 || _bfd_elf_link_renumber_dynsyms (output_bfd, info, NULL) <= 1)
8423293d 7043 {
902e9fc7
MR
7044 asection *s;
7045
3d4d4302 7046 s = bfd_get_linker_section (dynobj, ".gnu.version");
8423293d
AM
7047 s->flags |= SEC_EXCLUDE;
7048 }
7049 }
7050 return TRUE;
7051}
7052
74541ad4
AM
7053/* Find the first non-excluded output section. We'll use its
7054 section symbol for some emitted relocs. */
7055void
7056_bfd_elf_init_1_index_section (bfd *output_bfd, struct bfd_link_info *info)
7057{
7058 asection *s;
f26a3287 7059 asection *found = NULL;
74541ad4
AM
7060
7061 for (s = output_bfd->sections; s != NULL; s = s->next)
7062 if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
d00dd7dc 7063 && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
74541ad4 7064 {
f26a3287
AM
7065 found = s;
7066 if ((s->flags & SEC_THREAD_LOCAL) == 0)
7067 break;
74541ad4 7068 }
f26a3287 7069 elf_hash_table (info)->text_index_section = found;
74541ad4
AM
7070}
7071
7072/* Find two non-excluded output sections, one for code, one for data.
7073 We'll use their section symbols for some emitted relocs. */
7074void
7075_bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
7076{
7077 asection *s;
f26a3287 7078 asection *found = NULL;
74541ad4 7079
266b05cf 7080 /* Data first, since setting text_index_section changes
7f923b7f 7081 _bfd_elf_omit_section_dynsym_default. */
74541ad4 7082 for (s = output_bfd->sections; s != NULL; s = s->next)
f26a3287
AM
7083 if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
7084 && !(s->flags & SEC_READONLY)
d00dd7dc 7085 && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
74541ad4 7086 {
f26a3287
AM
7087 found = s;
7088 if ((s->flags & SEC_THREAD_LOCAL) == 0)
7089 break;
74541ad4 7090 }
f26a3287 7091 elf_hash_table (info)->data_index_section = found;
74541ad4
AM
7092
7093 for (s = output_bfd->sections; s != NULL; s = s->next)
f26a3287
AM
7094 if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
7095 && (s->flags & SEC_READONLY)
d00dd7dc 7096 && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
74541ad4 7097 {
f26a3287 7098 found = s;
74541ad4
AM
7099 break;
7100 }
f26a3287 7101 elf_hash_table (info)->text_index_section = found;
74541ad4
AM
7102}
7103
8423293d
AM
7104bfd_boolean
7105bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
7106{
74541ad4 7107 const struct elf_backend_data *bed;
23ec1e32 7108 unsigned long section_sym_count;
96d01d93 7109 bfd_size_type dynsymcount = 0;
74541ad4 7110
8423293d
AM
7111 if (!is_elf_hash_table (info->hash))
7112 return TRUE;
7113
74541ad4
AM
7114 bed = get_elf_backend_data (output_bfd);
7115 (*bed->elf_backend_init_index_section) (output_bfd, info);
7116
23ec1e32
MR
7117 /* Assign dynsym indices. In a shared library we generate a section
7118 symbol for each output section, which come first. Next come all
7119 of the back-end allocated local dynamic syms, followed by the rest
7120 of the global symbols.
7121
7122 This is usually not needed for static binaries, however backends
7123 can request to always do it, e.g. the MIPS backend uses dynamic
7124 symbol counts to lay out GOT, which will be produced in the
7125 presence of GOT relocations even in static binaries (holding fixed
7126 data in that case, to satisfy those relocations). */
7127
7128 if (elf_hash_table (info)->dynamic_sections_created
7129 || bed->always_renumber_dynsyms)
7130 dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info,
7131 &section_sym_count);
7132
8423293d
AM
7133 if (elf_hash_table (info)->dynamic_sections_created)
7134 {
7135 bfd *dynobj;
8423293d 7136 asection *s;
8423293d
AM
7137 unsigned int dtagcount;
7138
7139 dynobj = elf_hash_table (info)->dynobj;
7140
5a580b3a 7141 /* Work out the size of the symbol version section. */
3d4d4302 7142 s = bfd_get_linker_section (dynobj, ".gnu.version");
5a580b3a 7143 BFD_ASSERT (s != NULL);
d5486c43 7144 if ((s->flags & SEC_EXCLUDE) == 0)
5a580b3a 7145 {
eea6121a 7146 s->size = dynsymcount * sizeof (Elf_External_Versym);
a50b1753 7147 s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
5a580b3a
AM
7148 if (s->contents == NULL)
7149 return FALSE;
7150
7151 if (!_bfd_elf_add_dynamic_entry (info, DT_VERSYM, 0))
7152 return FALSE;
7153 }
7154
7155 /* Set the size of the .dynsym and .hash sections. We counted
7156 the number of dynamic symbols in elf_link_add_object_symbols.
7157 We will build the contents of .dynsym and .hash when we build
7158 the final symbol table, because until then we do not know the
7159 correct value to give the symbols. We built the .dynstr
7160 section as we went along in elf_link_add_object_symbols. */
cae1fbbb 7161 s = elf_hash_table (info)->dynsym;
5a580b3a 7162 BFD_ASSERT (s != NULL);
eea6121a 7163 s->size = dynsymcount * bed->s->sizeof_sym;
5a580b3a 7164
d5486c43
L
7165 s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size);
7166 if (s->contents == NULL)
7167 return FALSE;
5a580b3a 7168
d5486c43
L
7169 /* The first entry in .dynsym is a dummy symbol. Clear all the
7170 section syms, in case we don't output them all. */
7171 ++section_sym_count;
7172 memset (s->contents, 0, section_sym_count * bed->s->sizeof_sym);
5a580b3a 7173
fdc90cb4
JJ
7174 elf_hash_table (info)->bucketcount = 0;
7175
5a580b3a
AM
7176 /* Compute the size of the hashing table. As a side effect this
7177 computes the hash values for all the names we export. */
fdc90cb4
JJ
7178 if (info->emit_hash)
7179 {
7180 unsigned long int *hashcodes;
14b1c01e 7181 struct hash_codes_info hashinf;
fdc90cb4
JJ
7182 bfd_size_type amt;
7183 unsigned long int nsyms;
7184 size_t bucketcount;
7185 size_t hash_entry_size;
7186
7187 /* Compute the hash values for all exported symbols. At the same
7188 time store the values in an array so that we could use them for
7189 optimizations. */
7190 amt = dynsymcount * sizeof (unsigned long int);
a50b1753 7191 hashcodes = (unsigned long int *) bfd_malloc (amt);
fdc90cb4
JJ
7192 if (hashcodes == NULL)
7193 return FALSE;
14b1c01e
AM
7194 hashinf.hashcodes = hashcodes;
7195 hashinf.error = FALSE;
5a580b3a 7196
fdc90cb4
JJ
7197 /* Put all hash values in HASHCODES. */
7198 elf_link_hash_traverse (elf_hash_table (info),
14b1c01e
AM
7199 elf_collect_hash_codes, &hashinf);
7200 if (hashinf.error)
4dd07732
AM
7201 {
7202 free (hashcodes);
7203 return FALSE;
7204 }
5a580b3a 7205
14b1c01e 7206 nsyms = hashinf.hashcodes - hashcodes;
fdc90cb4
JJ
7207 bucketcount
7208 = compute_bucket_count (info, hashcodes, nsyms, 0);
7209 free (hashcodes);
7210
4b48e2f6 7211 if (bucketcount == 0 && nsyms > 0)
fdc90cb4 7212 return FALSE;
5a580b3a 7213
fdc90cb4
JJ
7214 elf_hash_table (info)->bucketcount = bucketcount;
7215
3d4d4302 7216 s = bfd_get_linker_section (dynobj, ".hash");
fdc90cb4
JJ
7217 BFD_ASSERT (s != NULL);
7218 hash_entry_size = elf_section_data (s)->this_hdr.sh_entsize;
7219 s->size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
a50b1753 7220 s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
fdc90cb4
JJ
7221 if (s->contents == NULL)
7222 return FALSE;
7223
7224 bfd_put (8 * hash_entry_size, output_bfd, bucketcount, s->contents);
7225 bfd_put (8 * hash_entry_size, output_bfd, dynsymcount,
7226 s->contents + hash_entry_size);
7227 }
7228
7229 if (info->emit_gnu_hash)
7230 {
7231 size_t i, cnt;
7232 unsigned char *contents;
7233 struct collect_gnu_hash_codes cinfo;
7234 bfd_size_type amt;
7235 size_t bucketcount;
7236
7237 memset (&cinfo, 0, sizeof (cinfo));
7238
7239 /* Compute the hash values for all exported symbols. At the same
7240 time store the values in an array so that we could use them for
7241 optimizations. */
7242 amt = dynsymcount * 2 * sizeof (unsigned long int);
a50b1753 7243 cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt);
fdc90cb4
JJ
7244 if (cinfo.hashcodes == NULL)
7245 return FALSE;
7246
7247 cinfo.hashval = cinfo.hashcodes + dynsymcount;
7248 cinfo.min_dynindx = -1;
7249 cinfo.output_bfd = output_bfd;
7250 cinfo.bed = bed;
7251
7252 /* Put all hash values in HASHCODES. */
7253 elf_link_hash_traverse (elf_hash_table (info),
7254 elf_collect_gnu_hash_codes, &cinfo);
14b1c01e 7255 if (cinfo.error)
4dd07732
AM
7256 {
7257 free (cinfo.hashcodes);
7258 return FALSE;
7259 }
fdc90cb4
JJ
7260
7261 bucketcount
7262 = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1);
7263
7264 if (bucketcount == 0)
7265 {
7266 free (cinfo.hashcodes);
7267 return FALSE;
7268 }
7269
3d4d4302 7270 s = bfd_get_linker_section (dynobj, ".gnu.hash");
fdc90cb4
JJ
7271 BFD_ASSERT (s != NULL);
7272
7273 if (cinfo.nsyms == 0)
7274 {
7275 /* Empty .gnu.hash section is special. */
7276 BFD_ASSERT (cinfo.min_dynindx == -1);
7277 free (cinfo.hashcodes);
7278 s->size = 5 * 4 + bed->s->arch_size / 8;
a50b1753 7279 contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
fdc90cb4
JJ
7280 if (contents == NULL)
7281 return FALSE;
7282 s->contents = contents;
7283 /* 1 empty bucket. */
7284 bfd_put_32 (output_bfd, 1, contents);
7285 /* SYMIDX above the special symbol 0. */
7286 bfd_put_32 (output_bfd, 1, contents + 4);
7287 /* Just one word for bitmask. */
7288 bfd_put_32 (output_bfd, 1, contents + 8);
7289 /* Only hash fn bloom filter. */
7290 bfd_put_32 (output_bfd, 0, contents + 12);
7291 /* No hashes are valid - empty bitmask. */
7292 bfd_put (bed->s->arch_size, output_bfd, 0, contents + 16);
7293 /* No hashes in the only bucket. */
7294 bfd_put_32 (output_bfd, 0,
7295 contents + 16 + bed->s->arch_size / 8);
7296 }
7297 else
7298 {
9e6619e2 7299 unsigned long int maskwords, maskbitslog2, x;
0b33793d 7300 BFD_ASSERT (cinfo.min_dynindx != -1);
fdc90cb4 7301
9e6619e2
AM
7302 x = cinfo.nsyms;
7303 maskbitslog2 = 1;
7304 while ((x >>= 1) != 0)
7305 ++maskbitslog2;
fdc90cb4
JJ
7306 if (maskbitslog2 < 3)
7307 maskbitslog2 = 5;
7308 else if ((1 << (maskbitslog2 - 2)) & cinfo.nsyms)
7309 maskbitslog2 = maskbitslog2 + 3;
7310 else
7311 maskbitslog2 = maskbitslog2 + 2;
7312 if (bed->s->arch_size == 64)
7313 {
7314 if (maskbitslog2 == 5)
7315 maskbitslog2 = 6;
7316 cinfo.shift1 = 6;
7317 }
7318 else
7319 cinfo.shift1 = 5;
7320 cinfo.mask = (1 << cinfo.shift1) - 1;
2ccdbfcc 7321 cinfo.shift2 = maskbitslog2;
fdc90cb4
JJ
7322 cinfo.maskbits = 1 << maskbitslog2;
7323 maskwords = 1 << (maskbitslog2 - cinfo.shift1);
7324 amt = bucketcount * sizeof (unsigned long int) * 2;
7325 amt += maskwords * sizeof (bfd_vma);
a50b1753 7326 cinfo.bitmask = (bfd_vma *) bfd_malloc (amt);
fdc90cb4
JJ
7327 if (cinfo.bitmask == NULL)
7328 {
7329 free (cinfo.hashcodes);
7330 return FALSE;
7331 }
7332
a50b1753 7333 cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords);
fdc90cb4
JJ
7334 cinfo.indx = cinfo.counts + bucketcount;
7335 cinfo.symindx = dynsymcount - cinfo.nsyms;
7336 memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma));
7337
7338 /* Determine how often each hash bucket is used. */
7339 memset (cinfo.counts, 0, bucketcount * sizeof (cinfo.counts[0]));
7340 for (i = 0; i < cinfo.nsyms; ++i)
7341 ++cinfo.counts[cinfo.hashcodes[i] % bucketcount];
7342
7343 for (i = 0, cnt = cinfo.symindx; i < bucketcount; ++i)
7344 if (cinfo.counts[i] != 0)
7345 {
7346 cinfo.indx[i] = cnt;
7347 cnt += cinfo.counts[i];
7348 }
7349 BFD_ASSERT (cnt == dynsymcount);
7350 cinfo.bucketcount = bucketcount;
7351 cinfo.local_indx = cinfo.min_dynindx;
7352
7353 s->size = (4 + bucketcount + cinfo.nsyms) * 4;
7354 s->size += cinfo.maskbits / 8;
a50b1753 7355 contents = (unsigned char *) bfd_zalloc (output_bfd, s->size);
fdc90cb4
JJ
7356 if (contents == NULL)
7357 {
7358 free (cinfo.bitmask);
7359 free (cinfo.hashcodes);
7360 return FALSE;
7361 }
7362
7363 s->contents = contents;
7364 bfd_put_32 (output_bfd, bucketcount, contents);
7365 bfd_put_32 (output_bfd, cinfo.symindx, contents + 4);
7366 bfd_put_32 (output_bfd, maskwords, contents + 8);
7367 bfd_put_32 (output_bfd, cinfo.shift2, contents + 12);
7368 contents += 16 + cinfo.maskbits / 8;
7369
7370 for (i = 0; i < bucketcount; ++i)
7371 {
7372 if (cinfo.counts[i] == 0)
7373 bfd_put_32 (output_bfd, 0, contents);
7374 else
7375 bfd_put_32 (output_bfd, cinfo.indx[i], contents);
7376 contents += 4;
7377 }
7378
7379 cinfo.contents = contents;
7380
7381 /* Renumber dynamic symbols, populate .gnu.hash section. */
7382 elf_link_hash_traverse (elf_hash_table (info),
7383 elf_renumber_gnu_hash_syms, &cinfo);
7384
7385 contents = s->contents + 16;
7386 for (i = 0; i < maskwords; ++i)
7387 {
7388 bfd_put (bed->s->arch_size, output_bfd, cinfo.bitmask[i],
7389 contents);
7390 contents += bed->s->arch_size / 8;
7391 }
7392
7393 free (cinfo.bitmask);
7394 free (cinfo.hashcodes);
7395 }
7396 }
5a580b3a 7397
3d4d4302 7398 s = bfd_get_linker_section (dynobj, ".dynstr");
5a580b3a
AM
7399 BFD_ASSERT (s != NULL);
7400
4ad4eba5 7401 elf_finalize_dynstr (output_bfd, info);
5a580b3a 7402
eea6121a 7403 s->size = _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5a580b3a
AM
7404
7405 for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
7406 if (!_bfd_elf_add_dynamic_entry (info, DT_NULL, 0))
7407 return FALSE;
7408 }
7409
7410 return TRUE;
7411}
4d269e42 7412\f
4d269e42
AM
7413/* Make sure sec_info_type is cleared if sec_info is cleared too. */
7414
7415static void
7416merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
7417 asection *sec)
7418{
dbaa2011
AM
7419 BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
7420 sec->sec_info_type = SEC_INFO_TYPE_NONE;
4d269e42
AM
7421}
7422
7423/* Finish SHF_MERGE section merging. */
7424
7425bfd_boolean
630993ec 7426_bfd_elf_merge_sections (bfd *obfd, struct bfd_link_info *info)
4d269e42
AM
7427{
7428 bfd *ibfd;
7429 asection *sec;
7430
7431 if (!is_elf_hash_table (info->hash))
7432 return FALSE;
7433
c72f2fb2 7434 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
630993ec
AM
7435 if ((ibfd->flags & DYNAMIC) == 0
7436 && bfd_get_flavour (ibfd) == bfd_target_elf_flavour
017e6bce
AM
7437 && (elf_elfheader (ibfd)->e_ident[EI_CLASS]
7438 == get_elf_backend_data (obfd)->s->elfclass))
4d269e42
AM
7439 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7440 if ((sec->flags & SEC_MERGE) != 0
7441 && !bfd_is_abs_section (sec->output_section))
7442 {
7443 struct bfd_elf_section_data *secdata;
7444
7445 secdata = elf_section_data (sec);
630993ec 7446 if (! _bfd_add_merge_section (obfd,
4d269e42
AM
7447 &elf_hash_table (info)->merge_info,
7448 sec, &secdata->sec_info))
7449 return FALSE;
7450 else if (secdata->sec_info)
dbaa2011 7451 sec->sec_info_type = SEC_INFO_TYPE_MERGE;
4d269e42
AM
7452 }
7453
7454 if (elf_hash_table (info)->merge_info != NULL)
630993ec 7455 _bfd_merge_sections (obfd, info, elf_hash_table (info)->merge_info,
4d269e42
AM
7456 merge_sections_remove_hook);
7457 return TRUE;
7458}
7459
7460/* Create an entry in an ELF linker hash table. */
7461
7462struct bfd_hash_entry *
7463_bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
7464 struct bfd_hash_table *table,
7465 const char *string)
7466{
7467 /* Allocate the structure if it has not already been allocated by a
7468 subclass. */
7469 if (entry == NULL)
7470 {
a50b1753 7471 entry = (struct bfd_hash_entry *)
ca4be51c 7472 bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
4d269e42
AM
7473 if (entry == NULL)
7474 return entry;
7475 }
7476
7477 /* Call the allocation method of the superclass. */
7478 entry = _bfd_link_hash_newfunc (entry, table, string);
7479 if (entry != NULL)
7480 {
7481 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
7482 struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
7483
7484 /* Set local fields. */
7485 ret->indx = -1;
7486 ret->dynindx = -1;
7487 ret->got = htab->init_got_refcount;
7488 ret->plt = htab->init_plt_refcount;
7489 memset (&ret->size, 0, (sizeof (struct elf_link_hash_entry)
7490 - offsetof (struct elf_link_hash_entry, size)));
7491 /* Assume that we have been called by a non-ELF symbol reader.
7492 This flag is then reset by the code which reads an ELF input
7493 file. This ensures that a symbol created by a non-ELF symbol
7494 reader will have the flag set correctly. */
7495 ret->non_elf = 1;
7496 }
7497
7498 return entry;
7499}
7500
7501/* Copy data from an indirect symbol to its direct symbol, hiding the
7502 old indirect symbol. Also used for copying flags to a weakdef. */
7503
7504void
7505_bfd_elf_link_hash_copy_indirect (struct bfd_link_info *info,
7506 struct elf_link_hash_entry *dir,
7507 struct elf_link_hash_entry *ind)
7508{
7509 struct elf_link_hash_table *htab;
7510
7511 /* Copy down any references that we may have already seen to the
e81830c5 7512 symbol which just became indirect. */
4d269e42 7513
422f1182 7514 if (dir->versioned != versioned_hidden)
e81830c5
AM
7515 dir->ref_dynamic |= ind->ref_dynamic;
7516 dir->ref_regular |= ind->ref_regular;
7517 dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
7518 dir->non_got_ref |= ind->non_got_ref;
7519 dir->needs_plt |= ind->needs_plt;
7520 dir->pointer_equality_needed |= ind->pointer_equality_needed;
4d269e42
AM
7521
7522 if (ind->root.type != bfd_link_hash_indirect)
7523 return;
7524
7525 /* Copy over the global and procedure linkage table refcount entries.
7526 These may have been already set up by a check_relocs routine. */
7527 htab = elf_hash_table (info);
7528 if (ind->got.refcount > htab->init_got_refcount.refcount)
7529 {
7530 if (dir->got.refcount < 0)
7531 dir->got.refcount = 0;
7532 dir->got.refcount += ind->got.refcount;
7533 ind->got.refcount = htab->init_got_refcount.refcount;
7534 }
7535
7536 if (ind->plt.refcount > htab->init_plt_refcount.refcount)
7537 {
7538 if (dir->plt.refcount < 0)
7539 dir->plt.refcount = 0;
7540 dir->plt.refcount += ind->plt.refcount;
7541 ind->plt.refcount = htab->init_plt_refcount.refcount;
7542 }
7543
7544 if (ind->dynindx != -1)
7545 {
7546 if (dir->dynindx != -1)
7547 _bfd_elf_strtab_delref (htab->dynstr, dir->dynstr_index);
7548 dir->dynindx = ind->dynindx;
7549 dir->dynstr_index = ind->dynstr_index;
7550 ind->dynindx = -1;
7551 ind->dynstr_index = 0;
7552 }
7553}
7554
7555void
7556_bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info,
7557 struct elf_link_hash_entry *h,
7558 bfd_boolean force_local)
7559{
3aa14d16
L
7560 /* STT_GNU_IFUNC symbol must go through PLT. */
7561 if (h->type != STT_GNU_IFUNC)
7562 {
7563 h->plt = elf_hash_table (info)->init_plt_offset;
7564 h->needs_plt = 0;
7565 }
4d269e42
AM
7566 if (force_local)
7567 {
7568 h->forced_local = 1;
7569 if (h->dynindx != -1)
7570 {
4d269e42
AM
7571 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
7572 h->dynstr_index);
641338d8
AM
7573 h->dynindx = -1;
7574 h->dynstr_index = 0;
4d269e42
AM
7575 }
7576 }
7577}
7578
34a87bb0
L
7579/* Hide a symbol. */
7580
7581void
7582_bfd_elf_link_hide_symbol (bfd *output_bfd,
7583 struct bfd_link_info *info,
7584 struct bfd_link_hash_entry *h)
7585{
7586 if (is_elf_hash_table (info->hash))
7587 {
7588 const struct elf_backend_data *bed
7589 = get_elf_backend_data (output_bfd);
7590 struct elf_link_hash_entry *eh
7591 = (struct elf_link_hash_entry *) h;
7592 bed->elf_backend_hide_symbol (info, eh, TRUE);
7593 eh->def_dynamic = 0;
7594 eh->ref_dynamic = 0;
7595 eh->dynamic_def = 0;
7596 }
7597}
7598
7bf52ea2
AM
7599/* Initialize an ELF linker hash table. *TABLE has been zeroed by our
7600 caller. */
4d269e42
AM
7601
7602bfd_boolean
7603_bfd_elf_link_hash_table_init
7604 (struct elf_link_hash_table *table,
7605 bfd *abfd,
7606 struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
7607 struct bfd_hash_table *,
7608 const char *),
4dfe6ac6
NC
7609 unsigned int entsize,
7610 enum elf_target_id target_id)
4d269e42
AM
7611{
7612 bfd_boolean ret;
7613 int can_refcount = get_elf_backend_data (abfd)->can_refcount;
7614
4d269e42
AM
7615 table->init_got_refcount.refcount = can_refcount - 1;
7616 table->init_plt_refcount.refcount = can_refcount - 1;
7617 table->init_got_offset.offset = -(bfd_vma) 1;
7618 table->init_plt_offset.offset = -(bfd_vma) 1;
7619 /* The first dynamic symbol is a dummy. */
7620 table->dynsymcount = 1;
7621
7622 ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc, entsize);
4dfe6ac6 7623
4d269e42 7624 table->root.type = bfd_link_elf_hash_table;
4dfe6ac6 7625 table->hash_table_id = target_id;
4d269e42
AM
7626
7627 return ret;
7628}
7629
7630/* Create an ELF linker hash table. */
7631
7632struct bfd_link_hash_table *
7633_bfd_elf_link_hash_table_create (bfd *abfd)
7634{
7635 struct elf_link_hash_table *ret;
7636 bfd_size_type amt = sizeof (struct elf_link_hash_table);
7637
7bf52ea2 7638 ret = (struct elf_link_hash_table *) bfd_zmalloc (amt);
4d269e42
AM
7639 if (ret == NULL)
7640 return NULL;
7641
7642 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc,
4dfe6ac6
NC
7643 sizeof (struct elf_link_hash_entry),
7644 GENERIC_ELF_DATA))
4d269e42
AM
7645 {
7646 free (ret);
7647 return NULL;
7648 }
d495ab0d 7649 ret->root.hash_table_free = _bfd_elf_link_hash_table_free;
4d269e42
AM
7650
7651 return &ret->root;
7652}
7653
9f7c3e5e
AM
7654/* Destroy an ELF linker hash table. */
7655
7656void
d495ab0d 7657_bfd_elf_link_hash_table_free (bfd *obfd)
9f7c3e5e 7658{
d495ab0d
AM
7659 struct elf_link_hash_table *htab;
7660
7661 htab = (struct elf_link_hash_table *) obfd->link.hash;
9f7c3e5e
AM
7662 if (htab->dynstr != NULL)
7663 _bfd_elf_strtab_free (htab->dynstr);
7664 _bfd_merge_sections_free (htab->merge_info);
d495ab0d 7665 _bfd_generic_link_hash_table_free (obfd);
9f7c3e5e
AM
7666}
7667
4d269e42
AM
7668/* This is a hook for the ELF emulation code in the generic linker to
7669 tell the backend linker what file name to use for the DT_NEEDED
7670 entry for a dynamic object. */
7671
7672void
7673bfd_elf_set_dt_needed_name (bfd *abfd, const char *name)
7674{
7675 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7676 && bfd_get_format (abfd) == bfd_object)
7677 elf_dt_name (abfd) = name;
7678}
7679
7680int
7681bfd_elf_get_dyn_lib_class (bfd *abfd)
7682{
7683 int lib_class;
7684 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7685 && bfd_get_format (abfd) == bfd_object)
7686 lib_class = elf_dyn_lib_class (abfd);
7687 else
7688 lib_class = 0;
7689 return lib_class;
7690}
7691
7692void
7693bfd_elf_set_dyn_lib_class (bfd *abfd, enum dynamic_lib_link_class lib_class)
7694{
7695 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7696 && bfd_get_format (abfd) == bfd_object)
7697 elf_dyn_lib_class (abfd) = lib_class;
7698}
7699
7700/* Get the list of DT_NEEDED entries for a link. This is a hook for
7701 the linker ELF emulation code. */
7702
7703struct bfd_link_needed_list *
7704bfd_elf_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED,
7705 struct bfd_link_info *info)
7706{
7707 if (! is_elf_hash_table (info->hash))
7708 return NULL;
7709 return elf_hash_table (info)->needed;
7710}
7711
7712/* Get the list of DT_RPATH/DT_RUNPATH entries for a link. This is a
7713 hook for the linker ELF emulation code. */
7714
7715struct bfd_link_needed_list *
7716bfd_elf_get_runpath_list (bfd *abfd ATTRIBUTE_UNUSED,
7717 struct bfd_link_info *info)
7718{
7719 if (! is_elf_hash_table (info->hash))
7720 return NULL;
7721 return elf_hash_table (info)->runpath;
7722}
7723
7724/* Get the name actually used for a dynamic object for a link. This
7725 is the SONAME entry if there is one. Otherwise, it is the string
7726 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
7727
7728const char *
7729bfd_elf_get_dt_soname (bfd *abfd)
7730{
7731 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
7732 && bfd_get_format (abfd) == bfd_object)
7733 return elf_dt_name (abfd);
7734 return NULL;
7735}
7736
7737/* Get the list of DT_NEEDED entries from a BFD. This is a hook for
7738 the ELF linker emulation code. */
7739
7740bfd_boolean
7741bfd_elf_get_bfd_needed_list (bfd *abfd,
7742 struct bfd_link_needed_list **pneeded)
7743{
7744 asection *s;
7745 bfd_byte *dynbuf = NULL;
cb33740c 7746 unsigned int elfsec;
4d269e42
AM
7747 unsigned long shlink;
7748 bfd_byte *extdyn, *extdynend;
7749 size_t extdynsize;
7750 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
7751
7752 *pneeded = NULL;
7753
7754 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
7755 || bfd_get_format (abfd) != bfd_object)
7756 return TRUE;
7757
7758 s = bfd_get_section_by_name (abfd, ".dynamic");
7759 if (s == NULL || s->size == 0)
7760 return TRUE;
7761
7762 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
7763 goto error_return;
7764
7765 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
cb33740c 7766 if (elfsec == SHN_BAD)
4d269e42
AM
7767 goto error_return;
7768
7769 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
c152c796 7770
4d269e42
AM
7771 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
7772 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
7773
7774 extdyn = dynbuf;
7775 extdynend = extdyn + s->size;
7776 for (; extdyn < extdynend; extdyn += extdynsize)
7777 {
7778 Elf_Internal_Dyn dyn;
7779
7780 (*swap_dyn_in) (abfd, extdyn, &dyn);
7781
7782 if (dyn.d_tag == DT_NULL)
7783 break;
7784
7785 if (dyn.d_tag == DT_NEEDED)
7786 {
7787 const char *string;
7788 struct bfd_link_needed_list *l;
7789 unsigned int tagv = dyn.d_un.d_val;
7790 bfd_size_type amt;
7791
7792 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
7793 if (string == NULL)
7794 goto error_return;
7795
7796 amt = sizeof *l;
a50b1753 7797 l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
4d269e42
AM
7798 if (l == NULL)
7799 goto error_return;
7800
7801 l->by = abfd;
7802 l->name = string;
7803 l->next = *pneeded;
7804 *pneeded = l;
7805 }
7806 }
7807
7808 free (dynbuf);
7809
7810 return TRUE;
7811
7812 error_return:
7813 if (dynbuf != NULL)
7814 free (dynbuf);
7815 return FALSE;
7816}
7817
7818struct elf_symbuf_symbol
7819{
7820 unsigned long st_name; /* Symbol name, index in string tbl */
7821 unsigned char st_info; /* Type and binding attributes */
7822 unsigned char st_other; /* Visibilty, and target specific */
7823};
7824
7825struct elf_symbuf_head
7826{
7827 struct elf_symbuf_symbol *ssym;
ef53be89 7828 size_t count;
4d269e42
AM
7829 unsigned int st_shndx;
7830};
7831
7832struct elf_symbol
7833{
7834 union
7835 {
7836 Elf_Internal_Sym *isym;
7837 struct elf_symbuf_symbol *ssym;
7838 } u;
7839 const char *name;
7840};
7841
7842/* Sort references to symbols by ascending section number. */
7843
7844static int
7845elf_sort_elf_symbol (const void *arg1, const void *arg2)
7846{
7847 const Elf_Internal_Sym *s1 = *(const Elf_Internal_Sym **) arg1;
7848 const Elf_Internal_Sym *s2 = *(const Elf_Internal_Sym **) arg2;
7849
7850 return s1->st_shndx - s2->st_shndx;
7851}
7852
7853static int
7854elf_sym_name_compare (const void *arg1, const void *arg2)
7855{
7856 const struct elf_symbol *s1 = (const struct elf_symbol *) arg1;
7857 const struct elf_symbol *s2 = (const struct elf_symbol *) arg2;
7858 return strcmp (s1->name, s2->name);
7859}
7860
7861static struct elf_symbuf_head *
ef53be89 7862elf_create_symbuf (size_t symcount, Elf_Internal_Sym *isymbuf)
4d269e42 7863{
14b1c01e 7864 Elf_Internal_Sym **ind, **indbufend, **indbuf;
4d269e42
AM
7865 struct elf_symbuf_symbol *ssym;
7866 struct elf_symbuf_head *ssymbuf, *ssymhead;
ef53be89 7867 size_t i, shndx_count, total_size;
4d269e42 7868
a50b1753 7869 indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf));
4d269e42
AM
7870 if (indbuf == NULL)
7871 return NULL;
7872
7873 for (ind = indbuf, i = 0; i < symcount; i++)
7874 if (isymbuf[i].st_shndx != SHN_UNDEF)
7875 *ind++ = &isymbuf[i];
7876 indbufend = ind;
7877
7878 qsort (indbuf, indbufend - indbuf, sizeof (Elf_Internal_Sym *),
7879 elf_sort_elf_symbol);
7880
7881 shndx_count = 0;
7882 if (indbufend > indbuf)
7883 for (ind = indbuf, shndx_count++; ind < indbufend - 1; ind++)
7884 if (ind[0]->st_shndx != ind[1]->st_shndx)
7885 shndx_count++;
7886
3ae181ee
L
7887 total_size = ((shndx_count + 1) * sizeof (*ssymbuf)
7888 + (indbufend - indbuf) * sizeof (*ssym));
a50b1753 7889 ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size);
4d269e42
AM
7890 if (ssymbuf == NULL)
7891 {
7892 free (indbuf);
7893 return NULL;
7894 }
7895
3ae181ee 7896 ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1);
4d269e42
AM
7897 ssymbuf->ssym = NULL;
7898 ssymbuf->count = shndx_count;
7899 ssymbuf->st_shndx = 0;
7900 for (ssymhead = ssymbuf, ind = indbuf; ind < indbufend; ssym++, ind++)
7901 {
7902 if (ind == indbuf || ssymhead->st_shndx != (*ind)->st_shndx)
7903 {
7904 ssymhead++;
7905 ssymhead->ssym = ssym;
7906 ssymhead->count = 0;
7907 ssymhead->st_shndx = (*ind)->st_shndx;
7908 }
7909 ssym->st_name = (*ind)->st_name;
7910 ssym->st_info = (*ind)->st_info;
7911 ssym->st_other = (*ind)->st_other;
7912 ssymhead->count++;
7913 }
ef53be89 7914 BFD_ASSERT ((size_t) (ssymhead - ssymbuf) == shndx_count
3ae181ee
L
7915 && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf)
7916 == total_size));
4d269e42
AM
7917
7918 free (indbuf);
7919 return ssymbuf;
7920}
7921
7922/* Check if 2 sections define the same set of local and global
7923 symbols. */
7924
8f317e31 7925static bfd_boolean
4d269e42
AM
7926bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2,
7927 struct bfd_link_info *info)
7928{
7929 bfd *bfd1, *bfd2;
7930 const struct elf_backend_data *bed1, *bed2;
7931 Elf_Internal_Shdr *hdr1, *hdr2;
ef53be89 7932 size_t symcount1, symcount2;
4d269e42
AM
7933 Elf_Internal_Sym *isymbuf1, *isymbuf2;
7934 struct elf_symbuf_head *ssymbuf1, *ssymbuf2;
7935 Elf_Internal_Sym *isym, *isymend;
7936 struct elf_symbol *symtable1 = NULL, *symtable2 = NULL;
ef53be89 7937 size_t count1, count2, i;
cb33740c 7938 unsigned int shndx1, shndx2;
4d269e42
AM
7939 bfd_boolean result;
7940
7941 bfd1 = sec1->owner;
7942 bfd2 = sec2->owner;
7943
4d269e42
AM
7944 /* Both sections have to be in ELF. */
7945 if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour
7946 || bfd_get_flavour (bfd2) != bfd_target_elf_flavour)
7947 return FALSE;
7948
7949 if (elf_section_type (sec1) != elf_section_type (sec2))
7950 return FALSE;
7951
4d269e42
AM
7952 shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1);
7953 shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2);
cb33740c 7954 if (shndx1 == SHN_BAD || shndx2 == SHN_BAD)
4d269e42
AM
7955 return FALSE;
7956
7957 bed1 = get_elf_backend_data (bfd1);
7958 bed2 = get_elf_backend_data (bfd2);
7959 hdr1 = &elf_tdata (bfd1)->symtab_hdr;
7960 symcount1 = hdr1->sh_size / bed1->s->sizeof_sym;
7961 hdr2 = &elf_tdata (bfd2)->symtab_hdr;
7962 symcount2 = hdr2->sh_size / bed2->s->sizeof_sym;
7963
7964 if (symcount1 == 0 || symcount2 == 0)
7965 return FALSE;
7966
7967 result = FALSE;
7968 isymbuf1 = NULL;
7969 isymbuf2 = NULL;
a50b1753
NC
7970 ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf;
7971 ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf;
4d269e42
AM
7972
7973 if (ssymbuf1 == NULL)
7974 {
7975 isymbuf1 = bfd_elf_get_elf_syms (bfd1, hdr1, symcount1, 0,
7976 NULL, NULL, NULL);
7977 if (isymbuf1 == NULL)
7978 goto done;
7979
7980 if (!info->reduce_memory_overheads)
7981 elf_tdata (bfd1)->symbuf = ssymbuf1
7982 = elf_create_symbuf (symcount1, isymbuf1);
7983 }
7984
7985 if (ssymbuf1 == NULL || ssymbuf2 == NULL)
7986 {
7987 isymbuf2 = bfd_elf_get_elf_syms (bfd2, hdr2, symcount2, 0,
7988 NULL, NULL, NULL);
7989 if (isymbuf2 == NULL)
7990 goto done;
7991
7992 if (ssymbuf1 != NULL && !info->reduce_memory_overheads)
7993 elf_tdata (bfd2)->symbuf = ssymbuf2
7994 = elf_create_symbuf (symcount2, isymbuf2);
7995 }
7996
7997 if (ssymbuf1 != NULL && ssymbuf2 != NULL)
7998 {
7999 /* Optimized faster version. */
ef53be89 8000 size_t lo, hi, mid;
4d269e42
AM
8001 struct elf_symbol *symp;
8002 struct elf_symbuf_symbol *ssym, *ssymend;
8003
8004 lo = 0;
8005 hi = ssymbuf1->count;
8006 ssymbuf1++;
8007 count1 = 0;
8008 while (lo < hi)
8009 {
8010 mid = (lo + hi) / 2;
cb33740c 8011 if (shndx1 < ssymbuf1[mid].st_shndx)
4d269e42 8012 hi = mid;
cb33740c 8013 else if (shndx1 > ssymbuf1[mid].st_shndx)
4d269e42
AM
8014 lo = mid + 1;
8015 else
8016 {
8017 count1 = ssymbuf1[mid].count;
8018 ssymbuf1 += mid;
8019 break;
8020 }
8021 }
8022
8023 lo = 0;
8024 hi = ssymbuf2->count;
8025 ssymbuf2++;
8026 count2 = 0;
8027 while (lo < hi)
8028 {
8029 mid = (lo + hi) / 2;
cb33740c 8030 if (shndx2 < ssymbuf2[mid].st_shndx)
4d269e42 8031 hi = mid;
cb33740c 8032 else if (shndx2 > ssymbuf2[mid].st_shndx)
4d269e42
AM
8033 lo = mid + 1;
8034 else
8035 {
8036 count2 = ssymbuf2[mid].count;
8037 ssymbuf2 += mid;
8038 break;
8039 }
8040 }
8041
8042 if (count1 == 0 || count2 == 0 || count1 != count2)
8043 goto done;
8044
ca4be51c
AM
8045 symtable1
8046 = (struct elf_symbol *) bfd_malloc (count1 * sizeof (*symtable1));
8047 symtable2
8048 = (struct elf_symbol *) bfd_malloc (count2 * sizeof (*symtable2));
4d269e42
AM
8049 if (symtable1 == NULL || symtable2 == NULL)
8050 goto done;
8051
8052 symp = symtable1;
8053 for (ssym = ssymbuf1->ssym, ssymend = ssym + count1;
8054 ssym < ssymend; ssym++, symp++)
8055 {
8056 symp->u.ssym = ssym;
8057 symp->name = bfd_elf_string_from_elf_section (bfd1,
8058 hdr1->sh_link,
8059 ssym->st_name);
8060 }
8061
8062 symp = symtable2;
8063 for (ssym = ssymbuf2->ssym, ssymend = ssym + count2;
8064 ssym < ssymend; ssym++, symp++)
8065 {
8066 symp->u.ssym = ssym;
8067 symp->name = bfd_elf_string_from_elf_section (bfd2,
8068 hdr2->sh_link,
8069 ssym->st_name);
8070 }
8071
8072 /* Sort symbol by name. */
8073 qsort (symtable1, count1, sizeof (struct elf_symbol),
8074 elf_sym_name_compare);
8075 qsort (symtable2, count1, sizeof (struct elf_symbol),
8076 elf_sym_name_compare);
8077
8078 for (i = 0; i < count1; i++)
8079 /* Two symbols must have the same binding, type and name. */
8080 if (symtable1 [i].u.ssym->st_info != symtable2 [i].u.ssym->st_info
8081 || symtable1 [i].u.ssym->st_other != symtable2 [i].u.ssym->st_other
8082 || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
8083 goto done;
8084
8085 result = TRUE;
8086 goto done;
8087 }
8088
a50b1753
NC
8089 symtable1 = (struct elf_symbol *)
8090 bfd_malloc (symcount1 * sizeof (struct elf_symbol));
8091 symtable2 = (struct elf_symbol *)
8092 bfd_malloc (symcount2 * sizeof (struct elf_symbol));
4d269e42
AM
8093 if (symtable1 == NULL || symtable2 == NULL)
8094 goto done;
8095
8096 /* Count definitions in the section. */
8097 count1 = 0;
8098 for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++)
cb33740c 8099 if (isym->st_shndx == shndx1)
4d269e42
AM
8100 symtable1[count1++].u.isym = isym;
8101
8102 count2 = 0;
8103 for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++)
cb33740c 8104 if (isym->st_shndx == shndx2)
4d269e42
AM
8105 symtable2[count2++].u.isym = isym;
8106
8107 if (count1 == 0 || count2 == 0 || count1 != count2)
8108 goto done;
8109
8110 for (i = 0; i < count1; i++)
8111 symtable1[i].name
8112 = bfd_elf_string_from_elf_section (bfd1, hdr1->sh_link,
8113 symtable1[i].u.isym->st_name);
8114
8115 for (i = 0; i < count2; i++)
8116 symtable2[i].name
8117 = bfd_elf_string_from_elf_section (bfd2, hdr2->sh_link,
8118 symtable2[i].u.isym->st_name);
8119
8120 /* Sort symbol by name. */
8121 qsort (symtable1, count1, sizeof (struct elf_symbol),
8122 elf_sym_name_compare);
8123 qsort (symtable2, count1, sizeof (struct elf_symbol),
8124 elf_sym_name_compare);
8125
8126 for (i = 0; i < count1; i++)
8127 /* Two symbols must have the same binding, type and name. */
8128 if (symtable1 [i].u.isym->st_info != symtable2 [i].u.isym->st_info
8129 || symtable1 [i].u.isym->st_other != symtable2 [i].u.isym->st_other
8130 || strcmp (symtable1 [i].name, symtable2 [i].name) != 0)
8131 goto done;
8132
8133 result = TRUE;
8134
8135done:
8136 if (symtable1)
8137 free (symtable1);
8138 if (symtable2)
8139 free (symtable2);
8140 if (isymbuf1)
8141 free (isymbuf1);
8142 if (isymbuf2)
8143 free (isymbuf2);
8144
8145 return result;
8146}
8147
8148/* Return TRUE if 2 section types are compatible. */
8149
8150bfd_boolean
8151_bfd_elf_match_sections_by_type (bfd *abfd, const asection *asec,
8152 bfd *bbfd, const asection *bsec)
8153{
8154 if (asec == NULL
8155 || bsec == NULL
8156 || abfd->xvec->flavour != bfd_target_elf_flavour
8157 || bbfd->xvec->flavour != bfd_target_elf_flavour)
8158 return TRUE;
8159
8160 return elf_section_type (asec) == elf_section_type (bsec);
8161}
8162\f
c152c796
AM
8163/* Final phase of ELF linker. */
8164
8165/* A structure we use to avoid passing large numbers of arguments. */
8166
8167struct elf_final_link_info
8168{
8169 /* General link information. */
8170 struct bfd_link_info *info;
8171 /* Output BFD. */
8172 bfd *output_bfd;
8173 /* Symbol string table. */
ef10c3ac 8174 struct elf_strtab_hash *symstrtab;
c152c796
AM
8175 /* .hash section. */
8176 asection *hash_sec;
8177 /* symbol version section (.gnu.version). */
8178 asection *symver_sec;
8179 /* Buffer large enough to hold contents of any section. */
8180 bfd_byte *contents;
8181 /* Buffer large enough to hold external relocs of any section. */
8182 void *external_relocs;
8183 /* Buffer large enough to hold internal relocs of any section. */
8184 Elf_Internal_Rela *internal_relocs;
8185 /* Buffer large enough to hold external local symbols of any input
8186 BFD. */
8187 bfd_byte *external_syms;
8188 /* And a buffer for symbol section indices. */
8189 Elf_External_Sym_Shndx *locsym_shndx;
8190 /* Buffer large enough to hold internal local symbols of any input
8191 BFD. */
8192 Elf_Internal_Sym *internal_syms;
8193 /* Array large enough to hold a symbol index for each local symbol
8194 of any input BFD. */
8195 long *indices;
8196 /* Array large enough to hold a section pointer for each local
8197 symbol of any input BFD. */
8198 asection **sections;
ef10c3ac 8199 /* Buffer for SHT_SYMTAB_SHNDX section. */
c152c796 8200 Elf_External_Sym_Shndx *symshndxbuf;
ffbc01cc
AM
8201 /* Number of STT_FILE syms seen. */
8202 size_t filesym_count;
c152c796
AM
8203};
8204
8205/* This struct is used to pass information to elf_link_output_extsym. */
8206
8207struct elf_outext_info
8208{
8209 bfd_boolean failed;
8210 bfd_boolean localsyms;
34a79995 8211 bfd_boolean file_sym_done;
8b127cbc 8212 struct elf_final_link_info *flinfo;
c152c796
AM
8213};
8214
d9352518
DB
8215
8216/* Support for evaluating a complex relocation.
8217
8218 Complex relocations are generalized, self-describing relocations. The
8219 implementation of them consists of two parts: complex symbols, and the
a0c8462f 8220 relocations themselves.
d9352518
DB
8221
8222 The relocations are use a reserved elf-wide relocation type code (R_RELC
8223 external / BFD_RELOC_RELC internal) and an encoding of relocation field
8224 information (start bit, end bit, word width, etc) into the addend. This
8225 information is extracted from CGEN-generated operand tables within gas.
8226
8227 Complex symbols are mangled symbols (BSF_RELC external / STT_RELC
8228 internal) representing prefix-notation expressions, including but not
8229 limited to those sorts of expressions normally encoded as addends in the
8230 addend field. The symbol mangling format is:
8231
8232 <node> := <literal>
07d6d2b8
AM
8233 | <unary-operator> ':' <node>
8234 | <binary-operator> ':' <node> ':' <node>
d9352518
DB
8235 ;
8236
8237 <literal> := 's' <digits=N> ':' <N character symbol name>
07d6d2b8 8238 | 'S' <digits=N> ':' <N character section name>
d9352518
DB
8239 | '#' <hexdigits>
8240 ;
8241
8242 <binary-operator> := as in C
8243 <unary-operator> := as in C, plus "0-" for unambiguous negation. */
8244
8245static void
a0c8462f
AM
8246set_symbol_value (bfd *bfd_with_globals,
8247 Elf_Internal_Sym *isymbuf,
8248 size_t locsymcount,
8249 size_t symidx,
8250 bfd_vma val)
d9352518 8251{
8977835c
AM
8252 struct elf_link_hash_entry **sym_hashes;
8253 struct elf_link_hash_entry *h;
8254 size_t extsymoff = locsymcount;
d9352518 8255
8977835c 8256 if (symidx < locsymcount)
d9352518 8257 {
8977835c
AM
8258 Elf_Internal_Sym *sym;
8259
8260 sym = isymbuf + symidx;
8261 if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
8262 {
8263 /* It is a local symbol: move it to the
8264 "absolute" section and give it a value. */
8265 sym->st_shndx = SHN_ABS;
8266 sym->st_value = val;
8267 return;
8268 }
8269 BFD_ASSERT (elf_bad_symtab (bfd_with_globals));
8270 extsymoff = 0;
d9352518 8271 }
8977835c
AM
8272
8273 /* It is a global symbol: set its link type
8274 to "defined" and give it a value. */
8275
8276 sym_hashes = elf_sym_hashes (bfd_with_globals);
8277 h = sym_hashes [symidx - extsymoff];
8278 while (h->root.type == bfd_link_hash_indirect
8279 || h->root.type == bfd_link_hash_warning)
8280 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8281 h->root.type = bfd_link_hash_defined;
8282 h->root.u.def.value = val;
8283 h->root.u.def.section = bfd_abs_section_ptr;
d9352518
DB
8284}
8285
a0c8462f
AM
8286static bfd_boolean
8287resolve_symbol (const char *name,
8288 bfd *input_bfd,
8b127cbc 8289 struct elf_final_link_info *flinfo,
a0c8462f
AM
8290 bfd_vma *result,
8291 Elf_Internal_Sym *isymbuf,
8292 size_t locsymcount)
d9352518 8293{
a0c8462f
AM
8294 Elf_Internal_Sym *sym;
8295 struct bfd_link_hash_entry *global_entry;
8296 const char *candidate = NULL;
8297 Elf_Internal_Shdr *symtab_hdr;
8298 size_t i;
8299
d9352518
DB
8300 symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
8301
8302 for (i = 0; i < locsymcount; ++ i)
8303 {
8977835c 8304 sym = isymbuf + i;
d9352518
DB
8305
8306 if (ELF_ST_BIND (sym->st_info) != STB_LOCAL)
8307 continue;
8308
8309 candidate = bfd_elf_string_from_elf_section (input_bfd,
8310 symtab_hdr->sh_link,
8311 sym->st_name);
8312#ifdef DEBUG
0f02bbd9
AM
8313 printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n",
8314 name, candidate, (unsigned long) sym->st_value);
d9352518
DB
8315#endif
8316 if (candidate && strcmp (candidate, name) == 0)
8317 {
8b127cbc 8318 asection *sec = flinfo->sections [i];
d9352518 8319
0f02bbd9
AM
8320 *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0);
8321 *result += sec->output_offset + sec->output_section->vma;
d9352518 8322#ifdef DEBUG
0f02bbd9
AM
8323 printf ("Found symbol with value %8.8lx\n",
8324 (unsigned long) *result);
d9352518
DB
8325#endif
8326 return TRUE;
8327 }
8328 }
8329
8330 /* Hmm, haven't found it yet. perhaps it is a global. */
8b127cbc 8331 global_entry = bfd_link_hash_lookup (flinfo->info->hash, name,
a0c8462f 8332 FALSE, FALSE, TRUE);
d9352518
DB
8333 if (!global_entry)
8334 return FALSE;
a0c8462f 8335
d9352518
DB
8336 if (global_entry->type == bfd_link_hash_defined
8337 || global_entry->type == bfd_link_hash_defweak)
8338 {
a0c8462f
AM
8339 *result = (global_entry->u.def.value
8340 + global_entry->u.def.section->output_section->vma
8341 + global_entry->u.def.section->output_offset);
d9352518 8342#ifdef DEBUG
0f02bbd9
AM
8343 printf ("Found GLOBAL symbol '%s' with value %8.8lx\n",
8344 global_entry->root.string, (unsigned long) *result);
d9352518
DB
8345#endif
8346 return TRUE;
a0c8462f 8347 }
d9352518 8348
d9352518
DB
8349 return FALSE;
8350}
8351
37b01f6a
DG
8352/* Looks up NAME in SECTIONS. If found sets RESULT to NAME's address (in
8353 bytes) and returns TRUE, otherwise returns FALSE. Accepts pseudo-section
8354 names like "foo.end" which is the end address of section "foo". */
07d6d2b8 8355
d9352518 8356static bfd_boolean
a0c8462f
AM
8357resolve_section (const char *name,
8358 asection *sections,
37b01f6a
DG
8359 bfd_vma *result,
8360 bfd * abfd)
d9352518 8361{
a0c8462f
AM
8362 asection *curr;
8363 unsigned int len;
d9352518 8364
a0c8462f 8365 for (curr = sections; curr; curr = curr->next)
d9352518
DB
8366 if (strcmp (curr->name, name) == 0)
8367 {
8368 *result = curr->vma;
8369 return TRUE;
8370 }
8371
8372 /* Hmm. still haven't found it. try pseudo-section names. */
37b01f6a 8373 /* FIXME: This could be coded more efficiently... */
a0c8462f 8374 for (curr = sections; curr; curr = curr->next)
d9352518
DB
8375 {
8376 len = strlen (curr->name);
a0c8462f 8377 if (len > strlen (name))
d9352518
DB
8378 continue;
8379
8380 if (strncmp (curr->name, name, len) == 0)
8381 {
8382 if (strncmp (".end", name + len, 4) == 0)
8383 {
37b01f6a 8384 *result = curr->vma + curr->size / bfd_octets_per_byte (abfd);
d9352518
DB
8385 return TRUE;
8386 }
8387
8388 /* Insert more pseudo-section names here, if you like. */
8389 }
8390 }
a0c8462f 8391
d9352518
DB
8392 return FALSE;
8393}
8394
8395static void
a0c8462f 8396undefined_reference (const char *reftype, const char *name)
d9352518 8397{
695344c0 8398 /* xgettext:c-format */
a0c8462f
AM
8399 _bfd_error_handler (_("undefined %s reference in complex symbol: %s"),
8400 reftype, name);
d9352518
DB
8401}
8402
8403static bfd_boolean
a0c8462f
AM
8404eval_symbol (bfd_vma *result,
8405 const char **symp,
8406 bfd *input_bfd,
8b127cbc 8407 struct elf_final_link_info *flinfo,
a0c8462f
AM
8408 bfd_vma dot,
8409 Elf_Internal_Sym *isymbuf,
8410 size_t locsymcount,
8411 int signed_p)
d9352518 8412{
4b93929b
NC
8413 size_t len;
8414 size_t symlen;
a0c8462f
AM
8415 bfd_vma a;
8416 bfd_vma b;
4b93929b 8417 char symbuf[4096];
0f02bbd9 8418 const char *sym = *symp;
a0c8462f
AM
8419 const char *symend;
8420 bfd_boolean symbol_is_section = FALSE;
d9352518
DB
8421
8422 len = strlen (sym);
8423 symend = sym + len;
8424
4b93929b 8425 if (len < 1 || len > sizeof (symbuf))
d9352518
DB
8426 {
8427 bfd_set_error (bfd_error_invalid_operation);
8428 return FALSE;
8429 }
a0c8462f 8430
d9352518
DB
8431 switch (* sym)
8432 {
8433 case '.':
0f02bbd9
AM
8434 *result = dot;
8435 *symp = sym + 1;
d9352518
DB
8436 return TRUE;
8437
8438 case '#':
0f02bbd9
AM
8439 ++sym;
8440 *result = strtoul (sym, (char **) symp, 16);
d9352518
DB
8441 return TRUE;
8442
8443 case 'S':
8444 symbol_is_section = TRUE;
1a0670f3 8445 /* Fall through. */
a0c8462f 8446 case 's':
0f02bbd9
AM
8447 ++sym;
8448 symlen = strtol (sym, (char **) symp, 10);
8449 sym = *symp + 1; /* Skip the trailing ':'. */
d9352518 8450
4b93929b 8451 if (symend < sym || symlen + 1 > sizeof (symbuf))
d9352518
DB
8452 {
8453 bfd_set_error (bfd_error_invalid_operation);
8454 return FALSE;
8455 }
8456
8457 memcpy (symbuf, sym, symlen);
a0c8462f 8458 symbuf[symlen] = '\0';
0f02bbd9 8459 *symp = sym + symlen;
a0c8462f
AM
8460
8461 /* Is it always possible, with complex symbols, that gas "mis-guessed"
d9352518
DB
8462 the symbol as a section, or vice-versa. so we're pretty liberal in our
8463 interpretation here; section means "try section first", not "must be a
8464 section", and likewise with symbol. */
8465
a0c8462f 8466 if (symbol_is_section)
d9352518 8467 {
37b01f6a 8468 if (!resolve_section (symbuf, flinfo->output_bfd->sections, result, input_bfd)
8b127cbc 8469 && !resolve_symbol (symbuf, input_bfd, flinfo, result,
8977835c 8470 isymbuf, locsymcount))
d9352518
DB
8471 {
8472 undefined_reference ("section", symbuf);
8473 return FALSE;
8474 }
a0c8462f
AM
8475 }
8476 else
d9352518 8477 {
8b127cbc 8478 if (!resolve_symbol (symbuf, input_bfd, flinfo, result,
8977835c 8479 isymbuf, locsymcount)
8b127cbc 8480 && !resolve_section (symbuf, flinfo->output_bfd->sections,
37b01f6a 8481 result, input_bfd))
d9352518
DB
8482 {
8483 undefined_reference ("symbol", symbuf);
8484 return FALSE;
8485 }
8486 }
8487
8488 return TRUE;
a0c8462f 8489
d9352518
DB
8490 /* All that remains are operators. */
8491
8492#define UNARY_OP(op) \
8493 if (strncmp (sym, #op, strlen (#op)) == 0) \
8494 { \
8495 sym += strlen (#op); \
a0c8462f
AM
8496 if (*sym == ':') \
8497 ++sym; \
0f02bbd9 8498 *symp = sym; \
8b127cbc 8499 if (!eval_symbol (&a, symp, input_bfd, flinfo, dot, \
0f02bbd9 8500 isymbuf, locsymcount, signed_p)) \
a0c8462f
AM
8501 return FALSE; \
8502 if (signed_p) \
0f02bbd9 8503 *result = op ((bfd_signed_vma) a); \
a0c8462f
AM
8504 else \
8505 *result = op a; \
d9352518
DB
8506 return TRUE; \
8507 }
8508
8509#define BINARY_OP(op) \
8510 if (strncmp (sym, #op, strlen (#op)) == 0) \
8511 { \
8512 sym += strlen (#op); \
a0c8462f
AM
8513 if (*sym == ':') \
8514 ++sym; \
0f02bbd9 8515 *symp = sym; \
8b127cbc 8516 if (!eval_symbol (&a, symp, input_bfd, flinfo, dot, \
0f02bbd9 8517 isymbuf, locsymcount, signed_p)) \
a0c8462f 8518 return FALSE; \
0f02bbd9 8519 ++*symp; \
8b127cbc 8520 if (!eval_symbol (&b, symp, input_bfd, flinfo, dot, \
0f02bbd9 8521 isymbuf, locsymcount, signed_p)) \
a0c8462f
AM
8522 return FALSE; \
8523 if (signed_p) \
0f02bbd9 8524 *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \
a0c8462f
AM
8525 else \
8526 *result = a op b; \
d9352518
DB
8527 return TRUE; \
8528 }
8529
8530 default:
8531 UNARY_OP (0-);
8532 BINARY_OP (<<);
8533 BINARY_OP (>>);
8534 BINARY_OP (==);
8535 BINARY_OP (!=);
8536 BINARY_OP (<=);
8537 BINARY_OP (>=);
8538 BINARY_OP (&&);
8539 BINARY_OP (||);
8540 UNARY_OP (~);
8541 UNARY_OP (!);
8542 BINARY_OP (*);
8543 BINARY_OP (/);
8544 BINARY_OP (%);
8545 BINARY_OP (^);
8546 BINARY_OP (|);
8547 BINARY_OP (&);
8548 BINARY_OP (+);
8549 BINARY_OP (-);
8550 BINARY_OP (<);
8551 BINARY_OP (>);
8552#undef UNARY_OP
8553#undef BINARY_OP
8554 _bfd_error_handler (_("unknown operator '%c' in complex symbol"), * sym);
8555 bfd_set_error (bfd_error_invalid_operation);
8556 return FALSE;
8557 }
8558}
8559
d9352518 8560static void
a0c8462f
AM
8561put_value (bfd_vma size,
8562 unsigned long chunksz,
8563 bfd *input_bfd,
8564 bfd_vma x,
8565 bfd_byte *location)
d9352518
DB
8566{
8567 location += (size - chunksz);
8568
41cd1ad1 8569 for (; size; size -= chunksz, location -= chunksz)
d9352518
DB
8570 {
8571 switch (chunksz)
8572 {
d9352518
DB
8573 case 1:
8574 bfd_put_8 (input_bfd, x, location);
41cd1ad1 8575 x >>= 8;
d9352518
DB
8576 break;
8577 case 2:
8578 bfd_put_16 (input_bfd, x, location);
41cd1ad1 8579 x >>= 16;
d9352518
DB
8580 break;
8581 case 4:
8582 bfd_put_32 (input_bfd, x, location);
65164438
NC
8583 /* Computed this way because x >>= 32 is undefined if x is a 32-bit value. */
8584 x >>= 16;
8585 x >>= 16;
d9352518 8586 break;
d9352518 8587#ifdef BFD64
41cd1ad1 8588 case 8:
d9352518 8589 bfd_put_64 (input_bfd, x, location);
41cd1ad1
NC
8590 /* Computed this way because x >>= 64 is undefined if x is a 64-bit value. */
8591 x >>= 32;
8592 x >>= 32;
8593 break;
d9352518 8594#endif
41cd1ad1
NC
8595 default:
8596 abort ();
d9352518
DB
8597 break;
8598 }
8599 }
8600}
8601
a0c8462f
AM
8602static bfd_vma
8603get_value (bfd_vma size,
8604 unsigned long chunksz,
8605 bfd *input_bfd,
8606 bfd_byte *location)
d9352518 8607{
9b239e0e 8608 int shift;
d9352518
DB
8609 bfd_vma x = 0;
8610
9b239e0e
NC
8611 /* Sanity checks. */
8612 BFD_ASSERT (chunksz <= sizeof (x)
8613 && size >= chunksz
8614 && chunksz != 0
8615 && (size % chunksz) == 0
8616 && input_bfd != NULL
8617 && location != NULL);
8618
8619 if (chunksz == sizeof (x))
8620 {
8621 BFD_ASSERT (size == chunksz);
8622
8623 /* Make sure that we do not perform an undefined shift operation.
8624 We know that size == chunksz so there will only be one iteration
8625 of the loop below. */
8626 shift = 0;
8627 }
8628 else
8629 shift = 8 * chunksz;
8630
a0c8462f 8631 for (; size; size -= chunksz, location += chunksz)
d9352518
DB
8632 {
8633 switch (chunksz)
8634 {
d9352518 8635 case 1:
9b239e0e 8636 x = (x << shift) | bfd_get_8 (input_bfd, location);
d9352518
DB
8637 break;
8638 case 2:
9b239e0e 8639 x = (x << shift) | bfd_get_16 (input_bfd, location);
d9352518
DB
8640 break;
8641 case 4:
9b239e0e 8642 x = (x << shift) | bfd_get_32 (input_bfd, location);
d9352518 8643 break;
d9352518 8644#ifdef BFD64
9b239e0e
NC
8645 case 8:
8646 x = (x << shift) | bfd_get_64 (input_bfd, location);
d9352518 8647 break;
9b239e0e
NC
8648#endif
8649 default:
8650 abort ();
d9352518
DB
8651 }
8652 }
8653 return x;
8654}
8655
a0c8462f
AM
8656static void
8657decode_complex_addend (unsigned long *start, /* in bits */
8658 unsigned long *oplen, /* in bits */
8659 unsigned long *len, /* in bits */
8660 unsigned long *wordsz, /* in bytes */
8661 unsigned long *chunksz, /* in bytes */
8662 unsigned long *lsb0_p,
8663 unsigned long *signed_p,
8664 unsigned long *trunc_p,
8665 unsigned long encoded)
d9352518 8666{
07d6d2b8
AM
8667 * start = encoded & 0x3F;
8668 * len = (encoded >> 6) & 0x3F;
d9352518
DB
8669 * oplen = (encoded >> 12) & 0x3F;
8670 * wordsz = (encoded >> 18) & 0xF;
8671 * chunksz = (encoded >> 22) & 0xF;
8672 * lsb0_p = (encoded >> 27) & 1;
8673 * signed_p = (encoded >> 28) & 1;
8674 * trunc_p = (encoded >> 29) & 1;
8675}
8676
cdfeee4f 8677bfd_reloc_status_type
0f02bbd9 8678bfd_elf_perform_complex_relocation (bfd *input_bfd,
cdfeee4f 8679 asection *input_section ATTRIBUTE_UNUSED,
0f02bbd9
AM
8680 bfd_byte *contents,
8681 Elf_Internal_Rela *rel,
8682 bfd_vma relocation)
d9352518 8683{
0f02bbd9
AM
8684 bfd_vma shift, x, mask;
8685 unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p;
cdfeee4f 8686 bfd_reloc_status_type r;
d9352518
DB
8687
8688 /* Perform this reloc, since it is complex.
8689 (this is not to say that it necessarily refers to a complex
8690 symbol; merely that it is a self-describing CGEN based reloc.
8691 i.e. the addend has the complete reloc information (bit start, end,
a0c8462f 8692 word size, etc) encoded within it.). */
d9352518 8693
a0c8462f
AM
8694 decode_complex_addend (&start, &oplen, &len, &wordsz,
8695 &chunksz, &lsb0_p, &signed_p,
8696 &trunc_p, rel->r_addend);
d9352518
DB
8697
8698 mask = (((1L << (len - 1)) - 1) << 1) | 1;
8699
8700 if (lsb0_p)
8701 shift = (start + 1) - len;
8702 else
8703 shift = (8 * wordsz) - (start + len);
8704
37b01f6a
DG
8705 x = get_value (wordsz, chunksz, input_bfd,
8706 contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
d9352518
DB
8707
8708#ifdef DEBUG
8709 printf ("Doing complex reloc: "
8710 "lsb0? %ld, signed? %ld, trunc? %ld, wordsz %ld, "
8711 "chunksz %ld, start %ld, len %ld, oplen %ld\n"
8712 " dest: %8.8lx, mask: %8.8lx, reloc: %8.8lx\n",
8713 lsb0_p, signed_p, trunc_p, wordsz, chunksz, start, len,
9ccb8af9
AM
8714 oplen, (unsigned long) x, (unsigned long) mask,
8715 (unsigned long) relocation);
d9352518
DB
8716#endif
8717
cdfeee4f 8718 r = bfd_reloc_ok;
d9352518 8719 if (! trunc_p)
cdfeee4f
AM
8720 /* Now do an overflow check. */
8721 r = bfd_check_overflow ((signed_p
8722 ? complain_overflow_signed
8723 : complain_overflow_unsigned),
8724 len, 0, (8 * wordsz),
8725 relocation);
a0c8462f 8726
d9352518
DB
8727 /* Do the deed. */
8728 x = (x & ~(mask << shift)) | ((relocation & mask) << shift);
8729
8730#ifdef DEBUG
8731 printf (" relocation: %8.8lx\n"
8732 " shifted mask: %8.8lx\n"
8733 " shifted/masked reloc: %8.8lx\n"
8734 " result: %8.8lx\n",
9ccb8af9
AM
8735 (unsigned long) relocation, (unsigned long) (mask << shift),
8736 (unsigned long) ((relocation & mask) << shift), (unsigned long) x);
d9352518 8737#endif
37b01f6a
DG
8738 put_value (wordsz, chunksz, input_bfd, x,
8739 contents + rel->r_offset * bfd_octets_per_byte (input_bfd));
cdfeee4f 8740 return r;
d9352518
DB
8741}
8742
0e287786
AM
8743/* Functions to read r_offset from external (target order) reloc
8744 entry. Faster than bfd_getl32 et al, because we let the compiler
8745 know the value is aligned. */
53df40a4 8746
0e287786
AM
8747static bfd_vma
8748ext32l_r_offset (const void *p)
53df40a4
AM
8749{
8750 union aligned32
8751 {
8752 uint32_t v;
8753 unsigned char c[4];
8754 };
8755 const union aligned32 *a
0e287786 8756 = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
53df40a4
AM
8757
8758 uint32_t aval = ( (uint32_t) a->c[0]
8759 | (uint32_t) a->c[1] << 8
8760 | (uint32_t) a->c[2] << 16
8761 | (uint32_t) a->c[3] << 24);
0e287786 8762 return aval;
53df40a4
AM
8763}
8764
0e287786
AM
8765static bfd_vma
8766ext32b_r_offset (const void *p)
53df40a4
AM
8767{
8768 union aligned32
8769 {
8770 uint32_t v;
8771 unsigned char c[4];
8772 };
8773 const union aligned32 *a
0e287786 8774 = (const union aligned32 *) &((const Elf32_External_Rel *) p)->r_offset;
53df40a4
AM
8775
8776 uint32_t aval = ( (uint32_t) a->c[0] << 24
8777 | (uint32_t) a->c[1] << 16
8778 | (uint32_t) a->c[2] << 8
8779 | (uint32_t) a->c[3]);
0e287786 8780 return aval;
53df40a4
AM
8781}
8782
8783#ifdef BFD_HOST_64_BIT
0e287786
AM
8784static bfd_vma
8785ext64l_r_offset (const void *p)
53df40a4
AM
8786{
8787 union aligned64
8788 {
8789 uint64_t v;
8790 unsigned char c[8];
8791 };
8792 const union aligned64 *a
0e287786 8793 = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
53df40a4
AM
8794
8795 uint64_t aval = ( (uint64_t) a->c[0]
8796 | (uint64_t) a->c[1] << 8
8797 | (uint64_t) a->c[2] << 16
8798 | (uint64_t) a->c[3] << 24
8799 | (uint64_t) a->c[4] << 32
8800 | (uint64_t) a->c[5] << 40
8801 | (uint64_t) a->c[6] << 48
8802 | (uint64_t) a->c[7] << 56);
0e287786 8803 return aval;
53df40a4
AM
8804}
8805
0e287786
AM
8806static bfd_vma
8807ext64b_r_offset (const void *p)
53df40a4
AM
8808{
8809 union aligned64
8810 {
8811 uint64_t v;
8812 unsigned char c[8];
8813 };
8814 const union aligned64 *a
0e287786 8815 = (const union aligned64 *) &((const Elf64_External_Rel *) p)->r_offset;
53df40a4
AM
8816
8817 uint64_t aval = ( (uint64_t) a->c[0] << 56
8818 | (uint64_t) a->c[1] << 48
8819 | (uint64_t) a->c[2] << 40
8820 | (uint64_t) a->c[3] << 32
8821 | (uint64_t) a->c[4] << 24
8822 | (uint64_t) a->c[5] << 16
8823 | (uint64_t) a->c[6] << 8
8824 | (uint64_t) a->c[7]);
0e287786 8825 return aval;
53df40a4
AM
8826}
8827#endif
8828
c152c796
AM
8829/* When performing a relocatable link, the input relocations are
8830 preserved. But, if they reference global symbols, the indices
d4730f92
BS
8831 referenced must be updated. Update all the relocations found in
8832 RELDATA. */
c152c796 8833
bca6d0e3 8834static bfd_boolean
c152c796 8835elf_link_adjust_relocs (bfd *abfd,
9eaff861 8836 asection *sec,
28dbcedc 8837 struct bfd_elf_section_reloc_data *reldata,
10bbbc1d
NC
8838 bfd_boolean sort,
8839 struct bfd_link_info *info)
c152c796
AM
8840{
8841 unsigned int i;
8842 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8843 bfd_byte *erela;
8844 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
8845 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
8846 bfd_vma r_type_mask;
8847 int r_sym_shift;
d4730f92
BS
8848 unsigned int count = reldata->count;
8849 struct elf_link_hash_entry **rel_hash = reldata->hashes;
c152c796 8850
d4730f92 8851 if (reldata->hdr->sh_entsize == bed->s->sizeof_rel)
c152c796
AM
8852 {
8853 swap_in = bed->s->swap_reloc_in;
8854 swap_out = bed->s->swap_reloc_out;
8855 }
d4730f92 8856 else if (reldata->hdr->sh_entsize == bed->s->sizeof_rela)
c152c796
AM
8857 {
8858 swap_in = bed->s->swap_reloca_in;
8859 swap_out = bed->s->swap_reloca_out;
8860 }
8861 else
8862 abort ();
8863
8864 if (bed->s->int_rels_per_ext_rel > MAX_INT_RELS_PER_EXT_REL)
8865 abort ();
8866
8867 if (bed->s->arch_size == 32)
8868 {
8869 r_type_mask = 0xff;
8870 r_sym_shift = 8;
8871 }
8872 else
8873 {
8874 r_type_mask = 0xffffffff;
8875 r_sym_shift = 32;
8876 }
8877
d4730f92
BS
8878 erela = reldata->hdr->contents;
8879 for (i = 0; i < count; i++, rel_hash++, erela += reldata->hdr->sh_entsize)
c152c796
AM
8880 {
8881 Elf_Internal_Rela irela[MAX_INT_RELS_PER_EXT_REL];
8882 unsigned int j;
8883
8884 if (*rel_hash == NULL)
8885 continue;
8886
10bbbc1d
NC
8887 if ((*rel_hash)->indx == -2
8888 && info->gc_sections
8889 && ! info->gc_keep_exported)
8890 {
8891 /* PR 21524: Let the user know if a symbol was removed by garbage collection. */
9793eb77 8892 _bfd_error_handler (_("%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"),
10bbbc1d
NC
8893 abfd, sec,
8894 (*rel_hash)->root.root.string);
9793eb77 8895 _bfd_error_handler (_("%pB:%pA: error: try relinking with --gc-keep-exported enabled"),
d42c267e 8896 abfd, sec);
10bbbc1d
NC
8897 bfd_set_error (bfd_error_invalid_operation);
8898 return FALSE;
8899 }
c152c796
AM
8900 BFD_ASSERT ((*rel_hash)->indx >= 0);
8901
8902 (*swap_in) (abfd, erela, irela);
8903 for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
8904 irela[j].r_info = ((bfd_vma) (*rel_hash)->indx << r_sym_shift
8905 | (irela[j].r_info & r_type_mask));
8906 (*swap_out) (abfd, irela, erela);
8907 }
53df40a4 8908
9eaff861
AO
8909 if (bed->elf_backend_update_relocs)
8910 (*bed->elf_backend_update_relocs) (sec, reldata);
8911
0e287786 8912 if (sort && count != 0)
53df40a4 8913 {
0e287786
AM
8914 bfd_vma (*ext_r_off) (const void *);
8915 bfd_vma r_off;
8916 size_t elt_size;
8917 bfd_byte *base, *end, *p, *loc;
bca6d0e3 8918 bfd_byte *buf = NULL;
28dbcedc
AM
8919
8920 if (bed->s->arch_size == 32)
8921 {
8922 if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
0e287786 8923 ext_r_off = ext32l_r_offset;
28dbcedc 8924 else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
0e287786 8925 ext_r_off = ext32b_r_offset;
28dbcedc
AM
8926 else
8927 abort ();
8928 }
53df40a4 8929 else
28dbcedc 8930 {
53df40a4 8931#ifdef BFD_HOST_64_BIT
28dbcedc 8932 if (abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
0e287786 8933 ext_r_off = ext64l_r_offset;
28dbcedc 8934 else if (abfd->xvec->header_byteorder == BFD_ENDIAN_BIG)
0e287786 8935 ext_r_off = ext64b_r_offset;
28dbcedc 8936 else
53df40a4 8937#endif
28dbcedc
AM
8938 abort ();
8939 }
0e287786 8940
bca6d0e3
AM
8941 /* Must use a stable sort here. A modified insertion sort,
8942 since the relocs are mostly sorted already. */
0e287786
AM
8943 elt_size = reldata->hdr->sh_entsize;
8944 base = reldata->hdr->contents;
8945 end = base + count * elt_size;
bca6d0e3 8946 if (elt_size > sizeof (Elf64_External_Rela))
0e287786
AM
8947 abort ();
8948
8949 /* Ensure the first element is lowest. This acts as a sentinel,
8950 speeding the main loop below. */
8951 r_off = (*ext_r_off) (base);
8952 for (p = loc = base; (p += elt_size) < end; )
8953 {
8954 bfd_vma r_off2 = (*ext_r_off) (p);
8955 if (r_off > r_off2)
8956 {
8957 r_off = r_off2;
8958 loc = p;
8959 }
8960 }
8961 if (loc != base)
8962 {
8963 /* Don't just swap *base and *loc as that changes the order
8964 of the original base[0] and base[1] if they happen to
8965 have the same r_offset. */
bca6d0e3
AM
8966 bfd_byte onebuf[sizeof (Elf64_External_Rela)];
8967 memcpy (onebuf, loc, elt_size);
0e287786 8968 memmove (base + elt_size, base, loc - base);
bca6d0e3 8969 memcpy (base, onebuf, elt_size);
0e287786
AM
8970 }
8971
b29b8669 8972 for (p = base + elt_size; (p += elt_size) < end; )
0e287786
AM
8973 {
8974 /* base to p is sorted, *p is next to insert. */
8975 r_off = (*ext_r_off) (p);
8976 /* Search the sorted region for location to insert. */
8977 loc = p - elt_size;
8978 while (r_off < (*ext_r_off) (loc))
8979 loc -= elt_size;
8980 loc += elt_size;
8981 if (loc != p)
8982 {
bca6d0e3
AM
8983 /* Chances are there is a run of relocs to insert here,
8984 from one of more input files. Files are not always
8985 linked in order due to the way elf_link_input_bfd is
8986 called. See pr17666. */
8987 size_t sortlen = p - loc;
8988 bfd_vma r_off2 = (*ext_r_off) (loc);
8989 size_t runlen = elt_size;
8990 size_t buf_size = 96 * 1024;
8991 while (p + runlen < end
8992 && (sortlen <= buf_size
8993 || runlen + elt_size <= buf_size)
8994 && r_off2 > (*ext_r_off) (p + runlen))
8995 runlen += elt_size;
8996 if (buf == NULL)
8997 {
8998 buf = bfd_malloc (buf_size);
8999 if (buf == NULL)
9000 return FALSE;
9001 }
9002 if (runlen < sortlen)
9003 {
9004 memcpy (buf, p, runlen);
9005 memmove (loc + runlen, loc, sortlen);
9006 memcpy (loc, buf, runlen);
9007 }
9008 else
9009 {
9010 memcpy (buf, loc, sortlen);
9011 memmove (loc, p, runlen);
9012 memcpy (loc + runlen, buf, sortlen);
9013 }
b29b8669 9014 p += runlen - elt_size;
0e287786
AM
9015 }
9016 }
9017 /* Hashes are no longer valid. */
28dbcedc
AM
9018 free (reldata->hashes);
9019 reldata->hashes = NULL;
bca6d0e3 9020 free (buf);
53df40a4 9021 }
bca6d0e3 9022 return TRUE;
c152c796
AM
9023}
9024
9025struct elf_link_sort_rela
9026{
9027 union {
9028 bfd_vma offset;
9029 bfd_vma sym_mask;
9030 } u;
9031 enum elf_reloc_type_class type;
9032 /* We use this as an array of size int_rels_per_ext_rel. */
9033 Elf_Internal_Rela rela[1];
9034};
9035
9036static int
9037elf_link_sort_cmp1 (const void *A, const void *B)
9038{
a50b1753
NC
9039 const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
9040 const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
c152c796
AM
9041 int relativea, relativeb;
9042
9043 relativea = a->type == reloc_class_relative;
9044 relativeb = b->type == reloc_class_relative;
9045
9046 if (relativea < relativeb)
9047 return 1;
9048 if (relativea > relativeb)
9049 return -1;
9050 if ((a->rela->r_info & a->u.sym_mask) < (b->rela->r_info & b->u.sym_mask))
9051 return -1;
9052 if ((a->rela->r_info & a->u.sym_mask) > (b->rela->r_info & b->u.sym_mask))
9053 return 1;
9054 if (a->rela->r_offset < b->rela->r_offset)
9055 return -1;
9056 if (a->rela->r_offset > b->rela->r_offset)
9057 return 1;
9058 return 0;
9059}
9060
9061static int
9062elf_link_sort_cmp2 (const void *A, const void *B)
9063{
a50b1753
NC
9064 const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A;
9065 const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B;
c152c796 9066
7e612e98 9067 if (a->type < b->type)
c152c796 9068 return -1;
7e612e98 9069 if (a->type > b->type)
c152c796 9070 return 1;
7e612e98 9071 if (a->u.offset < b->u.offset)
c152c796 9072 return -1;
7e612e98 9073 if (a->u.offset > b->u.offset)
c152c796
AM
9074 return 1;
9075 if (a->rela->r_offset < b->rela->r_offset)
9076 return -1;
9077 if (a->rela->r_offset > b->rela->r_offset)
9078 return 1;
9079 return 0;
9080}
9081
9082static size_t
9083elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec)
9084{
3410fea8 9085 asection *dynamic_relocs;
fc66a176
L
9086 asection *rela_dyn;
9087 asection *rel_dyn;
c152c796
AM
9088 bfd_size_type count, size;
9089 size_t i, ret, sort_elt, ext_size;
9090 bfd_byte *sort, *s_non_relative, *p;
9091 struct elf_link_sort_rela *sq;
9092 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9093 int i2e = bed->s->int_rels_per_ext_rel;
c8e44c6d 9094 unsigned int opb = bfd_octets_per_byte (abfd);
c152c796
AM
9095 void (*swap_in) (bfd *, const bfd_byte *, Elf_Internal_Rela *);
9096 void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *);
9097 struct bfd_link_order *lo;
9098 bfd_vma r_sym_mask;
3410fea8 9099 bfd_boolean use_rela;
c152c796 9100
3410fea8
NC
9101 /* Find a dynamic reloc section. */
9102 rela_dyn = bfd_get_section_by_name (abfd, ".rela.dyn");
9103 rel_dyn = bfd_get_section_by_name (abfd, ".rel.dyn");
9104 if (rela_dyn != NULL && rela_dyn->size > 0
9105 && rel_dyn != NULL && rel_dyn->size > 0)
c152c796 9106 {
3410fea8
NC
9107 bfd_boolean use_rela_initialised = FALSE;
9108
9109 /* This is just here to stop gcc from complaining.
c8e44c6d 9110 Its initialization checking code is not perfect. */
3410fea8
NC
9111 use_rela = TRUE;
9112
9113 /* Both sections are present. Examine the sizes
9114 of the indirect sections to help us choose. */
9115 for (lo = rela_dyn->map_head.link_order; lo != NULL; lo = lo->next)
9116 if (lo->type == bfd_indirect_link_order)
9117 {
9118 asection *o = lo->u.indirect.section;
9119
9120 if ((o->size % bed->s->sizeof_rela) == 0)
9121 {
9122 if ((o->size % bed->s->sizeof_rel) == 0)
9123 /* Section size is divisible by both rel and rela sizes.
9124 It is of no help to us. */
9125 ;
9126 else
9127 {
9128 /* Section size is only divisible by rela. */
535b785f 9129 if (use_rela_initialised && !use_rela)
3410fea8 9130 {
9793eb77 9131 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d
AM
9132 "they are in more than one size"),
9133 abfd);
3410fea8
NC
9134 bfd_set_error (bfd_error_invalid_operation);
9135 return 0;
9136 }
9137 else
9138 {
9139 use_rela = TRUE;
9140 use_rela_initialised = TRUE;
9141 }
9142 }
9143 }
9144 else if ((o->size % bed->s->sizeof_rel) == 0)
9145 {
9146 /* Section size is only divisible by rel. */
535b785f 9147 if (use_rela_initialised && use_rela)
3410fea8 9148 {
9793eb77 9149 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d
AM
9150 "they are in more than one size"),
9151 abfd);
3410fea8
NC
9152 bfd_set_error (bfd_error_invalid_operation);
9153 return 0;
9154 }
9155 else
9156 {
9157 use_rela = FALSE;
9158 use_rela_initialised = TRUE;
9159 }
9160 }
9161 else
9162 {
c8e44c6d
AM
9163 /* The section size is not divisible by either -
9164 something is wrong. */
9793eb77 9165 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d 9166 "they are of an unknown size"), abfd);
3410fea8
NC
9167 bfd_set_error (bfd_error_invalid_operation);
9168 return 0;
9169 }
9170 }
9171
9172 for (lo = rel_dyn->map_head.link_order; lo != NULL; lo = lo->next)
9173 if (lo->type == bfd_indirect_link_order)
9174 {
9175 asection *o = lo->u.indirect.section;
9176
9177 if ((o->size % bed->s->sizeof_rela) == 0)
9178 {
9179 if ((o->size % bed->s->sizeof_rel) == 0)
9180 /* Section size is divisible by both rel and rela sizes.
9181 It is of no help to us. */
9182 ;
9183 else
9184 {
9185 /* Section size is only divisible by rela. */
535b785f 9186 if (use_rela_initialised && !use_rela)
3410fea8 9187 {
9793eb77 9188 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d
AM
9189 "they are in more than one size"),
9190 abfd);
3410fea8
NC
9191 bfd_set_error (bfd_error_invalid_operation);
9192 return 0;
9193 }
9194 else
9195 {
9196 use_rela = TRUE;
9197 use_rela_initialised = TRUE;
9198 }
9199 }
9200 }
9201 else if ((o->size % bed->s->sizeof_rel) == 0)
9202 {
9203 /* Section size is only divisible by rel. */
535b785f 9204 if (use_rela_initialised && use_rela)
3410fea8 9205 {
9793eb77 9206 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d
AM
9207 "they are in more than one size"),
9208 abfd);
3410fea8
NC
9209 bfd_set_error (bfd_error_invalid_operation);
9210 return 0;
9211 }
9212 else
9213 {
9214 use_rela = FALSE;
9215 use_rela_initialised = TRUE;
9216 }
9217 }
9218 else
9219 {
c8e44c6d
AM
9220 /* The section size is not divisible by either -
9221 something is wrong. */
9793eb77 9222 _bfd_error_handler (_("%pB: unable to sort relocs - "
c8e44c6d 9223 "they are of an unknown size"), abfd);
3410fea8
NC
9224 bfd_set_error (bfd_error_invalid_operation);
9225 return 0;
9226 }
9227 }
9228
9229 if (! use_rela_initialised)
9230 /* Make a guess. */
9231 use_rela = TRUE;
c152c796 9232 }
fc66a176
L
9233 else if (rela_dyn != NULL && rela_dyn->size > 0)
9234 use_rela = TRUE;
9235 else if (rel_dyn != NULL && rel_dyn->size > 0)
3410fea8 9236 use_rela = FALSE;
c152c796 9237 else
fc66a176 9238 return 0;
3410fea8
NC
9239
9240 if (use_rela)
c152c796 9241 {
3410fea8 9242 dynamic_relocs = rela_dyn;
c152c796
AM
9243 ext_size = bed->s->sizeof_rela;
9244 swap_in = bed->s->swap_reloca_in;
9245 swap_out = bed->s->swap_reloca_out;
9246 }
3410fea8
NC
9247 else
9248 {
9249 dynamic_relocs = rel_dyn;
9250 ext_size = bed->s->sizeof_rel;
9251 swap_in = bed->s->swap_reloc_in;
9252 swap_out = bed->s->swap_reloc_out;
9253 }
c152c796
AM
9254
9255 size = 0;
3410fea8 9256 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
c152c796 9257 if (lo->type == bfd_indirect_link_order)
3410fea8 9258 size += lo->u.indirect.section->size;
c152c796 9259
3410fea8 9260 if (size != dynamic_relocs->size)
c152c796
AM
9261 return 0;
9262
9263 sort_elt = (sizeof (struct elf_link_sort_rela)
9264 + (i2e - 1) * sizeof (Elf_Internal_Rela));
3410fea8
NC
9265
9266 count = dynamic_relocs->size / ext_size;
5e486aa1
NC
9267 if (count == 0)
9268 return 0;
a50b1753 9269 sort = (bfd_byte *) bfd_zmalloc (sort_elt * count);
3410fea8 9270
c152c796
AM
9271 if (sort == NULL)
9272 {
9273 (*info->callbacks->warning)
9793eb77 9274 (info, _("not enough memory to sort relocations"), 0, abfd, 0, 0);
c152c796
AM
9275 return 0;
9276 }
9277
9278 if (bed->s->arch_size == 32)
9279 r_sym_mask = ~(bfd_vma) 0xff;
9280 else
9281 r_sym_mask = ~(bfd_vma) 0xffffffff;
9282
3410fea8 9283 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
c152c796
AM
9284 if (lo->type == bfd_indirect_link_order)
9285 {
9286 bfd_byte *erel, *erelend;
9287 asection *o = lo->u.indirect.section;
9288
1da212d6
AM
9289 if (o->contents == NULL && o->size != 0)
9290 {
9291 /* This is a reloc section that is being handled as a normal
9292 section. See bfd_section_from_shdr. We can't combine
9293 relocs in this case. */
9294 free (sort);
9295 return 0;
9296 }
c152c796 9297 erel = o->contents;
eea6121a 9298 erelend = o->contents + o->size;
c8e44c6d 9299 p = sort + o->output_offset * opb / ext_size * sort_elt;
3410fea8 9300
c152c796
AM
9301 while (erel < erelend)
9302 {
9303 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
3410fea8 9304
c152c796 9305 (*swap_in) (abfd, erel, s->rela);
7e612e98 9306 s->type = (*bed->elf_backend_reloc_type_class) (info, o, s->rela);
c152c796
AM
9307 s->u.sym_mask = r_sym_mask;
9308 p += sort_elt;
9309 erel += ext_size;
9310 }
9311 }
9312
9313 qsort (sort, count, sort_elt, elf_link_sort_cmp1);
9314
9315 for (i = 0, p = sort; i < count; i++, p += sort_elt)
9316 {
9317 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9318 if (s->type != reloc_class_relative)
9319 break;
9320 }
9321 ret = i;
9322 s_non_relative = p;
9323
9324 sq = (struct elf_link_sort_rela *) s_non_relative;
9325 for (; i < count; i++, p += sort_elt)
9326 {
9327 struct elf_link_sort_rela *sp = (struct elf_link_sort_rela *) p;
9328 if (((sp->rela->r_info ^ sq->rela->r_info) & r_sym_mask) != 0)
9329 sq = sp;
9330 sp->u.offset = sq->rela->r_offset;
9331 }
9332
9333 qsort (s_non_relative, count - ret, sort_elt, elf_link_sort_cmp2);
9334
c8e44c6d
AM
9335 struct elf_link_hash_table *htab = elf_hash_table (info);
9336 if (htab->srelplt && htab->srelplt->output_section == dynamic_relocs)
9337 {
9338 /* We have plt relocs in .rela.dyn. */
9339 sq = (struct elf_link_sort_rela *) sort;
9340 for (i = 0; i < count; i++)
9341 if (sq[count - i - 1].type != reloc_class_plt)
9342 break;
9343 if (i != 0 && htab->srelplt->size == i * ext_size)
9344 {
9345 struct bfd_link_order **plo;
9346 /* Put srelplt link_order last. This is so the output_offset
9347 set in the next loop is correct for DT_JMPREL. */
9348 for (plo = &dynamic_relocs->map_head.link_order; *plo != NULL; )
9349 if ((*plo)->type == bfd_indirect_link_order
9350 && (*plo)->u.indirect.section == htab->srelplt)
9351 {
9352 lo = *plo;
9353 *plo = lo->next;
9354 }
9355 else
9356 plo = &(*plo)->next;
9357 *plo = lo;
9358 lo->next = NULL;
9359 dynamic_relocs->map_tail.link_order = lo;
9360 }
9361 }
9362
9363 p = sort;
3410fea8 9364 for (lo = dynamic_relocs->map_head.link_order; lo != NULL; lo = lo->next)
c152c796
AM
9365 if (lo->type == bfd_indirect_link_order)
9366 {
9367 bfd_byte *erel, *erelend;
9368 asection *o = lo->u.indirect.section;
9369
9370 erel = o->contents;
eea6121a 9371 erelend = o->contents + o->size;
c8e44c6d 9372 o->output_offset = (p - sort) / sort_elt * ext_size / opb;
c152c796
AM
9373 while (erel < erelend)
9374 {
9375 struct elf_link_sort_rela *s = (struct elf_link_sort_rela *) p;
9376 (*swap_out) (abfd, s->rela, erel);
9377 p += sort_elt;
9378 erel += ext_size;
9379 }
9380 }
9381
9382 free (sort);
3410fea8 9383 *psec = dynamic_relocs;
c152c796
AM
9384 return ret;
9385}
9386
ef10c3ac 9387/* Add a symbol to the output symbol string table. */
c152c796 9388
6e0b88f1 9389static int
ef10c3ac
L
9390elf_link_output_symstrtab (struct elf_final_link_info *flinfo,
9391 const char *name,
9392 Elf_Internal_Sym *elfsym,
9393 asection *input_sec,
9394 struct elf_link_hash_entry *h)
c152c796 9395{
6e0b88f1 9396 int (*output_symbol_hook)
c152c796
AM
9397 (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *,
9398 struct elf_link_hash_entry *);
ef10c3ac 9399 struct elf_link_hash_table *hash_table;
c152c796 9400 const struct elf_backend_data *bed;
ef10c3ac 9401 bfd_size_type strtabsize;
c152c796 9402
8539e4e8
AM
9403 BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9404
8b127cbc 9405 bed = get_elf_backend_data (flinfo->output_bfd);
c152c796
AM
9406 output_symbol_hook = bed->elf_backend_link_output_symbol_hook;
9407 if (output_symbol_hook != NULL)
9408 {
8b127cbc 9409 int ret = (*output_symbol_hook) (flinfo->info, name, elfsym, input_sec, h);
6e0b88f1
AM
9410 if (ret != 1)
9411 return ret;
c152c796
AM
9412 }
9413
ef10c3ac
L
9414 if (name == NULL
9415 || *name == '\0'
9416 || (input_sec->flags & SEC_EXCLUDE))
9417 elfsym->st_name = (unsigned long) -1;
c152c796
AM
9418 else
9419 {
ef10c3ac
L
9420 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
9421 to get the final offset for st_name. */
9422 elfsym->st_name
9423 = (unsigned long) _bfd_elf_strtab_add (flinfo->symstrtab,
9424 name, FALSE);
c152c796 9425 if (elfsym->st_name == (unsigned long) -1)
6e0b88f1 9426 return 0;
c152c796
AM
9427 }
9428
ef10c3ac
L
9429 hash_table = elf_hash_table (flinfo->info);
9430 strtabsize = hash_table->strtabsize;
9431 if (strtabsize <= hash_table->strtabcount)
c152c796 9432 {
ef10c3ac
L
9433 strtabsize += strtabsize;
9434 hash_table->strtabsize = strtabsize;
9435 strtabsize *= sizeof (*hash_table->strtab);
9436 hash_table->strtab
9437 = (struct elf_sym_strtab *) bfd_realloc (hash_table->strtab,
9438 strtabsize);
9439 if (hash_table->strtab == NULL)
6e0b88f1 9440 return 0;
c152c796 9441 }
ef10c3ac
L
9442 hash_table->strtab[hash_table->strtabcount].sym = *elfsym;
9443 hash_table->strtab[hash_table->strtabcount].dest_index
9444 = hash_table->strtabcount;
9445 hash_table->strtab[hash_table->strtabcount].destshndx_index
9446 = flinfo->symshndxbuf ? bfd_get_symcount (flinfo->output_bfd) : 0;
9447
9448 bfd_get_symcount (flinfo->output_bfd) += 1;
9449 hash_table->strtabcount += 1;
9450
9451 return 1;
9452}
9453
9454/* Swap symbols out to the symbol table and flush the output symbols to
9455 the file. */
9456
9457static bfd_boolean
9458elf_link_swap_symbols_out (struct elf_final_link_info *flinfo)
9459{
9460 struct elf_link_hash_table *hash_table = elf_hash_table (flinfo->info);
ef53be89
AM
9461 bfd_size_type amt;
9462 size_t i;
ef10c3ac
L
9463 const struct elf_backend_data *bed;
9464 bfd_byte *symbuf;
9465 Elf_Internal_Shdr *hdr;
9466 file_ptr pos;
9467 bfd_boolean ret;
9468
9469 if (!hash_table->strtabcount)
9470 return TRUE;
9471
9472 BFD_ASSERT (elf_onesymtab (flinfo->output_bfd));
9473
9474 bed = get_elf_backend_data (flinfo->output_bfd);
c152c796 9475
ef10c3ac
L
9476 amt = bed->s->sizeof_sym * hash_table->strtabcount;
9477 symbuf = (bfd_byte *) bfd_malloc (amt);
9478 if (symbuf == NULL)
9479 return FALSE;
1b786873 9480
ef10c3ac 9481 if (flinfo->symshndxbuf)
c152c796 9482 {
ef53be89
AM
9483 amt = sizeof (Elf_External_Sym_Shndx);
9484 amt *= bfd_get_symcount (flinfo->output_bfd);
ef10c3ac
L
9485 flinfo->symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt);
9486 if (flinfo->symshndxbuf == NULL)
c152c796 9487 {
ef10c3ac
L
9488 free (symbuf);
9489 return FALSE;
c152c796 9490 }
c152c796
AM
9491 }
9492
ef10c3ac
L
9493 for (i = 0; i < hash_table->strtabcount; i++)
9494 {
9495 struct elf_sym_strtab *elfsym = &hash_table->strtab[i];
9496 if (elfsym->sym.st_name == (unsigned long) -1)
9497 elfsym->sym.st_name = 0;
9498 else
9499 elfsym->sym.st_name
9500 = (unsigned long) _bfd_elf_strtab_offset (flinfo->symstrtab,
9501 elfsym->sym.st_name);
9502 bed->s->swap_symbol_out (flinfo->output_bfd, &elfsym->sym,
9503 ((bfd_byte *) symbuf
9504 + (elfsym->dest_index
9505 * bed->s->sizeof_sym)),
9506 (flinfo->symshndxbuf
9507 + elfsym->destshndx_index));
9508 }
9509
9510 hdr = &elf_tdata (flinfo->output_bfd)->symtab_hdr;
9511 pos = hdr->sh_offset + hdr->sh_size;
9512 amt = hash_table->strtabcount * bed->s->sizeof_sym;
9513 if (bfd_seek (flinfo->output_bfd, pos, SEEK_SET) == 0
9514 && bfd_bwrite (symbuf, amt, flinfo->output_bfd) == amt)
9515 {
9516 hdr->sh_size += amt;
9517 ret = TRUE;
9518 }
9519 else
9520 ret = FALSE;
c152c796 9521
ef10c3ac
L
9522 free (symbuf);
9523
9524 free (hash_table->strtab);
9525 hash_table->strtab = NULL;
9526
9527 return ret;
c152c796
AM
9528}
9529
c0d5a53d
L
9530/* Return TRUE if the dynamic symbol SYM in ABFD is supported. */
9531
9532static bfd_boolean
9533check_dynsym (bfd *abfd, Elf_Internal_Sym *sym)
9534{
4fbb74a6
AM
9535 if (sym->st_shndx >= (SHN_LORESERVE & 0xffff)
9536 && sym->st_shndx < SHN_LORESERVE)
c0d5a53d
L
9537 {
9538 /* The gABI doesn't support dynamic symbols in output sections
a0c8462f 9539 beyond 64k. */
4eca0228 9540 _bfd_error_handler
695344c0 9541 /* xgettext:c-format */
9793eb77 9542 (_("%pB: too many sections: %d (>= %d)"),
4fbb74a6 9543 abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
c0d5a53d
L
9544 bfd_set_error (bfd_error_nonrepresentable_section);
9545 return FALSE;
9546 }
9547 return TRUE;
9548}
9549
c152c796
AM
9550/* For DSOs loaded in via a DT_NEEDED entry, emulate ld.so in
9551 allowing an unsatisfied unversioned symbol in the DSO to match a
9552 versioned symbol that would normally require an explicit version.
9553 We also handle the case that a DSO references a hidden symbol
9554 which may be satisfied by a versioned symbol in another DSO. */
9555
9556static bfd_boolean
9557elf_link_check_versioned_symbol (struct bfd_link_info *info,
9558 const struct elf_backend_data *bed,
9559 struct elf_link_hash_entry *h)
9560{
9561 bfd *abfd;
9562 struct elf_link_loaded_list *loaded;
9563
9564 if (!is_elf_hash_table (info->hash))
9565 return FALSE;
9566
90c984fc
L
9567 /* Check indirect symbol. */
9568 while (h->root.type == bfd_link_hash_indirect)
9569 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9570
c152c796
AM
9571 switch (h->root.type)
9572 {
9573 default:
9574 abfd = NULL;
9575 break;
9576
9577 case bfd_link_hash_undefined:
9578 case bfd_link_hash_undefweak:
9579 abfd = h->root.u.undef.abfd;
f4ab0e2d
L
9580 if (abfd == NULL
9581 || (abfd->flags & DYNAMIC) == 0
e56f61be 9582 || (elf_dyn_lib_class (abfd) & DYN_DT_NEEDED) == 0)
c152c796
AM
9583 return FALSE;
9584 break;
9585
9586 case bfd_link_hash_defined:
9587 case bfd_link_hash_defweak:
9588 abfd = h->root.u.def.section->owner;
9589 break;
9590
9591 case bfd_link_hash_common:
9592 abfd = h->root.u.c.p->section->owner;
9593 break;
9594 }
9595 BFD_ASSERT (abfd != NULL);
9596
9597 for (loaded = elf_hash_table (info)->loaded;
9598 loaded != NULL;
9599 loaded = loaded->next)
9600 {
9601 bfd *input;
9602 Elf_Internal_Shdr *hdr;
ef53be89
AM
9603 size_t symcount;
9604 size_t extsymcount;
9605 size_t extsymoff;
c152c796
AM
9606 Elf_Internal_Shdr *versymhdr;
9607 Elf_Internal_Sym *isym;
9608 Elf_Internal_Sym *isymend;
9609 Elf_Internal_Sym *isymbuf;
9610 Elf_External_Versym *ever;
9611 Elf_External_Versym *extversym;
9612
9613 input = loaded->abfd;
9614
9615 /* We check each DSO for a possible hidden versioned definition. */
9616 if (input == abfd
9617 || (input->flags & DYNAMIC) == 0
9618 || elf_dynversym (input) == 0)
9619 continue;
9620
9621 hdr = &elf_tdata (input)->dynsymtab_hdr;
9622
9623 symcount = hdr->sh_size / bed->s->sizeof_sym;
9624 if (elf_bad_symtab (input))
9625 {
9626 extsymcount = symcount;
9627 extsymoff = 0;
9628 }
9629 else
9630 {
9631 extsymcount = symcount - hdr->sh_info;
9632 extsymoff = hdr->sh_info;
9633 }
9634
9635 if (extsymcount == 0)
9636 continue;
9637
9638 isymbuf = bfd_elf_get_elf_syms (input, hdr, extsymcount, extsymoff,
9639 NULL, NULL, NULL);
9640 if (isymbuf == NULL)
9641 return FALSE;
9642
9643 /* Read in any version definitions. */
9644 versymhdr = &elf_tdata (input)->dynversym_hdr;
a50b1753 9645 extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
c152c796
AM
9646 if (extversym == NULL)
9647 goto error_ret;
9648
9649 if (bfd_seek (input, versymhdr->sh_offset, SEEK_SET) != 0
9650 || (bfd_bread (extversym, versymhdr->sh_size, input)
9651 != versymhdr->sh_size))
9652 {
9653 free (extversym);
9654 error_ret:
9655 free (isymbuf);
9656 return FALSE;
9657 }
9658
9659 ever = extversym + extsymoff;
9660 isymend = isymbuf + extsymcount;
9661 for (isym = isymbuf; isym < isymend; isym++, ever++)
9662 {
9663 const char *name;
9664 Elf_Internal_Versym iver;
9665 unsigned short version_index;
9666
9667 if (ELF_ST_BIND (isym->st_info) == STB_LOCAL
9668 || isym->st_shndx == SHN_UNDEF)
9669 continue;
9670
9671 name = bfd_elf_string_from_elf_section (input,
9672 hdr->sh_link,
9673 isym->st_name);
9674 if (strcmp (name, h->root.root.string) != 0)
9675 continue;
9676
9677 _bfd_elf_swap_versym_in (input, ever, &iver);
9678
d023c380
L
9679 if ((iver.vs_vers & VERSYM_HIDDEN) == 0
9680 && !(h->def_regular
9681 && h->forced_local))
c152c796
AM
9682 {
9683 /* If we have a non-hidden versioned sym, then it should
d023c380
L
9684 have provided a definition for the undefined sym unless
9685 it is defined in a non-shared object and forced local.
9686 */
c152c796
AM
9687 abort ();
9688 }
9689
9690 version_index = iver.vs_vers & VERSYM_VERSION;
9691 if (version_index == 1 || version_index == 2)
9692 {
9693 /* This is the base or first version. We can use it. */
9694 free (extversym);
9695 free (isymbuf);
9696 return TRUE;
9697 }
9698 }
9699
9700 free (extversym);
9701 free (isymbuf);
9702 }
9703
9704 return FALSE;
9705}
9706
b8871f35
L
9707/* Convert ELF common symbol TYPE. */
9708
9709static int
9710elf_link_convert_common_type (struct bfd_link_info *info, int type)
9711{
9712 /* Commom symbol can only appear in relocatable link. */
9713 if (!bfd_link_relocatable (info))
9714 abort ();
9715 switch (info->elf_stt_common)
9716 {
9717 case unchanged:
9718 break;
9719 case elf_stt_common:
9720 type = STT_COMMON;
9721 break;
9722 case no_elf_stt_common:
9723 type = STT_OBJECT;
9724 break;
9725 }
9726 return type;
9727}
9728
c152c796
AM
9729/* Add an external symbol to the symbol table. This is called from
9730 the hash table traversal routine. When generating a shared object,
9731 we go through the symbol table twice. The first time we output
9732 anything that might have been forced to local scope in a version
9733 script. The second time we output the symbols that are still
9734 global symbols. */
9735
9736static bfd_boolean
7686d77d 9737elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
c152c796 9738{
7686d77d 9739 struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
a50b1753 9740 struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
8b127cbc 9741 struct elf_final_link_info *flinfo = eoinfo->flinfo;
c152c796
AM
9742 bfd_boolean strip;
9743 Elf_Internal_Sym sym;
9744 asection *input_sec;
9745 const struct elf_backend_data *bed;
6e0b88f1
AM
9746 long indx;
9747 int ret;
b8871f35 9748 unsigned int type;
c152c796
AM
9749
9750 if (h->root.type == bfd_link_hash_warning)
9751 {
9752 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9753 if (h->root.type == bfd_link_hash_new)
9754 return TRUE;
9755 }
9756
9757 /* Decide whether to output this symbol in this pass. */
9758 if (eoinfo->localsyms)
9759 {
4deb8f71 9760 if (!h->forced_local)
c152c796
AM
9761 return TRUE;
9762 }
9763 else
9764 {
4deb8f71 9765 if (h->forced_local)
c152c796
AM
9766 return TRUE;
9767 }
9768
8b127cbc 9769 bed = get_elf_backend_data (flinfo->output_bfd);
c152c796 9770
12ac1cf5 9771 if (h->root.type == bfd_link_hash_undefined)
c152c796 9772 {
12ac1cf5
NC
9773 /* If we have an undefined symbol reference here then it must have
9774 come from a shared library that is being linked in. (Undefined
98da7939
L
9775 references in regular files have already been handled unless
9776 they are in unreferenced sections which are removed by garbage
9777 collection). */
12ac1cf5
NC
9778 bfd_boolean ignore_undef = FALSE;
9779
9780 /* Some symbols may be special in that the fact that they're
9781 undefined can be safely ignored - let backend determine that. */
9782 if (bed->elf_backend_ignore_undef_symbol)
9783 ignore_undef = bed->elf_backend_ignore_undef_symbol (h);
9784
9785 /* If we are reporting errors for this situation then do so now. */
89a2ee5a 9786 if (!ignore_undef
c54f1524 9787 && h->ref_dynamic_nonweak
8b127cbc
AM
9788 && (!h->ref_regular || flinfo->info->gc_sections)
9789 && !elf_link_check_versioned_symbol (flinfo->info, bed, h)
9790 && flinfo->info->unresolved_syms_in_shared_libs != RM_IGNORE)
1a72702b
AM
9791 (*flinfo->info->callbacks->undefined_symbol)
9792 (flinfo->info, h->root.root.string,
9793 h->ref_regular ? NULL : h->root.u.undef.abfd,
9794 NULL, 0,
9795 flinfo->info->unresolved_syms_in_shared_libs == RM_GENERATE_ERROR);
97196564
L
9796
9797 /* Strip a global symbol defined in a discarded section. */
9798 if (h->indx == -3)
9799 return TRUE;
c152c796
AM
9800 }
9801
9802 /* We should also warn if a forced local symbol is referenced from
9803 shared libraries. */
0e1862bb 9804 if (bfd_link_executable (flinfo->info)
f5385ebf
AM
9805 && h->forced_local
9806 && h->ref_dynamic
371a5866 9807 && h->def_regular
f5385ebf 9808 && !h->dynamic_def
ee659f1f 9809 && h->ref_dynamic_nonweak
8b127cbc 9810 && !elf_link_check_versioned_symbol (flinfo->info, bed, h))
c152c796 9811 {
17d078c5
AM
9812 bfd *def_bfd;
9813 const char *msg;
90c984fc
L
9814 struct elf_link_hash_entry *hi = h;
9815
9816 /* Check indirect symbol. */
9817 while (hi->root.type == bfd_link_hash_indirect)
9818 hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
17d078c5
AM
9819
9820 if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
695344c0 9821 /* xgettext:c-format */
871b3ab2 9822 msg = _("%pB: internal symbol `%s' in %pB is referenced by DSO");
17d078c5 9823 else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
695344c0 9824 /* xgettext:c-format */
871b3ab2 9825 msg = _("%pB: hidden symbol `%s' in %pB is referenced by DSO");
17d078c5 9826 else
695344c0 9827 /* xgettext:c-format */
871b3ab2 9828 msg = _("%pB: local symbol `%s' in %pB is referenced by DSO");
8b127cbc 9829 def_bfd = flinfo->output_bfd;
90c984fc
L
9830 if (hi->root.u.def.section != bfd_abs_section_ptr)
9831 def_bfd = hi->root.u.def.section->owner;
c08bb8dd
AM
9832 _bfd_error_handler (msg, flinfo->output_bfd,
9833 h->root.root.string, def_bfd);
17d078c5 9834 bfd_set_error (bfd_error_bad_value);
c152c796
AM
9835 eoinfo->failed = TRUE;
9836 return FALSE;
9837 }
9838
9839 /* We don't want to output symbols that have never been mentioned by
9840 a regular file, or that we have been told to strip. However, if
9841 h->indx is set to -2, the symbol is used by a reloc and we must
9842 output it. */
d983c8c5 9843 strip = FALSE;
c152c796 9844 if (h->indx == -2)
d983c8c5 9845 ;
f5385ebf 9846 else if ((h->def_dynamic
77cfaee6
AM
9847 || h->ref_dynamic
9848 || h->root.type == bfd_link_hash_new)
f5385ebf
AM
9849 && !h->def_regular
9850 && !h->ref_regular)
c152c796 9851 strip = TRUE;
8b127cbc 9852 else if (flinfo->info->strip == strip_all)
c152c796 9853 strip = TRUE;
8b127cbc
AM
9854 else if (flinfo->info->strip == strip_some
9855 && bfd_hash_lookup (flinfo->info->keep_hash,
c152c796
AM
9856 h->root.root.string, FALSE, FALSE) == NULL)
9857 strip = TRUE;
d56d55e7
AM
9858 else if ((h->root.type == bfd_link_hash_defined
9859 || h->root.type == bfd_link_hash_defweak)
8b127cbc 9860 && ((flinfo->info->strip_discarded
dbaa2011 9861 && discarded_section (h->root.u.def.section))
ca4be51c
AM
9862 || ((h->root.u.def.section->flags & SEC_LINKER_CREATED) == 0
9863 && h->root.u.def.section->owner != NULL
d56d55e7 9864 && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
c152c796 9865 strip = TRUE;
9e2278f5
AM
9866 else if ((h->root.type == bfd_link_hash_undefined
9867 || h->root.type == bfd_link_hash_undefweak)
9868 && h->root.u.undef.abfd != NULL
9869 && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0)
9870 strip = TRUE;
c152c796 9871
b8871f35
L
9872 type = h->type;
9873
c152c796 9874 /* If we're stripping it, and it's not a dynamic symbol, there's
d983c8c5
AM
9875 nothing else to do. However, if it is a forced local symbol or
9876 an ifunc symbol we need to give the backend finish_dynamic_symbol
9877 function a chance to make it dynamic. */
c152c796
AM
9878 if (strip
9879 && h->dynindx == -1
b8871f35 9880 && type != STT_GNU_IFUNC
f5385ebf 9881 && !h->forced_local)
c152c796
AM
9882 return TRUE;
9883
9884 sym.st_value = 0;
9885 sym.st_size = h->size;
9886 sym.st_other = h->other;
c152c796
AM
9887 switch (h->root.type)
9888 {
9889 default:
9890 case bfd_link_hash_new:
9891 case bfd_link_hash_warning:
9892 abort ();
9893 return FALSE;
9894
9895 case bfd_link_hash_undefined:
9896 case bfd_link_hash_undefweak:
9897 input_sec = bfd_und_section_ptr;
9898 sym.st_shndx = SHN_UNDEF;
9899 break;
9900
9901 case bfd_link_hash_defined:
9902 case bfd_link_hash_defweak:
9903 {
9904 input_sec = h->root.u.def.section;
9905 if (input_sec->output_section != NULL)
9906 {
9907 sym.st_shndx =
8b127cbc 9908 _bfd_elf_section_from_bfd_section (flinfo->output_bfd,
c152c796
AM
9909 input_sec->output_section);
9910 if (sym.st_shndx == SHN_BAD)
9911 {
4eca0228 9912 _bfd_error_handler
695344c0 9913 /* xgettext:c-format */
871b3ab2 9914 (_("%pB: could not find output section %pA for input section %pA"),
8b127cbc 9915 flinfo->output_bfd, input_sec->output_section, input_sec);
17d078c5 9916 bfd_set_error (bfd_error_nonrepresentable_section);
c152c796
AM
9917 eoinfo->failed = TRUE;
9918 return FALSE;
9919 }
9920
9921 /* ELF symbols in relocatable files are section relative,
9922 but in nonrelocatable files they are virtual
9923 addresses. */
9924 sym.st_value = h->root.u.def.value + input_sec->output_offset;
0e1862bb 9925 if (!bfd_link_relocatable (flinfo->info))
c152c796
AM
9926 {
9927 sym.st_value += input_sec->output_section->vma;
9928 if (h->type == STT_TLS)
9929 {
8b127cbc 9930 asection *tls_sec = elf_hash_table (flinfo->info)->tls_sec;
430a16a5
NC
9931 if (tls_sec != NULL)
9932 sym.st_value -= tls_sec->vma;
c152c796
AM
9933 }
9934 }
9935 }
9936 else
9937 {
9938 BFD_ASSERT (input_sec->owner == NULL
9939 || (input_sec->owner->flags & DYNAMIC) != 0);
9940 sym.st_shndx = SHN_UNDEF;
9941 input_sec = bfd_und_section_ptr;
9942 }
9943 }
9944 break;
9945
9946 case bfd_link_hash_common:
9947 input_sec = h->root.u.c.p->section;
a4d8e49b 9948 sym.st_shndx = bed->common_section_index (input_sec);
c152c796
AM
9949 sym.st_value = 1 << h->root.u.c.p->alignment_power;
9950 break;
9951
9952 case bfd_link_hash_indirect:
9953 /* These symbols are created by symbol versioning. They point
9954 to the decorated version of the name. For example, if the
9955 symbol foo@@GNU_1.2 is the default, which should be used when
9956 foo is used with no version, then we add an indirect symbol
9957 foo which points to foo@@GNU_1.2. We ignore these symbols,
9958 since the indirected symbol is already in the hash table. */
9959 return TRUE;
9960 }
9961
b8871f35
L
9962 if (type == STT_COMMON || type == STT_OBJECT)
9963 switch (h->root.type)
9964 {
9965 case bfd_link_hash_common:
9966 type = elf_link_convert_common_type (flinfo->info, type);
9967 break;
9968 case bfd_link_hash_defined:
9969 case bfd_link_hash_defweak:
9970 if (bed->common_definition (&sym))
9971 type = elf_link_convert_common_type (flinfo->info, type);
9972 else
9973 type = STT_OBJECT;
9974 break;
9975 case bfd_link_hash_undefined:
9976 case bfd_link_hash_undefweak:
9977 break;
9978 default:
9979 abort ();
9980 }
9981
4deb8f71 9982 if (h->forced_local)
b8871f35
L
9983 {
9984 sym.st_info = ELF_ST_INFO (STB_LOCAL, type);
9985 /* Turn off visibility on local symbol. */
9986 sym.st_other &= ~ELF_ST_VISIBILITY (-1);
9987 }
9988 /* Set STB_GNU_UNIQUE only if symbol is defined in regular object. */
9989 else if (h->unique_global && h->def_regular)
9990 sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, type);
9991 else if (h->root.type == bfd_link_hash_undefweak
9992 || h->root.type == bfd_link_hash_defweak)
9993 sym.st_info = ELF_ST_INFO (STB_WEAK, type);
9994 else
9995 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9996 sym.st_target_internal = h->target_internal;
9997
c152c796
AM
9998 /* Give the processor backend a chance to tweak the symbol value,
9999 and also to finish up anything that needs to be done for this
10000 symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for
3aa14d16 10001 forced local syms when non-shared is due to a historical quirk.
5f35ea9c 10002 STT_GNU_IFUNC symbol must go through PLT. */
3aa14d16 10003 if ((h->type == STT_GNU_IFUNC
5f35ea9c 10004 && h->def_regular
0e1862bb 10005 && !bfd_link_relocatable (flinfo->info))
3aa14d16
L
10006 || ((h->dynindx != -1
10007 || h->forced_local)
0e1862bb 10008 && ((bfd_link_pic (flinfo->info)
3aa14d16
L
10009 && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
10010 || h->root.type != bfd_link_hash_undefweak))
10011 || !h->forced_local)
8b127cbc 10012 && elf_hash_table (flinfo->info)->dynamic_sections_created))
c152c796
AM
10013 {
10014 if (! ((*bed->elf_backend_finish_dynamic_symbol)
8b127cbc 10015 (flinfo->output_bfd, flinfo->info, h, &sym)))
c152c796
AM
10016 {
10017 eoinfo->failed = TRUE;
10018 return FALSE;
10019 }
10020 }
10021
10022 /* If we are marking the symbol as undefined, and there are no
10023 non-weak references to this symbol from a regular object, then
10024 mark the symbol as weak undefined; if there are non-weak
10025 references, mark the symbol as strong. We can't do this earlier,
10026 because it might not be marked as undefined until the
10027 finish_dynamic_symbol routine gets through with it. */
10028 if (sym.st_shndx == SHN_UNDEF
f5385ebf 10029 && h->ref_regular
c152c796
AM
10030 && (ELF_ST_BIND (sym.st_info) == STB_GLOBAL
10031 || ELF_ST_BIND (sym.st_info) == STB_WEAK))
10032 {
10033 int bindtype;
b8871f35 10034 type = ELF_ST_TYPE (sym.st_info);
2955ec4c
L
10035
10036 /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */
10037 if (type == STT_GNU_IFUNC)
10038 type = STT_FUNC;
c152c796 10039
f5385ebf 10040 if (h->ref_regular_nonweak)
c152c796
AM
10041 bindtype = STB_GLOBAL;
10042 else
10043 bindtype = STB_WEAK;
2955ec4c 10044 sym.st_info = ELF_ST_INFO (bindtype, type);
c152c796
AM
10045 }
10046
bda987c2
CD
10047 /* If this is a symbol defined in a dynamic library, don't use the
10048 symbol size from the dynamic library. Relinking an executable
10049 against a new library may introduce gratuitous changes in the
10050 executable's symbols if we keep the size. */
10051 if (sym.st_shndx == SHN_UNDEF
10052 && !h->def_regular
10053 && h->def_dynamic)
10054 sym.st_size = 0;
10055
c152c796
AM
10056 /* If a non-weak symbol with non-default visibility is not defined
10057 locally, it is a fatal error. */
0e1862bb 10058 if (!bfd_link_relocatable (flinfo->info)
c152c796
AM
10059 && ELF_ST_VISIBILITY (sym.st_other) != STV_DEFAULT
10060 && ELF_ST_BIND (sym.st_info) != STB_WEAK
10061 && h->root.type == bfd_link_hash_undefined
f5385ebf 10062 && !h->def_regular)
c152c796 10063 {
17d078c5
AM
10064 const char *msg;
10065
10066 if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
695344c0 10067 /* xgettext:c-format */
871b3ab2 10068 msg = _("%pB: protected symbol `%s' isn't defined");
17d078c5 10069 else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
695344c0 10070 /* xgettext:c-format */
871b3ab2 10071 msg = _("%pB: internal symbol `%s' isn't defined");
17d078c5 10072 else
695344c0 10073 /* xgettext:c-format */
871b3ab2 10074 msg = _("%pB: hidden symbol `%s' isn't defined");
4eca0228 10075 _bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
17d078c5 10076 bfd_set_error (bfd_error_bad_value);
c152c796
AM
10077 eoinfo->failed = TRUE;
10078 return FALSE;
10079 }
10080
10081 /* If this symbol should be put in the .dynsym section, then put it
10082 there now. We already know the symbol index. We also fill in
10083 the entry in the .hash section. */
1c2649ed
EB
10084 if (h->dynindx != -1
10085 && elf_hash_table (flinfo->info)->dynamic_sections_created
10086 && elf_hash_table (flinfo->info)->dynsym != NULL
10087 && !discarded_section (elf_hash_table (flinfo->info)->dynsym))
c152c796 10088 {
c152c796
AM
10089 bfd_byte *esym;
10090
90c984fc
L
10091 /* Since there is no version information in the dynamic string,
10092 if there is no version info in symbol version section, we will
1659f720 10093 have a run-time problem if not linking executable, referenced
4deb8f71 10094 by shared library, or not bound locally. */
1659f720 10095 if (h->verinfo.verdef == NULL
0e1862bb 10096 && (!bfd_link_executable (flinfo->info)
1659f720
L
10097 || h->ref_dynamic
10098 || !h->def_regular))
90c984fc
L
10099 {
10100 char *p = strrchr (h->root.root.string, ELF_VER_CHR);
10101
10102 if (p && p [1] != '\0')
10103 {
4eca0228 10104 _bfd_error_handler
695344c0 10105 /* xgettext:c-format */
9793eb77 10106 (_("%pB: no symbol version section for versioned symbol `%s'"),
90c984fc
L
10107 flinfo->output_bfd, h->root.root.string);
10108 eoinfo->failed = TRUE;
10109 return FALSE;
10110 }
10111 }
10112
c152c796 10113 sym.st_name = h->dynstr_index;
cae1fbbb
L
10114 esym = (elf_hash_table (flinfo->info)->dynsym->contents
10115 + h->dynindx * bed->s->sizeof_sym);
8b127cbc 10116 if (!check_dynsym (flinfo->output_bfd, &sym))
c0d5a53d
L
10117 {
10118 eoinfo->failed = TRUE;
10119 return FALSE;
10120 }
8b127cbc 10121 bed->s->swap_symbol_out (flinfo->output_bfd, &sym, esym, 0);
c152c796 10122
8b127cbc 10123 if (flinfo->hash_sec != NULL)
fdc90cb4
JJ
10124 {
10125 size_t hash_entry_size;
10126 bfd_byte *bucketpos;
10127 bfd_vma chain;
41198d0c
L
10128 size_t bucketcount;
10129 size_t bucket;
10130
8b127cbc 10131 bucketcount = elf_hash_table (flinfo->info)->bucketcount;
41198d0c 10132 bucket = h->u.elf_hash_value % bucketcount;
fdc90cb4
JJ
10133
10134 hash_entry_size
8b127cbc
AM
10135 = elf_section_data (flinfo->hash_sec)->this_hdr.sh_entsize;
10136 bucketpos = ((bfd_byte *) flinfo->hash_sec->contents
fdc90cb4 10137 + (bucket + 2) * hash_entry_size);
8b127cbc
AM
10138 chain = bfd_get (8 * hash_entry_size, flinfo->output_bfd, bucketpos);
10139 bfd_put (8 * hash_entry_size, flinfo->output_bfd, h->dynindx,
10140 bucketpos);
10141 bfd_put (8 * hash_entry_size, flinfo->output_bfd, chain,
10142 ((bfd_byte *) flinfo->hash_sec->contents
fdc90cb4
JJ
10143 + (bucketcount + 2 + h->dynindx) * hash_entry_size));
10144 }
c152c796 10145
8b127cbc 10146 if (flinfo->symver_sec != NULL && flinfo->symver_sec->contents != NULL)
c152c796
AM
10147 {
10148 Elf_Internal_Versym iversym;
10149 Elf_External_Versym *eversym;
10150
f5385ebf 10151 if (!h->def_regular)
c152c796 10152 {
7b20f099
AM
10153 if (h->verinfo.verdef == NULL
10154 || (elf_dyn_lib_class (h->verinfo.verdef->vd_bfd)
10155 & (DYN_AS_NEEDED | DYN_DT_NEEDED | DYN_NO_NEEDED)))
c152c796
AM
10156 iversym.vs_vers = 0;
10157 else
10158 iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
10159 }
10160 else
10161 {
10162 if (h->verinfo.vertree == NULL)
10163 iversym.vs_vers = 1;
10164 else
10165 iversym.vs_vers = h->verinfo.vertree->vernum + 1;
8b127cbc 10166 if (flinfo->info->create_default_symver)
3e3b46e5 10167 iversym.vs_vers++;
c152c796
AM
10168 }
10169
422f1182 10170 /* Turn on VERSYM_HIDDEN only if the hidden versioned symbol is
6e33951e 10171 defined locally. */
422f1182 10172 if (h->versioned == versioned_hidden && h->def_regular)
c152c796
AM
10173 iversym.vs_vers |= VERSYM_HIDDEN;
10174
8b127cbc 10175 eversym = (Elf_External_Versym *) flinfo->symver_sec->contents;
c152c796 10176 eversym += h->dynindx;
8b127cbc 10177 _bfd_elf_swap_versym_out (flinfo->output_bfd, &iversym, eversym);
c152c796
AM
10178 }
10179 }
10180
d983c8c5
AM
10181 /* If the symbol is undefined, and we didn't output it to .dynsym,
10182 strip it from .symtab too. Obviously we can't do this for
10183 relocatable output or when needed for --emit-relocs. */
10184 else if (input_sec == bfd_und_section_ptr
10185 && h->indx != -2
66cae560
NC
10186 /* PR 22319 Do not strip global undefined symbols marked as being needed. */
10187 && (h->mark != 1 || ELF_ST_BIND (sym.st_info) != STB_GLOBAL)
0e1862bb 10188 && !bfd_link_relocatable (flinfo->info))
d983c8c5 10189 return TRUE;
66cae560 10190
d983c8c5
AM
10191 /* Also strip others that we couldn't earlier due to dynamic symbol
10192 processing. */
10193 if (strip)
10194 return TRUE;
10195 if ((input_sec->flags & SEC_EXCLUDE) != 0)
c152c796
AM
10196 return TRUE;
10197
2ec55de3
AM
10198 /* Output a FILE symbol so that following locals are not associated
10199 with the wrong input file. We need one for forced local symbols
10200 if we've seen more than one FILE symbol or when we have exactly
10201 one FILE symbol but global symbols are present in a file other
10202 than the one with the FILE symbol. We also need one if linker
10203 defined symbols are present. In practice these conditions are
10204 always met, so just emit the FILE symbol unconditionally. */
10205 if (eoinfo->localsyms
10206 && !eoinfo->file_sym_done
10207 && eoinfo->flinfo->filesym_count != 0)
10208 {
10209 Elf_Internal_Sym fsym;
10210
10211 memset (&fsym, 0, sizeof (fsym));
10212 fsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10213 fsym.st_shndx = SHN_ABS;
ef10c3ac
L
10214 if (!elf_link_output_symstrtab (eoinfo->flinfo, NULL, &fsym,
10215 bfd_und_section_ptr, NULL))
2ec55de3
AM
10216 return FALSE;
10217
10218 eoinfo->file_sym_done = TRUE;
10219 }
10220
8b127cbc 10221 indx = bfd_get_symcount (flinfo->output_bfd);
ef10c3ac
L
10222 ret = elf_link_output_symstrtab (flinfo, h->root.root.string, &sym,
10223 input_sec, h);
6e0b88f1 10224 if (ret == 0)
c152c796
AM
10225 {
10226 eoinfo->failed = TRUE;
10227 return FALSE;
10228 }
6e0b88f1
AM
10229 else if (ret == 1)
10230 h->indx = indx;
10231 else if (h->indx == -2)
10232 abort();
c152c796
AM
10233
10234 return TRUE;
10235}
10236
cdd3575c
AM
10237/* Return TRUE if special handling is done for relocs in SEC against
10238 symbols defined in discarded sections. */
10239
c152c796
AM
10240static bfd_boolean
10241elf_section_ignore_discarded_relocs (asection *sec)
10242{
10243 const struct elf_backend_data *bed;
10244
cdd3575c
AM
10245 switch (sec->sec_info_type)
10246 {
dbaa2011
AM
10247 case SEC_INFO_TYPE_STABS:
10248 case SEC_INFO_TYPE_EH_FRAME:
2f0c68f2 10249 case SEC_INFO_TYPE_EH_FRAME_ENTRY:
cdd3575c
AM
10250 return TRUE;
10251 default:
10252 break;
10253 }
c152c796
AM
10254
10255 bed = get_elf_backend_data (sec->owner);
10256 if (bed->elf_backend_ignore_discarded_relocs != NULL
10257 && (*bed->elf_backend_ignore_discarded_relocs) (sec))
10258 return TRUE;
10259
10260 return FALSE;
10261}
10262
9e66c942
AM
10263/* Return a mask saying how ld should treat relocations in SEC against
10264 symbols defined in discarded sections. If this function returns
10265 COMPLAIN set, ld will issue a warning message. If this function
10266 returns PRETEND set, and the discarded section was link-once and the
10267 same size as the kept link-once section, ld will pretend that the
10268 symbol was actually defined in the kept section. Otherwise ld will
10269 zero the reloc (at least that is the intent, but some cooperation by
10270 the target dependent code is needed, particularly for REL targets). */
10271
8a696751
AM
10272unsigned int
10273_bfd_elf_default_action_discarded (asection *sec)
cdd3575c 10274{
9e66c942 10275 if (sec->flags & SEC_DEBUGGING)
69d54b1b 10276 return PRETEND;
cdd3575c
AM
10277
10278 if (strcmp (".eh_frame", sec->name) == 0)
9e66c942 10279 return 0;
cdd3575c
AM
10280
10281 if (strcmp (".gcc_except_table", sec->name) == 0)
9e66c942 10282 return 0;
cdd3575c 10283
9e66c942 10284 return COMPLAIN | PRETEND;
cdd3575c
AM
10285}
10286
3d7f7666
L
10287/* Find a match between a section and a member of a section group. */
10288
10289static asection *
c0f00686
L
10290match_group_member (asection *sec, asection *group,
10291 struct bfd_link_info *info)
3d7f7666
L
10292{
10293 asection *first = elf_next_in_group (group);
10294 asection *s = first;
10295
10296 while (s != NULL)
10297 {
c0f00686 10298 if (bfd_elf_match_symbols_in_sections (s, sec, info))
3d7f7666
L
10299 return s;
10300
83180ade 10301 s = elf_next_in_group (s);
3d7f7666
L
10302 if (s == first)
10303 break;
10304 }
10305
10306 return NULL;
10307}
10308
01b3c8ab 10309/* Check if the kept section of a discarded section SEC can be used
c2370991
AM
10310 to replace it. Return the replacement if it is OK. Otherwise return
10311 NULL. */
01b3c8ab
L
10312
10313asection *
c0f00686 10314_bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info)
01b3c8ab
L
10315{
10316 asection *kept;
10317
10318 kept = sec->kept_section;
10319 if (kept != NULL)
10320 {
c2370991 10321 if ((kept->flags & SEC_GROUP) != 0)
c0f00686 10322 kept = match_group_member (sec, kept, info);
1dd2625f
BW
10323 if (kept != NULL
10324 && ((sec->rawsize != 0 ? sec->rawsize : sec->size)
10325 != (kept->rawsize != 0 ? kept->rawsize : kept->size)))
01b3c8ab 10326 kept = NULL;
c2370991 10327 sec->kept_section = kept;
01b3c8ab
L
10328 }
10329 return kept;
10330}
10331
c152c796
AM
10332/* Link an input file into the linker output file. This function
10333 handles all the sections and relocations of the input file at once.
10334 This is so that we only have to read the local symbols once, and
10335 don't have to keep them in memory. */
10336
10337static bfd_boolean
8b127cbc 10338elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
c152c796 10339{
ece5ef60 10340 int (*relocate_section)
c152c796
AM
10341 (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
10342 Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);
10343 bfd *output_bfd;
10344 Elf_Internal_Shdr *symtab_hdr;
10345 size_t locsymcount;
10346 size_t extsymoff;
10347 Elf_Internal_Sym *isymbuf;
10348 Elf_Internal_Sym *isym;
10349 Elf_Internal_Sym *isymend;
10350 long *pindex;
10351 asection **ppsection;
10352 asection *o;
10353 const struct elf_backend_data *bed;
c152c796 10354 struct elf_link_hash_entry **sym_hashes;
310fd250
L
10355 bfd_size_type address_size;
10356 bfd_vma r_type_mask;
10357 int r_sym_shift;
ffbc01cc 10358 bfd_boolean have_file_sym = FALSE;
c152c796 10359
8b127cbc 10360 output_bfd = flinfo->output_bfd;
c152c796
AM
10361 bed = get_elf_backend_data (output_bfd);
10362 relocate_section = bed->elf_backend_relocate_section;
10363
10364 /* If this is a dynamic object, we don't want to do anything here:
10365 we don't want the local symbols, and we don't want the section
10366 contents. */
10367 if ((input_bfd->flags & DYNAMIC) != 0)
10368 return TRUE;
10369
c152c796
AM
10370 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10371 if (elf_bad_symtab (input_bfd))
10372 {
10373 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
10374 extsymoff = 0;
10375 }
10376 else
10377 {
10378 locsymcount = symtab_hdr->sh_info;
10379 extsymoff = symtab_hdr->sh_info;
10380 }
10381
10382 /* Read the local symbols. */
10383 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
10384 if (isymbuf == NULL && locsymcount != 0)
10385 {
10386 isymbuf = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, locsymcount, 0,
8b127cbc
AM
10387 flinfo->internal_syms,
10388 flinfo->external_syms,
10389 flinfo->locsym_shndx);
c152c796
AM
10390 if (isymbuf == NULL)
10391 return FALSE;
10392 }
10393
10394 /* Find local symbol sections and adjust values of symbols in
10395 SEC_MERGE sections. Write out those local symbols we know are
10396 going into the output file. */
10397 isymend = isymbuf + locsymcount;
8b127cbc 10398 for (isym = isymbuf, pindex = flinfo->indices, ppsection = flinfo->sections;
c152c796
AM
10399 isym < isymend;
10400 isym++, pindex++, ppsection++)
10401 {
10402 asection *isec;
10403 const char *name;
10404 Elf_Internal_Sym osym;
6e0b88f1
AM
10405 long indx;
10406 int ret;
c152c796
AM
10407
10408 *pindex = -1;
10409
10410 if (elf_bad_symtab (input_bfd))
10411 {
10412 if (ELF_ST_BIND (isym->st_info) != STB_LOCAL)
10413 {
10414 *ppsection = NULL;
10415 continue;
10416 }
10417 }
10418
10419 if (isym->st_shndx == SHN_UNDEF)
10420 isec = bfd_und_section_ptr;
c152c796
AM
10421 else if (isym->st_shndx == SHN_ABS)
10422 isec = bfd_abs_section_ptr;
10423 else if (isym->st_shndx == SHN_COMMON)
10424 isec = bfd_com_section_ptr;
10425 else
10426 {
cb33740c
AM
10427 isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
10428 if (isec == NULL)
10429 {
10430 /* Don't attempt to output symbols with st_shnx in the
10431 reserved range other than SHN_ABS and SHN_COMMON. */
6835821b 10432 isec = bfd_und_section_ptr;
cb33740c 10433 }
dbaa2011 10434 else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
cb33740c
AM
10435 && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
10436 isym->st_value =
10437 _bfd_merged_section_offset (output_bfd, &isec,
10438 elf_section_data (isec)->sec_info,
10439 isym->st_value);
c152c796
AM
10440 }
10441
10442 *ppsection = isec;
10443
d983c8c5
AM
10444 /* Don't output the first, undefined, symbol. In fact, don't
10445 output any undefined local symbol. */
10446 if (isec == bfd_und_section_ptr)
c152c796
AM
10447 continue;
10448
10449 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
10450 {
10451 /* We never output section symbols. Instead, we use the
10452 section symbol of the corresponding section in the output
10453 file. */
10454 continue;
10455 }
10456
10457 /* If we are stripping all symbols, we don't want to output this
10458 one. */
8b127cbc 10459 if (flinfo->info->strip == strip_all)
c152c796
AM
10460 continue;
10461
10462 /* If we are discarding all local symbols, we don't want to
10463 output this one. If we are generating a relocatable output
10464 file, then some of the local symbols may be required by
10465 relocs; we output them below as we discover that they are
10466 needed. */
8b127cbc 10467 if (flinfo->info->discard == discard_all)
c152c796
AM
10468 continue;
10469
10470 /* If this symbol is defined in a section which we are
f02571c5
AM
10471 discarding, we don't need to keep it. */
10472 if (isym->st_shndx != SHN_UNDEF
4fbb74a6
AM
10473 && isym->st_shndx < SHN_LORESERVE
10474 && bfd_section_removed_from_list (output_bfd,
10475 isec->output_section))
e75a280b
L
10476 continue;
10477
c152c796
AM
10478 /* Get the name of the symbol. */
10479 name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
10480 isym->st_name);
10481 if (name == NULL)
10482 return FALSE;
10483
10484 /* See if we are discarding symbols with this name. */
8b127cbc
AM
10485 if ((flinfo->info->strip == strip_some
10486 && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
c152c796 10487 == NULL))
8b127cbc 10488 || (((flinfo->info->discard == discard_sec_merge
0e1862bb
L
10489 && (isec->flags & SEC_MERGE)
10490 && !bfd_link_relocatable (flinfo->info))
8b127cbc 10491 || flinfo->info->discard == discard_l)
c152c796
AM
10492 && bfd_is_local_label_name (input_bfd, name)))
10493 continue;
10494
ffbc01cc
AM
10495 if (ELF_ST_TYPE (isym->st_info) == STT_FILE)
10496 {
ce875075
AM
10497 if (input_bfd->lto_output)
10498 /* -flto puts a temp file name here. This means builds
10499 are not reproducible. Discard the symbol. */
10500 continue;
ffbc01cc
AM
10501 have_file_sym = TRUE;
10502 flinfo->filesym_count += 1;
10503 }
10504 if (!have_file_sym)
10505 {
10506 /* In the absence of debug info, bfd_find_nearest_line uses
10507 FILE symbols to determine the source file for local
10508 function symbols. Provide a FILE symbol here if input
10509 files lack such, so that their symbols won't be
10510 associated with a previous input file. It's not the
10511 source file, but the best we can do. */
10512 have_file_sym = TRUE;
10513 flinfo->filesym_count += 1;
10514 memset (&osym, 0, sizeof (osym));
10515 osym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
10516 osym.st_shndx = SHN_ABS;
ef10c3ac
L
10517 if (!elf_link_output_symstrtab (flinfo,
10518 (input_bfd->lto_output ? NULL
10519 : input_bfd->filename),
10520 &osym, bfd_abs_section_ptr,
10521 NULL))
ffbc01cc
AM
10522 return FALSE;
10523 }
10524
c152c796
AM
10525 osym = *isym;
10526
10527 /* Adjust the section index for the output file. */
10528 osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10529 isec->output_section);
10530 if (osym.st_shndx == SHN_BAD)
10531 return FALSE;
10532
c152c796
AM
10533 /* ELF symbols in relocatable files are section relative, but
10534 in executable files they are virtual addresses. Note that
10535 this code assumes that all ELF sections have an associated
10536 BFD section with a reasonable value for output_offset; below
10537 we assume that they also have a reasonable value for
10538 output_section. Any special sections must be set up to meet
10539 these requirements. */
10540 osym.st_value += isec->output_offset;
0e1862bb 10541 if (!bfd_link_relocatable (flinfo->info))
c152c796
AM
10542 {
10543 osym.st_value += isec->output_section->vma;
10544 if (ELF_ST_TYPE (osym.st_info) == STT_TLS)
10545 {
10546 /* STT_TLS symbols are relative to PT_TLS segment base. */
102def4d
AM
10547 if (elf_hash_table (flinfo->info)->tls_sec != NULL)
10548 osym.st_value -= elf_hash_table (flinfo->info)->tls_sec->vma;
10549 else
10550 osym.st_info = ELF_ST_INFO (ELF_ST_BIND (osym.st_info),
10551 STT_NOTYPE);
c152c796
AM
10552 }
10553 }
10554
6e0b88f1 10555 indx = bfd_get_symcount (output_bfd);
ef10c3ac 10556 ret = elf_link_output_symstrtab (flinfo, name, &osym, isec, NULL);
6e0b88f1 10557 if (ret == 0)
c152c796 10558 return FALSE;
6e0b88f1
AM
10559 else if (ret == 1)
10560 *pindex = indx;
c152c796
AM
10561 }
10562
310fd250
L
10563 if (bed->s->arch_size == 32)
10564 {
10565 r_type_mask = 0xff;
10566 r_sym_shift = 8;
10567 address_size = 4;
10568 }
10569 else
10570 {
10571 r_type_mask = 0xffffffff;
10572 r_sym_shift = 32;
10573 address_size = 8;
10574 }
10575
c152c796
AM
10576 /* Relocate the contents of each section. */
10577 sym_hashes = elf_sym_hashes (input_bfd);
10578 for (o = input_bfd->sections; o != NULL; o = o->next)
10579 {
10580 bfd_byte *contents;
10581
10582 if (! o->linker_mark)
10583 {
10584 /* This section was omitted from the link. */
10585 continue;
10586 }
10587
7bdf4127 10588 if (!flinfo->info->resolve_section_groups
bcacc0f5
AM
10589 && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP)
10590 {
10591 /* Deal with the group signature symbol. */
10592 struct bfd_elf_section_data *sec_data = elf_section_data (o);
10593 unsigned long symndx = sec_data->this_hdr.sh_info;
10594 asection *osec = o->output_section;
10595
7bdf4127 10596 BFD_ASSERT (bfd_link_relocatable (flinfo->info));
bcacc0f5
AM
10597 if (symndx >= locsymcount
10598 || (elf_bad_symtab (input_bfd)
8b127cbc 10599 && flinfo->sections[symndx] == NULL))
bcacc0f5
AM
10600 {
10601 struct elf_link_hash_entry *h = sym_hashes[symndx - extsymoff];
10602 while (h->root.type == bfd_link_hash_indirect
10603 || h->root.type == bfd_link_hash_warning)
10604 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10605 /* Arrange for symbol to be output. */
10606 h->indx = -2;
10607 elf_section_data (osec)->this_hdr.sh_info = -2;
10608 }
10609 else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION)
10610 {
10611 /* We'll use the output section target_index. */
8b127cbc 10612 asection *sec = flinfo->sections[symndx]->output_section;
bcacc0f5
AM
10613 elf_section_data (osec)->this_hdr.sh_info = sec->target_index;
10614 }
10615 else
10616 {
8b127cbc 10617 if (flinfo->indices[symndx] == -1)
bcacc0f5
AM
10618 {
10619 /* Otherwise output the local symbol now. */
10620 Elf_Internal_Sym sym = isymbuf[symndx];
8b127cbc 10621 asection *sec = flinfo->sections[symndx]->output_section;
bcacc0f5 10622 const char *name;
6e0b88f1
AM
10623 long indx;
10624 int ret;
bcacc0f5
AM
10625
10626 name = bfd_elf_string_from_elf_section (input_bfd,
10627 symtab_hdr->sh_link,
10628 sym.st_name);
10629 if (name == NULL)
10630 return FALSE;
10631
10632 sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
10633 sec);
10634 if (sym.st_shndx == SHN_BAD)
10635 return FALSE;
10636
10637 sym.st_value += o->output_offset;
10638
6e0b88f1 10639 indx = bfd_get_symcount (output_bfd);
ef10c3ac
L
10640 ret = elf_link_output_symstrtab (flinfo, name, &sym, o,
10641 NULL);
6e0b88f1 10642 if (ret == 0)
bcacc0f5 10643 return FALSE;
6e0b88f1 10644 else if (ret == 1)
8b127cbc 10645 flinfo->indices[symndx] = indx;
6e0b88f1
AM
10646 else
10647 abort ();
bcacc0f5
AM
10648 }
10649 elf_section_data (osec)->this_hdr.sh_info
8b127cbc 10650 = flinfo->indices[symndx];
bcacc0f5
AM
10651 }
10652 }
10653
c152c796 10654 if ((o->flags & SEC_HAS_CONTENTS) == 0
eea6121a 10655 || (o->size == 0 && (o->flags & SEC_RELOC) == 0))
c152c796
AM
10656 continue;
10657
10658 if ((o->flags & SEC_LINKER_CREATED) != 0)
10659 {
10660 /* Section was created by _bfd_elf_link_create_dynamic_sections
10661 or somesuch. */
10662 continue;
10663 }
10664
10665 /* Get the contents of the section. They have been cached by a
10666 relaxation routine. Note that o is a section in an input
10667 file, so the contents field will not have been set by any of
10668 the routines which work on output files. */
10669 if (elf_section_data (o)->this_hdr.contents != NULL)
53291d1f
AM
10670 {
10671 contents = elf_section_data (o)->this_hdr.contents;
10672 if (bed->caches_rawsize
10673 && o->rawsize != 0
10674 && o->rawsize < o->size)
10675 {
10676 memcpy (flinfo->contents, contents, o->rawsize);
10677 contents = flinfo->contents;
10678 }
10679 }
c152c796
AM
10680 else
10681 {
8b127cbc 10682 contents = flinfo->contents;
4a114e3e 10683 if (! bfd_get_full_section_contents (input_bfd, o, &contents))
c152c796
AM
10684 return FALSE;
10685 }
10686
10687 if ((o->flags & SEC_RELOC) != 0)
10688 {
10689 Elf_Internal_Rela *internal_relocs;
0f02bbd9 10690 Elf_Internal_Rela *rel, *relend;
0f02bbd9 10691 int action_discarded;
ece5ef60 10692 int ret;
c152c796
AM
10693
10694 /* Get the swapped relocs. */
10695 internal_relocs
8b127cbc
AM
10696 = _bfd_elf_link_read_relocs (input_bfd, o, flinfo->external_relocs,
10697 flinfo->internal_relocs, FALSE);
c152c796
AM
10698 if (internal_relocs == NULL
10699 && o->reloc_count > 0)
10700 return FALSE;
10701
310fd250
L
10702 /* We need to reverse-copy input .ctors/.dtors sections if
10703 they are placed in .init_array/.finit_array for output. */
10704 if (o->size > address_size
10705 && ((strncmp (o->name, ".ctors", 6) == 0
10706 && strcmp (o->output_section->name,
10707 ".init_array") == 0)
10708 || (strncmp (o->name, ".dtors", 6) == 0
10709 && strcmp (o->output_section->name,
10710 ".fini_array") == 0))
10711 && (o->name[6] == 0 || o->name[6] == '.'))
c152c796 10712 {
056bafd4
MR
10713 if (o->size * bed->s->int_rels_per_ext_rel
10714 != o->reloc_count * address_size)
310fd250 10715 {
4eca0228 10716 _bfd_error_handler
695344c0 10717 /* xgettext:c-format */
871b3ab2 10718 (_("error: %pB: size of section %pA is not "
310fd250
L
10719 "multiple of address size"),
10720 input_bfd, o);
8c6716e5 10721 bfd_set_error (bfd_error_bad_value);
310fd250
L
10722 return FALSE;
10723 }
10724 o->flags |= SEC_ELF_REVERSE_COPY;
c152c796
AM
10725 }
10726
0f02bbd9 10727 action_discarded = -1;
c152c796 10728 if (!elf_section_ignore_discarded_relocs (o))
0f02bbd9
AM
10729 action_discarded = (*bed->action_discarded) (o);
10730
10731 /* Run through the relocs evaluating complex reloc symbols and
10732 looking for relocs against symbols from discarded sections
10733 or section symbols from removed link-once sections.
10734 Complain about relocs against discarded sections. Zero
10735 relocs against removed link-once sections. */
10736
10737 rel = internal_relocs;
056bafd4 10738 relend = rel + o->reloc_count;
0f02bbd9 10739 for ( ; rel < relend; rel++)
c152c796 10740 {
0f02bbd9
AM
10741 unsigned long r_symndx = rel->r_info >> r_sym_shift;
10742 unsigned int s_type;
10743 asection **ps, *sec;
10744 struct elf_link_hash_entry *h = NULL;
10745 const char *sym_name;
c152c796 10746
0f02bbd9
AM
10747 if (r_symndx == STN_UNDEF)
10748 continue;
c152c796 10749
0f02bbd9
AM
10750 if (r_symndx >= locsymcount
10751 || (elf_bad_symtab (input_bfd)
8b127cbc 10752 && flinfo->sections[r_symndx] == NULL))
0f02bbd9
AM
10753 {
10754 h = sym_hashes[r_symndx - extsymoff];
ee75fd95 10755
0f02bbd9
AM
10756 /* Badly formatted input files can contain relocs that
10757 reference non-existant symbols. Check here so that
10758 we do not seg fault. */
10759 if (h == NULL)
c152c796 10760 {
4eca0228 10761 _bfd_error_handler
695344c0 10762 /* xgettext:c-format */
2dcf00ce 10763 (_("error: %pB contains a reloc (%#" PRIx64 ") for section %pA "
0f02bbd9 10764 "that references a non-existent global symbol"),
2dcf00ce 10765 input_bfd, (uint64_t) rel->r_info, o);
0f02bbd9
AM
10766 bfd_set_error (bfd_error_bad_value);
10767 return FALSE;
10768 }
3b36f7e6 10769
0f02bbd9
AM
10770 while (h->root.type == bfd_link_hash_indirect
10771 || h->root.type == bfd_link_hash_warning)
10772 h = (struct elf_link_hash_entry *) h->root.u.i.link;
c152c796 10773
0f02bbd9 10774 s_type = h->type;
cdd3575c 10775
9e2dec47 10776 /* If a plugin symbol is referenced from a non-IR file,
ca4be51c
AM
10777 mark the symbol as undefined. Note that the
10778 linker may attach linker created dynamic sections
10779 to the plugin bfd. Symbols defined in linker
10780 created sections are not plugin symbols. */
bc4e12de 10781 if ((h->root.non_ir_ref_regular
4070765b 10782 || h->root.non_ir_ref_dynamic)
9e2dec47
L
10783 && (h->root.type == bfd_link_hash_defined
10784 || h->root.type == bfd_link_hash_defweak)
10785 && (h->root.u.def.section->flags
10786 & SEC_LINKER_CREATED) == 0
10787 && h->root.u.def.section->owner != NULL
10788 && (h->root.u.def.section->owner->flags
10789 & BFD_PLUGIN) != 0)
10790 {
10791 h->root.type = bfd_link_hash_undefined;
10792 h->root.u.undef.abfd = h->root.u.def.section->owner;
10793 }
10794
0f02bbd9
AM
10795 ps = NULL;
10796 if (h->root.type == bfd_link_hash_defined
10797 || h->root.type == bfd_link_hash_defweak)
10798 ps = &h->root.u.def.section;
10799
10800 sym_name = h->root.root.string;
10801 }
10802 else
10803 {
10804 Elf_Internal_Sym *sym = isymbuf + r_symndx;
10805
10806 s_type = ELF_ST_TYPE (sym->st_info);
8b127cbc 10807 ps = &flinfo->sections[r_symndx];
0f02bbd9
AM
10808 sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10809 sym, *ps);
10810 }
c152c796 10811
c301e700 10812 if ((s_type == STT_RELC || s_type == STT_SRELC)
0e1862bb 10813 && !bfd_link_relocatable (flinfo->info))
0f02bbd9
AM
10814 {
10815 bfd_vma val;
10816 bfd_vma dot = (rel->r_offset
10817 + o->output_offset + o->output_section->vma);
10818#ifdef DEBUG
10819 printf ("Encountered a complex symbol!");
10820 printf (" (input_bfd %s, section %s, reloc %ld\n",
9ccb8af9
AM
10821 input_bfd->filename, o->name,
10822 (long) (rel - internal_relocs));
0f02bbd9
AM
10823 printf (" symbol: idx %8.8lx, name %s\n",
10824 r_symndx, sym_name);
10825 printf (" reloc : info %8.8lx, addr %8.8lx\n",
10826 (unsigned long) rel->r_info,
10827 (unsigned long) rel->r_offset);
10828#endif
8b127cbc 10829 if (!eval_symbol (&val, &sym_name, input_bfd, flinfo, dot,
0f02bbd9
AM
10830 isymbuf, locsymcount, s_type == STT_SRELC))
10831 return FALSE;
10832
10833 /* Symbol evaluated OK. Update to absolute value. */
10834 set_symbol_value (input_bfd, isymbuf, locsymcount,
10835 r_symndx, val);
10836 continue;
10837 }
10838
10839 if (action_discarded != -1 && ps != NULL)
10840 {
cdd3575c
AM
10841 /* Complain if the definition comes from a
10842 discarded section. */
dbaa2011 10843 if ((sec = *ps) != NULL && discarded_section (sec))
cdd3575c 10844 {
cf35638d 10845 BFD_ASSERT (r_symndx != STN_UNDEF);
0f02bbd9 10846 if (action_discarded & COMPLAIN)
8b127cbc 10847 (*flinfo->info->callbacks->einfo)
695344c0 10848 /* xgettext:c-format */
871b3ab2
AM
10849 (_("%X`%s' referenced in section `%pA' of %pB: "
10850 "defined in discarded section `%pA' of %pB\n"),
e1fffbe6 10851 sym_name, o, input_bfd, sec, sec->owner);
cdd3575c 10852
87e5235d 10853 /* Try to do the best we can to support buggy old
e0ae6d6f 10854 versions of gcc. Pretend that the symbol is
87e5235d
AM
10855 really defined in the kept linkonce section.
10856 FIXME: This is quite broken. Modifying the
10857 symbol here means we will be changing all later
e0ae6d6f 10858 uses of the symbol, not just in this section. */
0f02bbd9 10859 if (action_discarded & PRETEND)
87e5235d 10860 {
01b3c8ab
L
10861 asection *kept;
10862
c0f00686 10863 kept = _bfd_elf_check_kept_section (sec,
8b127cbc 10864 flinfo->info);
01b3c8ab 10865 if (kept != NULL)
87e5235d
AM
10866 {
10867 *ps = kept;
10868 continue;
10869 }
10870 }
c152c796
AM
10871 }
10872 }
10873 }
10874
10875 /* Relocate the section by invoking a back end routine.
10876
10877 The back end routine is responsible for adjusting the
10878 section contents as necessary, and (if using Rela relocs
10879 and generating a relocatable output file) adjusting the
10880 reloc addend as necessary.
10881
10882 The back end routine does not have to worry about setting
10883 the reloc address or the reloc symbol index.
10884
10885 The back end routine is given a pointer to the swapped in
10886 internal symbols, and can access the hash table entries
10887 for the external symbols via elf_sym_hashes (input_bfd).
10888
10889 When generating relocatable output, the back end routine
10890 must handle STB_LOCAL/STT_SECTION symbols specially. The
10891 output symbol is going to be a section symbol
10892 corresponding to the output section, which will require
10893 the addend to be adjusted. */
10894
8b127cbc 10895 ret = (*relocate_section) (output_bfd, flinfo->info,
c152c796
AM
10896 input_bfd, o, contents,
10897 internal_relocs,
10898 isymbuf,
8b127cbc 10899 flinfo->sections);
ece5ef60 10900 if (!ret)
c152c796
AM
10901 return FALSE;
10902
ece5ef60 10903 if (ret == 2
0e1862bb 10904 || bfd_link_relocatable (flinfo->info)
8b127cbc 10905 || flinfo->info->emitrelocations)
c152c796
AM
10906 {
10907 Elf_Internal_Rela *irela;
d4730f92 10908 Elf_Internal_Rela *irelaend, *irelamid;
c152c796
AM
10909 bfd_vma last_offset;
10910 struct elf_link_hash_entry **rel_hash;
d4730f92
BS
10911 struct elf_link_hash_entry **rel_hash_list, **rela_hash_list;
10912 Elf_Internal_Shdr *input_rel_hdr, *input_rela_hdr;
c152c796 10913 unsigned int next_erel;
c152c796 10914 bfd_boolean rela_normal;
d4730f92 10915 struct bfd_elf_section_data *esdi, *esdo;
c152c796 10916
d4730f92
BS
10917 esdi = elf_section_data (o);
10918 esdo = elf_section_data (o->output_section);
10919 rela_normal = FALSE;
c152c796
AM
10920
10921 /* Adjust the reloc addresses and symbol indices. */
10922
10923 irela = internal_relocs;
056bafd4 10924 irelaend = irela + o->reloc_count;
d4730f92
BS
10925 rel_hash = esdo->rel.hashes + esdo->rel.count;
10926 /* We start processing the REL relocs, if any. When we reach
10927 IRELAMID in the loop, we switch to the RELA relocs. */
10928 irelamid = irela;
10929 if (esdi->rel.hdr != NULL)
10930 irelamid += (NUM_SHDR_ENTRIES (esdi->rel.hdr)
10931 * bed->s->int_rels_per_ext_rel);
eac338cf 10932 rel_hash_list = rel_hash;
d4730f92 10933 rela_hash_list = NULL;
c152c796 10934 last_offset = o->output_offset;
0e1862bb 10935 if (!bfd_link_relocatable (flinfo->info))
c152c796
AM
10936 last_offset += o->output_section->vma;
10937 for (next_erel = 0; irela < irelaend; irela++, next_erel++)
10938 {
10939 unsigned long r_symndx;
10940 asection *sec;
10941 Elf_Internal_Sym sym;
10942
10943 if (next_erel == bed->s->int_rels_per_ext_rel)
10944 {
10945 rel_hash++;
10946 next_erel = 0;
10947 }
10948
d4730f92
BS
10949 if (irela == irelamid)
10950 {
10951 rel_hash = esdo->rela.hashes + esdo->rela.count;
10952 rela_hash_list = rel_hash;
10953 rela_normal = bed->rela_normal;
10954 }
10955
c152c796 10956 irela->r_offset = _bfd_elf_section_offset (output_bfd,
8b127cbc 10957 flinfo->info, o,
c152c796
AM
10958 irela->r_offset);
10959 if (irela->r_offset >= (bfd_vma) -2)
10960 {
10961 /* This is a reloc for a deleted entry or somesuch.
10962 Turn it into an R_*_NONE reloc, at the same
10963 offset as the last reloc. elf_eh_frame.c and
e460dd0d 10964 bfd_elf_discard_info rely on reloc offsets
c152c796
AM
10965 being ordered. */
10966 irela->r_offset = last_offset;
10967 irela->r_info = 0;
10968 irela->r_addend = 0;
10969 continue;
10970 }
10971
10972 irela->r_offset += o->output_offset;
10973
10974 /* Relocs in an executable have to be virtual addresses. */
0e1862bb 10975 if (!bfd_link_relocatable (flinfo->info))
c152c796
AM
10976 irela->r_offset += o->output_section->vma;
10977
10978 last_offset = irela->r_offset;
10979
10980 r_symndx = irela->r_info >> r_sym_shift;
10981 if (r_symndx == STN_UNDEF)
10982 continue;
10983
10984 if (r_symndx >= locsymcount
10985 || (elf_bad_symtab (input_bfd)
8b127cbc 10986 && flinfo->sections[r_symndx] == NULL))
c152c796
AM
10987 {
10988 struct elf_link_hash_entry *rh;
10989 unsigned long indx;
10990
10991 /* This is a reloc against a global symbol. We
10992 have not yet output all the local symbols, so
10993 we do not know the symbol index of any global
10994 symbol. We set the rel_hash entry for this
10995 reloc to point to the global hash table entry
10996 for this symbol. The symbol index is then
ee75fd95 10997 set at the end of bfd_elf_final_link. */
c152c796
AM
10998 indx = r_symndx - extsymoff;
10999 rh = elf_sym_hashes (input_bfd)[indx];
11000 while (rh->root.type == bfd_link_hash_indirect
11001 || rh->root.type == bfd_link_hash_warning)
11002 rh = (struct elf_link_hash_entry *) rh->root.u.i.link;
11003
11004 /* Setting the index to -2 tells
11005 elf_link_output_extsym that this symbol is
11006 used by a reloc. */
11007 BFD_ASSERT (rh->indx < 0);
11008 rh->indx = -2;
c152c796
AM
11009 *rel_hash = rh;
11010
11011 continue;
11012 }
11013
11014 /* This is a reloc against a local symbol. */
11015
11016 *rel_hash = NULL;
11017 sym = isymbuf[r_symndx];
8b127cbc 11018 sec = flinfo->sections[r_symndx];
c152c796
AM
11019 if (ELF_ST_TYPE (sym.st_info) == STT_SECTION)
11020 {
11021 /* I suppose the backend ought to fill in the
11022 section of any STT_SECTION symbol against a
6a8d1586 11023 processor specific section. */
cf35638d 11024 r_symndx = STN_UNDEF;
6a8d1586
AM
11025 if (bfd_is_abs_section (sec))
11026 ;
c152c796
AM
11027 else if (sec == NULL || sec->owner == NULL)
11028 {
11029 bfd_set_error (bfd_error_bad_value);
11030 return FALSE;
11031 }
11032 else
11033 {
6a8d1586
AM
11034 asection *osec = sec->output_section;
11035
11036 /* If we have discarded a section, the output
11037 section will be the absolute section. In
ab96bf03
AM
11038 case of discarded SEC_MERGE sections, use
11039 the kept section. relocate_section should
11040 have already handled discarded linkonce
11041 sections. */
6a8d1586
AM
11042 if (bfd_is_abs_section (osec)
11043 && sec->kept_section != NULL
11044 && sec->kept_section->output_section != NULL)
11045 {
11046 osec = sec->kept_section->output_section;
11047 irela->r_addend -= osec->vma;
11048 }
11049
11050 if (!bfd_is_abs_section (osec))
11051 {
11052 r_symndx = osec->target_index;
cf35638d 11053 if (r_symndx == STN_UNDEF)
74541ad4 11054 {
051d833a
AM
11055 irela->r_addend += osec->vma;
11056 osec = _bfd_nearby_section (output_bfd, osec,
11057 osec->vma);
11058 irela->r_addend -= osec->vma;
11059 r_symndx = osec->target_index;
74541ad4 11060 }
6a8d1586 11061 }
c152c796
AM
11062 }
11063
11064 /* Adjust the addend according to where the
11065 section winds up in the output section. */
11066 if (rela_normal)
11067 irela->r_addend += sec->output_offset;
11068 }
11069 else
11070 {
8b127cbc 11071 if (flinfo->indices[r_symndx] == -1)
c152c796
AM
11072 {
11073 unsigned long shlink;
11074 const char *name;
11075 asection *osec;
6e0b88f1 11076 long indx;
c152c796 11077
8b127cbc 11078 if (flinfo->info->strip == strip_all)
c152c796
AM
11079 {
11080 /* You can't do ld -r -s. */
11081 bfd_set_error (bfd_error_invalid_operation);
11082 return FALSE;
11083 }
11084
11085 /* This symbol was skipped earlier, but
11086 since it is needed by a reloc, we
11087 must output it now. */
11088 shlink = symtab_hdr->sh_link;
11089 name = (bfd_elf_string_from_elf_section
11090 (input_bfd, shlink, sym.st_name));
11091 if (name == NULL)
11092 return FALSE;
11093
11094 osec = sec->output_section;
11095 sym.st_shndx =
11096 _bfd_elf_section_from_bfd_section (output_bfd,
11097 osec);
11098 if (sym.st_shndx == SHN_BAD)
11099 return FALSE;
11100
11101 sym.st_value += sec->output_offset;
0e1862bb 11102 if (!bfd_link_relocatable (flinfo->info))
c152c796
AM
11103 {
11104 sym.st_value += osec->vma;
11105 if (ELF_ST_TYPE (sym.st_info) == STT_TLS)
11106 {
102def4d
AM
11107 struct elf_link_hash_table *htab
11108 = elf_hash_table (flinfo->info);
11109
c152c796
AM
11110 /* STT_TLS symbols are relative to PT_TLS
11111 segment base. */
102def4d
AM
11112 if (htab->tls_sec != NULL)
11113 sym.st_value -= htab->tls_sec->vma;
11114 else
11115 sym.st_info
11116 = ELF_ST_INFO (ELF_ST_BIND (sym.st_info),
11117 STT_NOTYPE);
c152c796
AM
11118 }
11119 }
11120
6e0b88f1 11121 indx = bfd_get_symcount (output_bfd);
ef10c3ac
L
11122 ret = elf_link_output_symstrtab (flinfo, name,
11123 &sym, sec,
11124 NULL);
6e0b88f1 11125 if (ret == 0)
c152c796 11126 return FALSE;
6e0b88f1 11127 else if (ret == 1)
8b127cbc 11128 flinfo->indices[r_symndx] = indx;
6e0b88f1
AM
11129 else
11130 abort ();
c152c796
AM
11131 }
11132
8b127cbc 11133 r_symndx = flinfo->indices[r_symndx];
c152c796
AM
11134 }
11135
11136 irela->r_info = ((bfd_vma) r_symndx << r_sym_shift
11137 | (irela->r_info & r_type_mask));
11138 }
11139
11140 /* Swap out the relocs. */
d4730f92
BS
11141 input_rel_hdr = esdi->rel.hdr;
11142 if (input_rel_hdr && input_rel_hdr->sh_size != 0)
c152c796 11143 {
d4730f92
BS
11144 if (!bed->elf_backend_emit_relocs (output_bfd, o,
11145 input_rel_hdr,
11146 internal_relocs,
11147 rel_hash_list))
11148 return FALSE;
c152c796
AM
11149 internal_relocs += (NUM_SHDR_ENTRIES (input_rel_hdr)
11150 * bed->s->int_rels_per_ext_rel);
eac338cf 11151 rel_hash_list += NUM_SHDR_ENTRIES (input_rel_hdr);
d4730f92
BS
11152 }
11153
11154 input_rela_hdr = esdi->rela.hdr;
11155 if (input_rela_hdr && input_rela_hdr->sh_size != 0)
11156 {
eac338cf 11157 if (!bed->elf_backend_emit_relocs (output_bfd, o,
d4730f92 11158 input_rela_hdr,
eac338cf 11159 internal_relocs,
d4730f92 11160 rela_hash_list))
c152c796
AM
11161 return FALSE;
11162 }
11163 }
11164 }
11165
11166 /* Write out the modified section contents. */
11167 if (bed->elf_backend_write_section
8b127cbc 11168 && (*bed->elf_backend_write_section) (output_bfd, flinfo->info, o,
c7b8f16e 11169 contents))
c152c796
AM
11170 {
11171 /* Section written out. */
11172 }
11173 else switch (o->sec_info_type)
11174 {
dbaa2011 11175 case SEC_INFO_TYPE_STABS:
c152c796
AM
11176 if (! (_bfd_write_section_stabs
11177 (output_bfd,
8b127cbc 11178 &elf_hash_table (flinfo->info)->stab_info,
c152c796
AM
11179 o, &elf_section_data (o)->sec_info, contents)))
11180 return FALSE;
11181 break;
dbaa2011 11182 case SEC_INFO_TYPE_MERGE:
c152c796
AM
11183 if (! _bfd_write_merged_section (output_bfd, o,
11184 elf_section_data (o)->sec_info))
11185 return FALSE;
11186 break;
dbaa2011 11187 case SEC_INFO_TYPE_EH_FRAME:
c152c796 11188 {
8b127cbc 11189 if (! _bfd_elf_write_section_eh_frame (output_bfd, flinfo->info,
c152c796
AM
11190 o, contents))
11191 return FALSE;
11192 }
11193 break;
2f0c68f2
CM
11194 case SEC_INFO_TYPE_EH_FRAME_ENTRY:
11195 {
11196 if (! _bfd_elf_write_section_eh_frame_entry (output_bfd,
11197 flinfo->info,
11198 o, contents))
11199 return FALSE;
11200 }
11201 break;
c152c796
AM
11202 default:
11203 {
310fd250
L
11204 if (! (o->flags & SEC_EXCLUDE))
11205 {
11206 file_ptr offset = (file_ptr) o->output_offset;
11207 bfd_size_type todo = o->size;
37b01f6a
DG
11208
11209 offset *= bfd_octets_per_byte (output_bfd);
11210
310fd250
L
11211 if ((o->flags & SEC_ELF_REVERSE_COPY))
11212 {
11213 /* Reverse-copy input section to output. */
11214 do
11215 {
11216 todo -= address_size;
11217 if (! bfd_set_section_contents (output_bfd,
11218 o->output_section,
11219 contents + todo,
11220 offset,
11221 address_size))
11222 return FALSE;
11223 if (todo == 0)
11224 break;
11225 offset += address_size;
11226 }
11227 while (1);
11228 }
11229 else if (! bfd_set_section_contents (output_bfd,
11230 o->output_section,
11231 contents,
11232 offset, todo))
11233 return FALSE;
11234 }
c152c796
AM
11235 }
11236 break;
11237 }
11238 }
11239
11240 return TRUE;
11241}
11242
11243/* Generate a reloc when linking an ELF file. This is a reloc
3a800eb9 11244 requested by the linker, and does not come from any input file. This
c152c796
AM
11245 is used to build constructor and destructor tables when linking
11246 with -Ur. */
11247
11248static bfd_boolean
11249elf_reloc_link_order (bfd *output_bfd,
11250 struct bfd_link_info *info,
11251 asection *output_section,
11252 struct bfd_link_order *link_order)
11253{
11254 reloc_howto_type *howto;
11255 long indx;
11256 bfd_vma offset;
11257 bfd_vma addend;
d4730f92 11258 struct bfd_elf_section_reloc_data *reldata;
c152c796
AM
11259 struct elf_link_hash_entry **rel_hash_ptr;
11260 Elf_Internal_Shdr *rel_hdr;
11261 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
11262 Elf_Internal_Rela irel[MAX_INT_RELS_PER_EXT_REL];
11263 bfd_byte *erel;
11264 unsigned int i;
d4730f92 11265 struct bfd_elf_section_data *esdo = elf_section_data (output_section);
c152c796
AM
11266
11267 howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
11268 if (howto == NULL)
11269 {
11270 bfd_set_error (bfd_error_bad_value);
11271 return FALSE;
11272 }
11273
11274 addend = link_order->u.reloc.p->addend;
11275
d4730f92
BS
11276 if (esdo->rel.hdr)
11277 reldata = &esdo->rel;
11278 else if (esdo->rela.hdr)
11279 reldata = &esdo->rela;
11280 else
11281 {
11282 reldata = NULL;
11283 BFD_ASSERT (0);
11284 }
11285
c152c796 11286 /* Figure out the symbol index. */
d4730f92 11287 rel_hash_ptr = reldata->hashes + reldata->count;
c152c796
AM
11288 if (link_order->type == bfd_section_reloc_link_order)
11289 {
11290 indx = link_order->u.reloc.p->u.section->target_index;
11291 BFD_ASSERT (indx != 0);
11292 *rel_hash_ptr = NULL;
11293 }
11294 else
11295 {
11296 struct elf_link_hash_entry *h;
11297
11298 /* Treat a reloc against a defined symbol as though it were
11299 actually against the section. */
11300 h = ((struct elf_link_hash_entry *)
11301 bfd_wrapped_link_hash_lookup (output_bfd, info,
11302 link_order->u.reloc.p->u.name,
11303 FALSE, FALSE, TRUE));
11304 if (h != NULL
11305 && (h->root.type == bfd_link_hash_defined
11306 || h->root.type == bfd_link_hash_defweak))
11307 {
11308 asection *section;
11309
11310 section = h->root.u.def.section;
11311 indx = section->output_section->target_index;
11312 *rel_hash_ptr = NULL;
11313 /* It seems that we ought to add the symbol value to the
11314 addend here, but in practice it has already been added
11315 because it was passed to constructor_callback. */
11316 addend += section->output_section->vma + section->output_offset;
11317 }
11318 else if (h != NULL)
11319 {
11320 /* Setting the index to -2 tells elf_link_output_extsym that
11321 this symbol is used by a reloc. */
11322 h->indx = -2;
11323 *rel_hash_ptr = h;
11324 indx = 0;
11325 }
11326 else
11327 {
1a72702b
AM
11328 (*info->callbacks->unattached_reloc)
11329 (info, link_order->u.reloc.p->u.name, NULL, NULL, 0);
c152c796
AM
11330 indx = 0;
11331 }
11332 }
11333
11334 /* If this is an inplace reloc, we must write the addend into the
11335 object file. */
11336 if (howto->partial_inplace && addend != 0)
11337 {
11338 bfd_size_type size;
11339 bfd_reloc_status_type rstat;
11340 bfd_byte *buf;
11341 bfd_boolean ok;
11342 const char *sym_name;
11343
a50b1753
NC
11344 size = (bfd_size_type) bfd_get_reloc_size (howto);
11345 buf = (bfd_byte *) bfd_zmalloc (size);
6346d5ca 11346 if (buf == NULL && size != 0)
c152c796
AM
11347 return FALSE;
11348 rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf);
11349 switch (rstat)
11350 {
11351 case bfd_reloc_ok:
11352 break;
11353
11354 default:
11355 case bfd_reloc_outofrange:
11356 abort ();
11357
11358 case bfd_reloc_overflow:
11359 if (link_order->type == bfd_section_reloc_link_order)
11360 sym_name = bfd_section_name (output_bfd,
11361 link_order->u.reloc.p->u.section);
11362 else
11363 sym_name = link_order->u.reloc.p->u.name;
1a72702b
AM
11364 (*info->callbacks->reloc_overflow) (info, NULL, sym_name,
11365 howto->name, addend, NULL, NULL,
11366 (bfd_vma) 0);
c152c796
AM
11367 break;
11368 }
37b01f6a 11369
c152c796 11370 ok = bfd_set_section_contents (output_bfd, output_section, buf,
37b01f6a
DG
11371 link_order->offset
11372 * bfd_octets_per_byte (output_bfd),
11373 size);
c152c796
AM
11374 free (buf);
11375 if (! ok)
11376 return FALSE;
11377 }
11378
11379 /* The address of a reloc is relative to the section in a
11380 relocatable file, and is a virtual address in an executable
11381 file. */
11382 offset = link_order->offset;
0e1862bb 11383 if (! bfd_link_relocatable (info))
c152c796
AM
11384 offset += output_section->vma;
11385
11386 for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
11387 {
11388 irel[i].r_offset = offset;
11389 irel[i].r_info = 0;
11390 irel[i].r_addend = 0;
11391 }
11392 if (bed->s->arch_size == 32)
11393 irel[0].r_info = ELF32_R_INFO (indx, howto->type);
11394 else
11395 irel[0].r_info = ELF64_R_INFO (indx, howto->type);
11396
d4730f92 11397 rel_hdr = reldata->hdr;
c152c796
AM
11398 erel = rel_hdr->contents;
11399 if (rel_hdr->sh_type == SHT_REL)
11400 {
d4730f92 11401 erel += reldata->count * bed->s->sizeof_rel;
c152c796
AM
11402 (*bed->s->swap_reloc_out) (output_bfd, irel, erel);
11403 }
11404 else
11405 {
11406 irel[0].r_addend = addend;
d4730f92 11407 erel += reldata->count * bed->s->sizeof_rela;
c152c796
AM
11408 (*bed->s->swap_reloca_out) (output_bfd, irel, erel);
11409 }
11410
d4730f92 11411 ++reldata->count;
c152c796
AM
11412
11413 return TRUE;
11414}
11415
0b52efa6
PB
11416
11417/* Get the output vma of the section pointed to by the sh_link field. */
11418
11419static bfd_vma
11420elf_get_linked_section_vma (struct bfd_link_order *p)
11421{
11422 Elf_Internal_Shdr **elf_shdrp;
11423 asection *s;
11424 int elfsec;
11425
11426 s = p->u.indirect.section;
11427 elf_shdrp = elf_elfsections (s->owner);
11428 elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
11429 elfsec = elf_shdrp[elfsec]->sh_link;
185d09ad
L
11430 /* PR 290:
11431 The Intel C compiler generates SHT_IA_64_UNWIND with
e04bcc6d 11432 SHF_LINK_ORDER. But it doesn't set the sh_link or
185d09ad
L
11433 sh_info fields. Hence we could get the situation
11434 where elfsec is 0. */
11435 if (elfsec == 0)
11436 {
11437 const struct elf_backend_data *bed
11438 = get_elf_backend_data (s->owner);
11439 if (bed->link_order_error_handler)
d003868e 11440 bed->link_order_error_handler
695344c0 11441 /* xgettext:c-format */
871b3ab2 11442 (_("%pB: warning: sh_link not set for section `%pA'"), s->owner, s);
185d09ad
L
11443 return 0;
11444 }
11445 else
11446 {
11447 s = elf_shdrp[elfsec]->bfd_section;
11448 return s->output_section->vma + s->output_offset;
11449 }
0b52efa6
PB
11450}
11451
11452
11453/* Compare two sections based on the locations of the sections they are
11454 linked to. Used by elf_fixup_link_order. */
11455
11456static int
11457compare_link_order (const void * a, const void * b)
11458{
11459 bfd_vma apos;
11460 bfd_vma bpos;
11461
11462 apos = elf_get_linked_section_vma (*(struct bfd_link_order **)a);
11463 bpos = elf_get_linked_section_vma (*(struct bfd_link_order **)b);
11464 if (apos < bpos)
11465 return -1;
11466 return apos > bpos;
11467}
11468
11469
11470/* Looks for sections with SHF_LINK_ORDER set. Rearranges them into the same
11471 order as their linked sections. Returns false if this could not be done
11472 because an output section includes both ordered and unordered
11473 sections. Ideally we'd do this in the linker proper. */
11474
11475static bfd_boolean
11476elf_fixup_link_order (bfd *abfd, asection *o)
11477{
11478 int seen_linkorder;
11479 int seen_other;
11480 int n;
11481 struct bfd_link_order *p;
11482 bfd *sub;
11483 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
b761a207 11484 unsigned elfsec;
0b52efa6 11485 struct bfd_link_order **sections;
d33cdfe3 11486 asection *s, *other_sec, *linkorder_sec;
0b52efa6 11487 bfd_vma offset;
3b36f7e6 11488
d33cdfe3
L
11489 other_sec = NULL;
11490 linkorder_sec = NULL;
0b52efa6
PB
11491 seen_other = 0;
11492 seen_linkorder = 0;
8423293d 11493 for (p = o->map_head.link_order; p != NULL; p = p->next)
0b52efa6 11494 {
d33cdfe3 11495 if (p->type == bfd_indirect_link_order)
0b52efa6
PB
11496 {
11497 s = p->u.indirect.section;
d33cdfe3
L
11498 sub = s->owner;
11499 if (bfd_get_flavour (sub) == bfd_target_elf_flavour
11500 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass
b761a207
BE
11501 && (elfsec = _bfd_elf_section_from_bfd_section (sub, s))
11502 && elfsec < elf_numsections (sub)
4fbb74a6
AM
11503 && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER
11504 && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub))
d33cdfe3
L
11505 {
11506 seen_linkorder++;
11507 linkorder_sec = s;
11508 }
0b52efa6 11509 else
d33cdfe3
L
11510 {
11511 seen_other++;
11512 other_sec = s;
11513 }
0b52efa6
PB
11514 }
11515 else
11516 seen_other++;
d33cdfe3
L
11517
11518 if (seen_other && seen_linkorder)
11519 {
11520 if (other_sec && linkorder_sec)
4eca0228 11521 _bfd_error_handler
695344c0 11522 /* xgettext:c-format */
871b3ab2
AM
11523 (_("%pA has both ordered [`%pA' in %pB] "
11524 "and unordered [`%pA' in %pB] sections"),
63a5468a
AM
11525 o, linkorder_sec, linkorder_sec->owner,
11526 other_sec, other_sec->owner);
d33cdfe3 11527 else
4eca0228 11528 _bfd_error_handler
871b3ab2 11529 (_("%pA has both ordered and unordered sections"), o);
d33cdfe3
L
11530 bfd_set_error (bfd_error_bad_value);
11531 return FALSE;
11532 }
0b52efa6
PB
11533 }
11534
11535 if (!seen_linkorder)
11536 return TRUE;
11537
0b52efa6 11538 sections = (struct bfd_link_order **)
14b1c01e
AM
11539 bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *));
11540 if (sections == NULL)
11541 return FALSE;
0b52efa6 11542 seen_linkorder = 0;
3b36f7e6 11543
8423293d 11544 for (p = o->map_head.link_order; p != NULL; p = p->next)
0b52efa6
PB
11545 {
11546 sections[seen_linkorder++] = p;
11547 }
11548 /* Sort the input sections in the order of their linked section. */
11549 qsort (sections, seen_linkorder, sizeof (struct bfd_link_order *),
11550 compare_link_order);
11551
11552 /* Change the offsets of the sections. */
11553 offset = 0;
11554 for (n = 0; n < seen_linkorder; n++)
11555 {
11556 s = sections[n]->u.indirect.section;
461686a3 11557 offset &= ~(bfd_vma) 0 << s->alignment_power;
37b01f6a 11558 s->output_offset = offset / bfd_octets_per_byte (abfd);
0b52efa6
PB
11559 sections[n]->offset = offset;
11560 offset += sections[n]->size;
11561 }
11562
4dd07732 11563 free (sections);
0b52efa6
PB
11564 return TRUE;
11565}
11566
76359541
TP
11567/* Generate an import library in INFO->implib_bfd from symbols in ABFD.
11568 Returns TRUE upon success, FALSE otherwise. */
11569
11570static bfd_boolean
11571elf_output_implib (bfd *abfd, struct bfd_link_info *info)
11572{
11573 bfd_boolean ret = FALSE;
11574 bfd *implib_bfd;
11575 const struct elf_backend_data *bed;
11576 flagword flags;
11577 enum bfd_architecture arch;
11578 unsigned int mach;
11579 asymbol **sympp = NULL;
11580 long symsize;
11581 long symcount;
11582 long src_count;
11583 elf_symbol_type *osymbuf;
11584
11585 implib_bfd = info->out_implib_bfd;
11586 bed = get_elf_backend_data (abfd);
11587
11588 if (!bfd_set_format (implib_bfd, bfd_object))
11589 return FALSE;
11590
046734ff 11591 /* Use flag from executable but make it a relocatable object. */
76359541
TP
11592 flags = bfd_get_file_flags (abfd);
11593 flags &= ~HAS_RELOC;
11594 if (!bfd_set_start_address (implib_bfd, 0)
046734ff 11595 || !bfd_set_file_flags (implib_bfd, flags & ~EXEC_P))
76359541
TP
11596 return FALSE;
11597
11598 /* Copy architecture of output file to import library file. */
11599 arch = bfd_get_arch (abfd);
11600 mach = bfd_get_mach (abfd);
11601 if (!bfd_set_arch_mach (implib_bfd, arch, mach)
11602 && (abfd->target_defaulted
11603 || bfd_get_arch (abfd) != bfd_get_arch (implib_bfd)))
11604 return FALSE;
11605
11606 /* Get symbol table size. */
11607 symsize = bfd_get_symtab_upper_bound (abfd);
11608 if (symsize < 0)
11609 return FALSE;
11610
11611 /* Read in the symbol table. */
11612 sympp = (asymbol **) xmalloc (symsize);
11613 symcount = bfd_canonicalize_symtab (abfd, sympp);
11614 if (symcount < 0)
11615 goto free_sym_buf;
11616
11617 /* Allow the BFD backend to copy any private header data it
11618 understands from the output BFD to the import library BFD. */
11619 if (! bfd_copy_private_header_data (abfd, implib_bfd))
11620 goto free_sym_buf;
11621
11622 /* Filter symbols to appear in the import library. */
11623 if (bed->elf_backend_filter_implib_symbols)
11624 symcount = bed->elf_backend_filter_implib_symbols (abfd, info, sympp,
11625 symcount);
11626 else
11627 symcount = _bfd_elf_filter_global_symbols (abfd, info, sympp, symcount);
11628 if (symcount == 0)
11629 {
5df1bc57 11630 bfd_set_error (bfd_error_no_symbols);
871b3ab2 11631 _bfd_error_handler (_("%pB: no symbol found for import library"),
4eca0228 11632 implib_bfd);
76359541
TP
11633 goto free_sym_buf;
11634 }
11635
11636
11637 /* Make symbols absolute. */
11638 osymbuf = (elf_symbol_type *) bfd_alloc2 (implib_bfd, symcount,
11639 sizeof (*osymbuf));
11640 for (src_count = 0; src_count < symcount; src_count++)
11641 {
11642 memcpy (&osymbuf[src_count], (elf_symbol_type *) sympp[src_count],
11643 sizeof (*osymbuf));
11644 osymbuf[src_count].symbol.section = bfd_abs_section_ptr;
11645 osymbuf[src_count].internal_elf_sym.st_shndx = SHN_ABS;
11646 osymbuf[src_count].symbol.value += sympp[src_count]->section->vma;
11647 osymbuf[src_count].internal_elf_sym.st_value =
11648 osymbuf[src_count].symbol.value;
11649 sympp[src_count] = &osymbuf[src_count].symbol;
11650 }
11651
11652 bfd_set_symtab (implib_bfd, sympp, symcount);
11653
11654 /* Allow the BFD backend to copy any private data it understands
11655 from the output BFD to the import library BFD. This is done last
11656 to permit the routine to look at the filtered symbol table. */
11657 if (! bfd_copy_private_bfd_data (abfd, implib_bfd))
11658 goto free_sym_buf;
11659
11660 if (!bfd_close (implib_bfd))
11661 goto free_sym_buf;
11662
11663 ret = TRUE;
11664
11665free_sym_buf:
11666 free (sympp);
11667 return ret;
11668}
11669
9f7c3e5e
AM
11670static void
11671elf_final_link_free (bfd *obfd, struct elf_final_link_info *flinfo)
11672{
11673 asection *o;
11674
11675 if (flinfo->symstrtab != NULL)
ef10c3ac 11676 _bfd_elf_strtab_free (flinfo->symstrtab);
9f7c3e5e
AM
11677 if (flinfo->contents != NULL)
11678 free (flinfo->contents);
11679 if (flinfo->external_relocs != NULL)
11680 free (flinfo->external_relocs);
11681 if (flinfo->internal_relocs != NULL)
11682 free (flinfo->internal_relocs);
11683 if (flinfo->external_syms != NULL)
11684 free (flinfo->external_syms);
11685 if (flinfo->locsym_shndx != NULL)
11686 free (flinfo->locsym_shndx);
11687 if (flinfo->internal_syms != NULL)
11688 free (flinfo->internal_syms);
11689 if (flinfo->indices != NULL)
11690 free (flinfo->indices);
11691 if (flinfo->sections != NULL)
11692 free (flinfo->sections);
a0f6fd21
AM
11693 if (flinfo->symshndxbuf != NULL
11694 && flinfo->symshndxbuf != (Elf_External_Sym_Shndx *) -1)
9f7c3e5e
AM
11695 free (flinfo->symshndxbuf);
11696 for (o = obfd->sections; o != NULL; o = o->next)
11697 {
11698 struct bfd_elf_section_data *esdo = elf_section_data (o);
11699 if ((o->flags & SEC_RELOC) != 0 && esdo->rel.hashes != NULL)
11700 free (esdo->rel.hashes);
11701 if ((o->flags & SEC_RELOC) != 0 && esdo->rela.hashes != NULL)
11702 free (esdo->rela.hashes);
11703 }
11704}
0b52efa6 11705
c152c796
AM
11706/* Do the final step of an ELF link. */
11707
11708bfd_boolean
11709bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
11710{
11711 bfd_boolean dynamic;
11712 bfd_boolean emit_relocs;
11713 bfd *dynobj;
8b127cbc 11714 struct elf_final_link_info flinfo;
91d6fa6a
NC
11715 asection *o;
11716 struct bfd_link_order *p;
11717 bfd *sub;
c152c796
AM
11718 bfd_size_type max_contents_size;
11719 bfd_size_type max_external_reloc_size;
11720 bfd_size_type max_internal_reloc_count;
11721 bfd_size_type max_sym_count;
11722 bfd_size_type max_sym_shndx_count;
c152c796
AM
11723 Elf_Internal_Sym elfsym;
11724 unsigned int i;
11725 Elf_Internal_Shdr *symtab_hdr;
11726 Elf_Internal_Shdr *symtab_shndx_hdr;
c152c796
AM
11727 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11728 struct elf_outext_info eoinfo;
11729 bfd_boolean merged;
11730 size_t relativecount = 0;
11731 asection *reldyn = 0;
11732 bfd_size_type amt;
104d59d1
JM
11733 asection *attr_section = NULL;
11734 bfd_vma attr_size = 0;
11735 const char *std_attrs_section;
64f52338 11736 struct elf_link_hash_table *htab = elf_hash_table (info);
c152c796 11737
64f52338 11738 if (!is_elf_hash_table (htab))
c152c796
AM
11739 return FALSE;
11740
0e1862bb 11741 if (bfd_link_pic (info))
c152c796
AM
11742 abfd->flags |= DYNAMIC;
11743
64f52338
AM
11744 dynamic = htab->dynamic_sections_created;
11745 dynobj = htab->dynobj;
c152c796 11746
0e1862bb 11747 emit_relocs = (bfd_link_relocatable (info)
a4676736 11748 || info->emitrelocations);
c152c796 11749
8b127cbc
AM
11750 flinfo.info = info;
11751 flinfo.output_bfd = abfd;
ef10c3ac 11752 flinfo.symstrtab = _bfd_elf_strtab_init ();
8b127cbc 11753 if (flinfo.symstrtab == NULL)
c152c796
AM
11754 return FALSE;
11755
11756 if (! dynamic)
11757 {
8b127cbc
AM
11758 flinfo.hash_sec = NULL;
11759 flinfo.symver_sec = NULL;
c152c796
AM
11760 }
11761 else
11762 {
3d4d4302 11763 flinfo.hash_sec = bfd_get_linker_section (dynobj, ".hash");
202e2356 11764 /* Note that dynsym_sec can be NULL (on VMS). */
3d4d4302 11765 flinfo.symver_sec = bfd_get_linker_section (dynobj, ".gnu.version");
c152c796
AM
11766 /* Note that it is OK if symver_sec is NULL. */
11767 }
11768
8b127cbc
AM
11769 flinfo.contents = NULL;
11770 flinfo.external_relocs = NULL;
11771 flinfo.internal_relocs = NULL;
11772 flinfo.external_syms = NULL;
11773 flinfo.locsym_shndx = NULL;
11774 flinfo.internal_syms = NULL;
11775 flinfo.indices = NULL;
11776 flinfo.sections = NULL;
8b127cbc 11777 flinfo.symshndxbuf = NULL;
ffbc01cc 11778 flinfo.filesym_count = 0;
c152c796 11779
104d59d1
JM
11780 /* The object attributes have been merged. Remove the input
11781 sections from the link, and set the contents of the output
11782 secton. */
11783 std_attrs_section = get_elf_backend_data (abfd)->obj_attrs_section;
11784 for (o = abfd->sections; o != NULL; o = o->next)
11785 {
5270eddc 11786 bfd_boolean remove_section = FALSE;
b8a6ced7 11787
104d59d1
JM
11788 if ((std_attrs_section && strcmp (o->name, std_attrs_section) == 0)
11789 || strcmp (o->name, ".gnu.attributes") == 0)
11790 {
11791 for (p = o->map_head.link_order; p != NULL; p = p->next)
11792 {
11793 asection *input_section;
11794
11795 if (p->type != bfd_indirect_link_order)
11796 continue;
11797 input_section = p->u.indirect.section;
11798 /* Hack: reset the SEC_HAS_CONTENTS flag so that
11799 elf_link_input_bfd ignores this section. */
11800 input_section->flags &= ~SEC_HAS_CONTENTS;
11801 }
a0c8462f 11802
104d59d1 11803 attr_size = bfd_elf_obj_attr_size (abfd);
b8a6ced7
AM
11804 bfd_set_section_size (abfd, o, attr_size);
11805 /* Skip this section later on. */
11806 o->map_head.link_order = NULL;
104d59d1 11807 if (attr_size)
b8a6ced7 11808 attr_section = o;
104d59d1 11809 else
5270eddc 11810 remove_section = TRUE;
104d59d1 11811 }
6e5e9d58
AM
11812 else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
11813 {
11814 /* Remove empty group section from linker output. */
5270eddc 11815 remove_section = TRUE;
b8a6ced7 11816 }
5270eddc 11817 if (remove_section)
b8a6ced7 11818 {
6e5e9d58
AM
11819 o->flags |= SEC_EXCLUDE;
11820 bfd_section_list_remove (abfd, o);
11821 abfd->section_count--;
11822 }
104d59d1
JM
11823 }
11824
c152c796
AM
11825 /* Count up the number of relocations we will output for each output
11826 section, so that we know the sizes of the reloc sections. We
11827 also figure out some maximum sizes. */
11828 max_contents_size = 0;
11829 max_external_reloc_size = 0;
11830 max_internal_reloc_count = 0;
11831 max_sym_count = 0;
11832 max_sym_shndx_count = 0;
11833 merged = FALSE;
11834 for (o = abfd->sections; o != NULL; o = o->next)
11835 {
11836 struct bfd_elf_section_data *esdo = elf_section_data (o);
11837 o->reloc_count = 0;
11838
8423293d 11839 for (p = o->map_head.link_order; p != NULL; p = p->next)
c152c796
AM
11840 {
11841 unsigned int reloc_count = 0;
9eaff861 11842 unsigned int additional_reloc_count = 0;
c152c796 11843 struct bfd_elf_section_data *esdi = NULL;
c152c796
AM
11844
11845 if (p->type == bfd_section_reloc_link_order
11846 || p->type == bfd_symbol_reloc_link_order)
11847 reloc_count = 1;
11848 else if (p->type == bfd_indirect_link_order)
11849 {
11850 asection *sec;
11851
11852 sec = p->u.indirect.section;
c152c796
AM
11853
11854 /* Mark all sections which are to be included in the
11855 link. This will normally be every section. We need
11856 to do this so that we can identify any sections which
11857 the linker has decided to not include. */
11858 sec->linker_mark = TRUE;
11859
11860 if (sec->flags & SEC_MERGE)
11861 merged = TRUE;
11862
eea6121a
AM
11863 if (sec->rawsize > max_contents_size)
11864 max_contents_size = sec->rawsize;
11865 if (sec->size > max_contents_size)
11866 max_contents_size = sec->size;
c152c796 11867
c152c796
AM
11868 if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
11869 && (sec->owner->flags & DYNAMIC) == 0)
11870 {
11871 size_t sym_count;
11872
a961cdd5
AM
11873 /* We are interested in just local symbols, not all
11874 symbols. */
c152c796
AM
11875 if (elf_bad_symtab (sec->owner))
11876 sym_count = (elf_tdata (sec->owner)->symtab_hdr.sh_size
11877 / bed->s->sizeof_sym);
11878 else
11879 sym_count = elf_tdata (sec->owner)->symtab_hdr.sh_info;
11880
11881 if (sym_count > max_sym_count)
11882 max_sym_count = sym_count;
11883
11884 if (sym_count > max_sym_shndx_count
6a40cf0c 11885 && elf_symtab_shndx_list (sec->owner) != NULL)
c152c796
AM
11886 max_sym_shndx_count = sym_count;
11887
a961cdd5
AM
11888 if (esdo->this_hdr.sh_type == SHT_REL
11889 || esdo->this_hdr.sh_type == SHT_RELA)
11890 /* Some backends use reloc_count in relocation sections
11891 to count particular types of relocs. Of course,
11892 reloc sections themselves can't have relocations. */
11893 ;
11894 else if (emit_relocs)
11895 {
11896 reloc_count = sec->reloc_count;
11897 if (bed->elf_backend_count_additional_relocs)
11898 {
11899 int c;
11900 c = (*bed->elf_backend_count_additional_relocs) (sec);
11901 additional_reloc_count += c;
11902 }
11903 }
11904 else if (bed->elf_backend_count_relocs)
11905 reloc_count = (*bed->elf_backend_count_relocs) (info, sec);
11906
11907 esdi = elf_section_data (sec);
11908
c152c796
AM
11909 if ((sec->flags & SEC_RELOC) != 0)
11910 {
d4730f92 11911 size_t ext_size = 0;
c152c796 11912
d4730f92
BS
11913 if (esdi->rel.hdr != NULL)
11914 ext_size = esdi->rel.hdr->sh_size;
11915 if (esdi->rela.hdr != NULL)
11916 ext_size += esdi->rela.hdr->sh_size;
7326c758 11917
c152c796
AM
11918 if (ext_size > max_external_reloc_size)
11919 max_external_reloc_size = ext_size;
11920 if (sec->reloc_count > max_internal_reloc_count)
11921 max_internal_reloc_count = sec->reloc_count;
11922 }
11923 }
11924 }
11925
11926 if (reloc_count == 0)
11927 continue;
11928
9eaff861 11929 reloc_count += additional_reloc_count;
c152c796
AM
11930 o->reloc_count += reloc_count;
11931
0e1862bb 11932 if (p->type == bfd_indirect_link_order && emit_relocs)
c152c796 11933 {
d4730f92 11934 if (esdi->rel.hdr)
9eaff861 11935 {
491d01d3 11936 esdo->rel.count += NUM_SHDR_ENTRIES (esdi->rel.hdr);
9eaff861
AO
11937 esdo->rel.count += additional_reloc_count;
11938 }
d4730f92 11939 if (esdi->rela.hdr)
9eaff861 11940 {
491d01d3 11941 esdo->rela.count += NUM_SHDR_ENTRIES (esdi->rela.hdr);
9eaff861
AO
11942 esdo->rela.count += additional_reloc_count;
11943 }
d4730f92
BS
11944 }
11945 else
11946 {
11947 if (o->use_rela_p)
11948 esdo->rela.count += reloc_count;
2c2b4ed4 11949 else
d4730f92 11950 esdo->rel.count += reloc_count;
c152c796 11951 }
c152c796
AM
11952 }
11953
9eaff861 11954 if (o->reloc_count > 0)
c152c796
AM
11955 o->flags |= SEC_RELOC;
11956 else
11957 {
11958 /* Explicitly clear the SEC_RELOC flag. The linker tends to
11959 set it (this is probably a bug) and if it is set
11960 assign_section_numbers will create a reloc section. */
11961 o->flags &=~ SEC_RELOC;
11962 }
11963
11964 /* If the SEC_ALLOC flag is not set, force the section VMA to
11965 zero. This is done in elf_fake_sections as well, but forcing
11966 the VMA to 0 here will ensure that relocs against these
11967 sections are handled correctly. */
11968 if ((o->flags & SEC_ALLOC) == 0
11969 && ! o->user_set_vma)
11970 o->vma = 0;
11971 }
11972
0e1862bb 11973 if (! bfd_link_relocatable (info) && merged)
64f52338 11974 elf_link_hash_traverse (htab, _bfd_elf_link_sec_merge_syms, abfd);
c152c796
AM
11975
11976 /* Figure out the file positions for everything but the symbol table
11977 and the relocs. We set symcount to force assign_section_numbers
11978 to create a symbol table. */
8539e4e8 11979 bfd_get_symcount (abfd) = info->strip != strip_all || emit_relocs;
c152c796
AM
11980 BFD_ASSERT (! abfd->output_has_begun);
11981 if (! _bfd_elf_compute_section_file_positions (abfd, info))
11982 goto error_return;
11983
ee75fd95 11984 /* Set sizes, and assign file positions for reloc sections. */
c152c796
AM
11985 for (o = abfd->sections; o != NULL; o = o->next)
11986 {
d4730f92 11987 struct bfd_elf_section_data *esdo = elf_section_data (o);
c152c796
AM
11988 if ((o->flags & SEC_RELOC) != 0)
11989 {
d4730f92 11990 if (esdo->rel.hdr
9eaff861 11991 && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rel)))
c152c796
AM
11992 goto error_return;
11993
d4730f92 11994 if (esdo->rela.hdr
9eaff861 11995 && !(_bfd_elf_link_size_reloc_section (abfd, &esdo->rela)))
c152c796
AM
11996 goto error_return;
11997 }
11998
11999 /* Now, reset REL_COUNT and REL_COUNT2 so that we can use them
12000 to count upwards while actually outputting the relocations. */
d4730f92
BS
12001 esdo->rel.count = 0;
12002 esdo->rela.count = 0;
0ce398f1
L
12003
12004 if (esdo->this_hdr.sh_offset == (file_ptr) -1)
12005 {
12006 /* Cache the section contents so that they can be compressed
12007 later. Use bfd_malloc since it will be freed by
12008 bfd_compress_section_contents. */
12009 unsigned char *contents = esdo->this_hdr.contents;
12010 if ((o->flags & SEC_ELF_COMPRESS) == 0 || contents != NULL)
12011 abort ();
12012 contents
12013 = (unsigned char *) bfd_malloc (esdo->this_hdr.sh_size);
12014 if (contents == NULL)
12015 goto error_return;
12016 esdo->this_hdr.contents = contents;
12017 }
c152c796
AM
12018 }
12019
c152c796 12020 /* We have now assigned file positions for all the sections except
a485e98e
AM
12021 .symtab, .strtab, and non-loaded reloc sections. We start the
12022 .symtab section at the current file position, and write directly
12023 to it. We build the .strtab section in memory. */
c152c796
AM
12024 bfd_get_symcount (abfd) = 0;
12025 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12026 /* sh_name is set in prep_headers. */
12027 symtab_hdr->sh_type = SHT_SYMTAB;
12028 /* sh_flags, sh_addr and sh_size all start off zero. */
12029 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
12030 /* sh_link is set in assign_section_numbers. */
12031 /* sh_info is set below. */
12032 /* sh_offset is set just below. */
72de5009 12033 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
c152c796 12034
ef10c3ac
L
12035 if (max_sym_count < 20)
12036 max_sym_count = 20;
64f52338 12037 htab->strtabsize = max_sym_count;
ef10c3ac 12038 amt = max_sym_count * sizeof (struct elf_sym_strtab);
64f52338
AM
12039 htab->strtab = (struct elf_sym_strtab *) bfd_malloc (amt);
12040 if (htab->strtab == NULL)
c152c796 12041 goto error_return;
ef10c3ac
L
12042 /* The real buffer will be allocated in elf_link_swap_symbols_out. */
12043 flinfo.symshndxbuf
12044 = (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)
12045 ? (Elf_External_Sym_Shndx *) -1 : NULL);
c152c796 12046
8539e4e8 12047 if (info->strip != strip_all || emit_relocs)
c152c796 12048 {
8539e4e8
AM
12049 file_ptr off = elf_next_file_pos (abfd);
12050
12051 _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE);
12052
12053 /* Note that at this point elf_next_file_pos (abfd) is
12054 incorrect. We do not yet know the size of the .symtab section.
12055 We correct next_file_pos below, after we do know the size. */
12056
12057 /* Start writing out the symbol table. The first symbol is always a
12058 dummy symbol. */
c152c796
AM
12059 elfsym.st_value = 0;
12060 elfsym.st_size = 0;
12061 elfsym.st_info = 0;
12062 elfsym.st_other = 0;
12063 elfsym.st_shndx = SHN_UNDEF;
35fc36a8 12064 elfsym.st_target_internal = 0;
ef10c3ac
L
12065 if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym,
12066 bfd_und_section_ptr, NULL) != 1)
c152c796 12067 goto error_return;
c152c796 12068
8539e4e8
AM
12069 /* Output a symbol for each section. We output these even if we are
12070 discarding local symbols, since they are used for relocs. These
12071 symbols have no names. We store the index of each one in the
12072 index field of the section, so that we can find it again when
12073 outputting relocs. */
12074
c152c796
AM
12075 elfsym.st_size = 0;
12076 elfsym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
12077 elfsym.st_other = 0;
f0b5bb34 12078 elfsym.st_value = 0;
35fc36a8 12079 elfsym.st_target_internal = 0;
c152c796
AM
12080 for (i = 1; i < elf_numsections (abfd); i++)
12081 {
12082 o = bfd_section_from_elf_index (abfd, i);
12083 if (o != NULL)
f0b5bb34
AM
12084 {
12085 o->target_index = bfd_get_symcount (abfd);
12086 elfsym.st_shndx = i;
0e1862bb 12087 if (!bfd_link_relocatable (info))
f0b5bb34 12088 elfsym.st_value = o->vma;
ef10c3ac
L
12089 if (elf_link_output_symstrtab (&flinfo, NULL, &elfsym, o,
12090 NULL) != 1)
f0b5bb34
AM
12091 goto error_return;
12092 }
c152c796
AM
12093 }
12094 }
12095
12096 /* Allocate some memory to hold information read in from the input
12097 files. */
12098 if (max_contents_size != 0)
12099 {
8b127cbc
AM
12100 flinfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
12101 if (flinfo.contents == NULL)
c152c796
AM
12102 goto error_return;
12103 }
12104
12105 if (max_external_reloc_size != 0)
12106 {
8b127cbc
AM
12107 flinfo.external_relocs = bfd_malloc (max_external_reloc_size);
12108 if (flinfo.external_relocs == NULL)
c152c796
AM
12109 goto error_return;
12110 }
12111
12112 if (max_internal_reloc_count != 0)
12113 {
056bafd4 12114 amt = max_internal_reloc_count * sizeof (Elf_Internal_Rela);
8b127cbc
AM
12115 flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt);
12116 if (flinfo.internal_relocs == NULL)
c152c796
AM
12117 goto error_return;
12118 }
12119
12120 if (max_sym_count != 0)
12121 {
12122 amt = max_sym_count * bed->s->sizeof_sym;
8b127cbc
AM
12123 flinfo.external_syms = (bfd_byte *) bfd_malloc (amt);
12124 if (flinfo.external_syms == NULL)
c152c796
AM
12125 goto error_return;
12126
12127 amt = max_sym_count * sizeof (Elf_Internal_Sym);
8b127cbc
AM
12128 flinfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt);
12129 if (flinfo.internal_syms == NULL)
c152c796
AM
12130 goto error_return;
12131
12132 amt = max_sym_count * sizeof (long);
8b127cbc
AM
12133 flinfo.indices = (long int *) bfd_malloc (amt);
12134 if (flinfo.indices == NULL)
c152c796
AM
12135 goto error_return;
12136
12137 amt = max_sym_count * sizeof (asection *);
8b127cbc
AM
12138 flinfo.sections = (asection **) bfd_malloc (amt);
12139 if (flinfo.sections == NULL)
c152c796
AM
12140 goto error_return;
12141 }
12142
12143 if (max_sym_shndx_count != 0)
12144 {
12145 amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx);
8b127cbc
AM
12146 flinfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
12147 if (flinfo.locsym_shndx == NULL)
c152c796
AM
12148 goto error_return;
12149 }
12150
64f52338 12151 if (htab->tls_sec)
c152c796
AM
12152 {
12153 bfd_vma base, end = 0;
12154 asection *sec;
12155
64f52338 12156 for (sec = htab->tls_sec;
c152c796
AM
12157 sec && (sec->flags & SEC_THREAD_LOCAL);
12158 sec = sec->next)
12159 {
3a800eb9 12160 bfd_size_type size = sec->size;
c152c796 12161
3a800eb9
AM
12162 if (size == 0
12163 && (sec->flags & SEC_HAS_CONTENTS) == 0)
c152c796 12164 {
91d6fa6a
NC
12165 struct bfd_link_order *ord = sec->map_tail.link_order;
12166
12167 if (ord != NULL)
12168 size = ord->offset + ord->size;
c152c796
AM
12169 }
12170 end = sec->vma + size;
12171 }
64f52338 12172 base = htab->tls_sec->vma;
7dc98aea
RO
12173 /* Only align end of TLS section if static TLS doesn't have special
12174 alignment requirements. */
12175 if (bed->static_tls_alignment == 1)
64f52338
AM
12176 end = align_power (end, htab->tls_sec->alignment_power);
12177 htab->tls_size = end - base;
c152c796
AM
12178 }
12179
0b52efa6
PB
12180 /* Reorder SHF_LINK_ORDER sections. */
12181 for (o = abfd->sections; o != NULL; o = o->next)
12182 {
12183 if (!elf_fixup_link_order (abfd, o))
12184 return FALSE;
12185 }
12186
2f0c68f2
CM
12187 if (!_bfd_elf_fixup_eh_frame_hdr (info))
12188 return FALSE;
12189
c152c796
AM
12190 /* Since ELF permits relocations to be against local symbols, we
12191 must have the local symbols available when we do the relocations.
12192 Since we would rather only read the local symbols once, and we
12193 would rather not keep them in memory, we handle all the
12194 relocations for a single input file at the same time.
12195
12196 Unfortunately, there is no way to know the total number of local
12197 symbols until we have seen all of them, and the local symbol
12198 indices precede the global symbol indices. This means that when
12199 we are generating relocatable output, and we see a reloc against
12200 a global symbol, we can not know the symbol index until we have
12201 finished examining all the local symbols to see which ones we are
12202 going to output. To deal with this, we keep the relocations in
12203 memory, and don't output them until the end of the link. This is
12204 an unfortunate waste of memory, but I don't see a good way around
12205 it. Fortunately, it only happens when performing a relocatable
12206 link, which is not the common case. FIXME: If keep_memory is set
12207 we could write the relocs out and then read them again; I don't
12208 know how bad the memory loss will be. */
12209
c72f2fb2 12210 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
c152c796
AM
12211 sub->output_has_begun = FALSE;
12212 for (o = abfd->sections; o != NULL; o = o->next)
12213 {
8423293d 12214 for (p = o->map_head.link_order; p != NULL; p = p->next)
c152c796
AM
12215 {
12216 if (p->type == bfd_indirect_link_order
12217 && (bfd_get_flavour ((sub = p->u.indirect.section->owner))
12218 == bfd_target_elf_flavour)
12219 && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass)
12220 {
12221 if (! sub->output_has_begun)
12222 {
8b127cbc 12223 if (! elf_link_input_bfd (&flinfo, sub))
c152c796
AM
12224 goto error_return;
12225 sub->output_has_begun = TRUE;
12226 }
12227 }
12228 else if (p->type == bfd_section_reloc_link_order
12229 || p->type == bfd_symbol_reloc_link_order)
12230 {
12231 if (! elf_reloc_link_order (abfd, info, o, p))
12232 goto error_return;
12233 }
12234 else
12235 {
12236 if (! _bfd_default_link_order (abfd, info, o, p))
351f65ca
L
12237 {
12238 if (p->type == bfd_indirect_link_order
12239 && (bfd_get_flavour (sub)
12240 == bfd_target_elf_flavour)
12241 && (elf_elfheader (sub)->e_ident[EI_CLASS]
12242 != bed->s->elfclass))
12243 {
12244 const char *iclass, *oclass;
12245
aebf9be7 12246 switch (bed->s->elfclass)
351f65ca 12247 {
aebf9be7
NC
12248 case ELFCLASS64: oclass = "ELFCLASS64"; break;
12249 case ELFCLASS32: oclass = "ELFCLASS32"; break;
12250 case ELFCLASSNONE: oclass = "ELFCLASSNONE"; break;
12251 default: abort ();
351f65ca 12252 }
aebf9be7
NC
12253
12254 switch (elf_elfheader (sub)->e_ident[EI_CLASS])
351f65ca 12255 {
aebf9be7
NC
12256 case ELFCLASS64: iclass = "ELFCLASS64"; break;
12257 case ELFCLASS32: iclass = "ELFCLASS32"; break;
12258 case ELFCLASSNONE: iclass = "ELFCLASSNONE"; break;
12259 default: abort ();
351f65ca
L
12260 }
12261
12262 bfd_set_error (bfd_error_wrong_format);
4eca0228 12263 _bfd_error_handler
695344c0 12264 /* xgettext:c-format */
871b3ab2 12265 (_("%pB: file class %s incompatible with %s"),
351f65ca
L
12266 sub, iclass, oclass);
12267 }
12268
12269 goto error_return;
12270 }
c152c796
AM
12271 }
12272 }
12273 }
12274
c0f00686
L
12275 /* Free symbol buffer if needed. */
12276 if (!info->reduce_memory_overheads)
12277 {
c72f2fb2 12278 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
3fcd97f1
JJ
12279 if (bfd_get_flavour (sub) == bfd_target_elf_flavour
12280 && elf_tdata (sub)->symbuf)
c0f00686
L
12281 {
12282 free (elf_tdata (sub)->symbuf);
12283 elf_tdata (sub)->symbuf = NULL;
12284 }
12285 }
12286
c152c796
AM
12287 /* Output any global symbols that got converted to local in a
12288 version script or due to symbol visibility. We do this in a
12289 separate step since ELF requires all local symbols to appear
12290 prior to any global symbols. FIXME: We should only do this if
12291 some global symbols were, in fact, converted to become local.
12292 FIXME: Will this work correctly with the Irix 5 linker? */
12293 eoinfo.failed = FALSE;
8b127cbc 12294 eoinfo.flinfo = &flinfo;
c152c796 12295 eoinfo.localsyms = TRUE;
34a79995 12296 eoinfo.file_sym_done = FALSE;
7686d77d 12297 bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
c152c796
AM
12298 if (eoinfo.failed)
12299 return FALSE;
12300
4e617b1e
PB
12301 /* If backend needs to output some local symbols not present in the hash
12302 table, do it now. */
8539e4e8
AM
12303 if (bed->elf_backend_output_arch_local_syms
12304 && (info->strip != strip_all || emit_relocs))
4e617b1e 12305 {
6e0b88f1 12306 typedef int (*out_sym_func)
4e617b1e
PB
12307 (void *, const char *, Elf_Internal_Sym *, asection *,
12308 struct elf_link_hash_entry *);
12309
12310 if (! ((*bed->elf_backend_output_arch_local_syms)
ef10c3ac
L
12311 (abfd, info, &flinfo,
12312 (out_sym_func) elf_link_output_symstrtab)))
4e617b1e
PB
12313 return FALSE;
12314 }
12315
c152c796
AM
12316 /* That wrote out all the local symbols. Finish up the symbol table
12317 with the global symbols. Even if we want to strip everything we
12318 can, we still need to deal with those global symbols that got
12319 converted to local in a version script. */
12320
12321 /* The sh_info field records the index of the first non local symbol. */
12322 symtab_hdr->sh_info = bfd_get_symcount (abfd);
12323
12324 if (dynamic
64f52338
AM
12325 && htab->dynsym != NULL
12326 && htab->dynsym->output_section != bfd_abs_section_ptr)
c152c796
AM
12327 {
12328 Elf_Internal_Sym sym;
64f52338 12329 bfd_byte *dynsym = htab->dynsym->contents;
90ac2420 12330
64f52338
AM
12331 o = htab->dynsym->output_section;
12332 elf_section_data (o)->this_hdr.sh_info = htab->local_dynsymcount + 1;
c152c796
AM
12333
12334 /* Write out the section symbols for the output sections. */
0e1862bb 12335 if (bfd_link_pic (info)
64f52338 12336 || htab->is_relocatable_executable)
c152c796
AM
12337 {
12338 asection *s;
12339
12340 sym.st_size = 0;
12341 sym.st_name = 0;
12342 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
12343 sym.st_other = 0;
35fc36a8 12344 sym.st_target_internal = 0;
c152c796
AM
12345
12346 for (s = abfd->sections; s != NULL; s = s->next)
12347 {
12348 int indx;
12349 bfd_byte *dest;
12350 long dynindx;
12351
c152c796 12352 dynindx = elf_section_data (s)->dynindx;
8c37241b
JJ
12353 if (dynindx <= 0)
12354 continue;
12355 indx = elf_section_data (s)->this_idx;
c152c796
AM
12356 BFD_ASSERT (indx > 0);
12357 sym.st_shndx = indx;
c0d5a53d
L
12358 if (! check_dynsym (abfd, &sym))
12359 return FALSE;
c152c796
AM
12360 sym.st_value = s->vma;
12361 dest = dynsym + dynindx * bed->s->sizeof_sym;
12362 bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12363 }
c152c796
AM
12364 }
12365
12366 /* Write out the local dynsyms. */
64f52338 12367 if (htab->dynlocal)
c152c796
AM
12368 {
12369 struct elf_link_local_dynamic_entry *e;
64f52338 12370 for (e = htab->dynlocal; e ; e = e->next)
c152c796
AM
12371 {
12372 asection *s;
12373 bfd_byte *dest;
12374
935bd1e0 12375 /* Copy the internal symbol and turn off visibility.
c152c796
AM
12376 Note that we saved a word of storage and overwrote
12377 the original st_name with the dynstr_index. */
12378 sym = e->isym;
935bd1e0 12379 sym.st_other &= ~ELF_ST_VISIBILITY (-1);
c152c796 12380
cb33740c
AM
12381 s = bfd_section_from_elf_index (e->input_bfd,
12382 e->isym.st_shndx);
12383 if (s != NULL)
c152c796 12384 {
c152c796
AM
12385 sym.st_shndx =
12386 elf_section_data (s->output_section)->this_idx;
c0d5a53d
L
12387 if (! check_dynsym (abfd, &sym))
12388 return FALSE;
c152c796
AM
12389 sym.st_value = (s->output_section->vma
12390 + s->output_offset
12391 + e->isym.st_value);
12392 }
12393
c152c796
AM
12394 dest = dynsym + e->dynindx * bed->s->sizeof_sym;
12395 bed->s->swap_symbol_out (abfd, &sym, dest, 0);
12396 }
12397 }
c152c796
AM
12398 }
12399
12400 /* We get the global symbols from the hash table. */
12401 eoinfo.failed = FALSE;
12402 eoinfo.localsyms = FALSE;
8b127cbc 12403 eoinfo.flinfo = &flinfo;
7686d77d 12404 bfd_hash_traverse (&info->hash->table, elf_link_output_extsym, &eoinfo);
c152c796
AM
12405 if (eoinfo.failed)
12406 return FALSE;
12407
12408 /* If backend needs to output some symbols not present in the hash
12409 table, do it now. */
8539e4e8
AM
12410 if (bed->elf_backend_output_arch_syms
12411 && (info->strip != strip_all || emit_relocs))
c152c796 12412 {
6e0b88f1 12413 typedef int (*out_sym_func)
c152c796
AM
12414 (void *, const char *, Elf_Internal_Sym *, asection *,
12415 struct elf_link_hash_entry *);
12416
12417 if (! ((*bed->elf_backend_output_arch_syms)
ef10c3ac
L
12418 (abfd, info, &flinfo,
12419 (out_sym_func) elf_link_output_symstrtab)))
c152c796
AM
12420 return FALSE;
12421 }
12422
ef10c3ac
L
12423 /* Finalize the .strtab section. */
12424 _bfd_elf_strtab_finalize (flinfo.symstrtab);
12425
12426 /* Swap out the .strtab section. */
12427 if (!elf_link_swap_symbols_out (&flinfo))
c152c796
AM
12428 return FALSE;
12429
12430 /* Now we know the size of the symtab section. */
c152c796
AM
12431 if (bfd_get_symcount (abfd) > 0)
12432 {
ee3b52e9
L
12433 /* Finish up and write out the symbol string table (.strtab)
12434 section. */
ad32986f 12435 Elf_Internal_Shdr *symstrtab_hdr = NULL;
8539e4e8
AM
12436 file_ptr off = symtab_hdr->sh_offset + symtab_hdr->sh_size;
12437
ad32986f 12438 if (elf_symtab_shndx_list (abfd))
8539e4e8 12439 {
ad32986f 12440 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8539e4e8 12441
ad32986f
NC
12442 if (symtab_shndx_hdr != NULL && symtab_shndx_hdr->sh_name != 0)
12443 {
12444 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
12445 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
12446 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
12447 amt = bfd_get_symcount (abfd) * sizeof (Elf_External_Sym_Shndx);
12448 symtab_shndx_hdr->sh_size = amt;
8539e4e8 12449
ad32986f
NC
12450 off = _bfd_elf_assign_file_position_for_section (symtab_shndx_hdr,
12451 off, TRUE);
12452
12453 if (bfd_seek (abfd, symtab_shndx_hdr->sh_offset, SEEK_SET) != 0
12454 || (bfd_bwrite (flinfo.symshndxbuf, amt, abfd) != amt))
12455 return FALSE;
12456 }
8539e4e8 12457 }
ee3b52e9
L
12458
12459 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
12460 /* sh_name was set in prep_headers. */
12461 symstrtab_hdr->sh_type = SHT_STRTAB;
84865015 12462 symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
ee3b52e9 12463 symstrtab_hdr->sh_addr = 0;
ef10c3ac 12464 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (flinfo.symstrtab);
ee3b52e9
L
12465 symstrtab_hdr->sh_entsize = 0;
12466 symstrtab_hdr->sh_link = 0;
12467 symstrtab_hdr->sh_info = 0;
12468 /* sh_offset is set just below. */
12469 symstrtab_hdr->sh_addralign = 1;
12470
12471 off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr,
12472 off, TRUE);
12473 elf_next_file_pos (abfd) = off;
12474
c152c796 12475 if (bfd_seek (abfd, symstrtab_hdr->sh_offset, SEEK_SET) != 0
ef10c3ac 12476 || ! _bfd_elf_strtab_emit (abfd, flinfo.symstrtab))
c152c796
AM
12477 return FALSE;
12478 }
12479
76359541
TP
12480 if (info->out_implib_bfd && !elf_output_implib (abfd, info))
12481 {
871b3ab2 12482 _bfd_error_handler (_("%pB: failed to generate import library"),
4eca0228 12483 info->out_implib_bfd);
76359541
TP
12484 return FALSE;
12485 }
12486
c152c796
AM
12487 /* Adjust the relocs to have the correct symbol indices. */
12488 for (o = abfd->sections; o != NULL; o = o->next)
12489 {
d4730f92 12490 struct bfd_elf_section_data *esdo = elf_section_data (o);
28dbcedc 12491 bfd_boolean sort;
10bbbc1d 12492
c152c796
AM
12493 if ((o->flags & SEC_RELOC) == 0)
12494 continue;
12495
28dbcedc 12496 sort = bed->sort_relocs_p == NULL || (*bed->sort_relocs_p) (o);
bca6d0e3 12497 if (esdo->rel.hdr != NULL
10bbbc1d 12498 && !elf_link_adjust_relocs (abfd, o, &esdo->rel, sort, info))
bca6d0e3
AM
12499 return FALSE;
12500 if (esdo->rela.hdr != NULL
10bbbc1d 12501 && !elf_link_adjust_relocs (abfd, o, &esdo->rela, sort, info))
bca6d0e3 12502 return FALSE;
c152c796
AM
12503
12504 /* Set the reloc_count field to 0 to prevent write_relocs from
12505 trying to swap the relocs out itself. */
12506 o->reloc_count = 0;
12507 }
12508
12509 if (dynamic && info->combreloc && dynobj != NULL)
12510 relativecount = elf_link_sort_relocs (abfd, info, &reldyn);
12511
12512 /* If we are linking against a dynamic object, or generating a
12513 shared library, finish up the dynamic linking information. */
12514 if (dynamic)
12515 {
12516 bfd_byte *dyncon, *dynconend;
12517
12518 /* Fix up .dynamic entries. */
3d4d4302 12519 o = bfd_get_linker_section (dynobj, ".dynamic");
c152c796
AM
12520 BFD_ASSERT (o != NULL);
12521
12522 dyncon = o->contents;
eea6121a 12523 dynconend = o->contents + o->size;
c152c796
AM
12524 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12525 {
12526 Elf_Internal_Dyn dyn;
12527 const char *name;
12528 unsigned int type;
64487780
AM
12529 bfd_size_type sh_size;
12530 bfd_vma sh_addr;
c152c796
AM
12531
12532 bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12533
12534 switch (dyn.d_tag)
12535 {
12536 default:
12537 continue;
12538 case DT_NULL:
12539 if (relativecount > 0 && dyncon + bed->s->sizeof_dyn < dynconend)
12540 {
12541 switch (elf_section_data (reldyn)->this_hdr.sh_type)
12542 {
12543 case SHT_REL: dyn.d_tag = DT_RELCOUNT; break;
12544 case SHT_RELA: dyn.d_tag = DT_RELACOUNT; break;
12545 default: continue;
12546 }
12547 dyn.d_un.d_val = relativecount;
12548 relativecount = 0;
12549 break;
12550 }
12551 continue;
12552
12553 case DT_INIT:
12554 name = info->init_function;
12555 goto get_sym;
12556 case DT_FINI:
12557 name = info->fini_function;
12558 get_sym:
12559 {
12560 struct elf_link_hash_entry *h;
12561
64f52338 12562 h = elf_link_hash_lookup (htab, name, FALSE, FALSE, TRUE);
c152c796
AM
12563 if (h != NULL
12564 && (h->root.type == bfd_link_hash_defined
12565 || h->root.type == bfd_link_hash_defweak))
12566 {
bef26483 12567 dyn.d_un.d_ptr = h->root.u.def.value;
c152c796
AM
12568 o = h->root.u.def.section;
12569 if (o->output_section != NULL)
bef26483 12570 dyn.d_un.d_ptr += (o->output_section->vma
c152c796
AM
12571 + o->output_offset);
12572 else
12573 {
12574 /* The symbol is imported from another shared
12575 library and does not apply to this one. */
bef26483 12576 dyn.d_un.d_ptr = 0;
c152c796
AM
12577 }
12578 break;
12579 }
12580 }
12581 continue;
12582
12583 case DT_PREINIT_ARRAYSZ:
12584 name = ".preinit_array";
4ade44b7 12585 goto get_out_size;
c152c796
AM
12586 case DT_INIT_ARRAYSZ:
12587 name = ".init_array";
4ade44b7 12588 goto get_out_size;
c152c796
AM
12589 case DT_FINI_ARRAYSZ:
12590 name = ".fini_array";
4ade44b7 12591 get_out_size:
c152c796
AM
12592 o = bfd_get_section_by_name (abfd, name);
12593 if (o == NULL)
12594 {
4eca0228 12595 _bfd_error_handler
4ade44b7 12596 (_("could not find section %s"), name);
c152c796
AM
12597 goto error_return;
12598 }
eea6121a 12599 if (o->size == 0)
4eca0228 12600 _bfd_error_handler
c152c796 12601 (_("warning: %s section has zero size"), name);
eea6121a 12602 dyn.d_un.d_val = o->size;
c152c796
AM
12603 break;
12604
12605 case DT_PREINIT_ARRAY:
12606 name = ".preinit_array";
4ade44b7 12607 goto get_out_vma;
c152c796
AM
12608 case DT_INIT_ARRAY:
12609 name = ".init_array";
4ade44b7 12610 goto get_out_vma;
c152c796
AM
12611 case DT_FINI_ARRAY:
12612 name = ".fini_array";
4ade44b7
AM
12613 get_out_vma:
12614 o = bfd_get_section_by_name (abfd, name);
12615 goto do_vma;
c152c796
AM
12616
12617 case DT_HASH:
12618 name = ".hash";
12619 goto get_vma;
fdc90cb4
JJ
12620 case DT_GNU_HASH:
12621 name = ".gnu.hash";
12622 goto get_vma;
c152c796
AM
12623 case DT_STRTAB:
12624 name = ".dynstr";
12625 goto get_vma;
12626 case DT_SYMTAB:
12627 name = ".dynsym";
12628 goto get_vma;
12629 case DT_VERDEF:
12630 name = ".gnu.version_d";
12631 goto get_vma;
12632 case DT_VERNEED:
12633 name = ".gnu.version_r";
12634 goto get_vma;
12635 case DT_VERSYM:
12636 name = ".gnu.version";
12637 get_vma:
4ade44b7
AM
12638 o = bfd_get_linker_section (dynobj, name);
12639 do_vma:
b3293efa 12640 if (o == NULL || bfd_is_abs_section (o->output_section))
c152c796 12641 {
4eca0228 12642 _bfd_error_handler
4ade44b7 12643 (_("could not find section %s"), name);
c152c796
AM
12644 goto error_return;
12645 }
894891db
NC
12646 if (elf_section_data (o->output_section)->this_hdr.sh_type == SHT_NOTE)
12647 {
4eca0228 12648 _bfd_error_handler
894891db
NC
12649 (_("warning: section '%s' is being made into a note"), name);
12650 bfd_set_error (bfd_error_nonrepresentable_section);
12651 goto error_return;
12652 }
4ade44b7 12653 dyn.d_un.d_ptr = o->output_section->vma + o->output_offset;
c152c796
AM
12654 break;
12655
12656 case DT_REL:
12657 case DT_RELA:
12658 case DT_RELSZ:
12659 case DT_RELASZ:
12660 if (dyn.d_tag == DT_REL || dyn.d_tag == DT_RELSZ)
12661 type = SHT_REL;
12662 else
12663 type = SHT_RELA;
64487780
AM
12664 sh_size = 0;
12665 sh_addr = 0;
c152c796
AM
12666 for (i = 1; i < elf_numsections (abfd); i++)
12667 {
12668 Elf_Internal_Shdr *hdr;
12669
12670 hdr = elf_elfsections (abfd)[i];
12671 if (hdr->sh_type == type
12672 && (hdr->sh_flags & SHF_ALLOC) != 0)
12673 {
64487780
AM
12674 sh_size += hdr->sh_size;
12675 if (sh_addr == 0
12676 || sh_addr > hdr->sh_addr)
12677 sh_addr = hdr->sh_addr;
c152c796
AM
12678 }
12679 }
64487780 12680
64f52338
AM
12681 if (bed->dtrel_excludes_plt && htab->srelplt != NULL)
12682 {
12683 /* Don't count procedure linkage table relocs in the
12684 overall reloc count. */
64487780
AM
12685 sh_size -= htab->srelplt->size;
12686 if (sh_size == 0)
12687 /* If the size is zero, make the address zero too.
12688 This is to avoid a glibc bug. If the backend
12689 emits DT_RELA/DT_RELASZ even when DT_RELASZ is
12690 zero, then we'll put DT_RELA at the end of
12691 DT_JMPREL. glibc will interpret the end of
12692 DT_RELA matching the end of DT_JMPREL as the
12693 case where DT_RELA includes DT_JMPREL, and for
12694 LD_BIND_NOW will decide that processing DT_RELA
12695 will process the PLT relocs too. Net result:
12696 No PLT relocs applied. */
12697 sh_addr = 0;
12698
64f52338
AM
12699 /* If .rela.plt is the first .rela section, exclude
12700 it from DT_RELA. */
64487780
AM
12701 else if (sh_addr == (htab->srelplt->output_section->vma
12702 + htab->srelplt->output_offset))
12703 sh_addr += htab->srelplt->size;
64f52338 12704 }
64487780
AM
12705
12706 if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ)
12707 dyn.d_un.d_val = sh_size;
12708 else
12709 dyn.d_un.d_ptr = sh_addr;
c152c796
AM
12710 break;
12711 }
12712 bed->s->swap_dyn_out (dynobj, &dyn, dyncon);
12713 }
12714 }
12715
12716 /* If we have created any dynamic sections, then output them. */
12717 if (dynobj != NULL)
12718 {
12719 if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
12720 goto error_return;
12721
943284cc 12722 /* Check for DT_TEXTREL (late, in case the backend removes it). */
0e1862bb 12723 if (((info->warn_shared_textrel && bfd_link_pic (info))
be7b303d 12724 || info->error_textrel)
3d4d4302 12725 && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL)
943284cc
DJ
12726 {
12727 bfd_byte *dyncon, *dynconend;
12728
943284cc
DJ
12729 dyncon = o->contents;
12730 dynconend = o->contents + o->size;
12731 for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
12732 {
12733 Elf_Internal_Dyn dyn;
12734
12735 bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
12736
12737 if (dyn.d_tag == DT_TEXTREL)
12738 {
c192a133
AM
12739 if (info->error_textrel)
12740 info->callbacks->einfo
9793eb77 12741 (_("%P%X: read-only segment has dynamic relocations\n"));
c192a133
AM
12742 else
12743 info->callbacks->einfo
9793eb77 12744 (_("%P: warning: creating a DT_TEXTREL in a shared object\n"));
943284cc
DJ
12745 break;
12746 }
12747 }
12748 }
12749
c152c796
AM
12750 for (o = dynobj->sections; o != NULL; o = o->next)
12751 {
12752 if ((o->flags & SEC_HAS_CONTENTS) == 0
eea6121a 12753 || o->size == 0
c152c796
AM
12754 || o->output_section == bfd_abs_section_ptr)
12755 continue;
12756 if ((o->flags & SEC_LINKER_CREATED) == 0)
12757 {
12758 /* At this point, we are only interested in sections
12759 created by _bfd_elf_link_create_dynamic_sections. */
12760 continue;
12761 }
64f52338 12762 if (htab->stab_info.stabstr == o)
3722b82f 12763 continue;
64f52338 12764 if (htab->eh_info.hdr_sec == o)
eea6121a 12765 continue;
3d4d4302 12766 if (strcmp (o->name, ".dynstr") != 0)
c152c796
AM
12767 {
12768 if (! bfd_set_section_contents (abfd, o->output_section,
12769 o->contents,
37b01f6a
DG
12770 (file_ptr) o->output_offset
12771 * bfd_octets_per_byte (abfd),
eea6121a 12772 o->size))
c152c796
AM
12773 goto error_return;
12774 }
12775 else
12776 {
12777 /* The contents of the .dynstr section are actually in a
12778 stringtab. */
8539e4e8
AM
12779 file_ptr off;
12780
c152c796
AM
12781 off = elf_section_data (o->output_section)->this_hdr.sh_offset;
12782 if (bfd_seek (abfd, off, SEEK_SET) != 0
64f52338 12783 || !_bfd_elf_strtab_emit (abfd, htab->dynstr))
c152c796
AM
12784 goto error_return;
12785 }
12786 }
12787 }
12788
7bdf4127 12789 if (!info->resolve_section_groups)
c152c796
AM
12790 {
12791 bfd_boolean failed = FALSE;
12792
7bdf4127 12793 BFD_ASSERT (bfd_link_relocatable (info));
c152c796
AM
12794 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
12795 if (failed)
12796 goto error_return;
12797 }
12798
12799 /* If we have optimized stabs strings, output them. */
64f52338 12800 if (htab->stab_info.stabstr != NULL)
c152c796 12801 {
64f52338 12802 if (!_bfd_write_stab_strings (abfd, &htab->stab_info))
c152c796
AM
12803 goto error_return;
12804 }
12805
9f7c3e5e
AM
12806 if (! _bfd_elf_write_section_eh_frame_hdr (abfd, info))
12807 goto error_return;
c152c796 12808
9f7c3e5e 12809 elf_final_link_free (abfd, &flinfo);
c152c796 12810
12bd6957 12811 elf_linker (abfd) = TRUE;
c152c796 12812
104d59d1
JM
12813 if (attr_section)
12814 {
a50b1753 12815 bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size);
104d59d1 12816 if (contents == NULL)
d0f16d5e 12817 return FALSE; /* Bail out and fail. */
104d59d1
JM
12818 bfd_elf_set_obj_attr_contents (abfd, contents, attr_size);
12819 bfd_set_section_contents (abfd, attr_section, contents, 0, attr_size);
12820 free (contents);
12821 }
12822
c152c796
AM
12823 return TRUE;
12824
12825 error_return:
9f7c3e5e 12826 elf_final_link_free (abfd, &flinfo);
c152c796
AM
12827 return FALSE;
12828}
12829\f
5241d853
RS
12830/* Initialize COOKIE for input bfd ABFD. */
12831
12832static bfd_boolean
12833init_reloc_cookie (struct elf_reloc_cookie *cookie,
12834 struct bfd_link_info *info, bfd *abfd)
12835{
12836 Elf_Internal_Shdr *symtab_hdr;
12837 const struct elf_backend_data *bed;
12838
12839 bed = get_elf_backend_data (abfd);
12840 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12841
12842 cookie->abfd = abfd;
12843 cookie->sym_hashes = elf_sym_hashes (abfd);
12844 cookie->bad_symtab = elf_bad_symtab (abfd);
12845 if (cookie->bad_symtab)
12846 {
12847 cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
12848 cookie->extsymoff = 0;
12849 }
12850 else
12851 {
12852 cookie->locsymcount = symtab_hdr->sh_info;
12853 cookie->extsymoff = symtab_hdr->sh_info;
12854 }
12855
12856 if (bed->s->arch_size == 32)
12857 cookie->r_sym_shift = 8;
12858 else
12859 cookie->r_sym_shift = 32;
12860
12861 cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
12862 if (cookie->locsyms == NULL && cookie->locsymcount != 0)
12863 {
12864 cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12865 cookie->locsymcount, 0,
12866 NULL, NULL, NULL);
12867 if (cookie->locsyms == NULL)
12868 {
12869 info->callbacks->einfo (_("%P%X: can not read symbols: %E\n"));
12870 return FALSE;
12871 }
12872 if (info->keep_memory)
12873 symtab_hdr->contents = (bfd_byte *) cookie->locsyms;
12874 }
12875 return TRUE;
12876}
12877
12878/* Free the memory allocated by init_reloc_cookie, if appropriate. */
12879
12880static void
12881fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd)
12882{
12883 Elf_Internal_Shdr *symtab_hdr;
12884
12885 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12886 if (cookie->locsyms != NULL
12887 && symtab_hdr->contents != (unsigned char *) cookie->locsyms)
12888 free (cookie->locsyms);
12889}
12890
12891/* Initialize the relocation information in COOKIE for input section SEC
12892 of input bfd ABFD. */
12893
12894static bfd_boolean
12895init_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12896 struct bfd_link_info *info, bfd *abfd,
12897 asection *sec)
12898{
5241d853
RS
12899 if (sec->reloc_count == 0)
12900 {
12901 cookie->rels = NULL;
12902 cookie->relend = NULL;
12903 }
12904 else
12905 {
5241d853
RS
12906 cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
12907 info->keep_memory);
12908 if (cookie->rels == NULL)
12909 return FALSE;
12910 cookie->rel = cookie->rels;
056bafd4 12911 cookie->relend = cookie->rels + sec->reloc_count;
5241d853
RS
12912 }
12913 cookie->rel = cookie->rels;
12914 return TRUE;
12915}
12916
12917/* Free the memory allocated by init_reloc_cookie_rels,
12918 if appropriate. */
12919
12920static void
12921fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie,
12922 asection *sec)
12923{
12924 if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels)
12925 free (cookie->rels);
12926}
12927
12928/* Initialize the whole of COOKIE for input section SEC. */
12929
12930static bfd_boolean
12931init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12932 struct bfd_link_info *info,
12933 asection *sec)
12934{
12935 if (!init_reloc_cookie (cookie, info, sec->owner))
12936 goto error1;
12937 if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec))
12938 goto error2;
12939 return TRUE;
12940
12941 error2:
12942 fini_reloc_cookie (cookie, sec->owner);
12943 error1:
12944 return FALSE;
12945}
12946
12947/* Free the memory allocated by init_reloc_cookie_for_section,
12948 if appropriate. */
12949
12950static void
12951fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie,
12952 asection *sec)
12953{
12954 fini_reloc_cookie_rels (cookie, sec);
12955 fini_reloc_cookie (cookie, sec->owner);
12956}
12957\f
c152c796
AM
12958/* Garbage collect unused sections. */
12959
07adf181
AM
12960/* Default gc_mark_hook. */
12961
12962asection *
12963_bfd_elf_gc_mark_hook (asection *sec,
12964 struct bfd_link_info *info ATTRIBUTE_UNUSED,
12965 Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12966 struct elf_link_hash_entry *h,
12967 Elf_Internal_Sym *sym)
12968{
12969 if (h != NULL)
12970 {
12971 switch (h->root.type)
12972 {
12973 case bfd_link_hash_defined:
12974 case bfd_link_hash_defweak:
12975 return h->root.u.def.section;
12976
12977 case bfd_link_hash_common:
12978 return h->root.u.c.p->section;
12979
12980 default:
12981 break;
12982 }
12983 }
12984 else
12985 return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
12986
12987 return NULL;
12988}
12989
9e223787 12990/* Return the debug definition section. */
b7c871ed
L
12991
12992static asection *
12993elf_gc_mark_debug_section (asection *sec ATTRIBUTE_UNUSED,
12994 struct bfd_link_info *info ATTRIBUTE_UNUSED,
12995 Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
12996 struct elf_link_hash_entry *h,
9e223787 12997 Elf_Internal_Sym *sym)
b7c871ed 12998{
9e223787
L
12999 if (h != NULL)
13000 {
13001 /* Return the global debug definition section. */
13002 if ((h->root.type == bfd_link_hash_defined
13003 || h->root.type == bfd_link_hash_defweak)
13004 && (h->root.u.def.section->flags & SEC_DEBUGGING) != 0)
13005 return h->root.u.def.section;
13006 }
13007 else
13008 {
13009 /* Return the local debug definition section. */
13010 asection *isec = bfd_section_from_elf_index (sec->owner,
13011 sym->st_shndx);
13012 if ((isec->flags & SEC_DEBUGGING) != 0)
13013 return isec;
13014 }
b7c871ed
L
13015
13016 return NULL;
13017}
13018
5241d853
RS
13019/* COOKIE->rel describes a relocation against section SEC, which is
13020 a section we've decided to keep. Return the section that contains
13021 the relocation symbol, or NULL if no section contains it. */
13022
13023asection *
13024_bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec,
13025 elf_gc_mark_hook_fn gc_mark_hook,
1cce69b9
AM
13026 struct elf_reloc_cookie *cookie,
13027 bfd_boolean *start_stop)
5241d853
RS
13028{
13029 unsigned long r_symndx;
13030 struct elf_link_hash_entry *h;
13031
13032 r_symndx = cookie->rel->r_info >> cookie->r_sym_shift;
cf35638d 13033 if (r_symndx == STN_UNDEF)
5241d853
RS
13034 return NULL;
13035
13036 if (r_symndx >= cookie->locsymcount
13037 || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL)
13038 {
13039 h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
263ddf68
L
13040 if (h == NULL)
13041 {
871b3ab2 13042 info->callbacks->einfo (_("%F%P: corrupt input: %pB\n"),
263ddf68
L
13043 sec->owner);
13044 return NULL;
13045 }
5241d853
RS
13046 while (h->root.type == bfd_link_hash_indirect
13047 || h->root.type == bfd_link_hash_warning)
13048 h = (struct elf_link_hash_entry *) h->root.u.i.link;
1d5316ab 13049 h->mark = 1;
4e6b54a6
AM
13050 /* If this symbol is weak and there is a non-weak definition, we
13051 keep the non-weak definition because many backends put
13052 dynamic reloc info on the non-weak definition for code
13053 handling copy relocs. */
60d67dc8
AM
13054 if (h->is_weakalias)
13055 weakdef (h)->mark = 1;
1cce69b9 13056
a6a4679f 13057 if (start_stop != NULL)
1cce69b9 13058 {
7dba9362
AM
13059 /* To work around a glibc bug, mark XXX input sections
13060 when there is a reference to __start_XXX or __stop_XXX
13061 symbols. */
cbd0eecf 13062 if (h->start_stop)
1cce69b9 13063 {
cbd0eecf 13064 asection *s = h->u2.start_stop_section;
a6a4679f
AM
13065 *start_stop = !s->gc_mark;
13066 return s;
1cce69b9
AM
13067 }
13068 }
13069
5241d853
RS
13070 return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL);
13071 }
13072
13073 return (*gc_mark_hook) (sec, info, cookie->rel, NULL,
13074 &cookie->locsyms[r_symndx]);
13075}
13076
13077/* COOKIE->rel describes a relocation against section SEC, which is
13078 a section we've decided to keep. Mark the section that contains
9d0a14d3 13079 the relocation symbol. */
5241d853
RS
13080
13081bfd_boolean
13082_bfd_elf_gc_mark_reloc (struct bfd_link_info *info,
13083 asection *sec,
13084 elf_gc_mark_hook_fn gc_mark_hook,
9d0a14d3 13085 struct elf_reloc_cookie *cookie)
5241d853
RS
13086{
13087 asection *rsec;
1cce69b9 13088 bfd_boolean start_stop = FALSE;
5241d853 13089
1cce69b9
AM
13090 rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie, &start_stop);
13091 while (rsec != NULL)
5241d853 13092 {
1cce69b9
AM
13093 if (!rsec->gc_mark)
13094 {
13095 if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
13096 || (rsec->owner->flags & DYNAMIC) != 0)
13097 rsec->gc_mark = 1;
13098 else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
13099 return FALSE;
13100 }
13101 if (!start_stop)
13102 break;
199af150 13103 rsec = bfd_get_next_section_by_name (rsec->owner, rsec);
5241d853
RS
13104 }
13105 return TRUE;
13106}
13107
07adf181
AM
13108/* The mark phase of garbage collection. For a given section, mark
13109 it and any sections in this section's group, and all the sections
13110 which define symbols to which it refers. */
13111
ccfa59ea
AM
13112bfd_boolean
13113_bfd_elf_gc_mark (struct bfd_link_info *info,
13114 asection *sec,
6a5bb875 13115 elf_gc_mark_hook_fn gc_mark_hook)
c152c796
AM
13116{
13117 bfd_boolean ret;
9d0a14d3 13118 asection *group_sec, *eh_frame;
c152c796
AM
13119
13120 sec->gc_mark = 1;
13121
13122 /* Mark all the sections in the group. */
13123 group_sec = elf_section_data (sec)->next_in_group;
13124 if (group_sec && !group_sec->gc_mark)
ccfa59ea 13125 if (!_bfd_elf_gc_mark (info, group_sec, gc_mark_hook))
c152c796
AM
13126 return FALSE;
13127
13128 /* Look through the section relocs. */
13129 ret = TRUE;
9d0a14d3
RS
13130 eh_frame = elf_eh_frame_section (sec->owner);
13131 if ((sec->flags & SEC_RELOC) != 0
13132 && sec->reloc_count > 0
13133 && sec != eh_frame)
c152c796 13134 {
5241d853 13135 struct elf_reloc_cookie cookie;
c152c796 13136
5241d853
RS
13137 if (!init_reloc_cookie_for_section (&cookie, info, sec))
13138 ret = FALSE;
c152c796 13139 else
c152c796 13140 {
5241d853 13141 for (; cookie.rel < cookie.relend; cookie.rel++)
9d0a14d3 13142 if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie))
5241d853
RS
13143 {
13144 ret = FALSE;
13145 break;
13146 }
13147 fini_reloc_cookie_for_section (&cookie, sec);
c152c796
AM
13148 }
13149 }
9d0a14d3
RS
13150
13151 if (ret && eh_frame && elf_fde_list (sec))
13152 {
13153 struct elf_reloc_cookie cookie;
13154
13155 if (!init_reloc_cookie_for_section (&cookie, info, eh_frame))
13156 ret = FALSE;
13157 else
13158 {
13159 if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame,
13160 gc_mark_hook, &cookie))
13161 ret = FALSE;
13162 fini_reloc_cookie_for_section (&cookie, eh_frame);
13163 }
13164 }
13165
2f0c68f2
CM
13166 eh_frame = elf_section_eh_frame_entry (sec);
13167 if (ret && eh_frame && !eh_frame->gc_mark)
13168 if (!_bfd_elf_gc_mark (info, eh_frame, gc_mark_hook))
13169 ret = FALSE;
13170
c152c796
AM
13171 return ret;
13172}
13173
3c758495
TG
13174/* Scan and mark sections in a special or debug section group. */
13175
13176static void
13177_bfd_elf_gc_mark_debug_special_section_group (asection *grp)
13178{
13179 /* Point to first section of section group. */
13180 asection *ssec;
13181 /* Used to iterate the section group. */
13182 asection *msec;
13183
13184 bfd_boolean is_special_grp = TRUE;
13185 bfd_boolean is_debug_grp = TRUE;
13186
13187 /* First scan to see if group contains any section other than debug
13188 and special section. */
13189 ssec = msec = elf_next_in_group (grp);
13190 do
13191 {
13192 if ((msec->flags & SEC_DEBUGGING) == 0)
13193 is_debug_grp = FALSE;
13194
13195 if ((msec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) != 0)
13196 is_special_grp = FALSE;
13197
13198 msec = elf_next_in_group (msec);
13199 }
13200 while (msec != ssec);
13201
13202 /* If this is a pure debug section group or pure special section group,
13203 keep all sections in this group. */
13204 if (is_debug_grp || is_special_grp)
13205 {
13206 do
13207 {
13208 msec->gc_mark = 1;
13209 msec = elf_next_in_group (msec);
13210 }
13211 while (msec != ssec);
13212 }
13213}
13214
7f6ab9f8
AM
13215/* Keep debug and special sections. */
13216
13217bfd_boolean
13218_bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
13219 elf_gc_mark_hook_fn mark_hook ATTRIBUTE_UNUSED)
13220{
13221 bfd *ibfd;
13222
c72f2fb2 13223 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
7f6ab9f8
AM
13224 {
13225 asection *isec;
13226 bfd_boolean some_kept;
b40bf0a2 13227 bfd_boolean debug_frag_seen;
b7c871ed 13228 bfd_boolean has_kept_debug_info;
7f6ab9f8
AM
13229
13230 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13231 continue;
57963c05
AM
13232 isec = ibfd->sections;
13233 if (isec == NULL || isec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13234 continue;
7f6ab9f8 13235
b40bf0a2
NC
13236 /* Ensure all linker created sections are kept,
13237 see if any other section is already marked,
13238 and note if we have any fragmented debug sections. */
b7c871ed 13239 debug_frag_seen = some_kept = has_kept_debug_info = FALSE;
7f6ab9f8
AM
13240 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13241 {
13242 if ((isec->flags & SEC_LINKER_CREATED) != 0)
13243 isec->gc_mark = 1;
eb026f09
AM
13244 else if (isec->gc_mark
13245 && (isec->flags & SEC_ALLOC) != 0
13246 && elf_section_type (isec) != SHT_NOTE)
7f6ab9f8 13247 some_kept = TRUE;
b40bf0a2 13248
535b785f 13249 if (!debug_frag_seen
b40bf0a2
NC
13250 && (isec->flags & SEC_DEBUGGING)
13251 && CONST_STRNEQ (isec->name, ".debug_line."))
13252 debug_frag_seen = TRUE;
7f6ab9f8
AM
13253 }
13254
eb026f09
AM
13255 /* If no non-note alloc section in this file will be kept, then
13256 we can toss out the debug and special sections. */
7f6ab9f8
AM
13257 if (!some_kept)
13258 continue;
13259
13260 /* Keep debug and special sections like .comment when they are
3c758495
TG
13261 not part of a group. Also keep section groups that contain
13262 just debug sections or special sections. */
7f6ab9f8 13263 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
3c758495
TG
13264 {
13265 if ((isec->flags & SEC_GROUP) != 0)
13266 _bfd_elf_gc_mark_debug_special_section_group (isec);
13267 else if (((isec->flags & SEC_DEBUGGING) != 0
13268 || (isec->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0)
13269 && elf_next_in_group (isec) == NULL)
13270 isec->gc_mark = 1;
b7c871ed
L
13271 if (isec->gc_mark && (isec->flags & SEC_DEBUGGING) != 0)
13272 has_kept_debug_info = TRUE;
3c758495 13273 }
b40bf0a2 13274
b40bf0a2
NC
13275 /* Look for CODE sections which are going to be discarded,
13276 and find and discard any fragmented debug sections which
13277 are associated with that code section. */
b7c871ed
L
13278 if (debug_frag_seen)
13279 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13280 if ((isec->flags & SEC_CODE) != 0
13281 && isec->gc_mark == 0)
13282 {
13283 unsigned int ilen;
13284 asection *dsec;
b40bf0a2 13285
b7c871ed 13286 ilen = strlen (isec->name);
b40bf0a2 13287
b7c871ed 13288 /* Association is determined by the name of the debug
07d6d2b8 13289 section containing the name of the code section as
b7c871ed
L
13290 a suffix. For example .debug_line.text.foo is a
13291 debug section associated with .text.foo. */
13292 for (dsec = ibfd->sections; dsec != NULL; dsec = dsec->next)
13293 {
13294 unsigned int dlen;
b40bf0a2 13295
b7c871ed
L
13296 if (dsec->gc_mark == 0
13297 || (dsec->flags & SEC_DEBUGGING) == 0)
13298 continue;
b40bf0a2 13299
b7c871ed 13300 dlen = strlen (dsec->name);
b40bf0a2 13301
b7c871ed
L
13302 if (dlen > ilen
13303 && strncmp (dsec->name + (dlen - ilen),
13304 isec->name, ilen) == 0)
b40bf0a2 13305 dsec->gc_mark = 0;
b7c871ed 13306 }
b40bf0a2 13307 }
b7c871ed
L
13308
13309 /* Mark debug sections referenced by kept debug sections. */
13310 if (has_kept_debug_info)
13311 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
13312 if (isec->gc_mark
13313 && (isec->flags & SEC_DEBUGGING) != 0)
13314 if (!_bfd_elf_gc_mark (info, isec,
13315 elf_gc_mark_debug_section))
13316 return FALSE;
7f6ab9f8
AM
13317 }
13318 return TRUE;
13319}
13320
c152c796 13321static bfd_boolean
ccabcbe5 13322elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
c152c796
AM
13323{
13324 bfd *sub;
ccabcbe5 13325 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
c152c796 13326
c72f2fb2 13327 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
c152c796
AM
13328 {
13329 asection *o;
13330
b19a8f85 13331 if (bfd_get_flavour (sub) != bfd_target_elf_flavour
81742b83 13332 || elf_object_id (sub) != elf_hash_table_id (elf_hash_table (info))
b19a8f85 13333 || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
c152c796 13334 continue;
57963c05
AM
13335 o = sub->sections;
13336 if (o == NULL || o->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13337 continue;
c152c796
AM
13338
13339 for (o = sub->sections; o != NULL; o = o->next)
13340 {
a33dafc3
L
13341 /* When any section in a section group is kept, we keep all
13342 sections in the section group. If the first member of
13343 the section group is excluded, we will also exclude the
13344 group section. */
13345 if (o->flags & SEC_GROUP)
13346 {
13347 asection *first = elf_next_in_group (o);
13348 o->gc_mark = first->gc_mark;
13349 }
c152c796 13350
1e7eae0d 13351 if (o->gc_mark)
c152c796
AM
13352 continue;
13353
13354 /* Skip sweeping sections already excluded. */
13355 if (o->flags & SEC_EXCLUDE)
13356 continue;
13357
13358 /* Since this is early in the link process, it is simple
13359 to remove a section from the output. */
13360 o->flags |= SEC_EXCLUDE;
13361
c55fe096 13362 if (info->print_gc_sections && o->size != 0)
695344c0 13363 /* xgettext:c-format */
9793eb77 13364 _bfd_error_handler (_("removing unused section '%pA' in file '%pB'"),
c08bb8dd 13365 o, sub);
c152c796
AM
13366 }
13367 }
13368
c152c796
AM
13369 return TRUE;
13370}
13371
13372/* Propagate collected vtable information. This is called through
13373 elf_link_hash_traverse. */
13374
13375static bfd_boolean
13376elf_gc_propagate_vtable_entries_used (struct elf_link_hash_entry *h, void *okp)
13377{
c152c796 13378 /* Those that are not vtables. */
cbd0eecf
L
13379 if (h->start_stop
13380 || h->u2.vtable == NULL
13381 || h->u2.vtable->parent == NULL)
c152c796
AM
13382 return TRUE;
13383
13384 /* Those vtables that do not have parents, we cannot merge. */
cbd0eecf 13385 if (h->u2.vtable->parent == (struct elf_link_hash_entry *) -1)
c152c796
AM
13386 return TRUE;
13387
13388 /* If we've already been done, exit. */
cbd0eecf 13389 if (h->u2.vtable->used && h->u2.vtable->used[-1])
c152c796
AM
13390 return TRUE;
13391
13392 /* Make sure the parent's table is up to date. */
cbd0eecf 13393 elf_gc_propagate_vtable_entries_used (h->u2.vtable->parent, okp);
c152c796 13394
cbd0eecf 13395 if (h->u2.vtable->used == NULL)
c152c796
AM
13396 {
13397 /* None of this table's entries were referenced. Re-use the
13398 parent's table. */
cbd0eecf
L
13399 h->u2.vtable->used = h->u2.vtable->parent->u2.vtable->used;
13400 h->u2.vtable->size = h->u2.vtable->parent->u2.vtable->size;
c152c796
AM
13401 }
13402 else
13403 {
13404 size_t n;
13405 bfd_boolean *cu, *pu;
13406
13407 /* Or the parent's entries into ours. */
cbd0eecf 13408 cu = h->u2.vtable->used;
c152c796 13409 cu[-1] = TRUE;
cbd0eecf 13410 pu = h->u2.vtable->parent->u2.vtable->used;
c152c796
AM
13411 if (pu != NULL)
13412 {
13413 const struct elf_backend_data *bed;
13414 unsigned int log_file_align;
13415
13416 bed = get_elf_backend_data (h->root.u.def.section->owner);
13417 log_file_align = bed->s->log_file_align;
cbd0eecf 13418 n = h->u2.vtable->parent->u2.vtable->size >> log_file_align;
c152c796
AM
13419 while (n--)
13420 {
13421 if (*pu)
13422 *cu = TRUE;
13423 pu++;
13424 cu++;
13425 }
13426 }
13427 }
13428
13429 return TRUE;
13430}
13431
13432static bfd_boolean
13433elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp)
13434{
13435 asection *sec;
13436 bfd_vma hstart, hend;
13437 Elf_Internal_Rela *relstart, *relend, *rel;
13438 const struct elf_backend_data *bed;
13439 unsigned int log_file_align;
13440
c152c796
AM
13441 /* Take care of both those symbols that do not describe vtables as
13442 well as those that are not loaded. */
cbd0eecf
L
13443 if (h->start_stop
13444 || h->u2.vtable == NULL
13445 || h->u2.vtable->parent == NULL)
c152c796
AM
13446 return TRUE;
13447
13448 BFD_ASSERT (h->root.type == bfd_link_hash_defined
13449 || h->root.type == bfd_link_hash_defweak);
13450
13451 sec = h->root.u.def.section;
13452 hstart = h->root.u.def.value;
13453 hend = hstart + h->size;
13454
13455 relstart = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, TRUE);
13456 if (!relstart)
13457 return *(bfd_boolean *) okp = FALSE;
13458 bed = get_elf_backend_data (sec->owner);
13459 log_file_align = bed->s->log_file_align;
13460
056bafd4 13461 relend = relstart + sec->reloc_count;
c152c796
AM
13462
13463 for (rel = relstart; rel < relend; ++rel)
13464 if (rel->r_offset >= hstart && rel->r_offset < hend)
13465 {
13466 /* If the entry is in use, do nothing. */
cbd0eecf
L
13467 if (h->u2.vtable->used
13468 && (rel->r_offset - hstart) < h->u2.vtable->size)
c152c796
AM
13469 {
13470 bfd_vma entry = (rel->r_offset - hstart) >> log_file_align;
cbd0eecf 13471 if (h->u2.vtable->used[entry])
c152c796
AM
13472 continue;
13473 }
13474 /* Otherwise, kill it. */
13475 rel->r_offset = rel->r_info = rel->r_addend = 0;
13476 }
13477
13478 return TRUE;
13479}
13480
87538722
AM
13481/* Mark sections containing dynamically referenced symbols. When
13482 building shared libraries, we must assume that any visible symbol is
13483 referenced. */
715df9b8 13484
64d03ab5
AM
13485bfd_boolean
13486bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
715df9b8 13487{
87538722 13488 struct bfd_link_info *info = (struct bfd_link_info *) inf;
d6f6f455 13489 struct bfd_elf_dynamic_list *d = info->dynamic_list;
87538722 13490
715df9b8
EB
13491 if ((h->root.type == bfd_link_hash_defined
13492 || h->root.type == bfd_link_hash_defweak)
d664fd41 13493 && ((h->ref_dynamic && !h->forced_local)
c4621b33 13494 || ((h->def_regular || ELF_COMMON_DEF_P (h))
87538722 13495 && ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
fd91d419 13496 && ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
0e1862bb 13497 && (!bfd_link_executable (info)
22185505 13498 || info->gc_keep_exported
b407645f
AM
13499 || info->export_dynamic
13500 || (h->dynamic
13501 && d != NULL
13502 && (*d->match) (&d->head, NULL, h->root.root.string)))
422f1182 13503 && (h->versioned >= versioned
54e8959c
L
13504 || !bfd_hide_sym_by_version (info->version_info,
13505 h->root.root.string)))))
715df9b8
EB
13506 h->root.u.def.section->flags |= SEC_KEEP;
13507
13508 return TRUE;
13509}
3b36f7e6 13510
74f0fb50
AM
13511/* Keep all sections containing symbols undefined on the command-line,
13512 and the section containing the entry symbol. */
13513
13514void
13515_bfd_elf_gc_keep (struct bfd_link_info *info)
13516{
13517 struct bfd_sym_chain *sym;
13518
13519 for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
13520 {
13521 struct elf_link_hash_entry *h;
13522
13523 h = elf_link_hash_lookup (elf_hash_table (info), sym->name,
13524 FALSE, FALSE, FALSE);
13525
13526 if (h != NULL
13527 && (h->root.type == bfd_link_hash_defined
13528 || h->root.type == bfd_link_hash_defweak)
f02cb058
AM
13529 && !bfd_is_abs_section (h->root.u.def.section)
13530 && !bfd_is_und_section (h->root.u.def.section))
74f0fb50
AM
13531 h->root.u.def.section->flags |= SEC_KEEP;
13532 }
13533}
13534
2f0c68f2
CM
13535bfd_boolean
13536bfd_elf_parse_eh_frame_entries (bfd *abfd ATTRIBUTE_UNUSED,
13537 struct bfd_link_info *info)
13538{
13539 bfd *ibfd = info->input_bfds;
13540
13541 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
13542 {
13543 asection *sec;
13544 struct elf_reloc_cookie cookie;
13545
13546 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
13547 continue;
57963c05
AM
13548 sec = ibfd->sections;
13549 if (sec == NULL || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13550 continue;
2f0c68f2
CM
13551
13552 if (!init_reloc_cookie (&cookie, info, ibfd))
13553 return FALSE;
13554
13555 for (sec = ibfd->sections; sec; sec = sec->next)
13556 {
13557 if (CONST_STRNEQ (bfd_section_name (ibfd, sec), ".eh_frame_entry")
13558 && init_reloc_cookie_rels (&cookie, info, ibfd, sec))
13559 {
13560 _bfd_elf_parse_eh_frame_entry (info, sec, &cookie);
13561 fini_reloc_cookie_rels (&cookie, sec);
13562 }
13563 }
13564 }
13565 return TRUE;
13566}
13567
c152c796
AM
13568/* Do mark and sweep of unused sections. */
13569
13570bfd_boolean
13571bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
13572{
13573 bfd_boolean ok = TRUE;
13574 bfd *sub;
6a5bb875 13575 elf_gc_mark_hook_fn gc_mark_hook;
64d03ab5 13576 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
da44f4e5 13577 struct elf_link_hash_table *htab;
c152c796 13578
64d03ab5 13579 if (!bed->can_gc_sections
715df9b8 13580 || !is_elf_hash_table (info->hash))
c152c796 13581 {
9793eb77 13582 _bfd_error_handler(_("warning: gc-sections option ignored"));
c152c796
AM
13583 return TRUE;
13584 }
13585
74f0fb50 13586 bed->gc_keep (info);
da44f4e5 13587 htab = elf_hash_table (info);
74f0fb50 13588
9d0a14d3
RS
13589 /* Try to parse each bfd's .eh_frame section. Point elf_eh_frame_section
13590 at the .eh_frame section if we can mark the FDEs individually. */
2f0c68f2
CM
13591 for (sub = info->input_bfds;
13592 info->eh_frame_hdr_type != COMPACT_EH_HDR && sub != NULL;
13593 sub = sub->link.next)
9d0a14d3
RS
13594 {
13595 asection *sec;
13596 struct elf_reloc_cookie cookie;
13597
57963c05
AM
13598 sec = sub->sections;
13599 if (sec == NULL || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13600 continue;
9d0a14d3 13601 sec = bfd_get_section_by_name (sub, ".eh_frame");
9a2a56cc 13602 while (sec && init_reloc_cookie_for_section (&cookie, info, sec))
9d0a14d3
RS
13603 {
13604 _bfd_elf_parse_eh_frame (sub, info, sec, &cookie);
9a2a56cc
AM
13605 if (elf_section_data (sec)->sec_info
13606 && (sec->flags & SEC_LINKER_CREATED) == 0)
9d0a14d3
RS
13607 elf_eh_frame_section (sub) = sec;
13608 fini_reloc_cookie_for_section (&cookie, sec);
199af150 13609 sec = bfd_get_next_section_by_name (NULL, sec);
9d0a14d3
RS
13610 }
13611 }
9d0a14d3 13612
c152c796 13613 /* Apply transitive closure to the vtable entry usage info. */
da44f4e5 13614 elf_link_hash_traverse (htab, elf_gc_propagate_vtable_entries_used, &ok);
c152c796
AM
13615 if (!ok)
13616 return FALSE;
13617
13618 /* Kill the vtable relocations that were not used. */
da44f4e5 13619 elf_link_hash_traverse (htab, elf_gc_smash_unused_vtentry_relocs, &ok);
c152c796
AM
13620 if (!ok)
13621 return FALSE;
13622
715df9b8 13623 /* Mark dynamically referenced symbols. */
22185505 13624 if (htab->dynamic_sections_created || info->gc_keep_exported)
da44f4e5 13625 elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
c152c796 13626
715df9b8 13627 /* Grovel through relocs to find out who stays ... */
64d03ab5 13628 gc_mark_hook = bed->gc_mark_hook;
c72f2fb2 13629 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
c152c796
AM
13630 {
13631 asection *o;
13632
b19a8f85 13633 if (bfd_get_flavour (sub) != bfd_target_elf_flavour
81742b83 13634 || elf_object_id (sub) != elf_hash_table_id (htab)
b19a8f85 13635 || !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
c152c796
AM
13636 continue;
13637
57963c05
AM
13638 o = sub->sections;
13639 if (o == NULL || o->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
13640 continue;
13641
7f6ab9f8
AM
13642 /* Start at sections marked with SEC_KEEP (ref _bfd_elf_gc_keep).
13643 Also treat note sections as a root, if the section is not part
8b6f4cd3
L
13644 of a group. We must keep all PREINIT_ARRAY, INIT_ARRAY as
13645 well as FINI_ARRAY sections for ld -r. */
c152c796 13646 for (o = sub->sections; o != NULL; o = o->next)
7f6ab9f8
AM
13647 if (!o->gc_mark
13648 && (o->flags & SEC_EXCLUDE) == 0
24007750 13649 && ((o->flags & SEC_KEEP) != 0
8b6f4cd3
L
13650 || (bfd_link_relocatable (info)
13651 && ((elf_section_data (o)->this_hdr.sh_type
13652 == SHT_PREINIT_ARRAY)
13653 || (elf_section_data (o)->this_hdr.sh_type
13654 == SHT_INIT_ARRAY)
13655 || (elf_section_data (o)->this_hdr.sh_type
13656 == SHT_FINI_ARRAY)))
7f6ab9f8
AM
13657 || (elf_section_data (o)->this_hdr.sh_type == SHT_NOTE
13658 && elf_next_in_group (o) == NULL )))
13659 {
13660 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
13661 return FALSE;
13662 }
c152c796
AM
13663 }
13664
6a5bb875 13665 /* Allow the backend to mark additional target specific sections. */
7f6ab9f8 13666 bed->gc_mark_extra_sections (info, gc_mark_hook);
6a5bb875 13667
c152c796 13668 /* ... and mark SEC_EXCLUDE for those that go. */
ccabcbe5 13669 return elf_gc_sweep (abfd, info);
c152c796
AM
13670}
13671\f
13672/* Called from check_relocs to record the existence of a VTINHERIT reloc. */
13673
13674bfd_boolean
13675bfd_elf_gc_record_vtinherit (bfd *abfd,
13676 asection *sec,
13677 struct elf_link_hash_entry *h,
13678 bfd_vma offset)
13679{
13680 struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
13681 struct elf_link_hash_entry **search, *child;
ef53be89 13682 size_t extsymcount;
c152c796
AM
13683 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13684
13685 /* The sh_info field of the symtab header tells us where the
13686 external symbols start. We don't care about the local symbols at
13687 this point. */
13688 extsymcount = elf_tdata (abfd)->symtab_hdr.sh_size / bed->s->sizeof_sym;
13689 if (!elf_bad_symtab (abfd))
13690 extsymcount -= elf_tdata (abfd)->symtab_hdr.sh_info;
13691
13692 sym_hashes = elf_sym_hashes (abfd);
13693 sym_hashes_end = sym_hashes + extsymcount;
13694
13695 /* Hunt down the child symbol, which is in this section at the same
13696 offset as the relocation. */
13697 for (search = sym_hashes; search != sym_hashes_end; ++search)
13698 {
13699 if ((child = *search) != NULL
13700 && (child->root.type == bfd_link_hash_defined
13701 || child->root.type == bfd_link_hash_defweak)
13702 && child->root.u.def.section == sec
13703 && child->root.u.def.value == offset)
13704 goto win;
13705 }
13706
695344c0 13707 /* xgettext:c-format */
9793eb77 13708 _bfd_error_handler (_("%pB: %pA+%#" PRIx64 ": no symbol found for INHERIT"),
2dcf00ce 13709 abfd, sec, (uint64_t) offset);
c152c796
AM
13710 bfd_set_error (bfd_error_invalid_operation);
13711 return FALSE;
13712
13713 win:
cbd0eecf 13714 if (!child->u2.vtable)
f6e332e6 13715 {
cbd0eecf
L
13716 child->u2.vtable = ((struct elf_link_virtual_table_entry *)
13717 bfd_zalloc (abfd, sizeof (*child->u2.vtable)));
13718 if (!child->u2.vtable)
f6e332e6
AM
13719 return FALSE;
13720 }
c152c796
AM
13721 if (!h)
13722 {
13723 /* This *should* only be the absolute section. It could potentially
13724 be that someone has defined a non-global vtable though, which
13725 would be bad. It isn't worth paging in the local symbols to be
13726 sure though; that case should simply be handled by the assembler. */
13727
cbd0eecf 13728 child->u2.vtable->parent = (struct elf_link_hash_entry *) -1;
c152c796
AM
13729 }
13730 else
cbd0eecf 13731 child->u2.vtable->parent = h;
c152c796
AM
13732
13733 return TRUE;
13734}
13735
13736/* Called from check_relocs to record the existence of a VTENTRY reloc. */
13737
13738bfd_boolean
a0ea3a14 13739bfd_elf_gc_record_vtentry (bfd *abfd, asection *sec,
c152c796
AM
13740 struct elf_link_hash_entry *h,
13741 bfd_vma addend)
13742{
13743 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13744 unsigned int log_file_align = bed->s->log_file_align;
13745
a0ea3a14
L
13746 if (!h)
13747 {
13748 /* xgettext:c-format */
13749 _bfd_error_handler (_("%pB: section '%pA': corrupt VTENTRY entry"),
13750 abfd, sec);
13751 bfd_set_error (bfd_error_bad_value);
13752 return FALSE;
13753 }
13754
cbd0eecf 13755 if (!h->u2.vtable)
f6e332e6 13756 {
cbd0eecf
L
13757 h->u2.vtable = ((struct elf_link_virtual_table_entry *)
13758 bfd_zalloc (abfd, sizeof (*h->u2.vtable)));
13759 if (!h->u2.vtable)
f6e332e6
AM
13760 return FALSE;
13761 }
13762
cbd0eecf 13763 if (addend >= h->u2.vtable->size)
c152c796
AM
13764 {
13765 size_t size, bytes, file_align;
cbd0eecf 13766 bfd_boolean *ptr = h->u2.vtable->used;
c152c796
AM
13767
13768 /* While the symbol is undefined, we have to be prepared to handle
13769 a zero size. */
13770 file_align = 1 << log_file_align;
13771 if (h->root.type == bfd_link_hash_undefined)
13772 size = addend + file_align;
13773 else
13774 {
13775 size = h->size;
13776 if (addend >= size)
13777 {
13778 /* Oops! We've got a reference past the defined end of
13779 the table. This is probably a bug -- shall we warn? */
13780 size = addend + file_align;
13781 }
13782 }
13783 size = (size + file_align - 1) & -file_align;
13784
13785 /* Allocate one extra entry for use as a "done" flag for the
13786 consolidation pass. */
13787 bytes = ((size >> log_file_align) + 1) * sizeof (bfd_boolean);
13788
13789 if (ptr)
13790 {
a50b1753 13791 ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes);
c152c796
AM
13792
13793 if (ptr != NULL)
13794 {
13795 size_t oldbytes;
13796
cbd0eecf 13797 oldbytes = (((h->u2.vtable->size >> log_file_align) + 1)
c152c796
AM
13798 * sizeof (bfd_boolean));
13799 memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes);
13800 }
13801 }
13802 else
a50b1753 13803 ptr = (bfd_boolean *) bfd_zmalloc (bytes);
c152c796
AM
13804
13805 if (ptr == NULL)
13806 return FALSE;
13807
13808 /* And arrange for that done flag to be at index -1. */
cbd0eecf
L
13809 h->u2.vtable->used = ptr + 1;
13810 h->u2.vtable->size = size;
c152c796
AM
13811 }
13812
cbd0eecf 13813 h->u2.vtable->used[addend >> log_file_align] = TRUE;
c152c796
AM
13814
13815 return TRUE;
13816}
13817
ae17ab41
CM
13818/* Map an ELF section header flag to its corresponding string. */
13819typedef struct
13820{
13821 char *flag_name;
13822 flagword flag_value;
13823} elf_flags_to_name_table;
13824
13825static elf_flags_to_name_table elf_flags_to_names [] =
13826{
13827 { "SHF_WRITE", SHF_WRITE },
13828 { "SHF_ALLOC", SHF_ALLOC },
13829 { "SHF_EXECINSTR", SHF_EXECINSTR },
13830 { "SHF_MERGE", SHF_MERGE },
13831 { "SHF_STRINGS", SHF_STRINGS },
13832 { "SHF_INFO_LINK", SHF_INFO_LINK},
13833 { "SHF_LINK_ORDER", SHF_LINK_ORDER},
13834 { "SHF_OS_NONCONFORMING", SHF_OS_NONCONFORMING},
13835 { "SHF_GROUP", SHF_GROUP },
13836 { "SHF_TLS", SHF_TLS },
13837 { "SHF_MASKOS", SHF_MASKOS },
13838 { "SHF_EXCLUDE", SHF_EXCLUDE },
13839};
13840
b9c361e0
JL
13841/* Returns TRUE if the section is to be included, otherwise FALSE. */
13842bfd_boolean
ae17ab41 13843bfd_elf_lookup_section_flags (struct bfd_link_info *info,
8b127cbc 13844 struct flag_info *flaginfo,
b9c361e0 13845 asection *section)
ae17ab41 13846{
8b127cbc 13847 const bfd_vma sh_flags = elf_section_flags (section);
ae17ab41 13848
8b127cbc 13849 if (!flaginfo->flags_initialized)
ae17ab41 13850 {
8b127cbc
AM
13851 bfd *obfd = info->output_bfd;
13852 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
13853 struct flag_info_list *tf = flaginfo->flag_list;
b9c361e0
JL
13854 int with_hex = 0;
13855 int without_hex = 0;
13856
8b127cbc 13857 for (tf = flaginfo->flag_list; tf != NULL; tf = tf->next)
ae17ab41 13858 {
b9c361e0 13859 unsigned i;
8b127cbc 13860 flagword (*lookup) (char *);
ae17ab41 13861
8b127cbc
AM
13862 lookup = bed->elf_backend_lookup_section_flags_hook;
13863 if (lookup != NULL)
ae17ab41 13864 {
8b127cbc 13865 flagword hexval = (*lookup) ((char *) tf->name);
b9c361e0
JL
13866
13867 if (hexval != 0)
13868 {
13869 if (tf->with == with_flags)
13870 with_hex |= hexval;
13871 else if (tf->with == without_flags)
13872 without_hex |= hexval;
13873 tf->valid = TRUE;
13874 continue;
13875 }
ae17ab41 13876 }
8b127cbc 13877 for (i = 0; i < ARRAY_SIZE (elf_flags_to_names); ++i)
ae17ab41 13878 {
8b127cbc 13879 if (strcmp (tf->name, elf_flags_to_names[i].flag_name) == 0)
b9c361e0
JL
13880 {
13881 if (tf->with == with_flags)
13882 with_hex |= elf_flags_to_names[i].flag_value;
13883 else if (tf->with == without_flags)
13884 without_hex |= elf_flags_to_names[i].flag_value;
13885 tf->valid = TRUE;
13886 break;
13887 }
13888 }
8b127cbc 13889 if (!tf->valid)
b9c361e0 13890 {
68ffbac6 13891 info->callbacks->einfo
9793eb77 13892 (_("unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
b9c361e0 13893 return FALSE;
ae17ab41
CM
13894 }
13895 }
8b127cbc
AM
13896 flaginfo->flags_initialized = TRUE;
13897 flaginfo->only_with_flags |= with_hex;
13898 flaginfo->not_with_flags |= without_hex;
ae17ab41 13899 }
ae17ab41 13900
8b127cbc 13901 if ((flaginfo->only_with_flags & sh_flags) != flaginfo->only_with_flags)
b9c361e0
JL
13902 return FALSE;
13903
8b127cbc 13904 if ((flaginfo->not_with_flags & sh_flags) != 0)
b9c361e0
JL
13905 return FALSE;
13906
13907 return TRUE;
ae17ab41
CM
13908}
13909
c152c796
AM
13910struct alloc_got_off_arg {
13911 bfd_vma gotoff;
10455f89 13912 struct bfd_link_info *info;
c152c796
AM
13913};
13914
13915/* We need a special top-level link routine to convert got reference counts
13916 to real got offsets. */
13917
13918static bfd_boolean
13919elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg)
13920{
a50b1753 13921 struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg;
10455f89
HPN
13922 bfd *obfd = gofarg->info->output_bfd;
13923 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
c152c796 13924
c152c796
AM
13925 if (h->got.refcount > 0)
13926 {
13927 h->got.offset = gofarg->gotoff;
10455f89 13928 gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0);
c152c796
AM
13929 }
13930 else
13931 h->got.offset = (bfd_vma) -1;
13932
13933 return TRUE;
13934}
13935
13936/* And an accompanying bit to work out final got entry offsets once
13937 we're done. Should be called from final_link. */
13938
13939bfd_boolean
13940bfd_elf_gc_common_finalize_got_offsets (bfd *abfd,
13941 struct bfd_link_info *info)
13942{
13943 bfd *i;
13944 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13945 bfd_vma gotoff;
c152c796
AM
13946 struct alloc_got_off_arg gofarg;
13947
10455f89
HPN
13948 BFD_ASSERT (abfd == info->output_bfd);
13949
c152c796
AM
13950 if (! is_elf_hash_table (info->hash))
13951 return FALSE;
13952
13953 /* The GOT offset is relative to the .got section, but the GOT header is
13954 put into the .got.plt section, if the backend uses it. */
13955 if (bed->want_got_plt)
13956 gotoff = 0;
13957 else
13958 gotoff = bed->got_header_size;
13959
13960 /* Do the local .got entries first. */
c72f2fb2 13961 for (i = info->input_bfds; i; i = i->link.next)
c152c796
AM
13962 {
13963 bfd_signed_vma *local_got;
ef53be89 13964 size_t j, locsymcount;
c152c796
AM
13965 Elf_Internal_Shdr *symtab_hdr;
13966
13967 if (bfd_get_flavour (i) != bfd_target_elf_flavour)
13968 continue;
13969
13970 local_got = elf_local_got_refcounts (i);
13971 if (!local_got)
13972 continue;
13973
13974 symtab_hdr = &elf_tdata (i)->symtab_hdr;
13975 if (elf_bad_symtab (i))
13976 locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym;
13977 else
13978 locsymcount = symtab_hdr->sh_info;
13979
13980 for (j = 0; j < locsymcount; ++j)
13981 {
13982 if (local_got[j] > 0)
13983 {
13984 local_got[j] = gotoff;
10455f89 13985 gotoff += bed->got_elt_size (abfd, info, NULL, i, j);
c152c796
AM
13986 }
13987 else
13988 local_got[j] = (bfd_vma) -1;
13989 }
13990 }
13991
13992 /* Then the global .got entries. .plt refcounts are handled by
13993 adjust_dynamic_symbol */
13994 gofarg.gotoff = gotoff;
10455f89 13995 gofarg.info = info;
c152c796
AM
13996 elf_link_hash_traverse (elf_hash_table (info),
13997 elf_gc_allocate_got_offsets,
13998 &gofarg);
13999 return TRUE;
14000}
14001
14002/* Many folk need no more in the way of final link than this, once
14003 got entry reference counting is enabled. */
14004
14005bfd_boolean
14006bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info)
14007{
14008 if (!bfd_elf_gc_common_finalize_got_offsets (abfd, info))
14009 return FALSE;
14010
14011 /* Invoke the regular ELF backend linker to do all the work. */
14012 return bfd_elf_final_link (abfd, info);
14013}
14014
14015bfd_boolean
14016bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
14017{
a50b1753 14018 struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie;
c152c796
AM
14019
14020 if (rcookie->bad_symtab)
14021 rcookie->rel = rcookie->rels;
14022
14023 for (; rcookie->rel < rcookie->relend; rcookie->rel++)
14024 {
14025 unsigned long r_symndx;
14026
14027 if (! rcookie->bad_symtab)
14028 if (rcookie->rel->r_offset > offset)
14029 return FALSE;
14030 if (rcookie->rel->r_offset != offset)
14031 continue;
14032
14033 r_symndx = rcookie->rel->r_info >> rcookie->r_sym_shift;
2c2fa401 14034 if (r_symndx == STN_UNDEF)
c152c796
AM
14035 return TRUE;
14036
14037 if (r_symndx >= rcookie->locsymcount
14038 || ELF_ST_BIND (rcookie->locsyms[r_symndx].st_info) != STB_LOCAL)
14039 {
14040 struct elf_link_hash_entry *h;
14041
14042 h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];
14043
14044 while (h->root.type == bfd_link_hash_indirect
14045 || h->root.type == bfd_link_hash_warning)
14046 h = (struct elf_link_hash_entry *) h->root.u.i.link;
14047
14048 if ((h->root.type == bfd_link_hash_defined
14049 || h->root.type == bfd_link_hash_defweak)
5b69e357
AM
14050 && (h->root.u.def.section->owner != rcookie->abfd
14051 || h->root.u.def.section->kept_section != NULL
14052 || discarded_section (h->root.u.def.section)))
c152c796 14053 return TRUE;
c152c796
AM
14054 }
14055 else
14056 {
14057 /* It's not a relocation against a global symbol,
14058 but it could be a relocation against a local
14059 symbol for a discarded section. */
14060 asection *isec;
14061 Elf_Internal_Sym *isym;
14062
14063 /* Need to: get the symbol; get the section. */
14064 isym = &rcookie->locsyms[r_symndx];
cb33740c 14065 isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
5b69e357
AM
14066 if (isec != NULL
14067 && (isec->kept_section != NULL
14068 || discarded_section (isec)))
cb33740c 14069 return TRUE;
c152c796
AM
14070 }
14071 return FALSE;
14072 }
14073 return FALSE;
14074}
14075
14076/* Discard unneeded references to discarded sections.
75938853
AM
14077 Returns -1 on error, 1 if any section's size was changed, 0 if
14078 nothing changed. This function assumes that the relocations are in
14079 sorted order, which is true for all known assemblers. */
c152c796 14080
75938853 14081int
c152c796
AM
14082bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
14083{
14084 struct elf_reloc_cookie cookie;
18cd5bce 14085 asection *o;
c152c796 14086 bfd *abfd;
75938853 14087 int changed = 0;
c152c796
AM
14088
14089 if (info->traditional_format
14090 || !is_elf_hash_table (info->hash))
75938853 14091 return 0;
c152c796 14092
18cd5bce
AM
14093 o = bfd_get_section_by_name (output_bfd, ".stab");
14094 if (o != NULL)
c152c796 14095 {
18cd5bce 14096 asection *i;
c152c796 14097
18cd5bce 14098 for (i = o->map_head.s; i != NULL; i = i->map_head.s)
8da3dbc5 14099 {
18cd5bce
AM
14100 if (i->size == 0
14101 || i->reloc_count == 0
14102 || i->sec_info_type != SEC_INFO_TYPE_STABS)
14103 continue;
c152c796 14104
18cd5bce
AM
14105 abfd = i->owner;
14106 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14107 continue;
c152c796 14108
18cd5bce 14109 if (!init_reloc_cookie_for_section (&cookie, info, i))
75938853 14110 return -1;
c152c796 14111
18cd5bce
AM
14112 if (_bfd_discard_section_stabs (abfd, i,
14113 elf_section_data (i)->sec_info,
5241d853
RS
14114 bfd_elf_reloc_symbol_deleted_p,
14115 &cookie))
75938853 14116 changed = 1;
18cd5bce
AM
14117
14118 fini_reloc_cookie_for_section (&cookie, i);
c152c796 14119 }
18cd5bce
AM
14120 }
14121
2f0c68f2
CM
14122 o = NULL;
14123 if (info->eh_frame_hdr_type != COMPACT_EH_HDR)
14124 o = bfd_get_section_by_name (output_bfd, ".eh_frame");
18cd5bce
AM
14125 if (o != NULL)
14126 {
14127 asection *i;
d7153c4a 14128 int eh_changed = 0;
79a94a2a 14129 unsigned int eh_alignment;
c152c796 14130
18cd5bce 14131 for (i = o->map_head.s; i != NULL; i = i->map_head.s)
c152c796 14132 {
18cd5bce
AM
14133 if (i->size == 0)
14134 continue;
14135
14136 abfd = i->owner;
14137 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14138 continue;
14139
14140 if (!init_reloc_cookie_for_section (&cookie, info, i))
75938853 14141 return -1;
18cd5bce
AM
14142
14143 _bfd_elf_parse_eh_frame (abfd, info, i, &cookie);
14144 if (_bfd_elf_discard_section_eh_frame (abfd, info, i,
c152c796
AM
14145 bfd_elf_reloc_symbol_deleted_p,
14146 &cookie))
d7153c4a
AM
14147 {
14148 eh_changed = 1;
14149 if (i->size != i->rawsize)
14150 changed = 1;
14151 }
18cd5bce
AM
14152
14153 fini_reloc_cookie_for_section (&cookie, i);
c152c796 14154 }
9866ffe2 14155
79a94a2a 14156 eh_alignment = 1 << o->alignment_power;
9866ffe2
AM
14157 /* Skip over zero terminator, and prevent empty sections from
14158 adding alignment padding at the end. */
14159 for (i = o->map_tail.s; i != NULL; i = i->map_tail.s)
14160 if (i->size == 0)
14161 i->flags |= SEC_EXCLUDE;
14162 else if (i->size > 4)
14163 break;
14164 /* The last non-empty eh_frame section doesn't need padding. */
14165 if (i != NULL)
14166 i = i->map_tail.s;
14167 /* Any prior sections must pad the last FDE out to the output
14168 section alignment. Otherwise we might have zero padding
14169 between sections, which would be seen as a terminator. */
14170 for (; i != NULL; i = i->map_tail.s)
14171 if (i->size == 4)
14172 /* All but the last zero terminator should have been removed. */
14173 BFD_FAIL ();
14174 else
14175 {
14176 bfd_size_type size
14177 = (i->size + eh_alignment - 1) & -eh_alignment;
14178 if (i->size != size)
af471f82 14179 {
9866ffe2
AM
14180 i->size = size;
14181 changed = 1;
14182 eh_changed = 1;
af471f82 14183 }
9866ffe2 14184 }
d7153c4a
AM
14185 if (eh_changed)
14186 elf_link_hash_traverse (elf_hash_table (info),
14187 _bfd_elf_adjust_eh_frame_global_symbol, NULL);
18cd5bce 14188 }
c152c796 14189
18cd5bce
AM
14190 for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
14191 {
14192 const struct elf_backend_data *bed;
57963c05 14193 asection *s;
c152c796 14194
18cd5bce
AM
14195 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
14196 continue;
57963c05
AM
14197 s = abfd->sections;
14198 if (s == NULL || s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
14199 continue;
18cd5bce
AM
14200
14201 bed = get_elf_backend_data (abfd);
14202
14203 if (bed->elf_backend_discard_info != NULL)
14204 {
14205 if (!init_reloc_cookie (&cookie, info, abfd))
75938853 14206 return -1;
18cd5bce
AM
14207
14208 if ((*bed->elf_backend_discard_info) (abfd, &cookie, info))
75938853 14209 changed = 1;
18cd5bce
AM
14210
14211 fini_reloc_cookie (&cookie, abfd);
14212 }
c152c796
AM
14213 }
14214
2f0c68f2
CM
14215 if (info->eh_frame_hdr_type == COMPACT_EH_HDR)
14216 _bfd_elf_end_eh_frame_parsing (info);
14217
14218 if (info->eh_frame_hdr_type
0e1862bb 14219 && !bfd_link_relocatable (info)
c152c796 14220 && _bfd_elf_discard_section_eh_frame_hdr (output_bfd, info))
75938853 14221 changed = 1;
c152c796 14222
75938853 14223 return changed;
c152c796 14224}
082b7297 14225
43e1669b 14226bfd_boolean
0c511000 14227_bfd_elf_section_already_linked (bfd *abfd,
c77ec726 14228 asection *sec,
c0f00686 14229 struct bfd_link_info *info)
082b7297
L
14230{
14231 flagword flags;
c77ec726 14232 const char *name, *key;
082b7297
L
14233 struct bfd_section_already_linked *l;
14234 struct bfd_section_already_linked_hash_entry *already_linked_list;
0c511000 14235
c77ec726
AM
14236 if (sec->output_section == bfd_abs_section_ptr)
14237 return FALSE;
0c511000 14238
c77ec726 14239 flags = sec->flags;
0c511000 14240
c77ec726
AM
14241 /* Return if it isn't a linkonce section. A comdat group section
14242 also has SEC_LINK_ONCE set. */
14243 if ((flags & SEC_LINK_ONCE) == 0)
14244 return FALSE;
0c511000 14245
c77ec726
AM
14246 /* Don't put group member sections on our list of already linked
14247 sections. They are handled as a group via their group section. */
14248 if (elf_sec_group (sec) != NULL)
14249 return FALSE;
0c511000 14250
c77ec726
AM
14251 /* For a SHT_GROUP section, use the group signature as the key. */
14252 name = sec->name;
14253 if ((flags & SEC_GROUP) != 0
14254 && elf_next_in_group (sec) != NULL
14255 && elf_group_name (elf_next_in_group (sec)) != NULL)
14256 key = elf_group_name (elf_next_in_group (sec));
14257 else
14258 {
14259 /* Otherwise we should have a .gnu.linkonce.<type>.<key> section. */
0c511000 14260 if (CONST_STRNEQ (name, ".gnu.linkonce.")
c77ec726
AM
14261 && (key = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL)
14262 key++;
0c511000 14263 else
c77ec726
AM
14264 /* Must be a user linkonce section that doesn't follow gcc's
14265 naming convention. In this case we won't be matching
14266 single member groups. */
14267 key = name;
0c511000 14268 }
6d2cd210 14269
c77ec726 14270 already_linked_list = bfd_section_already_linked_table_lookup (key);
082b7297
L
14271
14272 for (l = already_linked_list->entry; l != NULL; l = l->next)
14273 {
c2370991 14274 /* We may have 2 different types of sections on the list: group
c77ec726
AM
14275 sections with a signature of <key> (<key> is some string),
14276 and linkonce sections named .gnu.linkonce.<type>.<key>.
14277 Match like sections. LTO plugin sections are an exception.
14278 They are always named .gnu.linkonce.t.<key> and match either
14279 type of section. */
14280 if (((flags & SEC_GROUP) == (l->sec->flags & SEC_GROUP)
14281 && ((flags & SEC_GROUP) != 0
14282 || strcmp (name, l->sec->name) == 0))
14283 || (l->sec->owner->flags & BFD_PLUGIN) != 0)
082b7297
L
14284 {
14285 /* The section has already been linked. See if we should
6d2cd210 14286 issue a warning. */
c77ec726
AM
14287 if (!_bfd_handle_already_linked (sec, l, info))
14288 return FALSE;
082b7297 14289
c77ec726 14290 if (flags & SEC_GROUP)
3d7f7666 14291 {
c77ec726
AM
14292 asection *first = elf_next_in_group (sec);
14293 asection *s = first;
3d7f7666 14294
c77ec726 14295 while (s != NULL)
3d7f7666 14296 {
c77ec726
AM
14297 s->output_section = bfd_abs_section_ptr;
14298 /* Record which group discards it. */
14299 s->kept_section = l->sec;
14300 s = elf_next_in_group (s);
14301 /* These lists are circular. */
14302 if (s == first)
14303 break;
3d7f7666
L
14304 }
14305 }
082b7297 14306
43e1669b 14307 return TRUE;
082b7297
L
14308 }
14309 }
14310
c77ec726
AM
14311 /* A single member comdat group section may be discarded by a
14312 linkonce section and vice versa. */
14313 if ((flags & SEC_GROUP) != 0)
3d7f7666 14314 {
c77ec726 14315 asection *first = elf_next_in_group (sec);
c2370991 14316
c77ec726
AM
14317 if (first != NULL && elf_next_in_group (first) == first)
14318 /* Check this single member group against linkonce sections. */
14319 for (l = already_linked_list->entry; l != NULL; l = l->next)
14320 if ((l->sec->flags & SEC_GROUP) == 0
14321 && bfd_elf_match_symbols_in_sections (l->sec, first, info))
14322 {
14323 first->output_section = bfd_abs_section_ptr;
14324 first->kept_section = l->sec;
14325 sec->output_section = bfd_abs_section_ptr;
14326 break;
14327 }
14328 }
14329 else
14330 /* Check this linkonce section against single member groups. */
14331 for (l = already_linked_list->entry; l != NULL; l = l->next)
14332 if (l->sec->flags & SEC_GROUP)
6d2cd210 14333 {
c77ec726 14334 asection *first = elf_next_in_group (l->sec);
6d2cd210 14335
c77ec726
AM
14336 if (first != NULL
14337 && elf_next_in_group (first) == first
14338 && bfd_elf_match_symbols_in_sections (first, sec, info))
14339 {
14340 sec->output_section = bfd_abs_section_ptr;
14341 sec->kept_section = first;
14342 break;
14343 }
6d2cd210 14344 }
0c511000 14345
c77ec726
AM
14346 /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F'
14347 referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4
14348 specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce'
14349 prefix) instead. `.gnu.linkonce.r.*' were the `.rodata' part of its
14350 matching `.gnu.linkonce.t.*'. If `.gnu.linkonce.r.F' is not discarded
14351 but its `.gnu.linkonce.t.F' is discarded means we chose one-only
14352 `.gnu.linkonce.t.F' section from a different bfd not requiring any
14353 `.gnu.linkonce.r.F'. Thus `.gnu.linkonce.r.F' should be discarded.
14354 The reverse order cannot happen as there is never a bfd with only the
14355 `.gnu.linkonce.r.F' section. The order of sections in a bfd does not
14356 matter as here were are looking only for cross-bfd sections. */
14357
14358 if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r."))
14359 for (l = already_linked_list->entry; l != NULL; l = l->next)
14360 if ((l->sec->flags & SEC_GROUP) == 0
14361 && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t."))
14362 {
14363 if (abfd != l->sec->owner)
14364 sec->output_section = bfd_abs_section_ptr;
14365 break;
14366 }
80c29487 14367
082b7297 14368 /* This is the first section with this name. Record it. */
c77ec726 14369 if (!bfd_section_already_linked_table_insert (already_linked_list, sec))
bb6198d2 14370 info->callbacks->einfo (_("%F%P: already_linked_table: %E\n"));
c77ec726 14371 return sec->output_section == bfd_abs_section_ptr;
082b7297 14372}
81e1b023 14373
a4d8e49b
L
14374bfd_boolean
14375_bfd_elf_common_definition (Elf_Internal_Sym *sym)
14376{
14377 return sym->st_shndx == SHN_COMMON;
14378}
14379
14380unsigned int
14381_bfd_elf_common_section_index (asection *sec ATTRIBUTE_UNUSED)
14382{
14383 return SHN_COMMON;
14384}
14385
14386asection *
14387_bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED)
14388{
14389 return bfd_com_section_ptr;
14390}
10455f89
HPN
14391
14392bfd_vma
14393_bfd_elf_default_got_elt_size (bfd *abfd,
14394 struct bfd_link_info *info ATTRIBUTE_UNUSED,
14395 struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
14396 bfd *ibfd ATTRIBUTE_UNUSED,
14397 unsigned long symndx ATTRIBUTE_UNUSED)
14398{
14399 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14400 return bed->s->arch_size / 8;
14401}
83bac4b0
NC
14402
14403/* Routines to support the creation of dynamic relocs. */
14404
83bac4b0
NC
14405/* Returns the name of the dynamic reloc section associated with SEC. */
14406
14407static const char *
14408get_dynamic_reloc_section_name (bfd * abfd,
14409 asection * sec,
14410 bfd_boolean is_rela)
14411{
ddcf1fcf
BS
14412 char *name;
14413 const char *old_name = bfd_get_section_name (NULL, sec);
14414 const char *prefix = is_rela ? ".rela" : ".rel";
83bac4b0 14415
ddcf1fcf 14416 if (old_name == NULL)
83bac4b0
NC
14417 return NULL;
14418
ddcf1fcf 14419 name = bfd_alloc (abfd, strlen (prefix) + strlen (old_name) + 1);
68ffbac6 14420 sprintf (name, "%s%s", prefix, old_name);
83bac4b0
NC
14421
14422 return name;
14423}
14424
14425/* Returns the dynamic reloc section associated with SEC.
14426 If necessary compute the name of the dynamic reloc section based
14427 on SEC's name (looked up in ABFD's string table) and the setting
14428 of IS_RELA. */
14429
14430asection *
14431_bfd_elf_get_dynamic_reloc_section (bfd * abfd,
14432 asection * sec,
14433 bfd_boolean is_rela)
14434{
14435 asection * reloc_sec = elf_section_data (sec)->sreloc;
14436
14437 if (reloc_sec == NULL)
14438 {
14439 const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14440
14441 if (name != NULL)
14442 {
3d4d4302 14443 reloc_sec = bfd_get_linker_section (abfd, name);
83bac4b0
NC
14444
14445 if (reloc_sec != NULL)
14446 elf_section_data (sec)->sreloc = reloc_sec;
14447 }
14448 }
14449
14450 return reloc_sec;
14451}
14452
14453/* Returns the dynamic reloc section associated with SEC. If the
14454 section does not exist it is created and attached to the DYNOBJ
14455 bfd and stored in the SRELOC field of SEC's elf_section_data
14456 structure.
f8076f98 14457
83bac4b0
NC
14458 ALIGNMENT is the alignment for the newly created section and
14459 IS_RELA defines whether the name should be .rela.<SEC's name>
14460 or .rel.<SEC's name>. The section name is looked up in the
14461 string table associated with ABFD. */
14462
14463asection *
ca4be51c
AM
14464_bfd_elf_make_dynamic_reloc_section (asection *sec,
14465 bfd *dynobj,
14466 unsigned int alignment,
14467 bfd *abfd,
14468 bfd_boolean is_rela)
83bac4b0
NC
14469{
14470 asection * reloc_sec = elf_section_data (sec)->sreloc;
14471
14472 if (reloc_sec == NULL)
14473 {
14474 const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela);
14475
14476 if (name == NULL)
14477 return NULL;
14478
3d4d4302 14479 reloc_sec = bfd_get_linker_section (dynobj, name);
83bac4b0
NC
14480
14481 if (reloc_sec == NULL)
14482 {
3d4d4302
AM
14483 flagword flags = (SEC_HAS_CONTENTS | SEC_READONLY
14484 | SEC_IN_MEMORY | SEC_LINKER_CREATED);
83bac4b0
NC
14485 if ((sec->flags & SEC_ALLOC) != 0)
14486 flags |= SEC_ALLOC | SEC_LOAD;
14487
3d4d4302 14488 reloc_sec = bfd_make_section_anyway_with_flags (dynobj, name, flags);
83bac4b0
NC
14489 if (reloc_sec != NULL)
14490 {
8877b5e5
AM
14491 /* _bfd_elf_get_sec_type_attr chooses a section type by
14492 name. Override as it may be wrong, eg. for a user
14493 section named "auto" we'll get ".relauto" which is
14494 seen to be a .rela section. */
14495 elf_section_type (reloc_sec) = is_rela ? SHT_RELA : SHT_REL;
83bac4b0
NC
14496 if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment))
14497 reloc_sec = NULL;
14498 }
14499 }
14500
14501 elf_section_data (sec)->sreloc = reloc_sec;
14502 }
14503
14504 return reloc_sec;
14505}
1338dd10 14506
bffebb6b
AM
14507/* Copy the ELF symbol type and other attributes for a linker script
14508 assignment from HSRC to HDEST. Generally this should be treated as
14509 if we found a strong non-dynamic definition for HDEST (except that
14510 ld ignores multiple definition errors). */
1338dd10 14511void
bffebb6b
AM
14512_bfd_elf_copy_link_hash_symbol_type (bfd *abfd,
14513 struct bfd_link_hash_entry *hdest,
14514 struct bfd_link_hash_entry *hsrc)
1338dd10 14515{
bffebb6b
AM
14516 struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *) hdest;
14517 struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *) hsrc;
14518 Elf_Internal_Sym isym;
1338dd10
PB
14519
14520 ehdest->type = ehsrc->type;
35fc36a8 14521 ehdest->target_internal = ehsrc->target_internal;
bffebb6b
AM
14522
14523 isym.st_other = ehsrc->other;
b8417128 14524 elf_merge_st_other (abfd, ehdest, &isym, NULL, TRUE, FALSE);
1338dd10 14525}
351f65ca
L
14526
14527/* Append a RELA relocation REL to section S in BFD. */
14528
14529void
14530elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14531{
14532 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14533 bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
14534 BFD_ASSERT (loc + bed->s->sizeof_rela <= s->contents + s->size);
14535 bed->s->swap_reloca_out (abfd, rel, loc);
14536}
14537
14538/* Append a REL relocation REL to section S in BFD. */
14539
14540void
14541elf_append_rel (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
14542{
14543 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14544 bfd_byte *loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rel);
14545 BFD_ASSERT (loc + bed->s->sizeof_rel <= s->contents + s->size);
59d6ffb2 14546 bed->s->swap_reloc_out (abfd, rel, loc);
351f65ca 14547}
7dba9362
AM
14548
14549/* Define __start, __stop, .startof. or .sizeof. symbol. */
14550
14551struct bfd_link_hash_entry *
14552bfd_elf_define_start_stop (struct bfd_link_info *info,
14553 const char *symbol, asection *sec)
14554{
487b6440 14555 struct elf_link_hash_entry *h;
7dba9362 14556
487b6440
AM
14557 h = elf_link_hash_lookup (elf_hash_table (info), symbol,
14558 FALSE, FALSE, TRUE);
14559 if (h != NULL
14560 && (h->root.type == bfd_link_hash_undefined
14561 || h->root.type == bfd_link_hash_undefweak
bf3077a6 14562 || ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
7dba9362 14563 {
bf3077a6 14564 bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic;
487b6440
AM
14565 h->root.type = bfd_link_hash_defined;
14566 h->root.u.def.section = sec;
14567 h->root.u.def.value = 0;
14568 h->def_regular = 1;
14569 h->def_dynamic = 0;
14570 h->start_stop = 1;
14571 h->u2.start_stop_section = sec;
14572 if (symbol[0] == '.')
14573 {
14574 /* .startof. and .sizeof. symbols are local. */
559192d8
AM
14575 const struct elf_backend_data *bed;
14576 bed = get_elf_backend_data (info->output_bfd);
14577 (*bed->elf_backend_hide_symbol) (info, h, TRUE);
487b6440 14578 }
36b8fda5
AM
14579 else
14580 {
14581 if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
14582 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_PROTECTED;
bf3077a6 14583 if (was_dynamic)
36b8fda5
AM
14584 bfd_elf_link_record_dynamic_symbol (info, h);
14585 }
487b6440 14586 return &h->root;
7dba9362 14587 }
487b6440 14588 return NULL;
7dba9362 14589}