Check return status of memory alloc functions
[deliverable/binutils-gdb.git] / bfd / elf.c
CommitLineData
252b5132 1/* ELF executable support for BFD.
340b6d91 2
b3adc24a 3 Copyright (C) 1993-2020 Free Software Foundation, Inc.
252b5132 4
5e8d7549 5 This file is part of BFD, the Binary File Descriptor library.
252b5132 6
5e8d7549
NC
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
cd123cb7 9 the Free Software Foundation; either version 3 of the License, or
5e8d7549 10 (at your option) any later version.
252b5132 11
5e8d7549
NC
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
252b5132 16
5e8d7549 17 You should have received a copy of the GNU General Public License
b34976b6 18 along with this program; if not, write to the Free Software
cd123cb7
NC
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
21
252b5132 22
1b74d094
BW
23/*
24SECTION
252b5132
RH
25 ELF backends
26
27 BFD support for ELF formats is being worked on.
28 Currently, the best supported back ends are for sparc and i386
29 (running svr4 or Solaris 2).
30
31 Documentation of the internals of the support code still needs
32 to be written. The code is changing quickly enough that we
661a3fd4 33 haven't bothered yet. */
252b5132 34
7ee38065
MS
35/* For sparc64-cross-sparc32. */
36#define _SYSCALL32
252b5132 37#include "sysdep.h"
3a551c7a 38#include <limits.h>
3db64b00 39#include "bfd.h"
252b5132
RH
40#include "bfdlink.h"
41#include "libbfd.h"
42#define ARCH_SIZE 0
43#include "elf-bfd.h"
e0e8c97f 44#include "libiberty.h"
ff59fc36 45#include "safe-ctype.h"
de64ce13 46#include "elf-linux-core.h"
252b5132 47
8bc7f138
L
48#ifdef CORE_HEADER
49#include CORE_HEADER
50#endif
51
217aa764 52static int elf_sort_sections (const void *, const void *);
c84fca4d 53static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
ef10c3ac 54static bfd_boolean swap_out_syms (bfd *, struct elf_strtab_hash **, int) ;
718175fa 55static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
276da9b3 56 file_ptr offset, size_t align);
50b2bdb7 57
252b5132
RH
58/* Swap version information in and out. The version information is
59 currently size independent. If that ever changes, this code will
60 need to move into elfcode.h. */
61
62/* Swap in a Verdef structure. */
63
64void
217aa764
AM
65_bfd_elf_swap_verdef_in (bfd *abfd,
66 const Elf_External_Verdef *src,
67 Elf_Internal_Verdef *dst)
252b5132 68{
dc810e39
AM
69 dst->vd_version = H_GET_16 (abfd, src->vd_version);
70 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
71 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
72 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
73 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
74 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
75 dst->vd_next = H_GET_32 (abfd, src->vd_next);
252b5132
RH
76}
77
78/* Swap out a Verdef structure. */
79
80void
217aa764
AM
81_bfd_elf_swap_verdef_out (bfd *abfd,
82 const Elf_Internal_Verdef *src,
83 Elf_External_Verdef *dst)
252b5132 84{
dc810e39
AM
85 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
86 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
87 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
88 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
89 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
90 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
91 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
252b5132
RH
92}
93
94/* Swap in a Verdaux structure. */
95
96void
217aa764
AM
97_bfd_elf_swap_verdaux_in (bfd *abfd,
98 const Elf_External_Verdaux *src,
99 Elf_Internal_Verdaux *dst)
252b5132 100{
dc810e39
AM
101 dst->vda_name = H_GET_32 (abfd, src->vda_name);
102 dst->vda_next = H_GET_32 (abfd, src->vda_next);
252b5132
RH
103}
104
105/* Swap out a Verdaux structure. */
106
107void
217aa764
AM
108_bfd_elf_swap_verdaux_out (bfd *abfd,
109 const Elf_Internal_Verdaux *src,
110 Elf_External_Verdaux *dst)
252b5132 111{
dc810e39
AM
112 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
113 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
252b5132
RH
114}
115
116/* Swap in a Verneed structure. */
117
118void
217aa764
AM
119_bfd_elf_swap_verneed_in (bfd *abfd,
120 const Elf_External_Verneed *src,
121 Elf_Internal_Verneed *dst)
252b5132 122{
dc810e39
AM
123 dst->vn_version = H_GET_16 (abfd, src->vn_version);
124 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
125 dst->vn_file = H_GET_32 (abfd, src->vn_file);
126 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
127 dst->vn_next = H_GET_32 (abfd, src->vn_next);
252b5132
RH
128}
129
130/* Swap out a Verneed structure. */
131
132void
217aa764
AM
133_bfd_elf_swap_verneed_out (bfd *abfd,
134 const Elf_Internal_Verneed *src,
135 Elf_External_Verneed *dst)
252b5132 136{
dc810e39
AM
137 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
138 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
139 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
140 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
141 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
252b5132
RH
142}
143
144/* Swap in a Vernaux structure. */
145
146void
217aa764
AM
147_bfd_elf_swap_vernaux_in (bfd *abfd,
148 const Elf_External_Vernaux *src,
149 Elf_Internal_Vernaux *dst)
252b5132 150{
dc810e39
AM
151 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
152 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
153 dst->vna_other = H_GET_16 (abfd, src->vna_other);
154 dst->vna_name = H_GET_32 (abfd, src->vna_name);
155 dst->vna_next = H_GET_32 (abfd, src->vna_next);
252b5132
RH
156}
157
158/* Swap out a Vernaux structure. */
159
160void
217aa764
AM
161_bfd_elf_swap_vernaux_out (bfd *abfd,
162 const Elf_Internal_Vernaux *src,
163 Elf_External_Vernaux *dst)
252b5132 164{
dc810e39
AM
165 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
166 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
167 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
168 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
169 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
252b5132
RH
170}
171
172/* Swap in a Versym structure. */
173
174void
217aa764
AM
175_bfd_elf_swap_versym_in (bfd *abfd,
176 const Elf_External_Versym *src,
177 Elf_Internal_Versym *dst)
252b5132 178{
dc810e39 179 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
252b5132
RH
180}
181
182/* Swap out a Versym structure. */
183
184void
217aa764
AM
185_bfd_elf_swap_versym_out (bfd *abfd,
186 const Elf_Internal_Versym *src,
187 Elf_External_Versym *dst)
252b5132 188{
dc810e39 189 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
252b5132
RH
190}
191
192/* Standard ELF hash function. Do not change this function; you will
193 cause invalid hash tables to be generated. */
3a99b017 194
252b5132 195unsigned long
217aa764 196bfd_elf_hash (const char *namearg)
252b5132 197{
3a99b017 198 const unsigned char *name = (const unsigned char *) namearg;
252b5132
RH
199 unsigned long h = 0;
200 unsigned long g;
201 int ch;
202
203 while ((ch = *name++) != '\0')
204 {
205 h = (h << 4) + ch;
206 if ((g = (h & 0xf0000000)) != 0)
207 {
208 h ^= g >> 24;
209 /* The ELF ABI says `h &= ~g', but this is equivalent in
210 this case and on some machines one insn instead of two. */
211 h ^= g;
212 }
213 }
32dfa85d 214 return h & 0xffffffff;
252b5132
RH
215}
216
fdc90cb4
JJ
217/* DT_GNU_HASH hash function. Do not change this function; you will
218 cause invalid hash tables to be generated. */
219
220unsigned long
221bfd_elf_gnu_hash (const char *namearg)
222{
223 const unsigned char *name = (const unsigned char *) namearg;
224 unsigned long h = 5381;
225 unsigned char ch;
226
227 while ((ch = *name++) != '\0')
228 h = (h << 5) + h + ch;
229 return h & 0xffffffff;
230}
231
0c8d6e5c
AM
232/* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
233 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
b34976b6 234bfd_boolean
0c8d6e5c 235bfd_elf_allocate_object (bfd *abfd,
0ffa91dd 236 size_t object_size,
4dfe6ac6 237 enum elf_target_id object_id)
252b5132 238{
0ffa91dd
NC
239 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
240 abfd->tdata.any = bfd_zalloc (abfd, object_size);
241 if (abfd->tdata.any == NULL)
242 return FALSE;
252b5132 243
0ffa91dd 244 elf_object_id (abfd) = object_id;
c0355132
AM
245 if (abfd->direction != read_direction)
246 {
247 struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
248 if (o == NULL)
249 return FALSE;
250 elf_tdata (abfd)->o = o;
251 elf_program_header_size (abfd) = (bfd_size_type) -1;
252 }
b34976b6 253 return TRUE;
252b5132
RH
254}
255
0ffa91dd
NC
256
257bfd_boolean
ae95ffa6 258bfd_elf_make_object (bfd *abfd)
0ffa91dd 259{
ae95ffa6 260 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
0ffa91dd 261 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
ae95ffa6 262 bed->target_id);
0ffa91dd
NC
263}
264
b34976b6 265bfd_boolean
217aa764 266bfd_elf_mkcorefile (bfd *abfd)
252b5132 267{
c044fabd 268 /* I think this can be done just like an object file. */
228e534f
AM
269 if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
270 return FALSE;
271 elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
272 return elf_tdata (abfd)->core != NULL;
252b5132
RH
273}
274
6d5944fc 275char *
217aa764 276bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
252b5132
RH
277{
278 Elf_Internal_Shdr **i_shdrp;
f075ee0c 279 bfd_byte *shstrtab = NULL;
dc810e39
AM
280 file_ptr offset;
281 bfd_size_type shstrtabsize;
252b5132
RH
282
283 i_shdrp = elf_elfsections (abfd);
74f2e02b
AM
284 if (i_shdrp == 0
285 || shindex >= elf_numsections (abfd)
286 || i_shdrp[shindex] == 0)
f075ee0c 287 return NULL;
252b5132 288
f075ee0c 289 shstrtab = i_shdrp[shindex]->contents;
252b5132
RH
290 if (shstrtab == NULL)
291 {
c044fabd 292 /* No cached one, attempt to read, and cache what we read. */
252b5132
RH
293 offset = i_shdrp[shindex]->sh_offset;
294 shstrtabsize = i_shdrp[shindex]->sh_size;
c6c60d09
JJ
295
296 /* Allocate and clear an extra byte at the end, to prevent crashes
297 in case the string table is not terminated. */
3471d59d 298 if (shstrtabsize + 1 <= 1
95a6d235 299 || shstrtabsize > bfd_get_file_size (abfd)
06614111
NC
300 || bfd_seek (abfd, offset, SEEK_SET) != 0
301 || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL)
c6c60d09
JJ
302 shstrtab = NULL;
303 else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize)
304 {
305 if (bfd_get_error () != bfd_error_system_call)
306 bfd_set_error (bfd_error_file_truncated);
06614111 307 bfd_release (abfd, shstrtab);
c6c60d09 308 shstrtab = NULL;
3471d59d
CC
309 /* Once we've failed to read it, make sure we don't keep
310 trying. Otherwise, we'll keep allocating space for
311 the string table over and over. */
312 i_shdrp[shindex]->sh_size = 0;
c6c60d09
JJ
313 }
314 else
315 shstrtab[shstrtabsize] = '\0';
217aa764 316 i_shdrp[shindex]->contents = shstrtab;
252b5132 317 }
f075ee0c 318 return (char *) shstrtab;
252b5132
RH
319}
320
321char *
217aa764
AM
322bfd_elf_string_from_elf_section (bfd *abfd,
323 unsigned int shindex,
324 unsigned int strindex)
252b5132
RH
325{
326 Elf_Internal_Shdr *hdr;
327
328 if (strindex == 0)
329 return "";
330
74f2e02b
AM
331 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
332 return NULL;
333
252b5132
RH
334 hdr = elf_elfsections (abfd)[shindex];
335
06614111
NC
336 if (hdr->contents == NULL)
337 {
338 if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
339 {
340 /* PR 17512: file: f057ec89. */
695344c0 341 /* xgettext:c-format */
871b3ab2 342 _bfd_error_handler (_("%pB: attempt to load strings from"
63a5468a 343 " a non-string section (number %d)"),
06614111
NC
344 abfd, shindex);
345 return NULL;
346 }
b1fa9dd6 347
06614111
NC
348 if (bfd_elf_get_str_section (abfd, shindex) == NULL)
349 return NULL;
350 }
eed5def8
NC
351 else
352 {
353 /* PR 24273: The string section's contents may have already
354 been loaded elsewhere, eg because a corrupt file has the
355 string section index in the ELF header pointing at a group
356 section. So be paranoid, and test that the last byte of
357 the section is zero. */
358 if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
359 return NULL;
360 }
252b5132
RH
361
362 if (strindex >= hdr->sh_size)
363 {
1b3a8575 364 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
4eca0228 365 _bfd_error_handler
695344c0 366 /* xgettext:c-format */
2dcf00ce
AM
367 (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
368 abfd, strindex, (uint64_t) hdr->sh_size,
1b3a8575 369 (shindex == shstrndx && strindex == hdr->sh_name
252b5132 370 ? ".shstrtab"
1b3a8575 371 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
45b222d6 372 return NULL;
252b5132
RH
373 }
374
375 return ((char *) hdr->contents) + strindex;
376}
377
6cdc0ccc
AM
378/* Read and convert symbols to internal format.
379 SYMCOUNT specifies the number of symbols to read, starting from
380 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
381 are non-NULL, they are used to store the internal symbols, external
b7c368d0
NC
382 symbols, and symbol section index extensions, respectively.
383 Returns a pointer to the internal symbol buffer (malloced if necessary)
384 or NULL if there were no symbols or some kind of problem. */
6cdc0ccc
AM
385
386Elf_Internal_Sym *
217aa764
AM
387bfd_elf_get_elf_syms (bfd *ibfd,
388 Elf_Internal_Shdr *symtab_hdr,
389 size_t symcount,
390 size_t symoffset,
391 Elf_Internal_Sym *intsym_buf,
392 void *extsym_buf,
393 Elf_External_Sym_Shndx *extshndx_buf)
6cdc0ccc
AM
394{
395 Elf_Internal_Shdr *shndx_hdr;
217aa764 396 void *alloc_ext;
df622259 397 const bfd_byte *esym;
6cdc0ccc
AM
398 Elf_External_Sym_Shndx *alloc_extshndx;
399 Elf_External_Sym_Shndx *shndx;
4dd07732 400 Elf_Internal_Sym *alloc_intsym;
6cdc0ccc
AM
401 Elf_Internal_Sym *isym;
402 Elf_Internal_Sym *isymend;
9c5bfbb7 403 const struct elf_backend_data *bed;
6cdc0ccc
AM
404 size_t extsym_size;
405 bfd_size_type amt;
406 file_ptr pos;
407
e44a2c9c
AM
408 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
409 abort ();
410
6cdc0ccc
AM
411 if (symcount == 0)
412 return intsym_buf;
413
414 /* Normal syms might have section extension entries. */
415 shndx_hdr = NULL;
6a40cf0c
NC
416 if (elf_symtab_shndx_list (ibfd) != NULL)
417 {
418 elf_section_list * entry;
419 Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
420
421 /* Find an index section that is linked to this symtab section. */
422 for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
315350be
NC
423 {
424 /* PR 20063. */
425 if (entry->hdr.sh_link >= elf_numsections (ibfd))
426 continue;
427
428 if (sections[entry->hdr.sh_link] == symtab_hdr)
429 {
430 shndx_hdr = & entry->hdr;
431 break;
432 };
433 }
6a40cf0c
NC
434
435 if (shndx_hdr == NULL)
436 {
437 if (symtab_hdr == & elf_symtab_hdr (ibfd))
438 /* Not really accurate, but this was how the old code used to work. */
439 shndx_hdr = & elf_symtab_shndx_list (ibfd)->hdr;
440 /* Otherwise we do nothing. The assumption is that
441 the index table will not be needed. */
442 }
443 }
6cdc0ccc
AM
444
445 /* Read the symbols. */
446 alloc_ext = NULL;
447 alloc_extshndx = NULL;
4dd07732 448 alloc_intsym = NULL;
6cdc0ccc
AM
449 bed = get_elf_backend_data (ibfd);
450 extsym_size = bed->s->sizeof_sym;
ef53be89 451 amt = (bfd_size_type) symcount * extsym_size;
6cdc0ccc
AM
452 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
453 if (extsym_buf == NULL)
454 {
d0fb9a8d 455 alloc_ext = bfd_malloc2 (symcount, extsym_size);
6cdc0ccc
AM
456 extsym_buf = alloc_ext;
457 }
458 if (extsym_buf == NULL
459 || bfd_seek (ibfd, pos, SEEK_SET) != 0
460 || bfd_bread (extsym_buf, amt, ibfd) != amt)
461 {
462 intsym_buf = NULL;
463 goto out;
464 }
465
466 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
467 extshndx_buf = NULL;
468 else
469 {
ef53be89 470 amt = (bfd_size_type) symcount * sizeof (Elf_External_Sym_Shndx);
6cdc0ccc
AM
471 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
472 if (extshndx_buf == NULL)
473 {
a50b1753 474 alloc_extshndx = (Elf_External_Sym_Shndx *)
07d6d2b8 475 bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx));
6cdc0ccc
AM
476 extshndx_buf = alloc_extshndx;
477 }
478 if (extshndx_buf == NULL
479 || bfd_seek (ibfd, pos, SEEK_SET) != 0
480 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
481 {
482 intsym_buf = NULL;
483 goto out;
484 }
485 }
486
487 if (intsym_buf == NULL)
488 {
a50b1753 489 alloc_intsym = (Elf_Internal_Sym *)
07d6d2b8 490 bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym));
4dd07732 491 intsym_buf = alloc_intsym;
6cdc0ccc
AM
492 if (intsym_buf == NULL)
493 goto out;
494 }
495
496 /* Convert the symbols to internal form. */
497 isymend = intsym_buf + symcount;
a50b1753 498 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
07d6d2b8 499 shndx = extshndx_buf;
6cdc0ccc
AM
500 isym < isymend;
501 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
8384fb8f
AM
502 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
503 {
504 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
695344c0 505 /* xgettext:c-format */
871b3ab2 506 _bfd_error_handler (_("%pB symbol number %lu references"
63a5468a 507 " nonexistent SHT_SYMTAB_SHNDX section"),
4eca0228 508 ibfd, (unsigned long) symoffset);
4dd07732
AM
509 if (alloc_intsym != NULL)
510 free (alloc_intsym);
8384fb8f
AM
511 intsym_buf = NULL;
512 goto out;
513 }
6cdc0ccc
AM
514
515 out:
516 if (alloc_ext != NULL)
517 free (alloc_ext);
518 if (alloc_extshndx != NULL)
519 free (alloc_extshndx);
520
521 return intsym_buf;
522}
523
5cab59f6
AM
524/* Look up a symbol name. */
525const char *
be8dd2ca
AM
526bfd_elf_sym_name (bfd *abfd,
527 Elf_Internal_Shdr *symtab_hdr,
26c61ae5
L
528 Elf_Internal_Sym *isym,
529 asection *sym_sec)
5cab59f6 530{
26c61ae5 531 const char *name;
5cab59f6 532 unsigned int iname = isym->st_name;
be8dd2ca 533 unsigned int shindex = symtab_hdr->sh_link;
26c61ae5 534
138f35cc
JJ
535 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
536 /* Check for a bogus st_shndx to avoid crashing. */
4fbb74a6 537 && isym->st_shndx < elf_numsections (abfd))
5cab59f6
AM
538 {
539 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
540 shindex = elf_elfheader (abfd)->e_shstrndx;
541 }
542
26c61ae5
L
543 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
544 if (name == NULL)
545 name = "(null)";
546 else if (sym_sec && *name == '\0')
fd361982 547 name = bfd_section_name (sym_sec);
26c61ae5
L
548
549 return name;
5cab59f6
AM
550}
551
dbb410c3
AM
552/* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
553 sections. The first element is the flags, the rest are section
554 pointers. */
555
556typedef union elf_internal_group {
557 Elf_Internal_Shdr *shdr;
558 unsigned int flags;
559} Elf_Internal_Group;
560
b885599b
AM
561/* Return the name of the group signature symbol. Why isn't the
562 signature just a string? */
563
564static const char *
217aa764 565group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
b885599b 566{
9dce4196 567 Elf_Internal_Shdr *hdr;
9dce4196
AM
568 unsigned char esym[sizeof (Elf64_External_Sym)];
569 Elf_External_Sym_Shndx eshndx;
570 Elf_Internal_Sym isym;
b885599b 571
13792e9d
L
572 /* First we need to ensure the symbol table is available. Make sure
573 that it is a symbol table section. */
4fbb74a6
AM
574 if (ghdr->sh_link >= elf_numsections (abfd))
575 return NULL;
13792e9d
L
576 hdr = elf_elfsections (abfd) [ghdr->sh_link];
577 if (hdr->sh_type != SHT_SYMTAB
578 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
b885599b
AM
579 return NULL;
580
9dce4196
AM
581 /* Go read the symbol. */
582 hdr = &elf_tdata (abfd)->symtab_hdr;
6cdc0ccc
AM
583 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
584 &isym, esym, &eshndx) == NULL)
b885599b 585 return NULL;
9dce4196 586
26c61ae5 587 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
b885599b
AM
588}
589
dbb410c3
AM
590/* Set next_in_group list pointer, and group name for NEWSECT. */
591
b34976b6 592static bfd_boolean
217aa764 593setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
dbb410c3
AM
594{
595 unsigned int num_group = elf_tdata (abfd)->num_group;
596
597 /* If num_group is zero, read in all SHT_GROUP sections. The count
598 is set to -1 if there are no SHT_GROUP sections. */
599 if (num_group == 0)
600 {
601 unsigned int i, shnum;
602
603 /* First count the number of groups. If we have a SHT_GROUP
604 section with just a flag word (ie. sh_size is 4), ignore it. */
9ad5cbcf 605 shnum = elf_numsections (abfd);
dbb410c3 606 num_group = 0;
08a40648 607
44534af3 608#define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize) \
1783205a 609 ( (shdr)->sh_type == SHT_GROUP \
44534af3 610 && (shdr)->sh_size >= minsize \
1783205a
NC
611 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
612 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
08a40648 613
dbb410c3
AM
614 for (i = 0; i < shnum; i++)
615 {
616 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
1783205a 617
44534af3 618 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
dbb410c3
AM
619 num_group += 1;
620 }
621
622 if (num_group == 0)
20dbb49d
L
623 {
624 num_group = (unsigned) -1;
625 elf_tdata (abfd)->num_group = num_group;
ce497010 626 elf_tdata (abfd)->group_sect_ptr = NULL;
20dbb49d
L
627 }
628 else
dbb410c3
AM
629 {
630 /* We keep a list of elf section headers for group sections,
631 so we can find them quickly. */
20dbb49d 632 bfd_size_type amt;
d0fb9a8d 633
20dbb49d 634 elf_tdata (abfd)->num_group = num_group;
a50b1753 635 elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **)
07d6d2b8 636 bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *));
dbb410c3 637 if (elf_tdata (abfd)->group_sect_ptr == NULL)
b34976b6 638 return FALSE;
4bba0fb1
AM
639 memset (elf_tdata (abfd)->group_sect_ptr, 0,
640 num_group * sizeof (Elf_Internal_Shdr *));
dbb410c3 641 num_group = 0;
ce497010 642
dbb410c3
AM
643 for (i = 0; i < shnum; i++)
644 {
645 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
1783205a 646
44534af3 647 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
dbb410c3 648 {
973ffd63 649 unsigned char *src;
dbb410c3
AM
650 Elf_Internal_Group *dest;
651
07d6d2b8
AM
652 /* Make sure the group section has a BFD section
653 attached to it. */
654 if (!bfd_section_from_shdr (abfd, i))
655 return FALSE;
656
dbb410c3
AM
657 /* Add to list of sections. */
658 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
659 num_group += 1;
660
661 /* Read the raw contents. */
662 BFD_ASSERT (sizeof (*dest) >= 4);
663 amt = shdr->sh_size * sizeof (*dest) / 4;
a50b1753 664 shdr->contents = (unsigned char *)
eed5def8 665 bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4);
1783205a
NC
666 /* PR binutils/4110: Handle corrupt group headers. */
667 if (shdr->contents == NULL)
668 {
669 _bfd_error_handler
695344c0 670 /* xgettext:c-format */
871b3ab2 671 (_("%pB: corrupt size field in group section"
2dcf00ce
AM
672 " header: %#" PRIx64),
673 abfd, (uint64_t) shdr->sh_size);
1783205a 674 bfd_set_error (bfd_error_bad_value);
493a3386
NC
675 -- num_group;
676 continue;
1783205a
NC
677 }
678
1783205a 679 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
dbb410c3
AM
680 || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
681 != shdr->sh_size))
493a3386
NC
682 {
683 _bfd_error_handler
695344c0 684 /* xgettext:c-format */
871b3ab2 685 (_("%pB: invalid size field in group section"
2dcf00ce
AM
686 " header: %#" PRIx64 ""),
687 abfd, (uint64_t) shdr->sh_size);
493a3386
NC
688 bfd_set_error (bfd_error_bad_value);
689 -- num_group;
63a5468a
AM
690 /* PR 17510: If the group contents are even
691 partially corrupt, do not allow any of the
692 contents to be used. */
327301a4
AM
693 bfd_release (abfd, shdr->contents);
694 shdr->contents = NULL;
493a3386
NC
695 continue;
696 }
708d7d0d 697
dbb410c3
AM
698 /* Translate raw contents, a flag word followed by an
699 array of elf section indices all in target byte order,
700 to the flag word followed by an array of elf section
701 pointers. */
702 src = shdr->contents + shdr->sh_size;
703 dest = (Elf_Internal_Group *) (shdr->contents + amt);
06614111 704
dbb410c3
AM
705 while (1)
706 {
707 unsigned int idx;
708
709 src -= 4;
710 --dest;
711 idx = H_GET_32 (abfd, src);
712 if (src == shdr->contents)
713 {
327301a4 714 dest->shdr = NULL;
dbb410c3 715 dest->flags = idx;
b885599b
AM
716 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
717 shdr->bfd_section->flags
718 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
dbb410c3
AM
719 break;
720 }
4bba0fb1 721 if (idx < shnum)
bae363f1
L
722 {
723 dest->shdr = elf_elfsections (abfd)[idx];
724 /* PR binutils/23199: All sections in a
725 section group should be marked with
726 SHF_GROUP. But some tools generate
727 broken objects without SHF_GROUP. Fix
728 them up here. */
729 dest->shdr->sh_flags |= SHF_GROUP;
730 }
4bba0fb1
AM
731 if (idx >= shnum
732 || dest->shdr->sh_type == SHT_GROUP)
dbb410c3 733 {
4eca0228 734 _bfd_error_handler
4bba0fb1
AM
735 (_("%pB: invalid entry in SHT_GROUP section [%u]"),
736 abfd, i);
737 dest->shdr = NULL;
dbb410c3 738 }
dbb410c3
AM
739 }
740 }
741 }
493a3386
NC
742
743 /* PR 17510: Corrupt binaries might contain invalid groups. */
744 if (num_group != (unsigned) elf_tdata (abfd)->num_group)
745 {
746 elf_tdata (abfd)->num_group = num_group;
747
748 /* If all groups are invalid then fail. */
749 if (num_group == 0)
750 {
751 elf_tdata (abfd)->group_sect_ptr = NULL;
752 elf_tdata (abfd)->num_group = num_group = -1;
4eca0228 753 _bfd_error_handler
871b3ab2 754 (_("%pB: no valid group sections found"), abfd);
493a3386
NC
755 bfd_set_error (bfd_error_bad_value);
756 }
757 }
dbb410c3
AM
758 }
759 }
760
761 if (num_group != (unsigned) -1)
762 {
564e11c9
JW
763 unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
764 unsigned int j;
dbb410c3 765
564e11c9 766 for (j = 0; j < num_group; j++)
dbb410c3 767 {
564e11c9
JW
768 /* Begin search from previous found group. */
769 unsigned i = (j + search_offset) % num_group;
770
dbb410c3 771 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
ce497010 772 Elf_Internal_Group *idx;
0c54f692 773 bfd_size_type n_elt;
ce497010
NC
774
775 if (shdr == NULL)
776 continue;
777
778 idx = (Elf_Internal_Group *) shdr->contents;
0c54f692
NC
779 if (idx == NULL || shdr->sh_size < 4)
780 {
781 /* See PR 21957 for a reproducer. */
782 /* xgettext:c-format */
871b3ab2 783 _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
0c54f692
NC
784 abfd, shdr->bfd_section);
785 elf_tdata (abfd)->group_sect_ptr[i] = NULL;
786 bfd_set_error (bfd_error_bad_value);
787 return FALSE;
788 }
ce497010 789 n_elt = shdr->sh_size / 4;
dbb410c3
AM
790
791 /* Look through this group's sections to see if current
792 section is a member. */
793 while (--n_elt != 0)
794 if ((++idx)->shdr == hdr)
795 {
e0e8c97f 796 asection *s = NULL;
dbb410c3
AM
797
798 /* We are a member of this group. Go looking through
799 other members to see if any others are linked via
800 next_in_group. */
801 idx = (Elf_Internal_Group *) shdr->contents;
802 n_elt = shdr->sh_size / 4;
803 while (--n_elt != 0)
4bba0fb1
AM
804 if ((++idx)->shdr != NULL
805 && (s = idx->shdr->bfd_section) != NULL
945906ff 806 && elf_next_in_group (s) != NULL)
dbb410c3
AM
807 break;
808 if (n_elt != 0)
809 {
dbb410c3
AM
810 /* Snarf the group name from other member, and
811 insert current section in circular list. */
945906ff
AM
812 elf_group_name (newsect) = elf_group_name (s);
813 elf_next_in_group (newsect) = elf_next_in_group (s);
814 elf_next_in_group (s) = newsect;
dbb410c3
AM
815 }
816 else
817 {
dbb410c3
AM
818 const char *gname;
819
b885599b
AM
820 gname = group_signature (abfd, shdr);
821 if (gname == NULL)
b34976b6 822 return FALSE;
945906ff 823 elf_group_name (newsect) = gname;
dbb410c3
AM
824
825 /* Start a circular list with one element. */
945906ff 826 elf_next_in_group (newsect) = newsect;
dbb410c3 827 }
b885599b 828
9dce4196
AM
829 /* If the group section has been created, point to the
830 new member. */
dbb410c3 831 if (shdr->bfd_section != NULL)
945906ff 832 elf_next_in_group (shdr->bfd_section) = newsect;
b885599b 833
564e11c9
JW
834 elf_tdata (abfd)->group_search_offset = i;
835 j = num_group - 1;
dbb410c3
AM
836 break;
837 }
838 }
839 }
840
945906ff 841 if (elf_group_name (newsect) == NULL)
dbb410c3 842 {
695344c0 843 /* xgettext:c-format */
871b3ab2 844 _bfd_error_handler (_("%pB: no group info for section '%pA'"),
4eca0228 845 abfd, newsect);
493a3386 846 return FALSE;
dbb410c3 847 }
b34976b6 848 return TRUE;
dbb410c3
AM
849}
850
3d7f7666 851bfd_boolean
dd863624 852_bfd_elf_setup_sections (bfd *abfd)
3d7f7666
L
853{
854 unsigned int i;
855 unsigned int num_group = elf_tdata (abfd)->num_group;
856 bfd_boolean result = TRUE;
dd863624
L
857 asection *s;
858
859 /* Process SHF_LINK_ORDER. */
860 for (s = abfd->sections; s != NULL; s = s->next)
861 {
862 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
863 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
864 {
865 unsigned int elfsec = this_hdr->sh_link;
866 /* FIXME: The old Intel compiler and old strip/objcopy may
867 not set the sh_link or sh_info fields. Hence we could
868 get the situation where elfsec is 0. */
869 if (elfsec == 0)
870 {
4fbb74a6 871 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
dd863624
L
872 if (bed->link_order_error_handler)
873 bed->link_order_error_handler
695344c0 874 /* xgettext:c-format */
871b3ab2 875 (_("%pB: warning: sh_link not set for section `%pA'"),
dd863624
L
876 abfd, s);
877 }
878 else
879 {
91d6fa6a 880 asection *linksec = NULL;
25bbc984 881
4fbb74a6
AM
882 if (elfsec < elf_numsections (abfd))
883 {
884 this_hdr = elf_elfsections (abfd)[elfsec];
91d6fa6a 885 linksec = this_hdr->bfd_section;
4fbb74a6 886 }
25bbc984
L
887
888 /* PR 1991, 2008:
889 Some strip/objcopy may leave an incorrect value in
890 sh_link. We don't want to proceed. */
91d6fa6a 891 if (linksec == NULL)
25bbc984 892 {
4eca0228 893 _bfd_error_handler
695344c0 894 /* xgettext:c-format */
871b3ab2 895 (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
c08bb8dd 896 s->owner, elfsec, s);
25bbc984
L
897 result = FALSE;
898 }
899
91d6fa6a 900 elf_linked_to_section (s) = linksec;
dd863624
L
901 }
902 }
53720c49
AM
903 else if (this_hdr->sh_type == SHT_GROUP
904 && elf_next_in_group (s) == NULL)
905 {
4eca0228 906 _bfd_error_handler
695344c0 907 /* xgettext:c-format */
871b3ab2 908 (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
53720c49
AM
909 abfd, elf_section_data (s)->this_idx);
910 result = FALSE;
911 }
dd863624 912 }
3d7f7666 913
dd863624 914 /* Process section groups. */
3d7f7666
L
915 if (num_group == (unsigned) -1)
916 return result;
917
918 for (i = 0; i < num_group; i++)
919 {
920 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
4b0e8a5f
NC
921 Elf_Internal_Group *idx;
922 unsigned int n_elt;
3d7f7666 923
4b0e8a5f
NC
924 /* PR binutils/18758: Beware of corrupt binaries with invalid group data. */
925 if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
926 {
4eca0228 927 _bfd_error_handler
695344c0 928 /* xgettext:c-format */
871b3ab2 929 (_("%pB: section group entry number %u is corrupt"),
4b0e8a5f
NC
930 abfd, i);
931 result = FALSE;
932 continue;
933 }
934
935 idx = (Elf_Internal_Group *) shdr->contents;
936 n_elt = shdr->sh_size / 4;
1b786873 937
3d7f7666 938 while (--n_elt != 0)
24d3e51b
NC
939 {
940 ++ idx;
941
942 if (idx->shdr == NULL)
943 continue;
944 else if (idx->shdr->bfd_section)
945 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
db4677b8
AM
946 else if (idx->shdr->sh_type != SHT_RELA
947 && idx->shdr->sh_type != SHT_REL)
24d3e51b
NC
948 {
949 /* There are some unknown sections in the group. */
950 _bfd_error_handler
951 /* xgettext:c-format */
871b3ab2 952 (_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
24d3e51b
NC
953 abfd,
954 idx->shdr->sh_type,
955 bfd_elf_string_from_elf_section (abfd,
956 (elf_elfheader (abfd)
957 ->e_shstrndx),
958 idx->shdr->sh_name),
959 shdr->bfd_section);
960 result = FALSE;
961 }
962 }
3d7f7666 963 }
24d3e51b 964
3d7f7666
L
965 return result;
966}
967
72adc230
AM
968bfd_boolean
969bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
970{
971 return elf_next_in_group (sec) != NULL;
972}
973
cb7f4b29
AM
974const char *
975bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
976{
977 if (elf_sec_group (sec) != NULL)
978 return elf_group_name (sec);
979 return NULL;
980}
981
f6fe1ccd
L
982static char *
983convert_debug_to_zdebug (bfd *abfd, const char *name)
984{
985 unsigned int len = strlen (name);
986 char *new_name = bfd_alloc (abfd, len + 2);
987 if (new_name == NULL)
988 return NULL;
989 new_name[0] = '.';
990 new_name[1] = 'z';
991 memcpy (new_name + 2, name + 1, len);
992 return new_name;
993}
994
995static char *
996convert_zdebug_to_debug (bfd *abfd, const char *name)
997{
998 unsigned int len = strlen (name);
999 char *new_name = bfd_alloc (abfd, len);
1000 if (new_name == NULL)
1001 return NULL;
1002 new_name[0] = '.';
1003 memcpy (new_name + 1, name + 2, len - 1);
1004 return new_name;
1005}
1006
cc5277b1
ML
1007/* This a copy of lto_section defined in GCC (lto-streamer.h). */
1008
1009struct lto_section
1010{
1011 int16_t major_version;
1012 int16_t minor_version;
1013 unsigned char slim_object;
1014
1015 /* Flags is a private field that is not defined publicly. */
1016 uint16_t flags;
1017};
1018
252b5132
RH
1019/* Make a BFD section from an ELF section. We store a pointer to the
1020 BFD section in the bfd_section field of the header. */
1021
b34976b6 1022bfd_boolean
217aa764
AM
1023_bfd_elf_make_section_from_shdr (bfd *abfd,
1024 Elf_Internal_Shdr *hdr,
6dc132d9
L
1025 const char *name,
1026 int shindex)
252b5132
RH
1027{
1028 asection *newsect;
1029 flagword flags;
9c5bfbb7 1030 const struct elf_backend_data *bed;
252b5132
RH
1031
1032 if (hdr->bfd_section != NULL)
4e011fb5 1033 return TRUE;
252b5132
RH
1034
1035 newsect = bfd_make_section_anyway (abfd, name);
1036 if (newsect == NULL)
b34976b6 1037 return FALSE;
252b5132 1038
1829f4b2
AM
1039 hdr->bfd_section = newsect;
1040 elf_section_data (newsect)->this_hdr = *hdr;
6dc132d9 1041 elf_section_data (newsect)->this_idx = shindex;
1829f4b2 1042
2f89ff8d
L
1043 /* Always use the real type/flags. */
1044 elf_section_type (newsect) = hdr->sh_type;
1045 elf_section_flags (newsect) = hdr->sh_flags;
1046
252b5132
RH
1047 newsect->filepos = hdr->sh_offset;
1048
fd361982
AM
1049 if (!bfd_set_section_vma (newsect, hdr->sh_addr)
1050 || !bfd_set_section_size (newsect, hdr->sh_size)
1051 || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign)))
b34976b6 1052 return FALSE;
252b5132
RH
1053
1054 flags = SEC_NO_FLAGS;
1055 if (hdr->sh_type != SHT_NOBITS)
1056 flags |= SEC_HAS_CONTENTS;
dbb410c3 1057 if (hdr->sh_type == SHT_GROUP)
7bdf4127 1058 flags |= SEC_GROUP;
252b5132
RH
1059 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1060 {
1061 flags |= SEC_ALLOC;
1062 if (hdr->sh_type != SHT_NOBITS)
1063 flags |= SEC_LOAD;
1064 }
1065 if ((hdr->sh_flags & SHF_WRITE) == 0)
1066 flags |= SEC_READONLY;
1067 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1068 flags |= SEC_CODE;
1069 else if ((flags & SEC_LOAD) != 0)
1070 flags |= SEC_DATA;
f5fa8ca2
JJ
1071 if ((hdr->sh_flags & SHF_MERGE) != 0)
1072 {
1073 flags |= SEC_MERGE;
1074 newsect->entsize = hdr->sh_entsize;
f5fa8ca2 1075 }
84865015
NC
1076 if ((hdr->sh_flags & SHF_STRINGS) != 0)
1077 flags |= SEC_STRINGS;
dbb410c3
AM
1078 if (hdr->sh_flags & SHF_GROUP)
1079 if (!setup_group (abfd, hdr, newsect))
b34976b6 1080 return FALSE;
13ae64f3
JJ
1081 if ((hdr->sh_flags & SHF_TLS) != 0)
1082 flags |= SEC_THREAD_LOCAL;
18ae9cc1
L
1083 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1084 flags |= SEC_EXCLUDE;
252b5132 1085
df3a023b
AM
1086 switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1087 {
1088 /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1089 but binutils as of 2019-07-23 did not set the EI_OSABI header
1090 byte. */
1091 case ELFOSABI_NONE:
1092 case ELFOSABI_GNU:
1093 case ELFOSABI_FREEBSD:
1094 if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1095 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1096 break;
1097 }
1098
3d2b39cf 1099 if ((flags & SEC_ALLOC) == 0)
7a6cc5fb 1100 {
3d2b39cf
L
1101 /* The debugging sections appear to be recognized only by name,
1102 not any sort of flag. Their SEC_ALLOC bits are cleared. */
3d2b39cf
L
1103 if (name [0] == '.')
1104 {
bb294208
AM
1105 if (strncmp (name, ".debug", 6) == 0
1106 || strncmp (name, ".gnu.linkonce.wi.", 17) == 0
1107 || strncmp (name, ".zdebug", 7) == 0)
1108 flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1109 else if (strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0
1110 || strncmp (name, ".note.gnu", 9) == 0)
1111 flags |= SEC_ELF_OCTETS;
1112 else if (strncmp (name, ".line", 5) == 0
1113 || strncmp (name, ".stab", 5) == 0
1114 || strcmp (name, ".gdb_index") == 0)
3d2b39cf
L
1115 flags |= SEC_DEBUGGING;
1116 }
1117 }
252b5132
RH
1118
1119 /* As a GNU extension, if the name begins with .gnu.linkonce, we
1120 only link a single copy of the section. This is used to support
1121 g++. g++ will emit each template expansion in its own section.
1122 The symbols will be defined as weak, so that multiple definitions
1123 are permitted. The GNU linker extension is to actually discard
1124 all but one of the sections. */
0112cd26 1125 if (CONST_STRNEQ (name, ".gnu.linkonce")
b885599b 1126 && elf_next_in_group (newsect) == NULL)
252b5132
RH
1127 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1128
fa152c49
JW
1129 bed = get_elf_backend_data (abfd);
1130 if (bed->elf_backend_section_flags)
1131 if (! bed->elf_backend_section_flags (&flags, hdr))
b34976b6 1132 return FALSE;
fa152c49 1133
fd361982 1134 if (!bfd_set_section_flags (newsect, flags))
b34976b6 1135 return FALSE;
252b5132 1136
718175fa
JK
1137 /* We do not parse the PT_NOTE segments as we are interested even in the
1138 separate debug info files which may have the segments offsets corrupted.
1139 PT_NOTEs from the core files are currently not parsed using BFD. */
1140 if (hdr->sh_type == SHT_NOTE)
1141 {
baea7ef1 1142 bfd_byte *contents;
718175fa 1143
baea7ef1 1144 if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
718175fa
JK
1145 return FALSE;
1146
276da9b3
L
1147 elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1148 hdr->sh_offset, hdr->sh_addralign);
718175fa
JK
1149 free (contents);
1150 }
1151
252b5132
RH
1152 if ((flags & SEC_ALLOC) != 0)
1153 {
1154 Elf_Internal_Phdr *phdr;
6ffd7900
AM
1155 unsigned int i, nload;
1156
1157 /* Some ELF linkers produce binaries with all the program header
1158 p_paddr fields zero. If we have such a binary with more than
1159 one PT_LOAD header, then leave the section lma equal to vma
1160 so that we don't create sections with overlapping lma. */
1161 phdr = elf_tdata (abfd)->phdr;
1162 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1163 if (phdr->p_paddr != 0)
1164 break;
1165 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1166 ++nload;
1167 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1168 return TRUE;
252b5132 1169
252b5132
RH
1170 phdr = elf_tdata (abfd)->phdr;
1171 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1172 {
86b2281f
AM
1173 if (((phdr->p_type == PT_LOAD
1174 && (hdr->sh_flags & SHF_TLS) == 0)
1175 || phdr->p_type == PT_TLS)
9a83a553 1176 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
252b5132 1177 {
88967714
AM
1178 if ((flags & SEC_LOAD) == 0)
1179 newsect->lma = (phdr->p_paddr
1180 + hdr->sh_addr - phdr->p_vaddr);
1181 else
1182 /* We used to use the same adjustment for SEC_LOAD
1183 sections, but that doesn't work if the segment
1184 is packed with code from multiple VMAs.
1185 Instead we calculate the section LMA based on
1186 the segment LMA. It is assumed that the
1187 segment will contain sections with contiguous
1188 LMAs, even if the VMAs are not. */
1189 newsect->lma = (phdr->p_paddr
1190 + hdr->sh_offset - phdr->p_offset);
1191
1192 /* With contiguous segments, we can't tell from file
1193 offsets whether a section with zero size should
1194 be placed at the end of one segment or the
1195 beginning of the next. Decide based on vaddr. */
1196 if (hdr->sh_addr >= phdr->p_vaddr
1197 && (hdr->sh_addr + hdr->sh_size
1198 <= phdr->p_vaddr + phdr->p_memsz))
1199 break;
252b5132
RH
1200 }
1201 }
1202 }
1203
4a114e3e
L
1204 /* Compress/decompress DWARF debug sections with names: .debug_* and
1205 .zdebug_*, after the section flags is set. */
1206 if ((flags & SEC_DEBUGGING)
1207 && ((name[1] == 'd' && name[6] == '_')
1208 || (name[1] == 'z' && name[7] == '_')))
1209 {
1210 enum { nothing, compress, decompress } action = nothing;
151411f8 1211 int compression_header_size;
dab394de 1212 bfd_size_type uncompressed_size;
4207142d 1213 unsigned int uncompressed_align_power;
151411f8
L
1214 bfd_boolean compressed
1215 = bfd_is_section_compressed_with_header (abfd, newsect,
dab394de 1216 &compression_header_size,
4207142d
MW
1217 &uncompressed_size,
1218 &uncompressed_align_power);
151411f8 1219 if (compressed)
4a114e3e
L
1220 {
1221 /* Compressed section. Check if we should decompress. */
1222 if ((abfd->flags & BFD_DECOMPRESS))
1223 action = decompress;
1224 }
151411f8
L
1225
1226 /* Compress the uncompressed section or convert from/to .zdebug*
1227 section. Check if we should compress. */
1228 if (action == nothing)
4a114e3e 1229 {
151411f8
L
1230 if (newsect->size != 0
1231 && (abfd->flags & BFD_COMPRESS)
1232 && compression_header_size >= 0
dab394de 1233 && uncompressed_size > 0
151411f8
L
1234 && (!compressed
1235 || ((compression_header_size > 0)
1236 != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
4a114e3e 1237 action = compress;
151411f8
L
1238 else
1239 return TRUE;
4a114e3e
L
1240 }
1241
151411f8 1242 if (action == compress)
4a114e3e 1243 {
4a114e3e
L
1244 if (!bfd_init_section_compress_status (abfd, newsect))
1245 {
4eca0228 1246 _bfd_error_handler
695344c0 1247 /* xgettext:c-format */
871b3ab2 1248 (_("%pB: unable to initialize compress status for section %s"),
4a114e3e
L
1249 abfd, name);
1250 return FALSE;
1251 }
151411f8
L
1252 }
1253 else
1254 {
4a114e3e
L
1255 if (!bfd_init_section_decompress_status (abfd, newsect))
1256 {
4eca0228 1257 _bfd_error_handler
695344c0 1258 /* xgettext:c-format */
871b3ab2 1259 (_("%pB: unable to initialize decompress status for section %s"),
4a114e3e
L
1260 abfd, name);
1261 return FALSE;
1262 }
151411f8
L
1263 }
1264
f6fe1ccd 1265 if (abfd->is_linker_input)
151411f8 1266 {
f6fe1ccd
L
1267 if (name[1] == 'z'
1268 && (action == decompress
1269 || (action == compress
1270 && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
4e011fb5 1271 {
f6fe1ccd
L
1272 /* Convert section name from .zdebug_* to .debug_* so
1273 that linker will consider this section as a debug
1274 section. */
1275 char *new_name = convert_zdebug_to_debug (abfd, name);
151411f8
L
1276 if (new_name == NULL)
1277 return FALSE;
fd361982 1278 bfd_rename_section (newsect, new_name);
151411f8 1279 }
4a114e3e 1280 }
f6fe1ccd
L
1281 else
1282 /* For objdump, don't rename the section. For objcopy, delay
1283 section rename to elf_fake_sections. */
1284 newsect->flags |= SEC_ELF_RENAME;
4a114e3e
L
1285 }
1286
cc5277b1
ML
1287 /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
1288 section. */
1289 const char *lto_section_name = ".gnu.lto_.lto.";
1290 if (strncmp (name, lto_section_name, strlen (lto_section_name)) == 0)
1291 {
1292 struct lto_section lsection;
1293 if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
1294 sizeof (struct lto_section)))
1295 abfd->lto_slim_object = lsection.slim_object;
1296 }
1297
b34976b6 1298 return TRUE;
252b5132
RH
1299}
1300
84865015
NC
1301const char *const bfd_elf_section_type_names[] =
1302{
252b5132
RH
1303 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1304 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1305 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1306};
1307
1049f94e 1308/* ELF relocs are against symbols. If we are producing relocatable
252b5132
RH
1309 output, and the reloc is against an external symbol, and nothing
1310 has given us any additional addend, the resulting reloc will also
1311 be against the same symbol. In such a case, we don't want to
1312 change anything about the way the reloc is handled, since it will
1313 all be done at final link time. Rather than put special case code
1314 into bfd_perform_relocation, all the reloc types use this howto
1315 function. It just short circuits the reloc if producing
1049f94e 1316 relocatable output against an external symbol. */
252b5132 1317
252b5132 1318bfd_reloc_status_type
217aa764
AM
1319bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1320 arelent *reloc_entry,
1321 asymbol *symbol,
1322 void *data ATTRIBUTE_UNUSED,
1323 asection *input_section,
1324 bfd *output_bfd,
1325 char **error_message ATTRIBUTE_UNUSED)
1326{
1327 if (output_bfd != NULL
252b5132
RH
1328 && (symbol->flags & BSF_SECTION_SYM) == 0
1329 && (! reloc_entry->howto->partial_inplace
1330 || reloc_entry->addend == 0))
1331 {
1332 reloc_entry->address += input_section->output_offset;
1333 return bfd_reloc_ok;
1334 }
1335
1336 return bfd_reloc_continue;
1337}
1338\f
84865015
NC
1339/* Returns TRUE if section A matches section B.
1340 Names, addresses and links may be different, but everything else
1341 should be the same. */
1342
1343static bfd_boolean
5522f910
NC
1344section_match (const Elf_Internal_Shdr * a,
1345 const Elf_Internal_Shdr * b)
84865015 1346{
ac85e67c
AM
1347 if (a->sh_type != b->sh_type
1348 || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1349 || a->sh_addralign != b->sh_addralign
1350 || a->sh_entsize != b->sh_entsize)
1351 return FALSE;
1352 if (a->sh_type == SHT_SYMTAB
1353 || a->sh_type == SHT_STRTAB)
1354 return TRUE;
1355 return a->sh_size == b->sh_size;
84865015
NC
1356}
1357
1358/* Find a section in OBFD that has the same characteristics
1359 as IHEADER. Return the index of this section or SHN_UNDEF if
1360 none can be found. Check's section HINT first, as this is likely
1361 to be the correct section. */
1362
1363static unsigned int
5cc4ca83
ST
1364find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1365 const unsigned int hint)
84865015
NC
1366{
1367 Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1368 unsigned int i;
1369
a55c9876
NC
1370 BFD_ASSERT (iheader != NULL);
1371
1372 /* See PR 20922 for a reproducer of the NULL test. */
5cc4ca83
ST
1373 if (hint < elf_numsections (obfd)
1374 && oheaders[hint] != NULL
a55c9876 1375 && section_match (oheaders[hint], iheader))
84865015
NC
1376 return hint;
1377
1378 for (i = 1; i < elf_numsections (obfd); i++)
1379 {
1380 Elf_Internal_Shdr * oheader = oheaders[i];
1381
a55c9876
NC
1382 if (oheader == NULL)
1383 continue;
84865015
NC
1384 if (section_match (oheader, iheader))
1385 /* FIXME: Do we care if there is a potential for
1386 multiple matches ? */
1387 return i;
1388 }
1389
1390 return SHN_UNDEF;
1391}
1392
5522f910
NC
1393/* PR 19938: Attempt to set the ELF section header fields of an OS or
1394 Processor specific section, based upon a matching input section.
1395 Returns TRUE upon success, FALSE otherwise. */
07d6d2b8 1396
5522f910
NC
1397static bfd_boolean
1398copy_special_section_fields (const bfd *ibfd,
1399 bfd *obfd,
1400 const Elf_Internal_Shdr *iheader,
1401 Elf_Internal_Shdr *oheader,
1402 const unsigned int secnum)
1403{
1404 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1405 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1406 bfd_boolean changed = FALSE;
1407 unsigned int sh_link;
1408
1409 if (oheader->sh_type == SHT_NOBITS)
1410 {
1411 /* This is a feature for objcopy --only-keep-debug:
1412 When a section's type is changed to NOBITS, we preserve
1413 the sh_link and sh_info fields so that they can be
1414 matched up with the original.
1415
1416 Note: Strictly speaking these assignments are wrong.
1417 The sh_link and sh_info fields should point to the
1418 relevent sections in the output BFD, which may not be in
1419 the same location as they were in the input BFD. But
1420 the whole point of this action is to preserve the
1421 original values of the sh_link and sh_info fields, so
1422 that they can be matched up with the section headers in
1423 the original file. So strictly speaking we may be
1424 creating an invalid ELF file, but it is only for a file
1425 that just contains debug info and only for sections
1426 without any contents. */
1427 if (oheader->sh_link == 0)
1428 oheader->sh_link = iheader->sh_link;
1429 if (oheader->sh_info == 0)
1430 oheader->sh_info = iheader->sh_info;
1431 return TRUE;
1432 }
1433
1434 /* Allow the target a chance to decide how these fields should be set. */
1435 if (bed->elf_backend_copy_special_section_fields != NULL
1436 && bed->elf_backend_copy_special_section_fields
1437 (ibfd, obfd, iheader, oheader))
1438 return TRUE;
1439
1440 /* We have an iheader which might match oheader, and which has non-zero
1441 sh_info and/or sh_link fields. Attempt to follow those links and find
1442 the section in the output bfd which corresponds to the linked section
1443 in the input bfd. */
1444 if (iheader->sh_link != SHN_UNDEF)
1445 {
4f3ca05b
NC
1446 /* See PR 20931 for a reproducer. */
1447 if (iheader->sh_link >= elf_numsections (ibfd))
1448 {
76cfced5 1449 _bfd_error_handler
4f3ca05b 1450 /* xgettext:c-format */
9793eb77 1451 (_("%pB: invalid sh_link field (%d) in section number %d"),
4f3ca05b
NC
1452 ibfd, iheader->sh_link, secnum);
1453 return FALSE;
1454 }
1455
5522f910
NC
1456 sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1457 if (sh_link != SHN_UNDEF)
1458 {
1459 oheader->sh_link = sh_link;
1460 changed = TRUE;
1461 }
1462 else
1463 /* FIXME: Should we install iheader->sh_link
1464 if we could not find a match ? */
76cfced5 1465 _bfd_error_handler
695344c0 1466 /* xgettext:c-format */
9793eb77 1467 (_("%pB: failed to find link section for section %d"), obfd, secnum);
5522f910
NC
1468 }
1469
1470 if (iheader->sh_info)
1471 {
1472 /* The sh_info field can hold arbitrary information, but if the
1473 SHF_LINK_INFO flag is set then it should be interpreted as a
1474 section index. */
1475 if (iheader->sh_flags & SHF_INFO_LINK)
1476 {
1477 sh_link = find_link (obfd, iheaders[iheader->sh_info],
1478 iheader->sh_info);
1479 if (sh_link != SHN_UNDEF)
1480 oheader->sh_flags |= SHF_INFO_LINK;
1481 }
1482 else
1483 /* No idea what it means - just copy it. */
1484 sh_link = iheader->sh_info;
1485
1486 if (sh_link != SHN_UNDEF)
1487 {
1488 oheader->sh_info = sh_link;
1489 changed = TRUE;
1490 }
1491 else
76cfced5 1492 _bfd_error_handler
695344c0 1493 /* xgettext:c-format */
9793eb77 1494 (_("%pB: failed to find info section for section %d"), obfd, secnum);
5522f910
NC
1495 }
1496
1497 return changed;
1498}
07d6d2b8 1499
0ac4564e
L
1500/* Copy the program header and other data from one object module to
1501 another. */
252b5132 1502
b34976b6 1503bfd_boolean
217aa764 1504_bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
2d502050 1505{
5522f910
NC
1506 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1507 Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1508 const struct elf_backend_data *bed;
84865015
NC
1509 unsigned int i;
1510
2d502050 1511 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
84865015 1512 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
b34976b6 1513 return TRUE;
2d502050 1514
57b828ef
L
1515 if (!elf_flags_init (obfd))
1516 {
1517 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1518 elf_flags_init (obfd) = TRUE;
1519 }
2d502050 1520
0ac4564e 1521 elf_gp (obfd) = elf_gp (ibfd);
57b828ef
L
1522
1523 /* Also copy the EI_OSABI field. */
1524 elf_elfheader (obfd)->e_ident[EI_OSABI] =
1525 elf_elfheader (ibfd)->e_ident[EI_OSABI];
104d59d1 1526
5522f910
NC
1527 /* If set, copy the EI_ABIVERSION field. */
1528 if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1529 elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1530 = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
07d6d2b8 1531
104d59d1
JM
1532 /* Copy object attributes. */
1533 _bfd_elf_copy_obj_attributes (ibfd, obfd);
63b9bbb7 1534
84865015
NC
1535 if (iheaders == NULL || oheaders == NULL)
1536 return TRUE;
63b9bbb7 1537
5522f910
NC
1538 bed = get_elf_backend_data (obfd);
1539
1540 /* Possibly copy other fields in the section header. */
84865015 1541 for (i = 1; i < elf_numsections (obfd); i++)
63b9bbb7 1542 {
84865015
NC
1543 unsigned int j;
1544 Elf_Internal_Shdr * oheader = oheaders[i];
63b9bbb7 1545
5522f910
NC
1546 /* Ignore ordinary sections. SHT_NOBITS sections are considered however
1547 because of a special case need for generating separate debug info
1548 files. See below for more details. */
84865015
NC
1549 if (oheader == NULL
1550 || (oheader->sh_type != SHT_NOBITS
5522f910
NC
1551 && oheader->sh_type < SHT_LOOS))
1552 continue;
1553
1554 /* Ignore empty sections, and sections whose
1555 fields have already been initialised. */
1556 if (oheader->sh_size == 0
84865015
NC
1557 || (oheader->sh_info != 0 && oheader->sh_link != 0))
1558 continue;
63b9bbb7 1559
84865015 1560 /* Scan for the matching section in the input bfd.
5522f910
NC
1561 First we try for a direct mapping between the input and output sections. */
1562 for (j = 1; j < elf_numsections (ibfd); j++)
1563 {
1564 const Elf_Internal_Shdr * iheader = iheaders[j];
1565
1566 if (iheader == NULL)
1567 continue;
1568
1569 if (oheader->bfd_section != NULL
1570 && iheader->bfd_section != NULL
1571 && iheader->bfd_section->output_section != NULL
1572 && iheader->bfd_section->output_section == oheader->bfd_section)
1573 {
1574 /* We have found a connection from the input section to the
1575 output section. Attempt to copy the header fields. If
1576 this fails then do not try any further sections - there
1577 should only be a one-to-one mapping between input and output. */
1578 if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1579 j = elf_numsections (ibfd);
1580 break;
1581 }
1582 }
1583
1584 if (j < elf_numsections (ibfd))
1585 continue;
1586
1587 /* That failed. So try to deduce the corresponding input section.
84865015
NC
1588 Unfortunately we cannot compare names as the output string table
1589 is empty, so instead we check size, address and type. */
1590 for (j = 1; j < elf_numsections (ibfd); j++)
1591 {
5522f910 1592 const Elf_Internal_Shdr * iheader = iheaders[j];
84865015 1593
5522f910
NC
1594 if (iheader == NULL)
1595 continue;
1596
1597 /* Try matching fields in the input section's header.
1598 Since --only-keep-debug turns all non-debug sections into
84865015
NC
1599 SHT_NOBITS sections, the output SHT_NOBITS type matches any
1600 input type. */
1601 if ((oheader->sh_type == SHT_NOBITS
1602 || iheader->sh_type == oheader->sh_type)
5522f910
NC
1603 && (iheader->sh_flags & ~ SHF_INFO_LINK)
1604 == (oheader->sh_flags & ~ SHF_INFO_LINK)
84865015
NC
1605 && iheader->sh_addralign == oheader->sh_addralign
1606 && iheader->sh_entsize == oheader->sh_entsize
1607 && iheader->sh_size == oheader->sh_size
1608 && iheader->sh_addr == oheader->sh_addr
1609 && (iheader->sh_info != oheader->sh_info
1610 || iheader->sh_link != oheader->sh_link))
63b9bbb7 1611 {
5522f910
NC
1612 if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1613 break;
63b9bbb7
NC
1614 }
1615 }
5522f910
NC
1616
1617 if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1618 {
1619 /* Final attempt. Call the backend copy function
1620 with a NULL input section. */
1621 if (bed->elf_backend_copy_special_section_fields != NULL)
1622 bed->elf_backend_copy_special_section_fields (ibfd, obfd, NULL, oheader);
1623 }
63b9bbb7
NC
1624 }
1625
b34976b6 1626 return TRUE;
2d502050
L
1627}
1628
cedc298e
L
1629static const char *
1630get_segment_type (unsigned int p_type)
1631{
1632 const char *pt;
1633 switch (p_type)
1634 {
1635 case PT_NULL: pt = "NULL"; break;
1636 case PT_LOAD: pt = "LOAD"; break;
1637 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1638 case PT_INTERP: pt = "INTERP"; break;
1639 case PT_NOTE: pt = "NOTE"; break;
1640 case PT_SHLIB: pt = "SHLIB"; break;
1641 case PT_PHDR: pt = "PHDR"; break;
1642 case PT_TLS: pt = "TLS"; break;
1643 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
2b05f1b7 1644 case PT_GNU_STACK: pt = "STACK"; break;
cedc298e
L
1645 case PT_GNU_RELRO: pt = "RELRO"; break;
1646 default: pt = NULL; break;
1647 }
1648 return pt;
1649}
1650
f0b79d91
L
1651/* Print out the program headers. */
1652
b34976b6 1653bfd_boolean
217aa764 1654_bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
252b5132 1655{
a50b1753 1656 FILE *f = (FILE *) farg;
252b5132
RH
1657 Elf_Internal_Phdr *p;
1658 asection *s;
1659 bfd_byte *dynbuf = NULL;
1660
1661 p = elf_tdata (abfd)->phdr;
1662 if (p != NULL)
1663 {
1664 unsigned int i, c;
1665
1666 fprintf (f, _("\nProgram Header:\n"));
1667 c = elf_elfheader (abfd)->e_phnum;
1668 for (i = 0; i < c; i++, p++)
1669 {
cedc298e 1670 const char *pt = get_segment_type (p->p_type);
252b5132
RH
1671 char buf[20];
1672
cedc298e 1673 if (pt == NULL)
252b5132 1674 {
cedc298e
L
1675 sprintf (buf, "0x%lx", p->p_type);
1676 pt = buf;
252b5132 1677 }
dc810e39 1678 fprintf (f, "%8s off 0x", pt);
60b89a18 1679 bfd_fprintf_vma (abfd, f, p->p_offset);
252b5132 1680 fprintf (f, " vaddr 0x");
60b89a18 1681 bfd_fprintf_vma (abfd, f, p->p_vaddr);
252b5132 1682 fprintf (f, " paddr 0x");
60b89a18 1683 bfd_fprintf_vma (abfd, f, p->p_paddr);
252b5132
RH
1684 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1685 fprintf (f, " filesz 0x");
60b89a18 1686 bfd_fprintf_vma (abfd, f, p->p_filesz);
252b5132 1687 fprintf (f, " memsz 0x");
60b89a18 1688 bfd_fprintf_vma (abfd, f, p->p_memsz);
252b5132
RH
1689 fprintf (f, " flags %c%c%c",
1690 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1691 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1692 (p->p_flags & PF_X) != 0 ? 'x' : '-');
dc810e39
AM
1693 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1694 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
252b5132
RH
1695 fprintf (f, "\n");
1696 }
1697 }
1698
1699 s = bfd_get_section_by_name (abfd, ".dynamic");
1700 if (s != NULL)
1701 {
cb33740c 1702 unsigned int elfsec;
dc810e39 1703 unsigned long shlink;
252b5132
RH
1704 bfd_byte *extdyn, *extdynend;
1705 size_t extdynsize;
217aa764 1706 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
252b5132
RH
1707
1708 fprintf (f, _("\nDynamic Section:\n"));
1709
eea6121a 1710 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
252b5132
RH
1711 goto error_return;
1712
1713 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
cb33740c 1714 if (elfsec == SHN_BAD)
252b5132 1715 goto error_return;
dc810e39 1716 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
252b5132
RH
1717
1718 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1719 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1720
1721 extdyn = dynbuf;
06614111
NC
1722 /* PR 17512: file: 6f427532. */
1723 if (s->size < extdynsize)
1724 goto error_return;
eea6121a 1725 extdynend = extdyn + s->size;
1036838a 1726 /* PR 17512: file: id:000006,sig:06,src:000000,op:flip4,pos:5664.
07d6d2b8 1727 Fix range check. */
1036838a 1728 for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
252b5132
RH
1729 {
1730 Elf_Internal_Dyn dyn;
ad9563d6 1731 const char *name = "";
252b5132 1732 char ab[20];
b34976b6 1733 bfd_boolean stringp;
ad9563d6 1734 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132 1735
217aa764 1736 (*swap_dyn_in) (abfd, extdyn, &dyn);
252b5132
RH
1737
1738 if (dyn.d_tag == DT_NULL)
1739 break;
1740
b34976b6 1741 stringp = FALSE;
252b5132
RH
1742 switch (dyn.d_tag)
1743 {
1744 default:
ad9563d6
CM
1745 if (bed->elf_backend_get_target_dtag)
1746 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1747
1748 if (!strcmp (name, ""))
1749 {
cd9af601 1750 sprintf (ab, "%#" BFD_VMA_FMT "x", dyn.d_tag);
ad9563d6
CM
1751 name = ab;
1752 }
252b5132
RH
1753 break;
1754
b34976b6 1755 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
252b5132
RH
1756 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1757 case DT_PLTGOT: name = "PLTGOT"; break;
1758 case DT_HASH: name = "HASH"; break;
1759 case DT_STRTAB: name = "STRTAB"; break;
1760 case DT_SYMTAB: name = "SYMTAB"; break;
1761 case DT_RELA: name = "RELA"; break;
1762 case DT_RELASZ: name = "RELASZ"; break;
1763 case DT_RELAENT: name = "RELAENT"; break;
1764 case DT_STRSZ: name = "STRSZ"; break;
1765 case DT_SYMENT: name = "SYMENT"; break;
1766 case DT_INIT: name = "INIT"; break;
1767 case DT_FINI: name = "FINI"; break;
b34976b6
AM
1768 case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1769 case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
252b5132
RH
1770 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1771 case DT_REL: name = "REL"; break;
1772 case DT_RELSZ: name = "RELSZ"; break;
1773 case DT_RELENT: name = "RELENT"; break;
1774 case DT_PLTREL: name = "PLTREL"; break;
1775 case DT_DEBUG: name = "DEBUG"; break;
1776 case DT_TEXTREL: name = "TEXTREL"; break;
1777 case DT_JMPREL: name = "JMPREL"; break;
94558834
L
1778 case DT_BIND_NOW: name = "BIND_NOW"; break;
1779 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1780 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1781 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1782 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
b34976b6 1783 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
94558834
L
1784 case DT_FLAGS: name = "FLAGS"; break;
1785 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1786 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
d48188b9 1787 case DT_CHECKSUM: name = "CHECKSUM"; break;
94558834
L
1788 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1789 case DT_MOVEENT: name = "MOVEENT"; break;
1790 case DT_MOVESZ: name = "MOVESZ"; break;
1791 case DT_FEATURE: name = "FEATURE"; break;
1792 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1793 case DT_SYMINSZ: name = "SYMINSZ"; break;
1794 case DT_SYMINENT: name = "SYMINENT"; break;
b34976b6
AM
1795 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1796 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1797 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
94558834
L
1798 case DT_PLTPAD: name = "PLTPAD"; break;
1799 case DT_MOVETAB: name = "MOVETAB"; break;
1800 case DT_SYMINFO: name = "SYMINFO"; break;
1801 case DT_RELACOUNT: name = "RELACOUNT"; break;
1802 case DT_RELCOUNT: name = "RELCOUNT"; break;
1803 case DT_FLAGS_1: name = "FLAGS_1"; break;
252b5132
RH
1804 case DT_VERSYM: name = "VERSYM"; break;
1805 case DT_VERDEF: name = "VERDEF"; break;
1806 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1807 case DT_VERNEED: name = "VERNEED"; break;
1808 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
b34976b6 1809 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
94558834 1810 case DT_USED: name = "USED"; break;
b34976b6 1811 case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
fdc90cb4 1812 case DT_GNU_HASH: name = "GNU_HASH"; break;
252b5132
RH
1813 }
1814
ad9563d6 1815 fprintf (f, " %-20s ", name);
252b5132 1816 if (! stringp)
a1f3c56e
AN
1817 {
1818 fprintf (f, "0x");
1819 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1820 }
252b5132
RH
1821 else
1822 {
1823 const char *string;
dc810e39 1824 unsigned int tagv = dyn.d_un.d_val;
252b5132 1825
dc810e39 1826 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
252b5132
RH
1827 if (string == NULL)
1828 goto error_return;
1829 fprintf (f, "%s", string);
1830 }
1831 fprintf (f, "\n");
1832 }
1833
1834 free (dynbuf);
1835 dynbuf = NULL;
1836 }
1837
1838 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1839 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1840 {
fc0e6df6 1841 if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
b34976b6 1842 return FALSE;
252b5132
RH
1843 }
1844
1845 if (elf_dynverdef (abfd) != 0)
1846 {
1847 Elf_Internal_Verdef *t;
1848
1849 fprintf (f, _("\nVersion definitions:\n"));
1850 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1851 {
1852 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
d0fb9a8d
JJ
1853 t->vd_flags, t->vd_hash,
1854 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1855 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
252b5132
RH
1856 {
1857 Elf_Internal_Verdaux *a;
1858
1859 fprintf (f, "\t");
1860 for (a = t->vd_auxptr->vda_nextptr;
1861 a != NULL;
1862 a = a->vda_nextptr)
d0fb9a8d
JJ
1863 fprintf (f, "%s ",
1864 a->vda_nodename ? a->vda_nodename : "<corrupt>");
252b5132
RH
1865 fprintf (f, "\n");
1866 }
1867 }
1868 }
1869
1870 if (elf_dynverref (abfd) != 0)
1871 {
1872 Elf_Internal_Verneed *t;
1873
1874 fprintf (f, _("\nVersion References:\n"));
1875 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1876 {
1877 Elf_Internal_Vernaux *a;
1878
d0fb9a8d
JJ
1879 fprintf (f, _(" required from %s:\n"),
1880 t->vn_filename ? t->vn_filename : "<corrupt>");
252b5132
RH
1881 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1882 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
d0fb9a8d
JJ
1883 a->vna_flags, a->vna_other,
1884 a->vna_nodename ? a->vna_nodename : "<corrupt>");
252b5132
RH
1885 }
1886 }
1887
b34976b6 1888 return TRUE;
252b5132
RH
1889
1890 error_return:
1891 if (dynbuf != NULL)
1892 free (dynbuf);
b34976b6 1893 return FALSE;
252b5132
RH
1894}
1895
bb4d2ac2
L
1896/* Get version string. */
1897
1898const char *
60bb06bc
L
1899_bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
1900 bfd_boolean *hidden)
bb4d2ac2
L
1901{
1902 const char *version_string = NULL;
1903 if (elf_dynversym (abfd) != 0
1904 && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
1905 {
1906 unsigned int vernum = ((elf_symbol_type *) symbol)->version;
1907
1908 *hidden = (vernum & VERSYM_HIDDEN) != 0;
1909 vernum &= VERSYM_VERSION;
1910
1911 if (vernum == 0)
1912 version_string = "";
1f6f5dba
L
1913 else if (vernum == 1
1914 && (vernum > elf_tdata (abfd)->cverdefs
1915 || (elf_tdata (abfd)->verdef[0].vd_flags
1916 == VER_FLG_BASE)))
bb4d2ac2
L
1917 version_string = "Base";
1918 else if (vernum <= elf_tdata (abfd)->cverdefs)
1919 version_string =
1920 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1921 else
1922 {
1923 Elf_Internal_Verneed *t;
1924
7a815dd5 1925 version_string = _("<corrupt>");
bb4d2ac2
L
1926 for (t = elf_tdata (abfd)->verref;
1927 t != NULL;
1928 t = t->vn_nextref)
1929 {
1930 Elf_Internal_Vernaux *a;
1931
1932 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1933 {
1934 if (a->vna_other == vernum)
1935 {
1936 version_string = a->vna_nodename;
1937 break;
1938 }
1939 }
1940 }
1941 }
1942 }
1943 return version_string;
1944}
1945
252b5132
RH
1946/* Display ELF-specific fields of a symbol. */
1947
1948void
217aa764
AM
1949bfd_elf_print_symbol (bfd *abfd,
1950 void *filep,
1951 asymbol *symbol,
1952 bfd_print_symbol_type how)
252b5132 1953{
a50b1753 1954 FILE *file = (FILE *) filep;
252b5132
RH
1955 switch (how)
1956 {
1957 case bfd_print_symbol_name:
1958 fprintf (file, "%s", symbol->name);
1959 break;
1960 case bfd_print_symbol_more:
1961 fprintf (file, "elf ");
60b89a18 1962 bfd_fprintf_vma (abfd, file, symbol->value);
cd9af601 1963 fprintf (file, " %x", symbol->flags);
252b5132
RH
1964 break;
1965 case bfd_print_symbol_all:
1966 {
4e8a9624
AM
1967 const char *section_name;
1968 const char *name = NULL;
9c5bfbb7 1969 const struct elf_backend_data *bed;
7a13edea 1970 unsigned char st_other;
dbb410c3 1971 bfd_vma val;
bb4d2ac2
L
1972 const char *version_string;
1973 bfd_boolean hidden;
c044fabd 1974
252b5132 1975 section_name = symbol->section ? symbol->section->name : "(*none*)";
587ff49e
RH
1976
1977 bed = get_elf_backend_data (abfd);
1978 if (bed->elf_backend_print_symbol_all)
c044fabd 1979 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
587ff49e
RH
1980
1981 if (name == NULL)
1982 {
7ee38065 1983 name = symbol->name;
217aa764 1984 bfd_print_symbol_vandf (abfd, file, symbol);
587ff49e
RH
1985 }
1986
252b5132
RH
1987 fprintf (file, " %s\t", section_name);
1988 /* Print the "other" value for a symbol. For common symbols,
1989 we've already printed the size; now print the alignment.
1990 For other symbols, we have no specified alignment, and
1991 we've printed the address; now print the size. */
dcf6c779 1992 if (symbol->section && bfd_is_com_section (symbol->section))
dbb410c3
AM
1993 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1994 else
1995 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1996 bfd_fprintf_vma (abfd, file, val);
252b5132
RH
1997
1998 /* If we have version information, print it. */
60bb06bc
L
1999 version_string = _bfd_elf_get_symbol_version_string (abfd,
2000 symbol,
2001 &hidden);
bb4d2ac2 2002 if (version_string)
252b5132 2003 {
bb4d2ac2 2004 if (!hidden)
252b5132
RH
2005 fprintf (file, " %-11s", version_string);
2006 else
2007 {
2008 int i;
2009
2010 fprintf (file, " (%s)", version_string);
2011 for (i = 10 - strlen (version_string); i > 0; --i)
2012 putc (' ', file);
2013 }
2014 }
2015
2016 /* If the st_other field is not zero, print it. */
7a13edea 2017 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
c044fabd 2018
7a13edea
NC
2019 switch (st_other)
2020 {
2021 case 0: break;
2022 case STV_INTERNAL: fprintf (file, " .internal"); break;
2023 case STV_HIDDEN: fprintf (file, " .hidden"); break;
2024 case STV_PROTECTED: fprintf (file, " .protected"); break;
2025 default:
2026 /* Some other non-defined flags are also present, so print
2027 everything hex. */
2028 fprintf (file, " 0x%02x", (unsigned int) st_other);
2029 }
252b5132 2030
587ff49e 2031 fprintf (file, " %s", name);
252b5132
RH
2032 }
2033 break;
2034 }
2035}
252b5132
RH
2036\f
2037/* ELF .o/exec file reading */
2038
c044fabd 2039/* Create a new bfd section from an ELF section header. */
252b5132 2040
b34976b6 2041bfd_boolean
217aa764 2042bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
252b5132 2043{
4fbb74a6
AM
2044 Elf_Internal_Shdr *hdr;
2045 Elf_Internal_Ehdr *ehdr;
2046 const struct elf_backend_data *bed;
90937f86 2047 const char *name;
bf67003b
NC
2048 bfd_boolean ret = TRUE;
2049 static bfd_boolean * sections_being_created = NULL;
5a4b0ccc 2050 static bfd * sections_being_created_abfd = NULL;
bf67003b 2051 static unsigned int nesting = 0;
252b5132 2052
4fbb74a6
AM
2053 if (shindex >= elf_numsections (abfd))
2054 return FALSE;
2055
bf67003b
NC
2056 if (++ nesting > 3)
2057 {
2058 /* PR17512: A corrupt ELF binary might contain a recursive group of
67ce483b 2059 sections, with each the string indices pointing to the next in the
bf67003b
NC
2060 loop. Detect this here, by refusing to load a section that we are
2061 already in the process of loading. We only trigger this test if
2062 we have nested at least three sections deep as normal ELF binaries
5a4b0ccc
NC
2063 can expect to recurse at least once.
2064
2065 FIXME: It would be better if this array was attached to the bfd,
2066 rather than being held in a static pointer. */
2067
2068 if (sections_being_created_abfd != abfd)
2069 sections_being_created = NULL;
bf67003b
NC
2070 if (sections_being_created == NULL)
2071 {
bf67003b 2072 sections_being_created = (bfd_boolean *)
7a6e0d89 2073 bfd_zalloc2 (abfd, elf_numsections (abfd), sizeof (bfd_boolean));
96d3b80f
AM
2074 if (sections_being_created == NULL)
2075 return FALSE;
5a4b0ccc 2076 sections_being_created_abfd = abfd;
bf67003b
NC
2077 }
2078 if (sections_being_created [shindex])
2079 {
4eca0228 2080 _bfd_error_handler
871b3ab2 2081 (_("%pB: warning: loop in section dependencies detected"), abfd);
bf67003b
NC
2082 return FALSE;
2083 }
2084 sections_being_created [shindex] = TRUE;
2085 }
2086
4fbb74a6
AM
2087 hdr = elf_elfsections (abfd)[shindex];
2088 ehdr = elf_elfheader (abfd);
2089 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
1b3a8575 2090 hdr->sh_name);
933d961a 2091 if (name == NULL)
bf67003b 2092 goto fail;
252b5132 2093
4fbb74a6 2094 bed = get_elf_backend_data (abfd);
252b5132
RH
2095 switch (hdr->sh_type)
2096 {
2097 case SHT_NULL:
2098 /* Inactive section. Throw it away. */
bf67003b 2099 goto success;
252b5132 2100
bf67003b
NC
2101 case SHT_PROGBITS: /* Normal section with contents. */
2102 case SHT_NOBITS: /* .bss section. */
2103 case SHT_HASH: /* .hash section. */
2104 case SHT_NOTE: /* .note section. */
25e27870
L
2105 case SHT_INIT_ARRAY: /* .init_array section. */
2106 case SHT_FINI_ARRAY: /* .fini_array section. */
2107 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
7f1204bb 2108 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
fdc90cb4 2109 case SHT_GNU_HASH: /* .gnu.hash section. */
bf67003b
NC
2110 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2111 goto success;
252b5132 2112
797fc050 2113 case SHT_DYNAMIC: /* Dynamic linking information. */
6dc132d9 2114 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
bf67003b
NC
2115 goto fail;
2116
cfcac11d
NC
2117 if (hdr->sh_link > elf_numsections (abfd))
2118 {
caa83f8b 2119 /* PR 10478: Accept Solaris binaries with a sh_link
cfcac11d
NC
2120 field set to SHN_BEFORE or SHN_AFTER. */
2121 switch (bfd_get_arch (abfd))
2122 {
caa83f8b 2123 case bfd_arch_i386:
cfcac11d
NC
2124 case bfd_arch_sparc:
2125 if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
2126 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
2127 break;
2128 /* Otherwise fall through. */
2129 default:
bf67003b 2130 goto fail;
cfcac11d
NC
2131 }
2132 }
2133 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
bf67003b 2134 goto fail;
cfcac11d 2135 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
797fc050
AM
2136 {
2137 Elf_Internal_Shdr *dynsymhdr;
2138
2139 /* The shared libraries distributed with hpux11 have a bogus
2140 sh_link field for the ".dynamic" section. Find the
2141 string table for the ".dynsym" section instead. */
2142 if (elf_dynsymtab (abfd) != 0)
2143 {
2144 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2145 hdr->sh_link = dynsymhdr->sh_link;
2146 }
2147 else
2148 {
2149 unsigned int i, num_sec;
2150
2151 num_sec = elf_numsections (abfd);
2152 for (i = 1; i < num_sec; i++)
2153 {
2154 dynsymhdr = elf_elfsections (abfd)[i];
2155 if (dynsymhdr->sh_type == SHT_DYNSYM)
2156 {
2157 hdr->sh_link = dynsymhdr->sh_link;
2158 break;
2159 }
2160 }
2161 }
2162 }
bf67003b 2163 goto success;
797fc050 2164
bf67003b 2165 case SHT_SYMTAB: /* A symbol table. */
252b5132 2166 if (elf_onesymtab (abfd) == shindex)
bf67003b 2167 goto success;
252b5132 2168
a50b2160 2169 if (hdr->sh_entsize != bed->s->sizeof_sym)
bf67003b
NC
2170 goto fail;
2171
3337c1e5 2172 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
eee3b786
AM
2173 {
2174 if (hdr->sh_size != 0)
bf67003b 2175 goto fail;
eee3b786
AM
2176 /* Some assemblers erroneously set sh_info to one with a
2177 zero sh_size. ld sees this as a global symbol count
2178 of (unsigned) -1. Fix it here. */
2179 hdr->sh_info = 0;
bf67003b 2180 goto success;
eee3b786 2181 }
bf67003b 2182
16ad13ec
NC
2183 /* PR 18854: A binary might contain more than one symbol table.
2184 Unusual, but possible. Warn, but continue. */
2185 if (elf_onesymtab (abfd) != 0)
2186 {
4eca0228 2187 _bfd_error_handler
695344c0 2188 /* xgettext:c-format */
871b3ab2 2189 (_("%pB: warning: multiple symbol tables detected"
63a5468a 2190 " - ignoring the table in section %u"),
16ad13ec
NC
2191 abfd, shindex);
2192 goto success;
2193 }
252b5132 2194 elf_onesymtab (abfd) = shindex;
6a40cf0c
NC
2195 elf_symtab_hdr (abfd) = *hdr;
2196 elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
252b5132
RH
2197 abfd->flags |= HAS_SYMS;
2198
2199 /* Sometimes a shared object will map in the symbol table. If
08a40648
AM
2200 SHF_ALLOC is set, and this is a shared object, then we also
2201 treat this section as a BFD section. We can not base the
2202 decision purely on SHF_ALLOC, because that flag is sometimes
2203 set in a relocatable object file, which would confuse the
2204 linker. */
252b5132
RH
2205 if ((hdr->sh_flags & SHF_ALLOC) != 0
2206 && (abfd->flags & DYNAMIC) != 0
6dc132d9
L
2207 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2208 shindex))
bf67003b 2209 goto fail;
252b5132 2210
1b3a8575
AM
2211 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2212 can't read symbols without that section loaded as well. It
2213 is most likely specified by the next section header. */
6a40cf0c
NC
2214 {
2215 elf_section_list * entry;
2216 unsigned int i, num_sec;
1b3a8575 2217
6a40cf0c
NC
2218 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2219 if (entry->hdr.sh_link == shindex)
2220 goto success;
2221
2222 num_sec = elf_numsections (abfd);
2223 for (i = shindex + 1; i < num_sec; i++)
2224 {
2225 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2226
2227 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2228 && hdr2->sh_link == shindex)
2229 break;
2230 }
2231
2232 if (i == num_sec)
2233 for (i = 1; i < shindex; i++)
1b3a8575
AM
2234 {
2235 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
6a40cf0c 2236
1b3a8575
AM
2237 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2238 && hdr2->sh_link == shindex)
2239 break;
2240 }
6a40cf0c
NC
2241
2242 if (i != shindex)
2243 ret = bfd_section_from_shdr (abfd, i);
2244 /* else FIXME: we have failed to find the symbol table - should we issue an error ? */
2245 goto success;
2246 }
252b5132 2247
bf67003b 2248 case SHT_DYNSYM: /* A dynamic symbol table. */
252b5132 2249 if (elf_dynsymtab (abfd) == shindex)
bf67003b 2250 goto success;
252b5132 2251
a50b2160 2252 if (hdr->sh_entsize != bed->s->sizeof_sym)
bf67003b
NC
2253 goto fail;
2254
eee3b786
AM
2255 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2256 {
2257 if (hdr->sh_size != 0)
bf67003b
NC
2258 goto fail;
2259
eee3b786
AM
2260 /* Some linkers erroneously set sh_info to one with a
2261 zero sh_size. ld sees this as a global symbol count
2262 of (unsigned) -1. Fix it here. */
2263 hdr->sh_info = 0;
bf67003b 2264 goto success;
eee3b786 2265 }
bf67003b 2266
16ad13ec
NC
2267 /* PR 18854: A binary might contain more than one dynamic symbol table.
2268 Unusual, but possible. Warn, but continue. */
2269 if (elf_dynsymtab (abfd) != 0)
2270 {
4eca0228 2271 _bfd_error_handler
695344c0 2272 /* xgettext:c-format */
871b3ab2 2273 (_("%pB: warning: multiple dynamic symbol tables detected"
63a5468a 2274 " - ignoring the table in section %u"),
16ad13ec
NC
2275 abfd, shindex);
2276 goto success;
2277 }
252b5132
RH
2278 elf_dynsymtab (abfd) = shindex;
2279 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2280 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2281 abfd->flags |= HAS_SYMS;
2282
2283 /* Besides being a symbol table, we also treat this as a regular
2284 section, so that objcopy can handle it. */
bf67003b
NC
2285 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2286 goto success;
252b5132 2287
bf67003b 2288 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections. */
6a40cf0c
NC
2289 {
2290 elf_section_list * entry;
9ad5cbcf 2291
6a40cf0c
NC
2292 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2293 if (entry->ndx == shindex)
2294 goto success;
07d6d2b8 2295
7a6e0d89 2296 entry = bfd_alloc (abfd, sizeof (*entry));
6a40cf0c
NC
2297 if (entry == NULL)
2298 goto fail;
2299 entry->ndx = shindex;
2300 entry->hdr = * hdr;
2301 entry->next = elf_symtab_shndx_list (abfd);
2302 elf_symtab_shndx_list (abfd) = entry;
2303 elf_elfsections (abfd)[shindex] = & entry->hdr;
2304 goto success;
2305 }
9ad5cbcf 2306
bf67003b 2307 case SHT_STRTAB: /* A string table. */
252b5132 2308 if (hdr->bfd_section != NULL)
bf67003b
NC
2309 goto success;
2310
252b5132
RH
2311 if (ehdr->e_shstrndx == shindex)
2312 {
2313 elf_tdata (abfd)->shstrtab_hdr = *hdr;
2314 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
bf67003b 2315 goto success;
252b5132 2316 }
bf67003b 2317
1b3a8575
AM
2318 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2319 {
2320 symtab_strtab:
2321 elf_tdata (abfd)->strtab_hdr = *hdr;
2322 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
bf67003b 2323 goto success;
1b3a8575 2324 }
bf67003b 2325
1b3a8575
AM
2326 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2327 {
2328 dynsymtab_strtab:
2329 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2330 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2331 elf_elfsections (abfd)[shindex] = hdr;
2332 /* We also treat this as a regular section, so that objcopy
2333 can handle it. */
bf67003b
NC
2334 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2335 shindex);
2336 goto success;
1b3a8575 2337 }
252b5132 2338
1b3a8575
AM
2339 /* If the string table isn't one of the above, then treat it as a
2340 regular section. We need to scan all the headers to be sure,
2341 just in case this strtab section appeared before the above. */
2342 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2343 {
2344 unsigned int i, num_sec;
252b5132 2345
1b3a8575
AM
2346 num_sec = elf_numsections (abfd);
2347 for (i = 1; i < num_sec; i++)
2348 {
2349 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2350 if (hdr2->sh_link == shindex)
2351 {
933d961a
JJ
2352 /* Prevent endless recursion on broken objects. */
2353 if (i == shindex)
bf67003b 2354 goto fail;
1b3a8575 2355 if (! bfd_section_from_shdr (abfd, i))
bf67003b 2356 goto fail;
1b3a8575
AM
2357 if (elf_onesymtab (abfd) == i)
2358 goto symtab_strtab;
2359 if (elf_dynsymtab (abfd) == i)
2360 goto dynsymtab_strtab;
2361 }
2362 }
2363 }
bf67003b
NC
2364 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2365 goto success;
252b5132
RH
2366
2367 case SHT_REL:
2368 case SHT_RELA:
2369 /* *These* do a lot of work -- but build no sections! */
2370 {
2371 asection *target_sect;
d4730f92 2372 Elf_Internal_Shdr *hdr2, **p_hdr;
9ad5cbcf 2373 unsigned int num_sec = elf_numsections (abfd);
d4730f92 2374 struct bfd_elf_section_data *esdt;
252b5132 2375
aa2ca951
JJ
2376 if (hdr->sh_entsize
2377 != (bfd_size_type) (hdr->sh_type == SHT_REL
a50b2160 2378 ? bed->s->sizeof_rel : bed->s->sizeof_rela))
bf67003b 2379 goto fail;
a50b2160 2380
03ae5f59 2381 /* Check for a bogus link to avoid crashing. */
4fbb74a6 2382 if (hdr->sh_link >= num_sec)
03ae5f59 2383 {
4eca0228 2384 _bfd_error_handler
695344c0 2385 /* xgettext:c-format */
871b3ab2 2386 (_("%pB: invalid link %u for reloc section %s (index %u)"),
4eca0228 2387 abfd, hdr->sh_link, name, shindex);
bf67003b
NC
2388 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2389 shindex);
2390 goto success;
03ae5f59
ILT
2391 }
2392
252b5132
RH
2393 /* For some incomprehensible reason Oracle distributes
2394 libraries for Solaris in which some of the objects have
2395 bogus sh_link fields. It would be nice if we could just
2396 reject them, but, unfortunately, some people need to use
2397 them. We scan through the section headers; if we find only
2398 one suitable symbol table, we clobber the sh_link to point
83b89087
L
2399 to it. I hope this doesn't break anything.
2400
2401 Don't do it on executable nor shared library. */
2402 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
2403 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
252b5132
RH
2404 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
2405 {
9ad5cbcf 2406 unsigned int scan;
252b5132
RH
2407 int found;
2408
2409 found = 0;
9ad5cbcf 2410 for (scan = 1; scan < num_sec; scan++)
252b5132
RH
2411 {
2412 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
2413 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
2414 {
2415 if (found != 0)
2416 {
2417 found = 0;
2418 break;
2419 }
2420 found = scan;
2421 }
2422 }
2423 if (found != 0)
2424 hdr->sh_link = found;
2425 }
2426
2427 /* Get the symbol table. */
1b3a8575
AM
2428 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2429 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
252b5132 2430 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
bf67003b 2431 goto fail;
252b5132 2432
a4bcd733
AM
2433 /* If this is an alloc section in an executable or shared
2434 library, or the reloc section does not use the main symbol
2435 table we don't treat it as a reloc section. BFD can't
2436 adequately represent such a section, so at least for now,
2437 we don't try. We just present it as a normal section. We
2438 also can't use it as a reloc section if it points to the
2439 null section, an invalid section, another reloc section, or
2440 its sh_link points to the null section. */
2441 if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2442 && (hdr->sh_flags & SHF_ALLOC) != 0)
83b89087 2443 || hdr->sh_link == SHN_UNDEF
a4bcd733 2444 || hdr->sh_link != elf_onesymtab (abfd)
185ef66d 2445 || hdr->sh_info == SHN_UNDEF
185ef66d
AM
2446 || hdr->sh_info >= num_sec
2447 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2448 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
bf67003b
NC
2449 {
2450 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2451 shindex);
2452 goto success;
2453 }
252b5132
RH
2454
2455 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
bf67003b
NC
2456 goto fail;
2457
252b5132
RH
2458 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2459 if (target_sect == NULL)
bf67003b 2460 goto fail;
252b5132 2461
d4730f92
BS
2462 esdt = elf_section_data (target_sect);
2463 if (hdr->sh_type == SHT_RELA)
2464 p_hdr = &esdt->rela.hdr;
252b5132 2465 else
d4730f92
BS
2466 p_hdr = &esdt->rel.hdr;
2467
a7ba3896
NC
2468 /* PR 17512: file: 0b4f81b7.
2469 Also see PR 24456, for a file which deliberately has two reloc
2470 sections. */
06614111 2471 if (*p_hdr != NULL)
a7ba3896
NC
2472 {
2473 _bfd_error_handler
2474 /* xgettext:c-format */
2475 (_("%pB: warning: multiple relocation sections for section %pA \
2476found - ignoring all but the first"),
2477 abfd, target_sect);
2478 goto success;
2479 }
ef53be89 2480 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
d4730f92 2481 if (hdr2 == NULL)
bf67003b 2482 goto fail;
252b5132 2483 *hdr2 = *hdr;
d4730f92 2484 *p_hdr = hdr2;
252b5132 2485 elf_elfsections (abfd)[shindex] = hdr2;
056bafd4
MR
2486 target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2487 * bed->s->int_rels_per_ext_rel);
252b5132
RH
2488 target_sect->flags |= SEC_RELOC;
2489 target_sect->relocation = NULL;
2490 target_sect->rel_filepos = hdr->sh_offset;
bf572ba0
MM
2491 /* In the section to which the relocations apply, mark whether
2492 its relocations are of the REL or RELA variety. */
72730e0c 2493 if (hdr->sh_size != 0)
d4730f92
BS
2494 {
2495 if (hdr->sh_type == SHT_RELA)
2496 target_sect->use_rela_p = 1;
2497 }
252b5132 2498 abfd->flags |= HAS_RELOC;
bf67003b 2499 goto success;
252b5132 2500 }
252b5132
RH
2501
2502 case SHT_GNU_verdef:
2503 elf_dynverdef (abfd) = shindex;
2504 elf_tdata (abfd)->dynverdef_hdr = *hdr;
bf67003b
NC
2505 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2506 goto success;
252b5132
RH
2507
2508 case SHT_GNU_versym:
a50b2160 2509 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
bf67003b
NC
2510 goto fail;
2511
252b5132
RH
2512 elf_dynversym (abfd) = shindex;
2513 elf_tdata (abfd)->dynversym_hdr = *hdr;
bf67003b
NC
2514 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2515 goto success;
252b5132
RH
2516
2517 case SHT_GNU_verneed:
2518 elf_dynverref (abfd) = shindex;
2519 elf_tdata (abfd)->dynverref_hdr = *hdr;
bf67003b
NC
2520 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2521 goto success;
252b5132
RH
2522
2523 case SHT_SHLIB:
bf67003b 2524 goto success;
252b5132 2525
dbb410c3 2526 case SHT_GROUP:
44534af3 2527 if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
bf67003b
NC
2528 goto fail;
2529
6dc132d9 2530 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
bf67003b
NC
2531 goto fail;
2532
bf67003b 2533 goto success;
dbb410c3 2534
252b5132 2535 default:
104d59d1
JM
2536 /* Possibly an attributes section. */
2537 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
2538 || hdr->sh_type == bed->obj_attrs_section_type)
2539 {
2540 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
bf67003b 2541 goto fail;
104d59d1 2542 _bfd_elf_parse_attributes (abfd, hdr);
bf67003b 2543 goto success;
104d59d1
JM
2544 }
2545
252b5132 2546 /* Check for any processor-specific section types. */
3eb70a79 2547 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
bf67003b 2548 goto success;
3eb70a79
L
2549
2550 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2551 {
2552 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2553 /* FIXME: How to properly handle allocated section reserved
2554 for applications? */
4eca0228 2555 _bfd_error_handler
695344c0 2556 /* xgettext:c-format */
871b3ab2 2557 (_("%pB: unknown type [%#x] section `%s'"),
76cfced5 2558 abfd, hdr->sh_type, name);
3eb70a79 2559 else
bf67003b
NC
2560 {
2561 /* Allow sections reserved for applications. */
2562 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2563 shindex);
2564 goto success;
2565 }
3eb70a79
L
2566 }
2567 else if (hdr->sh_type >= SHT_LOPROC
2568 && hdr->sh_type <= SHT_HIPROC)
2569 /* FIXME: We should handle this section. */
4eca0228 2570 _bfd_error_handler
695344c0 2571 /* xgettext:c-format */
871b3ab2 2572 (_("%pB: unknown type [%#x] section `%s'"),
76cfced5 2573 abfd, hdr->sh_type, name);
3eb70a79 2574 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
ff15b240
NC
2575 {
2576 /* Unrecognised OS-specific sections. */
2577 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2578 /* SHF_OS_NONCONFORMING indicates that special knowledge is
08a40648 2579 required to correctly process the section and the file should
ff15b240 2580 be rejected with an error message. */
4eca0228 2581 _bfd_error_handler
695344c0 2582 /* xgettext:c-format */
871b3ab2 2583 (_("%pB: unknown type [%#x] section `%s'"),
76cfced5 2584 abfd, hdr->sh_type, name);
ff15b240 2585 else
bf67003b
NC
2586 {
2587 /* Otherwise it should be processed. */
2588 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2589 goto success;
2590 }
ff15b240 2591 }
3eb70a79
L
2592 else
2593 /* FIXME: We should handle this section. */
4eca0228 2594 _bfd_error_handler
695344c0 2595 /* xgettext:c-format */
871b3ab2 2596 (_("%pB: unknown type [%#x] section `%s'"),
76cfced5 2597 abfd, hdr->sh_type, name);
3eb70a79 2598
bf67003b 2599 goto fail;
252b5132
RH
2600 }
2601
bf67003b
NC
2602 fail:
2603 ret = FALSE;
2604 success:
e5b470e2 2605 if (sections_being_created && sections_being_created_abfd == abfd)
bf67003b
NC
2606 sections_being_created [shindex] = FALSE;
2607 if (-- nesting == 0)
5a4b0ccc
NC
2608 {
2609 sections_being_created = NULL;
2610 sections_being_created_abfd = abfd;
2611 }
bf67003b 2612 return ret;
252b5132
RH
2613}
2614
87d72d41 2615/* Return the local symbol specified by ABFD, R_SYMNDX. */
ec338859 2616
87d72d41
AM
2617Elf_Internal_Sym *
2618bfd_sym_from_r_symndx (struct sym_cache *cache,
2619 bfd *abfd,
2620 unsigned long r_symndx)
ec338859 2621{
ec338859
AM
2622 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2623
a5d1b3b5
AM
2624 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2625 {
2626 Elf_Internal_Shdr *symtab_hdr;
2627 unsigned char esym[sizeof (Elf64_External_Sym)];
2628 Elf_External_Sym_Shndx eshndx;
ec338859 2629
a5d1b3b5
AM
2630 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2631 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
87d72d41 2632 &cache->sym[ent], esym, &eshndx) == NULL)
a5d1b3b5 2633 return NULL;
9ad5cbcf 2634
a5d1b3b5
AM
2635 if (cache->abfd != abfd)
2636 {
2637 memset (cache->indx, -1, sizeof (cache->indx));
2638 cache->abfd = abfd;
2639 }
2640 cache->indx[ent] = r_symndx;
ec338859 2641 }
a5d1b3b5 2642
87d72d41 2643 return &cache->sym[ent];
ec338859
AM
2644}
2645
252b5132
RH
2646/* Given an ELF section number, retrieve the corresponding BFD
2647 section. */
2648
2649asection *
91d6fa6a 2650bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
252b5132 2651{
91d6fa6a 2652 if (sec_index >= elf_numsections (abfd))
252b5132 2653 return NULL;
91d6fa6a 2654 return elf_elfsections (abfd)[sec_index]->bfd_section;
252b5132
RH
2655}
2656
b35d266b 2657static const struct bfd_elf_special_section special_sections_b[] =
2f89ff8d 2658{
0112cd26 2659 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
07d6d2b8 2660 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2661};
2662
b35d266b 2663static const struct bfd_elf_special_section special_sections_c[] =
7f4d3958 2664{
0112cd26 2665 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
1ff6de03 2666 { STRING_COMMA_LEN (".ctf"), 0, SHT_PROGBITS, 0 },
07d6d2b8 2667 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2668};
2669
b35d266b 2670static const struct bfd_elf_special_section special_sections_d[] =
7f4d3958 2671{
07d6d2b8
AM
2672 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2673 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
a9a72a65
DE
2674 /* There are more DWARF sections than these, but they needn't be added here
2675 unless you have to cope with broken compilers that don't emit section
2676 attributes or you want to help the user writing assembler. */
07d6d2b8
AM
2677 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
2678 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
2679 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
2680 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
0112cd26 2681 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
07d6d2b8
AM
2682 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
2683 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
2684 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
2685 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2686};
2687
b35d266b 2688static const struct bfd_elf_special_section special_sections_f[] =
7f4d3958 2689{
07d6d2b8 2690 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
6f9dbcd4 2691 { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
07d6d2b8 2692 { NULL, 0 , 0, 0, 0 }
7f4d3958
L
2693};
2694
b35d266b 2695static const struct bfd_elf_special_section special_sections_g[] =
7f4d3958 2696{
0112cd26 2697 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
07d6d2b8
AM
2698 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE },
2699 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2700 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
0112cd26
NC
2701 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
2702 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
07d6d2b8
AM
2703 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2704 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
2705 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
2706 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2707};
2708
b35d266b 2709static const struct bfd_elf_special_section special_sections_h[] =
7f4d3958 2710{
07d6d2b8
AM
2711 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
2712 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2713};
2714
b35d266b 2715static const struct bfd_elf_special_section special_sections_i[] =
7f4d3958 2716{
07d6d2b8 2717 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
6f9dbcd4 2718 { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
07d6d2b8
AM
2719 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
2720 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2721};
2722
b35d266b 2723static const struct bfd_elf_special_section special_sections_l[] =
7f4d3958 2724{
0112cd26 2725 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
07d6d2b8 2726 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2727};
2728
b35d266b 2729static const struct bfd_elf_special_section special_sections_n[] =
7f4d3958 2730{
0112cd26 2731 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
07d6d2b8
AM
2732 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
2733 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2734};
2735
b35d266b 2736static const struct bfd_elf_special_section special_sections_p[] =
7f4d3958 2737{
6f9dbcd4 2738 { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
07d6d2b8
AM
2739 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2740 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2741};
2742
b35d266b 2743static const struct bfd_elf_special_section special_sections_r[] =
7f4d3958 2744{
0112cd26
NC
2745 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2746 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
07d6d2b8
AM
2747 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
2748 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
2749 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2750};
2751
b35d266b 2752static const struct bfd_elf_special_section special_sections_s[] =
7f4d3958 2753{
0112cd26
NC
2754 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2755 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
2756 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
60ff4dc4
HPN
2757 /* See struct bfd_elf_special_section declaration for the semantics of
2758 this special case where .prefix_length != strlen (.prefix). */
2759 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
07d6d2b8 2760 { NULL, 0, 0, 0, 0 }
2f89ff8d
L
2761};
2762
b35d266b 2763static const struct bfd_elf_special_section special_sections_t[] =
7f4d3958 2764{
07d6d2b8
AM
2765 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2766 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
0112cd26 2767 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
07d6d2b8 2768 { NULL, 0, 0, 0, 0 }
7f4d3958
L
2769};
2770
1b315056
CS
2771static const struct bfd_elf_special_section special_sections_z[] =
2772{
07d6d2b8
AM
2773 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
2774 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
1b315056
CS
2775 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
2776 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
07d6d2b8 2777 { NULL, 0, 0, 0, 0 }
1b315056
CS
2778};
2779
e4c93b56 2780static const struct bfd_elf_special_section * const special_sections[] =
7f4d3958 2781{
7f4d3958 2782 special_sections_b, /* 'b' */
98ece1b3 2783 special_sections_c, /* 'c' */
7f4d3958
L
2784 special_sections_d, /* 'd' */
2785 NULL, /* 'e' */
2786 special_sections_f, /* 'f' */
2787 special_sections_g, /* 'g' */
2788 special_sections_h, /* 'h' */
2789 special_sections_i, /* 'i' */
2790 NULL, /* 'j' */
2791 NULL, /* 'k' */
2792 special_sections_l, /* 'l' */
2793 NULL, /* 'm' */
2794 special_sections_n, /* 'n' */
2795 NULL, /* 'o' */
2796 special_sections_p, /* 'p' */
2797 NULL, /* 'q' */
2798 special_sections_r, /* 'r' */
2799 special_sections_s, /* 's' */
2800 special_sections_t, /* 't' */
1b315056
CS
2801 NULL, /* 'u' */
2802 NULL, /* 'v' */
2803 NULL, /* 'w' */
2804 NULL, /* 'x' */
2805 NULL, /* 'y' */
2806 special_sections_z /* 'z' */
7f4d3958
L
2807};
2808
551b43fd
AM
2809const struct bfd_elf_special_section *
2810_bfd_elf_get_special_section (const char *name,
2811 const struct bfd_elf_special_section *spec,
2812 unsigned int rela)
2f89ff8d
L
2813{
2814 int i;
7f4d3958 2815 int len;
7f4d3958 2816
551b43fd 2817 len = strlen (name);
7f4d3958 2818
551b43fd 2819 for (i = 0; spec[i].prefix != NULL; i++)
7dcb9820
AM
2820 {
2821 int suffix_len;
551b43fd 2822 int prefix_len = spec[i].prefix_length;
7dcb9820
AM
2823
2824 if (len < prefix_len)
2825 continue;
551b43fd 2826 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
7dcb9820
AM
2827 continue;
2828
551b43fd 2829 suffix_len = spec[i].suffix_length;
7dcb9820
AM
2830 if (suffix_len <= 0)
2831 {
2832 if (name[prefix_len] != 0)
2833 {
2834 if (suffix_len == 0)
2835 continue;
2836 if (name[prefix_len] != '.'
2837 && (suffix_len == -2
551b43fd 2838 || (rela && spec[i].type == SHT_REL)))
7dcb9820
AM
2839 continue;
2840 }
2841 }
2842 else
2843 {
2844 if (len < prefix_len + suffix_len)
2845 continue;
2846 if (memcmp (name + len - suffix_len,
551b43fd 2847 spec[i].prefix + prefix_len,
7dcb9820
AM
2848 suffix_len) != 0)
2849 continue;
2850 }
551b43fd 2851 return &spec[i];
7dcb9820 2852 }
2f89ff8d
L
2853
2854 return NULL;
2855}
2856
7dcb9820 2857const struct bfd_elf_special_section *
29ef7005 2858_bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2f89ff8d 2859{
551b43fd
AM
2860 int i;
2861 const struct bfd_elf_special_section *spec;
29ef7005 2862 const struct elf_backend_data *bed;
2f89ff8d
L
2863
2864 /* See if this is one of the special sections. */
551b43fd
AM
2865 if (sec->name == NULL)
2866 return NULL;
2f89ff8d 2867
29ef7005
L
2868 bed = get_elf_backend_data (abfd);
2869 spec = bed->special_sections;
2870 if (spec)
2871 {
2872 spec = _bfd_elf_get_special_section (sec->name,
2873 bed->special_sections,
2874 sec->use_rela_p);
2875 if (spec != NULL)
2876 return spec;
2877 }
2878
551b43fd
AM
2879 if (sec->name[0] != '.')
2880 return NULL;
2f89ff8d 2881
551b43fd 2882 i = sec->name[1] - 'b';
1b315056 2883 if (i < 0 || i > 'z' - 'b')
551b43fd
AM
2884 return NULL;
2885
2886 spec = special_sections[i];
2f89ff8d 2887
551b43fd
AM
2888 if (spec == NULL)
2889 return NULL;
2890
2891 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2f89ff8d
L
2892}
2893
b34976b6 2894bfd_boolean
217aa764 2895_bfd_elf_new_section_hook (bfd *abfd, asection *sec)
252b5132
RH
2896{
2897 struct bfd_elf_section_data *sdata;
551b43fd 2898 const struct elf_backend_data *bed;
7dcb9820 2899 const struct bfd_elf_special_section *ssect;
252b5132 2900
f0abc2a1
AM
2901 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2902 if (sdata == NULL)
2903 {
a50b1753 2904 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
07d6d2b8 2905 sizeof (*sdata));
f0abc2a1
AM
2906 if (sdata == NULL)
2907 return FALSE;
217aa764 2908 sec->used_by_bfd = sdata;
f0abc2a1 2909 }
bf572ba0 2910
551b43fd
AM
2911 /* Indicate whether or not this section should use RELA relocations. */
2912 bed = get_elf_backend_data (abfd);
2913 sec->use_rela_p = bed->default_use_rela_p;
2914
e843e0f8
L
2915 /* When we read a file, we don't need to set ELF section type and
2916 flags. They will be overridden in _bfd_elf_make_section_from_shdr
2917 anyway. We will set ELF section type and flags for all linker
2918 created sections. If user specifies BFD section flags, we will
2919 set ELF section type and flags based on BFD section flags in
02ecc8e9
L
2920 elf_fake_sections. Special handling for .init_array/.fini_array
2921 output sections since they may contain .ctors/.dtors input
2922 sections. We don't want _bfd_elf_init_private_section_data to
2923 copy ELF section type from .ctors/.dtors input sections. */
2924 if (abfd->direction != read_direction
3496cb2a 2925 || (sec->flags & SEC_LINKER_CREATED) != 0)
2f89ff8d 2926 {
551b43fd 2927 ssect = (*bed->get_sec_type_attr) (abfd, sec);
02ecc8e9
L
2928 if (ssect != NULL
2929 && (!sec->flags
2930 || (sec->flags & SEC_LINKER_CREATED) != 0
2931 || ssect->type == SHT_INIT_ARRAY
2932 || ssect->type == SHT_FINI_ARRAY))
a31501e9
L
2933 {
2934 elf_section_type (sec) = ssect->type;
2935 elf_section_flags (sec) = ssect->attr;
2936 }
2f89ff8d
L
2937 }
2938
f592407e 2939 return _bfd_generic_new_section_hook (abfd, sec);
252b5132
RH
2940}
2941
2942/* Create a new bfd section from an ELF program header.
2943
2944 Since program segments have no names, we generate a synthetic name
2945 of the form segment<NUM>, where NUM is generally the index in the
2946 program header table. For segments that are split (see below) we
2947 generate the names segment<NUM>a and segment<NUM>b.
2948
2949 Note that some program segments may have a file size that is different than
2950 (less than) the memory size. All this means is that at execution the
2951 system must allocate the amount of memory specified by the memory size,
2952 but only initialize it with the first "file size" bytes read from the
2953 file. This would occur for example, with program segments consisting
2954 of combined data+bss.
2955
2956 To handle the above situation, this routine generates TWO bfd sections
2957 for the single program segment. The first has the length specified by
2958 the file size of the segment, and the second has the length specified
2959 by the difference between the two sizes. In effect, the segment is split
d5191d0c 2960 into its initialized and uninitialized parts.
252b5132
RH
2961
2962 */
2963
b34976b6 2964bfd_boolean
217aa764
AM
2965_bfd_elf_make_section_from_phdr (bfd *abfd,
2966 Elf_Internal_Phdr *hdr,
91d6fa6a 2967 int hdr_index,
a50b1753 2968 const char *type_name)
252b5132
RH
2969{
2970 asection *newsect;
2971 char *name;
2972 char namebuf[64];
d4c88bbb 2973 size_t len;
252b5132
RH
2974 int split;
2975
2976 split = ((hdr->p_memsz > 0)
2977 && (hdr->p_filesz > 0)
2978 && (hdr->p_memsz > hdr->p_filesz));
d5191d0c
AM
2979
2980 if (hdr->p_filesz > 0)
252b5132 2981 {
91d6fa6a 2982 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
d5191d0c 2983 len = strlen (namebuf) + 1;
a50b1753 2984 name = (char *) bfd_alloc (abfd, len);
d5191d0c
AM
2985 if (!name)
2986 return FALSE;
2987 memcpy (name, namebuf, len);
2988 newsect = bfd_make_section (abfd, name);
2989 if (newsect == NULL)
2990 return FALSE;
2991 newsect->vma = hdr->p_vaddr;
2992 newsect->lma = hdr->p_paddr;
2993 newsect->size = hdr->p_filesz;
2994 newsect->filepos = hdr->p_offset;
2995 newsect->flags |= SEC_HAS_CONTENTS;
2996 newsect->alignment_power = bfd_log2 (hdr->p_align);
2997 if (hdr->p_type == PT_LOAD)
252b5132 2998 {
d5191d0c
AM
2999 newsect->flags |= SEC_ALLOC;
3000 newsect->flags |= SEC_LOAD;
3001 if (hdr->p_flags & PF_X)
3002 {
3003 /* FIXME: all we known is that it has execute PERMISSION,
3004 may be data. */
3005 newsect->flags |= SEC_CODE;
3006 }
3007 }
3008 if (!(hdr->p_flags & PF_W))
3009 {
3010 newsect->flags |= SEC_READONLY;
252b5132 3011 }
252b5132
RH
3012 }
3013
d5191d0c 3014 if (hdr->p_memsz > hdr->p_filesz)
252b5132 3015 {
d5191d0c
AM
3016 bfd_vma align;
3017
91d6fa6a 3018 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
d4c88bbb 3019 len = strlen (namebuf) + 1;
a50b1753 3020 name = (char *) bfd_alloc (abfd, len);
252b5132 3021 if (!name)
b34976b6 3022 return FALSE;
d4c88bbb 3023 memcpy (name, namebuf, len);
252b5132
RH
3024 newsect = bfd_make_section (abfd, name);
3025 if (newsect == NULL)
b34976b6 3026 return FALSE;
252b5132
RH
3027 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
3028 newsect->lma = hdr->p_paddr + hdr->p_filesz;
eea6121a 3029 newsect->size = hdr->p_memsz - hdr->p_filesz;
d5191d0c
AM
3030 newsect->filepos = hdr->p_offset + hdr->p_filesz;
3031 align = newsect->vma & -newsect->vma;
3032 if (align == 0 || align > hdr->p_align)
3033 align = hdr->p_align;
3034 newsect->alignment_power = bfd_log2 (align);
252b5132
RH
3035 if (hdr->p_type == PT_LOAD)
3036 {
d5191d0c
AM
3037 /* Hack for gdb. Segments that have not been modified do
3038 not have their contents written to a core file, on the
3039 assumption that a debugger can find the contents in the
3040 executable. We flag this case by setting the fake
3041 section size to zero. Note that "real" bss sections will
3042 always have their contents dumped to the core file. */
3043 if (bfd_get_format (abfd) == bfd_core)
3044 newsect->size = 0;
252b5132
RH
3045 newsect->flags |= SEC_ALLOC;
3046 if (hdr->p_flags & PF_X)
3047 newsect->flags |= SEC_CODE;
3048 }
3049 if (!(hdr->p_flags & PF_W))
3050 newsect->flags |= SEC_READONLY;
3051 }
3052
b34976b6 3053 return TRUE;
252b5132
RH
3054}
3055
864619bb
KS
3056static bfd_boolean
3057_bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3058{
3059 /* The return value is ignored. Build-ids are considered optional. */
3060 if (templ->xvec->flavour == bfd_target_elf_flavour)
3061 return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3062 (templ, offset);
3063 return FALSE;
3064}
3065
b34976b6 3066bfd_boolean
91d6fa6a 3067bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
20cfcaae 3068{
9c5bfbb7 3069 const struct elf_backend_data *bed;
20cfcaae
NC
3070
3071 switch (hdr->p_type)
3072 {
3073 case PT_NULL:
91d6fa6a 3074 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
20cfcaae
NC
3075
3076 case PT_LOAD:
864619bb
KS
3077 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3078 return FALSE;
3079 if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3080 _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3081 return TRUE;
20cfcaae
NC
3082
3083 case PT_DYNAMIC:
91d6fa6a 3084 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
20cfcaae
NC
3085
3086 case PT_INTERP:
91d6fa6a 3087 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
20cfcaae
NC
3088
3089 case PT_NOTE:
91d6fa6a 3090 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
b34976b6 3091 return FALSE;
276da9b3
L
3092 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3093 hdr->p_align))
b34976b6
AM
3094 return FALSE;
3095 return TRUE;
20cfcaae
NC
3096
3097 case PT_SHLIB:
91d6fa6a 3098 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
20cfcaae
NC
3099
3100 case PT_PHDR:
91d6fa6a 3101 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
20cfcaae 3102
811072d8 3103 case PT_GNU_EH_FRAME:
91d6fa6a 3104 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
811072d8
RM
3105 "eh_frame_hdr");
3106
2b05f1b7 3107 case PT_GNU_STACK:
91d6fa6a 3108 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
9ee5e499 3109
8c37241b 3110 case PT_GNU_RELRO:
91d6fa6a 3111 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
8c37241b 3112
20cfcaae 3113 default:
8c1acd09 3114 /* Check for any processor-specific program segment types. */
20cfcaae 3115 bed = get_elf_backend_data (abfd);
91d6fa6a 3116 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
20cfcaae
NC
3117 }
3118}
3119
d4730f92
BS
3120/* Return the REL_HDR for SEC, assuming there is only a single one, either
3121 REL or RELA. */
3122
3123Elf_Internal_Shdr *
3124_bfd_elf_single_rel_hdr (asection *sec)
3125{
3126 if (elf_section_data (sec)->rel.hdr)
3127 {
3128 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3129 return elf_section_data (sec)->rel.hdr;
3130 }
3131 else
3132 return elf_section_data (sec)->rela.hdr;
3133}
3134
3e19fb8f
L
3135static bfd_boolean
3136_bfd_elf_set_reloc_sh_name (bfd *abfd,
3137 Elf_Internal_Shdr *rel_hdr,
3138 const char *sec_name,
3139 bfd_boolean use_rela_p)
3140{
3141 char *name = (char *) bfd_alloc (abfd,
3142 sizeof ".rela" + strlen (sec_name));
3143 if (name == NULL)
3144 return FALSE;
3145
3146 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3147 rel_hdr->sh_name =
3148 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3149 FALSE);
3150 if (rel_hdr->sh_name == (unsigned int) -1)
3151 return FALSE;
3152
3153 return TRUE;
3154}
3155
d4730f92
BS
3156/* Allocate and initialize a section-header for a new reloc section,
3157 containing relocations against ASECT. It is stored in RELDATA. If
3158 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3159 relocations. */
23bc299b 3160
5d13b3b3 3161static bfd_boolean
217aa764 3162_bfd_elf_init_reloc_shdr (bfd *abfd,
d4730f92 3163 struct bfd_elf_section_reloc_data *reldata,
f6fe1ccd 3164 const char *sec_name,
3e19fb8f
L
3165 bfd_boolean use_rela_p,
3166 bfd_boolean delay_st_name_p)
23bc299b 3167{
d4730f92 3168 Elf_Internal_Shdr *rel_hdr;
9c5bfbb7 3169 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
d4730f92 3170
d4730f92 3171 BFD_ASSERT (reldata->hdr == NULL);
ef53be89 3172 rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
d4730f92 3173 reldata->hdr = rel_hdr;
23bc299b 3174
3e19fb8f
L
3175 if (delay_st_name_p)
3176 rel_hdr->sh_name = (unsigned int) -1;
3177 else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3178 use_rela_p))
b34976b6 3179 return FALSE;
23bc299b
MM
3180 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3181 rel_hdr->sh_entsize = (use_rela_p
3182 ? bed->s->sizeof_rela
3183 : bed->s->sizeof_rel);
72de5009 3184 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
28e07a05 3185 rel_hdr->sh_flags = 0;
23bc299b
MM
3186 rel_hdr->sh_addr = 0;
3187 rel_hdr->sh_size = 0;
3188 rel_hdr->sh_offset = 0;
3189
b34976b6 3190 return TRUE;
23bc299b
MM
3191}
3192
94be91de
JB
3193/* Return the default section type based on the passed in section flags. */
3194
3195int
3196bfd_elf_get_default_section_type (flagword flags)
3197{
0e41bebb 3198 if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
2e76e85a 3199 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
94be91de
JB
3200 return SHT_NOBITS;
3201 return SHT_PROGBITS;
3202}
3203
d4730f92
BS
3204struct fake_section_arg
3205{
3206 struct bfd_link_info *link_info;
3207 bfd_boolean failed;
3208};
3209
252b5132
RH
3210/* Set up an ELF internal section header for a section. */
3211
252b5132 3212static void
d4730f92 3213elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
252b5132 3214{
d4730f92 3215 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
9c5bfbb7 3216 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
d4730f92 3217 struct bfd_elf_section_data *esd = elf_section_data (asect);
252b5132 3218 Elf_Internal_Shdr *this_hdr;
0414f35b 3219 unsigned int sh_type;
0ce398f1 3220 const char *name = asect->name;
3e19fb8f 3221 bfd_boolean delay_st_name_p = FALSE;
252b5132 3222
d4730f92 3223 if (arg->failed)
252b5132
RH
3224 {
3225 /* We already failed; just get out of the bfd_map_over_sections
08a40648 3226 loop. */
252b5132
RH
3227 return;
3228 }
3229
d4730f92 3230 this_hdr = &esd->this_hdr;
252b5132 3231
f6fe1ccd 3232 if (arg->link_info)
0ce398f1 3233 {
f6fe1ccd
L
3234 /* ld: compress DWARF debug sections with names: .debug_*. */
3235 if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
3236 && (asect->flags & SEC_DEBUGGING)
3237 && name[1] == 'd'
3238 && name[6] == '_')
3239 {
3240 /* Set SEC_ELF_COMPRESS to indicate this section should be
3241 compressed. */
3242 asect->flags |= SEC_ELF_COMPRESS;
0ce398f1 3243
dd905818 3244 /* If this section will be compressed, delay adding section
3e19fb8f
L
3245 name to section name section after it is compressed in
3246 _bfd_elf_assign_file_positions_for_non_load. */
3247 delay_st_name_p = TRUE;
f6fe1ccd
L
3248 }
3249 }
3250 else if ((asect->flags & SEC_ELF_RENAME))
3251 {
3252 /* objcopy: rename output DWARF debug section. */
3253 if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
3254 {
3255 /* When we decompress or compress with SHF_COMPRESSED,
3256 convert section name from .zdebug_* to .debug_* if
3257 needed. */
3258 if (name[1] == 'z')
3259 {
3260 char *new_name = convert_zdebug_to_debug (abfd, name);
3261 if (new_name == NULL)
3262 {
3263 arg->failed = TRUE;
3264 return;
3265 }
3266 name = new_name;
3267 }
3268 }
3269 else if (asect->compress_status == COMPRESS_SECTION_DONE)
0ce398f1 3270 {
f6fe1ccd
L
3271 /* PR binutils/18087: Compression does not always make a
3272 section smaller. So only rename the section when
3273 compression has actually taken place. If input section
3274 name is .zdebug_*, we should never compress it again. */
3275 char *new_name = convert_debug_to_zdebug (abfd, name);
0ce398f1
L
3276 if (new_name == NULL)
3277 {
3278 arg->failed = TRUE;
3279 return;
3280 }
f6fe1ccd
L
3281 BFD_ASSERT (name[1] != 'z');
3282 name = new_name;
0ce398f1
L
3283 }
3284 }
3285
3e19fb8f
L
3286 if (delay_st_name_p)
3287 this_hdr->sh_name = (unsigned int) -1;
3288 else
252b5132 3289 {
3e19fb8f
L
3290 this_hdr->sh_name
3291 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3292 name, FALSE);
3293 if (this_hdr->sh_name == (unsigned int) -1)
3294 {
3295 arg->failed = TRUE;
3296 return;
3297 }
252b5132
RH
3298 }
3299
a4d8e49b 3300 /* Don't clear sh_flags. Assembler may set additional bits. */
252b5132
RH
3301
3302 if ((asect->flags & SEC_ALLOC) != 0
3303 || asect->user_set_vma)
3304 this_hdr->sh_addr = asect->vma;
3305 else
3306 this_hdr->sh_addr = 0;
3307
3308 this_hdr->sh_offset = 0;
eea6121a 3309 this_hdr->sh_size = asect->size;
252b5132 3310 this_hdr->sh_link = 0;
c86934ce
NC
3311 /* PR 17512: file: 0eb809fe, 8b0535ee. */
3312 if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3313 {
4eca0228 3314 _bfd_error_handler
695344c0 3315 /* xgettext:c-format */
9793eb77 3316 (_("%pB: error: alignment power %d of section `%pA' is too big"),
c08bb8dd 3317 abfd, asect->alignment_power, asect);
c86934ce
NC
3318 arg->failed = TRUE;
3319 return;
3320 }
72de5009 3321 this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power;
252b5132
RH
3322 /* The sh_entsize and sh_info fields may have been set already by
3323 copy_private_section_data. */
3324
3325 this_hdr->bfd_section = asect;
3326 this_hdr->contents = NULL;
3327
3cddba1e
L
3328 /* If the section type is unspecified, we set it based on
3329 asect->flags. */
98ece1b3
AM
3330 if ((asect->flags & SEC_GROUP) != 0)
3331 sh_type = SHT_GROUP;
98ece1b3 3332 else
94be91de 3333 sh_type = bfd_elf_get_default_section_type (asect->flags);
98ece1b3 3334
3cddba1e 3335 if (this_hdr->sh_type == SHT_NULL)
98ece1b3
AM
3336 this_hdr->sh_type = sh_type;
3337 else if (this_hdr->sh_type == SHT_NOBITS
3338 && sh_type == SHT_PROGBITS
3339 && (asect->flags & SEC_ALLOC) != 0)
3cddba1e 3340 {
98ece1b3
AM
3341 /* Warn if we are changing a NOBITS section to PROGBITS, but
3342 allow the link to proceed. This can happen when users link
3343 non-bss input sections to bss output sections, or emit data
3344 to a bss output section via a linker script. */
4eca0228 3345 _bfd_error_handler
871b3ab2 3346 (_("warning: section `%pA' type changed to PROGBITS"), asect);
98ece1b3 3347 this_hdr->sh_type = sh_type;
3cddba1e
L
3348 }
3349
2f89ff8d 3350 switch (this_hdr->sh_type)
252b5132 3351 {
2f89ff8d 3352 default:
2f89ff8d
L
3353 break;
3354
3355 case SHT_STRTAB:
2f89ff8d
L
3356 case SHT_NOTE:
3357 case SHT_NOBITS:
3358 case SHT_PROGBITS:
3359 break;
606851fb
AM
3360
3361 case SHT_INIT_ARRAY:
3362 case SHT_FINI_ARRAY:
3363 case SHT_PREINIT_ARRAY:
3364 this_hdr->sh_entsize = bed->s->arch_size / 8;
3365 break;
2f89ff8d
L
3366
3367 case SHT_HASH:
c7ac6ff8 3368 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
2f89ff8d 3369 break;
5de3bf90 3370
2f89ff8d 3371 case SHT_DYNSYM:
252b5132 3372 this_hdr->sh_entsize = bed->s->sizeof_sym;
2f89ff8d
L
3373 break;
3374
3375 case SHT_DYNAMIC:
252b5132 3376 this_hdr->sh_entsize = bed->s->sizeof_dyn;
2f89ff8d
L
3377 break;
3378
3379 case SHT_RELA:
3380 if (get_elf_backend_data (abfd)->may_use_rela_p)
3381 this_hdr->sh_entsize = bed->s->sizeof_rela;
3382 break;
3383
3384 case SHT_REL:
3385 if (get_elf_backend_data (abfd)->may_use_rel_p)
3386 this_hdr->sh_entsize = bed->s->sizeof_rel;
3387 break;
3388
3389 case SHT_GNU_versym:
252b5132 3390 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
2f89ff8d
L
3391 break;
3392
3393 case SHT_GNU_verdef:
252b5132
RH
3394 this_hdr->sh_entsize = 0;
3395 /* objcopy or strip will copy over sh_info, but may not set
08a40648
AM
3396 cverdefs. The linker will set cverdefs, but sh_info will be
3397 zero. */
252b5132
RH
3398 if (this_hdr->sh_info == 0)
3399 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3400 else
3401 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3402 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
2f89ff8d
L
3403 break;
3404
3405 case SHT_GNU_verneed:
252b5132
RH
3406 this_hdr->sh_entsize = 0;
3407 /* objcopy or strip will copy over sh_info, but may not set
08a40648
AM
3408 cverrefs. The linker will set cverrefs, but sh_info will be
3409 zero. */
252b5132
RH
3410 if (this_hdr->sh_info == 0)
3411 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3412 else
3413 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3414 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
2f89ff8d
L
3415 break;
3416
3417 case SHT_GROUP:
1783205a 3418 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
2f89ff8d 3419 break;
fdc90cb4
JJ
3420
3421 case SHT_GNU_HASH:
3422 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3423 break;
dbb410c3 3424 }
252b5132
RH
3425
3426 if ((asect->flags & SEC_ALLOC) != 0)
3427 this_hdr->sh_flags |= SHF_ALLOC;
3428 if ((asect->flags & SEC_READONLY) == 0)
3429 this_hdr->sh_flags |= SHF_WRITE;
3430 if ((asect->flags & SEC_CODE) != 0)
3431 this_hdr->sh_flags |= SHF_EXECINSTR;
f5fa8ca2
JJ
3432 if ((asect->flags & SEC_MERGE) != 0)
3433 {
3434 this_hdr->sh_flags |= SHF_MERGE;
3435 this_hdr->sh_entsize = asect->entsize;
f5fa8ca2 3436 }
84865015
NC
3437 if ((asect->flags & SEC_STRINGS) != 0)
3438 this_hdr->sh_flags |= SHF_STRINGS;
1126897b 3439 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
dbb410c3 3440 this_hdr->sh_flags |= SHF_GROUP;
13ae64f3 3441 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
704afa60
JJ
3442 {
3443 this_hdr->sh_flags |= SHF_TLS;
3a800eb9
AM
3444 if (asect->size == 0
3445 && (asect->flags & SEC_HAS_CONTENTS) == 0)
704afa60 3446 {
3a800eb9 3447 struct bfd_link_order *o = asect->map_tail.link_order;
b34976b6 3448
704afa60 3449 this_hdr->sh_size = 0;
3a800eb9
AM
3450 if (o != NULL)
3451 {
704afa60 3452 this_hdr->sh_size = o->offset + o->size;
3a800eb9
AM
3453 if (this_hdr->sh_size != 0)
3454 this_hdr->sh_type = SHT_NOBITS;
3455 }
704afa60
JJ
3456 }
3457 }
18ae9cc1
L
3458 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3459 this_hdr->sh_flags |= SHF_EXCLUDE;
252b5132 3460
d4730f92
BS
3461 /* If the section has relocs, set up a section header for the
3462 SHT_REL[A] section. If two relocation sections are required for
3463 this section, it is up to the processor-specific back-end to
3464 create the other. */
3465 if ((asect->flags & SEC_RELOC) != 0)
3466 {
3467 /* When doing a relocatable link, create both REL and RELA sections if
3468 needed. */
3469 if (arg->link_info
3470 /* Do the normal setup if we wouldn't create any sections here. */
3471 && esd->rel.count + esd->rela.count > 0
0e1862bb
L
3472 && (bfd_link_relocatable (arg->link_info)
3473 || arg->link_info->emitrelocations))
d4730f92
BS
3474 {
3475 if (esd->rel.count && esd->rel.hdr == NULL
28e07a05 3476 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
db4677b8 3477 FALSE, delay_st_name_p))
d4730f92
BS
3478 {
3479 arg->failed = TRUE;
3480 return;
3481 }
3482 if (esd->rela.count && esd->rela.hdr == NULL
28e07a05 3483 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
db4677b8 3484 TRUE, delay_st_name_p))
d4730f92
BS
3485 {
3486 arg->failed = TRUE;
3487 return;
3488 }
3489 }
3490 else if (!_bfd_elf_init_reloc_shdr (abfd,
3491 (asect->use_rela_p
3492 ? &esd->rela : &esd->rel),
f6fe1ccd 3493 name,
3e19fb8f
L
3494 asect->use_rela_p,
3495 delay_st_name_p))
db4677b8 3496 {
d4730f92 3497 arg->failed = TRUE;
db4677b8
AM
3498 return;
3499 }
d4730f92
BS
3500 }
3501
252b5132 3502 /* Check for processor-specific section types. */
0414f35b 3503 sh_type = this_hdr->sh_type;
e1fddb6b
AO
3504 if (bed->elf_backend_fake_sections
3505 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
db4677b8
AM
3506 {
3507 arg->failed = TRUE;
3508 return;
3509 }
252b5132 3510
42bb2e33 3511 if (sh_type == SHT_NOBITS && asect->size != 0)
0414f35b
AM
3512 {
3513 /* Don't change the header type from NOBITS if we are being
42bb2e33 3514 called for objcopy --only-keep-debug. */
0414f35b
AM
3515 this_hdr->sh_type = sh_type;
3516 }
252b5132
RH
3517}
3518
bcacc0f5
AM
3519/* Fill in the contents of a SHT_GROUP section. Called from
3520 _bfd_elf_compute_section_file_positions for gas, objcopy, and
3521 when ELF targets use the generic linker, ld. Called for ld -r
3522 from bfd_elf_final_link. */
dbb410c3 3523
1126897b 3524void
217aa764 3525bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
dbb410c3 3526{
a50b1753 3527 bfd_boolean *failedptr = (bfd_boolean *) failedptrarg;
9dce4196 3528 asection *elt, *first;
dbb410c3 3529 unsigned char *loc;
b34976b6 3530 bfd_boolean gas;
dbb410c3 3531
7e4111ad
L
3532 /* Ignore linker created group section. See elfNN_ia64_object_p in
3533 elfxx-ia64.c. */
ce5aecf8
AM
3534 if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3535 || sec->size == 0
dbb410c3
AM
3536 || *failedptr)
3537 return;
3538
bcacc0f5
AM
3539 if (elf_section_data (sec)->this_hdr.sh_info == 0)
3540 {
3541 unsigned long symindx = 0;
3542
3543 /* elf_group_id will have been set up by objcopy and the
3544 generic linker. */
3545 if (elf_group_id (sec) != NULL)
3546 symindx = elf_group_id (sec)->udata.i;
1126897b 3547
bcacc0f5
AM
3548 if (symindx == 0)
3549 {
3550 /* If called from the assembler, swap_out_syms will have set up
3551 elf_section_syms. */
3552 BFD_ASSERT (elf_section_syms (abfd) != NULL);
3553 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3554 }
3555 elf_section_data (sec)->this_hdr.sh_info = symindx;
3556 }
3557 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
1126897b 3558 {
bcacc0f5
AM
3559 /* The ELF backend linker sets sh_info to -2 when the group
3560 signature symbol is global, and thus the index can't be
3561 set until all local symbols are output. */
53720c49
AM
3562 asection *igroup;
3563 struct bfd_elf_section_data *sec_data;
3564 unsigned long symndx;
3565 unsigned long extsymoff;
bcacc0f5
AM
3566 struct elf_link_hash_entry *h;
3567
53720c49
AM
3568 /* The point of this little dance to the first SHF_GROUP section
3569 then back to the SHT_GROUP section is that this gets us to
3570 the SHT_GROUP in the input object. */
3571 igroup = elf_sec_group (elf_next_in_group (sec));
3572 sec_data = elf_section_data (igroup);
3573 symndx = sec_data->this_hdr.sh_info;
3574 extsymoff = 0;
bcacc0f5
AM
3575 if (!elf_bad_symtab (igroup->owner))
3576 {
3577 Elf_Internal_Shdr *symtab_hdr;
3578
3579 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3580 extsymoff = symtab_hdr->sh_info;
3581 }
3582 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3583 while (h->root.type == bfd_link_hash_indirect
3584 || h->root.type == bfd_link_hash_warning)
3585 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3586
3587 elf_section_data (sec)->this_hdr.sh_info = h->indx;
1126897b 3588 }
dbb410c3 3589
1126897b 3590 /* The contents won't be allocated for "ld -r" or objcopy. */
b34976b6 3591 gas = TRUE;
dbb410c3
AM
3592 if (sec->contents == NULL)
3593 {
b34976b6 3594 gas = FALSE;
a50b1753 3595 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
9dce4196
AM
3596
3597 /* Arrange for the section to be written out. */
3598 elf_section_data (sec)->this_hdr.contents = sec->contents;
dbb410c3
AM
3599 if (sec->contents == NULL)
3600 {
b34976b6 3601 *failedptr = TRUE;
dbb410c3
AM
3602 return;
3603 }
3604 }
3605
eea6121a 3606 loc = sec->contents + sec->size;
dbb410c3 3607
9dce4196
AM
3608 /* Get the pointer to the first section in the group that gas
3609 squirreled away here. objcopy arranges for this to be set to the
3610 start of the input section group. */
3611 first = elt = elf_next_in_group (sec);
dbb410c3
AM
3612
3613 /* First element is a flag word. Rest of section is elf section
3614 indices for all the sections of the group. Write them backwards
3615 just to keep the group in the same order as given in .section
3616 directives, not that it matters. */
3617 while (elt != NULL)
3618 {
9dce4196 3619 asection *s;
9dce4196 3620
9dce4196 3621 s = elt;
415f38a6
AM
3622 if (!gas)
3623 s = s->output_section;
3624 if (s != NULL
3625 && !bfd_is_abs_section (s))
01e1a5bc 3626 {
db4677b8 3627 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
28e07a05
AM
3628 struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
3629
3630 if (elf_sec->rel.hdr != NULL
3631 && (gas
3632 || (input_elf_sec->rel.hdr != NULL
3633 && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
db4677b8 3634 {
28e07a05 3635 elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
db4677b8
AM
3636 loc -= 4;
3637 H_PUT_32 (abfd, elf_sec->rel.idx, loc);
3638 }
28e07a05
AM
3639 if (elf_sec->rela.hdr != NULL
3640 && (gas
3641 || (input_elf_sec->rela.hdr != NULL
3642 && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
db4677b8 3643 {
28e07a05 3644 elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
db4677b8
AM
3645 loc -= 4;
3646 H_PUT_32 (abfd, elf_sec->rela.idx, loc);
3647 }
01e1a5bc 3648 loc -= 4;
db4677b8 3649 H_PUT_32 (abfd, elf_sec->this_idx, loc);
01e1a5bc 3650 }
945906ff 3651 elt = elf_next_in_group (elt);
9dce4196
AM
3652 if (elt == first)
3653 break;
dbb410c3
AM
3654 }
3655
7bdf4127
AB
3656 loc -= 4;
3657 BFD_ASSERT (loc == sec->contents);
dbb410c3 3658
9dce4196 3659 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
dbb410c3
AM
3660}
3661
bce964aa
AM
3662/* Given NAME, the name of a relocation section stripped of its
3663 .rel/.rela prefix, return the section in ABFD to which the
3664 relocations apply. */
bd53a53a
L
3665
3666asection *
bce964aa
AM
3667_bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
3668{
3669 /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
3670 section likely apply to .got.plt or .got section. */
3671 if (get_elf_backend_data (abfd)->want_got_plt
3672 && strcmp (name, ".plt") == 0)
3673 {
3674 asection *sec;
3675
3676 name = ".got.plt";
3677 sec = bfd_get_section_by_name (abfd, name);
3678 if (sec != NULL)
3679 return sec;
3680 name = ".got";
3681 }
3682
3683 return bfd_get_section_by_name (abfd, name);
3684}
3685
3686/* Return the section to which RELOC_SEC applies. */
3687
3688static asection *
3689elf_get_reloc_section (asection *reloc_sec)
bd53a53a
L
3690{
3691 const char *name;
3692 unsigned int type;
3693 bfd *abfd;
bce964aa 3694 const struct elf_backend_data *bed;
bd53a53a
L
3695
3696 type = elf_section_data (reloc_sec)->this_hdr.sh_type;
3697 if (type != SHT_REL && type != SHT_RELA)
3698 return NULL;
3699
3700 /* We look up the section the relocs apply to by name. */
3701 name = reloc_sec->name;
bce964aa
AM
3702 if (strncmp (name, ".rel", 4) != 0)
3703 return NULL;
3704 name += 4;
3705 if (type == SHT_RELA && *name++ != 'a')
3706 return NULL;
bd53a53a 3707
bd53a53a 3708 abfd = reloc_sec->owner;
bce964aa
AM
3709 bed = get_elf_backend_data (abfd);
3710 return bed->get_reloc_section (abfd, name);
bd53a53a
L
3711}
3712
252b5132
RH
3713/* Assign all ELF section numbers. The dummy first section is handled here
3714 too. The link/info pointers for the standard section types are filled
3715 in here too, while we're at it. */
3716
b34976b6 3717static bfd_boolean
da9f89d4 3718assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
252b5132
RH
3719{
3720 struct elf_obj_tdata *t = elf_tdata (abfd);
3721 asection *sec;
3e19fb8f 3722 unsigned int section_number;
252b5132 3723 Elf_Internal_Shdr **i_shdrp;
47cc2cf5 3724 struct bfd_elf_section_data *d;
3516e984 3725 bfd_boolean need_symtab;
252b5132
RH
3726
3727 section_number = 1;
3728
2b0f7ef9
JJ
3729 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
3730
da9f89d4 3731 /* SHT_GROUP sections are in relocatable files only. */
7bdf4127 3732 if (link_info == NULL || !link_info->resolve_section_groups)
252b5132 3733 {
ef53be89 3734 size_t reloc_count = 0;
14f2c699 3735
da9f89d4 3736 /* Put SHT_GROUP sections first. */
04dd1667 3737 for (sec = abfd->sections; sec != NULL; sec = sec->next)
47cc2cf5 3738 {
5daa8fe7 3739 d = elf_section_data (sec);
da9f89d4
L
3740
3741 if (d->this_hdr.sh_type == SHT_GROUP)
08a40648 3742 {
5daa8fe7 3743 if (sec->flags & SEC_LINKER_CREATED)
da9f89d4
L
3744 {
3745 /* Remove the linker created SHT_GROUP sections. */
5daa8fe7 3746 bfd_section_list_remove (abfd, sec);
da9f89d4 3747 abfd->section_count--;
da9f89d4 3748 }
08a40648 3749 else
4fbb74a6 3750 d->this_idx = section_number++;
da9f89d4 3751 }
14f2c699
L
3752
3753 /* Count relocations. */
3754 reloc_count += sec->reloc_count;
47cc2cf5 3755 }
14f2c699
L
3756
3757 /* Clear HAS_RELOC if there are no relocations. */
3758 if (reloc_count == 0)
3759 abfd->flags &= ~HAS_RELOC;
47cc2cf5
PB
3760 }
3761
3762 for (sec = abfd->sections; sec; sec = sec->next)
3763 {
3764 d = elf_section_data (sec);
3765
3766 if (d->this_hdr.sh_type != SHT_GROUP)
4fbb74a6 3767 d->this_idx = section_number++;
3e19fb8f
L
3768 if (d->this_hdr.sh_name != (unsigned int) -1)
3769 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
d4730f92 3770 if (d->rel.hdr)
2b0f7ef9 3771 {
d4730f92 3772 d->rel.idx = section_number++;
3e19fb8f
L
3773 if (d->rel.hdr->sh_name != (unsigned int) -1)
3774 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
2b0f7ef9 3775 }
d4730f92
BS
3776 else
3777 d->rel.idx = 0;
23bc299b 3778
d4730f92 3779 if (d->rela.hdr)
2b0f7ef9 3780 {
d4730f92 3781 d->rela.idx = section_number++;
3e19fb8f
L
3782 if (d->rela.hdr->sh_name != (unsigned int) -1)
3783 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
2b0f7ef9 3784 }
23bc299b 3785 else
d4730f92 3786 d->rela.idx = 0;
252b5132
RH
3787 }
3788
3516e984
L
3789 need_symtab = (bfd_get_symcount (abfd) > 0
3790 || (link_info == NULL
3791 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3792 == HAS_RELOC)));
3793 if (need_symtab)
252b5132 3794 {
12bd6957 3795 elf_onesymtab (abfd) = section_number++;
2b0f7ef9 3796 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
4fbb74a6 3797 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
9ad5cbcf 3798 {
7a6e0d89 3799 elf_section_list *entry;
6a40cf0c
NC
3800
3801 BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
3802
7a6e0d89 3803 entry = bfd_zalloc (abfd, sizeof (*entry));
6a40cf0c
NC
3804 entry->ndx = section_number++;
3805 elf_symtab_shndx_list (abfd) = entry;
3806 entry->hdr.sh_name
9ad5cbcf 3807 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
b34976b6 3808 ".symtab_shndx", FALSE);
6a40cf0c 3809 if (entry->hdr.sh_name == (unsigned int) -1)
b34976b6 3810 return FALSE;
9ad5cbcf 3811 }
12bd6957 3812 elf_strtab_sec (abfd) = section_number++;
2b0f7ef9 3813 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
252b5132
RH
3814 }
3815
dd905818
NC
3816 elf_shstrtab_sec (abfd) = section_number++;
3817 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
3818 elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
3819
1c52a645
L
3820 if (section_number >= SHN_LORESERVE)
3821 {
695344c0 3822 /* xgettext:c-format */
871b3ab2 3823 _bfd_error_handler (_("%pB: too many sections: %u"),
1c52a645
L
3824 abfd, section_number);
3825 return FALSE;
3826 }
3827
9ad5cbcf 3828 elf_numsections (abfd) = section_number;
252b5132
RH
3829 elf_elfheader (abfd)->e_shnum = section_number;
3830
3831 /* Set up the list of section header pointers, in agreement with the
3832 indices. */
a50b1753 3833 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number,
07d6d2b8 3834 sizeof (Elf_Internal_Shdr *));
252b5132 3835 if (i_shdrp == NULL)
b34976b6 3836 return FALSE;
252b5132 3837
a50b1753 3838 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
07d6d2b8 3839 sizeof (Elf_Internal_Shdr));
252b5132
RH
3840 if (i_shdrp[0] == NULL)
3841 {
3842 bfd_release (abfd, i_shdrp);
b34976b6 3843 return FALSE;
252b5132 3844 }
252b5132
RH
3845
3846 elf_elfsections (abfd) = i_shdrp;
3847
12bd6957 3848 i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
3516e984 3849 if (need_symtab)
252b5132 3850 {
12bd6957 3851 i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
4fbb74a6 3852 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
9ad5cbcf 3853 {
6a40cf0c
NC
3854 elf_section_list * entry = elf_symtab_shndx_list (abfd);
3855 BFD_ASSERT (entry != NULL);
3856 i_shdrp[entry->ndx] = & entry->hdr;
3857 entry->hdr.sh_link = elf_onesymtab (abfd);
9ad5cbcf 3858 }
12bd6957
AM
3859 i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
3860 t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
252b5132 3861 }
38ce5b11 3862
252b5132
RH
3863 for (sec = abfd->sections; sec; sec = sec->next)
3864 {
252b5132 3865 asection *s;
252b5132 3866
91d6fa6a
NC
3867 d = elf_section_data (sec);
3868
252b5132 3869 i_shdrp[d->this_idx] = &d->this_hdr;
d4730f92
BS
3870 if (d->rel.idx != 0)
3871 i_shdrp[d->rel.idx] = d->rel.hdr;
3872 if (d->rela.idx != 0)
3873 i_shdrp[d->rela.idx] = d->rela.hdr;
252b5132
RH
3874
3875 /* Fill in the sh_link and sh_info fields while we're at it. */
3876
3877 /* sh_link of a reloc section is the section index of the symbol
3878 table. sh_info is the section index of the section to which
3879 the relocation entries apply. */
d4730f92 3880 if (d->rel.idx != 0)
252b5132 3881 {
12bd6957 3882 d->rel.hdr->sh_link = elf_onesymtab (abfd);
d4730f92 3883 d->rel.hdr->sh_info = d->this_idx;
9ef5d938 3884 d->rel.hdr->sh_flags |= SHF_INFO_LINK;
252b5132 3885 }
d4730f92 3886 if (d->rela.idx != 0)
23bc299b 3887 {
12bd6957 3888 d->rela.hdr->sh_link = elf_onesymtab (abfd);
d4730f92 3889 d->rela.hdr->sh_info = d->this_idx;
9ef5d938 3890 d->rela.hdr->sh_flags |= SHF_INFO_LINK;
23bc299b 3891 }
252b5132 3892
38ce5b11
L
3893 /* We need to set up sh_link for SHF_LINK_ORDER. */
3894 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3895 {
3896 s = elf_linked_to_section (sec);
3897 if (s)
38ce5b11 3898 {
f2876037 3899 /* elf_linked_to_section points to the input section. */
ccd2ec6a 3900 if (link_info != NULL)
38ce5b11 3901 {
f2876037 3902 /* Check discarded linkonce section. */
dbaa2011 3903 if (discarded_section (s))
38ce5b11 3904 {
ccd2ec6a 3905 asection *kept;
4eca0228 3906 _bfd_error_handler
695344c0 3907 /* xgettext:c-format */
871b3ab2
AM
3908 (_("%pB: sh_link of section `%pA' points to"
3909 " discarded section `%pA' of `%pB'"),
ccd2ec6a
L
3910 abfd, d->this_hdr.bfd_section,
3911 s, s->owner);
3912 /* Point to the kept section if it has the same
3913 size as the discarded one. */
c0f00686 3914 kept = _bfd_elf_check_kept_section (s, link_info);
ccd2ec6a 3915 if (kept == NULL)
185d09ad 3916 {
ccd2ec6a
L
3917 bfd_set_error (bfd_error_bad_value);
3918 return FALSE;
185d09ad 3919 }
ccd2ec6a 3920 s = kept;
38ce5b11 3921 }
e424ecc8 3922
ccd2ec6a
L
3923 s = s->output_section;
3924 BFD_ASSERT (s != NULL);
38ce5b11 3925 }
f2876037
L
3926 else
3927 {
3928 /* Handle objcopy. */
3929 if (s->output_section == NULL)
3930 {
4eca0228 3931 _bfd_error_handler
695344c0 3932 /* xgettext:c-format */
871b3ab2
AM
3933 (_("%pB: sh_link of section `%pA' points to"
3934 " removed section `%pA' of `%pB'"),
f2876037
L
3935 abfd, d->this_hdr.bfd_section, s, s->owner);
3936 bfd_set_error (bfd_error_bad_value);
3937 return FALSE;
3938 }
3939 s = s->output_section;
3940 }
ccd2ec6a
L
3941 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3942 }
3943 else
3944 {
3945 /* PR 290:
3946 The Intel C compiler generates SHT_IA_64_UNWIND with
3947 SHF_LINK_ORDER. But it doesn't set the sh_link or
3948 sh_info fields. Hence we could get the situation
08a40648 3949 where s is NULL. */
ccd2ec6a
L
3950 const struct elf_backend_data *bed
3951 = get_elf_backend_data (abfd);
3952 if (bed->link_order_error_handler)
3953 bed->link_order_error_handler
695344c0 3954 /* xgettext:c-format */
871b3ab2 3955 (_("%pB: warning: sh_link not set for section `%pA'"),
ccd2ec6a 3956 abfd, sec);
38ce5b11
L
3957 }
3958 }
3959
252b5132
RH
3960 switch (d->this_hdr.sh_type)
3961 {
3962 case SHT_REL:
3963 case SHT_RELA:
3964 /* A reloc section which we are treating as a normal BFD
3965 section. sh_link is the section index of the symbol
3966 table. sh_info is the section index of the section to
3967 which the relocation entries apply. We assume that an
3968 allocated reloc section uses the dynamic symbol table.
3969 FIXME: How can we be sure? */
3970 s = bfd_get_section_by_name (abfd, ".dynsym");
3971 if (s != NULL)
3972 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3973
bce964aa 3974 s = elf_get_reloc_section (sec);
252b5132 3975 if (s != NULL)
9ef5d938
L
3976 {
3977 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3978 d->this_hdr.sh_flags |= SHF_INFO_LINK;
3979 }
252b5132
RH
3980 break;
3981
3982 case SHT_STRTAB:
3983 /* We assume that a section named .stab*str is a stabs
3984 string section. We look for a section with the same name
3985 but without the trailing ``str'', and set its sh_link
3986 field to point to this section. */
0112cd26 3987 if (CONST_STRNEQ (sec->name, ".stab")
252b5132
RH
3988 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3989 {
3990 size_t len;
3991 char *alc;
3992
3993 len = strlen (sec->name);
a50b1753 3994 alc = (char *) bfd_malloc (len - 2);
252b5132 3995 if (alc == NULL)
b34976b6 3996 return FALSE;
d4c88bbb 3997 memcpy (alc, sec->name, len - 3);
252b5132
RH
3998 alc[len - 3] = '\0';
3999 s = bfd_get_section_by_name (abfd, alc);
4000 free (alc);
4001 if (s != NULL)
4002 {
4003 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
4004
4005 /* This is a .stab section. */
0594c12d
AM
4006 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
4007 elf_section_data (s)->this_hdr.sh_entsize
4008 = 4 + 2 * bfd_get_arch_size (abfd) / 8;
252b5132
RH
4009 }
4010 }
4011 break;
4012
4013 case SHT_DYNAMIC:
4014 case SHT_DYNSYM:
4015 case SHT_GNU_verneed:
4016 case SHT_GNU_verdef:
4017 /* sh_link is the section header index of the string table
4018 used for the dynamic entries, or the symbol table, or the
4019 version strings. */
4020 s = bfd_get_section_by_name (abfd, ".dynstr");
4021 if (s != NULL)
4022 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4023 break;
4024
7f1204bb
JJ
4025 case SHT_GNU_LIBLIST:
4026 /* sh_link is the section header index of the prelink library
08a40648
AM
4027 list used for the dynamic entries, or the symbol table, or
4028 the version strings. */
7f1204bb
JJ
4029 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
4030 ? ".dynstr" : ".gnu.libstr");
4031 if (s != NULL)
4032 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4033 break;
4034
252b5132 4035 case SHT_HASH:
fdc90cb4 4036 case SHT_GNU_HASH:
252b5132
RH
4037 case SHT_GNU_versym:
4038 /* sh_link is the section header index of the symbol table
4039 this hash table or version table is for. */
4040 s = bfd_get_section_by_name (abfd, ".dynsym");
4041 if (s != NULL)
4042 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4043 break;
dbb410c3
AM
4044
4045 case SHT_GROUP:
12bd6957 4046 d->this_hdr.sh_link = elf_onesymtab (abfd);
252b5132
RH
4047 }
4048 }
4049
3e19fb8f
L
4050 /* Delay setting sh_name to _bfd_elf_write_object_contents so that
4051 _bfd_elf_assign_file_positions_for_non_load can convert DWARF
4052 debug section name from .debug_* to .zdebug_* if needed. */
4053
b34976b6 4054 return TRUE;
252b5132
RH
4055}
4056
5372391b 4057static bfd_boolean
217aa764 4058sym_is_global (bfd *abfd, asymbol *sym)
252b5132
RH
4059{
4060 /* If the backend has a special mapping, use it. */
9c5bfbb7 4061 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
217aa764
AM
4062 if (bed->elf_backend_sym_is_global)
4063 return (*bed->elf_backend_sym_is_global) (abfd, sym);
252b5132 4064
e47bf690 4065 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
e6f7f6d1
AM
4066 || bfd_is_und_section (bfd_asymbol_section (sym))
4067 || bfd_is_com_section (bfd_asymbol_section (sym)));
252b5132
RH
4068}
4069
76359541
TP
4070/* Filter global symbols of ABFD to include in the import library. All
4071 SYMCOUNT symbols of ABFD can be examined from their pointers in
4072 SYMS. Pointers of symbols to keep should be stored contiguously at
4073 the beginning of that array.
4074
4075 Returns the number of symbols to keep. */
4076
4077unsigned int
4078_bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4079 asymbol **syms, long symcount)
4080{
4081 long src_count, dst_count = 0;
4082
4083 for (src_count = 0; src_count < symcount; src_count++)
4084 {
4085 asymbol *sym = syms[src_count];
4086 char *name = (char *) bfd_asymbol_name (sym);
4087 struct bfd_link_hash_entry *h;
4088
4089 if (!sym_is_global (abfd, sym))
4090 continue;
4091
4092 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
5df1bc57
AM
4093 if (h == NULL)
4094 continue;
76359541
TP
4095 if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4096 continue;
76359541
TP
4097 if (h->linker_def || h->ldscript_def)
4098 continue;
4099
4100 syms[dst_count++] = sym;
4101 }
4102
4103 syms[dst_count] = NULL;
4104
4105 return dst_count;
4106}
4107
5372391b 4108/* Don't output section symbols for sections that are not going to be
c6d8cab4 4109 output, that are duplicates or there is no BFD section. */
5372391b
AM
4110
4111static bfd_boolean
4112ignore_section_sym (bfd *abfd, asymbol *sym)
4113{
c6d8cab4
L
4114 elf_symbol_type *type_ptr;
4115
db0c309f
NC
4116 if (sym == NULL)
4117 return FALSE;
4118
c6d8cab4
L
4119 if ((sym->flags & BSF_SECTION_SYM) == 0)
4120 return FALSE;
4121
db0c309f
NC
4122 if (sym->section == NULL)
4123 return TRUE;
4124
c6d8cab4
L
4125 type_ptr = elf_symbol_from (abfd, sym);
4126 return ((type_ptr != NULL
4127 && type_ptr->internal_elf_sym.st_shndx != 0
4128 && bfd_is_abs_section (sym->section))
4129 || !(sym->section->owner == abfd
db0c309f
NC
4130 || (sym->section->output_section != NULL
4131 && sym->section->output_section->owner == abfd
2633a79c
AM
4132 && sym->section->output_offset == 0)
4133 || bfd_is_abs_section (sym->section)));
5372391b
AM
4134}
4135
2633a79c
AM
4136/* Map symbol from it's internal number to the external number, moving
4137 all local symbols to be at the head of the list. */
4138
b34976b6 4139static bfd_boolean
12bd6957 4140elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
252b5132 4141{
dc810e39 4142 unsigned int symcount = bfd_get_symcount (abfd);
252b5132
RH
4143 asymbol **syms = bfd_get_outsymbols (abfd);
4144 asymbol **sect_syms;
dc810e39
AM
4145 unsigned int num_locals = 0;
4146 unsigned int num_globals = 0;
4147 unsigned int num_locals2 = 0;
4148 unsigned int num_globals2 = 0;
7292b3ac 4149 unsigned int max_index = 0;
dc810e39 4150 unsigned int idx;
252b5132
RH
4151 asection *asect;
4152 asymbol **new_syms;
252b5132
RH
4153
4154#ifdef DEBUG
4155 fprintf (stderr, "elf_map_symbols\n");
4156 fflush (stderr);
4157#endif
4158
252b5132
RH
4159 for (asect = abfd->sections; asect; asect = asect->next)
4160 {
4161 if (max_index < asect->index)
4162 max_index = asect->index;
4163 }
4164
4165 max_index++;
a50b1753 4166 sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *));
252b5132 4167 if (sect_syms == NULL)
b34976b6 4168 return FALSE;
252b5132 4169 elf_section_syms (abfd) = sect_syms;
4e89ac30 4170 elf_num_section_syms (abfd) = max_index;
252b5132 4171
079e9a2f
AM
4172 /* Init sect_syms entries for any section symbols we have already
4173 decided to output. */
252b5132
RH
4174 for (idx = 0; idx < symcount; idx++)
4175 {
dc810e39 4176 asymbol *sym = syms[idx];
c044fabd 4177
252b5132 4178 if ((sym->flags & BSF_SECTION_SYM) != 0
0f0a5e58 4179 && sym->value == 0
2633a79c
AM
4180 && !ignore_section_sym (abfd, sym)
4181 && !bfd_is_abs_section (sym->section))
252b5132 4182 {
5372391b 4183 asection *sec = sym->section;
252b5132 4184
5372391b
AM
4185 if (sec->owner != abfd)
4186 sec = sec->output_section;
252b5132 4187
5372391b 4188 sect_syms[sec->index] = syms[idx];
252b5132
RH
4189 }
4190 }
4191
252b5132
RH
4192 /* Classify all of the symbols. */
4193 for (idx = 0; idx < symcount; idx++)
4194 {
2633a79c 4195 if (sym_is_global (abfd, syms[idx]))
252b5132 4196 num_globals++;
2633a79c
AM
4197 else if (!ignore_section_sym (abfd, syms[idx]))
4198 num_locals++;
252b5132 4199 }
079e9a2f 4200
5372391b 4201 /* We will be adding a section symbol for each normal BFD section. Most
079e9a2f
AM
4202 sections will already have a section symbol in outsymbols, but
4203 eg. SHT_GROUP sections will not, and we need the section symbol mapped
4204 at least in that case. */
252b5132
RH
4205 for (asect = abfd->sections; asect; asect = asect->next)
4206 {
079e9a2f 4207 if (sect_syms[asect->index] == NULL)
252b5132 4208 {
079e9a2f 4209 if (!sym_is_global (abfd, asect->symbol))
252b5132
RH
4210 num_locals++;
4211 else
4212 num_globals++;
252b5132
RH
4213 }
4214 }
4215
4216 /* Now sort the symbols so the local symbols are first. */
a50b1753 4217 new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals,
07d6d2b8 4218 sizeof (asymbol *));
dc810e39 4219
252b5132 4220 if (new_syms == NULL)
b34976b6 4221 return FALSE;
252b5132
RH
4222
4223 for (idx = 0; idx < symcount; idx++)
4224 {
4225 asymbol *sym = syms[idx];
dc810e39 4226 unsigned int i;
252b5132 4227
2633a79c
AM
4228 if (sym_is_global (abfd, sym))
4229 i = num_locals + num_globals2++;
4230 else if (!ignore_section_sym (abfd, sym))
252b5132
RH
4231 i = num_locals2++;
4232 else
2633a79c 4233 continue;
252b5132
RH
4234 new_syms[i] = sym;
4235 sym->udata.i = i + 1;
4236 }
4237 for (asect = abfd->sections; asect; asect = asect->next)
4238 {
079e9a2f 4239 if (sect_syms[asect->index] == NULL)
252b5132 4240 {
079e9a2f 4241 asymbol *sym = asect->symbol;
dc810e39 4242 unsigned int i;
252b5132 4243
079e9a2f 4244 sect_syms[asect->index] = sym;
252b5132
RH
4245 if (!sym_is_global (abfd, sym))
4246 i = num_locals2++;
4247 else
4248 i = num_locals + num_globals2++;
4249 new_syms[i] = sym;
4250 sym->udata.i = i + 1;
4251 }
4252 }
4253
4254 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4255
12bd6957 4256 *pnum_locals = num_locals;
b34976b6 4257 return TRUE;
252b5132
RH
4258}
4259
4260/* Align to the maximum file alignment that could be required for any
4261 ELF data structure. */
4262
268b6b39 4263static inline file_ptr
217aa764 4264align_file_position (file_ptr off, int align)
252b5132
RH
4265{
4266 return (off + align - 1) & ~(align - 1);
4267}
4268
4269/* Assign a file position to a section, optionally aligning to the
4270 required section alignment. */
4271
217aa764
AM
4272file_ptr
4273_bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4274 file_ptr offset,
4275 bfd_boolean align)
252b5132 4276{
72de5009
AM
4277 if (align && i_shdrp->sh_addralign > 1)
4278 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
252b5132
RH
4279 i_shdrp->sh_offset = offset;
4280 if (i_shdrp->bfd_section != NULL)
4281 i_shdrp->bfd_section->filepos = offset;
4282 if (i_shdrp->sh_type != SHT_NOBITS)
4283 offset += i_shdrp->sh_size;
4284 return offset;
4285}
4286
4287/* Compute the file positions we are going to put the sections at, and
4288 otherwise prepare to begin writing out the ELF file. If LINK_INFO
4289 is not NULL, this is being called by the ELF backend linker. */
4290
b34976b6 4291bfd_boolean
217aa764
AM
4292_bfd_elf_compute_section_file_positions (bfd *abfd,
4293 struct bfd_link_info *link_info)
252b5132 4294{
9c5bfbb7 4295 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
d4730f92 4296 struct fake_section_arg fsargs;
b34976b6 4297 bfd_boolean failed;
ef10c3ac 4298 struct elf_strtab_hash *strtab = NULL;
252b5132 4299 Elf_Internal_Shdr *shstrtab_hdr;
3516e984 4300 bfd_boolean need_symtab;
252b5132
RH
4301
4302 if (abfd->output_has_begun)
b34976b6 4303 return TRUE;
252b5132
RH
4304
4305 /* Do any elf backend specific processing first. */
4306 if (bed->elf_backend_begin_write_processing)
4307 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4308
ed7e9d0b 4309 if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
b34976b6 4310 return FALSE;
252b5132 4311
d4730f92
BS
4312 fsargs.failed = FALSE;
4313 fsargs.link_info = link_info;
4314 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4315 if (fsargs.failed)
b34976b6 4316 return FALSE;
252b5132 4317
da9f89d4 4318 if (!assign_section_numbers (abfd, link_info))
b34976b6 4319 return FALSE;
252b5132
RH
4320
4321 /* The backend linker builds symbol table information itself. */
3516e984
L
4322 need_symtab = (link_info == NULL
4323 && (bfd_get_symcount (abfd) > 0
4324 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4325 == HAS_RELOC)));
4326 if (need_symtab)
252b5132
RH
4327 {
4328 /* Non-zero if doing a relocatable link. */
4329 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4330
4331 if (! swap_out_syms (abfd, &strtab, relocatable_p))
b34976b6 4332 return FALSE;
252b5132
RH
4333 }
4334
d4730f92 4335 failed = FALSE;
1126897b 4336 if (link_info == NULL)
dbb410c3 4337 {
1126897b 4338 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
dbb410c3 4339 if (failed)
b34976b6 4340 return FALSE;
dbb410c3
AM
4341 }
4342
252b5132 4343 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
ed7e9d0b 4344 /* sh_name was set in init_file_header. */
252b5132 4345 shstrtab_hdr->sh_type = SHT_STRTAB;
84865015 4346 shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
252b5132 4347 shstrtab_hdr->sh_addr = 0;
946748d5 4348 /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */
252b5132
RH
4349 shstrtab_hdr->sh_entsize = 0;
4350 shstrtab_hdr->sh_link = 0;
4351 shstrtab_hdr->sh_info = 0;
3e19fb8f 4352 /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load. */
252b5132
RH
4353 shstrtab_hdr->sh_addralign = 1;
4354
c84fca4d 4355 if (!assign_file_positions_except_relocs (abfd, link_info))
b34976b6 4356 return FALSE;
252b5132 4357
3516e984 4358 if (need_symtab)
252b5132
RH
4359 {
4360 file_ptr off;
4361 Elf_Internal_Shdr *hdr;
4362
12bd6957 4363 off = elf_next_file_pos (abfd);
252b5132 4364
6a40cf0c 4365 hdr = & elf_symtab_hdr (abfd);
b34976b6 4366 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
252b5132 4367
6a40cf0c
NC
4368 if (elf_symtab_shndx_list (abfd) != NULL)
4369 {
4370 hdr = & elf_symtab_shndx_list (abfd)->hdr;
4371 if (hdr->sh_size != 0)
4372 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4373 /* FIXME: What about other symtab_shndx sections in the list ? */
4374 }
9ad5cbcf 4375
252b5132 4376 hdr = &elf_tdata (abfd)->strtab_hdr;
b34976b6 4377 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
252b5132 4378
12bd6957 4379 elf_next_file_pos (abfd) = off;
252b5132
RH
4380
4381 /* Now that we know where the .strtab section goes, write it
08a40648 4382 out. */
252b5132 4383 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
ef10c3ac 4384 || ! _bfd_elf_strtab_emit (abfd, strtab))
b34976b6 4385 return FALSE;
ef10c3ac 4386 _bfd_elf_strtab_free (strtab);
252b5132
RH
4387 }
4388
b34976b6 4389 abfd->output_has_begun = TRUE;
252b5132 4390
b34976b6 4391 return TRUE;
252b5132
RH
4392}
4393
8ded5a0f
AM
4394/* Make an initial estimate of the size of the program header. If we
4395 get the number wrong here, we'll redo section placement. */
4396
4397static bfd_size_type
4398get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4399{
4400 size_t segs;
4401 asection *s;
2b05f1b7 4402 const struct elf_backend_data *bed;
8ded5a0f
AM
4403
4404 /* Assume we will need exactly two PT_LOAD segments: one for text
4405 and one for data. */
4406 segs = 2;
4407
4408 s = bfd_get_section_by_name (abfd, ".interp");
1b9e270b 4409 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
8ded5a0f
AM
4410 {
4411 /* If we have a loadable interpreter section, we need a
4412 PT_INTERP segment. In this case, assume we also need a
4413 PT_PHDR segment, although that may not be true for all
4414 targets. */
e9a38e0f 4415 segs += 2;
8ded5a0f
AM
4416 }
4417
4418 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4419 {
4420 /* We need a PT_DYNAMIC segment. */
4421 ++segs;
f210dcff 4422 }
08a40648 4423
ceae84aa 4424 if (info != NULL && info->relro)
f210dcff
L
4425 {
4426 /* We need a PT_GNU_RELRO segment. */
4427 ++segs;
8ded5a0f
AM
4428 }
4429
12bd6957 4430 if (elf_eh_frame_hdr (abfd))
8ded5a0f
AM
4431 {
4432 /* We need a PT_GNU_EH_FRAME segment. */
4433 ++segs;
4434 }
4435
12bd6957 4436 if (elf_stack_flags (abfd))
8ded5a0f 4437 {
2b05f1b7
L
4438 /* We need a PT_GNU_STACK segment. */
4439 ++segs;
4440 }
94b11780 4441
0a59decb
L
4442 s = bfd_get_section_by_name (abfd,
4443 NOTE_GNU_PROPERTY_SECTION_NAME);
4444 if (s != NULL && s->size != 0)
4445 {
4446 /* We need a PT_GNU_PROPERTY segment. */
4447 ++segs;
4448 }
4449
2b05f1b7
L
4450 for (s = abfd->sections; s != NULL; s = s->next)
4451 {
8ded5a0f 4452 if ((s->flags & SEC_LOAD) != 0
23e463ed 4453 && elf_section_type (s) == SHT_NOTE)
8ded5a0f 4454 {
23e463ed 4455 unsigned int alignment_power;
8ded5a0f
AM
4456 /* We need a PT_NOTE segment. */
4457 ++segs;
23e463ed
L
4458 /* Try to create just one PT_NOTE segment for all adjacent
4459 loadable SHT_NOTE sections. gABI requires that within a
4460 PT_NOTE segment (and also inside of each SHT_NOTE section)
4461 each note should have the same alignment. So we check
4462 whether the sections are correctly aligned. */
4463 alignment_power = s->alignment_power;
4464 while (s->next != NULL
4465 && s->next->alignment_power == alignment_power
4466 && (s->next->flags & SEC_LOAD) != 0
4467 && elf_section_type (s->next) == SHT_NOTE)
4468 s = s->next;
8ded5a0f
AM
4469 }
4470 }
4471
4472 for (s = abfd->sections; s != NULL; s = s->next)
4473 {
4474 if (s->flags & SEC_THREAD_LOCAL)
4475 {
4476 /* We need a PT_TLS segment. */
4477 ++segs;
4478 break;
4479 }
4480 }
4481
2b05f1b7 4482 bed = get_elf_backend_data (abfd);
a91e1603 4483
df3a023b
AM
4484 if ((abfd->flags & D_PAGED) != 0
4485 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4486 {
4487 /* Add a PT_GNU_MBIND segment for each mbind section. */
4488 unsigned int page_align_power = bfd_log2 (bed->commonpagesize);
4489 for (s = abfd->sections; s != NULL; s = s->next)
4490 if (elf_section_flags (s) & SHF_GNU_MBIND)
4491 {
4492 if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4493 {
4494 _bfd_error_handler
4495 /* xgettext:c-format */
4496 (_("%pB: GNU_MBIND section `%pA' has invalid "
4497 "sh_info field: %d"),
4498 abfd, s, elf_section_data (s)->this_hdr.sh_info);
4499 continue;
4500 }
4501 /* Align mbind section to page size. */
4502 if (s->alignment_power < page_align_power)
4503 s->alignment_power = page_align_power;
4504 segs ++;
4505 }
4506 }
4507
4508 /* Let the backend count up any program headers it might need. */
4509 if (bed->elf_backend_additional_program_headers)
8ded5a0f
AM
4510 {
4511 int a;
4512
4513 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4514 if (a == -1)
4515 abort ();
4516 segs += a;
4517 }
4518
4519 return segs * bed->s->sizeof_phdr;
4520}
4521
2ea37f1c
NC
4522/* Find the segment that contains the output_section of section. */
4523
4524Elf_Internal_Phdr *
4525_bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4526{
4527 struct elf_segment_map *m;
4528 Elf_Internal_Phdr *p;
4529
12bd6957 4530 for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
2ea37f1c
NC
4531 m != NULL;
4532 m = m->next, p++)
4533 {
4534 int i;
4535
4536 for (i = m->count - 1; i >= 0; i--)
4537 if (m->sections[i] == section)
4538 return p;
4539 }
4540
4541 return NULL;
4542}
4543
252b5132
RH
4544/* Create a mapping from a set of sections to a program segment. */
4545
217aa764
AM
4546static struct elf_segment_map *
4547make_mapping (bfd *abfd,
4548 asection **sections,
4549 unsigned int from,
4550 unsigned int to,
4551 bfd_boolean phdr)
252b5132
RH
4552{
4553 struct elf_segment_map *m;
4554 unsigned int i;
4555 asection **hdrpp;
986f0783 4556 size_t amt;
252b5132 4557
00bee008
AM
4558 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4559 amt += (to - from) * sizeof (asection *);
a50b1753 4560 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
4561 if (m == NULL)
4562 return NULL;
4563 m->next = NULL;
4564 m->p_type = PT_LOAD;
4565 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
4566 m->sections[i - from] = *hdrpp;
4567 m->count = to - from;
4568
4569 if (from == 0 && phdr)
4570 {
4571 /* Include the headers in the first PT_LOAD segment. */
4572 m->includes_filehdr = 1;
4573 m->includes_phdrs = 1;
4574 }
4575
4576 return m;
4577}
4578
229fcec5
MM
4579/* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
4580 on failure. */
4581
4582struct elf_segment_map *
4583_bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
4584{
4585 struct elf_segment_map *m;
4586
a50b1753 4587 m = (struct elf_segment_map *) bfd_zalloc (abfd,
07d6d2b8 4588 sizeof (struct elf_segment_map));
229fcec5
MM
4589 if (m == NULL)
4590 return NULL;
4591 m->next = NULL;
4592 m->p_type = PT_DYNAMIC;
4593 m->count = 1;
4594 m->sections[0] = dynsec;
08a40648 4595
229fcec5
MM
4596 return m;
4597}
4598
8ded5a0f 4599/* Possibly add or remove segments from the segment map. */
252b5132 4600
b34976b6 4601static bfd_boolean
3dea8fca
AM
4602elf_modify_segment_map (bfd *abfd,
4603 struct bfd_link_info *info,
4604 bfd_boolean remove_empty_load)
252b5132 4605{
252e386e 4606 struct elf_segment_map **m;
8ded5a0f 4607 const struct elf_backend_data *bed;
252b5132 4608
8ded5a0f
AM
4609 /* The placement algorithm assumes that non allocated sections are
4610 not in PT_LOAD segments. We ensure this here by removing such
4611 sections from the segment map. We also remove excluded
252e386e
AM
4612 sections. Finally, any PT_LOAD segment without sections is
4613 removed. */
12bd6957 4614 m = &elf_seg_map (abfd);
252e386e 4615 while (*m)
8ded5a0f
AM
4616 {
4617 unsigned int i, new_count;
252b5132 4618
252e386e 4619 for (new_count = 0, i = 0; i < (*m)->count; i++)
8ded5a0f 4620 {
252e386e
AM
4621 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
4622 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
4623 || (*m)->p_type != PT_LOAD))
8ded5a0f 4624 {
252e386e
AM
4625 (*m)->sections[new_count] = (*m)->sections[i];
4626 new_count++;
8ded5a0f
AM
4627 }
4628 }
252e386e 4629 (*m)->count = new_count;
252b5132 4630
1a9ccd70
NC
4631 if (remove_empty_load
4632 && (*m)->p_type == PT_LOAD
4633 && (*m)->count == 0
4634 && !(*m)->includes_phdrs)
252e386e
AM
4635 *m = (*m)->next;
4636 else
4637 m = &(*m)->next;
8ded5a0f 4638 }
252b5132 4639
8ded5a0f
AM
4640 bed = get_elf_backend_data (abfd);
4641 if (bed->elf_backend_modify_segment_map != NULL)
252b5132 4642 {
252e386e 4643 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
8ded5a0f 4644 return FALSE;
252b5132 4645 }
252b5132 4646
8ded5a0f
AM
4647 return TRUE;
4648}
252b5132 4649
dbc88fc1
AM
4650#define IS_TBSS(s) \
4651 ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
4652
8ded5a0f 4653/* Set up a mapping from BFD sections to program segments. */
252b5132 4654
8ded5a0f
AM
4655bfd_boolean
4656_bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
4657{
4658 unsigned int count;
4659 struct elf_segment_map *m;
4660 asection **sections = NULL;
4661 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3dea8fca 4662 bfd_boolean no_user_phdrs;
252b5132 4663
12bd6957 4664 no_user_phdrs = elf_seg_map (abfd) == NULL;
d324f6d6
RM
4665
4666 if (info != NULL)
4667 info->user_phdrs = !no_user_phdrs;
4668
3dea8fca 4669 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
252b5132 4670 {
8ded5a0f
AM
4671 asection *s;
4672 unsigned int i;
4673 struct elf_segment_map *mfirst;
4674 struct elf_segment_map **pm;
4675 asection *last_hdr;
4676 bfd_vma last_size;
00bee008 4677 unsigned int hdr_index;
8ded5a0f
AM
4678 bfd_vma maxpagesize;
4679 asection **hdrpp;
64029e93 4680 bfd_boolean phdr_in_segment;
8ded5a0f 4681 bfd_boolean writable;
2888249f 4682 bfd_boolean executable;
8ded5a0f
AM
4683 int tls_count = 0;
4684 asection *first_tls = NULL;
a91e1603 4685 asection *first_mbind = NULL;
8ded5a0f
AM
4686 asection *dynsec, *eh_frame_hdr;
4687 bfd_size_type amt;
8d06853e 4688 bfd_vma addr_mask, wrap_to = 0;
64029e93 4689 bfd_size_type phdr_size;
252b5132 4690
8ded5a0f 4691 /* Select the allocated sections, and sort them. */
252b5132 4692
a50b1753 4693 sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd),
07d6d2b8 4694 sizeof (asection *));
8ded5a0f 4695 if (sections == NULL)
252b5132 4696 goto error_return;
252b5132 4697
8d06853e
AM
4698 /* Calculate top address, avoiding undefined behaviour of shift
4699 left operator when shift count is equal to size of type
4700 being shifted. */
4701 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
4702 addr_mask = (addr_mask << 1) + 1;
4703
8ded5a0f
AM
4704 i = 0;
4705 for (s = abfd->sections; s != NULL; s = s->next)
4706 {
4707 if ((s->flags & SEC_ALLOC) != 0)
4708 {
48db3297
AM
4709 /* target_index is unused until bfd_elf_final_link
4710 starts output of section symbols. Use it to make
4711 qsort stable. */
4712 s->target_index = i;
8ded5a0f
AM
4713 sections[i] = s;
4714 ++i;
8d06853e
AM
4715 /* A wrapping section potentially clashes with header. */
4716 if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask))
4717 wrap_to = (s->lma + s->size) & addr_mask;
8ded5a0f
AM
4718 }
4719 }
4720 BFD_ASSERT (i <= bfd_count_sections (abfd));
4721 count = i;
252b5132 4722
8ded5a0f 4723 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
252b5132 4724
64029e93
AM
4725 phdr_size = elf_program_header_size (abfd);
4726 if (phdr_size == (bfd_size_type) -1)
4727 phdr_size = get_program_header_size (abfd, info);
4728 phdr_size += bed->s->sizeof_ehdr;
4729 maxpagesize = bed->maxpagesize;
4730 if (maxpagesize == 0)
4731 maxpagesize = 1;
4732 phdr_in_segment = info != NULL && info->load_phdrs;
4733 if (count != 0
4734 && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
4735 >= (phdr_size & (maxpagesize - 1))))
4736 /* For compatibility with old scripts that may not be using
4737 SIZEOF_HEADERS, add headers when it looks like space has
4738 been left for them. */
4739 phdr_in_segment = TRUE;
252b5132 4740
64029e93 4741 /* Build the mapping. */
8ded5a0f
AM
4742 mfirst = NULL;
4743 pm = &mfirst;
252b5132 4744
8ded5a0f
AM
4745 /* If we have a .interp section, then create a PT_PHDR segment for
4746 the program headers and a PT_INTERP segment for the .interp
4747 section. */
4748 s = bfd_get_section_by_name (abfd, ".interp");
1b9e270b 4749 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
8ded5a0f
AM
4750 {
4751 amt = sizeof (struct elf_segment_map);
a50b1753 4752 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
8ded5a0f
AM
4753 if (m == NULL)
4754 goto error_return;
4755 m->next = NULL;
4756 m->p_type = PT_PHDR;
f882209d 4757 m->p_flags = PF_R;
8ded5a0f
AM
4758 m->p_flags_valid = 1;
4759 m->includes_phdrs = 1;
64029e93 4760 phdr_in_segment = TRUE;
8ded5a0f
AM
4761 *pm = m;
4762 pm = &m->next;
252b5132 4763
8ded5a0f 4764 amt = sizeof (struct elf_segment_map);
a50b1753 4765 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
8ded5a0f
AM
4766 if (m == NULL)
4767 goto error_return;
4768 m->next = NULL;
4769 m->p_type = PT_INTERP;
4770 m->count = 1;
4771 m->sections[0] = s;
4772
4773 *pm = m;
4774 pm = &m->next;
252b5132 4775 }
8ded5a0f
AM
4776
4777 /* Look through the sections. We put sections in the same program
4778 segment when the start of the second section can be placed within
4779 a few bytes of the end of the first section. */
4780 last_hdr = NULL;
4781 last_size = 0;
00bee008 4782 hdr_index = 0;
8ded5a0f 4783 writable = FALSE;
2888249f 4784 executable = FALSE;
8ded5a0f
AM
4785 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
4786 if (dynsec != NULL
4787 && (dynsec->flags & SEC_LOAD) == 0)
4788 dynsec = NULL;
4789
64029e93
AM
4790 if ((abfd->flags & D_PAGED) == 0)
4791 phdr_in_segment = FALSE;
4792
8ded5a0f
AM
4793 /* Deal with -Ttext or something similar such that the first section
4794 is not adjacent to the program headers. This is an
4795 approximation, since at this point we don't know exactly how many
4796 program headers we will need. */
64029e93 4797 if (phdr_in_segment && count > 0)
252b5132 4798 {
64029e93
AM
4799 bfd_vma phdr_lma;
4800 bfd_boolean separate_phdr = FALSE;
4801
4802 phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
4803 if (info != NULL
4804 && info->separate_code
4805 && (sections[0]->flags & SEC_CODE) != 0)
1a9ccd70 4806 {
64029e93
AM
4807 /* If data sections should be separate from code and
4808 thus not executable, and the first section is
4809 executable then put the file and program headers in
4810 their own PT_LOAD. */
4811 separate_phdr = TRUE;
4812 if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
4813 == (sections[0]->lma & addr_mask & -maxpagesize)))
4814 {
4815 /* The file and program headers are currently on the
4816 same page as the first section. Put them on the
4817 previous page if we can. */
4818 if (phdr_lma >= maxpagesize)
4819 phdr_lma -= maxpagesize;
4820 else
4821 separate_phdr = FALSE;
4822 }
4823 }
4824 if ((sections[0]->lma & addr_mask) < phdr_lma
4825 || (sections[0]->lma & addr_mask) < phdr_size)
4826 /* If file and program headers would be placed at the end
4827 of memory then it's probably better to omit them. */
4828 phdr_in_segment = FALSE;
4829 else if (phdr_lma < wrap_to)
4830 /* If a section wraps around to where we'll be placing
4831 file and program headers, then the headers will be
4832 overwritten. */
4833 phdr_in_segment = FALSE;
4834 else if (separate_phdr)
4835 {
4836 m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
4837 if (m == NULL)
4838 goto error_return;
4839 m->p_paddr = phdr_lma;
4840 m->p_vaddr_offset
4841 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
4842 m->p_paddr_valid = 1;
4843 *pm = m;
4844 pm = &m->next;
4845 phdr_in_segment = FALSE;
1a9ccd70 4846 }
252b5132
RH
4847 }
4848
8ded5a0f 4849 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
252b5132 4850 {
8ded5a0f
AM
4851 asection *hdr;
4852 bfd_boolean new_segment;
4853
4854 hdr = *hdrpp;
4855
4856 /* See if this section and the last one will fit in the same
4857 segment. */
4858
4859 if (last_hdr == NULL)
4860 {
4861 /* If we don't have a segment yet, then we don't need a new
4862 one (we build the last one after this loop). */
4863 new_segment = FALSE;
4864 }
4865 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
4866 {
4867 /* If this section has a different relation between the
4868 virtual address and the load address, then we need a new
4869 segment. */
4870 new_segment = TRUE;
4871 }
b5599592
AM
4872 else if (hdr->lma < last_hdr->lma + last_size
4873 || last_hdr->lma + last_size < last_hdr->lma)
4874 {
4875 /* If this section has a load address that makes it overlap
4876 the previous section, then we need a new segment. */
4877 new_segment = TRUE;
4878 }
76cb3a89
AM
4879 else if ((abfd->flags & D_PAGED) != 0
4880 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
4881 == (hdr->lma & -maxpagesize)))
4882 {
4883 /* If we are demand paged then we can't map two disk
4884 pages onto the same memory page. */
4885 new_segment = FALSE;
4886 }
39948a60
NC
4887 /* In the next test we have to be careful when last_hdr->lma is close
4888 to the end of the address space. If the aligned address wraps
4889 around to the start of the address space, then there are no more
4890 pages left in memory and it is OK to assume that the current
4891 section can be included in the current segment. */
76cb3a89
AM
4892 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4893 + maxpagesize > last_hdr->lma)
4894 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4895 + maxpagesize <= hdr->lma))
8ded5a0f
AM
4896 {
4897 /* If putting this section in this segment would force us to
4898 skip a page in the segment, then we need a new segment. */
4899 new_segment = TRUE;
4900 }
4901 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
76cb3a89 4902 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
8ded5a0f 4903 {
e5654c0f
AM
4904 /* We don't want to put a loaded section after a
4905 nonloaded (ie. bss style) section in the same segment
4906 as that will force the non-loaded section to be loaded.
76cb3a89 4907 Consider .tbss sections as loaded for this purpose. */
8ded5a0f
AM
4908 new_segment = TRUE;
4909 }
4910 else if ((abfd->flags & D_PAGED) == 0)
4911 {
4912 /* If the file is not demand paged, which means that we
4913 don't require the sections to be correctly aligned in the
4914 file, then there is no other reason for a new segment. */
4915 new_segment = FALSE;
4916 }
2888249f
L
4917 else if (info != NULL
4918 && info->separate_code
4919 && executable != ((hdr->flags & SEC_CODE) != 0))
4920 {
4921 new_segment = TRUE;
4922 }
8ded5a0f 4923 else if (! writable
76cb3a89 4924 && (hdr->flags & SEC_READONLY) == 0)
8ded5a0f
AM
4925 {
4926 /* We don't want to put a writable section in a read only
76cb3a89 4927 segment. */
8ded5a0f
AM
4928 new_segment = TRUE;
4929 }
4930 else
4931 {
4932 /* Otherwise, we can use the same segment. */
4933 new_segment = FALSE;
4934 }
4935
2889e75b 4936 /* Allow interested parties a chance to override our decision. */
ceae84aa
AM
4937 if (last_hdr != NULL
4938 && info != NULL
4939 && info->callbacks->override_segment_assignment != NULL)
4940 new_segment
4941 = info->callbacks->override_segment_assignment (info, abfd, hdr,
4942 last_hdr,
4943 new_segment);
2889e75b 4944
8ded5a0f
AM
4945 if (! new_segment)
4946 {
4947 if ((hdr->flags & SEC_READONLY) == 0)
4948 writable = TRUE;
2888249f
L
4949 if ((hdr->flags & SEC_CODE) != 0)
4950 executable = TRUE;
8ded5a0f
AM
4951 last_hdr = hdr;
4952 /* .tbss sections effectively have zero size. */
dbc88fc1 4953 last_size = !IS_TBSS (hdr) ? hdr->size : 0;
8ded5a0f
AM
4954 continue;
4955 }
4956
4957 /* We need a new program segment. We must create a new program
00bee008 4958 header holding all the sections from hdr_index until hdr. */
8ded5a0f 4959
00bee008 4960 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
8ded5a0f
AM
4961 if (m == NULL)
4962 goto error_return;
4963
4964 *pm = m;
4965 pm = &m->next;
4966
252b5132 4967 if ((hdr->flags & SEC_READONLY) == 0)
b34976b6 4968 writable = TRUE;
8ded5a0f
AM
4969 else
4970 writable = FALSE;
4971
2888249f
L
4972 if ((hdr->flags & SEC_CODE) == 0)
4973 executable = FALSE;
4974 else
4975 executable = TRUE;
4976
baaff79e
JJ
4977 last_hdr = hdr;
4978 /* .tbss sections effectively have zero size. */
dbc88fc1 4979 last_size = !IS_TBSS (hdr) ? hdr->size : 0;
00bee008 4980 hdr_index = i;
8ded5a0f 4981 phdr_in_segment = FALSE;
252b5132
RH
4982 }
4983
86b2281f
AM
4984 /* Create a final PT_LOAD program segment, but not if it's just
4985 for .tbss. */
4986 if (last_hdr != NULL
00bee008 4987 && (i - hdr_index != 1
dbc88fc1 4988 || !IS_TBSS (last_hdr)))
8ded5a0f 4989 {
00bee008 4990 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
8ded5a0f
AM
4991 if (m == NULL)
4992 goto error_return;
252b5132 4993
8ded5a0f
AM
4994 *pm = m;
4995 pm = &m->next;
4996 }
252b5132 4997
8ded5a0f
AM
4998 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
4999 if (dynsec != NULL)
5000 {
5001 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
5002 if (m == NULL)
5003 goto error_return;
5004 *pm = m;
5005 pm = &m->next;
5006 }
252b5132 5007
23e463ed 5008 /* For each batch of consecutive loadable SHT_NOTE sections,
1c5265b5
JJ
5009 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
5010 because if we link together nonloadable .note sections and
5011 loadable .note sections, we will generate two .note sections
23e463ed 5012 in the output file. */
8ded5a0f
AM
5013 for (s = abfd->sections; s != NULL; s = s->next)
5014 {
5015 if ((s->flags & SEC_LOAD) != 0
23e463ed 5016 && elf_section_type (s) == SHT_NOTE)
8ded5a0f 5017 {
1c5265b5 5018 asection *s2;
23e463ed 5019 unsigned int alignment_power = s->alignment_power;
91d6fa6a
NC
5020
5021 count = 1;
23e463ed
L
5022 for (s2 = s; s2->next != NULL; s2 = s2->next)
5023 {
5024 if (s2->next->alignment_power == alignment_power
5025 && (s2->next->flags & SEC_LOAD) != 0
5026 && elf_section_type (s2->next) == SHT_NOTE
5027 && align_power (s2->lma + s2->size,
5028 alignment_power)
5029 == s2->next->lma)
5030 count++;
5031 else
5032 break;
5033 }
00bee008
AM
5034 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5035 amt += count * sizeof (asection *);
a50b1753 5036 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
8ded5a0f
AM
5037 if (m == NULL)
5038 goto error_return;
5039 m->next = NULL;
5040 m->p_type = PT_NOTE;
1c5265b5
JJ
5041 m->count = count;
5042 while (count > 1)
5043 {
5044 m->sections[m->count - count--] = s;
5045 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5046 s = s->next;
5047 }
5048 m->sections[m->count - 1] = s;
5049 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
8ded5a0f
AM
5050 *pm = m;
5051 pm = &m->next;
5052 }
5053 if (s->flags & SEC_THREAD_LOCAL)
5054 {
5055 if (! tls_count)
5056 first_tls = s;
5057 tls_count++;
5058 }
a91e1603
L
5059 if (first_mbind == NULL
5060 && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5061 first_mbind = s;
8ded5a0f 5062 }
252b5132 5063
8ded5a0f
AM
5064 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
5065 if (tls_count > 0)
5066 {
00bee008
AM
5067 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5068 amt += tls_count * sizeof (asection *);
a50b1753 5069 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
8ded5a0f
AM
5070 if (m == NULL)
5071 goto error_return;
5072 m->next = NULL;
5073 m->p_type = PT_TLS;
5074 m->count = tls_count;
5075 /* Mandated PF_R. */
5076 m->p_flags = PF_R;
5077 m->p_flags_valid = 1;
d923cae0 5078 s = first_tls;
91d6fa6a 5079 for (i = 0; i < (unsigned int) tls_count; ++i)
8ded5a0f 5080 {
d923cae0
L
5081 if ((s->flags & SEC_THREAD_LOCAL) == 0)
5082 {
5083 _bfd_error_handler
871b3ab2 5084 (_("%pB: TLS sections are not adjacent:"), abfd);
d923cae0
L
5085 s = first_tls;
5086 i = 0;
5087 while (i < (unsigned int) tls_count)
5088 {
5089 if ((s->flags & SEC_THREAD_LOCAL) != 0)
5090 {
871b3ab2 5091 _bfd_error_handler (_(" TLS: %pA"), s);
d923cae0
L
5092 i++;
5093 }
5094 else
871b3ab2 5095 _bfd_error_handler (_(" non-TLS: %pA"), s);
d923cae0
L
5096 s = s->next;
5097 }
5098 bfd_set_error (bfd_error_bad_value);
5099 goto error_return;
5100 }
5101 m->sections[i] = s;
5102 s = s->next;
8ded5a0f 5103 }
252b5132 5104
8ded5a0f
AM
5105 *pm = m;
5106 pm = &m->next;
5107 }
252b5132 5108
df3a023b
AM
5109 if (first_mbind
5110 && (abfd->flags & D_PAGED) != 0
5111 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
a91e1603
L
5112 for (s = first_mbind; s != NULL; s = s->next)
5113 if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
df3a023b 5114 && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
a91e1603
L
5115 {
5116 /* Mandated PF_R. */
5117 unsigned long p_flags = PF_R;
5118 if ((s->flags & SEC_READONLY) == 0)
5119 p_flags |= PF_W;
5120 if ((s->flags & SEC_CODE) != 0)
5121 p_flags |= PF_X;
5122
5123 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5124 m = bfd_zalloc (abfd, amt);
5125 if (m == NULL)
5126 goto error_return;
5127 m->next = NULL;
5128 m->p_type = (PT_GNU_MBIND_LO
5129 + elf_section_data (s)->this_hdr.sh_info);
5130 m->count = 1;
5131 m->p_flags_valid = 1;
5132 m->sections[0] = s;
5133 m->p_flags = p_flags;
5134
5135 *pm = m;
5136 pm = &m->next;
5137 }
5138
0a59decb
L
5139 s = bfd_get_section_by_name (abfd,
5140 NOTE_GNU_PROPERTY_SECTION_NAME);
5141 if (s != NULL && s->size != 0)
5142 {
5143 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5144 m = bfd_zalloc (abfd, amt);
5145 if (m == NULL)
5146 goto error_return;
5147 m->next = NULL;
5148 m->p_type = PT_GNU_PROPERTY;
5149 m->count = 1;
5150 m->p_flags_valid = 1;
5151 m->sections[0] = s;
5152 m->p_flags = PF_R;
5153 *pm = m;
5154 pm = &m->next;
5155 }
5156
8ded5a0f
AM
5157 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5158 segment. */
12bd6957 5159 eh_frame_hdr = elf_eh_frame_hdr (abfd);
8ded5a0f
AM
5160 if (eh_frame_hdr != NULL
5161 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
252b5132 5162 {
dc810e39 5163 amt = sizeof (struct elf_segment_map);
a50b1753 5164 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
5165 if (m == NULL)
5166 goto error_return;
5167 m->next = NULL;
8ded5a0f 5168 m->p_type = PT_GNU_EH_FRAME;
252b5132 5169 m->count = 1;
8ded5a0f 5170 m->sections[0] = eh_frame_hdr->output_section;
252b5132
RH
5171
5172 *pm = m;
5173 pm = &m->next;
5174 }
13ae64f3 5175
12bd6957 5176 if (elf_stack_flags (abfd))
13ae64f3 5177 {
8ded5a0f 5178 amt = sizeof (struct elf_segment_map);
a50b1753 5179 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
8ded5a0f
AM
5180 if (m == NULL)
5181 goto error_return;
5182 m->next = NULL;
2b05f1b7 5183 m->p_type = PT_GNU_STACK;
12bd6957 5184 m->p_flags = elf_stack_flags (abfd);
04c3a755 5185 m->p_align = bed->stack_align;
8ded5a0f 5186 m->p_flags_valid = 1;
04c3a755
NS
5187 m->p_align_valid = m->p_align != 0;
5188 if (info->stacksize > 0)
5189 {
5190 m->p_size = info->stacksize;
5191 m->p_size_valid = 1;
5192 }
252b5132 5193
8ded5a0f
AM
5194 *pm = m;
5195 pm = &m->next;
5196 }
65765700 5197
ceae84aa 5198 if (info != NULL && info->relro)
8ded5a0f 5199 {
f210dcff
L
5200 for (m = mfirst; m != NULL; m = m->next)
5201 {
3832a4d8
AM
5202 if (m->p_type == PT_LOAD
5203 && m->count != 0
5204 && m->sections[0]->vma >= info->relro_start
5205 && m->sections[0]->vma < info->relro_end)
f210dcff 5206 {
3832a4d8
AM
5207 i = m->count;
5208 while (--i != (unsigned) -1)
5209 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
5210 == (SEC_LOAD | SEC_HAS_CONTENTS))
5211 break;
5212
43a8475c 5213 if (i != (unsigned) -1)
f210dcff
L
5214 break;
5215 }
be01b344 5216 }
f210dcff
L
5217
5218 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
5219 if (m != NULL)
5220 {
5221 amt = sizeof (struct elf_segment_map);
a50b1753 5222 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
f210dcff
L
5223 if (m == NULL)
5224 goto error_return;
5225 m->next = NULL;
5226 m->p_type = PT_GNU_RELRO;
f210dcff
L
5227 *pm = m;
5228 pm = &m->next;
5229 }
8ded5a0f 5230 }
9ee5e499 5231
8ded5a0f 5232 free (sections);
12bd6957 5233 elf_seg_map (abfd) = mfirst;
9ee5e499
JJ
5234 }
5235
3dea8fca 5236 if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
8ded5a0f 5237 return FALSE;
8c37241b 5238
12bd6957 5239 for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
8ded5a0f 5240 ++count;
12bd6957 5241 elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
252b5132 5242
b34976b6 5243 return TRUE;
252b5132
RH
5244
5245 error_return:
5246 if (sections != NULL)
5247 free (sections);
b34976b6 5248 return FALSE;
252b5132
RH
5249}
5250
5251/* Sort sections by address. */
5252
5253static int
217aa764 5254elf_sort_sections (const void *arg1, const void *arg2)
252b5132
RH
5255{
5256 const asection *sec1 = *(const asection **) arg1;
5257 const asection *sec2 = *(const asection **) arg2;
eecdbe52 5258 bfd_size_type size1, size2;
252b5132
RH
5259
5260 /* Sort by LMA first, since this is the address used to
5261 place the section into a segment. */
5262 if (sec1->lma < sec2->lma)
5263 return -1;
5264 else if (sec1->lma > sec2->lma)
5265 return 1;
5266
5267 /* Then sort by VMA. Normally the LMA and the VMA will be
5268 the same, and this will do nothing. */
5269 if (sec1->vma < sec2->vma)
5270 return -1;
5271 else if (sec1->vma > sec2->vma)
5272 return 1;
5273
5274 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
5275
07c6e936 5276#define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
252b5132
RH
5277
5278 if (TOEND (sec1))
5279 {
48db3297 5280 if (!TOEND (sec2))
252b5132
RH
5281 return 1;
5282 }
00a7cdc5 5283 else if (TOEND (sec2))
252b5132
RH
5284 return -1;
5285
5286#undef TOEND
5287
00a7cdc5
NC
5288 /* Sort by size, to put zero sized sections
5289 before others at the same address. */
252b5132 5290
eea6121a
AM
5291 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5292 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
eecdbe52
JJ
5293
5294 if (size1 < size2)
252b5132 5295 return -1;
eecdbe52 5296 if (size1 > size2)
252b5132
RH
5297 return 1;
5298
5299 return sec1->target_index - sec2->target_index;
5300}
5301
30fe1832
AM
5302/* This qsort comparison functions sorts PT_LOAD segments first and
5303 by p_paddr, for assign_file_positions_for_load_sections. */
5304
5305static int
5306elf_sort_segments (const void *arg1, const void *arg2)
5307{
5308 const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5309 const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5310
5311 if (m1->p_type != m2->p_type)
5312 {
5313 if (m1->p_type == PT_NULL)
5314 return 1;
5315 if (m2->p_type == PT_NULL)
5316 return -1;
5317 return m1->p_type < m2->p_type ? -1 : 1;
5318 }
5319 if (m1->includes_filehdr != m2->includes_filehdr)
5320 return m1->includes_filehdr ? -1 : 1;
5321 if (m1->no_sort_lma != m2->no_sort_lma)
5322 return m1->no_sort_lma ? -1 : 1;
5323 if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5324 {
5325 bfd_vma lma1, lma2;
5326 lma1 = 0;
5327 if (m1->p_paddr_valid)
5328 lma1 = m1->p_paddr;
5329 else if (m1->count != 0)
5330 lma1 = m1->sections[0]->lma + m1->p_vaddr_offset;
5331 lma2 = 0;
5332 if (m2->p_paddr_valid)
5333 lma2 = m2->p_paddr;
5334 else if (m2->count != 0)
5335 lma2 = m2->sections[0]->lma + m2->p_vaddr_offset;
5336 if (lma1 != lma2)
5337 return lma1 < lma2 ? -1 : 1;
5338 }
5339 if (m1->idx != m2->idx)
5340 return m1->idx < m2->idx ? -1 : 1;
5341 return 0;
5342}
5343
340b6d91
AC
5344/* Ian Lance Taylor writes:
5345
5346 We shouldn't be using % with a negative signed number. That's just
5347 not good. We have to make sure either that the number is not
5348 negative, or that the number has an unsigned type. When the types
5349 are all the same size they wind up as unsigned. When file_ptr is a
5350 larger signed type, the arithmetic winds up as signed long long,
5351 which is wrong.
5352
5353 What we're trying to say here is something like ``increase OFF by
5354 the least amount that will cause it to be equal to the VMA modulo
5355 the page size.'' */
5356/* In other words, something like:
5357
5358 vma_offset = m->sections[0]->vma % bed->maxpagesize;
5359 off_offset = off % bed->maxpagesize;
5360 if (vma_offset < off_offset)
5361 adjustment = vma_offset + bed->maxpagesize - off_offset;
5362 else
5363 adjustment = vma_offset - off_offset;
08a40648 5364
de194d85 5365 which can be collapsed into the expression below. */
340b6d91
AC
5366
5367static file_ptr
5368vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5369{
dc9155b2
NC
5370 /* PR binutils/16199: Handle an alignment of zero. */
5371 if (maxpagesize == 0)
5372 maxpagesize = 1;
340b6d91
AC
5373 return ((vma - off) % maxpagesize);
5374}
5375
6d33f217
L
5376static void
5377print_segment_map (const struct elf_segment_map *m)
5378{
5379 unsigned int j;
5380 const char *pt = get_segment_type (m->p_type);
5381 char buf[32];
5382
5383 if (pt == NULL)
5384 {
5385 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5386 sprintf (buf, "LOPROC+%7.7x",
5387 (unsigned int) (m->p_type - PT_LOPROC));
5388 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5389 sprintf (buf, "LOOS+%7.7x",
5390 (unsigned int) (m->p_type - PT_LOOS));
5391 else
5392 snprintf (buf, sizeof (buf), "%8.8x",
5393 (unsigned int) m->p_type);
5394 pt = buf;
5395 }
4a97a0e5 5396 fflush (stdout);
6d33f217
L
5397 fprintf (stderr, "%s:", pt);
5398 for (j = 0; j < m->count; j++)
5399 fprintf (stderr, " %s", m->sections [j]->name);
5400 putc ('\n',stderr);
4a97a0e5 5401 fflush (stderr);
6d33f217
L
5402}
5403
32812159
AM
5404static bfd_boolean
5405write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
5406{
5407 void *buf;
5408 bfd_boolean ret;
5409
5410 if (bfd_seek (abfd, pos, SEEK_SET) != 0)
5411 return FALSE;
5412 buf = bfd_zmalloc (len);
5413 if (buf == NULL)
5414 return FALSE;
5415 ret = bfd_bwrite (buf, len, abfd) == len;
5416 free (buf);
5417 return ret;
5418}
5419
252b5132
RH
5420/* Assign file positions to the sections based on the mapping from
5421 sections to segments. This function also sets up some fields in
f3520d2f 5422 the file header. */
252b5132 5423
b34976b6 5424static bfd_boolean
f3520d2f
AM
5425assign_file_positions_for_load_sections (bfd *abfd,
5426 struct bfd_link_info *link_info)
252b5132
RH
5427{
5428 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132 5429 struct elf_segment_map *m;
30fe1832 5430 struct elf_segment_map *phdr_load_seg;
252b5132 5431 Elf_Internal_Phdr *phdrs;
252b5132 5432 Elf_Internal_Phdr *p;
02bf8d82 5433 file_ptr off;
3f570048 5434 bfd_size_type maxpagesize;
30fe1832 5435 unsigned int alloc, actual;
0920dee7 5436 unsigned int i, j;
30fe1832 5437 struct elf_segment_map **sorted_seg_map;
252b5132 5438
e36284ab 5439 if (link_info == NULL
ceae84aa 5440 && !_bfd_elf_map_sections_to_segments (abfd, link_info))
8ded5a0f 5441 return FALSE;
252b5132 5442
8ded5a0f 5443 alloc = 0;
12bd6957 5444 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
30fe1832 5445 m->idx = alloc++;
252b5132 5446
82f2dbf7
NC
5447 if (alloc)
5448 {
5449 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5450 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5451 }
5452 else
5453 {
5454 /* PR binutils/12467. */
5455 elf_elfheader (abfd)->e_phoff = 0;
5456 elf_elfheader (abfd)->e_phentsize = 0;
5457 }
d324f6d6 5458
8ded5a0f 5459 elf_elfheader (abfd)->e_phnum = alloc;
252b5132 5460
12bd6957 5461 if (elf_program_header_size (abfd) == (bfd_size_type) -1)
30fe1832
AM
5462 {
5463 actual = alloc;
5464 elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5465 }
8ded5a0f 5466 else
30fe1832
AM
5467 {
5468 actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5469 BFD_ASSERT (elf_program_header_size (abfd)
5470 == actual * bed->s->sizeof_phdr);
5471 BFD_ASSERT (actual >= alloc);
5472 }
252b5132
RH
5473
5474 if (alloc == 0)
f3520d2f 5475 {
12bd6957 5476 elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
8ded5a0f 5477 return TRUE;
f3520d2f 5478 }
252b5132 5479
12bd6957 5480 /* We're writing the size in elf_program_header_size (abfd),
57268894
HPN
5481 see assign_file_positions_except_relocs, so make sure we have
5482 that amount allocated, with trailing space cleared.
12bd6957
AM
5483 The variable alloc contains the computed need, while
5484 elf_program_header_size (abfd) contains the size used for the
57268894
HPN
5485 layout.
5486 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5487 where the layout is forced to according to a larger size in the
5488 last iterations for the testcase ld-elf/header. */
30fe1832
AM
5489 phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5490 + alloc * sizeof (*sorted_seg_map)));
5491 sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
f3520d2f 5492 elf_tdata (abfd)->phdr = phdrs;
252b5132 5493 if (phdrs == NULL)
b34976b6 5494 return FALSE;
252b5132 5495
30fe1832 5496 for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
252b5132 5497 {
30fe1832 5498 sorted_seg_map[j] = m;
252b5132 5499 /* If elf_segment_map is not from map_sections_to_segments, the
08a40648 5500 sections may not be correctly ordered. NOTE: sorting should
52e9b619
MS
5501 not be done to the PT_NOTE section of a corefile, which may
5502 contain several pseudo-sections artificially created by bfd.
5503 Sorting these pseudo-sections breaks things badly. */
47d9a591
AM
5504 if (m->count > 1
5505 && !(elf_elfheader (abfd)->e_type == ET_CORE
52e9b619 5506 && m->p_type == PT_NOTE))
48db3297
AM
5507 {
5508 for (i = 0; i < m->count; i++)
5509 m->sections[i]->target_index = i;
5510 qsort (m->sections, (size_t) m->count, sizeof (asection *),
5511 elf_sort_sections);
5512 }
30fe1832
AM
5513 }
5514 if (alloc > 1)
5515 qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
5516 elf_sort_segments);
5517
5518 maxpagesize = 1;
5519 if ((abfd->flags & D_PAGED) != 0)
5520 maxpagesize = bed->maxpagesize;
5521
5522 /* Sections must map to file offsets past the ELF file header. */
5523 off = bed->s->sizeof_ehdr;
5524 /* And if one of the PT_LOAD headers doesn't include the program
5525 headers then we'll be mapping program headers in the usual
5526 position after the ELF file header. */
5527 phdr_load_seg = NULL;
5528 for (j = 0; j < alloc; j++)
5529 {
5530 m = sorted_seg_map[j];
5531 if (m->p_type != PT_LOAD)
5532 break;
5533 if (m->includes_phdrs)
5534 {
5535 phdr_load_seg = m;
5536 break;
5537 }
5538 }
5539 if (phdr_load_seg == NULL)
5540 off += actual * bed->s->sizeof_phdr;
5541
5542 for (j = 0; j < alloc; j++)
5543 {
5544 asection **secpp;
5545 bfd_vma off_adjust;
5546 bfd_boolean no_contents;
252b5132 5547
b301b248
AM
5548 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
5549 number of sections with contents contributing to both p_filesz
5550 and p_memsz, followed by a number of sections with no contents
5551 that just contribute to p_memsz. In this loop, OFF tracks next
02bf8d82 5552 available file offset for PT_LOAD and PT_NOTE segments. */
30fe1832
AM
5553 m = sorted_seg_map[j];
5554 p = phdrs + m->idx;
252b5132 5555 p->p_type = m->p_type;
28a7f3e7 5556 p->p_flags = m->p_flags;
252b5132 5557
3f570048 5558 if (m->count == 0)
5d695627 5559 p->p_vaddr = m->p_vaddr_offset;
3f570048 5560 else
5d695627 5561 p->p_vaddr = m->sections[0]->vma + m->p_vaddr_offset;
3f570048
AM
5562
5563 if (m->p_paddr_valid)
5564 p->p_paddr = m->p_paddr;
5565 else if (m->count == 0)
5566 p->p_paddr = 0;
5567 else
5d695627 5568 p->p_paddr = m->sections[0]->lma + m->p_vaddr_offset;
3f570048
AM
5569
5570 if (p->p_type == PT_LOAD
5571 && (abfd->flags & D_PAGED) != 0)
5572 {
5573 /* p_align in demand paged PT_LOAD segments effectively stores
5574 the maximum page size. When copying an executable with
5575 objcopy, we set m->p_align from the input file. Use this
5576 value for maxpagesize rather than bed->maxpagesize, which
5577 may be different. Note that we use maxpagesize for PT_TLS
5578 segment alignment later in this function, so we are relying
5579 on at least one PT_LOAD segment appearing before a PT_TLS
5580 segment. */
5581 if (m->p_align_valid)
5582 maxpagesize = m->p_align;
5583
5584 p->p_align = maxpagesize;
5585 }
3271a814
NS
5586 else if (m->p_align_valid)
5587 p->p_align = m->p_align;
e970b90a
DJ
5588 else if (m->count == 0)
5589 p->p_align = 1 << bed->s->log_file_align;
30fe1832
AM
5590
5591 if (m == phdr_load_seg)
5592 {
5593 if (!m->includes_filehdr)
5594 p->p_offset = off;
5595 off += actual * bed->s->sizeof_phdr;
5596 }
3f570048 5597
bf988460
AM
5598 no_contents = FALSE;
5599 off_adjust = 0;
252b5132 5600 if (p->p_type == PT_LOAD
b301b248 5601 && m->count > 0)
252b5132 5602 {
b301b248 5603 bfd_size_type align;
a49e53ed 5604 unsigned int align_power = 0;
b301b248 5605
3271a814
NS
5606 if (m->p_align_valid)
5607 align = p->p_align;
5608 else
252b5132 5609 {
3271a814
NS
5610 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5611 {
5612 unsigned int secalign;
08a40648 5613
fd361982 5614 secalign = bfd_section_alignment (*secpp);
3271a814
NS
5615 if (secalign > align_power)
5616 align_power = secalign;
5617 }
5618 align = (bfd_size_type) 1 << align_power;
5619 if (align < maxpagesize)
5620 align = maxpagesize;
b301b248 5621 }
252b5132 5622
02bf8d82
AM
5623 for (i = 0; i < m->count; i++)
5624 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
5625 /* If we aren't making room for this section, then
5626 it must be SHT_NOBITS regardless of what we've
5627 set via struct bfd_elf_special_section. */
5628 elf_section_type (m->sections[i]) = SHT_NOBITS;
5629
bf988460 5630 /* Find out whether this segment contains any loadable
aea274d3
AM
5631 sections. */
5632 no_contents = TRUE;
5633 for (i = 0; i < m->count; i++)
5634 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
5635 {
5636 no_contents = FALSE;
5637 break;
5638 }
bf988460 5639
85cfcbfb 5640 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
a8c75b76
AM
5641
5642 /* Broken hardware and/or kernel require that files do not
5643 map the same page with different permissions on some hppa
5644 processors. */
30fe1832
AM
5645 if (j != 0
5646 && (abfd->flags & D_PAGED) != 0
a8c75b76
AM
5647 && bed->no_page_alias
5648 && (off & (maxpagesize - 1)) != 0
5649 && (off & -maxpagesize) == ((off + off_adjust) & -maxpagesize))
5650 off_adjust += maxpagesize;
bf988460
AM
5651 off += off_adjust;
5652 if (no_contents)
5653 {
5654 /* We shouldn't need to align the segment on disk since
5655 the segment doesn't need file space, but the gABI
5656 arguably requires the alignment and glibc ld.so
5657 checks it. So to comply with the alignment
5658 requirement but not waste file space, we adjust
5659 p_offset for just this segment. (OFF_ADJUST is
5660 subtracted from OFF later.) This may put p_offset
5661 past the end of file, but that shouldn't matter. */
5662 }
5663 else
5664 off_adjust = 0;
252b5132 5665 }
b1a6d0b1
NC
5666 /* Make sure the .dynamic section is the first section in the
5667 PT_DYNAMIC segment. */
5668 else if (p->p_type == PT_DYNAMIC
5669 && m->count > 1
5670 && strcmp (m->sections[0]->name, ".dynamic") != 0)
5671 {
5672 _bfd_error_handler
871b3ab2 5673 (_("%pB: The first section in the PT_DYNAMIC segment"
63a5468a 5674 " is not the .dynamic section"),
b301b248 5675 abfd);
b1a6d0b1
NC
5676 bfd_set_error (bfd_error_bad_value);
5677 return FALSE;
5678 }
3f001e84
JK
5679 /* Set the note section type to SHT_NOTE. */
5680 else if (p->p_type == PT_NOTE)
5681 for (i = 0; i < m->count; i++)
5682 elf_section_type (m->sections[i]) = SHT_NOTE;
252b5132 5683
252b5132
RH
5684 if (m->includes_filehdr)
5685 {
bf988460 5686 if (!m->p_flags_valid)
252b5132 5687 p->p_flags |= PF_R;
252b5132
RH
5688 p->p_filesz = bed->s->sizeof_ehdr;
5689 p->p_memsz = bed->s->sizeof_ehdr;
30fe1832 5690 if (p->p_type == PT_LOAD)
252b5132 5691 {
30fe1832 5692 if (m->count > 0)
252b5132 5693 {
30fe1832
AM
5694 if (p->p_vaddr < (bfd_vma) off
5695 || (!m->p_paddr_valid
5696 && p->p_paddr < (bfd_vma) off))
5697 {
5698 _bfd_error_handler
5699 (_("%pB: not enough room for program headers,"
5700 " try linking with -N"),
5701 abfd);
5702 bfd_set_error (bfd_error_bad_value);
5703 return FALSE;
5704 }
5705 p->p_vaddr -= off;
5706 if (!m->p_paddr_valid)
5707 p->p_paddr -= off;
252b5132 5708 }
30fe1832
AM
5709 }
5710 else if (sorted_seg_map[0]->includes_filehdr)
5711 {
5712 Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
5713 p->p_vaddr = filehdr->p_vaddr;
bf988460 5714 if (!m->p_paddr_valid)
30fe1832 5715 p->p_paddr = filehdr->p_paddr;
252b5132 5716 }
252b5132
RH
5717 }
5718
5719 if (m->includes_phdrs)
5720 {
bf988460 5721 if (!m->p_flags_valid)
252b5132 5722 p->p_flags |= PF_R;
30fe1832
AM
5723 p->p_filesz += actual * bed->s->sizeof_phdr;
5724 p->p_memsz += actual * bed->s->sizeof_phdr;
f3520d2f 5725 if (!m->includes_filehdr)
252b5132 5726 {
30fe1832 5727 if (p->p_type == PT_LOAD)
252b5132 5728 {
30fe1832
AM
5729 elf_elfheader (abfd)->e_phoff = p->p_offset;
5730 if (m->count > 0)
5731 {
5732 p->p_vaddr -= off - p->p_offset;
5733 if (!m->p_paddr_valid)
5734 p->p_paddr -= off - p->p_offset;
5735 }
5736 }
5737 else if (phdr_load_seg != NULL)
5738 {
5739 Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
5740 bfd_vma phdr_off = 0;
5741 if (phdr_load_seg->includes_filehdr)
5742 phdr_off = bed->s->sizeof_ehdr;
5743 p->p_vaddr = phdr->p_vaddr + phdr_off;
bf988460 5744 if (!m->p_paddr_valid)
30fe1832
AM
5745 p->p_paddr = phdr->p_paddr + phdr_off;
5746 p->p_offset = phdr->p_offset + phdr_off;
252b5132 5747 }
30fe1832
AM
5748 else
5749 p->p_offset = bed->s->sizeof_ehdr;
2b0bc088 5750 }
252b5132
RH
5751 }
5752
5753 if (p->p_type == PT_LOAD
5754 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
5755 {
bf988460 5756 if (!m->includes_filehdr && !m->includes_phdrs)
0bc3450e
AM
5757 {
5758 p->p_offset = off;
5759 if (no_contents)
67641dd3
AM
5760 {
5761 /* Put meaningless p_offset for PT_LOAD segments
5762 without file contents somewhere within the first
5763 page, in an attempt to not point past EOF. */
5764 bfd_size_type align = maxpagesize;
5765 if (align < p->p_align)
5766 align = p->p_align;
5767 if (align < 1)
5768 align = 1;
5769 p->p_offset = off % align;
5770 }
0bc3450e 5771 }
252b5132
RH
5772 else
5773 {
5774 file_ptr adjust;
5775
5776 adjust = off - (p->p_offset + p->p_filesz);
bf988460
AM
5777 if (!no_contents)
5778 p->p_filesz += adjust;
252b5132
RH
5779 p->p_memsz += adjust;
5780 }
5781 }
5782
1ea63fd2
AM
5783 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
5784 maps. Set filepos for sections in PT_LOAD segments, and in
5785 core files, for sections in PT_NOTE segments.
5786 assign_file_positions_for_non_load_sections will set filepos
5787 for other sections and update p_filesz for other segments. */
252b5132
RH
5788 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5789 {
5790 asection *sec;
252b5132 5791 bfd_size_type align;
627b32bc 5792 Elf_Internal_Shdr *this_hdr;
252b5132
RH
5793
5794 sec = *secpp;
02bf8d82 5795 this_hdr = &elf_section_data (sec)->this_hdr;
fd361982 5796 align = (bfd_size_type) 1 << bfd_section_alignment (sec);
252b5132 5797
88967714
AM
5798 if ((p->p_type == PT_LOAD
5799 || p->p_type == PT_TLS)
5800 && (this_hdr->sh_type != SHT_NOBITS
5801 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
5802 && ((this_hdr->sh_flags & SHF_TLS) == 0
5803 || p->p_type == PT_TLS))))
252b5132 5804 {
b5599592
AM
5805 bfd_vma p_start = p->p_paddr;
5806 bfd_vma p_end = p_start + p->p_memsz;
5807 bfd_vma s_start = sec->lma;
5808 bfd_vma adjust = s_start - p_end;
252b5132 5809
a2d1e028
L
5810 if (adjust != 0
5811 && (s_start < p_end
5812 || p_end < p_start))
252b5132 5813 {
4eca0228 5814 _bfd_error_handler
695344c0 5815 /* xgettext:c-format */
2dcf00ce
AM
5816 (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64),
5817 abfd, sec, (uint64_t) s_start, (uint64_t) p_end);
88967714 5818 adjust = 0;
b5599592 5819 sec->lma = p_end;
1cfb7d1e 5820 }
3ac9b6c9 5821 p->p_memsz += adjust;
1cfb7d1e 5822
88967714
AM
5823 if (this_hdr->sh_type != SHT_NOBITS)
5824 {
30fe1832 5825 if (p->p_type == PT_LOAD)
32812159 5826 {
30fe1832
AM
5827 if (p->p_filesz + adjust < p->p_memsz)
5828 {
5829 /* We have a PROGBITS section following NOBITS ones.
5830 Allocate file space for the NOBITS section(s) and
5831 zero it. */
5832 adjust = p->p_memsz - p->p_filesz;
5833 if (!write_zeros (abfd, off, adjust))
5834 return FALSE;
5835 }
5836 off += adjust;
32812159 5837 }
88967714 5838 p->p_filesz += adjust;
252b5132 5839 }
252b5132
RH
5840 }
5841
5842 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
5843 {
b301b248
AM
5844 /* The section at i == 0 is the one that actually contains
5845 everything. */
4a938328
MS
5846 if (i == 0)
5847 {
627b32bc 5848 this_hdr->sh_offset = sec->filepos = off;
6a3cd2b4
AM
5849 off += this_hdr->sh_size;
5850 p->p_filesz = this_hdr->sh_size;
b301b248
AM
5851 p->p_memsz = 0;
5852 p->p_align = 1;
252b5132 5853 }
4a938328 5854 else
252b5132 5855 {
b301b248 5856 /* The rest are fake sections that shouldn't be written. */
252b5132 5857 sec->filepos = 0;
eea6121a 5858 sec->size = 0;
b301b248
AM
5859 sec->flags = 0;
5860 continue;
252b5132 5861 }
252b5132
RH
5862 }
5863 else
5864 {
1e951488 5865 if (p->p_type == PT_LOAD)
b301b248 5866 {
1e951488
AM
5867 this_hdr->sh_offset = sec->filepos = off;
5868 if (this_hdr->sh_type != SHT_NOBITS)
5869 off += this_hdr->sh_size;
5870 }
5871 else if (this_hdr->sh_type == SHT_NOBITS
5872 && (this_hdr->sh_flags & SHF_TLS) != 0
5873 && this_hdr->sh_offset == 0)
5874 {
5875 /* This is a .tbss section that didn't get a PT_LOAD.
5876 (See _bfd_elf_map_sections_to_segments "Create a
5877 final PT_LOAD".) Set sh_offset to the value it
5878 would have if we had created a zero p_filesz and
5879 p_memsz PT_LOAD header for the section. This
5880 also makes the PT_TLS header have the same
5881 p_offset value. */
5882 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
5883 off, align);
5884 this_hdr->sh_offset = sec->filepos = off + adjust;
b301b248 5885 }
252b5132 5886
02bf8d82 5887 if (this_hdr->sh_type != SHT_NOBITS)
b301b248 5888 {
6a3cd2b4 5889 p->p_filesz += this_hdr->sh_size;
02bf8d82
AM
5890 /* A load section without SHF_ALLOC is something like
5891 a note section in a PT_NOTE segment. These take
5892 file space but are not loaded into memory. */
5893 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
6a3cd2b4 5894 p->p_memsz += this_hdr->sh_size;
b301b248 5895 }
6a3cd2b4 5896 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
13ae64f3 5897 {
6a3cd2b4
AM
5898 if (p->p_type == PT_TLS)
5899 p->p_memsz += this_hdr->sh_size;
5900
5901 /* .tbss is special. It doesn't contribute to p_memsz of
5902 normal segments. */
5903 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
5904 p->p_memsz += this_hdr->sh_size;
13ae64f3
JJ
5905 }
5906
b10a8ae0
L
5907 if (align > p->p_align
5908 && !m->p_align_valid
5909 && (p->p_type != PT_LOAD
5910 || (abfd->flags & D_PAGED) == 0))
252b5132
RH
5911 p->p_align = align;
5912 }
5913
bf988460 5914 if (!m->p_flags_valid)
252b5132
RH
5915 {
5916 p->p_flags |= PF_R;
02bf8d82 5917 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
252b5132 5918 p->p_flags |= PF_X;
02bf8d82 5919 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
252b5132
RH
5920 p->p_flags |= PF_W;
5921 }
5922 }
43a8475c 5923
bf988460 5924 off -= off_adjust;
0920dee7 5925
30fe1832
AM
5926 /* PR ld/20815 - Check that the program header segment, if
5927 present, will be loaded into memory. */
5928 if (p->p_type == PT_PHDR
5929 && phdr_load_seg == NULL
5930 && !(bed->elf_backend_allow_non_load_phdr != NULL
5931 && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
5932 {
5933 /* The fix for this error is usually to edit the linker script being
5934 used and set up the program headers manually. Either that or
5935 leave room for the headers at the start of the SECTIONS. */
5936 _bfd_error_handler (_("%pB: error: PHDR segment not covered"
5937 " by LOAD segment"),
5938 abfd);
5939 return FALSE;
5940 }
5941
7c928300
AM
5942 /* Check that all sections are in a PT_LOAD segment.
5943 Don't check funky gdb generated core files. */
5944 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
9a83a553
AM
5945 {
5946 bfd_boolean check_vma = TRUE;
5947
5948 for (i = 1; i < m->count; i++)
5949 if (m->sections[i]->vma == m->sections[i - 1]->vma
5950 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
5951 ->this_hdr), p) != 0
5952 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
5953 ->this_hdr), p) != 0)
0920dee7 5954 {
9a83a553
AM
5955 /* Looks like we have overlays packed into the segment. */
5956 check_vma = FALSE;
5957 break;
0920dee7 5958 }
9a83a553
AM
5959
5960 for (i = 0; i < m->count; i++)
5961 {
5962 Elf_Internal_Shdr *this_hdr;
5963 asection *sec;
5964
5965 sec = m->sections[i];
5966 this_hdr = &(elf_section_data(sec)->this_hdr);
86b2281f
AM
5967 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
5968 && !ELF_TBSS_SPECIAL (this_hdr, p))
9a83a553 5969 {
4eca0228 5970 _bfd_error_handler
695344c0 5971 /* xgettext:c-format */
871b3ab2 5972 (_("%pB: section `%pA' can't be allocated in segment %d"),
9a83a553
AM
5973 abfd, sec, j);
5974 print_segment_map (m);
5975 }
5976 }
5977 }
252b5132
RH
5978 }
5979
12bd6957 5980 elf_next_file_pos (abfd) = off;
30fe1832
AM
5981
5982 if (link_info != NULL
5983 && phdr_load_seg != NULL
5984 && phdr_load_seg->includes_filehdr)
5985 {
5986 /* There is a segment that contains both the file headers and the
5987 program headers, so provide a symbol __ehdr_start pointing there.
5988 A program can use this to examine itself robustly. */
5989
5990 struct elf_link_hash_entry *hash
5991 = elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
5992 FALSE, FALSE, TRUE);
5993 /* If the symbol was referenced and not defined, define it. */
5994 if (hash != NULL
5995 && (hash->root.type == bfd_link_hash_new
5996 || hash->root.type == bfd_link_hash_undefined
5997 || hash->root.type == bfd_link_hash_undefweak
5998 || hash->root.type == bfd_link_hash_common))
5999 {
6000 asection *s = NULL;
6001 bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr;
6002
6003 if (phdr_load_seg->count != 0)
6004 /* The segment contains sections, so use the first one. */
6005 s = phdr_load_seg->sections[0];
6006 else
6007 /* Use the first (i.e. lowest-addressed) section in any segment. */
6008 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6009 if (m->p_type == PT_LOAD && m->count != 0)
6010 {
6011 s = m->sections[0];
6012 break;
6013 }
6014
6015 if (s != NULL)
6016 {
6017 hash->root.u.def.value = filehdr_vaddr - s->vma;
6018 hash->root.u.def.section = s;
6019 }
6020 else
6021 {
6022 hash->root.u.def.value = filehdr_vaddr;
6023 hash->root.u.def.section = bfd_abs_section_ptr;
6024 }
6025
6026 hash->root.type = bfd_link_hash_defined;
6027 hash->def_regular = 1;
6028 hash->non_elf = 0;
6029 }
6030 }
6031
f3520d2f
AM
6032 return TRUE;
6033}
6034
1faa385f
NC
6035/* Determine if a bfd is a debuginfo file. Unfortunately there
6036 is no defined method for detecting such files, so we have to
6037 use heuristics instead. */
6038
6039bfd_boolean
6040is_debuginfo_file (bfd *abfd)
6041{
6042 if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6043 return FALSE;
6044
6045 Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6046 Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6047 Elf_Internal_Shdr **headerp;
6048
6049 for (headerp = start_headers; headerp < end_headers; headerp ++)
6050 {
6051 Elf_Internal_Shdr *header = * headerp;
6052
6053 /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6054 The only allocated sections are SHT_NOBITS or SHT_NOTES. */
6055 if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6056 && header->sh_type != SHT_NOBITS
6057 && header->sh_type != SHT_NOTE)
6058 return FALSE;
6059 }
6060
6061 return TRUE;
6062}
6063
1ff6de03
NA
6064/* Assign file positions for the other sections, except for compressed debugging
6065 and other sections assigned in _bfd_elf_assign_file_positions_for_non_load(). */
f3520d2f
AM
6066
6067static bfd_boolean
6068assign_file_positions_for_non_load_sections (bfd *abfd,
6069 struct bfd_link_info *link_info)
6070{
6071 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6072 Elf_Internal_Shdr **i_shdrpp;
e06efbf1 6073 Elf_Internal_Shdr **hdrpp, **end_hdrpp;
f3520d2f
AM
6074 Elf_Internal_Phdr *phdrs;
6075 Elf_Internal_Phdr *p;
6076 struct elf_segment_map *m;
f3520d2f 6077 file_ptr off;
f3520d2f 6078
5c182d5f 6079 i_shdrpp = elf_elfsections (abfd);
e06efbf1 6080 end_hdrpp = i_shdrpp + elf_numsections (abfd);
12bd6957 6081 off = elf_next_file_pos (abfd);
e06efbf1 6082 for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
5c182d5f 6083 {
5c182d5f
AM
6084 Elf_Internal_Shdr *hdr;
6085
6086 hdr = *hdrpp;
6087 if (hdr->bfd_section != NULL
252e386e
AM
6088 && (hdr->bfd_section->filepos != 0
6089 || (hdr->sh_type == SHT_NOBITS
6090 && hdr->contents == NULL)))
627b32bc 6091 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
5c182d5f
AM
6092 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6093 {
1faa385f
NC
6094 if (hdr->sh_size != 0
6095 /* PR 24717 - debuginfo files are known to be not strictly
6096 compliant with the ELF standard. In particular they often
6097 have .note.gnu.property sections that are outside of any
6098 loadable segment. This is not a problem for such files,
6099 so do not warn about them. */
6100 && ! is_debuginfo_file (abfd))
4eca0228 6101 _bfd_error_handler
695344c0 6102 /* xgettext:c-format */
871b3ab2 6103 (_("%pB: warning: allocated section `%s' not in segment"),
e8d2ba53
AM
6104 abfd,
6105 (hdr->bfd_section == NULL
6106 ? "*unknown*"
6107 : hdr->bfd_section->name));
3ba71138
L
6108 /* We don't need to page align empty sections. */
6109 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
5c182d5f
AM
6110 off += vma_page_aligned_bias (hdr->sh_addr, off,
6111 bed->maxpagesize);
6112 else
6113 off += vma_page_aligned_bias (hdr->sh_addr, off,
6114 hdr->sh_addralign);
6115 off = _bfd_elf_assign_file_position_for_section (hdr, off,
6116 FALSE);
6117 }
6118 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6119 && hdr->bfd_section == NULL)
1ff6de03
NA
6120 /* We don't know the offset of these sections yet: their size has
6121 not been decided. */
0ce398f1 6122 || (hdr->bfd_section != NULL
1ff6de03
NA
6123 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6124 || (bfd_section_is_ctf (hdr->bfd_section)
6125 && abfd->is_linker_output)))
12bd6957 6126 || hdr == i_shdrpp[elf_onesymtab (abfd)]
6a40cf0c
NC
6127 || (elf_symtab_shndx_list (abfd) != NULL
6128 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
3e19fb8f
L
6129 || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6130 || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
5c182d5f
AM
6131 hdr->sh_offset = -1;
6132 else
6133 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
5c182d5f 6134 }
30fe1832 6135 elf_next_file_pos (abfd) = off;
5c182d5f 6136
252b5132
RH
6137 /* Now that we have set the section file positions, we can set up
6138 the file positions for the non PT_LOAD segments. */
f3520d2f 6139 phdrs = elf_tdata (abfd)->phdr;
12bd6957 6140 for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
252b5132 6141 {
129af99f 6142 if (p->p_type == PT_GNU_RELRO)
252b5132 6143 {
f2731e0c 6144 bfd_vma start, end;
01f7e10c 6145 bfd_boolean ok;
1ea63fd2 6146
129af99f 6147 if (link_info != NULL)
8c37241b 6148 {
129af99f 6149 /* During linking the range of the RELRO segment is passed
f2731e0c
AM
6150 in link_info. Note that there may be padding between
6151 relro_start and the first RELRO section. */
6152 start = link_info->relro_start;
6153 end = link_info->relro_end;
6154 }
6155 else if (m->count != 0)
6156 {
6157 if (!m->p_size_valid)
6158 abort ();
6159 start = m->sections[0]->vma;
6160 end = start + m->p_size;
6161 }
6162 else
6163 {
6164 start = 0;
6165 end = 0;
6166 }
6167
01f7e10c 6168 ok = FALSE;
f2731e0c
AM
6169 if (start < end)
6170 {
6171 struct elf_segment_map *lm;
6172 const Elf_Internal_Phdr *lp;
6173 unsigned int i;
6174
6175 /* Find a LOAD segment containing a section in the RELRO
6176 segment. */
12bd6957 6177 for (lm = elf_seg_map (abfd), lp = phdrs;
3146fac4
AM
6178 lm != NULL;
6179 lm = lm->next, lp++)
8c37241b
JJ
6180 {
6181 if (lp->p_type == PT_LOAD
3146fac4 6182 && lm->count != 0
dbc88fc1
AM
6183 && (lm->sections[lm->count - 1]->vma
6184 + (!IS_TBSS (lm->sections[lm->count - 1])
6185 ? lm->sections[lm->count - 1]->size
6186 : 0)) > start
f2731e0c 6187 && lm->sections[0]->vma < end)
8c37241b
JJ
6188 break;
6189 }
f2731e0c 6190
01f7e10c 6191 if (lm != NULL)
129af99f 6192 {
01f7e10c
AM
6193 /* Find the section starting the RELRO segment. */
6194 for (i = 0; i < lm->count; i++)
6195 {
6196 asection *s = lm->sections[i];
6197 if (s->vma >= start
6198 && s->vma < end
6199 && s->size != 0)
6200 break;
6201 }
6202
6203 if (i < lm->count)
6204 {
6205 p->p_vaddr = lm->sections[i]->vma;
6206 p->p_paddr = lm->sections[i]->lma;
6207 p->p_offset = lm->sections[i]->filepos;
6208 p->p_memsz = end - p->p_vaddr;
6209 p->p_filesz = p->p_memsz;
6210
6211 /* The RELRO segment typically ends a few bytes
6212 into .got.plt but other layouts are possible.
6213 In cases where the end does not match any
6214 loaded section (for instance is in file
6215 padding), trim p_filesz back to correspond to
6216 the end of loaded section contents. */
6217 if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6218 p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6219
6220 /* Preserve the alignment and flags if they are
6221 valid. The gold linker generates RW/4 for
6222 the PT_GNU_RELRO section. It is better for
6223 objcopy/strip to honor these attributes
6224 otherwise gdb will choke when using separate
6225 debug files. */
6226 if (!m->p_align_valid)
6227 p->p_align = 1;
6228 if (!m->p_flags_valid)
6229 p->p_flags = PF_R;
6230 ok = TRUE;
6231 }
129af99f 6232 }
b84a33b5 6233 }
01f7e10c
AM
6234 if (link_info != NULL)
6235 BFD_ASSERT (ok);
6236 if (!ok)
6237 memset (p, 0, sizeof *p);
129af99f 6238 }
04c3a755
NS
6239 else if (p->p_type == PT_GNU_STACK)
6240 {
6241 if (m->p_size_valid)
6242 p->p_memsz = m->p_size;
6243 }
129af99f
AS
6244 else if (m->count != 0)
6245 {
e06efbf1 6246 unsigned int i;
1a9ccd70 6247
129af99f
AS
6248 if (p->p_type != PT_LOAD
6249 && (p->p_type != PT_NOTE
6250 || bfd_get_format (abfd) != bfd_core))
6251 {
1a9ccd70
NC
6252 /* A user specified segment layout may include a PHDR
6253 segment that overlaps with a LOAD segment... */
6254 if (p->p_type == PT_PHDR)
6255 {
6256 m->count = 0;
6257 continue;
6258 }
6259
c86934ce
NC
6260 if (m->includes_filehdr || m->includes_phdrs)
6261 {
b1fa9dd6 6262 /* PR 17512: file: 2195325e. */
4eca0228 6263 _bfd_error_handler
871b3ab2 6264 (_("%pB: error: non-load segment %d includes file header "
76cfced5
AM
6265 "and/or program header"),
6266 abfd, (int) (p - phdrs));
c86934ce
NC
6267 return FALSE;
6268 }
129af99f 6269
86b2281f 6270 p->p_filesz = 0;
129af99f 6271 p->p_offset = m->sections[0]->filepos;
86b2281f
AM
6272 for (i = m->count; i-- != 0;)
6273 {
6274 asection *sect = m->sections[i];
6275 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6276 if (hdr->sh_type != SHT_NOBITS)
6277 {
6278 p->p_filesz = (sect->filepos - m->sections[0]->filepos
6279 + hdr->sh_size);
6280 break;
6281 }
6282 }
129af99f
AS
6283 }
6284 }
252b5132
RH
6285 }
6286
b34976b6 6287 return TRUE;
252b5132
RH
6288}
6289
6a40cf0c
NC
6290static elf_section_list *
6291find_section_in_list (unsigned int i, elf_section_list * list)
6292{
6293 for (;list != NULL; list = list->next)
6294 if (list->ndx == i)
6295 break;
6296 return list;
6297}
6298
252b5132
RH
6299/* Work out the file positions of all the sections. This is called by
6300 _bfd_elf_compute_section_file_positions. All the section sizes and
6301 VMAs must be known before this is called.
6302
e0638f70 6303 Reloc sections come in two flavours: Those processed specially as
1ff6de03
NA
6304 "side-channel" data attached to a section to which they apply, and those that
6305 bfd doesn't process as relocations. The latter sort are stored in a normal
6306 bfd section by bfd_section_from_shdr. We don't consider the former sort
6307 here, unless they form part of the loadable image. Reloc sections not
6308 assigned here (and compressed debugging sections and CTF sections which
6309 nothing else in the file can rely upon) will be handled later by
e0638f70 6310 assign_file_positions_for_relocs.
252b5132
RH
6311
6312 We also don't set the positions of the .symtab and .strtab here. */
6313
b34976b6 6314static bfd_boolean
c84fca4d
AO
6315assign_file_positions_except_relocs (bfd *abfd,
6316 struct bfd_link_info *link_info)
252b5132 6317{
5c182d5f
AM
6318 struct elf_obj_tdata *tdata = elf_tdata (abfd);
6319 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
9c5bfbb7 6320 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6d6c25c8 6321 unsigned int alloc;
252b5132
RH
6322
6323 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6324 && bfd_get_format (abfd) != bfd_core)
6325 {
5c182d5f
AM
6326 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6327 unsigned int num_sec = elf_numsections (abfd);
252b5132
RH
6328 Elf_Internal_Shdr **hdrpp;
6329 unsigned int i;
a485e98e 6330 file_ptr off;
252b5132
RH
6331
6332 /* Start after the ELF header. */
6333 off = i_ehdrp->e_ehsize;
6334
6335 /* We are not creating an executable, which means that we are
6336 not creating a program header, and that the actual order of
6337 the sections in the file is unimportant. */
9ad5cbcf 6338 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
252b5132
RH
6339 {
6340 Elf_Internal_Shdr *hdr;
6341
6342 hdr = *hdrpp;
e0638f70
AM
6343 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6344 && hdr->bfd_section == NULL)
1ff6de03
NA
6345 /* Do not assign offsets for these sections yet: we don't know
6346 their sizes. */
0ce398f1 6347 || (hdr->bfd_section != NULL
1ff6de03
NA
6348 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6349 || (bfd_section_is_ctf (hdr->bfd_section)
6350 && abfd->is_linker_output)))
12bd6957 6351 || i == elf_onesymtab (abfd)
6a40cf0c
NC
6352 || (elf_symtab_shndx_list (abfd) != NULL
6353 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
3e19fb8f
L
6354 || i == elf_strtab_sec (abfd)
6355 || i == elf_shstrtab_sec (abfd))
252b5132
RH
6356 {
6357 hdr->sh_offset = -1;
252b5132 6358 }
9ad5cbcf 6359 else
b34976b6 6360 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
252b5132 6361 }
a485e98e
AM
6362
6363 elf_next_file_pos (abfd) = off;
6d6c25c8 6364 elf_program_header_size (abfd) = 0;
252b5132
RH
6365 }
6366 else
6367 {
252b5132 6368 /* Assign file positions for the loaded sections based on the
08a40648 6369 assignment of sections to segments. */
f3520d2f
AM
6370 if (!assign_file_positions_for_load_sections (abfd, link_info))
6371 return FALSE;
6372
6373 /* And for non-load sections. */
6374 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6375 return FALSE;
6d6c25c8 6376 }
f3520d2f 6377
6d6c25c8
AM
6378 if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6379 return FALSE;
1a9ccd70 6380
6d6c25c8
AM
6381 /* Write out the program headers. */
6382 alloc = i_ehdrp->e_phnum;
6383 if (alloc != 0)
6384 {
30fe1832 6385 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
cd584857
NC
6386 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
6387 return FALSE;
252b5132
RH
6388 }
6389
b34976b6 6390 return TRUE;
252b5132
RH
6391}
6392
ed7e9d0b
AM
6393bfd_boolean
6394_bfd_elf_init_file_header (bfd *abfd,
6395 struct bfd_link_info *info ATTRIBUTE_UNUSED)
252b5132 6396{
3d540e93 6397 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
2b0f7ef9 6398 struct elf_strtab_hash *shstrtab;
9c5bfbb7 6399 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132
RH
6400
6401 i_ehdrp = elf_elfheader (abfd);
252b5132 6402
2b0f7ef9 6403 shstrtab = _bfd_elf_strtab_init ();
252b5132 6404 if (shstrtab == NULL)
b34976b6 6405 return FALSE;
252b5132
RH
6406
6407 elf_shstrtab (abfd) = shstrtab;
6408
6409 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
6410 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
6411 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
6412 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
6413
6414 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
6415 i_ehdrp->e_ident[EI_DATA] =
6416 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
6417 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
6418
252b5132
RH
6419 if ((abfd->flags & DYNAMIC) != 0)
6420 i_ehdrp->e_type = ET_DYN;
6421 else if ((abfd->flags & EXEC_P) != 0)
6422 i_ehdrp->e_type = ET_EXEC;
6423 else if (bfd_get_format (abfd) == bfd_core)
6424 i_ehdrp->e_type = ET_CORE;
6425 else
6426 i_ehdrp->e_type = ET_REL;
6427
6428 switch (bfd_get_arch (abfd))
6429 {
6430 case bfd_arch_unknown:
6431 i_ehdrp->e_machine = EM_NONE;
6432 break;
aa4f99bb
AO
6433
6434 /* There used to be a long list of cases here, each one setting
6435 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
6436 in the corresponding bfd definition. To avoid duplication,
6437 the switch was removed. Machines that need special handling
6438 can generally do it in elf_backend_final_write_processing(),
6439 unless they need the information earlier than the final write.
6440 Such need can generally be supplied by replacing the tests for
6441 e_machine with the conditions used to determine it. */
252b5132 6442 default:
9c5bfbb7
AM
6443 i_ehdrp->e_machine = bed->elf_machine_code;
6444 }
aa4f99bb 6445
252b5132
RH
6446 i_ehdrp->e_version = bed->s->ev_current;
6447 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
6448
c044fabd 6449 /* No program header, for now. */
252b5132
RH
6450 i_ehdrp->e_phoff = 0;
6451 i_ehdrp->e_phentsize = 0;
6452 i_ehdrp->e_phnum = 0;
6453
c044fabd 6454 /* Each bfd section is section header entry. */
252b5132
RH
6455 i_ehdrp->e_entry = bfd_get_start_address (abfd);
6456 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
6457
252b5132 6458 elf_tdata (abfd)->symtab_hdr.sh_name =
b34976b6 6459 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
252b5132 6460 elf_tdata (abfd)->strtab_hdr.sh_name =
b34976b6 6461 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
252b5132 6462 elf_tdata (abfd)->shstrtab_hdr.sh_name =
b34976b6 6463 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
252b5132 6464 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
17ca87fc 6465 || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
252b5132 6466 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
b34976b6 6467 return FALSE;
252b5132 6468
b34976b6 6469 return TRUE;
252b5132
RH
6470}
6471
6d6c25c8
AM
6472/* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
6473
6474 FIXME: We used to have code here to sort the PT_LOAD segments into
6475 ascending order, as per the ELF spec. But this breaks some programs,
6476 including the Linux kernel. But really either the spec should be
6477 changed or the programs updated. */
6478
6479bfd_boolean
6480_bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
6481{
6482 if (link_info != NULL && bfd_link_pie (link_info))
6483 {
6484 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
6485 unsigned int num_segments = i_ehdrp->e_phnum;
6486 struct elf_obj_tdata *tdata = elf_tdata (obfd);
6487 Elf_Internal_Phdr *segment = tdata->phdr;
6488 Elf_Internal_Phdr *end_segment = &segment[num_segments];
6489
6490 /* Find the lowest p_vaddr in PT_LOAD segments. */
6491 bfd_vma p_vaddr = (bfd_vma) -1;
6492 for (; segment < end_segment; segment++)
6493 if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
6494 p_vaddr = segment->p_vaddr;
6495
6496 /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
6497 segments is non-zero. */
6498 if (p_vaddr)
6499 i_ehdrp->e_type = ET_EXEC;
6500 }
6501 return TRUE;
6502}
6503
252b5132 6504/* Assign file positions for all the reloc sections which are not part
a485e98e 6505 of the loadable file image, and the file position of section headers. */
252b5132 6506
0ce398f1
L
6507static bfd_boolean
6508_bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
252b5132
RH
6509{
6510 file_ptr off;
e06efbf1 6511 Elf_Internal_Shdr **shdrpp, **end_shdrpp;
3e19fb8f 6512 Elf_Internal_Shdr *shdrp;
a485e98e
AM
6513 Elf_Internal_Ehdr *i_ehdrp;
6514 const struct elf_backend_data *bed;
252b5132 6515
12bd6957 6516 off = elf_next_file_pos (abfd);
252b5132 6517
e06efbf1
L
6518 shdrpp = elf_elfsections (abfd);
6519 end_shdrpp = shdrpp + elf_numsections (abfd);
6520 for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
252b5132 6521 {
252b5132 6522 shdrp = *shdrpp;
0ce398f1
L
6523 if (shdrp->sh_offset == -1)
6524 {
3e19fb8f 6525 asection *sec = shdrp->bfd_section;
0ce398f1
L
6526 bfd_boolean is_rel = (shdrp->sh_type == SHT_REL
6527 || shdrp->sh_type == SHT_RELA);
1ff6de03 6528 bfd_boolean is_ctf = sec && bfd_section_is_ctf (sec);
0ce398f1 6529 if (is_rel
1ff6de03 6530 || is_ctf
3e19fb8f 6531 || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
0ce398f1 6532 {
1ff6de03 6533 if (!is_rel && !is_ctf)
0ce398f1 6534 {
3e19fb8f
L
6535 const char *name = sec->name;
6536 struct bfd_elf_section_data *d;
6537
0ce398f1 6538 /* Compress DWARF debug sections. */
3e19fb8f 6539 if (!bfd_compress_section (abfd, sec,
0ce398f1
L
6540 shdrp->contents))
6541 return FALSE;
3e19fb8f
L
6542
6543 if (sec->compress_status == COMPRESS_SECTION_DONE
6544 && (abfd->flags & BFD_COMPRESS_GABI) == 0)
6545 {
6546 /* If section is compressed with zlib-gnu, convert
6547 section name from .debug_* to .zdebug_*. */
6548 char *new_name
6549 = convert_debug_to_zdebug (abfd, name);
6550 if (new_name == NULL)
6551 return FALSE;
6552 name = new_name;
6553 }
dd905818 6554 /* Add section name to section name section. */
3e19fb8f
L
6555 if (shdrp->sh_name != (unsigned int) -1)
6556 abort ();
6557 shdrp->sh_name
6558 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
6559 name, FALSE);
6560 d = elf_section_data (sec);
6561
dd905818 6562 /* Add reloc section name to section name section. */
3e19fb8f
L
6563 if (d->rel.hdr
6564 && !_bfd_elf_set_reloc_sh_name (abfd,
6565 d->rel.hdr,
6566 name, FALSE))
6567 return FALSE;
6568 if (d->rela.hdr
6569 && !_bfd_elf_set_reloc_sh_name (abfd,
6570 d->rela.hdr,
91cb26da 6571 name, TRUE))
3e19fb8f
L
6572 return FALSE;
6573
0ce398f1 6574 /* Update section size and contents. */
3e19fb8f
L
6575 shdrp->sh_size = sec->size;
6576 shdrp->contents = sec->contents;
0ce398f1
L
6577 shdrp->bfd_section->contents = NULL;
6578 }
1ff6de03
NA
6579 else if (is_ctf)
6580 {
6581 /* Update section size and contents. */
6582 shdrp->sh_size = sec->size;
6583 shdrp->contents = sec->contents;
6584 }
6585
0ce398f1
L
6586 off = _bfd_elf_assign_file_position_for_section (shdrp,
6587 off,
6588 TRUE);
6589 }
6590 }
252b5132
RH
6591 }
6592
3e19fb8f
L
6593 /* Place section name section after DWARF debug sections have been
6594 compressed. */
6595 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
6596 shdrp = &elf_tdata (abfd)->shstrtab_hdr;
6597 shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
6598 off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
6599
6600 /* Place the section headers. */
a485e98e
AM
6601 i_ehdrp = elf_elfheader (abfd);
6602 bed = get_elf_backend_data (abfd);
6603 off = align_file_position (off, 1 << bed->s->log_file_align);
6604 i_ehdrp->e_shoff = off;
6605 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
12bd6957 6606 elf_next_file_pos (abfd) = off;
0ce398f1
L
6607
6608 return TRUE;
252b5132
RH
6609}
6610
b34976b6 6611bfd_boolean
217aa764 6612_bfd_elf_write_object_contents (bfd *abfd)
252b5132 6613{
9c5bfbb7 6614 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132 6615 Elf_Internal_Shdr **i_shdrp;
b34976b6 6616 bfd_boolean failed;
9ad5cbcf 6617 unsigned int count, num_sec;
30e8ee25 6618 struct elf_obj_tdata *t;
252b5132
RH
6619
6620 if (! abfd->output_has_begun
217aa764 6621 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
b34976b6 6622 return FALSE;
db727370
JL
6623 /* Do not rewrite ELF data when the BFD has been opened for update.
6624 abfd->output_has_begun was set to TRUE on opening, so creation of new
6625 sections, and modification of existing section sizes was restricted.
6626 This means the ELF header, program headers and section headers can't have
6627 changed.
6628 If the contents of any sections has been modified, then those changes have
6629 already been written to the BFD. */
6630 else if (abfd->direction == both_direction)
6631 {
6632 BFD_ASSERT (abfd->output_has_begun);
6633 return TRUE;
6634 }
252b5132
RH
6635
6636 i_shdrp = elf_elfsections (abfd);
252b5132 6637
b34976b6 6638 failed = FALSE;
252b5132
RH
6639 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
6640 if (failed)
b34976b6 6641 return FALSE;
252b5132 6642
0ce398f1
L
6643 if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
6644 return FALSE;
252b5132 6645
c044fabd 6646 /* After writing the headers, we need to write the sections too... */
9ad5cbcf
AM
6647 num_sec = elf_numsections (abfd);
6648 for (count = 1; count < num_sec; count++)
252b5132 6649 {
3e19fb8f
L
6650 i_shdrp[count]->sh_name
6651 = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
6652 i_shdrp[count]->sh_name);
252b5132 6653 if (bed->elf_backend_section_processing)
75506100
MR
6654 if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
6655 return FALSE;
252b5132
RH
6656 if (i_shdrp[count]->contents)
6657 {
dc810e39
AM
6658 bfd_size_type amt = i_shdrp[count]->sh_size;
6659
252b5132 6660 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
dc810e39 6661 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
b34976b6 6662 return FALSE;
252b5132
RH
6663 }
6664 }
6665
6666 /* Write out the section header names. */
30e8ee25 6667 t = elf_tdata (abfd);
26ae6d5e 6668 if (elf_shstrtab (abfd) != NULL
30e8ee25 6669 && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
08a40648 6670 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
b34976b6 6671 return FALSE;
252b5132 6672
cc364be6
AM
6673 if (!(*bed->elf_backend_final_write_processing) (abfd))
6674 return FALSE;
252b5132 6675
ff59fc36
RM
6676 if (!bed->s->write_shdrs_and_ehdr (abfd))
6677 return FALSE;
6678
6679 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
c0355132
AM
6680 if (t->o->build_id.after_write_object_contents != NULL)
6681 return (*t->o->build_id.after_write_object_contents) (abfd);
ff59fc36
RM
6682
6683 return TRUE;
252b5132
RH
6684}
6685
b34976b6 6686bfd_boolean
217aa764 6687_bfd_elf_write_corefile_contents (bfd *abfd)
252b5132 6688{
c044fabd 6689 /* Hopefully this can be done just like an object file. */
252b5132
RH
6690 return _bfd_elf_write_object_contents (abfd);
6691}
c044fabd
KH
6692
6693/* Given a section, search the header to find them. */
6694
cb33740c 6695unsigned int
198beae2 6696_bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
252b5132 6697{
9c5bfbb7 6698 const struct elf_backend_data *bed;
91d6fa6a 6699 unsigned int sec_index;
252b5132 6700
9ad5cbcf
AM
6701 if (elf_section_data (asect) != NULL
6702 && elf_section_data (asect)->this_idx != 0)
6703 return elf_section_data (asect)->this_idx;
6704
6705 if (bfd_is_abs_section (asect))
91d6fa6a 6706 sec_index = SHN_ABS;
af746e92 6707 else if (bfd_is_com_section (asect))
91d6fa6a 6708 sec_index = SHN_COMMON;
af746e92 6709 else if (bfd_is_und_section (asect))
91d6fa6a 6710 sec_index = SHN_UNDEF;
af746e92 6711 else
91d6fa6a 6712 sec_index = SHN_BAD;
252b5132 6713
af746e92 6714 bed = get_elf_backend_data (abfd);
252b5132
RH
6715 if (bed->elf_backend_section_from_bfd_section)
6716 {
91d6fa6a 6717 int retval = sec_index;
9ad5cbcf 6718
af746e92
AM
6719 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
6720 return retval;
252b5132
RH
6721 }
6722
91d6fa6a 6723 if (sec_index == SHN_BAD)
af746e92 6724 bfd_set_error (bfd_error_nonrepresentable_section);
252b5132 6725
91d6fa6a 6726 return sec_index;
252b5132
RH
6727}
6728
6729/* Given a BFD symbol, return the index in the ELF symbol table, or -1
6730 on error. */
6731
6732int
217aa764 6733_bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
252b5132
RH
6734{
6735 asymbol *asym_ptr = *asym_ptr_ptr;
6736 int idx;
6737 flagword flags = asym_ptr->flags;
6738
6739 /* When gas creates relocations against local labels, it creates its
6740 own symbol for the section, but does put the symbol into the
6741 symbol chain, so udata is 0. When the linker is generating
6742 relocatable output, this section symbol may be for one of the
6743 input sections rather than the output section. */
6744 if (asym_ptr->udata.i == 0
6745 && (flags & BSF_SECTION_SYM)
6746 && asym_ptr->section)
6747 {
5372391b 6748 asection *sec;
252b5132
RH
6749 int indx;
6750
5372391b
AM
6751 sec = asym_ptr->section;
6752 if (sec->owner != abfd && sec->output_section != NULL)
6753 sec = sec->output_section;
6754 if (sec->owner == abfd
6755 && (indx = sec->index) < elf_num_section_syms (abfd)
4e89ac30 6756 && elf_section_syms (abfd)[indx] != NULL)
252b5132
RH
6757 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
6758 }
6759
6760 idx = asym_ptr->udata.i;
6761
6762 if (idx == 0)
6763 {
6764 /* This case can occur when using --strip-symbol on a symbol
08a40648 6765 which is used in a relocation entry. */
4eca0228 6766 _bfd_error_handler
695344c0 6767 /* xgettext:c-format */
871b3ab2 6768 (_("%pB: symbol `%s' required but not present"),
d003868e 6769 abfd, bfd_asymbol_name (asym_ptr));
252b5132
RH
6770 bfd_set_error (bfd_error_no_symbols);
6771 return -1;
6772 }
6773
6774#if DEBUG & 4
6775 {
6776 fprintf (stderr,
cd9af601
AM
6777 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8x\n",
6778 (long) asym_ptr, asym_ptr->name, idx, flags);
252b5132
RH
6779 fflush (stderr);
6780 }
6781#endif
6782
6783 return idx;
6784}
6785
84d1d650 6786/* Rewrite program header information. */
252b5132 6787
b34976b6 6788static bfd_boolean
84d1d650 6789rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
252b5132 6790{
b34976b6
AM
6791 Elf_Internal_Ehdr *iehdr;
6792 struct elf_segment_map *map;
6793 struct elf_segment_map *map_first;
6794 struct elf_segment_map **pointer_to_map;
6795 Elf_Internal_Phdr *segment;
6796 asection *section;
6797 unsigned int i;
6798 unsigned int num_segments;
6799 bfd_boolean phdr_included = FALSE;
5c44b38e 6800 bfd_boolean p_paddr_valid;
b34976b6
AM
6801 bfd_vma maxpagesize;
6802 struct elf_segment_map *phdr_adjust_seg = NULL;
6803 unsigned int phdr_adjust_num = 0;
9c5bfbb7 6804 const struct elf_backend_data *bed;
bc67d8a6 6805
caf47ea6 6806 bed = get_elf_backend_data (ibfd);
252b5132
RH
6807 iehdr = elf_elfheader (ibfd);
6808
bc67d8a6 6809 map_first = NULL;
c044fabd 6810 pointer_to_map = &map_first;
252b5132
RH
6811
6812 num_segments = elf_elfheader (ibfd)->e_phnum;
bc67d8a6
NC
6813 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
6814
6815 /* Returns the end address of the segment + 1. */
aecc8f8a
AM
6816#define SEGMENT_END(segment, start) \
6817 (start + (segment->p_memsz > segment->p_filesz \
6818 ? segment->p_memsz : segment->p_filesz))
bc67d8a6 6819
eecdbe52
JJ
6820#define SECTION_SIZE(section, segment) \
6821 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
6822 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
eea6121a 6823 ? section->size : 0)
eecdbe52 6824
b34976b6 6825 /* Returns TRUE if the given section is contained within
bc67d8a6 6826 the given segment. VMA addresses are compared. */
aecc8f8a
AM
6827#define IS_CONTAINED_BY_VMA(section, segment) \
6828 (section->vma >= segment->p_vaddr \
eecdbe52 6829 && (section->vma + SECTION_SIZE (section, segment) \
aecc8f8a 6830 <= (SEGMENT_END (segment, segment->p_vaddr))))
c044fabd 6831
b34976b6 6832 /* Returns TRUE if the given section is contained within
bc67d8a6 6833 the given segment. LMA addresses are compared. */
aecc8f8a
AM
6834#define IS_CONTAINED_BY_LMA(section, segment, base) \
6835 (section->lma >= base \
beab4532 6836 && (section->lma + SECTION_SIZE (section, segment) >= section->lma) \
eecdbe52 6837 && (section->lma + SECTION_SIZE (section, segment) \
aecc8f8a 6838 <= SEGMENT_END (segment, base)))
252b5132 6839
0efc80c8
L
6840 /* Handle PT_NOTE segment. */
6841#define IS_NOTE(p, s) \
aecc8f8a 6842 (p->p_type == PT_NOTE \
0efc80c8 6843 && elf_section_type (s) == SHT_NOTE \
aecc8f8a 6844 && (bfd_vma) s->filepos >= p->p_offset \
cb3ff1e5 6845 && ((bfd_vma) s->filepos + s->size \
aecc8f8a 6846 <= p->p_offset + p->p_filesz))
252b5132 6847
0efc80c8
L
6848 /* Special case: corefile "NOTE" section containing regs, prpsinfo
6849 etc. */
6850#define IS_COREFILE_NOTE(p, s) \
6851 (IS_NOTE (p, s) \
6852 && bfd_get_format (ibfd) == bfd_core \
6853 && s->vma == 0 \
6854 && s->lma == 0)
6855
252b5132
RH
6856 /* The complicated case when p_vaddr is 0 is to handle the Solaris
6857 linker, which generates a PT_INTERP section with p_vaddr and
6858 p_memsz set to 0. */
aecc8f8a
AM
6859#define IS_SOLARIS_PT_INTERP(p, s) \
6860 (p->p_vaddr == 0 \
6861 && p->p_paddr == 0 \
6862 && p->p_memsz == 0 \
6863 && p->p_filesz > 0 \
6864 && (s->flags & SEC_HAS_CONTENTS) != 0 \
eea6121a 6865 && s->size > 0 \
aecc8f8a 6866 && (bfd_vma) s->filepos >= p->p_offset \
cb3ff1e5 6867 && ((bfd_vma) s->filepos + s->size \
aecc8f8a 6868 <= p->p_offset + p->p_filesz))
5c440b1e 6869
bc67d8a6
NC
6870 /* Decide if the given section should be included in the given segment.
6871 A section will be included if:
f5ffc919 6872 1. It is within the address space of the segment -- we use the LMA
08a40648 6873 if that is set for the segment and the VMA otherwise,
0efc80c8 6874 2. It is an allocated section or a NOTE section in a PT_NOTE
d324f6d6 6875 segment.
bc67d8a6 6876 3. There is an output section associated with it,
eecdbe52 6877 4. The section has not already been allocated to a previous segment.
2b05f1b7 6878 5. PT_GNU_STACK segments do not include any sections.
03394ac9 6879 6. PT_TLS segment includes only SHF_TLS sections.
6f79b219
JJ
6880 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
6881 8. PT_DYNAMIC should not contain empty sections at the beginning
08a40648 6882 (with the possible exception of .dynamic). */
9f17e2a6 6883#define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \
2b05f1b7
L
6884 ((((segment->p_paddr \
6885 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
6886 : IS_CONTAINED_BY_VMA (section, segment)) \
6887 && (section->flags & SEC_ALLOC) != 0) \
0efc80c8 6888 || IS_NOTE (segment, section)) \
2b05f1b7
L
6889 && segment->p_type != PT_GNU_STACK \
6890 && (segment->p_type != PT_TLS \
6891 || (section->flags & SEC_THREAD_LOCAL)) \
6892 && (segment->p_type == PT_LOAD \
6893 || segment->p_type == PT_TLS \
6894 || (section->flags & SEC_THREAD_LOCAL) == 0) \
6895 && (segment->p_type != PT_DYNAMIC \
6896 || SECTION_SIZE (section, segment) > 0 \
6897 || (segment->p_paddr \
6898 ? segment->p_paddr != section->lma \
6899 : segment->p_vaddr != section->vma) \
fd361982 6900 || (strcmp (bfd_section_name (section), ".dynamic") == 0)) \
9933dc52 6901 && (segment->p_type != PT_LOAD || !section->segment_mark))
bc67d8a6 6902
9f17e2a6
L
6903/* If the output section of a section in the input segment is NULL,
6904 it is removed from the corresponding output segment. */
6905#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
6906 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \
6907 && section->output_section != NULL)
6908
b34976b6 6909 /* Returns TRUE iff seg1 starts after the end of seg2. */
b5f852ea
NC
6910#define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
6911 (seg1->field >= SEGMENT_END (seg2, seg2->field))
6912
6913 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
6914 their VMA address ranges and their LMA address ranges overlap.
6915 It is possible to have overlapping VMA ranges without overlapping LMA
6916 ranges. RedBoot images for example can have both .data and .bss mapped
6917 to the same VMA range, but with the .data section mapped to a different
6918 LMA. */
aecc8f8a 6919#define SEGMENT_OVERLAPS(seg1, seg2) \
b5f852ea 6920 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
08a40648 6921 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
b5f852ea 6922 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
08a40648 6923 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
bc67d8a6
NC
6924
6925 /* Initialise the segment mark field. */
6926 for (section = ibfd->sections; section != NULL; section = section->next)
b34976b6 6927 section->segment_mark = FALSE;
bc67d8a6 6928
5c44b38e
AM
6929 /* The Solaris linker creates program headers in which all the
6930 p_paddr fields are zero. When we try to objcopy or strip such a
6931 file, we get confused. Check for this case, and if we find it
6932 don't set the p_paddr_valid fields. */
6933 p_paddr_valid = FALSE;
6934 for (i = 0, segment = elf_tdata (ibfd)->phdr;
6935 i < num_segments;
6936 i++, segment++)
6937 if (segment->p_paddr != 0)
6938 {
6939 p_paddr_valid = TRUE;
6940 break;
6941 }
6942
252b5132 6943 /* Scan through the segments specified in the program header
bc67d8a6 6944 of the input BFD. For this first scan we look for overlaps
9ad5cbcf 6945 in the loadable segments. These can be created by weird
aecc8f8a 6946 parameters to objcopy. Also, fix some solaris weirdness. */
bc67d8a6
NC
6947 for (i = 0, segment = elf_tdata (ibfd)->phdr;
6948 i < num_segments;
c044fabd 6949 i++, segment++)
252b5132 6950 {
252b5132 6951 unsigned int j;
c044fabd 6952 Elf_Internal_Phdr *segment2;
252b5132 6953
aecc8f8a
AM
6954 if (segment->p_type == PT_INTERP)
6955 for (section = ibfd->sections; section; section = section->next)
6956 if (IS_SOLARIS_PT_INTERP (segment, section))
6957 {
6958 /* Mininal change so that the normal section to segment
4cc11e76 6959 assignment code will work. */
aecc8f8a
AM
6960 segment->p_vaddr = section->vma;
6961 break;
6962 }
6963
bc67d8a6 6964 if (segment->p_type != PT_LOAD)
b10a8ae0
L
6965 {
6966 /* Remove PT_GNU_RELRO segment. */
6967 if (segment->p_type == PT_GNU_RELRO)
6968 segment->p_type = PT_NULL;
6969 continue;
6970 }
c044fabd 6971
bc67d8a6 6972 /* Determine if this segment overlaps any previous segments. */
0067a569 6973 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
bc67d8a6
NC
6974 {
6975 bfd_signed_vma extra_length;
c044fabd 6976
bc67d8a6 6977 if (segment2->p_type != PT_LOAD
0067a569 6978 || !SEGMENT_OVERLAPS (segment, segment2))
bc67d8a6 6979 continue;
c044fabd 6980
bc67d8a6
NC
6981 /* Merge the two segments together. */
6982 if (segment2->p_vaddr < segment->p_vaddr)
6983 {
c044fabd 6984 /* Extend SEGMENT2 to include SEGMENT and then delete
08a40648 6985 SEGMENT. */
0067a569
AM
6986 extra_length = (SEGMENT_END (segment, segment->p_vaddr)
6987 - SEGMENT_END (segment2, segment2->p_vaddr));
c044fabd 6988
bc67d8a6
NC
6989 if (extra_length > 0)
6990 {
0067a569 6991 segment2->p_memsz += extra_length;
bc67d8a6
NC
6992 segment2->p_filesz += extra_length;
6993 }
c044fabd 6994
bc67d8a6 6995 segment->p_type = PT_NULL;
c044fabd 6996
bc67d8a6
NC
6997 /* Since we have deleted P we must restart the outer loop. */
6998 i = 0;
6999 segment = elf_tdata (ibfd)->phdr;
7000 break;
7001 }
7002 else
7003 {
c044fabd 7004 /* Extend SEGMENT to include SEGMENT2 and then delete
08a40648 7005 SEGMENT2. */
0067a569
AM
7006 extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
7007 - SEGMENT_END (segment, segment->p_vaddr));
c044fabd 7008
bc67d8a6
NC
7009 if (extra_length > 0)
7010 {
0067a569 7011 segment->p_memsz += extra_length;
bc67d8a6
NC
7012 segment->p_filesz += extra_length;
7013 }
c044fabd 7014
bc67d8a6
NC
7015 segment2->p_type = PT_NULL;
7016 }
7017 }
7018 }
c044fabd 7019
bc67d8a6
NC
7020 /* The second scan attempts to assign sections to segments. */
7021 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7022 i < num_segments;
0067a569 7023 i++, segment++)
bc67d8a6 7024 {
0067a569
AM
7025 unsigned int section_count;
7026 asection **sections;
7027 asection *output_section;
7028 unsigned int isec;
9933dc52
AM
7029 asection *matching_lma;
7030 asection *suggested_lma;
0067a569 7031 unsigned int j;
dc810e39 7032 bfd_size_type amt;
0067a569 7033 asection *first_section;
bc67d8a6
NC
7034
7035 if (segment->p_type == PT_NULL)
7036 continue;
c044fabd 7037
9f17e2a6 7038 first_section = NULL;
bc67d8a6 7039 /* Compute how many sections might be placed into this segment. */
b5f852ea
NC
7040 for (section = ibfd->sections, section_count = 0;
7041 section != NULL;
7042 section = section->next)
9f17e2a6
L
7043 {
7044 /* Find the first section in the input segment, which may be
7045 removed from the corresponding output segment. */
7046 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
7047 {
7048 if (first_section == NULL)
7049 first_section = section;
7050 if (section->output_section != NULL)
7051 ++section_count;
7052 }
7053 }
811072d8 7054
b5f852ea
NC
7055 /* Allocate a segment map big enough to contain
7056 all of the sections we have selected. */
00bee008
AM
7057 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7058 amt += (bfd_size_type) section_count * sizeof (asection *);
a50b1753 7059 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
bc67d8a6 7060 if (map == NULL)
b34976b6 7061 return FALSE;
252b5132
RH
7062
7063 /* Initialise the fields of the segment map. Default to
7064 using the physical address of the segment in the input BFD. */
0067a569
AM
7065 map->next = NULL;
7066 map->p_type = segment->p_type;
7067 map->p_flags = segment->p_flags;
bc67d8a6 7068 map->p_flags_valid = 1;
55d55ac7 7069
9f17e2a6
L
7070 /* If the first section in the input segment is removed, there is
7071 no need to preserve segment physical address in the corresponding
7072 output segment. */
945c025a 7073 if (!first_section || first_section->output_section != NULL)
9f17e2a6
L
7074 {
7075 map->p_paddr = segment->p_paddr;
5c44b38e 7076 map->p_paddr_valid = p_paddr_valid;
9f17e2a6 7077 }
252b5132
RH
7078
7079 /* Determine if this segment contains the ELF file header
7080 and if it contains the program headers themselves. */
bc67d8a6
NC
7081 map->includes_filehdr = (segment->p_offset == 0
7082 && segment->p_filesz >= iehdr->e_ehsize);
bc67d8a6 7083 map->includes_phdrs = 0;
252b5132 7084
0067a569 7085 if (!phdr_included || segment->p_type != PT_LOAD)
252b5132 7086 {
bc67d8a6
NC
7087 map->includes_phdrs =
7088 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7089 && (segment->p_offset + segment->p_filesz
252b5132
RH
7090 >= ((bfd_vma) iehdr->e_phoff
7091 + iehdr->e_phnum * iehdr->e_phentsize)));
c044fabd 7092
bc67d8a6 7093 if (segment->p_type == PT_LOAD && map->includes_phdrs)
b34976b6 7094 phdr_included = TRUE;
252b5132
RH
7095 }
7096
bc67d8a6 7097 if (section_count == 0)
252b5132
RH
7098 {
7099 /* Special segments, such as the PT_PHDR segment, may contain
7100 no sections, but ordinary, loadable segments should contain
1ed89aa9 7101 something. They are allowed by the ELF spec however, so only
07d6d2b8 7102 a warning is produced.
f98450c6
NC
7103 There is however the valid use case of embedded systems which
7104 have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7105 flash memory with zeros. No warning is shown for that case. */
7106 if (segment->p_type == PT_LOAD
7107 && (segment->p_filesz > 0 || segment->p_memsz == 0))
7108 /* xgettext:c-format */
9793eb77
AM
7109 _bfd_error_handler
7110 (_("%pB: warning: empty loadable segment detected"
7111 " at vaddr=%#" PRIx64 ", is this intentional?"),
7112 ibfd, (uint64_t) segment->p_vaddr);
252b5132 7113
5d695627 7114 map->p_vaddr_offset = segment->p_vaddr;
bc67d8a6 7115 map->count = 0;
c044fabd
KH
7116 *pointer_to_map = map;
7117 pointer_to_map = &map->next;
252b5132
RH
7118
7119 continue;
7120 }
7121
7122 /* Now scan the sections in the input BFD again and attempt
7123 to add their corresponding output sections to the segment map.
7124 The problem here is how to handle an output section which has
7125 been moved (ie had its LMA changed). There are four possibilities:
7126
7127 1. None of the sections have been moved.
7128 In this case we can continue to use the segment LMA from the
7129 input BFD.
7130
7131 2. All of the sections have been moved by the same amount.
7132 In this case we can change the segment's LMA to match the LMA
7133 of the first section.
7134
7135 3. Some of the sections have been moved, others have not.
7136 In this case those sections which have not been moved can be
7137 placed in the current segment which will have to have its size,
7138 and possibly its LMA changed, and a new segment or segments will
7139 have to be created to contain the other sections.
7140
b5f852ea 7141 4. The sections have been moved, but not by the same amount.
252b5132
RH
7142 In this case we can change the segment's LMA to match the LMA
7143 of the first section and we will have to create a new segment
7144 or segments to contain the other sections.
7145
7146 In order to save time, we allocate an array to hold the section
7147 pointers that we are interested in. As these sections get assigned
7148 to a segment, they are removed from this array. */
7149
a50b1753 7150 sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *));
252b5132 7151 if (sections == NULL)
b34976b6 7152 return FALSE;
252b5132
RH
7153
7154 /* Step One: Scan for segment vs section LMA conflicts.
7155 Also add the sections to the section array allocated above.
7156 Also add the sections to the current segment. In the common
7157 case, where the sections have not been moved, this means that
7158 we have completely filled the segment, and there is nothing
7159 more to do. */
252b5132 7160 isec = 0;
9933dc52
AM
7161 matching_lma = NULL;
7162 suggested_lma = NULL;
252b5132 7163
461c4b2e 7164 for (section = first_section, j = 0;
bc67d8a6
NC
7165 section != NULL;
7166 section = section->next)
252b5132 7167 {
caf47ea6 7168 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
c0f7859b 7169 {
bc67d8a6
NC
7170 output_section = section->output_section;
7171
0067a569 7172 sections[j++] = section;
252b5132
RH
7173
7174 /* The Solaris native linker always sets p_paddr to 0.
7175 We try to catch that case here, and set it to the
5e8d7549
NC
7176 correct value. Note - some backends require that
7177 p_paddr be left as zero. */
5c44b38e 7178 if (!p_paddr_valid
4455705d 7179 && segment->p_vaddr != 0
0067a569 7180 && !bed->want_p_paddr_set_to_zero
252b5132 7181 && isec == 0
bc67d8a6 7182 && output_section->lma != 0
9933dc52
AM
7183 && (align_power (segment->p_vaddr
7184 + (map->includes_filehdr
7185 ? iehdr->e_ehsize : 0)
7186 + (map->includes_phdrs
7187 ? iehdr->e_phnum * iehdr->e_phentsize
7188 : 0),
7189 output_section->alignment_power)
7190 == output_section->vma))
bc67d8a6 7191 map->p_paddr = segment->p_vaddr;
252b5132
RH
7192
7193 /* Match up the physical address of the segment with the
7194 LMA address of the output section. */
bc67d8a6 7195 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
5e8d7549 7196 || IS_COREFILE_NOTE (segment, section)
0067a569
AM
7197 || (bed->want_p_paddr_set_to_zero
7198 && IS_CONTAINED_BY_VMA (output_section, segment)))
252b5132 7199 {
9933dc52
AM
7200 if (matching_lma == NULL
7201 || output_section->lma < matching_lma->lma)
7202 matching_lma = output_section;
252b5132
RH
7203
7204 /* We assume that if the section fits within the segment
bc67d8a6 7205 then it does not overlap any other section within that
252b5132 7206 segment. */
0067a569
AM
7207 map->sections[isec++] = output_section;
7208 }
9933dc52
AM
7209 else if (suggested_lma == NULL)
7210 suggested_lma = output_section;
147d51c2
L
7211
7212 if (j == section_count)
7213 break;
252b5132
RH
7214 }
7215 }
7216
bc67d8a6 7217 BFD_ASSERT (j == section_count);
252b5132
RH
7218
7219 /* Step Two: Adjust the physical address of the current segment,
7220 if necessary. */
bc67d8a6 7221 if (isec == section_count)
252b5132
RH
7222 {
7223 /* All of the sections fitted within the segment as currently
7224 specified. This is the default case. Add the segment to
7225 the list of built segments and carry on to process the next
7226 program header in the input BFD. */
bc67d8a6 7227 map->count = section_count;
c044fabd
KH
7228 *pointer_to_map = map;
7229 pointer_to_map = &map->next;
08a40648 7230
5c44b38e 7231 if (p_paddr_valid
30fe1832
AM
7232 && !bed->want_p_paddr_set_to_zero)
7233 {
7234 bfd_vma hdr_size = 0;
7235 if (map->includes_filehdr)
7236 hdr_size = iehdr->e_ehsize;
7237 if (map->includes_phdrs)
7238 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7239
7240 /* Account for padding before the first section in the
7241 segment. */
7242 map->p_vaddr_offset = map->p_paddr + hdr_size - matching_lma->lma;
7243 }
08a40648 7244
252b5132
RH
7245 free (sections);
7246 continue;
7247 }
252b5132
RH
7248 else
7249 {
9933dc52
AM
7250 /* Change the current segment's physical address to match
7251 the LMA of the first section that fitted, or if no
7252 section fitted, the first section. */
7253 if (matching_lma == NULL)
7254 matching_lma = suggested_lma;
7255
7256 map->p_paddr = matching_lma->lma;
72730e0c 7257
bc67d8a6
NC
7258 /* Offset the segment physical address from the lma
7259 to allow for space taken up by elf headers. */
9933dc52 7260 if (map->includes_phdrs)
010c8431 7261 {
9933dc52
AM
7262 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7263
7264 /* iehdr->e_phnum is just an estimate of the number
7265 of program headers that we will need. Make a note
7266 here of the number we used and the segment we chose
7267 to hold these headers, so that we can adjust the
7268 offset when we know the correct value. */
7269 phdr_adjust_num = iehdr->e_phnum;
7270 phdr_adjust_seg = map;
010c8431 7271 }
252b5132 7272
9933dc52 7273 if (map->includes_filehdr)
bc67d8a6 7274 {
9933dc52
AM
7275 bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7276 map->p_paddr -= iehdr->e_ehsize;
7277 /* We've subtracted off the size of headers from the
7278 first section lma, but there may have been some
7279 alignment padding before that section too. Try to
7280 account for that by adjusting the segment lma down to
7281 the same alignment. */
7282 if (segment->p_align != 0 && segment->p_align < align)
7283 align = segment->p_align;
7284 map->p_paddr &= -align;
bc67d8a6 7285 }
252b5132
RH
7286 }
7287
7288 /* Step Three: Loop over the sections again, this time assigning
caf47ea6 7289 those that fit to the current segment and removing them from the
252b5132
RH
7290 sections array; but making sure not to leave large gaps. Once all
7291 possible sections have been assigned to the current segment it is
7292 added to the list of built segments and if sections still remain
7293 to be assigned, a new segment is constructed before repeating
7294 the loop. */
7295 isec = 0;
7296 do
7297 {
bc67d8a6 7298 map->count = 0;
9933dc52 7299 suggested_lma = NULL;
252b5132
RH
7300
7301 /* Fill the current segment with sections that fit. */
bc67d8a6 7302 for (j = 0; j < section_count; j++)
252b5132 7303 {
bc67d8a6 7304 section = sections[j];
252b5132 7305
bc67d8a6 7306 if (section == NULL)
252b5132
RH
7307 continue;
7308
bc67d8a6 7309 output_section = section->output_section;
252b5132 7310
bc67d8a6 7311 BFD_ASSERT (output_section != NULL);
c044fabd 7312
bc67d8a6
NC
7313 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
7314 || IS_COREFILE_NOTE (segment, section))
252b5132 7315 {
bc67d8a6 7316 if (map->count == 0)
252b5132
RH
7317 {
7318 /* If the first section in a segment does not start at
bc67d8a6
NC
7319 the beginning of the segment, then something is
7320 wrong. */
9933dc52
AM
7321 if (align_power (map->p_paddr
7322 + (map->includes_filehdr
7323 ? iehdr->e_ehsize : 0)
7324 + (map->includes_phdrs
7325 ? iehdr->e_phnum * iehdr->e_phentsize
7326 : 0),
7327 output_section->alignment_power)
7328 != output_section->lma)
9aea1e31 7329 goto sorry;
252b5132
RH
7330 }
7331 else
7332 {
0067a569 7333 asection *prev_sec;
252b5132 7334
bc67d8a6 7335 prev_sec = map->sections[map->count - 1];
252b5132
RH
7336
7337 /* If the gap between the end of the previous section
bc67d8a6
NC
7338 and the start of this section is more than
7339 maxpagesize then we need to start a new segment. */
eea6121a 7340 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
079e9a2f 7341 maxpagesize)
caf47ea6 7342 < BFD_ALIGN (output_section->lma, maxpagesize))
0067a569 7343 || (prev_sec->lma + prev_sec->size
079e9a2f 7344 > output_section->lma))
252b5132 7345 {
9933dc52
AM
7346 if (suggested_lma == NULL)
7347 suggested_lma = output_section;
252b5132
RH
7348
7349 continue;
7350 }
7351 }
7352
bc67d8a6 7353 map->sections[map->count++] = output_section;
252b5132
RH
7354 ++isec;
7355 sections[j] = NULL;
9933dc52
AM
7356 if (segment->p_type == PT_LOAD)
7357 section->segment_mark = TRUE;
0067a569 7358 }
9933dc52
AM
7359 else if (suggested_lma == NULL)
7360 suggested_lma = output_section;
252b5132
RH
7361 }
7362
beab4532
NC
7363 /* PR 23932. A corrupt input file may contain sections that cannot
7364 be assigned to any segment - because for example they have a
9984857c
NC
7365 negative size - or segments that do not contain any sections.
7366 But there are also valid reasons why a segment can be empty.
7367 So allow a count of zero. */
252b5132
RH
7368
7369 /* Add the current segment to the list of built segments. */
c044fabd
KH
7370 *pointer_to_map = map;
7371 pointer_to_map = &map->next;
252b5132 7372
bc67d8a6 7373 if (isec < section_count)
252b5132
RH
7374 {
7375 /* We still have not allocated all of the sections to
7376 segments. Create a new segment here, initialise it
7377 and carry on looping. */
00bee008
AM
7378 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7379 amt += (bfd_size_type) section_count * sizeof (asection *);
5964fc3a 7380 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
bc67d8a6 7381 if (map == NULL)
5ed6aba4
NC
7382 {
7383 free (sections);
7384 return FALSE;
7385 }
252b5132
RH
7386
7387 /* Initialise the fields of the segment map. Set the physical
7388 physical address to the LMA of the first section that has
7389 not yet been assigned. */
0067a569
AM
7390 map->next = NULL;
7391 map->p_type = segment->p_type;
7392 map->p_flags = segment->p_flags;
7393 map->p_flags_valid = 1;
9933dc52 7394 map->p_paddr = suggested_lma->lma;
5c44b38e 7395 map->p_paddr_valid = p_paddr_valid;
bc67d8a6 7396 map->includes_filehdr = 0;
0067a569 7397 map->includes_phdrs = 0;
252b5132 7398 }
9984857c
NC
7399
7400 continue;
7401 sorry:
7402 bfd_set_error (bfd_error_sorry);
7403 free (sections);
7404 return FALSE;
252b5132 7405 }
bc67d8a6 7406 while (isec < section_count);
252b5132
RH
7407
7408 free (sections);
7409 }
7410
12bd6957 7411 elf_seg_map (obfd) = map_first;
bc67d8a6
NC
7412
7413 /* If we had to estimate the number of program headers that were
9ad5cbcf 7414 going to be needed, then check our estimate now and adjust
bc67d8a6
NC
7415 the offset if necessary. */
7416 if (phdr_adjust_seg != NULL)
7417 {
7418 unsigned int count;
c044fabd 7419
bc67d8a6 7420 for (count = 0, map = map_first; map != NULL; map = map->next)
c044fabd 7421 count++;
252b5132 7422
bc67d8a6
NC
7423 if (count > phdr_adjust_num)
7424 phdr_adjust_seg->p_paddr
7425 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
9933dc52
AM
7426
7427 for (map = map_first; map != NULL; map = map->next)
7428 if (map->p_type == PT_PHDR)
7429 {
7430 bfd_vma adjust
7431 = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
7432 map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
7433 break;
7434 }
bc67d8a6 7435 }
c044fabd 7436
bc67d8a6 7437#undef SEGMENT_END
eecdbe52 7438#undef SECTION_SIZE
bc67d8a6
NC
7439#undef IS_CONTAINED_BY_VMA
7440#undef IS_CONTAINED_BY_LMA
0efc80c8 7441#undef IS_NOTE
252b5132 7442#undef IS_COREFILE_NOTE
bc67d8a6 7443#undef IS_SOLARIS_PT_INTERP
9f17e2a6 7444#undef IS_SECTION_IN_INPUT_SEGMENT
bc67d8a6
NC
7445#undef INCLUDE_SECTION_IN_SEGMENT
7446#undef SEGMENT_AFTER_SEGMENT
7447#undef SEGMENT_OVERLAPS
b34976b6 7448 return TRUE;
252b5132
RH
7449}
7450
84d1d650
L
7451/* Copy ELF program header information. */
7452
7453static bfd_boolean
7454copy_elf_program_header (bfd *ibfd, bfd *obfd)
7455{
7456 Elf_Internal_Ehdr *iehdr;
7457 struct elf_segment_map *map;
7458 struct elf_segment_map *map_first;
7459 struct elf_segment_map **pointer_to_map;
7460 Elf_Internal_Phdr *segment;
7461 unsigned int i;
7462 unsigned int num_segments;
7463 bfd_boolean phdr_included = FALSE;
88967714 7464 bfd_boolean p_paddr_valid;
84d1d650
L
7465
7466 iehdr = elf_elfheader (ibfd);
7467
7468 map_first = NULL;
7469 pointer_to_map = &map_first;
7470
88967714
AM
7471 /* If all the segment p_paddr fields are zero, don't set
7472 map->p_paddr_valid. */
7473 p_paddr_valid = FALSE;
84d1d650 7474 num_segments = elf_elfheader (ibfd)->e_phnum;
88967714
AM
7475 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7476 i < num_segments;
7477 i++, segment++)
7478 if (segment->p_paddr != 0)
7479 {
7480 p_paddr_valid = TRUE;
7481 break;
7482 }
7483
84d1d650
L
7484 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7485 i < num_segments;
7486 i++, segment++)
7487 {
7488 asection *section;
7489 unsigned int section_count;
986f0783 7490 size_t amt;
84d1d650 7491 Elf_Internal_Shdr *this_hdr;
53020534 7492 asection *first_section = NULL;
a76e6f2f 7493 asection *lowest_section;
84d1d650 7494
84d1d650
L
7495 /* Compute how many sections are in this segment. */
7496 for (section = ibfd->sections, section_count = 0;
7497 section != NULL;
7498 section = section->next)
7499 {
7500 this_hdr = &(elf_section_data(section)->this_hdr);
f4638467 7501 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
3271a814 7502 {
a76e6f2f
AM
7503 if (first_section == NULL)
7504 first_section = section;
3271a814
NS
7505 section_count++;
7506 }
84d1d650
L
7507 }
7508
7509 /* Allocate a segment map big enough to contain
7510 all of the sections we have selected. */
00bee008 7511 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
986f0783 7512 amt += section_count * sizeof (asection *);
a50b1753 7513 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
84d1d650
L
7514 if (map == NULL)
7515 return FALSE;
7516
7517 /* Initialize the fields of the output segment map with the
7518 input segment. */
7519 map->next = NULL;
7520 map->p_type = segment->p_type;
7521 map->p_flags = segment->p_flags;
7522 map->p_flags_valid = 1;
7523 map->p_paddr = segment->p_paddr;
88967714 7524 map->p_paddr_valid = p_paddr_valid;
3f570048
AM
7525 map->p_align = segment->p_align;
7526 map->p_align_valid = 1;
3271a814 7527 map->p_vaddr_offset = 0;
84d1d650 7528
04c3a755
NS
7529 if (map->p_type == PT_GNU_RELRO
7530 || map->p_type == PT_GNU_STACK)
b10a8ae0
L
7531 {
7532 /* The PT_GNU_RELRO segment may contain the first a few
7533 bytes in the .got.plt section even if the whole .got.plt
7534 section isn't in the PT_GNU_RELRO segment. We won't
04c3a755
NS
7535 change the size of the PT_GNU_RELRO segment.
7536 Similarly, PT_GNU_STACK size is significant on uclinux
7537 systems. */
9433b9b1 7538 map->p_size = segment->p_memsz;
b10a8ae0
L
7539 map->p_size_valid = 1;
7540 }
7541
84d1d650
L
7542 /* Determine if this segment contains the ELF file header
7543 and if it contains the program headers themselves. */
7544 map->includes_filehdr = (segment->p_offset == 0
7545 && segment->p_filesz >= iehdr->e_ehsize);
7546
7547 map->includes_phdrs = 0;
7548 if (! phdr_included || segment->p_type != PT_LOAD)
7549 {
7550 map->includes_phdrs =
7551 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7552 && (segment->p_offset + segment->p_filesz
7553 >= ((bfd_vma) iehdr->e_phoff
7554 + iehdr->e_phnum * iehdr->e_phentsize)));
7555
7556 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7557 phdr_included = TRUE;
7558 }
7559
bbefd0a9 7560 lowest_section = NULL;
84d1d650
L
7561 if (section_count != 0)
7562 {
7563 unsigned int isec = 0;
7564
53020534 7565 for (section = first_section;
84d1d650
L
7566 section != NULL;
7567 section = section->next)
7568 {
7569 this_hdr = &(elf_section_data(section)->this_hdr);
f4638467 7570 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
53020534
L
7571 {
7572 map->sections[isec++] = section->output_section;
a76e6f2f
AM
7573 if ((section->flags & SEC_ALLOC) != 0)
7574 {
7575 bfd_vma seg_off;
7576
bbefd0a9
AM
7577 if (lowest_section == NULL
7578 || section->lma < lowest_section->lma)
fb8a5684
AM
7579 lowest_section = section;
7580
a76e6f2f
AM
7581 /* Section lmas are set up from PT_LOAD header
7582 p_paddr in _bfd_elf_make_section_from_shdr.
7583 If this header has a p_paddr that disagrees
7584 with the section lma, flag the p_paddr as
7585 invalid. */
7586 if ((section->flags & SEC_LOAD) != 0)
7587 seg_off = this_hdr->sh_offset - segment->p_offset;
7588 else
7589 seg_off = this_hdr->sh_addr - segment->p_vaddr;
7590 if (section->lma - segment->p_paddr != seg_off)
7591 map->p_paddr_valid = FALSE;
7592 }
53020534
L
7593 if (isec == section_count)
7594 break;
7595 }
84d1d650
L
7596 }
7597 }
7598
5d695627
AM
7599 if (section_count == 0)
7600 map->p_vaddr_offset = segment->p_vaddr;
30fe1832
AM
7601 else if (map->p_paddr_valid)
7602 {
7603 /* Account for padding before the first section in the segment. */
7604 bfd_vma hdr_size = 0;
7605 if (map->includes_filehdr)
7606 hdr_size = iehdr->e_ehsize;
7607 if (map->includes_phdrs)
7608 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7609
7610 map->p_vaddr_offset = (map->p_paddr + hdr_size
7611 - (lowest_section ? lowest_section->lma : 0));
7612 }
a76e6f2f 7613
84d1d650
L
7614 map->count = section_count;
7615 *pointer_to_map = map;
7616 pointer_to_map = &map->next;
7617 }
7618
12bd6957 7619 elf_seg_map (obfd) = map_first;
84d1d650
L
7620 return TRUE;
7621}
7622
7623/* Copy private BFD data. This copies or rewrites ELF program header
7624 information. */
7625
7626static bfd_boolean
7627copy_private_bfd_data (bfd *ibfd, bfd *obfd)
7628{
84d1d650
L
7629 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7630 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7631 return TRUE;
7632
7633 if (elf_tdata (ibfd)->phdr == NULL)
7634 return TRUE;
7635
7636 if (ibfd->xvec == obfd->xvec)
7637 {
cb3ff1e5
NC
7638 /* Check to see if any sections in the input BFD
7639 covered by ELF program header have changed. */
d55ce4e2 7640 Elf_Internal_Phdr *segment;
84d1d650
L
7641 asection *section, *osec;
7642 unsigned int i, num_segments;
7643 Elf_Internal_Shdr *this_hdr;
147d51c2
L
7644 const struct elf_backend_data *bed;
7645
7646 bed = get_elf_backend_data (ibfd);
7647
7648 /* Regenerate the segment map if p_paddr is set to 0. */
7649 if (bed->want_p_paddr_set_to_zero)
7650 goto rewrite;
84d1d650
L
7651
7652 /* Initialize the segment mark field. */
7653 for (section = obfd->sections; section != NULL;
7654 section = section->next)
7655 section->segment_mark = FALSE;
7656
7657 num_segments = elf_elfheader (ibfd)->e_phnum;
7658 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7659 i < num_segments;
7660 i++, segment++)
7661 {
5f6999aa
NC
7662 /* PR binutils/3535. The Solaris linker always sets the p_paddr
7663 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
7664 which severly confuses things, so always regenerate the segment
7665 map in this case. */
7666 if (segment->p_paddr == 0
7667 && segment->p_memsz == 0
7668 && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
cb3ff1e5 7669 goto rewrite;
5f6999aa 7670
84d1d650
L
7671 for (section = ibfd->sections;
7672 section != NULL; section = section->next)
7673 {
7674 /* We mark the output section so that we know it comes
7675 from the input BFD. */
7676 osec = section->output_section;
7677 if (osec)
7678 osec->segment_mark = TRUE;
7679
7680 /* Check if this section is covered by the segment. */
7681 this_hdr = &(elf_section_data(section)->this_hdr);
f4638467 7682 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
84d1d650
L
7683 {
7684 /* FIXME: Check if its output section is changed or
7685 removed. What else do we need to check? */
7686 if (osec == NULL
7687 || section->flags != osec->flags
7688 || section->lma != osec->lma
7689 || section->vma != osec->vma
7690 || section->size != osec->size
7691 || section->rawsize != osec->rawsize
7692 || section->alignment_power != osec->alignment_power)
7693 goto rewrite;
7694 }
7695 }
7696 }
7697
cb3ff1e5 7698 /* Check to see if any output section do not come from the
84d1d650
L
7699 input BFD. */
7700 for (section = obfd->sections; section != NULL;
7701 section = section->next)
7702 {
535b785f 7703 if (!section->segment_mark)
84d1d650
L
7704 goto rewrite;
7705 else
7706 section->segment_mark = FALSE;
7707 }
7708
7709 return copy_elf_program_header (ibfd, obfd);
7710 }
7711
7712rewrite:
f1d85785
L
7713 if (ibfd->xvec == obfd->xvec)
7714 {
7715 /* When rewriting program header, set the output maxpagesize to
7716 the maximum alignment of input PT_LOAD segments. */
7717 Elf_Internal_Phdr *segment;
7718 unsigned int i;
7719 unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
7720 bfd_vma maxpagesize = 0;
7721
7722 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7723 i < num_segments;
7724 i++, segment++)
7725 if (segment->p_type == PT_LOAD
7726 && maxpagesize < segment->p_align)
c86934ce
NC
7727 {
7728 /* PR 17512: file: f17299af. */
7729 if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
695344c0 7730 /* xgettext:c-format */
2dcf00ce
AM
7731 _bfd_error_handler (_("%pB: warning: segment alignment of %#"
7732 PRIx64 " is too large"),
7733 ibfd, (uint64_t) segment->p_align);
c86934ce
NC
7734 else
7735 maxpagesize = segment->p_align;
7736 }
f1d85785
L
7737
7738 if (maxpagesize != get_elf_backend_data (obfd)->maxpagesize)
7739 bfd_emul_set_maxpagesize (bfd_get_target (obfd), maxpagesize);
7740 }
7741
84d1d650
L
7742 return rewrite_elf_program_header (ibfd, obfd);
7743}
7744
ccd2ec6a
L
7745/* Initialize private output section information from input section. */
7746
7747bfd_boolean
7748_bfd_elf_init_private_section_data (bfd *ibfd,
7749 asection *isec,
7750 bfd *obfd,
7751 asection *osec,
7752 struct bfd_link_info *link_info)
7753
7754{
7755 Elf_Internal_Shdr *ihdr, *ohdr;
0e1862bb
L
7756 bfd_boolean final_link = (link_info != NULL
7757 && !bfd_link_relocatable (link_info));
ccd2ec6a
L
7758
7759 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7760 || obfd->xvec->flavour != bfd_target_elf_flavour)
7761 return TRUE;
7762
ba85c43e
NC
7763 BFD_ASSERT (elf_section_data (osec) != NULL);
7764
dfa7b0b8
AM
7765 /* For objcopy and relocatable link, don't copy the output ELF
7766 section type from input if the output BFD section flags have been
7767 set to something different. For a final link allow some flags
7768 that the linker clears to differ. */
42bb2e33 7769 if (elf_section_type (osec) == SHT_NULL
dfa7b0b8
AM
7770 && (osec->flags == isec->flags
7771 || (final_link
7772 && ((osec->flags ^ isec->flags)
0814be7d 7773 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
42bb2e33 7774 elf_section_type (osec) = elf_section_type (isec);
d270463e
L
7775
7776 /* FIXME: Is this correct for all OS/PROC specific flags? */
7777 elf_section_flags (osec) |= (elf_section_flags (isec)
7778 & (SHF_MASKOS | SHF_MASKPROC));
ccd2ec6a 7779
a91e1603 7780 /* Copy sh_info from input for mbind section. */
df3a023b
AM
7781 if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
7782 && elf_section_flags (isec) & SHF_GNU_MBIND)
a91e1603
L
7783 elf_section_data (osec)->this_hdr.sh_info
7784 = elf_section_data (isec)->this_hdr.sh_info;
7785
ccd2ec6a
L
7786 /* Set things up for objcopy and relocatable link. The output
7787 SHT_GROUP section will have its elf_next_in_group pointing back
7788 to the input group members. Ignore linker created group section.
7789 See elfNN_ia64_object_p in elfxx-ia64.c. */
7bdf4127
AB
7790 if ((link_info == NULL
7791 || !link_info->resolve_section_groups)
7792 && (elf_sec_group (isec) == NULL
7793 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
ccd2ec6a 7794 {
7bdf4127
AB
7795 if (elf_section_flags (isec) & SHF_GROUP)
7796 elf_section_flags (osec) |= SHF_GROUP;
7797 elf_next_in_group (osec) = elf_next_in_group (isec);
7798 elf_section_data (osec)->group = elf_section_data (isec)->group;
ccd2ec6a
L
7799 }
7800
7bdf4127
AB
7801 /* If not decompress, preserve SHF_COMPRESSED. */
7802 if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
7803 elf_section_flags (osec) |= (elf_section_flags (isec)
7804 & SHF_COMPRESSED);
7805
ccd2ec6a
L
7806 ihdr = &elf_section_data (isec)->this_hdr;
7807
7808 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
7809 don't use the output section of the linked-to section since it
7810 may be NULL at this point. */
7811 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
7812 {
7813 ohdr = &elf_section_data (osec)->this_hdr;
7814 ohdr->sh_flags |= SHF_LINK_ORDER;
7815 elf_linked_to_section (osec) = elf_linked_to_section (isec);
7816 }
7817
7818 osec->use_rela_p = isec->use_rela_p;
7819
7820 return TRUE;
7821}
7822
252b5132
RH
7823/* Copy private section information. This copies over the entsize
7824 field, and sometimes the info field. */
7825
b34976b6 7826bfd_boolean
217aa764
AM
7827_bfd_elf_copy_private_section_data (bfd *ibfd,
7828 asection *isec,
7829 bfd *obfd,
7830 asection *osec)
252b5132
RH
7831{
7832 Elf_Internal_Shdr *ihdr, *ohdr;
7833
7834 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7835 || obfd->xvec->flavour != bfd_target_elf_flavour)
b34976b6 7836 return TRUE;
252b5132 7837
252b5132
RH
7838 ihdr = &elf_section_data (isec)->this_hdr;
7839 ohdr = &elf_section_data (osec)->this_hdr;
7840
7841 ohdr->sh_entsize = ihdr->sh_entsize;
7842
7843 if (ihdr->sh_type == SHT_SYMTAB
7844 || ihdr->sh_type == SHT_DYNSYM
7845 || ihdr->sh_type == SHT_GNU_verneed
7846 || ihdr->sh_type == SHT_GNU_verdef)
7847 ohdr->sh_info = ihdr->sh_info;
7848
ccd2ec6a
L
7849 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
7850 NULL);
252b5132
RH
7851}
7852
d0bf826b
AM
7853/* Look at all the SHT_GROUP sections in IBFD, making any adjustments
7854 necessary if we are removing either the SHT_GROUP section or any of
7855 the group member sections. DISCARDED is the value that a section's
7856 output_section has if the section will be discarded, NULL when this
7857 function is called from objcopy, bfd_abs_section_ptr when called
7858 from the linker. */
80fccad2
BW
7859
7860bfd_boolean
d0bf826b 7861_bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
80fccad2 7862{
30288845
AM
7863 asection *isec;
7864
30288845 7865 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
415f38a6 7866 if (elf_section_type (isec) == SHT_GROUP)
30288845
AM
7867 {
7868 asection *first = elf_next_in_group (isec);
7869 asection *s = first;
d0bf826b
AM
7870 bfd_size_type removed = 0;
7871
30288845
AM
7872 while (s != NULL)
7873 {
415f38a6
AM
7874 /* If this member section is being output but the
7875 SHT_GROUP section is not, then clear the group info
7876 set up by _bfd_elf_copy_private_section_data. */
d0bf826b
AM
7877 if (s->output_section != discarded
7878 && isec->output_section == discarded)
30288845
AM
7879 {
7880 elf_section_flags (s->output_section) &= ~SHF_GROUP;
7881 elf_group_name (s->output_section) = NULL;
7882 }
415f38a6
AM
7883 /* Conversely, if the member section is not being output
7884 but the SHT_GROUP section is, then adjust its size. */
d0bf826b
AM
7885 else if (s->output_section == discarded
7886 && isec->output_section != discarded)
6e5e9d58
AM
7887 {
7888 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
7889 removed += 4;
7890 if (elf_sec->rel.hdr != NULL
7891 && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
7892 removed += 4;
7893 if (elf_sec->rela.hdr != NULL
7894 && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
7895 removed += 4;
7896 }
30288845
AM
7897 s = elf_next_in_group (s);
7898 if (s == first)
7899 break;
7900 }
d0bf826b
AM
7901 if (removed != 0)
7902 {
7903 if (discarded != NULL)
7904 {
7905 /* If we've been called for ld -r, then we need to
6e5e9d58 7906 adjust the input section size. */
d0bf826b
AM
7907 if (isec->rawsize == 0)
7908 isec->rawsize = isec->size;
7909 isec->size = isec->rawsize - removed;
6e5e9d58
AM
7910 if (isec->size <= 4)
7911 {
7912 isec->size = 0;
7913 isec->flags |= SEC_EXCLUDE;
7914 }
d0bf826b
AM
7915 }
7916 else
7917 {
7918 /* Adjust the output section size when called from
7919 objcopy. */
7920 isec->output_section->size -= removed;
6e5e9d58
AM
7921 if (isec->output_section->size <= 4)
7922 {
7923 isec->output_section->size = 0;
7924 isec->output_section->flags |= SEC_EXCLUDE;
7925 }
d0bf826b
AM
7926 }
7927 }
30288845
AM
7928 }
7929
80fccad2
BW
7930 return TRUE;
7931}
7932
d0bf826b
AM
7933/* Copy private header information. */
7934
7935bfd_boolean
7936_bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
7937{
7938 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7939 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7940 return TRUE;
7941
7942 /* Copy over private BFD data if it has not already been copied.
7943 This must be done here, rather than in the copy_private_bfd_data
7944 entry point, because the latter is called after the section
7945 contents have been set, which means that the program headers have
7946 already been worked out. */
12bd6957 7947 if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
d0bf826b
AM
7948 {
7949 if (! copy_private_bfd_data (ibfd, obfd))
7950 return FALSE;
7951 }
7952
7953 return _bfd_elf_fixup_group_sections (ibfd, NULL);
7954}
7955
252b5132
RH
7956/* Copy private symbol information. If this symbol is in a section
7957 which we did not map into a BFD section, try to map the section
7958 index correctly. We use special macro definitions for the mapped
7959 section indices; these definitions are interpreted by the
7960 swap_out_syms function. */
7961
9ad5cbcf
AM
7962#define MAP_ONESYMTAB (SHN_HIOS + 1)
7963#define MAP_DYNSYMTAB (SHN_HIOS + 2)
7964#define MAP_STRTAB (SHN_HIOS + 3)
7965#define MAP_SHSTRTAB (SHN_HIOS + 4)
7966#define MAP_SYM_SHNDX (SHN_HIOS + 5)
252b5132 7967
b34976b6 7968bfd_boolean
217aa764
AM
7969_bfd_elf_copy_private_symbol_data (bfd *ibfd,
7970 asymbol *isymarg,
7971 bfd *obfd,
7972 asymbol *osymarg)
252b5132
RH
7973{
7974 elf_symbol_type *isym, *osym;
7975
7976 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7977 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
b34976b6 7978 return TRUE;
252b5132
RH
7979
7980 isym = elf_symbol_from (ibfd, isymarg);
7981 osym = elf_symbol_from (obfd, osymarg);
7982
7983 if (isym != NULL
8424d8f5 7984 && isym->internal_elf_sym.st_shndx != 0
252b5132
RH
7985 && osym != NULL
7986 && bfd_is_abs_section (isym->symbol.section))
7987 {
7988 unsigned int shndx;
7989
7990 shndx = isym->internal_elf_sym.st_shndx;
7991 if (shndx == elf_onesymtab (ibfd))
7992 shndx = MAP_ONESYMTAB;
7993 else if (shndx == elf_dynsymtab (ibfd))
7994 shndx = MAP_DYNSYMTAB;
12bd6957 7995 else if (shndx == elf_strtab_sec (ibfd))
252b5132 7996 shndx = MAP_STRTAB;
12bd6957 7997 else if (shndx == elf_shstrtab_sec (ibfd))
252b5132 7998 shndx = MAP_SHSTRTAB;
6a40cf0c 7999 else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
9ad5cbcf 8000 shndx = MAP_SYM_SHNDX;
252b5132
RH
8001 osym->internal_elf_sym.st_shndx = shndx;
8002 }
8003
b34976b6 8004 return TRUE;
252b5132
RH
8005}
8006
8007/* Swap out the symbols. */
8008
b34976b6 8009static bfd_boolean
217aa764 8010swap_out_syms (bfd *abfd,
ef10c3ac 8011 struct elf_strtab_hash **sttp,
217aa764 8012 int relocatable_p)
252b5132 8013{
9c5bfbb7 8014 const struct elf_backend_data *bed;
079e9a2f
AM
8015 int symcount;
8016 asymbol **syms;
ef10c3ac 8017 struct elf_strtab_hash *stt;
079e9a2f 8018 Elf_Internal_Shdr *symtab_hdr;
9ad5cbcf 8019 Elf_Internal_Shdr *symtab_shndx_hdr;
079e9a2f 8020 Elf_Internal_Shdr *symstrtab_hdr;
ef10c3ac 8021 struct elf_sym_strtab *symstrtab;
f075ee0c
AM
8022 bfd_byte *outbound_syms;
8023 bfd_byte *outbound_shndx;
ef10c3ac
L
8024 unsigned long outbound_syms_index;
8025 unsigned long outbound_shndx_index;
079e9a2f 8026 int idx;
12bd6957 8027 unsigned int num_locals;
079e9a2f 8028 bfd_size_type amt;
174fd7f9 8029 bfd_boolean name_local_sections;
252b5132 8030
12bd6957 8031 if (!elf_map_symbols (abfd, &num_locals))
b34976b6 8032 return FALSE;
252b5132 8033
c044fabd 8034 /* Dump out the symtabs. */
ef10c3ac 8035 stt = _bfd_elf_strtab_init ();
079e9a2f 8036 if (stt == NULL)
b34976b6 8037 return FALSE;
252b5132 8038
079e9a2f
AM
8039 bed = get_elf_backend_data (abfd);
8040 symcount = bfd_get_symcount (abfd);
8041 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8042 symtab_hdr->sh_type = SHT_SYMTAB;
8043 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8044 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
12bd6957 8045 symtab_hdr->sh_info = num_locals + 1;
72de5009 8046 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
079e9a2f
AM
8047
8048 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8049 symstrtab_hdr->sh_type = SHT_STRTAB;
8050
ef10c3ac 8051 /* Allocate buffer to swap out the .strtab section. */
7a6e0d89
AM
8052 symstrtab = (struct elf_sym_strtab *) bfd_malloc2 (symcount + 1,
8053 sizeof (*symstrtab));
ef10c3ac
L
8054 if (symstrtab == NULL)
8055 {
8056 _bfd_elf_strtab_free (stt);
8057 return FALSE;
8058 }
8059
a50b1753 8060 outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount,
07d6d2b8 8061 bed->s->sizeof_sym);
079e9a2f 8062 if (outbound_syms == NULL)
5ed6aba4 8063 {
ef10c3ac
L
8064error_return:
8065 _bfd_elf_strtab_free (stt);
8066 free (symstrtab);
5ed6aba4
NC
8067 return FALSE;
8068 }
217aa764 8069 symtab_hdr->contents = outbound_syms;
ef10c3ac 8070 outbound_syms_index = 0;
252b5132 8071
9ad5cbcf 8072 outbound_shndx = NULL;
ef10c3ac 8073 outbound_shndx_index = 0;
6a40cf0c
NC
8074
8075 if (elf_symtab_shndx_list (abfd))
9ad5cbcf 8076 {
6a40cf0c
NC
8077 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8078 if (symtab_shndx_hdr->sh_name != 0)
8079 {
8080 amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
8081 outbound_shndx = (bfd_byte *)
8082 bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx));
8083 if (outbound_shndx == NULL)
8084 goto error_return;
5ed6aba4 8085
6a40cf0c
NC
8086 symtab_shndx_hdr->contents = outbound_shndx;
8087 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8088 symtab_shndx_hdr->sh_size = amt;
8089 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8090 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8091 }
8092 /* FIXME: What about any other headers in the list ? */
9ad5cbcf
AM
8093 }
8094
589e6347 8095 /* Now generate the data (for "contents"). */
079e9a2f
AM
8096 {
8097 /* Fill in zeroth symbol and swap it out. */
8098 Elf_Internal_Sym sym;
8099 sym.st_name = 0;
8100 sym.st_value = 0;
8101 sym.st_size = 0;
8102 sym.st_info = 0;
8103 sym.st_other = 0;
8104 sym.st_shndx = SHN_UNDEF;
35fc36a8 8105 sym.st_target_internal = 0;
ef10c3ac
L
8106 symstrtab[0].sym = sym;
8107 symstrtab[0].dest_index = outbound_syms_index;
8108 symstrtab[0].destshndx_index = outbound_shndx_index;
8109 outbound_syms_index++;
9ad5cbcf 8110 if (outbound_shndx != NULL)
ef10c3ac 8111 outbound_shndx_index++;
079e9a2f 8112 }
252b5132 8113
174fd7f9
RS
8114 name_local_sections
8115 = (bed->elf_backend_name_local_section_symbols
8116 && bed->elf_backend_name_local_section_symbols (abfd));
8117
079e9a2f 8118 syms = bfd_get_outsymbols (abfd);
ef10c3ac 8119 for (idx = 0; idx < symcount;)
252b5132 8120 {
252b5132 8121 Elf_Internal_Sym sym;
079e9a2f
AM
8122 bfd_vma value = syms[idx]->value;
8123 elf_symbol_type *type_ptr;
8124 flagword flags = syms[idx]->flags;
8125 int type;
252b5132 8126
174fd7f9
RS
8127 if (!name_local_sections
8128 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
079e9a2f
AM
8129 {
8130 /* Local section symbols have no name. */
ef10c3ac 8131 sym.st_name = (unsigned long) -1;
079e9a2f
AM
8132 }
8133 else
8134 {
ef10c3ac
L
8135 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8136 to get the final offset for st_name. */
8137 sym.st_name
8138 = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8139 FALSE);
079e9a2f 8140 if (sym.st_name == (unsigned long) -1)
ef10c3ac 8141 goto error_return;
079e9a2f 8142 }
252b5132 8143
079e9a2f 8144 type_ptr = elf_symbol_from (abfd, syms[idx]);
252b5132 8145
079e9a2f
AM
8146 if ((flags & BSF_SECTION_SYM) == 0
8147 && bfd_is_com_section (syms[idx]->section))
8148 {
8149 /* ELF common symbols put the alignment into the `value' field,
8150 and the size into the `size' field. This is backwards from
8151 how BFD handles it, so reverse it here. */
8152 sym.st_size = value;
8153 if (type_ptr == NULL
8154 || type_ptr->internal_elf_sym.st_value == 0)
8155 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8156 else
8157 sym.st_value = type_ptr->internal_elf_sym.st_value;
8158 sym.st_shndx = _bfd_elf_section_from_bfd_section
8159 (abfd, syms[idx]->section);
8160 }
8161 else
8162 {
8163 asection *sec = syms[idx]->section;
cb33740c 8164 unsigned int shndx;
252b5132 8165
079e9a2f
AM
8166 if (sec->output_section)
8167 {
8168 value += sec->output_offset;
8169 sec = sec->output_section;
8170 }
589e6347 8171
079e9a2f
AM
8172 /* Don't add in the section vma for relocatable output. */
8173 if (! relocatable_p)
8174 value += sec->vma;
8175 sym.st_value = value;
8176 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8177
8178 if (bfd_is_abs_section (sec)
8179 && type_ptr != NULL
8180 && type_ptr->internal_elf_sym.st_shndx != 0)
8181 {
8182 /* This symbol is in a real ELF section which we did
8183 not create as a BFD section. Undo the mapping done
8184 by copy_private_symbol_data. */
8185 shndx = type_ptr->internal_elf_sym.st_shndx;
8186 switch (shndx)
8187 {
8188 case MAP_ONESYMTAB:
8189 shndx = elf_onesymtab (abfd);
8190 break;
8191 case MAP_DYNSYMTAB:
8192 shndx = elf_dynsymtab (abfd);
8193 break;
8194 case MAP_STRTAB:
12bd6957 8195 shndx = elf_strtab_sec (abfd);
079e9a2f
AM
8196 break;
8197 case MAP_SHSTRTAB:
12bd6957 8198 shndx = elf_shstrtab_sec (abfd);
079e9a2f 8199 break;
9ad5cbcf 8200 case MAP_SYM_SHNDX:
6a40cf0c
NC
8201 if (elf_symtab_shndx_list (abfd))
8202 shndx = elf_symtab_shndx_list (abfd)->ndx;
9ad5cbcf 8203 break;
079e9a2f 8204 default:
15bc576a 8205 shndx = SHN_ABS;
079e9a2f
AM
8206 break;
8207 }
8208 }
8209 else
8210 {
8211 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
252b5132 8212
cb33740c 8213 if (shndx == SHN_BAD)
079e9a2f
AM
8214 {
8215 asection *sec2;
8216
8217 /* Writing this would be a hell of a lot easier if
8218 we had some decent documentation on bfd, and
8219 knew what to expect of the library, and what to
8220 demand of applications. For example, it
8221 appears that `objcopy' might not set the
8222 section of a symbol to be a section that is
8223 actually in the output file. */
8224 sec2 = bfd_get_section_by_name (abfd, sec->name);
5df1bc57
AM
8225 if (sec2 != NULL)
8226 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8227 if (shndx == SHN_BAD)
589e6347 8228 {
695344c0 8229 /* xgettext:c-format */
9793eb77
AM
8230 _bfd_error_handler
8231 (_("unable to find equivalent output section"
8232 " for symbol '%s' from section '%s'"),
8233 syms[idx]->name ? syms[idx]->name : "<Local sym>",
8234 sec->name);
811072d8 8235 bfd_set_error (bfd_error_invalid_operation);
ef10c3ac 8236 goto error_return;
589e6347 8237 }
079e9a2f
AM
8238 }
8239 }
252b5132 8240
079e9a2f
AM
8241 sym.st_shndx = shndx;
8242 }
252b5132 8243
13ae64f3
JJ
8244 if ((flags & BSF_THREAD_LOCAL) != 0)
8245 type = STT_TLS;
d8045f23
NC
8246 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8247 type = STT_GNU_IFUNC;
13ae64f3 8248 else if ((flags & BSF_FUNCTION) != 0)
079e9a2f
AM
8249 type = STT_FUNC;
8250 else if ((flags & BSF_OBJECT) != 0)
8251 type = STT_OBJECT;
d9352518
DB
8252 else if ((flags & BSF_RELC) != 0)
8253 type = STT_RELC;
8254 else if ((flags & BSF_SRELC) != 0)
8255 type = STT_SRELC;
079e9a2f
AM
8256 else
8257 type = STT_NOTYPE;
252b5132 8258
13ae64f3
JJ
8259 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8260 type = STT_TLS;
8261
589e6347 8262 /* Processor-specific types. */
079e9a2f
AM
8263 if (type_ptr != NULL
8264 && bed->elf_backend_get_symbol_type)
8265 type = ((*bed->elf_backend_get_symbol_type)
8266 (&type_ptr->internal_elf_sym, type));
252b5132 8267
079e9a2f
AM
8268 if (flags & BSF_SECTION_SYM)
8269 {
8270 if (flags & BSF_GLOBAL)
8271 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8272 else
8273 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8274 }
8275 else if (bfd_is_com_section (syms[idx]->section))
0a40daed 8276 {
b8871f35
L
8277 if (type != STT_TLS)
8278 {
8279 if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
8280 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
8281 ? STT_COMMON : STT_OBJECT);
8282 else
8283 type = ((flags & BSF_ELF_COMMON) != 0
8284 ? STT_COMMON : STT_OBJECT);
8285 }
8286 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
0a40daed 8287 }
079e9a2f
AM
8288 else if (bfd_is_und_section (syms[idx]->section))
8289 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
8290 ? STB_WEAK
8291 : STB_GLOBAL),
8292 type);
8293 else if (flags & BSF_FILE)
8294 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8295 else
8296 {
8297 int bind = STB_LOCAL;
252b5132 8298
079e9a2f
AM
8299 if (flags & BSF_LOCAL)
8300 bind = STB_LOCAL;
3e7a7d11
NC
8301 else if (flags & BSF_GNU_UNIQUE)
8302 bind = STB_GNU_UNIQUE;
079e9a2f
AM
8303 else if (flags & BSF_WEAK)
8304 bind = STB_WEAK;
8305 else if (flags & BSF_GLOBAL)
8306 bind = STB_GLOBAL;
252b5132 8307
079e9a2f
AM
8308 sym.st_info = ELF_ST_INFO (bind, type);
8309 }
252b5132 8310
079e9a2f 8311 if (type_ptr != NULL)
35fc36a8
RS
8312 {
8313 sym.st_other = type_ptr->internal_elf_sym.st_other;
8314 sym.st_target_internal
8315 = type_ptr->internal_elf_sym.st_target_internal;
8316 }
079e9a2f 8317 else
35fc36a8
RS
8318 {
8319 sym.st_other = 0;
8320 sym.st_target_internal = 0;
8321 }
252b5132 8322
ef10c3ac
L
8323 idx++;
8324 symstrtab[idx].sym = sym;
8325 symstrtab[idx].dest_index = outbound_syms_index;
8326 symstrtab[idx].destshndx_index = outbound_shndx_index;
8327
8328 outbound_syms_index++;
9ad5cbcf 8329 if (outbound_shndx != NULL)
ef10c3ac
L
8330 outbound_shndx_index++;
8331 }
8332
8333 /* Finalize the .strtab section. */
8334 _bfd_elf_strtab_finalize (stt);
8335
8336 /* Swap out the .strtab section. */
8337 for (idx = 0; idx <= symcount; idx++)
8338 {
8339 struct elf_sym_strtab *elfsym = &symstrtab[idx];
8340 if (elfsym->sym.st_name == (unsigned long) -1)
8341 elfsym->sym.st_name = 0;
8342 else
8343 elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
8344 elfsym->sym.st_name);
8345 bed->s->swap_symbol_out (abfd, &elfsym->sym,
8346 (outbound_syms
8347 + (elfsym->dest_index
8348 * bed->s->sizeof_sym)),
8349 (outbound_shndx
8350 + (elfsym->destshndx_index
8351 * sizeof (Elf_External_Sym_Shndx))));
079e9a2f 8352 }
ef10c3ac 8353 free (symstrtab);
252b5132 8354
079e9a2f 8355 *sttp = stt;
ef10c3ac 8356 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
079e9a2f 8357 symstrtab_hdr->sh_type = SHT_STRTAB;
84865015 8358 symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
079e9a2f
AM
8359 symstrtab_hdr->sh_addr = 0;
8360 symstrtab_hdr->sh_entsize = 0;
8361 symstrtab_hdr->sh_link = 0;
8362 symstrtab_hdr->sh_info = 0;
8363 symstrtab_hdr->sh_addralign = 1;
252b5132 8364
b34976b6 8365 return TRUE;
252b5132
RH
8366}
8367
8368/* Return the number of bytes required to hold the symtab vector.
8369
8370 Note that we base it on the count plus 1, since we will null terminate
8371 the vector allocated based on this size. However, the ELF symbol table
8372 always has a dummy entry as symbol #0, so it ends up even. */
8373
8374long
217aa764 8375_bfd_elf_get_symtab_upper_bound (bfd *abfd)
252b5132 8376{
3a551c7a 8377 bfd_size_type symcount;
252b5132
RH
8378 long symtab_size;
8379 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
8380
8381 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3a551c7a
AM
8382 if (symcount >= LONG_MAX / sizeof (asymbol *))
8383 {
8384 bfd_set_error (bfd_error_file_too_big);
8385 return -1;
8386 }
b99d1833
AM
8387 symtab_size = (symcount + 1) * (sizeof (asymbol *));
8388 if (symcount > 0)
8389 symtab_size -= sizeof (asymbol *);
252b5132
RH
8390
8391 return symtab_size;
8392}
8393
8394long
217aa764 8395_bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
252b5132 8396{
3a551c7a 8397 bfd_size_type symcount;
252b5132
RH
8398 long symtab_size;
8399 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
8400
8401 if (elf_dynsymtab (abfd) == 0)
8402 {
8403 bfd_set_error (bfd_error_invalid_operation);
8404 return -1;
8405 }
8406
8407 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3a551c7a
AM
8408 if (symcount >= LONG_MAX / sizeof (asymbol *))
8409 {
8410 bfd_set_error (bfd_error_file_too_big);
8411 return -1;
8412 }
b99d1833
AM
8413 symtab_size = (symcount + 1) * (sizeof (asymbol *));
8414 if (symcount > 0)
8415 symtab_size -= sizeof (asymbol *);
252b5132
RH
8416
8417 return symtab_size;
8418}
8419
8420long
217aa764
AM
8421_bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
8422 sec_ptr asect)
252b5132 8423{
242a1159 8424#if SIZEOF_LONG == SIZEOF_INT
7a6e0d89
AM
8425 if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
8426 {
8427 bfd_set_error (bfd_error_file_too_big);
8428 return -1;
8429 }
242a1159 8430#endif
252b5132
RH
8431 return (asect->reloc_count + 1) * sizeof (arelent *);
8432}
8433
8434/* Canonicalize the relocs. */
8435
8436long
217aa764
AM
8437_bfd_elf_canonicalize_reloc (bfd *abfd,
8438 sec_ptr section,
8439 arelent **relptr,
8440 asymbol **symbols)
252b5132
RH
8441{
8442 arelent *tblptr;
8443 unsigned int i;
9c5bfbb7 8444 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132 8445
b34976b6 8446 if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
252b5132
RH
8447 return -1;
8448
8449 tblptr = section->relocation;
8450 for (i = 0; i < section->reloc_count; i++)
8451 *relptr++ = tblptr++;
8452
8453 *relptr = NULL;
8454
8455 return section->reloc_count;
8456}
8457
8458long
6cee3f79 8459_bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
252b5132 8460{
9c5bfbb7 8461 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
217aa764 8462 long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
252b5132
RH
8463
8464 if (symcount >= 0)
ed48ec2e 8465 abfd->symcount = symcount;
252b5132
RH
8466 return symcount;
8467}
8468
8469long
217aa764
AM
8470_bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
8471 asymbol **allocation)
252b5132 8472{
9c5bfbb7 8473 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
217aa764 8474 long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
1f70368c
DJ
8475
8476 if (symcount >= 0)
ed48ec2e 8477 abfd->dynsymcount = symcount;
1f70368c 8478 return symcount;
252b5132
RH
8479}
8480
8615f3f2
AM
8481/* Return the size required for the dynamic reloc entries. Any loadable
8482 section that was actually installed in the BFD, and has type SHT_REL
8483 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
8484 dynamic reloc section. */
252b5132
RH
8485
8486long
217aa764 8487_bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
252b5132 8488{
3a551c7a 8489 bfd_size_type count;
252b5132
RH
8490 asection *s;
8491
8492 if (elf_dynsymtab (abfd) == 0)
8493 {
8494 bfd_set_error (bfd_error_invalid_operation);
8495 return -1;
8496 }
8497
3a551c7a 8498 count = 1;
252b5132 8499 for (s = abfd->sections; s != NULL; s = s->next)
266b05cf 8500 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
252b5132
RH
8501 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8502 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
3a551c7a
AM
8503 {
8504 count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
8505 if (count > LONG_MAX / sizeof (arelent *))
8506 {
8507 bfd_set_error (bfd_error_file_too_big);
8508 return -1;
8509 }
8510 }
8511 return count * sizeof (arelent *);
252b5132
RH
8512}
8513
8615f3f2
AM
8514/* Canonicalize the dynamic relocation entries. Note that we return the
8515 dynamic relocations as a single block, although they are actually
8516 associated with particular sections; the interface, which was
8517 designed for SunOS style shared libraries, expects that there is only
8518 one set of dynamic relocs. Any loadable section that was actually
8519 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
8520 dynamic symbol table, is considered to be a dynamic reloc section. */
252b5132
RH
8521
8522long
217aa764
AM
8523_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
8524 arelent **storage,
8525 asymbol **syms)
252b5132 8526{
217aa764 8527 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
252b5132
RH
8528 asection *s;
8529 long ret;
8530
8531 if (elf_dynsymtab (abfd) == 0)
8532 {
8533 bfd_set_error (bfd_error_invalid_operation);
8534 return -1;
8535 }
8536
8537 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
8538 ret = 0;
8539 for (s = abfd->sections; s != NULL; s = s->next)
8540 {
266b05cf 8541 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
252b5132
RH
8542 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8543 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8544 {
8545 arelent *p;
8546 long count, i;
8547
b34976b6 8548 if (! (*slurp_relocs) (abfd, s, syms, TRUE))
252b5132 8549 return -1;
eea6121a 8550 count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
252b5132
RH
8551 p = s->relocation;
8552 for (i = 0; i < count; i++)
8553 *storage++ = p++;
8554 ret += count;
8555 }
8556 }
8557
8558 *storage = NULL;
8559
8560 return ret;
8561}
8562\f
8563/* Read in the version information. */
8564
b34976b6 8565bfd_boolean
fc0e6df6 8566_bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
252b5132
RH
8567{
8568 bfd_byte *contents = NULL;
fc0e6df6
PB
8569 unsigned int freeidx = 0;
8570
8571 if (elf_dynverref (abfd) != 0)
8572 {
8573 Elf_Internal_Shdr *hdr;
8574 Elf_External_Verneed *everneed;
8575 Elf_Internal_Verneed *iverneed;
8576 unsigned int i;
d0fb9a8d 8577 bfd_byte *contents_end;
fc0e6df6
PB
8578
8579 hdr = &elf_tdata (abfd)->dynverref_hdr;
8580
bd61e135
AM
8581 if (hdr->sh_info == 0
8582 || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
d0fb9a8d 8583 {
601a03ba 8584error_return_bad_verref:
4eca0228 8585 _bfd_error_handler
871b3ab2 8586 (_("%pB: .gnu.version_r invalid entry"), abfd);
601a03ba 8587 bfd_set_error (bfd_error_bad_value);
d0fb9a8d
JJ
8588error_return_verref:
8589 elf_tdata (abfd)->verref = NULL;
8590 elf_tdata (abfd)->cverrefs = 0;
8591 goto error_return;
8592 }
601a03ba 8593
7e56c51c
NC
8594 ufile_ptr filesize = bfd_get_file_size (abfd);
8595 if (filesize > 0 && filesize < hdr->sh_size)
8596 {
8597 /* PR 24708: Avoid attempts to allocate a ridiculous amount
8598 of memory. */
8599 bfd_set_error (bfd_error_no_memory);
8600 _bfd_error_handler
8601 /* xgettext:c-format */
8602 (_("error: %pB version reference section is too large (%#" PRIx64 " bytes)"),
8603 abfd, (uint64_t) hdr->sh_size);
8604 goto error_return_verref;
8605 }
601a03ba
AM
8606 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
8607 if (contents == NULL)
8608 goto error_return_verref;
8609
fc0e6df6
PB
8610 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
8611 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
d0fb9a8d 8612 goto error_return_verref;
fc0e6df6 8613
601a03ba 8614 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
bd61e135 8615 bfd_alloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
601a03ba
AM
8616
8617 if (elf_tdata (abfd)->verref == NULL)
d0fb9a8d
JJ
8618 goto error_return_verref;
8619
8620 BFD_ASSERT (sizeof (Elf_External_Verneed)
8621 == sizeof (Elf_External_Vernaux));
8622 contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
fc0e6df6
PB
8623 everneed = (Elf_External_Verneed *) contents;
8624 iverneed = elf_tdata (abfd)->verref;
8625 for (i = 0; i < hdr->sh_info; i++, iverneed++)
8626 {
8627 Elf_External_Vernaux *evernaux;
8628 Elf_Internal_Vernaux *ivernaux;
8629 unsigned int j;
8630
8631 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
8632
8633 iverneed->vn_bfd = abfd;
8634
8635 iverneed->vn_filename =
8636 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8637 iverneed->vn_file);
8638 if (iverneed->vn_filename == NULL)
601a03ba 8639 goto error_return_bad_verref;
fc0e6df6 8640
d0fb9a8d
JJ
8641 if (iverneed->vn_cnt == 0)
8642 iverneed->vn_auxptr = NULL;
8643 else
8644 {
a50b1753 8645 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
07d6d2b8
AM
8646 bfd_alloc2 (abfd, iverneed->vn_cnt,
8647 sizeof (Elf_Internal_Vernaux));
d0fb9a8d
JJ
8648 if (iverneed->vn_auxptr == NULL)
8649 goto error_return_verref;
8650 }
8651
8652 if (iverneed->vn_aux
8653 > (size_t) (contents_end - (bfd_byte *) everneed))
601a03ba 8654 goto error_return_bad_verref;
fc0e6df6
PB
8655
8656 evernaux = ((Elf_External_Vernaux *)
8657 ((bfd_byte *) everneed + iverneed->vn_aux));
8658 ivernaux = iverneed->vn_auxptr;
8659 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
8660 {
8661 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
8662
8663 ivernaux->vna_nodename =
8664 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8665 ivernaux->vna_name);
8666 if (ivernaux->vna_nodename == NULL)
601a03ba 8667 goto error_return_bad_verref;
fc0e6df6 8668
25ff461f
AM
8669 if (ivernaux->vna_other > freeidx)
8670 freeidx = ivernaux->vna_other;
8671
8672 ivernaux->vna_nextptr = NULL;
8673 if (ivernaux->vna_next == 0)
8674 {
8675 iverneed->vn_cnt = j + 1;
8676 break;
8677 }
fc0e6df6
PB
8678 if (j + 1 < iverneed->vn_cnt)
8679 ivernaux->vna_nextptr = ivernaux + 1;
fc0e6df6 8680
d0fb9a8d
JJ
8681 if (ivernaux->vna_next
8682 > (size_t) (contents_end - (bfd_byte *) evernaux))
601a03ba 8683 goto error_return_bad_verref;
d0fb9a8d 8684
fc0e6df6
PB
8685 evernaux = ((Elf_External_Vernaux *)
8686 ((bfd_byte *) evernaux + ivernaux->vna_next));
fc0e6df6
PB
8687 }
8688
25ff461f
AM
8689 iverneed->vn_nextref = NULL;
8690 if (iverneed->vn_next == 0)
8691 break;
fc0e6df6
PB
8692 if (i + 1 < hdr->sh_info)
8693 iverneed->vn_nextref = iverneed + 1;
fc0e6df6 8694
d0fb9a8d
JJ
8695 if (iverneed->vn_next
8696 > (size_t) (contents_end - (bfd_byte *) everneed))
601a03ba 8697 goto error_return_bad_verref;
d0fb9a8d 8698
fc0e6df6
PB
8699 everneed = ((Elf_External_Verneed *)
8700 ((bfd_byte *) everneed + iverneed->vn_next));
8701 }
25ff461f 8702 elf_tdata (abfd)->cverrefs = i;
fc0e6df6
PB
8703
8704 free (contents);
8705 contents = NULL;
8706 }
252b5132
RH
8707
8708 if (elf_dynverdef (abfd) != 0)
8709 {
8710 Elf_Internal_Shdr *hdr;
8711 Elf_External_Verdef *everdef;
8712 Elf_Internal_Verdef *iverdef;
f631889e
UD
8713 Elf_Internal_Verdef *iverdefarr;
8714 Elf_Internal_Verdef iverdefmem;
252b5132 8715 unsigned int i;
062e2358 8716 unsigned int maxidx;
d0fb9a8d 8717 bfd_byte *contents_end_def, *contents_end_aux;
252b5132
RH
8718
8719 hdr = &elf_tdata (abfd)->dynverdef_hdr;
8720
601a03ba
AM
8721 if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef))
8722 {
8723 error_return_bad_verdef:
4eca0228 8724 _bfd_error_handler
871b3ab2 8725 (_("%pB: .gnu.version_d invalid entry"), abfd);
601a03ba
AM
8726 bfd_set_error (bfd_error_bad_value);
8727 error_return_verdef:
8728 elf_tdata (abfd)->verdef = NULL;
8729 elf_tdata (abfd)->cverdefs = 0;
8730 goto error_return;
8731 }
8732
a50b1753 8733 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
252b5132 8734 if (contents == NULL)
601a03ba 8735 goto error_return_verdef;
252b5132 8736 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
217aa764 8737 || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
601a03ba 8738 goto error_return_verdef;
d0fb9a8d
JJ
8739
8740 BFD_ASSERT (sizeof (Elf_External_Verdef)
8741 >= sizeof (Elf_External_Verdaux));
8742 contents_end_def = contents + hdr->sh_size
8743 - sizeof (Elf_External_Verdef);
8744 contents_end_aux = contents + hdr->sh_size
8745 - sizeof (Elf_External_Verdaux);
8746
f631889e
UD
8747 /* We know the number of entries in the section but not the maximum
8748 index. Therefore we have to run through all entries and find
8749 the maximum. */
252b5132 8750 everdef = (Elf_External_Verdef *) contents;
f631889e
UD
8751 maxidx = 0;
8752 for (i = 0; i < hdr->sh_info; ++i)
8753 {
8754 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8755
601a03ba
AM
8756 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
8757 goto error_return_bad_verdef;
062e2358
AM
8758 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
8759 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
f631889e 8760
25ff461f
AM
8761 if (iverdefmem.vd_next == 0)
8762 break;
8763
d0fb9a8d
JJ
8764 if (iverdefmem.vd_next
8765 > (size_t) (contents_end_def - (bfd_byte *) everdef))
601a03ba 8766 goto error_return_bad_verdef;
d0fb9a8d 8767
f631889e
UD
8768 everdef = ((Elf_External_Verdef *)
8769 ((bfd_byte *) everdef + iverdefmem.vd_next));
8770 }
8771
fc0e6df6
PB
8772 if (default_imported_symver)
8773 {
8774 if (freeidx > maxidx)
8775 maxidx = ++freeidx;
8776 else
8777 freeidx = ++maxidx;
8778 }
201159ec 8779
601a03ba
AM
8780 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
8781 bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
f631889e 8782 if (elf_tdata (abfd)->verdef == NULL)
601a03ba 8783 goto error_return_verdef;
f631889e
UD
8784
8785 elf_tdata (abfd)->cverdefs = maxidx;
8786
8787 everdef = (Elf_External_Verdef *) contents;
8788 iverdefarr = elf_tdata (abfd)->verdef;
8789 for (i = 0; i < hdr->sh_info; i++)
252b5132
RH
8790 {
8791 Elf_External_Verdaux *everdaux;
8792 Elf_Internal_Verdaux *iverdaux;
8793 unsigned int j;
8794
f631889e
UD
8795 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8796
d0fb9a8d 8797 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
601a03ba 8798 goto error_return_bad_verdef;
d0fb9a8d 8799
f631889e 8800 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
595bce75 8801 memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
252b5132
RH
8802
8803 iverdef->vd_bfd = abfd;
8804
d0fb9a8d
JJ
8805 if (iverdef->vd_cnt == 0)
8806 iverdef->vd_auxptr = NULL;
8807 else
8808 {
a50b1753 8809 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
07d6d2b8
AM
8810 bfd_alloc2 (abfd, iverdef->vd_cnt,
8811 sizeof (Elf_Internal_Verdaux));
d0fb9a8d
JJ
8812 if (iverdef->vd_auxptr == NULL)
8813 goto error_return_verdef;
8814 }
8815
8816 if (iverdef->vd_aux
8817 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
601a03ba 8818 goto error_return_bad_verdef;
252b5132
RH
8819
8820 everdaux = ((Elf_External_Verdaux *)
8821 ((bfd_byte *) everdef + iverdef->vd_aux));
8822 iverdaux = iverdef->vd_auxptr;
8823 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
8824 {
8825 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
8826
8827 iverdaux->vda_nodename =
8828 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8829 iverdaux->vda_name);
8830 if (iverdaux->vda_nodename == NULL)
601a03ba 8831 goto error_return_bad_verdef;
252b5132 8832
25ff461f
AM
8833 iverdaux->vda_nextptr = NULL;
8834 if (iverdaux->vda_next == 0)
8835 {
8836 iverdef->vd_cnt = j + 1;
8837 break;
8838 }
252b5132
RH
8839 if (j + 1 < iverdef->vd_cnt)
8840 iverdaux->vda_nextptr = iverdaux + 1;
252b5132 8841
d0fb9a8d
JJ
8842 if (iverdaux->vda_next
8843 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
601a03ba 8844 goto error_return_bad_verdef;
d0fb9a8d 8845
252b5132
RH
8846 everdaux = ((Elf_External_Verdaux *)
8847 ((bfd_byte *) everdaux + iverdaux->vda_next));
8848 }
8849
595bce75 8850 iverdef->vd_nodename = NULL;
d0fb9a8d
JJ
8851 if (iverdef->vd_cnt)
8852 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
252b5132 8853
25ff461f
AM
8854 iverdef->vd_nextdef = NULL;
8855 if (iverdef->vd_next == 0)
8856 break;
d0fb9a8d 8857 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
252b5132 8858 iverdef->vd_nextdef = iverdef + 1;
252b5132
RH
8859
8860 everdef = ((Elf_External_Verdef *)
8861 ((bfd_byte *) everdef + iverdef->vd_next));
8862 }
8863
8864 free (contents);
8865 contents = NULL;
8866 }
fc0e6df6 8867 else if (default_imported_symver)
252b5132 8868 {
fc0e6df6
PB
8869 if (freeidx < 3)
8870 freeidx = 3;
8871 else
8872 freeidx++;
252b5132 8873
a50b1753 8874 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
07d6d2b8 8875 bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
fc0e6df6 8876 if (elf_tdata (abfd)->verdef == NULL)
252b5132
RH
8877 goto error_return;
8878
fc0e6df6
PB
8879 elf_tdata (abfd)->cverdefs = freeidx;
8880 }
252b5132 8881
fc0e6df6
PB
8882 /* Create a default version based on the soname. */
8883 if (default_imported_symver)
8884 {
8885 Elf_Internal_Verdef *iverdef;
8886 Elf_Internal_Verdaux *iverdaux;
252b5132 8887
5bb3703f 8888 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
252b5132 8889
fc0e6df6
PB
8890 iverdef->vd_version = VER_DEF_CURRENT;
8891 iverdef->vd_flags = 0;
8892 iverdef->vd_ndx = freeidx;
8893 iverdef->vd_cnt = 1;
252b5132 8894
fc0e6df6 8895 iverdef->vd_bfd = abfd;
252b5132 8896
fc0e6df6
PB
8897 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
8898 if (iverdef->vd_nodename == NULL)
d0fb9a8d 8899 goto error_return_verdef;
fc0e6df6 8900 iverdef->vd_nextdef = NULL;
601a03ba
AM
8901 iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
8902 bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
d0fb9a8d
JJ
8903 if (iverdef->vd_auxptr == NULL)
8904 goto error_return_verdef;
252b5132 8905
fc0e6df6
PB
8906 iverdaux = iverdef->vd_auxptr;
8907 iverdaux->vda_nodename = iverdef->vd_nodename;
252b5132
RH
8908 }
8909
b34976b6 8910 return TRUE;
252b5132
RH
8911
8912 error_return:
5ed6aba4 8913 if (contents != NULL)
252b5132 8914 free (contents);
b34976b6 8915 return FALSE;
252b5132
RH
8916}
8917\f
8918asymbol *
217aa764 8919_bfd_elf_make_empty_symbol (bfd *abfd)
252b5132
RH
8920{
8921 elf_symbol_type *newsym;
8922
7a6e0d89 8923 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
252b5132
RH
8924 if (!newsym)
8925 return NULL;
201159ec
NC
8926 newsym->symbol.the_bfd = abfd;
8927 return &newsym->symbol;
252b5132
RH
8928}
8929
8930void
217aa764
AM
8931_bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
8932 asymbol *symbol,
8933 symbol_info *ret)
252b5132
RH
8934{
8935 bfd_symbol_info (symbol, ret);
8936}
8937
8938/* Return whether a symbol name implies a local symbol. Most targets
8939 use this function for the is_local_label_name entry point, but some
8940 override it. */
8941
b34976b6 8942bfd_boolean
217aa764
AM
8943_bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
8944 const char *name)
252b5132
RH
8945{
8946 /* Normal local symbols start with ``.L''. */
8947 if (name[0] == '.' && name[1] == 'L')
b34976b6 8948 return TRUE;
252b5132
RH
8949
8950 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
8951 DWARF debugging symbols starting with ``..''. */
8952 if (name[0] == '.' && name[1] == '.')
b34976b6 8953 return TRUE;
252b5132
RH
8954
8955 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
8956 emitting DWARF debugging output. I suspect this is actually a
8957 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
8958 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
8959 underscore to be emitted on some ELF targets). For ease of use,
8960 we treat such symbols as local. */
8961 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
b34976b6 8962 return TRUE;
252b5132 8963
b1fa9dd6
NC
8964 /* Treat assembler generated fake symbols, dollar local labels and
8965 forward-backward labels (aka local labels) as locals.
8966 These labels have the form:
8967
07d6d2b8 8968 L0^A.* (fake symbols)
b1fa9dd6
NC
8969
8970 [.]?L[0123456789]+{^A|^B}[0123456789]* (local labels)
8971
8972 Versions which start with .L will have already been matched above,
8973 so we only need to match the rest. */
8974 if (name[0] == 'L' && ISDIGIT (name[1]))
8975 {
8976 bfd_boolean ret = FALSE;
8977 const char * p;
8978 char c;
8979
8980 for (p = name + 2; (c = *p); p++)
8981 {
8982 if (c == 1 || c == 2)
8983 {
8984 if (c == 1 && p == name + 2)
8985 /* A fake symbol. */
8986 return TRUE;
8987
8988 /* FIXME: We are being paranoid here and treating symbols like
8989 L0^Bfoo as if there were non-local, on the grounds that the
8990 assembler will never generate them. But can any symbol
8991 containing an ASCII value in the range 1-31 ever be anything
8992 other than some kind of local ? */
8993 ret = TRUE;
8994 }
8995
8996 if (! ISDIGIT (c))
8997 {
8998 ret = FALSE;
8999 break;
9000 }
9001 }
9002 return ret;
9003 }
ffa54770 9004
b34976b6 9005 return FALSE;
252b5132
RH
9006}
9007
9008alent *
217aa764
AM
9009_bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9010 asymbol *symbol ATTRIBUTE_UNUSED)
252b5132
RH
9011{
9012 abort ();
9013 return NULL;
9014}
9015
b34976b6 9016bfd_boolean
217aa764
AM
9017_bfd_elf_set_arch_mach (bfd *abfd,
9018 enum bfd_architecture arch,
9019 unsigned long machine)
252b5132
RH
9020{
9021 /* If this isn't the right architecture for this backend, and this
9022 isn't the generic backend, fail. */
9023 if (arch != get_elf_backend_data (abfd)->arch
9024 && arch != bfd_arch_unknown
9025 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
b34976b6 9026 return FALSE;
252b5132
RH
9027
9028 return bfd_default_set_arch_mach (abfd, arch, machine);
9029}
9030
d1fad7c6
NC
9031/* Find the nearest line to a particular section and offset,
9032 for error reporting. */
9033
b34976b6 9034bfd_boolean
217aa764 9035_bfd_elf_find_nearest_line (bfd *abfd,
217aa764 9036 asymbol **symbols,
fb167eb2 9037 asection *section,
217aa764
AM
9038 bfd_vma offset,
9039 const char **filename_ptr,
9040 const char **functionname_ptr,
fb167eb2
AM
9041 unsigned int *line_ptr,
9042 unsigned int *discriminator_ptr)
d1fad7c6 9043{
b34976b6 9044 bfd_boolean found;
d1fad7c6 9045
fb167eb2 9046 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
4e8a9624 9047 filename_ptr, functionname_ptr,
fb167eb2 9048 line_ptr, discriminator_ptr,
9defd221 9049 dwarf_debug_sections,
e7679060
AM
9050 &elf_tdata (abfd)->dwarf2_find_line_info))
9051 return TRUE;
9052
9053 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9054 filename_ptr, functionname_ptr, line_ptr))
d1fad7c6
NC
9055 {
9056 if (!*functionname_ptr)
e00e8198
AM
9057 _bfd_elf_find_function (abfd, symbols, section, offset,
9058 *filename_ptr ? NULL : filename_ptr,
9059 functionname_ptr);
b34976b6 9060 return TRUE;
d1fad7c6
NC
9061 }
9062
9063 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
4e8a9624
AM
9064 &found, filename_ptr,
9065 functionname_ptr, line_ptr,
9066 &elf_tdata (abfd)->line_info))
b34976b6 9067 return FALSE;
dc43ada5 9068 if (found && (*functionname_ptr || *line_ptr))
b34976b6 9069 return TRUE;
d1fad7c6
NC
9070
9071 if (symbols == NULL)
b34976b6 9072 return FALSE;
d1fad7c6 9073
e00e8198
AM
9074 if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9075 filename_ptr, functionname_ptr))
b34976b6 9076 return FALSE;
d1fad7c6 9077
252b5132 9078 *line_ptr = 0;
b34976b6 9079 return TRUE;
252b5132
RH
9080}
9081
5420f73d
L
9082/* Find the line for a symbol. */
9083
9084bfd_boolean
9085_bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9086 const char **filename_ptr, unsigned int *line_ptr)
9b8d1a36 9087{
fb167eb2
AM
9088 return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9089 filename_ptr, NULL, line_ptr, NULL,
9defd221 9090 dwarf_debug_sections,
fb167eb2 9091 &elf_tdata (abfd)->dwarf2_find_line_info);
5420f73d
L
9092}
9093
4ab527b0
FF
9094/* After a call to bfd_find_nearest_line, successive calls to
9095 bfd_find_inliner_info can be used to get source information about
9096 each level of function inlining that terminated at the address
9097 passed to bfd_find_nearest_line. Currently this is only supported
9098 for DWARF2 with appropriate DWARF3 extensions. */
9099
9100bfd_boolean
9101_bfd_elf_find_inliner_info (bfd *abfd,
9102 const char **filename_ptr,
9103 const char **functionname_ptr,
9104 unsigned int *line_ptr)
9105{
9106 bfd_boolean found;
9107 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9108 functionname_ptr, line_ptr,
9109 & elf_tdata (abfd)->dwarf2_find_line_info);
9110 return found;
9111}
9112
252b5132 9113int
a6b96beb 9114_bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
252b5132 9115{
8ded5a0f
AM
9116 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9117 int ret = bed->s->sizeof_ehdr;
252b5132 9118
0e1862bb 9119 if (!bfd_link_relocatable (info))
8ded5a0f 9120 {
12bd6957 9121 bfd_size_type phdr_size = elf_program_header_size (abfd);
8ded5a0f 9122
62d7a5f6
AM
9123 if (phdr_size == (bfd_size_type) -1)
9124 {
9125 struct elf_segment_map *m;
9126
9127 phdr_size = 0;
12bd6957 9128 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
62d7a5f6 9129 phdr_size += bed->s->sizeof_phdr;
8ded5a0f 9130
62d7a5f6
AM
9131 if (phdr_size == 0)
9132 phdr_size = get_program_header_size (abfd, info);
9133 }
8ded5a0f 9134
12bd6957 9135 elf_program_header_size (abfd) = phdr_size;
8ded5a0f
AM
9136 ret += phdr_size;
9137 }
9138
252b5132
RH
9139 return ret;
9140}
9141
b34976b6 9142bfd_boolean
217aa764
AM
9143_bfd_elf_set_section_contents (bfd *abfd,
9144 sec_ptr section,
0f867abe 9145 const void *location,
217aa764
AM
9146 file_ptr offset,
9147 bfd_size_type count)
252b5132
RH
9148{
9149 Elf_Internal_Shdr *hdr;
1b6aeedb 9150 file_ptr pos;
252b5132
RH
9151
9152 if (! abfd->output_has_begun
217aa764 9153 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
b34976b6 9154 return FALSE;
252b5132 9155
0ce398f1
L
9156 if (!count)
9157 return TRUE;
9158
252b5132 9159 hdr = &elf_section_data (section)->this_hdr;
0ce398f1
L
9160 if (hdr->sh_offset == (file_ptr) -1)
9161 {
1ff6de03
NA
9162 if (bfd_section_is_ctf (section))
9163 /* Nothing to do with this section: the contents are generated
9164 later. */
9165 return TRUE;
9166
0ce398f1
L
9167 /* We must compress this section. Write output to the buffer. */
9168 unsigned char *contents = hdr->contents;
9169 if ((offset + count) > hdr->sh_size
9170 || (section->flags & SEC_ELF_COMPRESS) == 0
9171 || contents == NULL)
9172 abort ();
9173 memcpy (contents + offset, location, count);
9174 return TRUE;
9175 }
dc810e39
AM
9176 pos = hdr->sh_offset + offset;
9177 if (bfd_seek (abfd, pos, SEEK_SET) != 0
9178 || bfd_bwrite (location, count, abfd) != count)
b34976b6 9179 return FALSE;
252b5132 9180
b34976b6 9181 return TRUE;
252b5132
RH
9182}
9183
f3185997 9184bfd_boolean
217aa764
AM
9185_bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
9186 arelent *cache_ptr ATTRIBUTE_UNUSED,
9187 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
252b5132
RH
9188{
9189 abort ();
f3185997 9190 return FALSE;
252b5132
RH
9191}
9192
252b5132
RH
9193/* Try to convert a non-ELF reloc into an ELF one. */
9194
b34976b6 9195bfd_boolean
217aa764 9196_bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
252b5132 9197{
c044fabd 9198 /* Check whether we really have an ELF howto. */
252b5132
RH
9199
9200 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
9201 {
9202 bfd_reloc_code_real_type code;
9203 reloc_howto_type *howto;
9204
9205 /* Alien reloc: Try to determine its type to replace it with an
c044fabd 9206 equivalent ELF reloc. */
252b5132
RH
9207
9208 if (areloc->howto->pc_relative)
9209 {
9210 switch (areloc->howto->bitsize)
9211 {
9212 case 8:
9213 code = BFD_RELOC_8_PCREL;
9214 break;
9215 case 12:
9216 code = BFD_RELOC_12_PCREL;
9217 break;
9218 case 16:
9219 code = BFD_RELOC_16_PCREL;
9220 break;
9221 case 24:
9222 code = BFD_RELOC_24_PCREL;
9223 break;
9224 case 32:
9225 code = BFD_RELOC_32_PCREL;
9226 break;
9227 case 64:
9228 code = BFD_RELOC_64_PCREL;
9229 break;
9230 default:
9231 goto fail;
9232 }
9233
9234 howto = bfd_reloc_type_lookup (abfd, code);
9235
94698d01 9236 if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
252b5132
RH
9237 {
9238 if (howto->pcrel_offset)
9239 areloc->addend += areloc->address;
9240 else
9241 areloc->addend -= areloc->address; /* addend is unsigned!! */
9242 }
9243 }
9244 else
9245 {
9246 switch (areloc->howto->bitsize)
9247 {
9248 case 8:
9249 code = BFD_RELOC_8;
9250 break;
9251 case 14:
9252 code = BFD_RELOC_14;
9253 break;
9254 case 16:
9255 code = BFD_RELOC_16;
9256 break;
9257 case 26:
9258 code = BFD_RELOC_26;
9259 break;
9260 case 32:
9261 code = BFD_RELOC_32;
9262 break;
9263 case 64:
9264 code = BFD_RELOC_64;
9265 break;
9266 default:
9267 goto fail;
9268 }
9269
9270 howto = bfd_reloc_type_lookup (abfd, code);
9271 }
9272
9273 if (howto)
9274 areloc->howto = howto;
9275 else
9276 goto fail;
9277 }
9278
b34976b6 9279 return TRUE;
252b5132
RH
9280
9281 fail:
0aa13fee
AM
9282 /* xgettext:c-format */
9283 _bfd_error_handler (_("%pB: %s unsupported"),
9284 abfd, areloc->howto->name);
9aea1e31 9285 bfd_set_error (bfd_error_sorry);
b34976b6 9286 return FALSE;
252b5132
RH
9287}
9288
b34976b6 9289bfd_boolean
217aa764 9290_bfd_elf_close_and_cleanup (bfd *abfd)
252b5132 9291{
d9071b0c
TG
9292 struct elf_obj_tdata *tdata = elf_tdata (abfd);
9293 if (bfd_get_format (abfd) == bfd_object && tdata != NULL)
252b5132 9294 {
c0355132 9295 if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
2b0f7ef9 9296 _bfd_elf_strtab_free (elf_shstrtab (abfd));
d9071b0c 9297 _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
252b5132
RH
9298 }
9299
9300 return _bfd_generic_close_and_cleanup (abfd);
9301}
9302
9303/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
9304 in the relocation's offset. Thus we cannot allow any sort of sanity
9305 range-checking to interfere. There is nothing else to do in processing
9306 this reloc. */
9307
9308bfd_reloc_status_type
217aa764
AM
9309_bfd_elf_rel_vtable_reloc_fn
9310 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
fc0a2244 9311 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
217aa764
AM
9312 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
9313 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
252b5132
RH
9314{
9315 return bfd_reloc_ok;
9316}
252b5132
RH
9317\f
9318/* Elf core file support. Much of this only works on native
9319 toolchains, since we rely on knowing the
9320 machine-dependent procfs structure in order to pick
c044fabd 9321 out details about the corefile. */
252b5132
RH
9322
9323#ifdef HAVE_SYS_PROCFS_H
16231b7b
DG
9324/* Needed for new procfs interface on sparc-solaris. */
9325# define _STRUCTURED_PROC 1
252b5132
RH
9326# include <sys/procfs.h>
9327#endif
9328
261b8d08
PA
9329/* Return a PID that identifies a "thread" for threaded cores, or the
9330 PID of the main process for non-threaded cores. */
252b5132
RH
9331
9332static int
217aa764 9333elfcore_make_pid (bfd *abfd)
252b5132 9334{
261b8d08
PA
9335 int pid;
9336
228e534f 9337 pid = elf_tdata (abfd)->core->lwpid;
261b8d08 9338 if (pid == 0)
228e534f 9339 pid = elf_tdata (abfd)->core->pid;
261b8d08
PA
9340
9341 return pid;
252b5132
RH
9342}
9343
252b5132
RH
9344/* If there isn't a section called NAME, make one, using
9345 data from SECT. Note, this function will generate a
9346 reference to NAME, so you shouldn't deallocate or
c044fabd 9347 overwrite it. */
252b5132 9348
b34976b6 9349static bfd_boolean
217aa764 9350elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
252b5132 9351{
c044fabd 9352 asection *sect2;
252b5132
RH
9353
9354 if (bfd_get_section_by_name (abfd, name) != NULL)
b34976b6 9355 return TRUE;
252b5132 9356
117ed4f8 9357 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
252b5132 9358 if (sect2 == NULL)
b34976b6 9359 return FALSE;
252b5132 9360
eea6121a 9361 sect2->size = sect->size;
252b5132 9362 sect2->filepos = sect->filepos;
252b5132 9363 sect2->alignment_power = sect->alignment_power;
b34976b6 9364 return TRUE;
252b5132
RH
9365}
9366
bb0082d6
AM
9367/* Create a pseudosection containing SIZE bytes at FILEPOS. This
9368 actually creates up to two pseudosections:
9369 - For the single-threaded case, a section named NAME, unless
9370 such a section already exists.
9371 - For the multi-threaded case, a section named "NAME/PID", where
9372 PID is elfcore_make_pid (abfd).
24d3e51b 9373 Both pseudosections have identical contents. */
b34976b6 9374bfd_boolean
217aa764
AM
9375_bfd_elfcore_make_pseudosection (bfd *abfd,
9376 char *name,
9377 size_t size,
9378 ufile_ptr filepos)
bb0082d6
AM
9379{
9380 char buf[100];
9381 char *threaded_name;
d4c88bbb 9382 size_t len;
bb0082d6
AM
9383 asection *sect;
9384
9385 /* Build the section name. */
9386
9387 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
d4c88bbb 9388 len = strlen (buf) + 1;
a50b1753 9389 threaded_name = (char *) bfd_alloc (abfd, len);
bb0082d6 9390 if (threaded_name == NULL)
b34976b6 9391 return FALSE;
d4c88bbb 9392 memcpy (threaded_name, buf, len);
bb0082d6 9393
117ed4f8
AM
9394 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
9395 SEC_HAS_CONTENTS);
bb0082d6 9396 if (sect == NULL)
b34976b6 9397 return FALSE;
eea6121a 9398 sect->size = size;
bb0082d6 9399 sect->filepos = filepos;
bb0082d6
AM
9400 sect->alignment_power = 2;
9401
936e320b 9402 return elfcore_maybe_make_sect (abfd, name, sect);
bb0082d6
AM
9403}
9404
58e07198
CZ
9405static bfd_boolean
9406elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
9407 size_t offs)
9408{
9409 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
9410 SEC_HAS_CONTENTS);
9411
9412 if (sect == NULL)
9413 return FALSE;
9414
9415 sect->size = note->descsz - offs;
9416 sect->filepos = note->descpos + offs;
9417 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
9418
9419 return TRUE;
9420}
9421
252b5132 9422/* prstatus_t exists on:
4a938328 9423 solaris 2.5+
252b5132
RH
9424 linux 2.[01] + glibc
9425 unixware 4.2
9426*/
9427
9428#if defined (HAVE_PRSTATUS_T)
a7b97311 9429
b34976b6 9430static bfd_boolean
217aa764 9431elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
252b5132 9432{
eea6121a 9433 size_t size;
7ee38065 9434 int offset;
252b5132 9435
4a938328
MS
9436 if (note->descsz == sizeof (prstatus_t))
9437 {
9438 prstatus_t prstat;
252b5132 9439
eea6121a 9440 size = sizeof (prstat.pr_reg);
7ee38065 9441 offset = offsetof (prstatus_t, pr_reg);
4a938328 9442 memcpy (&prstat, note->descdata, sizeof (prstat));
252b5132 9443
fa49d224
NC
9444 /* Do not overwrite the core signal if it
9445 has already been set by another thread. */
228e534f
AM
9446 if (elf_tdata (abfd)->core->signal == 0)
9447 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9448 if (elf_tdata (abfd)->core->pid == 0)
9449 elf_tdata (abfd)->core->pid = prstat.pr_pid;
252b5132 9450
4a938328
MS
9451 /* pr_who exists on:
9452 solaris 2.5+
9453 unixware 4.2
9454 pr_who doesn't exist on:
9455 linux 2.[01]
9456 */
252b5132 9457#if defined (HAVE_PRSTATUS_T_PR_WHO)
228e534f 9458 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
261b8d08 9459#else
228e534f 9460 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
252b5132 9461#endif
4a938328 9462 }
7ee38065 9463#if defined (HAVE_PRSTATUS32_T)
4a938328
MS
9464 else if (note->descsz == sizeof (prstatus32_t))
9465 {
9466 /* 64-bit host, 32-bit corefile */
9467 prstatus32_t prstat;
9468
eea6121a 9469 size = sizeof (prstat.pr_reg);
7ee38065 9470 offset = offsetof (prstatus32_t, pr_reg);
4a938328
MS
9471 memcpy (&prstat, note->descdata, sizeof (prstat));
9472
fa49d224
NC
9473 /* Do not overwrite the core signal if it
9474 has already been set by another thread. */
228e534f
AM
9475 if (elf_tdata (abfd)->core->signal == 0)
9476 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9477 if (elf_tdata (abfd)->core->pid == 0)
9478 elf_tdata (abfd)->core->pid = prstat.pr_pid;
4a938328
MS
9479
9480 /* pr_who exists on:
9481 solaris 2.5+
9482 unixware 4.2
9483 pr_who doesn't exist on:
9484 linux 2.[01]
9485 */
7ee38065 9486#if defined (HAVE_PRSTATUS32_T_PR_WHO)
228e534f 9487 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
261b8d08 9488#else
228e534f 9489 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
4a938328
MS
9490#endif
9491 }
7ee38065 9492#endif /* HAVE_PRSTATUS32_T */
4a938328
MS
9493 else
9494 {
9495 /* Fail - we don't know how to handle any other
9496 note size (ie. data object type). */
b34976b6 9497 return TRUE;
4a938328 9498 }
252b5132 9499
bb0082d6 9500 /* Make a ".reg/999" section and a ".reg" section. */
936e320b 9501 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
eea6121a 9502 size, note->descpos + offset);
252b5132
RH
9503}
9504#endif /* defined (HAVE_PRSTATUS_T) */
9505
bb0082d6 9506/* Create a pseudosection containing the exact contents of NOTE. */
b34976b6 9507static bfd_boolean
217aa764
AM
9508elfcore_make_note_pseudosection (bfd *abfd,
9509 char *name,
9510 Elf_Internal_Note *note)
252b5132 9511{
936e320b
AM
9512 return _bfd_elfcore_make_pseudosection (abfd, name,
9513 note->descsz, note->descpos);
252b5132
RH
9514}
9515
ff08c6bb
JB
9516/* There isn't a consistent prfpregset_t across platforms,
9517 but it doesn't matter, because we don't have to pick this
c044fabd
KH
9518 data structure apart. */
9519
b34976b6 9520static bfd_boolean
217aa764 9521elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
ff08c6bb
JB
9522{
9523 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
9524}
9525
ff08c6bb 9526/* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
971d4640 9527 type of NT_PRXFPREG. Just include the whole note's contents
ff08c6bb 9528 literally. */
c044fabd 9529
b34976b6 9530static bfd_boolean
217aa764 9531elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
ff08c6bb
JB
9532{
9533 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
9534}
9535
4339cae0
L
9536/* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
9537 with a note type of NT_X86_XSTATE. Just include the whole note's
9538 contents literally. */
9539
9540static bfd_boolean
9541elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
9542{
9543 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
9544}
9545
97753bd5
AM
9546static bfd_boolean
9547elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
9548{
9549 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
9550}
9551
89eeb0bc
LM
9552static bfd_boolean
9553elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
9554{
9555 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
9556}
97753bd5 9557
cb2366c1
EBM
9558static bfd_boolean
9559elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
9560{
9561 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
9562}
9563
9564static bfd_boolean
9565elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
9566{
9567 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
9568}
9569
9570static bfd_boolean
9571elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
9572{
9573 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
9574}
9575
9576static bfd_boolean
9577elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
9578{
9579 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
9580}
9581
9582static bfd_boolean
9583elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
9584{
9585 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
9586}
9587
9588static bfd_boolean
9589elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
9590{
9591 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
9592}
9593
9594static bfd_boolean
9595elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
9596{
9597 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
9598}
9599
9600static bfd_boolean
9601elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
9602{
9603 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
9604}
9605
9606static bfd_boolean
9607elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
9608{
9609 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
9610}
9611
9612static bfd_boolean
9613elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
9614{
9615 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
9616}
9617
9618static bfd_boolean
9619elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
9620{
9621 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
9622}
9623
9624static bfd_boolean
9625elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
9626{
9627 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
9628}
9629
9630static bfd_boolean
9631elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
9632{
9633 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
9634}
9635
0675e188
UW
9636static bfd_boolean
9637elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
9638{
9639 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
9640}
9641
d7eeb400
MS
9642static bfd_boolean
9643elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
9644{
9645 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
9646}
9647
9648static bfd_boolean
9649elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
9650{
9651 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
9652}
9653
9654static bfd_boolean
9655elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
9656{
9657 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
9658}
9659
9660static bfd_boolean
9661elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
9662{
9663 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
9664}
9665
9666static bfd_boolean
9667elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
9668{
9669 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
9670}
9671
355b81d9
UW
9672static bfd_boolean
9673elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
9674{
9675 return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
9676}
9677
9678static bfd_boolean
9679elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
9680{
9681 return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
9682}
9683
abb3f6cc
NC
9684static bfd_boolean
9685elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
9686{
9687 return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
9688}
9689
4ef9f41a
AA
9690static bfd_boolean
9691elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
9692{
9693 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
9694}
9695
9696static bfd_boolean
9697elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
9698{
9699 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
9700}
9701
88ab90e8
AA
9702static bfd_boolean
9703elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
9704{
9705 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
9706}
9707
9708static bfd_boolean
9709elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
9710{
9711 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
9712}
9713
faa9a424
UW
9714static bfd_boolean
9715elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
9716{
9717 return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
9718}
9719
652451f8
YZ
9720static bfd_boolean
9721elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
9722{
9723 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
9724}
9725
9726static bfd_boolean
9727elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
9728{
9729 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
9730}
9731
9732static bfd_boolean
9733elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
9734{
9735 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
9736}
9737
ad1cc4e4
AH
9738static bfd_boolean
9739elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
9740{
9741 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
9742}
9743
e6c3b5bf
AH
9744static bfd_boolean
9745elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
9746{
9747 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
9748}
9749
252b5132 9750#if defined (HAVE_PRPSINFO_T)
4a938328 9751typedef prpsinfo_t elfcore_psinfo_t;
7ee38065 9752#if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
4a938328
MS
9753typedef prpsinfo32_t elfcore_psinfo32_t;
9754#endif
252b5132
RH
9755#endif
9756
9757#if defined (HAVE_PSINFO_T)
4a938328 9758typedef psinfo_t elfcore_psinfo_t;
7ee38065 9759#if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
4a938328
MS
9760typedef psinfo32_t elfcore_psinfo32_t;
9761#endif
252b5132
RH
9762#endif
9763
252b5132
RH
9764/* return a malloc'ed copy of a string at START which is at
9765 most MAX bytes long, possibly without a terminating '\0'.
c044fabd 9766 the copy will always have a terminating '\0'. */
252b5132 9767
936e320b 9768char *
217aa764 9769_bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
252b5132 9770{
dc810e39 9771 char *dups;
a50b1753 9772 char *end = (char *) memchr (start, '\0', max);
dc810e39 9773 size_t len;
252b5132
RH
9774
9775 if (end == NULL)
9776 len = max;
9777 else
9778 len = end - start;
9779
a50b1753 9780 dups = (char *) bfd_alloc (abfd, len + 1);
dc810e39 9781 if (dups == NULL)
252b5132
RH
9782 return NULL;
9783
dc810e39
AM
9784 memcpy (dups, start, len);
9785 dups[len] = '\0';
252b5132 9786
dc810e39 9787 return dups;
252b5132
RH
9788}
9789
bb0082d6 9790#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
b34976b6 9791static bfd_boolean
217aa764 9792elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
252b5132 9793{
4a938328
MS
9794 if (note->descsz == sizeof (elfcore_psinfo_t))
9795 {
9796 elfcore_psinfo_t psinfo;
252b5132 9797
7ee38065 9798 memcpy (&psinfo, note->descdata, sizeof (psinfo));
252b5132 9799
335e41d4 9800#if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
228e534f 9801 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
335e41d4 9802#endif
228e534f 9803 elf_tdata (abfd)->core->program
936e320b
AM
9804 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9805 sizeof (psinfo.pr_fname));
252b5132 9806
228e534f 9807 elf_tdata (abfd)->core->command
936e320b
AM
9808 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9809 sizeof (psinfo.pr_psargs));
4a938328 9810 }
7ee38065 9811#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
4a938328
MS
9812 else if (note->descsz == sizeof (elfcore_psinfo32_t))
9813 {
9814 /* 64-bit host, 32-bit corefile */
9815 elfcore_psinfo32_t psinfo;
9816
7ee38065 9817 memcpy (&psinfo, note->descdata, sizeof (psinfo));
252b5132 9818
335e41d4 9819#if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
228e534f 9820 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
335e41d4 9821#endif
228e534f 9822 elf_tdata (abfd)->core->program
936e320b
AM
9823 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9824 sizeof (psinfo.pr_fname));
4a938328 9825
228e534f 9826 elf_tdata (abfd)->core->command
936e320b
AM
9827 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9828 sizeof (psinfo.pr_psargs));
4a938328
MS
9829 }
9830#endif
9831
9832 else
9833 {
9834 /* Fail - we don't know how to handle any other
9835 note size (ie. data object type). */
b34976b6 9836 return TRUE;
4a938328 9837 }
252b5132
RH
9838
9839 /* Note that for some reason, a spurious space is tacked
9840 onto the end of the args in some (at least one anyway)
c044fabd 9841 implementations, so strip it off if it exists. */
252b5132
RH
9842
9843 {
228e534f 9844 char *command = elf_tdata (abfd)->core->command;
252b5132
RH
9845 int n = strlen (command);
9846
9847 if (0 < n && command[n - 1] == ' ')
9848 command[n - 1] = '\0';
9849 }
9850
b34976b6 9851 return TRUE;
252b5132
RH
9852}
9853#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
9854
252b5132 9855#if defined (HAVE_PSTATUS_T)
b34976b6 9856static bfd_boolean
217aa764 9857elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
252b5132 9858{
f572a39d
AM
9859 if (note->descsz == sizeof (pstatus_t)
9860#if defined (HAVE_PXSTATUS_T)
9861 || note->descsz == sizeof (pxstatus_t)
9862#endif
9863 )
4a938328
MS
9864 {
9865 pstatus_t pstat;
252b5132 9866
4a938328 9867 memcpy (&pstat, note->descdata, sizeof (pstat));
252b5132 9868
228e534f 9869 elf_tdata (abfd)->core->pid = pstat.pr_pid;
4a938328 9870 }
7ee38065 9871#if defined (HAVE_PSTATUS32_T)
4a938328
MS
9872 else if (note->descsz == sizeof (pstatus32_t))
9873 {
9874 /* 64-bit host, 32-bit corefile */
9875 pstatus32_t pstat;
252b5132 9876
4a938328 9877 memcpy (&pstat, note->descdata, sizeof (pstat));
252b5132 9878
228e534f 9879 elf_tdata (abfd)->core->pid = pstat.pr_pid;
4a938328
MS
9880 }
9881#endif
252b5132
RH
9882 /* Could grab some more details from the "representative"
9883 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
c044fabd 9884 NT_LWPSTATUS note, presumably. */
252b5132 9885
b34976b6 9886 return TRUE;
252b5132
RH
9887}
9888#endif /* defined (HAVE_PSTATUS_T) */
9889
252b5132 9890#if defined (HAVE_LWPSTATUS_T)
b34976b6 9891static bfd_boolean
217aa764 9892elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
252b5132
RH
9893{
9894 lwpstatus_t lwpstat;
9895 char buf[100];
c044fabd 9896 char *name;
d4c88bbb 9897 size_t len;
c044fabd 9898 asection *sect;
252b5132 9899
f572a39d
AM
9900 if (note->descsz != sizeof (lwpstat)
9901#if defined (HAVE_LWPXSTATUS_T)
9902 && note->descsz != sizeof (lwpxstatus_t)
9903#endif
9904 )
b34976b6 9905 return TRUE;
252b5132
RH
9906
9907 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
9908
228e534f 9909 elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
a1504221
JB
9910 /* Do not overwrite the core signal if it has already been set by
9911 another thread. */
228e534f
AM
9912 if (elf_tdata (abfd)->core->signal == 0)
9913 elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
252b5132 9914
c044fabd 9915 /* Make a ".reg/999" section. */
252b5132
RH
9916
9917 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
d4c88bbb 9918 len = strlen (buf) + 1;
217aa764 9919 name = bfd_alloc (abfd, len);
252b5132 9920 if (name == NULL)
b34976b6 9921 return FALSE;
d4c88bbb 9922 memcpy (name, buf, len);
252b5132 9923
117ed4f8 9924 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
252b5132 9925 if (sect == NULL)
b34976b6 9926 return FALSE;
252b5132
RH
9927
9928#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
eea6121a 9929 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
252b5132
RH
9930 sect->filepos = note->descpos
9931 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
9932#endif
9933
9934#if defined (HAVE_LWPSTATUS_T_PR_REG)
eea6121a 9935 sect->size = sizeof (lwpstat.pr_reg);
252b5132
RH
9936 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
9937#endif
9938
252b5132
RH
9939 sect->alignment_power = 2;
9940
9941 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
b34976b6 9942 return FALSE;
252b5132
RH
9943
9944 /* Make a ".reg2/999" section */
9945
9946 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
d4c88bbb 9947 len = strlen (buf) + 1;
217aa764 9948 name = bfd_alloc (abfd, len);
252b5132 9949 if (name == NULL)
b34976b6 9950 return FALSE;
d4c88bbb 9951 memcpy (name, buf, len);
252b5132 9952
117ed4f8 9953 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
252b5132 9954 if (sect == NULL)
b34976b6 9955 return FALSE;
252b5132
RH
9956
9957#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
eea6121a 9958 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
252b5132
RH
9959 sect->filepos = note->descpos
9960 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
9961#endif
9962
9963#if defined (HAVE_LWPSTATUS_T_PR_FPREG)
eea6121a 9964 sect->size = sizeof (lwpstat.pr_fpreg);
252b5132
RH
9965 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
9966#endif
9967
252b5132
RH
9968 sect->alignment_power = 2;
9969
936e320b 9970 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
252b5132
RH
9971}
9972#endif /* defined (HAVE_LWPSTATUS_T) */
9973
b34976b6 9974static bfd_boolean
217aa764 9975elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
16e9c715
NC
9976{
9977 char buf[30];
c044fabd 9978 char *name;
d4c88bbb 9979 size_t len;
c044fabd 9980 asection *sect;
4a6636fb
PA
9981 int type;
9982 int is_active_thread;
9983 bfd_vma base_addr;
16e9c715 9984
4a6636fb 9985 if (note->descsz < 728)
b34976b6 9986 return TRUE;
16e9c715 9987
4a6636fb
PA
9988 if (! CONST_STRNEQ (note->namedata, "win32"))
9989 return TRUE;
9990
9991 type = bfd_get_32 (abfd, note->descdata);
c044fabd 9992
4a6636fb 9993 switch (type)
16e9c715 9994 {
4a6636fb 9995 case 1 /* NOTE_INFO_PROCESS */:
228e534f 9996 /* FIXME: need to add ->core->command. */
4a6636fb 9997 /* process_info.pid */
228e534f 9998 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 8);
4a6636fb 9999 /* process_info.signal */
228e534f 10000 elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 12);
c044fabd 10001 break;
16e9c715 10002
4a6636fb 10003 case 2 /* NOTE_INFO_THREAD */:
16e9c715 10004 /* Make a ".reg/999" section. */
4a6636fb
PA
10005 /* thread_info.tid */
10006 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
c044fabd 10007
d4c88bbb 10008 len = strlen (buf) + 1;
a50b1753 10009 name = (char *) bfd_alloc (abfd, len);
16e9c715 10010 if (name == NULL)
b34976b6 10011 return FALSE;
c044fabd 10012
d4c88bbb 10013 memcpy (name, buf, len);
16e9c715 10014
117ed4f8 10015 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
16e9c715 10016 if (sect == NULL)
b34976b6 10017 return FALSE;
c044fabd 10018
4a6636fb
PA
10019 /* sizeof (thread_info.thread_context) */
10020 sect->size = 716;
10021 /* offsetof (thread_info.thread_context) */
10022 sect->filepos = note->descpos + 12;
16e9c715
NC
10023 sect->alignment_power = 2;
10024
4a6636fb
PA
10025 /* thread_info.is_active_thread */
10026 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
10027
10028 if (is_active_thread)
16e9c715 10029 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
b34976b6 10030 return FALSE;
16e9c715
NC
10031 break;
10032
4a6636fb 10033 case 3 /* NOTE_INFO_MODULE */:
16e9c715 10034 /* Make a ".module/xxxxxxxx" section. */
4a6636fb
PA
10035 /* module_info.base_address */
10036 base_addr = bfd_get_32 (abfd, note->descdata + 4);
0af1713e 10037 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
c044fabd 10038
d4c88bbb 10039 len = strlen (buf) + 1;
a50b1753 10040 name = (char *) bfd_alloc (abfd, len);
16e9c715 10041 if (name == NULL)
b34976b6 10042 return FALSE;
c044fabd 10043
d4c88bbb 10044 memcpy (name, buf, len);
252b5132 10045
117ed4f8 10046 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
c044fabd 10047
16e9c715 10048 if (sect == NULL)
b34976b6 10049 return FALSE;
c044fabd 10050
eea6121a 10051 sect->size = note->descsz;
16e9c715 10052 sect->filepos = note->descpos;
16e9c715
NC
10053 sect->alignment_power = 2;
10054 break;
10055
10056 default:
b34976b6 10057 return TRUE;
16e9c715
NC
10058 }
10059
b34976b6 10060 return TRUE;
16e9c715 10061}
252b5132 10062
b34976b6 10063static bfd_boolean
217aa764 10064elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
252b5132 10065{
9c5bfbb7 10066 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
bb0082d6 10067
252b5132
RH
10068 switch (note->type)
10069 {
10070 default:
b34976b6 10071 return TRUE;
252b5132 10072
252b5132 10073 case NT_PRSTATUS:
bb0082d6
AM
10074 if (bed->elf_backend_grok_prstatus)
10075 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
b34976b6 10076 return TRUE;
bb0082d6 10077#if defined (HAVE_PRSTATUS_T)
252b5132 10078 return elfcore_grok_prstatus (abfd, note);
bb0082d6 10079#else
b34976b6 10080 return TRUE;
252b5132
RH
10081#endif
10082
10083#if defined (HAVE_PSTATUS_T)
10084 case NT_PSTATUS:
10085 return elfcore_grok_pstatus (abfd, note);
10086#endif
10087
10088#if defined (HAVE_LWPSTATUS_T)
10089 case NT_LWPSTATUS:
10090 return elfcore_grok_lwpstatus (abfd, note);
10091#endif
10092
10093 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
10094 return elfcore_grok_prfpreg (abfd, note);
10095
c044fabd 10096 case NT_WIN32PSTATUS:
16e9c715 10097 return elfcore_grok_win32pstatus (abfd, note);
16e9c715 10098
c044fabd 10099 case NT_PRXFPREG: /* Linux SSE extension */
e377ab71
MK
10100 if (note->namesz == 6
10101 && strcmp (note->namedata, "LINUX") == 0)
ff08c6bb
JB
10102 return elfcore_grok_prxfpreg (abfd, note);
10103 else
b34976b6 10104 return TRUE;
ff08c6bb 10105
4339cae0
L
10106 case NT_X86_XSTATE: /* Linux XSAVE extension */
10107 if (note->namesz == 6
10108 && strcmp (note->namedata, "LINUX") == 0)
10109 return elfcore_grok_xstatereg (abfd, note);
10110 else
10111 return TRUE;
10112
97753bd5
AM
10113 case NT_PPC_VMX:
10114 if (note->namesz == 6
10115 && strcmp (note->namedata, "LINUX") == 0)
10116 return elfcore_grok_ppc_vmx (abfd, note);
10117 else
10118 return TRUE;
10119
89eeb0bc
LM
10120 case NT_PPC_VSX:
10121 if (note->namesz == 6
07d6d2b8
AM
10122 && strcmp (note->namedata, "LINUX") == 0)
10123 return elfcore_grok_ppc_vsx (abfd, note);
89eeb0bc 10124 else
07d6d2b8 10125 return TRUE;
89eeb0bc 10126
cb2366c1
EBM
10127 case NT_PPC_TAR:
10128 if (note->namesz == 6
4b24dd1a
AM
10129 && strcmp (note->namedata, "LINUX") == 0)
10130 return elfcore_grok_ppc_tar (abfd, note);
cb2366c1 10131 else
4b24dd1a 10132 return TRUE;
cb2366c1
EBM
10133
10134 case NT_PPC_PPR:
10135 if (note->namesz == 6
4b24dd1a
AM
10136 && strcmp (note->namedata, "LINUX") == 0)
10137 return elfcore_grok_ppc_ppr (abfd, note);
cb2366c1 10138 else
4b24dd1a 10139 return TRUE;
cb2366c1
EBM
10140
10141 case NT_PPC_DSCR:
10142 if (note->namesz == 6
4b24dd1a
AM
10143 && strcmp (note->namedata, "LINUX") == 0)
10144 return elfcore_grok_ppc_dscr (abfd, note);
cb2366c1 10145 else
4b24dd1a 10146 return TRUE;
cb2366c1
EBM
10147
10148 case NT_PPC_EBB:
10149 if (note->namesz == 6
4b24dd1a
AM
10150 && strcmp (note->namedata, "LINUX") == 0)
10151 return elfcore_grok_ppc_ebb (abfd, note);
cb2366c1 10152 else
4b24dd1a 10153 return TRUE;
cb2366c1
EBM
10154
10155 case NT_PPC_PMU:
10156 if (note->namesz == 6
4b24dd1a
AM
10157 && strcmp (note->namedata, "LINUX") == 0)
10158 return elfcore_grok_ppc_pmu (abfd, note);
cb2366c1 10159 else
4b24dd1a 10160 return TRUE;
cb2366c1
EBM
10161
10162 case NT_PPC_TM_CGPR:
10163 if (note->namesz == 6
4b24dd1a
AM
10164 && strcmp (note->namedata, "LINUX") == 0)
10165 return elfcore_grok_ppc_tm_cgpr (abfd, note);
cb2366c1 10166 else
4b24dd1a 10167 return TRUE;
cb2366c1
EBM
10168
10169 case NT_PPC_TM_CFPR:
10170 if (note->namesz == 6
4b24dd1a
AM
10171 && strcmp (note->namedata, "LINUX") == 0)
10172 return elfcore_grok_ppc_tm_cfpr (abfd, note);
cb2366c1 10173 else
4b24dd1a 10174 return TRUE;
cb2366c1
EBM
10175
10176 case NT_PPC_TM_CVMX:
10177 if (note->namesz == 6
4b24dd1a
AM
10178 && strcmp (note->namedata, "LINUX") == 0)
10179 return elfcore_grok_ppc_tm_cvmx (abfd, note);
cb2366c1 10180 else
4b24dd1a 10181 return TRUE;
cb2366c1
EBM
10182
10183 case NT_PPC_TM_CVSX:
10184 if (note->namesz == 6
4b24dd1a
AM
10185 && strcmp (note->namedata, "LINUX") == 0)
10186 return elfcore_grok_ppc_tm_cvsx (abfd, note);
cb2366c1 10187 else
4b24dd1a 10188 return TRUE;
cb2366c1
EBM
10189
10190 case NT_PPC_TM_SPR:
10191 if (note->namesz == 6
4b24dd1a
AM
10192 && strcmp (note->namedata, "LINUX") == 0)
10193 return elfcore_grok_ppc_tm_spr (abfd, note);
cb2366c1 10194 else
4b24dd1a 10195 return TRUE;
cb2366c1
EBM
10196
10197 case NT_PPC_TM_CTAR:
10198 if (note->namesz == 6
4b24dd1a
AM
10199 && strcmp (note->namedata, "LINUX") == 0)
10200 return elfcore_grok_ppc_tm_ctar (abfd, note);
cb2366c1 10201 else
4b24dd1a 10202 return TRUE;
cb2366c1
EBM
10203
10204 case NT_PPC_TM_CPPR:
10205 if (note->namesz == 6
4b24dd1a
AM
10206 && strcmp (note->namedata, "LINUX") == 0)
10207 return elfcore_grok_ppc_tm_cppr (abfd, note);
cb2366c1 10208 else
4b24dd1a 10209 return TRUE;
cb2366c1
EBM
10210
10211 case NT_PPC_TM_CDSCR:
10212 if (note->namesz == 6
4b24dd1a
AM
10213 && strcmp (note->namedata, "LINUX") == 0)
10214 return elfcore_grok_ppc_tm_cdscr (abfd, note);
cb2366c1 10215 else
4b24dd1a 10216 return TRUE;
cb2366c1 10217
0675e188
UW
10218 case NT_S390_HIGH_GPRS:
10219 if (note->namesz == 6
07d6d2b8
AM
10220 && strcmp (note->namedata, "LINUX") == 0)
10221 return elfcore_grok_s390_high_gprs (abfd, note);
0675e188 10222 else
07d6d2b8 10223 return TRUE;
0675e188 10224
d7eeb400
MS
10225 case NT_S390_TIMER:
10226 if (note->namesz == 6
07d6d2b8
AM
10227 && strcmp (note->namedata, "LINUX") == 0)
10228 return elfcore_grok_s390_timer (abfd, note);
d7eeb400 10229 else
07d6d2b8 10230 return TRUE;
d7eeb400
MS
10231
10232 case NT_S390_TODCMP:
10233 if (note->namesz == 6
07d6d2b8
AM
10234 && strcmp (note->namedata, "LINUX") == 0)
10235 return elfcore_grok_s390_todcmp (abfd, note);
d7eeb400 10236 else
07d6d2b8 10237 return TRUE;
d7eeb400
MS
10238
10239 case NT_S390_TODPREG:
10240 if (note->namesz == 6
07d6d2b8
AM
10241 && strcmp (note->namedata, "LINUX") == 0)
10242 return elfcore_grok_s390_todpreg (abfd, note);
d7eeb400 10243 else
07d6d2b8 10244 return TRUE;
d7eeb400
MS
10245
10246 case NT_S390_CTRS:
10247 if (note->namesz == 6
07d6d2b8
AM
10248 && strcmp (note->namedata, "LINUX") == 0)
10249 return elfcore_grok_s390_ctrs (abfd, note);
d7eeb400 10250 else
07d6d2b8 10251 return TRUE;
d7eeb400
MS
10252
10253 case NT_S390_PREFIX:
10254 if (note->namesz == 6
07d6d2b8
AM
10255 && strcmp (note->namedata, "LINUX") == 0)
10256 return elfcore_grok_s390_prefix (abfd, note);
d7eeb400 10257 else
07d6d2b8 10258 return TRUE;
d7eeb400 10259
355b81d9
UW
10260 case NT_S390_LAST_BREAK:
10261 if (note->namesz == 6
07d6d2b8
AM
10262 && strcmp (note->namedata, "LINUX") == 0)
10263 return elfcore_grok_s390_last_break (abfd, note);
355b81d9 10264 else
07d6d2b8 10265 return TRUE;
355b81d9
UW
10266
10267 case NT_S390_SYSTEM_CALL:
10268 if (note->namesz == 6
07d6d2b8
AM
10269 && strcmp (note->namedata, "LINUX") == 0)
10270 return elfcore_grok_s390_system_call (abfd, note);
355b81d9 10271 else
07d6d2b8 10272 return TRUE;
355b81d9 10273
abb3f6cc
NC
10274 case NT_S390_TDB:
10275 if (note->namesz == 6
07d6d2b8
AM
10276 && strcmp (note->namedata, "LINUX") == 0)
10277 return elfcore_grok_s390_tdb (abfd, note);
abb3f6cc 10278 else
07d6d2b8 10279 return TRUE;
abb3f6cc 10280
4ef9f41a
AA
10281 case NT_S390_VXRS_LOW:
10282 if (note->namesz == 6
10283 && strcmp (note->namedata, "LINUX") == 0)
10284 return elfcore_grok_s390_vxrs_low (abfd, note);
10285 else
10286 return TRUE;
10287
10288 case NT_S390_VXRS_HIGH:
10289 if (note->namesz == 6
10290 && strcmp (note->namedata, "LINUX") == 0)
10291 return elfcore_grok_s390_vxrs_high (abfd, note);
10292 else
10293 return TRUE;
10294
88ab90e8
AA
10295 case NT_S390_GS_CB:
10296 if (note->namesz == 6
10297 && strcmp (note->namedata, "LINUX") == 0)
8fe09d74 10298 return elfcore_grok_s390_gs_cb (abfd, note);
88ab90e8
AA
10299 else
10300 return TRUE;
10301
10302 case NT_S390_GS_BC:
10303 if (note->namesz == 6
10304 && strcmp (note->namedata, "LINUX") == 0)
8fe09d74 10305 return elfcore_grok_s390_gs_bc (abfd, note);
88ab90e8
AA
10306 else
10307 return TRUE;
10308
faa9a424
UW
10309 case NT_ARM_VFP:
10310 if (note->namesz == 6
10311 && strcmp (note->namedata, "LINUX") == 0)
10312 return elfcore_grok_arm_vfp (abfd, note);
10313 else
10314 return TRUE;
10315
652451f8
YZ
10316 case NT_ARM_TLS:
10317 if (note->namesz == 6
10318 && strcmp (note->namedata, "LINUX") == 0)
10319 return elfcore_grok_aarch_tls (abfd, note);
10320 else
10321 return TRUE;
10322
10323 case NT_ARM_HW_BREAK:
10324 if (note->namesz == 6
10325 && strcmp (note->namedata, "LINUX") == 0)
10326 return elfcore_grok_aarch_hw_break (abfd, note);
10327 else
10328 return TRUE;
10329
10330 case NT_ARM_HW_WATCH:
10331 if (note->namesz == 6
10332 && strcmp (note->namedata, "LINUX") == 0)
10333 return elfcore_grok_aarch_hw_watch (abfd, note);
10334 else
10335 return TRUE;
10336
ad1cc4e4
AH
10337 case NT_ARM_SVE:
10338 if (note->namesz == 6
10339 && strcmp (note->namedata, "LINUX") == 0)
10340 return elfcore_grok_aarch_sve (abfd, note);
10341 else
10342 return TRUE;
10343
e6c3b5bf
AH
10344 case NT_ARM_PAC_MASK:
10345 if (note->namesz == 6
10346 && strcmp (note->namedata, "LINUX") == 0)
10347 return elfcore_grok_aarch_pauth (abfd, note);
10348 else
10349 return TRUE;
10350
252b5132
RH
10351 case NT_PRPSINFO:
10352 case NT_PSINFO:
bb0082d6
AM
10353 if (bed->elf_backend_grok_psinfo)
10354 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
b34976b6 10355 return TRUE;
bb0082d6 10356#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
252b5132 10357 return elfcore_grok_psinfo (abfd, note);
bb0082d6 10358#else
b34976b6 10359 return TRUE;
252b5132 10360#endif
3333a7c3
RM
10361
10362 case NT_AUXV:
58e07198 10363 return elfcore_make_auxv_note_section (abfd, note, 0);
9015683b 10364
451b7c33
TT
10365 case NT_FILE:
10366 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
10367 note);
10368
9015683b
TT
10369 case NT_SIGINFO:
10370 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
10371 note);
5b2c414d 10372
252b5132
RH
10373 }
10374}
10375
718175fa
JK
10376static bfd_boolean
10377elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
10378{
c74f7d1c 10379 struct bfd_build_id* build_id;
30e8ee25
AM
10380
10381 if (note->descsz == 0)
10382 return FALSE;
10383
c74f7d1c
JT
10384 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
10385 if (build_id == NULL)
718175fa
JK
10386 return FALSE;
10387
c74f7d1c
JT
10388 build_id->size = note->descsz;
10389 memcpy (build_id->data, note->descdata, note->descsz);
10390 abfd->build_id = build_id;
718175fa
JK
10391
10392 return TRUE;
10393}
10394
10395static bfd_boolean
10396elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
10397{
10398 switch (note->type)
10399 {
10400 default:
10401 return TRUE;
10402
46bed679
L
10403 case NT_GNU_PROPERTY_TYPE_0:
10404 return _bfd_elf_parse_gnu_properties (abfd, note);
10405
718175fa
JK
10406 case NT_GNU_BUILD_ID:
10407 return elfobj_grok_gnu_build_id (abfd, note);
10408 }
10409}
10410
e21e5835
NC
10411static bfd_boolean
10412elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
10413{
10414 struct sdt_note *cur =
7a6e0d89
AM
10415 (struct sdt_note *) bfd_alloc (abfd,
10416 sizeof (struct sdt_note) + note->descsz);
e21e5835
NC
10417
10418 cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
10419 cur->size = (bfd_size_type) note->descsz;
10420 memcpy (cur->data, note->descdata, note->descsz);
10421
10422 elf_tdata (abfd)->sdt_note_head = cur;
10423
10424 return TRUE;
10425}
10426
10427static bfd_boolean
10428elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
10429{
10430 switch (note->type)
10431 {
10432 case NT_STAPSDT:
10433 return elfobj_grok_stapsdt_note_1 (abfd, note);
10434
10435 default:
10436 return TRUE;
10437 }
10438}
10439
aa1ed4a9
JB
10440static bfd_boolean
10441elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
10442{
10443 size_t offset;
10444
b5430a3c 10445 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
aa1ed4a9 10446 {
b5430a3c 10447 case ELFCLASS32:
0064d223
JB
10448 if (note->descsz < 108)
10449 return FALSE;
aa1ed4a9
JB
10450 break;
10451
b5430a3c 10452 case ELFCLASS64:
0064d223
JB
10453 if (note->descsz < 120)
10454 return FALSE;
aa1ed4a9
JB
10455 break;
10456
10457 default:
10458 return FALSE;
10459 }
10460
0064d223
JB
10461 /* Check for version 1 in pr_version. */
10462 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10463 return FALSE;
80a04378 10464
0064d223
JB
10465 offset = 4;
10466
10467 /* Skip over pr_psinfosz. */
b5430a3c 10468 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
0064d223
JB
10469 offset += 4;
10470 else
10471 {
10472 offset += 4; /* Padding before pr_psinfosz. */
10473 offset += 8;
10474 }
10475
aa1ed4a9
JB
10476 /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
10477 elf_tdata (abfd)->core->program
10478 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
10479 offset += 17;
10480
10481 /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
10482 elf_tdata (abfd)->core->command
10483 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
0064d223
JB
10484 offset += 81;
10485
10486 /* Padding before pr_pid. */
10487 offset += 2;
10488
10489 /* The pr_pid field was added in version "1a". */
10490 if (note->descsz < offset + 4)
10491 return TRUE;
10492
10493 elf_tdata (abfd)->core->pid
10494 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
aa1ed4a9
JB
10495
10496 return TRUE;
10497}
10498
10499static bfd_boolean
10500elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
10501{
10502 size_t offset;
10503 size_t size;
24d3e51b 10504 size_t min_size;
aa1ed4a9 10505
24d3e51b
NC
10506 /* Compute offset of pr_getregsz, skipping over pr_statussz.
10507 Also compute minimum size of this note. */
b5430a3c 10508 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
aa1ed4a9 10509 {
b5430a3c 10510 case ELFCLASS32:
24d3e51b
NC
10511 offset = 4 + 4;
10512 min_size = offset + (4 * 2) + 4 + 4 + 4;
aa1ed4a9
JB
10513 break;
10514
b5430a3c 10515 case ELFCLASS64:
24d3e51b
NC
10516 offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */
10517 min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
aa1ed4a9
JB
10518 break;
10519
10520 default:
10521 return FALSE;
10522 }
10523
24d3e51b
NC
10524 if (note->descsz < min_size)
10525 return FALSE;
10526
10527 /* Check for version 1 in pr_version. */
10528 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10529 return FALSE;
aa1ed4a9 10530
24d3e51b
NC
10531 /* Extract size of pr_reg from pr_gregsetsz. */
10532 /* Skip over pr_gregsetsz and pr_fpregsetsz. */
b5430a3c 10533 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
24d3e51b
NC
10534 {
10535 size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10536 offset += 4 * 2;
10537 }
b5430a3c 10538 else
24d3e51b
NC
10539 {
10540 size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
10541 offset += 8 * 2;
10542 }
aa1ed4a9 10543
24d3e51b 10544 /* Skip over pr_osreldate. */
aa1ed4a9
JB
10545 offset += 4;
10546
24d3e51b 10547 /* Read signal from pr_cursig. */
aa1ed4a9
JB
10548 if (elf_tdata (abfd)->core->signal == 0)
10549 elf_tdata (abfd)->core->signal
10550 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10551 offset += 4;
10552
24d3e51b 10553 /* Read TID from pr_pid. */
aa1ed4a9
JB
10554 elf_tdata (abfd)->core->lwpid
10555 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10556 offset += 4;
10557
24d3e51b 10558 /* Padding before pr_reg. */
b5430a3c 10559 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
aa1ed4a9
JB
10560 offset += 4;
10561
24d3e51b
NC
10562 /* Make sure that there is enough data remaining in the note. */
10563 if ((note->descsz - offset) < size)
10564 return FALSE;
10565
aa1ed4a9
JB
10566 /* Make a ".reg/999" section and a ".reg" section. */
10567 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
10568 size, note->descpos + offset);
10569}
10570
10571static bfd_boolean
10572elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
10573{
544c67cd
JB
10574 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10575
aa1ed4a9
JB
10576 switch (note->type)
10577 {
10578 case NT_PRSTATUS:
544c67cd
JB
10579 if (bed->elf_backend_grok_freebsd_prstatus)
10580 if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
10581 return TRUE;
aa1ed4a9
JB
10582 return elfcore_grok_freebsd_prstatus (abfd, note);
10583
10584 case NT_FPREGSET:
10585 return elfcore_grok_prfpreg (abfd, note);
10586
10587 case NT_PRPSINFO:
10588 return elfcore_grok_freebsd_psinfo (abfd, note);
10589
10590 case NT_FREEBSD_THRMISC:
10591 if (note->namesz == 8)
10592 return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
10593 else
10594 return TRUE;
10595
ddb2bbcf
JB
10596 case NT_FREEBSD_PROCSTAT_PROC:
10597 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
10598 note);
10599
10600 case NT_FREEBSD_PROCSTAT_FILES:
10601 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
10602 note);
10603
10604 case NT_FREEBSD_PROCSTAT_VMMAP:
10605 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
10606 note);
10607
3350c5f5 10608 case NT_FREEBSD_PROCSTAT_AUXV:
58e07198 10609 return elfcore_make_auxv_note_section (abfd, note, 4);
3350c5f5 10610
aa1ed4a9
JB
10611 case NT_X86_XSTATE:
10612 if (note->namesz == 8)
10613 return elfcore_grok_xstatereg (abfd, note);
10614 else
10615 return TRUE;
10616
e6f3b9c3
JB
10617 case NT_FREEBSD_PTLWPINFO:
10618 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
10619 note);
10620
6d5be5d6
JB
10621 case NT_ARM_VFP:
10622 return elfcore_grok_arm_vfp (abfd, note);
10623
aa1ed4a9
JB
10624 default:
10625 return TRUE;
10626 }
10627}
10628
b34976b6 10629static bfd_boolean
217aa764 10630elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
50b2bdb7
AM
10631{
10632 char *cp;
10633
10634 cp = strchr (note->namedata, '@');
10635 if (cp != NULL)
10636 {
d2b64500 10637 *lwpidp = atoi(cp + 1);
b34976b6 10638 return TRUE;
50b2bdb7 10639 }
b34976b6 10640 return FALSE;
50b2bdb7
AM
10641}
10642
b34976b6 10643static bfd_boolean
217aa764 10644elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
50b2bdb7 10645{
80a04378
NC
10646 if (note->descsz <= 0x7c + 31)
10647 return FALSE;
10648
50b2bdb7 10649 /* Signal number at offset 0x08. */
228e534f 10650 elf_tdata (abfd)->core->signal
50b2bdb7
AM
10651 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10652
10653 /* Process ID at offset 0x50. */
228e534f 10654 elf_tdata (abfd)->core->pid
50b2bdb7
AM
10655 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
10656
10657 /* Command name at 0x7c (max 32 bytes, including nul). */
228e534f 10658 elf_tdata (abfd)->core->command
50b2bdb7
AM
10659 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
10660
7720ba9f
MK
10661 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
10662 note);
50b2bdb7
AM
10663}
10664
b34976b6 10665static bfd_boolean
217aa764 10666elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
50b2bdb7
AM
10667{
10668 int lwp;
10669
10670 if (elfcore_netbsd_get_lwpid (note, &lwp))
228e534f 10671 elf_tdata (abfd)->core->lwpid = lwp;
50b2bdb7 10672
58e07198 10673 switch (note->type)
50b2bdb7 10674 {
58e07198 10675 case NT_NETBSDCORE_PROCINFO:
50b2bdb7 10676 /* NetBSD-specific core "procinfo". Note that we expect to
08a40648
AM
10677 find this note before any of the others, which is fine,
10678 since the kernel writes this note out first when it
10679 creates a core file. */
50b2bdb7 10680 return elfcore_grok_netbsd_procinfo (abfd, note);
58e07198
CZ
10681#ifdef NT_NETBSDCORE_AUXV
10682 case NT_NETBSDCORE_AUXV:
10683 /* NetBSD-specific Elf Auxiliary Vector data. */
10684 return elfcore_make_auxv_note_section (abfd, note, 4);
10685#endif
10686 default:
10687 break;
50b2bdb7
AM
10688 }
10689
58e07198 10690 /* As of March 2017 there are no other machine-independent notes
b4db1224
JT
10691 defined for NetBSD core files. If the note type is less
10692 than the start of the machine-dependent note types, we don't
10693 understand it. */
47d9a591 10694
b4db1224 10695 if (note->type < NT_NETBSDCORE_FIRSTMACH)
b34976b6 10696 return TRUE;
50b2bdb7
AM
10697
10698
10699 switch (bfd_get_arch (abfd))
10700 {
08a40648
AM
10701 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
10702 PT_GETFPREGS == mach+2. */
50b2bdb7
AM
10703
10704 case bfd_arch_alpha:
10705 case bfd_arch_sparc:
10706 switch (note->type)
08a40648
AM
10707 {
10708 case NT_NETBSDCORE_FIRSTMACH+0:
10709 return elfcore_make_note_pseudosection (abfd, ".reg", note);
50b2bdb7 10710
08a40648
AM
10711 case NT_NETBSDCORE_FIRSTMACH+2:
10712 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
50b2bdb7 10713
08a40648
AM
10714 default:
10715 return TRUE;
10716 }
50b2bdb7 10717
58e07198
CZ
10718 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
10719 There's also old PT___GETREGS40 == mach + 1 for old reg
10720 structure which lacks GBR. */
10721
10722 case bfd_arch_sh:
10723 switch (note->type)
10724 {
10725 case NT_NETBSDCORE_FIRSTMACH+3:
10726 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10727
10728 case NT_NETBSDCORE_FIRSTMACH+5:
10729 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10730
10731 default:
10732 return TRUE;
10733 }
10734
08a40648
AM
10735 /* On all other arch's, PT_GETREGS == mach+1 and
10736 PT_GETFPREGS == mach+3. */
50b2bdb7
AM
10737
10738 default:
10739 switch (note->type)
08a40648
AM
10740 {
10741 case NT_NETBSDCORE_FIRSTMACH+1:
10742 return elfcore_make_note_pseudosection (abfd, ".reg", note);
50b2bdb7 10743
08a40648
AM
10744 case NT_NETBSDCORE_FIRSTMACH+3:
10745 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
50b2bdb7 10746
08a40648
AM
10747 default:
10748 return TRUE;
10749 }
50b2bdb7
AM
10750 }
10751 /* NOTREACHED */
10752}
10753
67cc5033
MK
10754static bfd_boolean
10755elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
10756{
80a04378
NC
10757 if (note->descsz <= 0x48 + 31)
10758 return FALSE;
10759
67cc5033 10760 /* Signal number at offset 0x08. */
228e534f 10761 elf_tdata (abfd)->core->signal
67cc5033
MK
10762 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10763
10764 /* Process ID at offset 0x20. */
228e534f 10765 elf_tdata (abfd)->core->pid
67cc5033
MK
10766 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
10767
10768 /* Command name at 0x48 (max 32 bytes, including nul). */
228e534f 10769 elf_tdata (abfd)->core->command
67cc5033
MK
10770 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
10771
10772 return TRUE;
10773}
10774
10775static bfd_boolean
10776elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
10777{
10778 if (note->type == NT_OPENBSD_PROCINFO)
10779 return elfcore_grok_openbsd_procinfo (abfd, note);
10780
10781 if (note->type == NT_OPENBSD_REGS)
10782 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10783
10784 if (note->type == NT_OPENBSD_FPREGS)
10785 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10786
10787 if (note->type == NT_OPENBSD_XFPREGS)
10788 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
10789
10790 if (note->type == NT_OPENBSD_AUXV)
58e07198 10791 return elfcore_make_auxv_note_section (abfd, note, 0);
67cc5033
MK
10792
10793 if (note->type == NT_OPENBSD_WCOOKIE)
10794 {
10795 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
10796 SEC_HAS_CONTENTS);
10797
10798 if (sect == NULL)
10799 return FALSE;
10800 sect->size = note->descsz;
10801 sect->filepos = note->descpos;
10802 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
10803
10804 return TRUE;
10805 }
10806
10807 return TRUE;
10808}
10809
07c6e936 10810static bfd_boolean
d3fd4074 10811elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
07c6e936
NC
10812{
10813 void *ddata = note->descdata;
10814 char buf[100];
10815 char *name;
10816 asection *sect;
f8843e87
AM
10817 short sig;
10818 unsigned flags;
07c6e936 10819
80a04378
NC
10820 if (note->descsz < 16)
10821 return FALSE;
10822
07c6e936 10823 /* nto_procfs_status 'pid' field is at offset 0. */
228e534f 10824 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
07c6e936 10825
f8843e87
AM
10826 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
10827 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
10828
10829 /* nto_procfs_status 'flags' field is at offset 8. */
10830 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
07c6e936
NC
10831
10832 /* nto_procfs_status 'what' field is at offset 14. */
f8843e87
AM
10833 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
10834 {
228e534f
AM
10835 elf_tdata (abfd)->core->signal = sig;
10836 elf_tdata (abfd)->core->lwpid = *tid;
f8843e87 10837 }
07c6e936 10838
f8843e87
AM
10839 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
10840 do not come from signals so we make sure we set the current
10841 thread just in case. */
10842 if (flags & 0x00000080)
228e534f 10843 elf_tdata (abfd)->core->lwpid = *tid;
07c6e936
NC
10844
10845 /* Make a ".qnx_core_status/%d" section. */
d3fd4074 10846 sprintf (buf, ".qnx_core_status/%ld", *tid);
07c6e936 10847
a50b1753 10848 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
07c6e936
NC
10849 if (name == NULL)
10850 return FALSE;
10851 strcpy (name, buf);
10852
117ed4f8 10853 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
07c6e936
NC
10854 if (sect == NULL)
10855 return FALSE;
10856
07d6d2b8
AM
10857 sect->size = note->descsz;
10858 sect->filepos = note->descpos;
07c6e936
NC
10859 sect->alignment_power = 2;
10860
10861 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
10862}
10863
10864static bfd_boolean
d69f560c
KW
10865elfcore_grok_nto_regs (bfd *abfd,
10866 Elf_Internal_Note *note,
d3fd4074 10867 long tid,
d69f560c 10868 char *base)
07c6e936
NC
10869{
10870 char buf[100];
10871 char *name;
10872 asection *sect;
10873
d69f560c 10874 /* Make a "(base)/%d" section. */
d3fd4074 10875 sprintf (buf, "%s/%ld", base, tid);
07c6e936 10876
a50b1753 10877 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
07c6e936
NC
10878 if (name == NULL)
10879 return FALSE;
10880 strcpy (name, buf);
10881
117ed4f8 10882 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
07c6e936
NC
10883 if (sect == NULL)
10884 return FALSE;
10885
07d6d2b8
AM
10886 sect->size = note->descsz;
10887 sect->filepos = note->descpos;
07c6e936
NC
10888 sect->alignment_power = 2;
10889
f8843e87 10890 /* This is the current thread. */
228e534f 10891 if (elf_tdata (abfd)->core->lwpid == tid)
d69f560c 10892 return elfcore_maybe_make_sect (abfd, base, sect);
f8843e87
AM
10893
10894 return TRUE;
07c6e936
NC
10895}
10896
10897#define BFD_QNT_CORE_INFO 7
10898#define BFD_QNT_CORE_STATUS 8
10899#define BFD_QNT_CORE_GREG 9
10900#define BFD_QNT_CORE_FPREG 10
10901
10902static bfd_boolean
217aa764 10903elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
07c6e936
NC
10904{
10905 /* Every GREG section has a STATUS section before it. Store the
811072d8 10906 tid from the previous call to pass down to the next gregs
07c6e936 10907 function. */
d3fd4074 10908 static long tid = 1;
07c6e936
NC
10909
10910 switch (note->type)
10911 {
d69f560c
KW
10912 case BFD_QNT_CORE_INFO:
10913 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
10914 case BFD_QNT_CORE_STATUS:
10915 return elfcore_grok_nto_status (abfd, note, &tid);
10916 case BFD_QNT_CORE_GREG:
10917 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
10918 case BFD_QNT_CORE_FPREG:
10919 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
10920 default:
10921 return TRUE;
07c6e936
NC
10922 }
10923}
10924
b15fa79e
AM
10925static bfd_boolean
10926elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
10927{
10928 char *name;
10929 asection *sect;
10930 size_t len;
10931
10932 /* Use note name as section name. */
10933 len = note->namesz;
a50b1753 10934 name = (char *) bfd_alloc (abfd, len);
b15fa79e
AM
10935 if (name == NULL)
10936 return FALSE;
10937 memcpy (name, note->namedata, len);
10938 name[len - 1] = '\0';
10939
10940 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10941 if (sect == NULL)
10942 return FALSE;
10943
07d6d2b8
AM
10944 sect->size = note->descsz;
10945 sect->filepos = note->descpos;
b15fa79e
AM
10946 sect->alignment_power = 1;
10947
10948 return TRUE;
10949}
10950
7c76fa91
MS
10951/* Function: elfcore_write_note
10952
47d9a591 10953 Inputs:
a39f3346 10954 buffer to hold note, and current size of buffer
7c76fa91
MS
10955 name of note
10956 type of note
10957 data for note
10958 size of data for note
10959
a39f3346
AM
10960 Writes note to end of buffer. ELF64 notes are written exactly as
10961 for ELF32, despite the current (as of 2006) ELF gabi specifying
10962 that they ought to have 8-byte namesz and descsz field, and have
10963 8-byte alignment. Other writers, eg. Linux kernel, do the same.
10964
7c76fa91 10965 Return:
a39f3346 10966 Pointer to realloc'd buffer, *BUFSIZ updated. */
7c76fa91
MS
10967
10968char *
a39f3346 10969elfcore_write_note (bfd *abfd,
217aa764 10970 char *buf,
a39f3346 10971 int *bufsiz,
217aa764 10972 const char *name,
a39f3346 10973 int type,
217aa764 10974 const void *input,
a39f3346 10975 int size)
7c76fa91
MS
10976{
10977 Elf_External_Note *xnp;
d4c88bbb 10978 size_t namesz;
d4c88bbb 10979 size_t newspace;
a39f3346 10980 char *dest;
7c76fa91 10981
d4c88bbb 10982 namesz = 0;
d4c88bbb 10983 if (name != NULL)
a39f3346 10984 namesz = strlen (name) + 1;
d4c88bbb 10985
a39f3346 10986 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
d4c88bbb 10987
a50b1753 10988 buf = (char *) realloc (buf, *bufsiz + newspace);
14b1c01e
AM
10989 if (buf == NULL)
10990 return buf;
a39f3346 10991 dest = buf + *bufsiz;
7c76fa91
MS
10992 *bufsiz += newspace;
10993 xnp = (Elf_External_Note *) dest;
10994 H_PUT_32 (abfd, namesz, xnp->namesz);
10995 H_PUT_32 (abfd, size, xnp->descsz);
10996 H_PUT_32 (abfd, type, xnp->type);
d4c88bbb
AM
10997 dest = xnp->name;
10998 if (name != NULL)
10999 {
11000 memcpy (dest, name, namesz);
11001 dest += namesz;
a39f3346 11002 while (namesz & 3)
d4c88bbb
AM
11003 {
11004 *dest++ = '\0';
a39f3346 11005 ++namesz;
d4c88bbb
AM
11006 }
11007 }
11008 memcpy (dest, input, size);
a39f3346
AM
11009 dest += size;
11010 while (size & 3)
11011 {
11012 *dest++ = '\0';
11013 ++size;
11014 }
11015 return buf;
7c76fa91
MS
11016}
11017
602f1657
AM
11018/* gcc-8 warns (*) on all the strncpy calls in this function about
11019 possible string truncation. The "truncation" is not a bug. We
11020 have an external representation of structs with fields that are not
11021 necessarily NULL terminated and corresponding internal
11022 representation fields that are one larger so that they can always
11023 be NULL terminated.
11024 gcc versions between 4.2 and 4.6 do not allow pragma control of
11025 diagnostics inside functions, giving a hard error if you try to use
11026 the finer control available with later versions.
11027 gcc prior to 4.2 warns about diagnostic push and pop.
11028 gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11029 unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11030 (*) Depending on your system header files! */
d99b4b92 11031#if GCC_VERSION >= 8000
602f1657
AM
11032# pragma GCC diagnostic push
11033# pragma GCC diagnostic ignored "-Wstringop-truncation"
d99b4b92 11034#endif
7c76fa91 11035char *
217aa764
AM
11036elfcore_write_prpsinfo (bfd *abfd,
11037 char *buf,
11038 int *bufsiz,
11039 const char *fname,
11040 const char *psargs)
7c76fa91 11041{
183e98be
AM
11042 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11043
11044 if (bed->elf_backend_write_core_note != NULL)
11045 {
11046 char *ret;
11047 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11048 NT_PRPSINFO, fname, psargs);
11049 if (ret != NULL)
11050 return ret;
11051 }
7c76fa91 11052
1f20dca5 11053#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
602f1657 11054# if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
183e98be
AM
11055 if (bed->s->elfclass == ELFCLASS32)
11056 {
602f1657 11057# if defined (HAVE_PSINFO32_T)
183e98be
AM
11058 psinfo32_t data;
11059 int note_type = NT_PSINFO;
602f1657 11060# else
183e98be
AM
11061 prpsinfo32_t data;
11062 int note_type = NT_PRPSINFO;
602f1657 11063# endif
183e98be
AM
11064
11065 memset (&data, 0, sizeof (data));
11066 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11067 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11068 return elfcore_write_note (abfd, buf, bufsiz,
1f20dca5 11069 "CORE", note_type, &data, sizeof (data));
183e98be
AM
11070 }
11071 else
602f1657 11072# endif
183e98be 11073 {
602f1657 11074# if defined (HAVE_PSINFO_T)
183e98be
AM
11075 psinfo_t data;
11076 int note_type = NT_PSINFO;
602f1657 11077# else
183e98be
AM
11078 prpsinfo_t data;
11079 int note_type = NT_PRPSINFO;
602f1657 11080# endif
7c76fa91 11081
183e98be
AM
11082 memset (&data, 0, sizeof (data));
11083 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11084 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11085 return elfcore_write_note (abfd, buf, bufsiz,
1f20dca5 11086 "CORE", note_type, &data, sizeof (data));
183e98be 11087 }
7c76fa91
MS
11088#endif /* PSINFO_T or PRPSINFO_T */
11089
1f20dca5
UW
11090 free (buf);
11091 return NULL;
11092}
d99b4b92 11093#if GCC_VERSION >= 8000
602f1657 11094# pragma GCC diagnostic pop
d99b4b92 11095#endif
1f20dca5 11096
70a38d42
SDJ
11097char *
11098elfcore_write_linux_prpsinfo32
11099 (bfd *abfd, char *buf, int *bufsiz,
11100 const struct elf_internal_linux_prpsinfo *prpsinfo)
11101{
a2f63b2e
MR
11102 if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11103 {
11104 struct elf_external_linux_prpsinfo32_ugid16 data;
11105
11106 swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11107 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11108 &data, sizeof (data));
11109 }
11110 else
11111 {
11112 struct elf_external_linux_prpsinfo32_ugid32 data;
70a38d42 11113
a2f63b2e
MR
11114 swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11115 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11116 &data, sizeof (data));
11117 }
70a38d42
SDJ
11118}
11119
11120char *
11121elfcore_write_linux_prpsinfo64
11122 (bfd *abfd, char *buf, int *bufsiz,
11123 const struct elf_internal_linux_prpsinfo *prpsinfo)
11124{
3c9a7b0d
MR
11125 if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11126 {
11127 struct elf_external_linux_prpsinfo64_ugid16 data;
11128
11129 swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11130 return elfcore_write_note (abfd, buf, bufsiz,
11131 "CORE", NT_PRPSINFO, &data, sizeof (data));
11132 }
11133 else
11134 {
11135 struct elf_external_linux_prpsinfo64_ugid32 data;
70a38d42 11136
3c9a7b0d
MR
11137 swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11138 return elfcore_write_note (abfd, buf, bufsiz,
11139 "CORE", NT_PRPSINFO, &data, sizeof (data));
11140 }
70a38d42
SDJ
11141}
11142
7c76fa91 11143char *
217aa764
AM
11144elfcore_write_prstatus (bfd *abfd,
11145 char *buf,
11146 int *bufsiz,
11147 long pid,
11148 int cursig,
11149 const void *gregs)
7c76fa91 11150{
183e98be 11151 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7c76fa91 11152
183e98be
AM
11153 if (bed->elf_backend_write_core_note != NULL)
11154 {
11155 char *ret;
11156 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11157 NT_PRSTATUS,
11158 pid, cursig, gregs);
11159 if (ret != NULL)
11160 return ret;
11161 }
11162
1f20dca5 11163#if defined (HAVE_PRSTATUS_T)
183e98be
AM
11164#if defined (HAVE_PRSTATUS32_T)
11165 if (bed->s->elfclass == ELFCLASS32)
11166 {
11167 prstatus32_t prstat;
11168
11169 memset (&prstat, 0, sizeof (prstat));
11170 prstat.pr_pid = pid;
11171 prstat.pr_cursig = cursig;
11172 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
1f20dca5 11173 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
183e98be
AM
11174 NT_PRSTATUS, &prstat, sizeof (prstat));
11175 }
11176 else
11177#endif
11178 {
11179 prstatus_t prstat;
11180
11181 memset (&prstat, 0, sizeof (prstat));
11182 prstat.pr_pid = pid;
11183 prstat.pr_cursig = cursig;
11184 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
1f20dca5 11185 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
183e98be
AM
11186 NT_PRSTATUS, &prstat, sizeof (prstat));
11187 }
7c76fa91
MS
11188#endif /* HAVE_PRSTATUS_T */
11189
1f20dca5
UW
11190 free (buf);
11191 return NULL;
11192}
11193
51316059
MS
11194#if defined (HAVE_LWPSTATUS_T)
11195char *
217aa764
AM
11196elfcore_write_lwpstatus (bfd *abfd,
11197 char *buf,
11198 int *bufsiz,
11199 long pid,
11200 int cursig,
11201 const void *gregs)
51316059
MS
11202{
11203 lwpstatus_t lwpstat;
183e98be 11204 const char *note_name = "CORE";
51316059
MS
11205
11206 memset (&lwpstat, 0, sizeof (lwpstat));
11207 lwpstat.pr_lwpid = pid >> 16;
11208 lwpstat.pr_cursig = cursig;
11209#if defined (HAVE_LWPSTATUS_T_PR_REG)
d1e8523e 11210 memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
51316059
MS
11211#elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11212#if !defined(gregs)
11213 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11214 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11215#else
11216 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11217 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11218#endif
11219#endif
47d9a591 11220 return elfcore_write_note (abfd, buf, bufsiz, note_name,
51316059
MS
11221 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11222}
11223#endif /* HAVE_LWPSTATUS_T */
11224
7c76fa91
MS
11225#if defined (HAVE_PSTATUS_T)
11226char *
217aa764
AM
11227elfcore_write_pstatus (bfd *abfd,
11228 char *buf,
11229 int *bufsiz,
11230 long pid,
6c10990d
NC
11231 int cursig ATTRIBUTE_UNUSED,
11232 const void *gregs ATTRIBUTE_UNUSED)
7c76fa91 11233{
183e98be
AM
11234 const char *note_name = "CORE";
11235#if defined (HAVE_PSTATUS32_T)
11236 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7c76fa91 11237
183e98be
AM
11238 if (bed->s->elfclass == ELFCLASS32)
11239 {
11240 pstatus32_t pstat;
11241
11242 memset (&pstat, 0, sizeof (pstat));
11243 pstat.pr_pid = pid & 0xffff;
11244 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11245 NT_PSTATUS, &pstat, sizeof (pstat));
11246 return buf;
11247 }
11248 else
11249#endif
11250 {
11251 pstatus_t pstat;
11252
11253 memset (&pstat, 0, sizeof (pstat));
11254 pstat.pr_pid = pid & 0xffff;
11255 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11256 NT_PSTATUS, &pstat, sizeof (pstat));
11257 return buf;
11258 }
7c76fa91
MS
11259}
11260#endif /* HAVE_PSTATUS_T */
11261
11262char *
217aa764
AM
11263elfcore_write_prfpreg (bfd *abfd,
11264 char *buf,
11265 int *bufsiz,
11266 const void *fpregs,
11267 int size)
7c76fa91 11268{
183e98be 11269 const char *note_name = "CORE";
47d9a591 11270 return elfcore_write_note (abfd, buf, bufsiz,
7c76fa91
MS
11271 note_name, NT_FPREGSET, fpregs, size);
11272}
11273
11274char *
217aa764
AM
11275elfcore_write_prxfpreg (bfd *abfd,
11276 char *buf,
11277 int *bufsiz,
11278 const void *xfpregs,
11279 int size)
7c76fa91
MS
11280{
11281 char *note_name = "LINUX";
47d9a591 11282 return elfcore_write_note (abfd, buf, bufsiz,
7c76fa91
MS
11283 note_name, NT_PRXFPREG, xfpregs, size);
11284}
11285
4339cae0
L
11286char *
11287elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11288 const void *xfpregs, int size)
11289{
97de3545
JB
11290 char *note_name;
11291 if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11292 note_name = "FreeBSD";
11293 else
11294 note_name = "LINUX";
4339cae0
L
11295 return elfcore_write_note (abfd, buf, bufsiz,
11296 note_name, NT_X86_XSTATE, xfpregs, size);
11297}
11298
97753bd5
AM
11299char *
11300elfcore_write_ppc_vmx (bfd *abfd,
11301 char *buf,
11302 int *bufsiz,
11303 const void *ppc_vmx,
11304 int size)
11305{
11306 char *note_name = "LINUX";
11307 return elfcore_write_note (abfd, buf, bufsiz,
11308 note_name, NT_PPC_VMX, ppc_vmx, size);
11309}
11310
89eeb0bc
LM
11311char *
11312elfcore_write_ppc_vsx (bfd *abfd,
07d6d2b8
AM
11313 char *buf,
11314 int *bufsiz,
11315 const void *ppc_vsx,
11316 int size)
89eeb0bc
LM
11317{
11318 char *note_name = "LINUX";
11319 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11320 note_name, NT_PPC_VSX, ppc_vsx, size);
89eeb0bc
LM
11321}
11322
cb2366c1
EBM
11323char *
11324elfcore_write_ppc_tar (bfd *abfd,
4b24dd1a
AM
11325 char *buf,
11326 int *bufsiz,
11327 const void *ppc_tar,
11328 int size)
cb2366c1
EBM
11329{
11330 char *note_name = "LINUX";
11331 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11332 note_name, NT_PPC_TAR, ppc_tar, size);
cb2366c1
EBM
11333}
11334
11335char *
11336elfcore_write_ppc_ppr (bfd *abfd,
4b24dd1a
AM
11337 char *buf,
11338 int *bufsiz,
11339 const void *ppc_ppr,
11340 int size)
cb2366c1
EBM
11341{
11342 char *note_name = "LINUX";
11343 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11344 note_name, NT_PPC_PPR, ppc_ppr, size);
cb2366c1
EBM
11345}
11346
11347char *
11348elfcore_write_ppc_dscr (bfd *abfd,
4b24dd1a
AM
11349 char *buf,
11350 int *bufsiz,
11351 const void *ppc_dscr,
11352 int size)
cb2366c1
EBM
11353{
11354 char *note_name = "LINUX";
11355 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11356 note_name, NT_PPC_DSCR, ppc_dscr, size);
cb2366c1
EBM
11357}
11358
11359char *
11360elfcore_write_ppc_ebb (bfd *abfd,
4b24dd1a
AM
11361 char *buf,
11362 int *bufsiz,
11363 const void *ppc_ebb,
11364 int size)
cb2366c1
EBM
11365{
11366 char *note_name = "LINUX";
11367 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11368 note_name, NT_PPC_EBB, ppc_ebb, size);
cb2366c1
EBM
11369}
11370
11371char *
11372elfcore_write_ppc_pmu (bfd *abfd,
4b24dd1a
AM
11373 char *buf,
11374 int *bufsiz,
11375 const void *ppc_pmu,
11376 int size)
cb2366c1
EBM
11377{
11378 char *note_name = "LINUX";
11379 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11380 note_name, NT_PPC_PMU, ppc_pmu, size);
cb2366c1
EBM
11381}
11382
11383char *
11384elfcore_write_ppc_tm_cgpr (bfd *abfd,
4b24dd1a
AM
11385 char *buf,
11386 int *bufsiz,
11387 const void *ppc_tm_cgpr,
11388 int size)
cb2366c1
EBM
11389{
11390 char *note_name = "LINUX";
11391 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11392 note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
cb2366c1
EBM
11393}
11394
11395char *
11396elfcore_write_ppc_tm_cfpr (bfd *abfd,
4b24dd1a
AM
11397 char *buf,
11398 int *bufsiz,
11399 const void *ppc_tm_cfpr,
11400 int size)
cb2366c1
EBM
11401{
11402 char *note_name = "LINUX";
11403 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11404 note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
cb2366c1
EBM
11405}
11406
11407char *
11408elfcore_write_ppc_tm_cvmx (bfd *abfd,
4b24dd1a
AM
11409 char *buf,
11410 int *bufsiz,
11411 const void *ppc_tm_cvmx,
11412 int size)
cb2366c1
EBM
11413{
11414 char *note_name = "LINUX";
11415 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11416 note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
cb2366c1
EBM
11417}
11418
11419char *
11420elfcore_write_ppc_tm_cvsx (bfd *abfd,
4b24dd1a
AM
11421 char *buf,
11422 int *bufsiz,
11423 const void *ppc_tm_cvsx,
11424 int size)
cb2366c1
EBM
11425{
11426 char *note_name = "LINUX";
11427 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11428 note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
cb2366c1
EBM
11429}
11430
11431char *
11432elfcore_write_ppc_tm_spr (bfd *abfd,
4b24dd1a
AM
11433 char *buf,
11434 int *bufsiz,
11435 const void *ppc_tm_spr,
11436 int size)
cb2366c1
EBM
11437{
11438 char *note_name = "LINUX";
11439 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11440 note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
cb2366c1
EBM
11441}
11442
11443char *
11444elfcore_write_ppc_tm_ctar (bfd *abfd,
4b24dd1a
AM
11445 char *buf,
11446 int *bufsiz,
11447 const void *ppc_tm_ctar,
11448 int size)
cb2366c1
EBM
11449{
11450 char *note_name = "LINUX";
11451 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11452 note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
cb2366c1
EBM
11453}
11454
11455char *
11456elfcore_write_ppc_tm_cppr (bfd *abfd,
4b24dd1a
AM
11457 char *buf,
11458 int *bufsiz,
11459 const void *ppc_tm_cppr,
11460 int size)
cb2366c1
EBM
11461{
11462 char *note_name = "LINUX";
11463 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11464 note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
cb2366c1
EBM
11465}
11466
11467char *
11468elfcore_write_ppc_tm_cdscr (bfd *abfd,
4b24dd1a
AM
11469 char *buf,
11470 int *bufsiz,
11471 const void *ppc_tm_cdscr,
11472 int size)
cb2366c1
EBM
11473{
11474 char *note_name = "LINUX";
11475 return elfcore_write_note (abfd, buf, bufsiz,
4b24dd1a 11476 note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
cb2366c1
EBM
11477}
11478
0675e188
UW
11479static char *
11480elfcore_write_s390_high_gprs (bfd *abfd,
11481 char *buf,
11482 int *bufsiz,
11483 const void *s390_high_gprs,
11484 int size)
11485{
11486 char *note_name = "LINUX";
11487 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11488 note_name, NT_S390_HIGH_GPRS,
0675e188
UW
11489 s390_high_gprs, size);
11490}
11491
d7eeb400
MS
11492char *
11493elfcore_write_s390_timer (bfd *abfd,
07d6d2b8
AM
11494 char *buf,
11495 int *bufsiz,
11496 const void *s390_timer,
11497 int size)
d7eeb400
MS
11498{
11499 char *note_name = "LINUX";
11500 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11501 note_name, NT_S390_TIMER, s390_timer, size);
d7eeb400
MS
11502}
11503
11504char *
11505elfcore_write_s390_todcmp (bfd *abfd,
07d6d2b8
AM
11506 char *buf,
11507 int *bufsiz,
11508 const void *s390_todcmp,
11509 int size)
d7eeb400
MS
11510{
11511 char *note_name = "LINUX";
11512 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11513 note_name, NT_S390_TODCMP, s390_todcmp, size);
d7eeb400
MS
11514}
11515
11516char *
11517elfcore_write_s390_todpreg (bfd *abfd,
07d6d2b8
AM
11518 char *buf,
11519 int *bufsiz,
11520 const void *s390_todpreg,
11521 int size)
d7eeb400
MS
11522{
11523 char *note_name = "LINUX";
11524 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11525 note_name, NT_S390_TODPREG, s390_todpreg, size);
d7eeb400
MS
11526}
11527
11528char *
11529elfcore_write_s390_ctrs (bfd *abfd,
07d6d2b8
AM
11530 char *buf,
11531 int *bufsiz,
11532 const void *s390_ctrs,
11533 int size)
d7eeb400
MS
11534{
11535 char *note_name = "LINUX";
11536 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11537 note_name, NT_S390_CTRS, s390_ctrs, size);
d7eeb400
MS
11538}
11539
11540char *
11541elfcore_write_s390_prefix (bfd *abfd,
07d6d2b8
AM
11542 char *buf,
11543 int *bufsiz,
11544 const void *s390_prefix,
11545 int size)
d7eeb400
MS
11546{
11547 char *note_name = "LINUX";
11548 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11549 note_name, NT_S390_PREFIX, s390_prefix, size);
d7eeb400
MS
11550}
11551
355b81d9
UW
11552char *
11553elfcore_write_s390_last_break (bfd *abfd,
11554 char *buf,
11555 int *bufsiz,
11556 const void *s390_last_break,
11557 int size)
11558{
11559 char *note_name = "LINUX";
11560 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11561 note_name, NT_S390_LAST_BREAK,
355b81d9
UW
11562 s390_last_break, size);
11563}
11564
11565char *
11566elfcore_write_s390_system_call (bfd *abfd,
11567 char *buf,
11568 int *bufsiz,
11569 const void *s390_system_call,
11570 int size)
11571{
11572 char *note_name = "LINUX";
11573 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11574 note_name, NT_S390_SYSTEM_CALL,
355b81d9
UW
11575 s390_system_call, size);
11576}
11577
abb3f6cc
NC
11578char *
11579elfcore_write_s390_tdb (bfd *abfd,
11580 char *buf,
11581 int *bufsiz,
11582 const void *s390_tdb,
11583 int size)
11584{
11585 char *note_name = "LINUX";
11586 return elfcore_write_note (abfd, buf, bufsiz,
07d6d2b8 11587 note_name, NT_S390_TDB, s390_tdb, size);
abb3f6cc
NC
11588}
11589
4ef9f41a
AA
11590char *
11591elfcore_write_s390_vxrs_low (bfd *abfd,
11592 char *buf,
11593 int *bufsiz,
11594 const void *s390_vxrs_low,
11595 int size)
11596{
11597 char *note_name = "LINUX";
11598 return elfcore_write_note (abfd, buf, bufsiz,
11599 note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
11600}
11601
11602char *
11603elfcore_write_s390_vxrs_high (bfd *abfd,
11604 char *buf,
11605 int *bufsiz,
11606 const void *s390_vxrs_high,
11607 int size)
11608{
11609 char *note_name = "LINUX";
11610 return elfcore_write_note (abfd, buf, bufsiz,
11611 note_name, NT_S390_VXRS_HIGH,
11612 s390_vxrs_high, size);
11613}
11614
88ab90e8
AA
11615char *
11616elfcore_write_s390_gs_cb (bfd *abfd,
11617 char *buf,
11618 int *bufsiz,
11619 const void *s390_gs_cb,
11620 int size)
11621{
11622 char *note_name = "LINUX";
11623 return elfcore_write_note (abfd, buf, bufsiz,
11624 note_name, NT_S390_GS_CB,
11625 s390_gs_cb, size);
11626}
11627
11628char *
11629elfcore_write_s390_gs_bc (bfd *abfd,
11630 char *buf,
11631 int *bufsiz,
11632 const void *s390_gs_bc,
11633 int size)
11634{
11635 char *note_name = "LINUX";
11636 return elfcore_write_note (abfd, buf, bufsiz,
11637 note_name, NT_S390_GS_BC,
11638 s390_gs_bc, size);
11639}
11640
faa9a424
UW
11641char *
11642elfcore_write_arm_vfp (bfd *abfd,
11643 char *buf,
11644 int *bufsiz,
11645 const void *arm_vfp,
11646 int size)
11647{
11648 char *note_name = "LINUX";
11649 return elfcore_write_note (abfd, buf, bufsiz,
11650 note_name, NT_ARM_VFP, arm_vfp, size);
11651}
11652
652451f8
YZ
11653char *
11654elfcore_write_aarch_tls (bfd *abfd,
11655 char *buf,
11656 int *bufsiz,
11657 const void *aarch_tls,
11658 int size)
11659{
11660 char *note_name = "LINUX";
11661 return elfcore_write_note (abfd, buf, bufsiz,
11662 note_name, NT_ARM_TLS, aarch_tls, size);
11663}
11664
11665char *
11666elfcore_write_aarch_hw_break (bfd *abfd,
11667 char *buf,
11668 int *bufsiz,
11669 const void *aarch_hw_break,
11670 int size)
11671{
11672 char *note_name = "LINUX";
11673 return elfcore_write_note (abfd, buf, bufsiz,
11674 note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
11675}
11676
11677char *
11678elfcore_write_aarch_hw_watch (bfd *abfd,
11679 char *buf,
11680 int *bufsiz,
11681 const void *aarch_hw_watch,
11682 int size)
11683{
11684 char *note_name = "LINUX";
11685 return elfcore_write_note (abfd, buf, bufsiz,
11686 note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
11687}
11688
ad1cc4e4
AH
11689char *
11690elfcore_write_aarch_sve (bfd *abfd,
11691 char *buf,
11692 int *bufsiz,
11693 const void *aarch_sve,
11694 int size)
11695{
11696 char *note_name = "LINUX";
11697 return elfcore_write_note (abfd, buf, bufsiz,
11698 note_name, NT_ARM_SVE, aarch_sve, size);
11699}
11700
e6c3b5bf
AH
11701char *
11702elfcore_write_aarch_pauth (bfd *abfd,
11703 char *buf,
11704 int *bufsiz,
11705 const void *aarch_pauth,
11706 int size)
11707{
11708 char *note_name = "LINUX";
11709 return elfcore_write_note (abfd, buf, bufsiz,
11710 note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
11711}
11712
bb864ac1
CES
11713char *
11714elfcore_write_register_note (bfd *abfd,
11715 char *buf,
11716 int *bufsiz,
11717 const char *section,
11718 const void *data,
11719 int size)
11720{
11721 if (strcmp (section, ".reg2") == 0)
11722 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
11723 if (strcmp (section, ".reg-xfp") == 0)
11724 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
4339cae0
L
11725 if (strcmp (section, ".reg-xstate") == 0)
11726 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
bb864ac1
CES
11727 if (strcmp (section, ".reg-ppc-vmx") == 0)
11728 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
89eeb0bc
LM
11729 if (strcmp (section, ".reg-ppc-vsx") == 0)
11730 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
cb2366c1
EBM
11731 if (strcmp (section, ".reg-ppc-tar") == 0)
11732 return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
11733 if (strcmp (section, ".reg-ppc-ppr") == 0)
11734 return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
11735 if (strcmp (section, ".reg-ppc-dscr") == 0)
11736 return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
11737 if (strcmp (section, ".reg-ppc-ebb") == 0)
11738 return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
11739 if (strcmp (section, ".reg-ppc-pmu") == 0)
11740 return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
11741 if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
11742 return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
11743 if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
11744 return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
11745 if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
11746 return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
11747 if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
11748 return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
11749 if (strcmp (section, ".reg-ppc-tm-spr") == 0)
11750 return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
11751 if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
11752 return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
11753 if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
11754 return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
11755 if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
11756 return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
0675e188
UW
11757 if (strcmp (section, ".reg-s390-high-gprs") == 0)
11758 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
d7eeb400
MS
11759 if (strcmp (section, ".reg-s390-timer") == 0)
11760 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
11761 if (strcmp (section, ".reg-s390-todcmp") == 0)
11762 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
11763 if (strcmp (section, ".reg-s390-todpreg") == 0)
11764 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
11765 if (strcmp (section, ".reg-s390-ctrs") == 0)
11766 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
11767 if (strcmp (section, ".reg-s390-prefix") == 0)
11768 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
355b81d9
UW
11769 if (strcmp (section, ".reg-s390-last-break") == 0)
11770 return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
11771 if (strcmp (section, ".reg-s390-system-call") == 0)
11772 return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
abb3f6cc
NC
11773 if (strcmp (section, ".reg-s390-tdb") == 0)
11774 return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
4ef9f41a
AA
11775 if (strcmp (section, ".reg-s390-vxrs-low") == 0)
11776 return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
11777 if (strcmp (section, ".reg-s390-vxrs-high") == 0)
11778 return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
88ab90e8
AA
11779 if (strcmp (section, ".reg-s390-gs-cb") == 0)
11780 return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
11781 if (strcmp (section, ".reg-s390-gs-bc") == 0)
11782 return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
faa9a424
UW
11783 if (strcmp (section, ".reg-arm-vfp") == 0)
11784 return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
652451f8
YZ
11785 if (strcmp (section, ".reg-aarch-tls") == 0)
11786 return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
11787 if (strcmp (section, ".reg-aarch-hw-break") == 0)
11788 return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
11789 if (strcmp (section, ".reg-aarch-hw-watch") == 0)
11790 return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
ad1cc4e4
AH
11791 if (strcmp (section, ".reg-aarch-sve") == 0)
11792 return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
e6c3b5bf
AH
11793 if (strcmp (section, ".reg-aarch-pauth") == 0)
11794 return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
bb864ac1
CES
11795 return NULL;
11796}
11797
b34976b6 11798static bfd_boolean
276da9b3
L
11799elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
11800 size_t align)
252b5132 11801{
c044fabd 11802 char *p;
252b5132 11803
276da9b3
L
11804 /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
11805 gABI specifies that PT_NOTE alignment should be aligned to 4
11806 bytes for 32-bit objects and to 8 bytes for 64-bit objects. If
11807 align is less than 4, we use 4 byte alignment. */
11808 if (align < 4)
11809 align = 4;
ef135d43
NC
11810 if (align != 4 && align != 8)
11811 return FALSE;
276da9b3 11812
252b5132
RH
11813 p = buf;
11814 while (p < buf + size)
11815 {
c044fabd 11816 Elf_External_Note *xnp = (Elf_External_Note *) p;
252b5132
RH
11817 Elf_Internal_Note in;
11818
baea7ef1
AM
11819 if (offsetof (Elf_External_Note, name) > buf - p + size)
11820 return FALSE;
11821
dc810e39 11822 in.type = H_GET_32 (abfd, xnp->type);
252b5132 11823
dc810e39 11824 in.namesz = H_GET_32 (abfd, xnp->namesz);
252b5132 11825 in.namedata = xnp->name;
baea7ef1
AM
11826 if (in.namesz > buf - in.namedata + size)
11827 return FALSE;
252b5132 11828
dc810e39 11829 in.descsz = H_GET_32 (abfd, xnp->descsz);
276da9b3 11830 in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
252b5132 11831 in.descpos = offset + (in.descdata - buf);
baea7ef1
AM
11832 if (in.descsz != 0
11833 && (in.descdata >= buf + size
11834 || in.descsz > buf - in.descdata + size))
11835 return FALSE;
252b5132 11836
718175fa 11837 switch (bfd_get_format (abfd))
07d6d2b8 11838 {
718175fa
JK
11839 default:
11840 return TRUE;
11841
11842 case bfd_core:
f64e188b 11843 {
8acbedd6 11844#define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
f64e188b 11845 struct
718175fa 11846 {
f64e188b 11847 const char * string;
8acbedd6 11848 size_t len;
f64e188b 11849 bfd_boolean (* func)(bfd *, Elf_Internal_Note *);
718175fa 11850 }
f64e188b 11851 grokers[] =
b15fa79e 11852 {
8acbedd6 11853 GROKER_ELEMENT ("", elfcore_grok_note),
aa1ed4a9 11854 GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
8acbedd6
KS
11855 GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
11856 GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note),
11857 GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
864619bb
KS
11858 GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
11859 GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note)
f64e188b 11860 };
8acbedd6 11861#undef GROKER_ELEMENT
f64e188b
NC
11862 int i;
11863
11864 for (i = ARRAY_SIZE (grokers); i--;)
8acbedd6
KS
11865 {
11866 if (in.namesz >= grokers[i].len
11867 && strncmp (in.namedata, grokers[i].string,
11868 grokers[i].len) == 0)
11869 {
11870 if (! grokers[i].func (abfd, & in))
11871 return FALSE;
11872 break;
11873 }
11874 }
f64e188b
NC
11875 break;
11876 }
718175fa
JK
11877
11878 case bfd_object:
11879 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
11880 {
11881 if (! elfobj_grok_gnu_note (abfd, &in))
11882 return FALSE;
11883 }
e21e5835
NC
11884 else if (in.namesz == sizeof "stapsdt"
11885 && strcmp (in.namedata, "stapsdt") == 0)
11886 {
11887 if (! elfobj_grok_stapsdt_note (abfd, &in))
11888 return FALSE;
11889 }
718175fa 11890 break;
08a40648 11891 }
252b5132 11892
276da9b3 11893 p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
252b5132
RH
11894 }
11895
718175fa
JK
11896 return TRUE;
11897}
11898
864619bb 11899bfd_boolean
276da9b3
L
11900elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
11901 size_t align)
718175fa
JK
11902{
11903 char *buf;
11904
957e1fc1 11905 if (size == 0 || (size + 1) == 0)
718175fa
JK
11906 return TRUE;
11907
11908 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
11909 return FALSE;
11910
f64e188b 11911 buf = (char *) bfd_malloc (size + 1);
718175fa
JK
11912 if (buf == NULL)
11913 return FALSE;
11914
f64e188b
NC
11915 /* PR 17512: file: ec08f814
11916 0-termintate the buffer so that string searches will not overflow. */
11917 buf[size] = 0;
11918
718175fa 11919 if (bfd_bread (buf, size, abfd) != size
276da9b3 11920 || !elf_parse_notes (abfd, buf, size, offset, align))
718175fa
JK
11921 {
11922 free (buf);
11923 return FALSE;
11924 }
11925
252b5132 11926 free (buf);
b34976b6 11927 return TRUE;
252b5132 11928}
98d8431c
JB
11929\f
11930/* Providing external access to the ELF program header table. */
11931
11932/* Return an upper bound on the number of bytes required to store a
11933 copy of ABFD's program header table entries. Return -1 if an error
11934 occurs; bfd_get_error will return an appropriate code. */
c044fabd 11935
98d8431c 11936long
217aa764 11937bfd_get_elf_phdr_upper_bound (bfd *abfd)
98d8431c
JB
11938{
11939 if (abfd->xvec->flavour != bfd_target_elf_flavour)
11940 {
11941 bfd_set_error (bfd_error_wrong_format);
11942 return -1;
11943 }
11944
936e320b 11945 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
98d8431c
JB
11946}
11947
98d8431c
JB
11948/* Copy ABFD's program header table entries to *PHDRS. The entries
11949 will be stored as an array of Elf_Internal_Phdr structures, as
11950 defined in include/elf/internal.h. To find out how large the
11951 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
11952
11953 Return the number of program header table entries read, or -1 if an
11954 error occurs; bfd_get_error will return an appropriate code. */
c044fabd 11955
98d8431c 11956int
217aa764 11957bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
98d8431c
JB
11958{
11959 int num_phdrs;
11960
11961 if (abfd->xvec->flavour != bfd_target_elf_flavour)
11962 {
11963 bfd_set_error (bfd_error_wrong_format);
11964 return -1;
11965 }
11966
11967 num_phdrs = elf_elfheader (abfd)->e_phnum;
01bcaf63
TT
11968 if (num_phdrs != 0)
11969 memcpy (phdrs, elf_tdata (abfd)->phdr,
11970 num_phdrs * sizeof (Elf_Internal_Phdr));
98d8431c
JB
11971
11972 return num_phdrs;
11973}
ae4221d7 11974
db6751f2 11975enum elf_reloc_type_class
7e612e98
AM
11976_bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
11977 const asection *rel_sec ATTRIBUTE_UNUSED,
11978 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
db6751f2
JJ
11979{
11980 return reloc_class_normal;
11981}
f8df10f4 11982
47d9a591 11983/* For RELA architectures, return the relocation value for a
f8df10f4
JJ
11984 relocation against a local symbol. */
11985
11986bfd_vma
217aa764
AM
11987_bfd_elf_rela_local_sym (bfd *abfd,
11988 Elf_Internal_Sym *sym,
8517fae7 11989 asection **psec,
217aa764 11990 Elf_Internal_Rela *rel)
f8df10f4 11991{
8517fae7 11992 asection *sec = *psec;
f8df10f4
JJ
11993 bfd_vma relocation;
11994
6835821b
AM
11995 relocation = (sec->output_section->vma
11996 + sec->output_offset
11997 + sym->st_value);
f8df10f4 11998 if ((sec->flags & SEC_MERGE)
c629eae0 11999 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
dbaa2011 12000 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
f8df10f4 12001 {
f8df10f4 12002 rel->r_addend =
8517fae7 12003 _bfd_merged_section_offset (abfd, psec,
65765700 12004 elf_section_data (sec)->sec_info,
753731ee
AM
12005 sym->st_value + rel->r_addend);
12006 if (sec != *psec)
12007 {
12008 /* If we have changed the section, and our original section is
12009 marked with SEC_EXCLUDE, it means that the original
12010 SEC_MERGE section has been completely subsumed in some
12011 other SEC_MERGE section. In this case, we need to leave
12012 some info around for --emit-relocs. */
12013 if ((sec->flags & SEC_EXCLUDE) != 0)
12014 sec->kept_section = *psec;
12015 sec = *psec;
12016 }
8517fae7
AM
12017 rel->r_addend -= relocation;
12018 rel->r_addend += sec->output_section->vma + sec->output_offset;
f8df10f4
JJ
12019 }
12020 return relocation;
12021}
c629eae0
JJ
12022
12023bfd_vma
217aa764
AM
12024_bfd_elf_rel_local_sym (bfd *abfd,
12025 Elf_Internal_Sym *sym,
12026 asection **psec,
12027 bfd_vma addend)
47d9a591 12028{
c629eae0
JJ
12029 asection *sec = *psec;
12030
6835821b 12031 if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
c629eae0
JJ
12032 return sym->st_value + addend;
12033
12034 return _bfd_merged_section_offset (abfd, psec,
65765700 12035 elf_section_data (sec)->sec_info,
753731ee 12036 sym->st_value + addend);
c629eae0
JJ
12037}
12038
37b01f6a
DG
12039/* Adjust an address within a section. Given OFFSET within SEC, return
12040 the new offset within the section, based upon changes made to the
12041 section. Returns -1 if the offset is now invalid.
12042 The offset (in abnd out) is in target sized bytes, however big a
12043 byte may be. */
12044
c629eae0 12045bfd_vma
217aa764 12046_bfd_elf_section_offset (bfd *abfd,
92e4ec35 12047 struct bfd_link_info *info,
217aa764
AM
12048 asection *sec,
12049 bfd_vma offset)
c629eae0 12050{
68bfbfcc 12051 switch (sec->sec_info_type)
65765700 12052 {
dbaa2011 12053 case SEC_INFO_TYPE_STABS:
eea6121a
AM
12054 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12055 offset);
dbaa2011 12056 case SEC_INFO_TYPE_EH_FRAME:
92e4ec35 12057 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
37b01f6a 12058
65765700 12059 default:
310fd250
L
12060 if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12061 {
37b01f6a 12062 /* Reverse the offset. */
310fd250
L
12063 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12064 bfd_size_type address_size = bed->s->arch_size / 8;
37b01f6a
DG
12065
12066 /* address_size and sec->size are in octets. Convert
12067 to bytes before subtracting the original offset. */
61826503 12068 offset = ((sec->size - address_size)
bb294208 12069 / bfd_octets_per_byte (abfd, sec) - offset);
310fd250 12070 }
65765700
JJ
12071 return offset;
12072 }
c629eae0 12073}
3333a7c3
RM
12074\f
12075/* Create a new BFD as if by bfd_openr. Rather than opening a file,
12076 reconstruct an ELF file by reading the segments out of remote memory
12077 based on the ELF file header at EHDR_VMA and the ELF program headers it
12078 points to. If not null, *LOADBASEP is filled in with the difference
12079 between the VMAs from which the segments were read, and the VMAs the
12080 file headers (and hence BFD's idea of each section's VMA) put them at.
12081
12082 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12083 remote memory at target address VMA into the local buffer at MYADDR; it
12084 should return zero on success or an `errno' code on failure. TEMPL must
12085 be a BFD for an ELF target with the word size and byte order found in
12086 the remote memory. */
12087
12088bfd *
217aa764
AM
12089bfd_elf_bfd_from_remote_memory
12090 (bfd *templ,
12091 bfd_vma ehdr_vma,
f0a5d95a 12092 bfd_size_type size,
217aa764 12093 bfd_vma *loadbasep,
fe78531d 12094 int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
3333a7c3
RM
12095{
12096 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
5979d6b6 12097 (templ, ehdr_vma, size, loadbasep, target_read_memory);
3333a7c3 12098}
4c45e5c9
JJ
12099\f
12100long
c9727e01
AM
12101_bfd_elf_get_synthetic_symtab (bfd *abfd,
12102 long symcount ATTRIBUTE_UNUSED,
12103 asymbol **syms ATTRIBUTE_UNUSED,
8615f3f2 12104 long dynsymcount,
c9727e01
AM
12105 asymbol **dynsyms,
12106 asymbol **ret)
4c45e5c9
JJ
12107{
12108 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12109 asection *relplt;
12110 asymbol *s;
12111 const char *relplt_name;
12112 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
12113 arelent *p;
12114 long count, i, n;
12115 size_t size;
12116 Elf_Internal_Shdr *hdr;
12117 char *names;
12118 asection *plt;
12119
8615f3f2
AM
12120 *ret = NULL;
12121
90e3cdf2
JJ
12122 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12123 return 0;
12124
8615f3f2
AM
12125 if (dynsymcount <= 0)
12126 return 0;
12127
4c45e5c9
JJ
12128 if (!bed->plt_sym_val)
12129 return 0;
12130
12131 relplt_name = bed->relplt_name;
12132 if (relplt_name == NULL)
d35fd659 12133 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
4c45e5c9
JJ
12134 relplt = bfd_get_section_by_name (abfd, relplt_name);
12135 if (relplt == NULL)
12136 return 0;
12137
12138 hdr = &elf_section_data (relplt)->this_hdr;
12139 if (hdr->sh_link != elf_dynsymtab (abfd)
12140 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12141 return 0;
12142
12143 plt = bfd_get_section_by_name (abfd, ".plt");
12144 if (plt == NULL)
12145 return 0;
12146
12147 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
c9727e01 12148 if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
4c45e5c9
JJ
12149 return -1;
12150
eea6121a 12151 count = relplt->size / hdr->sh_entsize;
4c45e5c9
JJ
12152 size = count * sizeof (asymbol);
12153 p = relplt->relocation;
cb53bf42 12154 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
041de40d
AM
12155 {
12156 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12157 if (p->addend != 0)
12158 {
12159#ifdef BFD64
12160 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12161#else
12162 size += sizeof ("+0x") - 1 + 8;
12163#endif
12164 }
12165 }
4c45e5c9 12166
a50b1753 12167 s = *ret = (asymbol *) bfd_malloc (size);
4c45e5c9
JJ
12168 if (s == NULL)
12169 return -1;
12170
12171 names = (char *) (s + count);
12172 p = relplt->relocation;
12173 n = 0;
cb53bf42 12174 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
4c45e5c9
JJ
12175 {
12176 size_t len;
12177 bfd_vma addr;
12178
12179 addr = bed->plt_sym_val (i, plt, p);
12180 if (addr == (bfd_vma) -1)
12181 continue;
12182
12183 *s = **p->sym_ptr_ptr;
65a7a66f
AM
12184 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
12185 we are defining a symbol, ensure one of them is set. */
12186 if ((s->flags & BSF_LOCAL) == 0)
12187 s->flags |= BSF_GLOBAL;
6ba2a415 12188 s->flags |= BSF_SYNTHETIC;
4c45e5c9
JJ
12189 s->section = plt;
12190 s->value = addr - plt->vma;
12191 s->name = names;
8f39ba8e 12192 s->udata.p = NULL;
4c45e5c9
JJ
12193 len = strlen ((*p->sym_ptr_ptr)->name);
12194 memcpy (names, (*p->sym_ptr_ptr)->name, len);
12195 names += len;
041de40d
AM
12196 if (p->addend != 0)
12197 {
1d770845 12198 char buf[30], *a;
d324f6d6 12199
041de40d
AM
12200 memcpy (names, "+0x", sizeof ("+0x") - 1);
12201 names += sizeof ("+0x") - 1;
1d770845
L
12202 bfd_sprintf_vma (abfd, buf, p->addend);
12203 for (a = buf; *a == '0'; ++a)
12204 ;
12205 len = strlen (a);
12206 memcpy (names, a, len);
12207 names += len;
041de40d 12208 }
4c45e5c9
JJ
12209 memcpy (names, "@plt", sizeof ("@plt"));
12210 names += sizeof ("@plt");
8f39ba8e 12211 ++s, ++n;
4c45e5c9
JJ
12212 }
12213
12214 return n;
12215}
3d7f7666 12216
821e6ff6
AM
12217/* It is only used by x86-64 so far.
12218 ??? This repeats *COM* id of zero. sec->id is supposed to be unique,
7eacd66b
AM
12219 but current usage would allow all of _bfd_std_section to be zero. */
12220static const asymbol lcomm_sym
12221 = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
3b22753a 12222asection _bfd_elf_large_com_section
7eacd66b 12223 = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
821e6ff6 12224 "LARGE_COMMON", 0, SEC_IS_COMMON);
ecca9871 12225
cc364be6
AM
12226bfd_boolean
12227_bfd_elf_final_write_processing (bfd *abfd)
06f44071
AM
12228{
12229 Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */
d1036acb
L
12230
12231 i_ehdrp = elf_elfheader (abfd);
12232
06f44071
AM
12233 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12234 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
d8045f23 12235
df3a023b
AM
12236 /* Set the osabi field to ELFOSABI_GNU if the binary contains
12237 SHF_GNU_MBIND sections or symbols of STT_GNU_IFUNC type or
12238 STB_GNU_UNIQUE binding. */
cc364be6
AM
12239 if (elf_tdata (abfd)->has_gnu_osabi != 0)
12240 {
12241 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12242 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
12243 else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
12244 && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
12245 {
12246 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
12247 _bfd_error_handler (_("GNU_MBIND section is unsupported"));
12248 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
12249 _bfd_error_handler (_("symbol type STT_GNU_IFUNC is unsupported"));
12250 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
12251 _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is unsupported"));
9aea1e31 12252 bfd_set_error (bfd_error_sorry);
cc364be6
AM
12253 return FALSE;
12254 }
12255 }
12256 return TRUE;
d1036acb 12257}
fcb93ecf
PB
12258
12259
12260/* Return TRUE for ELF symbol types that represent functions.
12261 This is the default version of this function, which is sufficient for
d8045f23 12262 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
fcb93ecf
PB
12263
12264bfd_boolean
12265_bfd_elf_is_function_type (unsigned int type)
12266{
d8045f23
NC
12267 return (type == STT_FUNC
12268 || type == STT_GNU_IFUNC);
fcb93ecf 12269}
9f296da3 12270
aef36ac1
AM
12271/* If the ELF symbol SYM might be a function in SEC, return the
12272 function size and set *CODE_OFF to the function's entry point,
12273 otherwise return zero. */
9f296da3 12274
aef36ac1
AM
12275bfd_size_type
12276_bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
12277 bfd_vma *code_off)
9f296da3 12278{
aef36ac1
AM
12279 bfd_size_type size;
12280
ff9e0f5b 12281 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
aef36ac1
AM
12282 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
12283 || sym->section != sec)
12284 return 0;
ff9e0f5b 12285
ff9e0f5b 12286 *code_off = sym->value;
aef36ac1
AM
12287 size = 0;
12288 if (!(sym->flags & BSF_SYNTHETIC))
12289 size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
12290 if (size == 0)
12291 size = 1;
12292 return size;
9f296da3 12293}
This page took 2.246609 seconds and 4 git commands to generate.