]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - bfd/elf.c
aarch64: Add some DT_RELR ld tests
[thirdparty/binutils-gdb.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2
3 Copyright (C) 1993-2024 Free Software Foundation, Inc.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
21
22
23 /*
24 SECTION
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
33 haven't bothered yet. */
34
35 /* For sparc64-cross-sparc32. */
36 #define _SYSCALL32
37 #include "sysdep.h"
38 #include <limits.h>
39 #include "bfd.h"
40 #include "bfdlink.h"
41 #include "libbfd.h"
42 #define ARCH_SIZE 0
43 #include "elf-bfd.h"
44 #include "libiberty.h"
45 #include "safe-ctype.h"
46 #include "elf-linux-core.h"
47
48 #ifdef CORE_HEADER
49 #include CORE_HEADER
50 #endif
51
52 static int elf_sort_sections (const void *, const void *);
53 static bool assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
54 static bool swap_out_syms (bfd *, struct elf_strtab_hash **, int,
55 struct bfd_link_info *);
56 static bool elf_parse_notes (bfd *abfd, char *buf, size_t size,
57 file_ptr offset, size_t align);
58
59 /* Swap version information in and out. The version information is
60 currently size independent. If that ever changes, this code will
61 need to move into elfcode.h. */
62
63 /* Swap in a Verdef structure. */
64
65 void
66 _bfd_elf_swap_verdef_in (bfd *abfd,
67 const Elf_External_Verdef *src,
68 Elf_Internal_Verdef *dst)
69 {
70 dst->vd_version = H_GET_16 (abfd, src->vd_version);
71 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
72 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
73 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
74 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
75 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
76 dst->vd_next = H_GET_32 (abfd, src->vd_next);
77 }
78
79 /* Swap out a Verdef structure. */
80
81 void
82 _bfd_elf_swap_verdef_out (bfd *abfd,
83 const Elf_Internal_Verdef *src,
84 Elf_External_Verdef *dst)
85 {
86 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
87 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
88 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
89 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
90 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
91 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
92 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
93 }
94
95 /* Swap in a Verdaux structure. */
96
97 void
98 _bfd_elf_swap_verdaux_in (bfd *abfd,
99 const Elf_External_Verdaux *src,
100 Elf_Internal_Verdaux *dst)
101 {
102 dst->vda_name = H_GET_32 (abfd, src->vda_name);
103 dst->vda_next = H_GET_32 (abfd, src->vda_next);
104 }
105
106 /* Swap out a Verdaux structure. */
107
108 void
109 _bfd_elf_swap_verdaux_out (bfd *abfd,
110 const Elf_Internal_Verdaux *src,
111 Elf_External_Verdaux *dst)
112 {
113 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
114 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
115 }
116
117 /* Swap in a Verneed structure. */
118
119 void
120 _bfd_elf_swap_verneed_in (bfd *abfd,
121 const Elf_External_Verneed *src,
122 Elf_Internal_Verneed *dst)
123 {
124 dst->vn_version = H_GET_16 (abfd, src->vn_version);
125 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
126 dst->vn_file = H_GET_32 (abfd, src->vn_file);
127 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
128 dst->vn_next = H_GET_32 (abfd, src->vn_next);
129 }
130
131 /* Swap out a Verneed structure. */
132
133 void
134 _bfd_elf_swap_verneed_out (bfd *abfd,
135 const Elf_Internal_Verneed *src,
136 Elf_External_Verneed *dst)
137 {
138 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
139 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
140 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
141 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
142 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
143 }
144
145 /* Swap in a Vernaux structure. */
146
147 void
148 _bfd_elf_swap_vernaux_in (bfd *abfd,
149 const Elf_External_Vernaux *src,
150 Elf_Internal_Vernaux *dst)
151 {
152 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
153 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
154 dst->vna_other = H_GET_16 (abfd, src->vna_other);
155 dst->vna_name = H_GET_32 (abfd, src->vna_name);
156 dst->vna_next = H_GET_32 (abfd, src->vna_next);
157 }
158
159 /* Swap out a Vernaux structure. */
160
161 void
162 _bfd_elf_swap_vernaux_out (bfd *abfd,
163 const Elf_Internal_Vernaux *src,
164 Elf_External_Vernaux *dst)
165 {
166 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
167 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
168 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
169 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
170 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
171 }
172
173 /* Swap in a Versym structure. */
174
175 void
176 _bfd_elf_swap_versym_in (bfd *abfd,
177 const Elf_External_Versym *src,
178 Elf_Internal_Versym *dst)
179 {
180 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
181 }
182
183 /* Swap out a Versym structure. */
184
185 void
186 _bfd_elf_swap_versym_out (bfd *abfd,
187 const Elf_Internal_Versym *src,
188 Elf_External_Versym *dst)
189 {
190 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
191 }
192
193 /* Standard ELF hash function. Do not change this function; you will
194 cause invalid hash tables to be generated. */
195
196 unsigned long
197 bfd_elf_hash (const char *namearg)
198 {
199 uint32_t h = 0;
200
201 for (const unsigned char *name = (const unsigned char *) namearg;
202 *name; name++)
203 {
204 h = (h << 4) + *name;
205 h ^= (h >> 24) & 0xf0;
206 }
207 return h & 0x0fffffff;
208 }
209
210 /* DT_GNU_HASH hash function. Do not change this function; you will
211 cause invalid hash tables to be generated. */
212
213 unsigned long
214 bfd_elf_gnu_hash (const char *namearg)
215 {
216 uint32_t h = 5381;
217
218 for (const unsigned char *name = (const unsigned char *) namearg;
219 *name; name++)
220 h = (h << 5) + h + *name;
221 return h;
222 }
223
224 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
225 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
226 bool
227 bfd_elf_allocate_object (bfd *abfd,
228 size_t object_size,
229 enum elf_target_id object_id)
230 {
231 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
232 abfd->tdata.any = bfd_zalloc (abfd, object_size);
233 if (abfd->tdata.any == NULL)
234 return false;
235
236 elf_object_id (abfd) = object_id;
237 if (abfd->direction != read_direction)
238 {
239 struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
240 if (o == NULL)
241 return false;
242 elf_tdata (abfd)->o = o;
243 elf_program_header_size (abfd) = (bfd_size_type) -1;
244 }
245 return true;
246 }
247
248
249 bool
250 bfd_elf_make_object (bfd *abfd)
251 {
252 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
253 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
254 bed->target_id);
255 }
256
257 bool
258 bfd_elf_mkcorefile (bfd *abfd)
259 {
260 /* I think this can be done just like an object file. */
261 if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
262 return false;
263 elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
264 return elf_tdata (abfd)->core != NULL;
265 }
266
267 char *
268 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
269 {
270 Elf_Internal_Shdr **i_shdrp;
271 bfd_byte *shstrtab = NULL;
272 file_ptr offset;
273 bfd_size_type shstrtabsize;
274
275 i_shdrp = elf_elfsections (abfd);
276 if (i_shdrp == 0
277 || shindex >= elf_numsections (abfd)
278 || i_shdrp[shindex] == 0)
279 return NULL;
280
281 shstrtab = i_shdrp[shindex]->contents;
282 if (shstrtab == NULL)
283 {
284 /* No cached one, attempt to read, and cache what we read. */
285 offset = i_shdrp[shindex]->sh_offset;
286 shstrtabsize = i_shdrp[shindex]->sh_size;
287
288 /* Allocate and clear an extra byte at the end, to prevent crashes
289 in case the string table is not terminated. */
290 if (shstrtabsize + 1 <= 1
291 || bfd_seek (abfd, offset, SEEK_SET) != 0
292 || (shstrtab
293 = _bfd_mmap_readonly_persistent (abfd, shstrtabsize)) == NULL)
294 {
295 /* Once we've failed to read it, make sure we don't keep
296 trying. Otherwise, we'll keep allocating space for
297 the string table over and over. */
298 i_shdrp[shindex]->sh_size = 0;
299 }
300 else if (shstrtab[shstrtabsize - 1] != '\0')
301 {
302 /* It is an error if a string table isn't terminated. */
303 _bfd_error_handler
304 /* xgettext:c-format */
305 (_("%pB(%pA): string table is corrupt"),
306 abfd, i_shdrp[shindex]->bfd_section);
307 return NULL;
308 }
309 i_shdrp[shindex]->contents = shstrtab;
310 }
311 return (char *) shstrtab;
312 }
313
314 char *
315 bfd_elf_string_from_elf_section (bfd *abfd,
316 unsigned int shindex,
317 unsigned int strindex)
318 {
319 Elf_Internal_Shdr *hdr;
320
321 if (strindex == 0)
322 return "";
323
324 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
325 return NULL;
326
327 hdr = elf_elfsections (abfd)[shindex];
328
329 if (hdr->contents == NULL)
330 {
331 if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
332 {
333 /* PR 17512: file: f057ec89. */
334 /* xgettext:c-format */
335 _bfd_error_handler (_("%pB: attempt to load strings from"
336 " a non-string section (number %d)"),
337 abfd, shindex);
338 return NULL;
339 }
340
341 if (bfd_elf_get_str_section (abfd, shindex) == NULL)
342 return NULL;
343 }
344 else
345 {
346 /* PR 24273: The string section's contents may have already
347 been loaded elsewhere, eg because a corrupt file has the
348 string section index in the ELF header pointing at a group
349 section. So be paranoid, and test that the last byte of
350 the section is zero. */
351 if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
352 return NULL;
353 }
354
355 if (strindex >= hdr->sh_size)
356 {
357 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
358 _bfd_error_handler
359 /* xgettext:c-format */
360 (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
361 abfd, strindex, (uint64_t) hdr->sh_size,
362 (shindex == shstrndx && strindex == hdr->sh_name
363 ? ".shstrtab"
364 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
365 return NULL;
366 }
367
368 return ((char *) hdr->contents) + strindex;
369 }
370
371 /* Read and convert symbols to internal format.
372 SYMCOUNT specifies the number of symbols to read, starting from
373 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
374 are non-NULL, they are used to store the internal symbols, external
375 symbols, and symbol section index extensions, respectively.
376 Returns a pointer to the internal symbol buffer (malloced if necessary)
377 or NULL if there were no symbols or some kind of problem. */
378
379 Elf_Internal_Sym *
380 bfd_elf_get_elf_syms (bfd *ibfd,
381 Elf_Internal_Shdr *symtab_hdr,
382 size_t symcount,
383 size_t symoffset,
384 Elf_Internal_Sym *intsym_buf,
385 void *extsym_buf,
386 Elf_External_Sym_Shndx *extshndx_buf)
387 {
388 Elf_Internal_Shdr *shndx_hdr;
389 void *alloc_ext;
390 const bfd_byte *esym;
391 Elf_External_Sym_Shndx *alloc_extshndx;
392 Elf_External_Sym_Shndx *shndx;
393 Elf_Internal_Sym *alloc_intsym;
394 Elf_Internal_Sym *isym;
395 Elf_Internal_Sym *isymend;
396 const struct elf_backend_data *bed;
397 size_t extsym_size;
398 size_t amt;
399 file_ptr pos;
400
401 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
402 abort ();
403
404 if (symcount == 0)
405 return intsym_buf;
406
407 if (elf_use_dt_symtab_p (ibfd))
408 {
409 /* Use dynamic symbol table. */
410 if (elf_tdata (ibfd)->dt_symtab_count != symcount + symoffset)
411 {
412 bfd_set_error (bfd_error_invalid_operation);
413 return NULL;
414 }
415 return elf_tdata (ibfd)->dt_symtab + symoffset;
416 }
417
418 /* Normal syms might have section extension entries. */
419 shndx_hdr = NULL;
420 if (elf_symtab_shndx_list (ibfd) != NULL)
421 {
422 elf_section_list * entry;
423 Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
424
425 /* Find an index section that is linked to this symtab section. */
426 for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
427 {
428 /* PR 20063. */
429 if (entry->hdr.sh_link >= elf_numsections (ibfd))
430 continue;
431
432 if (sections[entry->hdr.sh_link] == symtab_hdr)
433 {
434 shndx_hdr = & entry->hdr;
435 break;
436 };
437 }
438
439 if (shndx_hdr == NULL)
440 {
441 if (symtab_hdr == &elf_symtab_hdr (ibfd))
442 /* Not really accurate, but this was how the old code used
443 to work. */
444 shndx_hdr = &elf_symtab_shndx_list (ibfd)->hdr;
445 /* Otherwise we do nothing. The assumption is that
446 the index table will not be needed. */
447 }
448 }
449
450 /* Read the symbols. */
451 alloc_ext = NULL;
452 alloc_extshndx = NULL;
453 alloc_intsym = NULL;
454 bed = get_elf_backend_data (ibfd);
455 extsym_size = bed->s->sizeof_sym;
456 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
457 {
458 bfd_set_error (bfd_error_file_too_big);
459 return NULL;
460 }
461 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
462 size_t alloc_ext_size = amt;
463 if (bfd_seek (ibfd, pos, SEEK_SET) != 0
464 || !_bfd_mmap_read_temporary (&extsym_buf, &alloc_ext_size,
465 &alloc_ext, ibfd, false))
466 {
467 intsym_buf = NULL;
468 goto out2;
469 }
470
471 size_t alloc_extshndx_size = 0;
472 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
473 extshndx_buf = NULL;
474 else
475 {
476 if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
477 {
478 bfd_set_error (bfd_error_file_too_big);
479 intsym_buf = NULL;
480 goto out1;
481 }
482 alloc_extshndx_size = amt;
483 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
484 if (bfd_seek (ibfd, pos, SEEK_SET) != 0
485 || !_bfd_mmap_read_temporary ((void **) &extshndx_buf,
486 &alloc_extshndx_size,
487 (void **) &alloc_extshndx,
488 ibfd, false))
489 {
490 intsym_buf = NULL;
491 goto out1;
492 }
493 }
494
495 if (intsym_buf == NULL)
496 {
497 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
498 {
499 bfd_set_error (bfd_error_file_too_big);
500 goto out1;
501 }
502 alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
503 intsym_buf = alloc_intsym;
504 if (intsym_buf == NULL)
505 goto out1;
506 }
507
508 /* Convert the symbols to internal form. */
509 isymend = intsym_buf + symcount;
510 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
511 shndx = extshndx_buf;
512 isym < isymend;
513 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
514 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
515 {
516 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
517 /* xgettext:c-format */
518 _bfd_error_handler (_("%pB symbol number %lu references"
519 " nonexistent SHT_SYMTAB_SHNDX section"),
520 ibfd, (unsigned long) symoffset);
521 free (alloc_intsym);
522 intsym_buf = NULL;
523 goto out1;
524 }
525
526 out1:
527 _bfd_munmap_readonly_temporary (alloc_extshndx, alloc_extshndx_size);
528 out2:
529 _bfd_munmap_readonly_temporary (alloc_ext, alloc_ext_size);
530
531 return intsym_buf;
532 }
533
534 /* Look up a symbol name. */
535 const char *
536 bfd_elf_sym_name (bfd *abfd,
537 Elf_Internal_Shdr *symtab_hdr,
538 Elf_Internal_Sym *isym,
539 asection *sym_sec)
540 {
541 const char *name;
542 unsigned int iname = isym->st_name;
543 unsigned int shindex = symtab_hdr->sh_link;
544
545 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
546 /* Check for a bogus st_shndx to avoid crashing. */
547 && isym->st_shndx < elf_numsections (abfd))
548 {
549 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
550 shindex = elf_elfheader (abfd)->e_shstrndx;
551 }
552
553 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
554 if (name == NULL)
555 name = "(null)";
556 else if (sym_sec && *name == '\0')
557 name = bfd_section_name (sym_sec);
558
559 return name;
560 }
561
562 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
563 sections. The first element is the flags, the rest are section
564 pointers. */
565
566 typedef union elf_internal_group {
567 Elf_Internal_Shdr *shdr;
568 unsigned int flags;
569 } Elf_Internal_Group;
570
571 /* Return the name of the group signature symbol. Why isn't the
572 signature just a string? */
573
574 static const char *
575 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
576 {
577 Elf_Internal_Shdr *hdr;
578 unsigned char esym[sizeof (Elf64_External_Sym)];
579 Elf_External_Sym_Shndx eshndx;
580 Elf_Internal_Sym isym;
581
582 /* First we need to ensure the symbol table is available. Make sure
583 that it is a symbol table section. */
584 if (ghdr->sh_link >= elf_numsections (abfd))
585 return NULL;
586 hdr = elf_elfsections (abfd) [ghdr->sh_link];
587 if (hdr->sh_type != SHT_SYMTAB
588 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
589 return NULL;
590
591 /* Go read the symbol. */
592 hdr = &elf_tdata (abfd)->symtab_hdr;
593 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
594 &isym, esym, &eshndx) == NULL)
595 return NULL;
596
597 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
598 }
599
600 /* Set next_in_group list pointer, and group name for NEWSECT. */
601
602 static bool
603 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
604 {
605 unsigned int num_group = elf_tdata (abfd)->num_group;
606
607 /* If num_group is zero, read in all SHT_GROUP sections. The count
608 is set to -1 if there are no SHT_GROUP sections. */
609 if (num_group == 0)
610 {
611 unsigned int i, shnum;
612
613 /* First count the number of groups. If we have a SHT_GROUP
614 section with just a flag word (ie. sh_size is 4), ignore it. */
615 shnum = elf_numsections (abfd);
616 num_group = 0;
617
618 #define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize) \
619 ( (shdr)->sh_type == SHT_GROUP \
620 && (shdr)->sh_size >= minsize \
621 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
622 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
623
624 for (i = 0; i < shnum; i++)
625 {
626 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
627
628 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
629 num_group += 1;
630 }
631
632 if (num_group == 0)
633 {
634 num_group = (unsigned) -1;
635 elf_tdata (abfd)->num_group = num_group;
636 elf_tdata (abfd)->group_sect_ptr = NULL;
637 }
638 else
639 {
640 /* We keep a list of elf section headers for group sections,
641 so we can find them quickly. */
642 size_t amt;
643
644 elf_tdata (abfd)->num_group = num_group;
645 amt = num_group * sizeof (Elf_Internal_Shdr *);
646 elf_tdata (abfd)->group_sect_ptr
647 = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
648 if (elf_tdata (abfd)->group_sect_ptr == NULL)
649 return false;
650 num_group = 0;
651
652 for (i = 0; i < shnum; i++)
653 {
654 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
655
656 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
657 {
658 unsigned char *src;
659 Elf_Internal_Group *dest;
660
661 /* Make sure the group section has a BFD section
662 attached to it. */
663 if (!bfd_section_from_shdr (abfd, i))
664 return false;
665
666 /* Add to list of sections. */
667 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
668 num_group += 1;
669
670 /* Read the raw contents. */
671 BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
672 shdr->contents = NULL;
673 if (_bfd_mul_overflow (shdr->sh_size,
674 sizeof (*dest) / 4, &amt)
675 || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
676 || !(shdr->contents
677 = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
678 {
679 _bfd_error_handler
680 /* xgettext:c-format */
681 (_("%pB: invalid size field in group section"
682 " header: %#" PRIx64 ""),
683 abfd, (uint64_t) shdr->sh_size);
684 bfd_set_error (bfd_error_bad_value);
685 -- num_group;
686 continue;
687 }
688
689 /* Translate raw contents, a flag word followed by an
690 array of elf section indices all in target byte order,
691 to the flag word followed by an array of elf section
692 pointers. */
693 src = shdr->contents + shdr->sh_size;
694 dest = (Elf_Internal_Group *) (shdr->contents + amt);
695
696 while (1)
697 {
698 unsigned int idx;
699
700 src -= 4;
701 --dest;
702 idx = H_GET_32 (abfd, src);
703 if (src == shdr->contents)
704 {
705 dest->shdr = NULL;
706 dest->flags = idx;
707 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
708 shdr->bfd_section->flags
709 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
710 break;
711 }
712 if (idx < shnum)
713 {
714 dest->shdr = elf_elfsections (abfd)[idx];
715 /* PR binutils/23199: All sections in a
716 section group should be marked with
717 SHF_GROUP. But some tools generate
718 broken objects without SHF_GROUP. Fix
719 them up here. */
720 dest->shdr->sh_flags |= SHF_GROUP;
721 }
722 if (idx >= shnum
723 || dest->shdr->sh_type == SHT_GROUP)
724 {
725 _bfd_error_handler
726 (_("%pB: invalid entry in SHT_GROUP section [%u]"),
727 abfd, i);
728 dest->shdr = NULL;
729 }
730 }
731 }
732 }
733
734 /* PR 17510: Corrupt binaries might contain invalid groups. */
735 if (num_group != (unsigned) elf_tdata (abfd)->num_group)
736 {
737 elf_tdata (abfd)->num_group = num_group;
738
739 /* If all groups are invalid then fail. */
740 if (num_group == 0)
741 {
742 elf_tdata (abfd)->group_sect_ptr = NULL;
743 elf_tdata (abfd)->num_group = num_group = -1;
744 _bfd_error_handler
745 (_("%pB: no valid group sections found"), abfd);
746 bfd_set_error (bfd_error_bad_value);
747 }
748 }
749 }
750 }
751
752 if (num_group != (unsigned) -1)
753 {
754 unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
755 unsigned int j;
756
757 for (j = 0; j < num_group; j++)
758 {
759 /* Begin search from previous found group. */
760 unsigned i = (j + search_offset) % num_group;
761
762 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
763 Elf_Internal_Group *idx;
764 bfd_size_type n_elt;
765
766 if (shdr == NULL)
767 continue;
768
769 idx = (Elf_Internal_Group *) shdr->contents;
770 if (idx == NULL || shdr->sh_size < 4)
771 {
772 /* See PR 21957 for a reproducer. */
773 /* xgettext:c-format */
774 _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
775 abfd, shdr->bfd_section);
776 elf_tdata (abfd)->group_sect_ptr[i] = NULL;
777 bfd_set_error (bfd_error_bad_value);
778 return false;
779 }
780 n_elt = shdr->sh_size / 4;
781
782 /* Look through this group's sections to see if current
783 section is a member. */
784 while (--n_elt != 0)
785 if ((++idx)->shdr == hdr)
786 {
787 asection *s = NULL;
788
789 /* We are a member of this group. Go looking through
790 other members to see if any others are linked via
791 next_in_group. */
792 idx = (Elf_Internal_Group *) shdr->contents;
793 n_elt = shdr->sh_size / 4;
794 while (--n_elt != 0)
795 if ((++idx)->shdr != NULL
796 && (s = idx->shdr->bfd_section) != NULL
797 && elf_next_in_group (s) != NULL)
798 break;
799 if (n_elt != 0)
800 {
801 /* Snarf the group name from other member, and
802 insert current section in circular list. */
803 elf_group_name (newsect) = elf_group_name (s);
804 elf_next_in_group (newsect) = elf_next_in_group (s);
805 elf_next_in_group (s) = newsect;
806 }
807 else
808 {
809 const char *gname;
810
811 gname = group_signature (abfd, shdr);
812 if (gname == NULL)
813 return false;
814 elf_group_name (newsect) = gname;
815
816 /* Start a circular list with one element. */
817 elf_next_in_group (newsect) = newsect;
818 }
819
820 /* If the group section has been created, point to the
821 new member. */
822 if (shdr->bfd_section != NULL)
823 elf_next_in_group (shdr->bfd_section) = newsect;
824
825 elf_tdata (abfd)->group_search_offset = i;
826 j = num_group - 1;
827 break;
828 }
829 }
830 }
831
832 if (elf_group_name (newsect) == NULL)
833 {
834 /* xgettext:c-format */
835 _bfd_error_handler (_("%pB: no group info for section '%pA'"),
836 abfd, newsect);
837 /* PR 29532: Return true here, even though the group info has not been
838 read. Separate debug info files can have empty group sections, but
839 we do not want this to prevent them from being loaded as otherwise
840 GDB will not be able to use them. */
841 return true;
842 }
843 return true;
844 }
845
846 bool
847 _bfd_elf_setup_sections (bfd *abfd)
848 {
849 unsigned int i;
850 unsigned int num_group = elf_tdata (abfd)->num_group;
851 bool result = true;
852 asection *s;
853
854 /* Process SHF_LINK_ORDER. */
855 for (s = abfd->sections; s != NULL; s = s->next)
856 {
857 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
858 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
859 {
860 unsigned int elfsec = this_hdr->sh_link;
861 /* An sh_link value of 0 is now allowed. It indicates that linked
862 to section has already been discarded, but that the current
863 section has been retained for some other reason. This linking
864 section is still a candidate for later garbage collection
865 however. */
866 if (elfsec == 0)
867 {
868 elf_linked_to_section (s) = NULL;
869 }
870 else
871 {
872 asection *linksec = NULL;
873
874 if (elfsec < elf_numsections (abfd))
875 {
876 this_hdr = elf_elfsections (abfd)[elfsec];
877 linksec = this_hdr->bfd_section;
878 }
879
880 /* PR 1991, 2008:
881 Some strip/objcopy may leave an incorrect value in
882 sh_link. We don't want to proceed. */
883 if (linksec == NULL)
884 {
885 _bfd_error_handler
886 /* xgettext:c-format */
887 (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
888 s->owner, elfsec, s);
889 result = false;
890 }
891
892 elf_linked_to_section (s) = linksec;
893 }
894 }
895 else if (this_hdr->sh_type == SHT_GROUP
896 && elf_next_in_group (s) == NULL)
897 {
898 _bfd_error_handler
899 /* xgettext:c-format */
900 (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
901 abfd, elf_section_data (s)->this_idx);
902 result = false;
903 }
904 }
905
906 /* Process section groups. */
907 if (num_group == (unsigned) -1)
908 return result;
909
910 for (i = 0; i < num_group; i++)
911 {
912 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
913 Elf_Internal_Group *idx;
914 unsigned int n_elt;
915
916 /* PR binutils/18758: Beware of corrupt binaries with invalid
917 group data. */
918 if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
919 {
920 _bfd_error_handler
921 /* xgettext:c-format */
922 (_("%pB: section group entry number %u is corrupt"),
923 abfd, i);
924 result = false;
925 continue;
926 }
927
928 idx = (Elf_Internal_Group *) shdr->contents;
929 n_elt = shdr->sh_size / 4;
930
931 while (--n_elt != 0)
932 {
933 ++ idx;
934
935 if (idx->shdr == NULL)
936 continue;
937 else if (idx->shdr->bfd_section)
938 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
939 else if (idx->shdr->sh_type != SHT_RELA
940 && idx->shdr->sh_type != SHT_REL)
941 {
942 /* There are some unknown sections in the group. */
943 _bfd_error_handler
944 /* xgettext:c-format */
945 (_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
946 abfd,
947 idx->shdr->sh_type,
948 bfd_elf_string_from_elf_section (abfd,
949 (elf_elfheader (abfd)
950 ->e_shstrndx),
951 idx->shdr->sh_name),
952 shdr->bfd_section);
953 result = false;
954 }
955 }
956 }
957
958 return result;
959 }
960
961 bool
962 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
963 {
964 return elf_next_in_group (sec) != NULL;
965 }
966
967 const char *
968 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
969 {
970 if (elf_sec_group (sec) != NULL)
971 return elf_group_name (sec);
972 return NULL;
973 }
974
975 /* Make a BFD section from an ELF section. We store a pointer to the
976 BFD section in the bfd_section field of the header. */
977
978 bool
979 _bfd_elf_make_section_from_shdr (bfd *abfd,
980 Elf_Internal_Shdr *hdr,
981 const char *name,
982 int shindex)
983 {
984 asection *newsect;
985 flagword flags;
986 const struct elf_backend_data *bed;
987 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
988
989 if (hdr->bfd_section != NULL)
990 return true;
991
992 newsect = bfd_make_section_anyway (abfd, name);
993 if (newsect == NULL)
994 return false;
995
996 hdr->bfd_section = newsect;
997 elf_section_data (newsect)->this_hdr = *hdr;
998 elf_section_data (newsect)->this_idx = shindex;
999
1000 /* Always use the real type/flags. */
1001 elf_section_type (newsect) = hdr->sh_type;
1002 elf_section_flags (newsect) = hdr->sh_flags;
1003
1004 newsect->filepos = hdr->sh_offset;
1005
1006 flags = SEC_NO_FLAGS;
1007 if (hdr->sh_type != SHT_NOBITS)
1008 flags |= SEC_HAS_CONTENTS;
1009 if (hdr->sh_type == SHT_GROUP)
1010 flags |= SEC_GROUP;
1011 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1012 {
1013 flags |= SEC_ALLOC;
1014 if (hdr->sh_type != SHT_NOBITS)
1015 flags |= SEC_LOAD;
1016 }
1017 if ((hdr->sh_flags & SHF_WRITE) == 0)
1018 flags |= SEC_READONLY;
1019 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1020 flags |= SEC_CODE;
1021 else if ((flags & SEC_LOAD) != 0)
1022 flags |= SEC_DATA;
1023 if ((hdr->sh_flags & SHF_MERGE) != 0)
1024 {
1025 flags |= SEC_MERGE;
1026 newsect->entsize = hdr->sh_entsize;
1027 }
1028 if ((hdr->sh_flags & SHF_STRINGS) != 0)
1029 flags |= SEC_STRINGS;
1030 if (hdr->sh_flags & SHF_GROUP)
1031 if (!setup_group (abfd, hdr, newsect))
1032 return false;
1033 if ((hdr->sh_flags & SHF_TLS) != 0)
1034 flags |= SEC_THREAD_LOCAL;
1035 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1036 flags |= SEC_EXCLUDE;
1037
1038 switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1039 {
1040 /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1041 but binutils as of 2019-07-23 did not set the EI_OSABI header
1042 byte. */
1043 case ELFOSABI_GNU:
1044 case ELFOSABI_FREEBSD:
1045 if ((hdr->sh_flags & SHF_GNU_RETAIN) != 0)
1046 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_retain;
1047 /* Fall through */
1048 case ELFOSABI_NONE:
1049 if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1050 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1051 break;
1052 }
1053
1054 if ((flags & SEC_ALLOC) == 0)
1055 {
1056 /* The debugging sections appear to be recognized only by name,
1057 not any sort of flag. Their SEC_ALLOC bits are cleared. */
1058 if (name [0] == '.')
1059 {
1060 if (startswith (name, ".debug")
1061 || startswith (name, ".gnu.debuglto_.debug_")
1062 || startswith (name, ".gnu.linkonce.wi.")
1063 || startswith (name, ".zdebug"))
1064 flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1065 else if (startswith (name, GNU_BUILD_ATTRS_SECTION_NAME)
1066 || startswith (name, ".note.gnu"))
1067 {
1068 flags |= SEC_ELF_OCTETS;
1069 opb = 1;
1070 }
1071 else if (startswith (name, ".line")
1072 || startswith (name, ".stab")
1073 || strcmp (name, ".gdb_index") == 0)
1074 flags |= SEC_DEBUGGING;
1075 }
1076 }
1077
1078 if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
1079 || !bfd_set_section_size (newsect, hdr->sh_size)
1080 || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
1081 & -hdr->sh_addralign)))
1082 return false;
1083
1084 /* As a GNU extension, if the name begins with .gnu.linkonce, we
1085 only link a single copy of the section. This is used to support
1086 g++. g++ will emit each template expansion in its own section.
1087 The symbols will be defined as weak, so that multiple definitions
1088 are permitted. The GNU linker extension is to actually discard
1089 all but one of the sections. */
1090 if (startswith (name, ".gnu.linkonce")
1091 && elf_next_in_group (newsect) == NULL)
1092 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1093
1094 if (!bfd_set_section_flags (newsect, flags))
1095 return false;
1096
1097 bed = get_elf_backend_data (abfd);
1098 if (bed->elf_backend_section_flags)
1099 if (!bed->elf_backend_section_flags (hdr))
1100 return false;
1101
1102 /* We do not parse the PT_NOTE segments as we are interested even in the
1103 separate debug info files which may have the segments offsets corrupted.
1104 PT_NOTEs from the core files are currently not parsed using BFD. */
1105 if (hdr->sh_type == SHT_NOTE && hdr->sh_size != 0)
1106 {
1107 bfd_byte *contents;
1108
1109 if (!_bfd_elf_mmap_section_contents (abfd, newsect, &contents))
1110 return false;
1111
1112 elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1113 hdr->sh_offset, hdr->sh_addralign);
1114 _bfd_elf_munmap_section_contents (newsect, contents);
1115 }
1116
1117 if ((newsect->flags & SEC_ALLOC) != 0)
1118 {
1119 Elf_Internal_Phdr *phdr;
1120 unsigned int i, nload;
1121
1122 /* Some ELF linkers produce binaries with all the program header
1123 p_paddr fields zero. If we have such a binary with more than
1124 one PT_LOAD header, then leave the section lma equal to vma
1125 so that we don't create sections with overlapping lma. */
1126 phdr = elf_tdata (abfd)->phdr;
1127 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1128 if (phdr->p_paddr != 0)
1129 break;
1130 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1131 ++nload;
1132 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1133 return true;
1134
1135 phdr = elf_tdata (abfd)->phdr;
1136 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1137 {
1138 if (((phdr->p_type == PT_LOAD
1139 && (hdr->sh_flags & SHF_TLS) == 0)
1140 || phdr->p_type == PT_TLS)
1141 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1142 {
1143 if ((newsect->flags & SEC_LOAD) == 0)
1144 newsect->lma = (phdr->p_paddr
1145 + hdr->sh_addr - phdr->p_vaddr) / opb;
1146 else
1147 /* We used to use the same adjustment for SEC_LOAD
1148 sections, but that doesn't work if the segment
1149 is packed with code from multiple VMAs.
1150 Instead we calculate the section LMA based on
1151 the segment LMA. It is assumed that the
1152 segment will contain sections with contiguous
1153 LMAs, even if the VMAs are not. */
1154 newsect->lma = (phdr->p_paddr
1155 + hdr->sh_offset - phdr->p_offset) / opb;
1156
1157 /* With contiguous segments, we can't tell from file
1158 offsets whether a section with zero size should
1159 be placed at the end of one segment or the
1160 beginning of the next. Decide based on vaddr. */
1161 if (hdr->sh_addr >= phdr->p_vaddr
1162 && (hdr->sh_addr + hdr->sh_size
1163 <= phdr->p_vaddr + phdr->p_memsz))
1164 break;
1165 }
1166 }
1167 }
1168
1169 /* Compress/decompress DWARF debug sections with names: .debug_*,
1170 .zdebug_*, .gnu.debuglto_.debug_, after the section flags is set. */
1171 if ((newsect->flags & SEC_DEBUGGING) != 0
1172 && (newsect->flags & SEC_HAS_CONTENTS) != 0
1173 && (newsect->flags & SEC_ELF_OCTETS) != 0)
1174 {
1175 enum { nothing, compress, decompress } action = nothing;
1176 int compression_header_size;
1177 bfd_size_type uncompressed_size;
1178 unsigned int uncompressed_align_power;
1179 enum compression_type ch_type = ch_none;
1180 bool compressed
1181 = bfd_is_section_compressed_info (abfd, newsect,
1182 &compression_header_size,
1183 &uncompressed_size,
1184 &uncompressed_align_power,
1185 &ch_type);
1186
1187 /* Should we decompress? */
1188 if ((abfd->flags & BFD_DECOMPRESS) != 0 && compressed)
1189 action = decompress;
1190
1191 /* Should we compress? Or convert to a different compression? */
1192 else if ((abfd->flags & BFD_COMPRESS) != 0
1193 && newsect->size != 0
1194 && compression_header_size >= 0
1195 && uncompressed_size > 0)
1196 {
1197 if (!compressed)
1198 action = compress;
1199 else
1200 {
1201 enum compression_type new_ch_type = ch_none;
1202 if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
1203 new_ch_type = ((abfd->flags & BFD_COMPRESS_ZSTD) != 0
1204 ? ch_compress_zstd : ch_compress_zlib);
1205 if (new_ch_type != ch_type)
1206 action = compress;
1207 }
1208 }
1209
1210 if (action == compress)
1211 {
1212 if (!bfd_init_section_compress_status (abfd, newsect))
1213 {
1214 _bfd_error_handler
1215 /* xgettext:c-format */
1216 (_("%pB: unable to compress section %s"), abfd, name);
1217 return false;
1218 }
1219 }
1220 else if (action == decompress)
1221 {
1222 if (!bfd_init_section_decompress_status (abfd, newsect))
1223 {
1224 _bfd_error_handler
1225 /* xgettext:c-format */
1226 (_("%pB: unable to decompress section %s"), abfd, name);
1227 return false;
1228 }
1229 #ifndef HAVE_ZSTD
1230 if (newsect->compress_status == DECOMPRESS_SECTION_ZSTD)
1231 {
1232 _bfd_error_handler
1233 /* xgettext:c-format */
1234 (_ ("%pB: section %s is compressed with zstd, but BFD "
1235 "is not built with zstd support"),
1236 abfd, name);
1237 newsect->compress_status = COMPRESS_SECTION_NONE;
1238 return false;
1239 }
1240 #endif
1241 if (abfd->is_linker_input
1242 && name[1] == 'z')
1243 {
1244 /* Rename section from .zdebug_* to .debug_* so that ld
1245 scripts will see this section as a debug section. */
1246 char *new_name = bfd_zdebug_name_to_debug (abfd, name);
1247 if (new_name == NULL)
1248 return false;
1249 bfd_rename_section (newsect, new_name);
1250 }
1251 }
1252 }
1253
1254 return true;
1255 }
1256
1257 const char *const bfd_elf_section_type_names[] =
1258 {
1259 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1260 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1261 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1262 };
1263
1264 /* ELF relocs are against symbols. If we are producing relocatable
1265 output, and the reloc is against an external symbol, and nothing
1266 has given us any additional addend, the resulting reloc will also
1267 be against the same symbol. In such a case, we don't want to
1268 change anything about the way the reloc is handled, since it will
1269 all be done at final link time. Rather than put special case code
1270 into bfd_perform_relocation, all the reloc types use this howto
1271 function, or should call this function for relocatable output. */
1272
1273 bfd_reloc_status_type
1274 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1275 arelent *reloc_entry,
1276 asymbol *symbol,
1277 void *data ATTRIBUTE_UNUSED,
1278 asection *input_section,
1279 bfd *output_bfd,
1280 char **error_message ATTRIBUTE_UNUSED)
1281 {
1282 if (output_bfd != NULL
1283 && (symbol->flags & BSF_SECTION_SYM) == 0
1284 && (! reloc_entry->howto->partial_inplace
1285 || reloc_entry->addend == 0))
1286 {
1287 reloc_entry->address += input_section->output_offset;
1288 return bfd_reloc_ok;
1289 }
1290
1291 /* In some cases the relocation should be treated as output section
1292 relative, as when linking ELF DWARF into PE COFF. Many ELF
1293 targets lack section relative relocations and instead use
1294 ordinary absolute relocations for references between DWARF
1295 sections. That is arguably a bug in those targets but it happens
1296 to work for the usual case of linking to non-loaded ELF debug
1297 sections with VMAs forced to zero. PE COFF on the other hand
1298 doesn't allow a section VMA of zero. */
1299 if (output_bfd == NULL
1300 && !reloc_entry->howto->pc_relative
1301 && (symbol->section->flags & SEC_DEBUGGING) != 0
1302 && (input_section->flags & SEC_DEBUGGING) != 0)
1303 reloc_entry->addend -= symbol->section->output_section->vma;
1304
1305 return bfd_reloc_continue;
1306 }
1307 \f
1308 /* Returns TRUE if section A matches section B.
1309 Names, addresses and links may be different, but everything else
1310 should be the same. */
1311
1312 static bool
1313 section_match (const Elf_Internal_Shdr * a,
1314 const Elf_Internal_Shdr * b)
1315 {
1316 if (a->sh_type != b->sh_type
1317 || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1318 || a->sh_addralign != b->sh_addralign
1319 || a->sh_entsize != b->sh_entsize)
1320 return false;
1321 if (a->sh_type == SHT_SYMTAB
1322 || a->sh_type == SHT_STRTAB)
1323 return true;
1324 return a->sh_size == b->sh_size;
1325 }
1326
1327 /* Find a section in OBFD that has the same characteristics
1328 as IHEADER. Return the index of this section or SHN_UNDEF if
1329 none can be found. Check's section HINT first, as this is likely
1330 to be the correct section. */
1331
1332 static unsigned int
1333 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1334 const unsigned int hint)
1335 {
1336 Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1337 unsigned int i;
1338
1339 BFD_ASSERT (iheader != NULL);
1340
1341 /* See PR 20922 for a reproducer of the NULL test. */
1342 if (hint < elf_numsections (obfd)
1343 && oheaders[hint] != NULL
1344 && section_match (oheaders[hint], iheader))
1345 return hint;
1346
1347 for (i = 1; i < elf_numsections (obfd); i++)
1348 {
1349 Elf_Internal_Shdr * oheader = oheaders[i];
1350
1351 if (oheader == NULL)
1352 continue;
1353 if (section_match (oheader, iheader))
1354 /* FIXME: Do we care if there is a potential for
1355 multiple matches ? */
1356 return i;
1357 }
1358
1359 return SHN_UNDEF;
1360 }
1361
1362 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1363 Processor specific section, based upon a matching input section.
1364 Returns TRUE upon success, FALSE otherwise. */
1365
1366 static bool
1367 copy_special_section_fields (const bfd *ibfd,
1368 bfd *obfd,
1369 const Elf_Internal_Shdr *iheader,
1370 Elf_Internal_Shdr *oheader,
1371 const unsigned int secnum)
1372 {
1373 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1374 const Elf_Internal_Shdr **iheaders
1375 = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1376 bool changed = false;
1377 unsigned int sh_link;
1378
1379 if (oheader->sh_type == SHT_NOBITS)
1380 {
1381 /* This is a feature for objcopy --only-keep-debug:
1382 When a section's type is changed to NOBITS, we preserve
1383 the sh_link and sh_info fields so that they can be
1384 matched up with the original.
1385
1386 Note: Strictly speaking these assignments are wrong.
1387 The sh_link and sh_info fields should point to the
1388 relevent sections in the output BFD, which may not be in
1389 the same location as they were in the input BFD. But
1390 the whole point of this action is to preserve the
1391 original values of the sh_link and sh_info fields, so
1392 that they can be matched up with the section headers in
1393 the original file. So strictly speaking we may be
1394 creating an invalid ELF file, but it is only for a file
1395 that just contains debug info and only for sections
1396 without any contents. */
1397 if (oheader->sh_link == 0)
1398 oheader->sh_link = iheader->sh_link;
1399 if (oheader->sh_info == 0)
1400 oheader->sh_info = iheader->sh_info;
1401 return true;
1402 }
1403
1404 /* Allow the target a chance to decide how these fields should be set. */
1405 if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1406 iheader, oheader))
1407 return true;
1408
1409 /* We have an iheader which might match oheader, and which has non-zero
1410 sh_info and/or sh_link fields. Attempt to follow those links and find
1411 the section in the output bfd which corresponds to the linked section
1412 in the input bfd. */
1413 if (iheader->sh_link != SHN_UNDEF)
1414 {
1415 /* See PR 20931 for a reproducer. */
1416 if (iheader->sh_link >= elf_numsections (ibfd))
1417 {
1418 _bfd_error_handler
1419 /* xgettext:c-format */
1420 (_("%pB: invalid sh_link field (%d) in section number %d"),
1421 ibfd, iheader->sh_link, secnum);
1422 return false;
1423 }
1424
1425 sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1426 if (sh_link != SHN_UNDEF)
1427 {
1428 oheader->sh_link = sh_link;
1429 changed = true;
1430 }
1431 else
1432 /* FIXME: Should we install iheader->sh_link
1433 if we could not find a match ? */
1434 _bfd_error_handler
1435 /* xgettext:c-format */
1436 (_("%pB: failed to find link section for section %d"), obfd, secnum);
1437 }
1438
1439 if (iheader->sh_info)
1440 {
1441 /* The sh_info field can hold arbitrary information, but if the
1442 SHF_LINK_INFO flag is set then it should be interpreted as a
1443 section index. */
1444 if (iheader->sh_flags & SHF_INFO_LINK)
1445 {
1446 sh_link = find_link (obfd, iheaders[iheader->sh_info],
1447 iheader->sh_info);
1448 if (sh_link != SHN_UNDEF)
1449 oheader->sh_flags |= SHF_INFO_LINK;
1450 }
1451 else
1452 /* No idea what it means - just copy it. */
1453 sh_link = iheader->sh_info;
1454
1455 if (sh_link != SHN_UNDEF)
1456 {
1457 oheader->sh_info = sh_link;
1458 changed = true;
1459 }
1460 else
1461 _bfd_error_handler
1462 /* xgettext:c-format */
1463 (_("%pB: failed to find info section for section %d"), obfd, secnum);
1464 }
1465
1466 return changed;
1467 }
1468
1469 /* Copy the program header and other data from one object module to
1470 another. */
1471
1472 bool
1473 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1474 {
1475 const Elf_Internal_Shdr **iheaders
1476 = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1477 Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1478 const struct elf_backend_data *bed;
1479 unsigned int i;
1480
1481 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1482 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1483 return true;
1484
1485 if (!elf_flags_init (obfd))
1486 {
1487 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1488 elf_flags_init (obfd) = true;
1489 }
1490
1491 elf_gp (obfd) = elf_gp (ibfd);
1492
1493 /* Also copy the EI_OSABI field. */
1494 elf_elfheader (obfd)->e_ident[EI_OSABI] =
1495 elf_elfheader (ibfd)->e_ident[EI_OSABI];
1496
1497 /* If set, copy the EI_ABIVERSION field. */
1498 if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1499 elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1500 = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1501
1502 /* Copy object attributes. */
1503 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1504
1505 if (iheaders == NULL || oheaders == NULL)
1506 return true;
1507
1508 bed = get_elf_backend_data (obfd);
1509
1510 /* Possibly copy other fields in the section header. */
1511 for (i = 1; i < elf_numsections (obfd); i++)
1512 {
1513 unsigned int j;
1514 Elf_Internal_Shdr * oheader = oheaders[i];
1515
1516 /* Ignore ordinary sections. SHT_NOBITS sections are considered however
1517 because of a special case need for generating separate debug info
1518 files. See below for more details. */
1519 if (oheader == NULL
1520 || (oheader->sh_type != SHT_NOBITS
1521 && oheader->sh_type < SHT_LOOS))
1522 continue;
1523
1524 /* Ignore empty sections, and sections whose
1525 fields have already been initialised. */
1526 if (oheader->sh_size == 0
1527 || (oheader->sh_info != 0 && oheader->sh_link != 0))
1528 continue;
1529
1530 /* Scan for the matching section in the input bfd.
1531 First we try for a direct mapping between the input and
1532 output sections. */
1533 for (j = 1; j < elf_numsections (ibfd); j++)
1534 {
1535 const Elf_Internal_Shdr * iheader = iheaders[j];
1536
1537 if (iheader == NULL)
1538 continue;
1539
1540 if (oheader->bfd_section != NULL
1541 && iheader->bfd_section != NULL
1542 && iheader->bfd_section->output_section != NULL
1543 && iheader->bfd_section->output_section == oheader->bfd_section)
1544 {
1545 /* We have found a connection from the input section to
1546 the output section. Attempt to copy the header fields.
1547 If this fails then do not try any further sections -
1548 there should only be a one-to-one mapping between
1549 input and output. */
1550 if (!copy_special_section_fields (ibfd, obfd,
1551 iheader, oheader, i))
1552 j = elf_numsections (ibfd);
1553 break;
1554 }
1555 }
1556
1557 if (j < elf_numsections (ibfd))
1558 continue;
1559
1560 /* That failed. So try to deduce the corresponding input section.
1561 Unfortunately we cannot compare names as the output string table
1562 is empty, so instead we check size, address and type. */
1563 for (j = 1; j < elf_numsections (ibfd); j++)
1564 {
1565 const Elf_Internal_Shdr * iheader = iheaders[j];
1566
1567 if (iheader == NULL)
1568 continue;
1569
1570 /* Try matching fields in the input section's header.
1571 Since --only-keep-debug turns all non-debug sections into
1572 SHT_NOBITS sections, the output SHT_NOBITS type matches any
1573 input type. */
1574 if ((oheader->sh_type == SHT_NOBITS
1575 || iheader->sh_type == oheader->sh_type)
1576 && (iheader->sh_flags & ~ SHF_INFO_LINK)
1577 == (oheader->sh_flags & ~ SHF_INFO_LINK)
1578 && iheader->sh_addralign == oheader->sh_addralign
1579 && iheader->sh_entsize == oheader->sh_entsize
1580 && iheader->sh_size == oheader->sh_size
1581 && iheader->sh_addr == oheader->sh_addr
1582 && (iheader->sh_info != oheader->sh_info
1583 || iheader->sh_link != oheader->sh_link))
1584 {
1585 if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1586 break;
1587 }
1588 }
1589
1590 if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1591 {
1592 /* Final attempt. Call the backend copy function
1593 with a NULL input section. */
1594 (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1595 NULL, oheader);
1596 }
1597 }
1598
1599 return true;
1600 }
1601
1602 static const char *
1603 get_segment_type (unsigned int p_type)
1604 {
1605 const char *pt;
1606 switch (p_type)
1607 {
1608 case PT_NULL: pt = "NULL"; break;
1609 case PT_LOAD: pt = "LOAD"; break;
1610 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1611 case PT_INTERP: pt = "INTERP"; break;
1612 case PT_NOTE: pt = "NOTE"; break;
1613 case PT_SHLIB: pt = "SHLIB"; break;
1614 case PT_PHDR: pt = "PHDR"; break;
1615 case PT_TLS: pt = "TLS"; break;
1616 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1617 case PT_GNU_STACK: pt = "STACK"; break;
1618 case PT_GNU_RELRO: pt = "RELRO"; break;
1619 case PT_GNU_SFRAME: pt = "SFRAME"; break;
1620 default: pt = NULL; break;
1621 }
1622 return pt;
1623 }
1624
1625 /* Print out the program headers. */
1626
1627 bool
1628 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1629 {
1630 FILE *f = (FILE *) farg;
1631 Elf_Internal_Phdr *p;
1632 asection *s;
1633 bfd_byte *dynbuf = NULL;
1634
1635 p = elf_tdata (abfd)->phdr;
1636 if (p != NULL)
1637 {
1638 unsigned int i, c;
1639
1640 fprintf (f, _("\nProgram Header:\n"));
1641 c = elf_elfheader (abfd)->e_phnum;
1642 for (i = 0; i < c; i++, p++)
1643 {
1644 const char *pt = get_segment_type (p->p_type);
1645 char buf[20];
1646
1647 if (pt == NULL)
1648 {
1649 sprintf (buf, "0x%lx", p->p_type);
1650 pt = buf;
1651 }
1652 fprintf (f, "%8s off 0x", pt);
1653 bfd_fprintf_vma (abfd, f, p->p_offset);
1654 fprintf (f, " vaddr 0x");
1655 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1656 fprintf (f, " paddr 0x");
1657 bfd_fprintf_vma (abfd, f, p->p_paddr);
1658 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1659 fprintf (f, " filesz 0x");
1660 bfd_fprintf_vma (abfd, f, p->p_filesz);
1661 fprintf (f, " memsz 0x");
1662 bfd_fprintf_vma (abfd, f, p->p_memsz);
1663 fprintf (f, " flags %c%c%c",
1664 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1665 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1666 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1667 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1668 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1669 fprintf (f, "\n");
1670 }
1671 }
1672
1673 s = bfd_get_section_by_name (abfd, ".dynamic");
1674 if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
1675 {
1676 unsigned int elfsec;
1677 unsigned long shlink;
1678 bfd_byte *extdyn, *extdynend;
1679 size_t extdynsize;
1680 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1681
1682 fprintf (f, _("\nDynamic Section:\n"));
1683
1684 if (!_bfd_elf_mmap_section_contents (abfd, s, &dynbuf))
1685 goto error_return;
1686
1687 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1688 if (elfsec == SHN_BAD)
1689 goto error_return;
1690 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1691
1692 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1693 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1694
1695 for (extdyn = dynbuf, extdynend = dynbuf + s->size;
1696 (size_t) (extdynend - extdyn) >= extdynsize;
1697 extdyn += extdynsize)
1698 {
1699 Elf_Internal_Dyn dyn;
1700 const char *name = "";
1701 char ab[20];
1702 bool stringp;
1703 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1704
1705 (*swap_dyn_in) (abfd, extdyn, &dyn);
1706
1707 if (dyn.d_tag == DT_NULL)
1708 break;
1709
1710 stringp = false;
1711 switch (dyn.d_tag)
1712 {
1713 default:
1714 if (bed->elf_backend_get_target_dtag)
1715 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1716
1717 if (!strcmp (name, ""))
1718 {
1719 sprintf (ab, "%#" PRIx64, (uint64_t) dyn.d_tag);
1720 name = ab;
1721 }
1722 break;
1723
1724 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
1725 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1726 case DT_PLTGOT: name = "PLTGOT"; break;
1727 case DT_HASH: name = "HASH"; break;
1728 case DT_STRTAB: name = "STRTAB"; break;
1729 case DT_SYMTAB: name = "SYMTAB"; break;
1730 case DT_RELA: name = "RELA"; break;
1731 case DT_RELASZ: name = "RELASZ"; break;
1732 case DT_RELAENT: name = "RELAENT"; break;
1733 case DT_STRSZ: name = "STRSZ"; break;
1734 case DT_SYMENT: name = "SYMENT"; break;
1735 case DT_INIT: name = "INIT"; break;
1736 case DT_FINI: name = "FINI"; break;
1737 case DT_SONAME: name = "SONAME"; stringp = true; break;
1738 case DT_RPATH: name = "RPATH"; stringp = true; break;
1739 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1740 case DT_REL: name = "REL"; break;
1741 case DT_RELSZ: name = "RELSZ"; break;
1742 case DT_RELENT: name = "RELENT"; break;
1743 case DT_RELR: name = "RELR"; break;
1744 case DT_RELRSZ: name = "RELRSZ"; break;
1745 case DT_RELRENT: name = "RELRENT"; break;
1746 case DT_PLTREL: name = "PLTREL"; break;
1747 case DT_DEBUG: name = "DEBUG"; break;
1748 case DT_TEXTREL: name = "TEXTREL"; break;
1749 case DT_JMPREL: name = "JMPREL"; break;
1750 case DT_BIND_NOW: name = "BIND_NOW"; break;
1751 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1752 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1753 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1754 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1755 case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
1756 case DT_FLAGS: name = "FLAGS"; break;
1757 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1758 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1759 case DT_CHECKSUM: name = "CHECKSUM"; break;
1760 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1761 case DT_MOVEENT: name = "MOVEENT"; break;
1762 case DT_MOVESZ: name = "MOVESZ"; break;
1763 case DT_FEATURE: name = "FEATURE"; break;
1764 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1765 case DT_SYMINSZ: name = "SYMINSZ"; break;
1766 case DT_SYMINENT: name = "SYMINENT"; break;
1767 case DT_CONFIG: name = "CONFIG"; stringp = true; break;
1768 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
1769 case DT_AUDIT: name = "AUDIT"; stringp = true; break;
1770 case DT_PLTPAD: name = "PLTPAD"; break;
1771 case DT_MOVETAB: name = "MOVETAB"; break;
1772 case DT_SYMINFO: name = "SYMINFO"; break;
1773 case DT_RELACOUNT: name = "RELACOUNT"; break;
1774 case DT_RELCOUNT: name = "RELCOUNT"; break;
1775 case DT_FLAGS_1: name = "FLAGS_1"; break;
1776 case DT_VERSYM: name = "VERSYM"; break;
1777 case DT_VERDEF: name = "VERDEF"; break;
1778 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1779 case DT_VERNEED: name = "VERNEED"; break;
1780 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1781 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
1782 case DT_USED: name = "USED"; break;
1783 case DT_FILTER: name = "FILTER"; stringp = true; break;
1784 case DT_GNU_HASH: name = "GNU_HASH"; break;
1785 }
1786
1787 fprintf (f, " %-20s ", name);
1788 if (! stringp)
1789 {
1790 fprintf (f, "0x");
1791 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1792 }
1793 else
1794 {
1795 const char *string;
1796 unsigned int tagv = dyn.d_un.d_val;
1797
1798 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1799 if (string == NULL)
1800 goto error_return;
1801 fprintf (f, "%s", string);
1802 }
1803 fprintf (f, "\n");
1804 }
1805
1806 _bfd_elf_munmap_section_contents (s, dynbuf);
1807 dynbuf = NULL;
1808 }
1809
1810 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1811 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1812 {
1813 if (! _bfd_elf_slurp_version_tables (abfd, false))
1814 return false;
1815 }
1816
1817 if (elf_dynverdef (abfd) != 0)
1818 {
1819 Elf_Internal_Verdef *t;
1820
1821 fprintf (f, _("\nVersion definitions:\n"));
1822 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1823 {
1824 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1825 t->vd_flags, t->vd_hash,
1826 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1827 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1828 {
1829 Elf_Internal_Verdaux *a;
1830
1831 fprintf (f, "\t");
1832 for (a = t->vd_auxptr->vda_nextptr;
1833 a != NULL;
1834 a = a->vda_nextptr)
1835 fprintf (f, "%s ",
1836 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1837 fprintf (f, "\n");
1838 }
1839 }
1840 }
1841
1842 if (elf_dynverref (abfd) != 0)
1843 {
1844 Elf_Internal_Verneed *t;
1845
1846 fprintf (f, _("\nVersion References:\n"));
1847 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1848 {
1849 Elf_Internal_Vernaux *a;
1850
1851 fprintf (f, _(" required from %s:\n"),
1852 t->vn_filename ? t->vn_filename : "<corrupt>");
1853 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1854 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1855 a->vna_flags, a->vna_other,
1856 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1857 }
1858 }
1859
1860 return true;
1861
1862 error_return:
1863 _bfd_elf_munmap_section_contents (s, dynbuf);
1864 return false;
1865 }
1866
1867 /* Find the file offset corresponding to VMA by using the program
1868 headers. */
1869
1870 static file_ptr
1871 offset_from_vma (Elf_Internal_Phdr *phdrs, size_t phnum, bfd_vma vma,
1872 size_t size, size_t *max_size_p)
1873 {
1874 Elf_Internal_Phdr *seg;
1875 size_t i;
1876
1877 for (seg = phdrs, i = 0; i < phnum; ++seg, ++i)
1878 if (seg->p_type == PT_LOAD
1879 && vma >= (seg->p_vaddr & -seg->p_align)
1880 && vma + size <= seg->p_vaddr + seg->p_filesz)
1881 {
1882 if (max_size_p)
1883 *max_size_p = seg->p_vaddr + seg->p_filesz - vma;
1884 return vma - seg->p_vaddr + seg->p_offset;
1885 }
1886
1887 if (max_size_p)
1888 *max_size_p = 0;
1889 bfd_set_error (bfd_error_invalid_operation);
1890 return (file_ptr) -1;
1891 }
1892
1893 /* Convert hash table to internal form. */
1894
1895 static bfd_vma *
1896 get_hash_table_data (bfd *abfd, bfd_size_type number,
1897 unsigned int ent_size, bfd_size_type filesize)
1898 {
1899 unsigned char *e_data = NULL;
1900 bfd_vma *i_data = NULL;
1901 bfd_size_type size;
1902 void *e_data_addr;
1903 size_t e_data_size ATTRIBUTE_UNUSED;
1904
1905 if (ent_size != 4 && ent_size != 8)
1906 return NULL;
1907
1908 if ((size_t) number != number)
1909 {
1910 bfd_set_error (bfd_error_file_too_big);
1911 return NULL;
1912 }
1913
1914 size = ent_size * number;
1915 /* Be kind to memory checkers (eg valgrind, address sanitizer) by not
1916 attempting to allocate memory when the read is bound to fail. */
1917 if (size > filesize
1918 || number >= ~(size_t) 0 / ent_size
1919 || number >= ~(size_t) 0 / sizeof (*i_data))
1920 {
1921 bfd_set_error (bfd_error_file_too_big);
1922 return NULL;
1923 }
1924
1925 e_data = _bfd_mmap_readonly_temporary (abfd, size, &e_data_addr,
1926 &e_data_size);
1927 if (e_data == NULL)
1928 return NULL;
1929
1930 i_data = (bfd_vma *) bfd_malloc (number * sizeof (*i_data));
1931 if (i_data == NULL)
1932 {
1933 free (e_data);
1934 return NULL;
1935 }
1936
1937 if (ent_size == 4)
1938 while (number--)
1939 i_data[number] = bfd_get_32 (abfd, e_data + number * ent_size);
1940 else
1941 while (number--)
1942 i_data[number] = bfd_get_64 (abfd, e_data + number * ent_size);
1943
1944 _bfd_munmap_readonly_temporary (e_data_addr, e_data_size);
1945 return i_data;
1946 }
1947
1948 /* Address of .MIPS.xhash section. FIXME: What is the best way to
1949 support DT_MIPS_XHASH? */
1950 #define DT_MIPS_XHASH 0x70000036
1951
1952 /* Reconstruct dynamic symbol table from PT_DYNAMIC segment. */
1953
1954 bool
1955 _bfd_elf_get_dynamic_symbols (bfd *abfd, Elf_Internal_Phdr *phdr,
1956 Elf_Internal_Phdr *phdrs, size_t phnum,
1957 bfd_size_type filesize)
1958 {
1959 bfd_byte *extdyn, *extdynend;
1960 size_t extdynsize;
1961 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1962 bool (*swap_symbol_in) (bfd *, const void *, const void *,
1963 Elf_Internal_Sym *);
1964 Elf_Internal_Dyn dyn;
1965 bfd_vma dt_hash = 0;
1966 bfd_vma dt_gnu_hash = 0;
1967 bfd_vma dt_mips_xhash = 0;
1968 bfd_vma dt_strtab = 0;
1969 bfd_vma dt_symtab = 0;
1970 size_t dt_strsz = 0;
1971 bfd_vma dt_versym = 0;
1972 bfd_vma dt_verdef = 0;
1973 bfd_vma dt_verneed = 0;
1974 bfd_byte *dynbuf = NULL;
1975 char *strbuf = NULL;
1976 bfd_vma *gnubuckets = NULL;
1977 bfd_vma *gnuchains = NULL;
1978 bfd_vma *mipsxlat = NULL;
1979 file_ptr saved_filepos, filepos;
1980 bool res = false;
1981 size_t amt;
1982 bfd_byte *esymbuf = NULL, *esym;
1983 bfd_size_type symcount;
1984 Elf_Internal_Sym *isymbuf = NULL;
1985 Elf_Internal_Sym *isym, *isymend;
1986 bfd_byte *versym = NULL;
1987 bfd_byte *verdef = NULL;
1988 bfd_byte *verneed = NULL;
1989 size_t verdef_size = 0;
1990 size_t verneed_size = 0;
1991 size_t extsym_size;
1992 const struct elf_backend_data *bed;
1993 void *dynbuf_addr = NULL;
1994 void *esymbuf_addr = NULL;
1995 size_t dynbuf_size = 0;
1996 size_t esymbuf_size = 0;
1997
1998 /* Return TRUE if symbol table is bad. */
1999 if (elf_bad_symtab (abfd))
2000 return true;
2001
2002 /* Return TRUE if DT_HASH/DT_GNU_HASH have bee processed before. */
2003 if (elf_tdata (abfd)->dt_strtab != NULL)
2004 return true;
2005
2006 bed = get_elf_backend_data (abfd);
2007
2008 /* Save file position for elf_object_p. */
2009 saved_filepos = bfd_tell (abfd);
2010
2011 if (bfd_seek (abfd, phdr->p_offset, SEEK_SET) != 0)
2012 goto error_return;
2013
2014 dynbuf_size = phdr->p_filesz;
2015 dynbuf = _bfd_mmap_readonly_temporary (abfd, dynbuf_size,
2016 &dynbuf_addr, &dynbuf_size);
2017 if (dynbuf == NULL)
2018 goto error_return;
2019
2020 extsym_size = bed->s->sizeof_sym;
2021 extdynsize = bed->s->sizeof_dyn;
2022 swap_dyn_in = bed->s->swap_dyn_in;
2023
2024 extdyn = dynbuf;
2025 if (phdr->p_filesz < extdynsize)
2026 goto error_return;
2027 extdynend = extdyn + phdr->p_filesz;
2028 for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
2029 {
2030 swap_dyn_in (abfd, extdyn, &dyn);
2031
2032 if (dyn.d_tag == DT_NULL)
2033 break;
2034
2035 switch (dyn.d_tag)
2036 {
2037 case DT_HASH:
2038 dt_hash = dyn.d_un.d_val;
2039 break;
2040 case DT_GNU_HASH:
2041 if (bed->elf_machine_code != EM_MIPS
2042 && bed->elf_machine_code != EM_MIPS_RS3_LE)
2043 dt_gnu_hash = dyn.d_un.d_val;
2044 break;
2045 case DT_STRTAB:
2046 dt_strtab = dyn.d_un.d_val;
2047 break;
2048 case DT_SYMTAB:
2049 dt_symtab = dyn.d_un.d_val;
2050 break;
2051 case DT_STRSZ:
2052 dt_strsz = dyn.d_un.d_val;
2053 break;
2054 case DT_SYMENT:
2055 if (dyn.d_un.d_val != extsym_size)
2056 goto error_return;
2057 break;
2058 case DT_VERSYM:
2059 dt_versym = dyn.d_un.d_val;
2060 break;
2061 case DT_VERDEF:
2062 dt_verdef = dyn.d_un.d_val;
2063 break;
2064 case DT_VERNEED:
2065 dt_verneed = dyn.d_un.d_val;
2066 break;
2067 default:
2068 if (dyn.d_tag == DT_MIPS_XHASH
2069 && (bed->elf_machine_code == EM_MIPS
2070 || bed->elf_machine_code == EM_MIPS_RS3_LE))
2071 {
2072 dt_gnu_hash = dyn.d_un.d_val;
2073 dt_mips_xhash = dyn.d_un.d_val;
2074 }
2075 break;
2076 }
2077 }
2078
2079 /* Check if we can reconstruct dynamic symbol table from PT_DYNAMIC
2080 segment. */
2081 if ((!dt_hash && !dt_gnu_hash)
2082 || !dt_strtab
2083 || !dt_symtab
2084 || !dt_strsz)
2085 goto error_return;
2086
2087 /* Get dynamic string table. */
2088 filepos = offset_from_vma (phdrs, phnum, dt_strtab, dt_strsz, NULL);
2089 if (filepos == (file_ptr) -1
2090 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2091 goto error_return;
2092
2093 /* Dynamic string table must be valid until ABFD is closed. */
2094 strbuf = (char *) _bfd_mmap_readonly_persistent (abfd, dt_strsz);
2095 if (strbuf == NULL)
2096 goto error_return;
2097 if (strbuf[dt_strsz - 1] != 0)
2098 {
2099 /* It is an error if a string table is't terminated. */
2100 _bfd_error_handler
2101 /* xgettext:c-format */
2102 (_("%pB: DT_STRTAB table is corrupt"), abfd);
2103 goto error_return;
2104 }
2105
2106 /* Get the real symbol count from DT_HASH or DT_GNU_HASH. Prefer
2107 DT_HASH since it is simpler than DT_GNU_HASH. */
2108 if (dt_hash)
2109 {
2110 unsigned char nb[16];
2111 unsigned int hash_ent_size;
2112
2113 switch (bed->elf_machine_code)
2114 {
2115 case EM_ALPHA:
2116 case EM_S390:
2117 case EM_S390_OLD:
2118 if (bed->s->elfclass == ELFCLASS64)
2119 {
2120 hash_ent_size = 8;
2121 break;
2122 }
2123 /* FALLTHROUGH */
2124 default:
2125 hash_ent_size = 4;
2126 break;
2127 }
2128
2129 filepos = offset_from_vma (phdrs, phnum, dt_hash, sizeof (nb),
2130 NULL);
2131 if (filepos == (file_ptr) -1
2132 || bfd_seek (abfd, filepos, SEEK_SET) != 0
2133 || bfd_read (nb, 2 * hash_ent_size, abfd) != 2 * hash_ent_size)
2134 goto error_return;
2135
2136 /* The number of dynamic symbol table entries equals the number
2137 of chains. */
2138 if (hash_ent_size == 8)
2139 symcount = bfd_get_64 (abfd, nb + hash_ent_size);
2140 else
2141 symcount = bfd_get_32 (abfd, nb + hash_ent_size);
2142 }
2143 else
2144 {
2145 /* For DT_GNU_HASH, only defined symbols with non-STB_LOCAL
2146 bindings are in hash table. Since in dynamic symbol table,
2147 all symbols with STB_LOCAL binding are placed before symbols
2148 with other bindings and all undefined symbols are placed
2149 before defined ones, the highest symbol index in DT_GNU_HASH
2150 is the highest dynamic symbol table index. */
2151 unsigned char nb[16];
2152 bfd_vma ngnubuckets;
2153 bfd_vma gnusymidx;
2154 size_t i, ngnuchains;
2155 bfd_vma maxchain = 0xffffffff, bitmaskwords;
2156 bfd_vma buckets_vma;
2157
2158 filepos = offset_from_vma (phdrs, phnum, dt_gnu_hash,
2159 sizeof (nb), NULL);
2160 if (filepos == (file_ptr) -1
2161 || bfd_seek (abfd, filepos, SEEK_SET) != 0
2162 || bfd_read (nb, sizeof (nb), abfd) != sizeof (nb))
2163 goto error_return;
2164
2165 ngnubuckets = bfd_get_32 (abfd, nb);
2166 gnusymidx = bfd_get_32 (abfd, nb + 4);
2167 bitmaskwords = bfd_get_32 (abfd, nb + 8);
2168 buckets_vma = dt_gnu_hash + 16;
2169 if (bed->s->elfclass == ELFCLASS32)
2170 buckets_vma += bitmaskwords * 4;
2171 else
2172 buckets_vma += bitmaskwords * 8;
2173 filepos = offset_from_vma (phdrs, phnum, buckets_vma, 4, NULL);
2174 if (filepos == (file_ptr) -1
2175 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2176 goto error_return;
2177
2178 gnubuckets = get_hash_table_data (abfd, ngnubuckets, 4, filesize);
2179 if (gnubuckets == NULL)
2180 goto error_return;
2181
2182 for (i = 0; i < ngnubuckets; i++)
2183 if (gnubuckets[i] != 0)
2184 {
2185 if (gnubuckets[i] < gnusymidx)
2186 goto error_return;
2187
2188 if (maxchain == 0xffffffff || gnubuckets[i] > maxchain)
2189 maxchain = gnubuckets[i];
2190 }
2191
2192 if (maxchain == 0xffffffff)
2193 {
2194 symcount = 0;
2195 goto empty_gnu_hash;
2196 }
2197
2198 maxchain -= gnusymidx;
2199 filepos = offset_from_vma (phdrs, phnum,
2200 (buckets_vma +
2201 4 * (ngnubuckets + maxchain)),
2202 4, NULL);
2203 if (filepos == (file_ptr) -1
2204 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2205 goto error_return;
2206
2207 do
2208 {
2209 if (bfd_read (nb, 4, abfd) != 4)
2210 goto error_return;
2211 ++maxchain;
2212 if (maxchain == 0)
2213 goto error_return;
2214 }
2215 while ((bfd_get_32 (abfd, nb) & 1) == 0);
2216
2217 filepos = offset_from_vma (phdrs, phnum,
2218 (buckets_vma + 4 * ngnubuckets),
2219 4, NULL);
2220 if (filepos == (file_ptr) -1
2221 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2222 goto error_return;
2223
2224 gnuchains = get_hash_table_data (abfd, maxchain, 4, filesize);
2225 if (gnuchains == NULL)
2226 goto error_return;
2227 ngnuchains = maxchain;
2228
2229 if (dt_mips_xhash)
2230 {
2231 filepos = offset_from_vma (phdrs, phnum,
2232 (buckets_vma
2233 + 4 * (ngnubuckets + maxchain)),
2234 4, NULL);
2235 if (filepos == (file_ptr) -1
2236 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2237 goto error_return;
2238
2239 mipsxlat = get_hash_table_data (abfd, maxchain, 4, filesize);
2240 if (mipsxlat == NULL)
2241 goto error_return;
2242 }
2243
2244 symcount = 0;
2245 for (i = 0; i < ngnubuckets; ++i)
2246 if (gnubuckets[i] != 0)
2247 {
2248 bfd_vma si = gnubuckets[i];
2249 bfd_vma off = si - gnusymidx;
2250 do
2251 {
2252 if (mipsxlat)
2253 {
2254 if (mipsxlat[off] >= symcount)
2255 symcount = mipsxlat[off] + 1;
2256 }
2257 else
2258 {
2259 if (si >= symcount)
2260 symcount = si + 1;
2261 }
2262 si++;
2263 }
2264 while (off < ngnuchains && (gnuchains[off++] & 1) == 0);
2265 }
2266 }
2267
2268 /* Swap in dynamic symbol table. */
2269 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
2270 {
2271 bfd_set_error (bfd_error_file_too_big);
2272 goto error_return;
2273 }
2274
2275 filepos = offset_from_vma (phdrs, phnum, dt_symtab, amt, NULL);
2276 if (filepos == (file_ptr) -1
2277 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2278 goto error_return;
2279 esymbuf_size = amt;
2280 esymbuf = _bfd_mmap_readonly_temporary (abfd, esymbuf_size,
2281 &esymbuf_addr,
2282 &esymbuf_size);
2283 if (esymbuf == NULL)
2284 goto error_return;
2285
2286 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
2287 {
2288 bfd_set_error (bfd_error_file_too_big);
2289 goto error_return;
2290 }
2291
2292 /* Dynamic symbol table must be valid until ABFD is closed. */
2293 isymbuf = (Elf_Internal_Sym *) bfd_alloc (abfd, amt);
2294 if (isymbuf == NULL)
2295 goto error_return;
2296
2297 swap_symbol_in = bed->s->swap_symbol_in;
2298
2299 /* Convert the symbols to internal form. */
2300 isymend = isymbuf + symcount;
2301 for (esym = esymbuf, isym = isymbuf;
2302 isym < isymend;
2303 esym += extsym_size, isym++)
2304 if (!swap_symbol_in (abfd, esym, NULL, isym)
2305 || isym->st_name >= dt_strsz)
2306 {
2307 bfd_set_error (bfd_error_invalid_operation);
2308 goto error_return;
2309 }
2310
2311 if (dt_versym)
2312 {
2313 /* Swap in DT_VERSYM. */
2314 if (_bfd_mul_overflow (symcount, 2, &amt))
2315 {
2316 bfd_set_error (bfd_error_file_too_big);
2317 goto error_return;
2318 }
2319
2320 filepos = offset_from_vma (phdrs, phnum, dt_versym, amt, NULL);
2321 if (filepos == (file_ptr) -1
2322 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2323 goto error_return;
2324
2325 /* DT_VERSYM info must be valid until ABFD is closed. */
2326 versym = _bfd_mmap_readonly_persistent (abfd, amt);
2327
2328 if (dt_verdef)
2329 {
2330 /* Read in DT_VERDEF. */
2331 filepos = offset_from_vma (phdrs, phnum, dt_verdef,
2332 0, &verdef_size);
2333 if (filepos == (file_ptr) -1
2334 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2335 goto error_return;
2336
2337 /* DT_VERDEF info must be valid until ABFD is closed. */
2338 verdef = _bfd_mmap_readonly_persistent (abfd, verdef_size);
2339 }
2340
2341 if (dt_verneed)
2342 {
2343 /* Read in DT_VERNEED. */
2344 filepos = offset_from_vma (phdrs, phnum, dt_verneed,
2345 0, &verneed_size);
2346 if (filepos == (file_ptr) -1
2347 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2348 goto error_return;
2349
2350 /* DT_VERNEED info must be valid until ABFD is closed. */
2351 verneed = _bfd_mmap_readonly_persistent (abfd, verneed_size);
2352 }
2353 }
2354
2355 empty_gnu_hash:
2356 elf_tdata (abfd)->dt_strtab = strbuf;
2357 elf_tdata (abfd)->dt_strsz = dt_strsz;
2358 elf_tdata (abfd)->dt_symtab = isymbuf;
2359 elf_tdata (abfd)->dt_symtab_count = symcount;
2360 elf_tdata (abfd)->dt_versym = versym;
2361 elf_tdata (abfd)->dt_verdef = verdef;
2362 elf_tdata (abfd)->dt_verneed = verneed;
2363 elf_tdata (abfd)->dt_verdef_count
2364 = verdef_size / sizeof (Elf_External_Verdef);
2365 elf_tdata (abfd)->dt_verneed_count
2366 = verneed_size / sizeof (Elf_External_Verneed);
2367
2368 res = true;
2369
2370 error_return:
2371 /* Restore file position for elf_object_p. */
2372 if (bfd_seek (abfd, saved_filepos, SEEK_SET) != 0)
2373 res = false;
2374 _bfd_munmap_readonly_temporary (dynbuf_addr, dynbuf_size);
2375 _bfd_munmap_readonly_temporary (esymbuf_addr, esymbuf_size);
2376 free (gnubuckets);
2377 free (gnuchains);
2378 free (mipsxlat);
2379 return res;
2380 }
2381
2382 /* Reconstruct section from dynamic symbol. */
2383
2384 asection *
2385 _bfd_elf_get_section_from_dynamic_symbol (bfd *abfd,
2386 Elf_Internal_Sym *isym)
2387 {
2388 asection *sec;
2389 flagword flags;
2390
2391 if (!elf_use_dt_symtab_p (abfd))
2392 return NULL;
2393
2394 flags = SEC_ALLOC | SEC_LOAD;
2395 switch (ELF_ST_TYPE (isym->st_info))
2396 {
2397 case STT_FUNC:
2398 case STT_GNU_IFUNC:
2399 sec = bfd_get_section_by_name (abfd, ".text");
2400 if (sec == NULL)
2401 sec = bfd_make_section_with_flags (abfd,
2402 ".text",
2403 flags | SEC_CODE);
2404 break;
2405 case STT_COMMON:
2406 sec = bfd_com_section_ptr;
2407 break;
2408 case STT_OBJECT:
2409 sec = bfd_get_section_by_name (abfd, ".data");
2410 if (sec == NULL)
2411 sec = bfd_make_section_with_flags (abfd,
2412 ".data",
2413 flags | SEC_DATA);
2414 break;
2415 case STT_TLS:
2416 sec = bfd_get_section_by_name (abfd, ".tdata");
2417 if (sec == NULL)
2418 sec = bfd_make_section_with_flags (abfd,
2419 ".tdata",
2420 (flags
2421 | SEC_DATA
2422 | SEC_THREAD_LOCAL));
2423 break;
2424 default:
2425 sec = bfd_abs_section_ptr;
2426 break;
2427 }
2428
2429 return sec;
2430 }
2431
2432 /* Get version name. If BASE_P is TRUE, return "Base" for VER_FLG_BASE
2433 and return symbol version for symbol version itself. */
2434
2435 const char *
2436 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
2437 bool base_p,
2438 bool *hidden)
2439 {
2440 const char *version_string = NULL;
2441 if ((elf_dynversym (abfd) != 0
2442 && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
2443 || (elf_tdata (abfd)->dt_versym != NULL
2444 && (elf_tdata (abfd)->dt_verdef != NULL
2445 || elf_tdata (abfd)->dt_verneed != NULL)))
2446 {
2447 unsigned int vernum = ((elf_symbol_type *) symbol)->version;
2448
2449 *hidden = (vernum & VERSYM_HIDDEN) != 0;
2450 vernum &= VERSYM_VERSION;
2451
2452 if (vernum == 0)
2453 version_string = "";
2454 else if (vernum == 1
2455 && (vernum > elf_tdata (abfd)->cverdefs
2456 || (elf_tdata (abfd)->verdef[0].vd_flags
2457 == VER_FLG_BASE)))
2458 version_string = base_p ? "Base" : "";
2459 else if (vernum <= elf_tdata (abfd)->cverdefs)
2460 {
2461 const char *nodename
2462 = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
2463 version_string = "";
2464 if (base_p
2465 || nodename == NULL
2466 || symbol->name == NULL
2467 || strcmp (symbol->name, nodename) != 0)
2468 version_string = nodename;
2469 }
2470 else
2471 {
2472 Elf_Internal_Verneed *t;
2473
2474 version_string = _("<corrupt>");
2475 for (t = elf_tdata (abfd)->verref;
2476 t != NULL;
2477 t = t->vn_nextref)
2478 {
2479 Elf_Internal_Vernaux *a;
2480
2481 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2482 {
2483 if (a->vna_other == vernum)
2484 {
2485 *hidden = true;
2486 version_string = a->vna_nodename;
2487 break;
2488 }
2489 }
2490 }
2491 }
2492 }
2493 return version_string;
2494 }
2495
2496 /* Display ELF-specific fields of a symbol. */
2497
2498 void
2499 bfd_elf_print_symbol (bfd *abfd,
2500 void *filep,
2501 asymbol *symbol,
2502 bfd_print_symbol_type how)
2503 {
2504 FILE *file = (FILE *) filep;
2505 switch (how)
2506 {
2507 case bfd_print_symbol_name:
2508 fprintf (file, "%s", symbol->name);
2509 break;
2510 case bfd_print_symbol_more:
2511 fprintf (file, "elf ");
2512 bfd_fprintf_vma (abfd, file, symbol->value);
2513 fprintf (file, " %x", symbol->flags);
2514 break;
2515 case bfd_print_symbol_all:
2516 {
2517 const char *section_name;
2518 const char *name = NULL;
2519 const struct elf_backend_data *bed;
2520 unsigned char st_other;
2521 bfd_vma val;
2522 const char *version_string;
2523 bool hidden;
2524
2525 section_name = symbol->section ? symbol->section->name : "(*none*)";
2526
2527 bed = get_elf_backend_data (abfd);
2528 if (bed->elf_backend_print_symbol_all)
2529 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
2530
2531 if (name == NULL)
2532 {
2533 name = symbol->name;
2534 bfd_print_symbol_vandf (abfd, file, symbol);
2535 }
2536
2537 fprintf (file, " %s\t", section_name);
2538 /* Print the "other" value for a symbol. For common symbols,
2539 we've already printed the size; now print the alignment.
2540 For other symbols, we have no specified alignment, and
2541 we've printed the address; now print the size. */
2542 if (symbol->section && bfd_is_com_section (symbol->section))
2543 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
2544 else
2545 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
2546 bfd_fprintf_vma (abfd, file, val);
2547
2548 /* If we have version information, print it. */
2549 version_string = _bfd_elf_get_symbol_version_string (abfd,
2550 symbol,
2551 true,
2552 &hidden);
2553 if (version_string)
2554 {
2555 if (!hidden)
2556 fprintf (file, " %-11s", version_string);
2557 else
2558 {
2559 int i;
2560
2561 fprintf (file, " (%s)", version_string);
2562 for (i = 10 - strlen (version_string); i > 0; --i)
2563 putc (' ', file);
2564 }
2565 }
2566
2567 /* If the st_other field is not zero, print it. */
2568 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2569
2570 switch (st_other)
2571 {
2572 case 0: break;
2573 case STV_INTERNAL: fprintf (file, " .internal"); break;
2574 case STV_HIDDEN: fprintf (file, " .hidden"); break;
2575 case STV_PROTECTED: fprintf (file, " .protected"); break;
2576 default:
2577 /* Some other non-defined flags are also present, so print
2578 everything hex. */
2579 fprintf (file, " 0x%02x", (unsigned int) st_other);
2580 }
2581
2582 fprintf (file, " %s", name);
2583 }
2584 break;
2585 }
2586 }
2587 \f
2588 /* ELF .o/exec file reading */
2589
2590 /* Create a new bfd section from an ELF section header. */
2591
2592 bool
2593 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2594 {
2595 Elf_Internal_Shdr *hdr;
2596 Elf_Internal_Ehdr *ehdr;
2597 const struct elf_backend_data *bed;
2598 const char *name;
2599 bool ret = true;
2600
2601 if (shindex >= elf_numsections (abfd))
2602 return false;
2603
2604 /* PR17512: A corrupt ELF binary might contain a loop of sections via
2605 sh_link or sh_info. Detect this here, by refusing to load a
2606 section that we are already in the process of loading. */
2607 if (elf_tdata (abfd)->being_created[shindex])
2608 {
2609 _bfd_error_handler
2610 (_("%pB: warning: loop in section dependencies detected"), abfd);
2611 return false;
2612 }
2613 elf_tdata (abfd)->being_created[shindex] = true;
2614
2615 hdr = elf_elfsections (abfd)[shindex];
2616 ehdr = elf_elfheader (abfd);
2617 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2618 hdr->sh_name);
2619 if (name == NULL)
2620 goto fail;
2621
2622 bed = get_elf_backend_data (abfd);
2623 switch (hdr->sh_type)
2624 {
2625 case SHT_NULL:
2626 /* Inactive section. Throw it away. */
2627 goto success;
2628
2629 case SHT_PROGBITS: /* Normal section with contents. */
2630 case SHT_NOBITS: /* .bss section. */
2631 case SHT_HASH: /* .hash section. */
2632 case SHT_NOTE: /* .note section. */
2633 case SHT_INIT_ARRAY: /* .init_array section. */
2634 case SHT_FINI_ARRAY: /* .fini_array section. */
2635 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
2636 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
2637 case SHT_GNU_HASH: /* .gnu.hash section. */
2638 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2639 goto success;
2640
2641 case SHT_DYNAMIC: /* Dynamic linking information. */
2642 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2643 goto fail;
2644
2645 if (hdr->sh_link > elf_numsections (abfd))
2646 {
2647 /* PR 10478: Accept Solaris binaries with a sh_link field
2648 set to SHN_BEFORE (LORESERVE) or SHN_AFTER (LORESERVE+1). */
2649 switch (bfd_get_arch (abfd))
2650 {
2651 case bfd_arch_i386:
2652 case bfd_arch_sparc:
2653 if (hdr->sh_link == (SHN_LORESERVE & 0xffff)
2654 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff))
2655 break;
2656 /* Otherwise fall through. */
2657 default:
2658 goto fail;
2659 }
2660 }
2661 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2662 goto fail;
2663 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2664 {
2665 Elf_Internal_Shdr *dynsymhdr;
2666
2667 /* The shared libraries distributed with hpux11 have a bogus
2668 sh_link field for the ".dynamic" section. Find the
2669 string table for the ".dynsym" section instead. */
2670 if (elf_dynsymtab (abfd) != 0)
2671 {
2672 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2673 hdr->sh_link = dynsymhdr->sh_link;
2674 }
2675 else
2676 {
2677 unsigned int i, num_sec;
2678
2679 num_sec = elf_numsections (abfd);
2680 for (i = 1; i < num_sec; i++)
2681 {
2682 dynsymhdr = elf_elfsections (abfd)[i];
2683 if (dynsymhdr->sh_type == SHT_DYNSYM)
2684 {
2685 hdr->sh_link = dynsymhdr->sh_link;
2686 break;
2687 }
2688 }
2689 }
2690 }
2691 goto success;
2692
2693 case SHT_SYMTAB: /* A symbol table. */
2694 if (elf_onesymtab (abfd) == shindex)
2695 goto success;
2696
2697 if (hdr->sh_entsize != bed->s->sizeof_sym)
2698 goto fail;
2699
2700 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2701 {
2702 if (hdr->sh_size != 0)
2703 goto fail;
2704 /* Some assemblers erroneously set sh_info to one with a
2705 zero sh_size. ld sees this as a global symbol count
2706 of (unsigned) -1. Fix it here. */
2707 hdr->sh_info = 0;
2708 goto success;
2709 }
2710
2711 /* PR 18854: A binary might contain more than one symbol table.
2712 Unusual, but possible. Warn, but continue. */
2713 if (elf_onesymtab (abfd) != 0)
2714 {
2715 _bfd_error_handler
2716 /* xgettext:c-format */
2717 (_("%pB: warning: multiple symbol tables detected"
2718 " - ignoring the table in section %u"),
2719 abfd, shindex);
2720 goto success;
2721 }
2722 elf_onesymtab (abfd) = shindex;
2723 elf_symtab_hdr (abfd) = *hdr;
2724 elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2725 abfd->flags |= HAS_SYMS;
2726
2727 /* Sometimes a shared object will map in the symbol table. If
2728 SHF_ALLOC is set, and this is a shared object, then we also
2729 treat this section as a BFD section. We can not base the
2730 decision purely on SHF_ALLOC, because that flag is sometimes
2731 set in a relocatable object file, which would confuse the
2732 linker. */
2733 if ((hdr->sh_flags & SHF_ALLOC) != 0
2734 && (abfd->flags & DYNAMIC) != 0
2735 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2736 shindex))
2737 goto fail;
2738
2739 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2740 can't read symbols without that section loaded as well. It
2741 is most likely specified by the next section header. */
2742 {
2743 elf_section_list * entry;
2744 unsigned int i, num_sec;
2745
2746 for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2747 if (entry->hdr.sh_link == shindex)
2748 goto success;
2749
2750 num_sec = elf_numsections (abfd);
2751 for (i = shindex + 1; i < num_sec; i++)
2752 {
2753 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2754
2755 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2756 && hdr2->sh_link == shindex)
2757 break;
2758 }
2759
2760 if (i == num_sec)
2761 for (i = 1; i < shindex; i++)
2762 {
2763 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2764
2765 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2766 && hdr2->sh_link == shindex)
2767 break;
2768 }
2769
2770 if (i != shindex)
2771 ret = bfd_section_from_shdr (abfd, i);
2772 /* else FIXME: we have failed to find the symbol table.
2773 Should we issue an error? */
2774 goto success;
2775 }
2776
2777 case SHT_DYNSYM: /* A dynamic symbol table. */
2778 if (elf_dynsymtab (abfd) == shindex)
2779 goto success;
2780
2781 if (hdr->sh_entsize != bed->s->sizeof_sym)
2782 goto fail;
2783
2784 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2785 {
2786 if (hdr->sh_size != 0)
2787 goto fail;
2788
2789 /* Some linkers erroneously set sh_info to one with a
2790 zero sh_size. ld sees this as a global symbol count
2791 of (unsigned) -1. Fix it here. */
2792 hdr->sh_info = 0;
2793 goto success;
2794 }
2795
2796 /* PR 18854: A binary might contain more than one dynamic symbol table.
2797 Unusual, but possible. Warn, but continue. */
2798 if (elf_dynsymtab (abfd) != 0)
2799 {
2800 _bfd_error_handler
2801 /* xgettext:c-format */
2802 (_("%pB: warning: multiple dynamic symbol tables detected"
2803 " - ignoring the table in section %u"),
2804 abfd, shindex);
2805 goto success;
2806 }
2807 elf_dynsymtab (abfd) = shindex;
2808 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2809 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2810 abfd->flags |= HAS_SYMS;
2811
2812 /* Besides being a symbol table, we also treat this as a regular
2813 section, so that objcopy can handle it. */
2814 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2815 goto success;
2816
2817 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections. */
2818 {
2819 elf_section_list * entry;
2820
2821 for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2822 if (entry->ndx == shindex)
2823 goto success;
2824
2825 entry = bfd_alloc (abfd, sizeof (*entry));
2826 if (entry == NULL)
2827 goto fail;
2828 entry->ndx = shindex;
2829 entry->hdr = * hdr;
2830 entry->next = elf_symtab_shndx_list (abfd);
2831 elf_symtab_shndx_list (abfd) = entry;
2832 elf_elfsections (abfd)[shindex] = & entry->hdr;
2833 goto success;
2834 }
2835
2836 case SHT_STRTAB: /* A string table. */
2837 if (hdr->bfd_section != NULL)
2838 goto success;
2839
2840 if (ehdr->e_shstrndx == shindex)
2841 {
2842 elf_tdata (abfd)->shstrtab_hdr = *hdr;
2843 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2844 goto success;
2845 }
2846
2847 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2848 {
2849 symtab_strtab:
2850 elf_tdata (abfd)->strtab_hdr = *hdr;
2851 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2852 goto success;
2853 }
2854
2855 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2856 {
2857 dynsymtab_strtab:
2858 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2859 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2860 elf_elfsections (abfd)[shindex] = hdr;
2861 /* We also treat this as a regular section, so that objcopy
2862 can handle it. */
2863 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2864 shindex);
2865 goto success;
2866 }
2867
2868 /* If the string table isn't one of the above, then treat it as a
2869 regular section. We need to scan all the headers to be sure,
2870 just in case this strtab section appeared before the above. */
2871 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2872 {
2873 unsigned int i, num_sec;
2874
2875 num_sec = elf_numsections (abfd);
2876 for (i = 1; i < num_sec; i++)
2877 {
2878 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2879 if (hdr2->sh_link == shindex)
2880 {
2881 /* Prevent endless recursion on broken objects. */
2882 if (i == shindex)
2883 goto fail;
2884 if (! bfd_section_from_shdr (abfd, i))
2885 goto fail;
2886 if (elf_onesymtab (abfd) == i)
2887 goto symtab_strtab;
2888 if (elf_dynsymtab (abfd) == i)
2889 goto dynsymtab_strtab;
2890 }
2891 }
2892 }
2893 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2894 goto success;
2895
2896 case SHT_REL:
2897 case SHT_RELA:
2898 case SHT_RELR:
2899 /* *These* do a lot of work -- but build no sections! */
2900 {
2901 asection *target_sect;
2902 Elf_Internal_Shdr *hdr2, **p_hdr;
2903 unsigned int num_sec = elf_numsections (abfd);
2904 struct bfd_elf_section_data *esdt;
2905 bfd_size_type size;
2906
2907 if (hdr->sh_type == SHT_REL)
2908 size = bed->s->sizeof_rel;
2909 else if (hdr->sh_type == SHT_RELA)
2910 size = bed->s->sizeof_rela;
2911 else
2912 size = bed->s->arch_size / 8;
2913 if (hdr->sh_entsize != size)
2914 goto fail;
2915
2916 /* Check for a bogus link to avoid crashing. */
2917 if (hdr->sh_link >= num_sec)
2918 {
2919 _bfd_error_handler
2920 /* xgettext:c-format */
2921 (_("%pB: invalid link %u for reloc section %s (index %u)"),
2922 abfd, hdr->sh_link, name, shindex);
2923 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2924 goto success;
2925 }
2926
2927 /* Get the symbol table. */
2928 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2929 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2930 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2931 goto fail;
2932
2933 /* If this is an alloc section in an executable or shared
2934 library, or the reloc section does not use the main symbol
2935 table we don't treat it as a reloc section. BFD can't
2936 adequately represent such a section, so at least for now,
2937 we don't try. We just present it as a normal section. We
2938 also can't use it as a reloc section if it points to the
2939 null section, an invalid section, another reloc section, or
2940 its sh_link points to the null section. */
2941 if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2942 && (hdr->sh_flags & SHF_ALLOC) != 0)
2943 || (hdr->sh_flags & SHF_COMPRESSED) != 0
2944 || hdr->sh_type == SHT_RELR
2945 || hdr->sh_link == SHN_UNDEF
2946 || hdr->sh_link != elf_onesymtab (abfd)
2947 || hdr->sh_info == SHN_UNDEF
2948 || hdr->sh_info >= num_sec
2949 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2950 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2951 {
2952 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2953 goto success;
2954 }
2955
2956 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2957 goto fail;
2958
2959 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2960 if (target_sect == NULL)
2961 goto fail;
2962
2963 esdt = elf_section_data (target_sect);
2964 if (hdr->sh_type == SHT_RELA)
2965 p_hdr = &esdt->rela.hdr;
2966 else
2967 p_hdr = &esdt->rel.hdr;
2968
2969 /* PR 17512: file: 0b4f81b7.
2970 Also see PR 24456, for a file which deliberately has two reloc
2971 sections. */
2972 if (*p_hdr != NULL)
2973 {
2974 if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2975 {
2976 _bfd_error_handler
2977 /* xgettext:c-format */
2978 (_("%pB: warning: secondary relocation section '%s' "
2979 "for section %pA found - ignoring"),
2980 abfd, name, target_sect);
2981 }
2982 else
2983 esdt->has_secondary_relocs = true;
2984 goto success;
2985 }
2986
2987 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2988 if (hdr2 == NULL)
2989 goto fail;
2990 *hdr2 = *hdr;
2991 *p_hdr = hdr2;
2992 elf_elfsections (abfd)[shindex] = hdr2;
2993 target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2994 * bed->s->int_rels_per_ext_rel);
2995 target_sect->flags |= SEC_RELOC;
2996 target_sect->relocation = NULL;
2997 target_sect->rel_filepos = hdr->sh_offset;
2998 /* In the section to which the relocations apply, mark whether
2999 its relocations are of the REL or RELA variety. */
3000 if (hdr->sh_size != 0)
3001 {
3002 if (hdr->sh_type == SHT_RELA)
3003 target_sect->use_rela_p = 1;
3004 }
3005 abfd->flags |= HAS_RELOC;
3006 goto success;
3007 }
3008
3009 case SHT_GNU_verdef:
3010 if (hdr->sh_info != 0)
3011 elf_dynverdef (abfd) = shindex;
3012 elf_tdata (abfd)->dynverdef_hdr = *hdr;
3013 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3014 goto success;
3015
3016 case SHT_GNU_versym:
3017 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
3018 goto fail;
3019
3020 elf_dynversym (abfd) = shindex;
3021 elf_tdata (abfd)->dynversym_hdr = *hdr;
3022 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3023 goto success;
3024
3025 case SHT_GNU_verneed:
3026 if (hdr->sh_info != 0)
3027 elf_dynverref (abfd) = shindex;
3028 elf_tdata (abfd)->dynverref_hdr = *hdr;
3029 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3030 goto success;
3031
3032 case SHT_SHLIB:
3033 goto success;
3034
3035 case SHT_GROUP:
3036 if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
3037 goto fail;
3038
3039 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
3040 goto fail;
3041
3042 goto success;
3043
3044 default:
3045 /* Possibly an attributes section. */
3046 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
3047 || hdr->sh_type == bed->obj_attrs_section_type)
3048 {
3049 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
3050 goto fail;
3051 _bfd_elf_parse_attributes (abfd, hdr);
3052 goto success;
3053 }
3054
3055 /* Check for any processor-specific section types. */
3056 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
3057 goto success;
3058
3059 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
3060 {
3061 if ((hdr->sh_flags & SHF_ALLOC) != 0)
3062 /* FIXME: How to properly handle allocated section reserved
3063 for applications? */
3064 _bfd_error_handler
3065 /* xgettext:c-format */
3066 (_("%pB: unknown type [%#x] section `%s'"),
3067 abfd, hdr->sh_type, name);
3068 else
3069 {
3070 /* Allow sections reserved for applications. */
3071 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3072 goto success;
3073 }
3074 }
3075 else if (hdr->sh_type >= SHT_LOPROC
3076 && hdr->sh_type <= SHT_HIPROC)
3077 /* FIXME: We should handle this section. */
3078 _bfd_error_handler
3079 /* xgettext:c-format */
3080 (_("%pB: unknown type [%#x] section `%s'"),
3081 abfd, hdr->sh_type, name);
3082 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
3083 {
3084 /* Unrecognised OS-specific sections. */
3085 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
3086 /* SHF_OS_NONCONFORMING indicates that special knowledge is
3087 required to correctly process the section and the file should
3088 be rejected with an error message. */
3089 _bfd_error_handler
3090 /* xgettext:c-format */
3091 (_("%pB: unknown type [%#x] section `%s'"),
3092 abfd, hdr->sh_type, name);
3093 else
3094 {
3095 /* Otherwise it should be processed. */
3096 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3097 goto success;
3098 }
3099 }
3100 else
3101 /* FIXME: We should handle this section. */
3102 _bfd_error_handler
3103 /* xgettext:c-format */
3104 (_("%pB: unknown type [%#x] section `%s'"),
3105 abfd, hdr->sh_type, name);
3106
3107 goto fail;
3108 }
3109
3110 fail:
3111 ret = false;
3112 success:
3113 elf_tdata (abfd)->being_created[shindex] = false;
3114 return ret;
3115 }
3116
3117 /* Return the local symbol specified by ABFD, R_SYMNDX. */
3118
3119 Elf_Internal_Sym *
3120 bfd_sym_from_r_symndx (struct sym_cache *cache,
3121 bfd *abfd,
3122 unsigned long r_symndx)
3123 {
3124 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
3125
3126 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
3127 {
3128 Elf_Internal_Shdr *symtab_hdr;
3129 unsigned char esym[sizeof (Elf64_External_Sym)];
3130 Elf_External_Sym_Shndx eshndx;
3131
3132 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3133 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
3134 &cache->sym[ent], esym, &eshndx) == NULL)
3135 return NULL;
3136
3137 if (cache->abfd != abfd)
3138 {
3139 memset (cache->indx, -1, sizeof (cache->indx));
3140 cache->abfd = abfd;
3141 }
3142 cache->indx[ent] = r_symndx;
3143 }
3144
3145 return &cache->sym[ent];
3146 }
3147
3148 /* Given an ELF section number, retrieve the corresponding BFD
3149 section. */
3150
3151 asection *
3152 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
3153 {
3154 if (sec_index >= elf_numsections (abfd))
3155 return NULL;
3156 return elf_elfsections (abfd)[sec_index]->bfd_section;
3157 }
3158
3159 static const struct bfd_elf_special_section special_sections_b[] =
3160 {
3161 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3162 { NULL, 0, 0, 0, 0 }
3163 };
3164
3165 static const struct bfd_elf_special_section special_sections_c[] =
3166 {
3167 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
3168 { STRING_COMMA_LEN (".ctf"), 0, SHT_PROGBITS, 0 },
3169 { NULL, 0, 0, 0, 0 }
3170 };
3171
3172 static const struct bfd_elf_special_section special_sections_d[] =
3173 {
3174 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3175 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3176 /* There are more DWARF sections than these, but they needn't be added here
3177 unless you have to cope with broken compilers that don't emit section
3178 attributes or you want to help the user writing assembler. */
3179 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
3180 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
3181 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
3182 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
3183 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
3184 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
3185 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
3186 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
3187 { NULL, 0, 0, 0, 0 }
3188 };
3189
3190 static const struct bfd_elf_special_section special_sections_f[] =
3191 {
3192 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3193 { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
3194 { NULL, 0 , 0, 0, 0 }
3195 };
3196
3197 static const struct bfd_elf_special_section special_sections_g[] =
3198 {
3199 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3200 { STRING_COMMA_LEN (".gnu.linkonce.n"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3201 { STRING_COMMA_LEN (".gnu.linkonce.p"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3202 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE },
3203 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3204 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
3205 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
3206 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
3207 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
3208 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
3209 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
3210 { NULL, 0, 0, 0, 0 }
3211 };
3212
3213 static const struct bfd_elf_special_section special_sections_h[] =
3214 {
3215 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
3216 { NULL, 0, 0, 0, 0 }
3217 };
3218
3219 static const struct bfd_elf_special_section special_sections_i[] =
3220 {
3221 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3222 { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
3223 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
3224 { NULL, 0, 0, 0, 0 }
3225 };
3226
3227 static const struct bfd_elf_special_section special_sections_l[] =
3228 {
3229 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
3230 { NULL, 0, 0, 0, 0 }
3231 };
3232
3233 static const struct bfd_elf_special_section special_sections_n[] =
3234 {
3235 { STRING_COMMA_LEN (".noinit"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3236 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
3237 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
3238 { NULL, 0, 0, 0, 0 }
3239 };
3240
3241 static const struct bfd_elf_special_section special_sections_p[] =
3242 {
3243 { STRING_COMMA_LEN (".persistent.bss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3244 { STRING_COMMA_LEN (".persistent"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3245 { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
3246 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3247 { NULL, 0, 0, 0, 0 }
3248 };
3249
3250 static const struct bfd_elf_special_section special_sections_r[] =
3251 {
3252 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
3253 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
3254 { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
3255 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
3256 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
3257 { NULL, 0, 0, 0, 0 }
3258 };
3259
3260 static const struct bfd_elf_special_section special_sections_s[] =
3261 {
3262 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
3263 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
3264 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
3265 /* See struct bfd_elf_special_section declaration for the semantics of
3266 this special case where .prefix_length != strlen (.prefix). */
3267 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
3268 { NULL, 0, 0, 0, 0 }
3269 };
3270
3271 static const struct bfd_elf_special_section special_sections_t[] =
3272 {
3273 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3274 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
3275 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
3276 { NULL, 0, 0, 0, 0 }
3277 };
3278
3279 static const struct bfd_elf_special_section special_sections_z[] =
3280 {
3281 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
3282 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
3283 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
3284 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
3285 { NULL, 0, 0, 0, 0 }
3286 };
3287
3288 static const struct bfd_elf_special_section * const special_sections[] =
3289 {
3290 special_sections_b, /* 'b' */
3291 special_sections_c, /* 'c' */
3292 special_sections_d, /* 'd' */
3293 NULL, /* 'e' */
3294 special_sections_f, /* 'f' */
3295 special_sections_g, /* 'g' */
3296 special_sections_h, /* 'h' */
3297 special_sections_i, /* 'i' */
3298 NULL, /* 'j' */
3299 NULL, /* 'k' */
3300 special_sections_l, /* 'l' */
3301 NULL, /* 'm' */
3302 special_sections_n, /* 'n' */
3303 NULL, /* 'o' */
3304 special_sections_p, /* 'p' */
3305 NULL, /* 'q' */
3306 special_sections_r, /* 'r' */
3307 special_sections_s, /* 's' */
3308 special_sections_t, /* 't' */
3309 NULL, /* 'u' */
3310 NULL, /* 'v' */
3311 NULL, /* 'w' */
3312 NULL, /* 'x' */
3313 NULL, /* 'y' */
3314 special_sections_z /* 'z' */
3315 };
3316
3317 const struct bfd_elf_special_section *
3318 _bfd_elf_get_special_section (const char *name,
3319 const struct bfd_elf_special_section *spec,
3320 unsigned int rela)
3321 {
3322 int i;
3323 int len;
3324
3325 len = strlen (name);
3326
3327 for (i = 0; spec[i].prefix != NULL; i++)
3328 {
3329 int suffix_len;
3330 int prefix_len = spec[i].prefix_length;
3331
3332 if (len < prefix_len)
3333 continue;
3334 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
3335 continue;
3336
3337 suffix_len = spec[i].suffix_length;
3338 if (suffix_len <= 0)
3339 {
3340 if (name[prefix_len] != 0)
3341 {
3342 if (suffix_len == 0)
3343 continue;
3344 if (name[prefix_len] != '.'
3345 && (suffix_len == -2
3346 || (rela && spec[i].type == SHT_REL)))
3347 continue;
3348 }
3349 }
3350 else
3351 {
3352 if (len < prefix_len + suffix_len)
3353 continue;
3354 if (memcmp (name + len - suffix_len,
3355 spec[i].prefix + prefix_len,
3356 suffix_len) != 0)
3357 continue;
3358 }
3359 return &spec[i];
3360 }
3361
3362 return NULL;
3363 }
3364
3365 const struct bfd_elf_special_section *
3366 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
3367 {
3368 int i;
3369 const struct bfd_elf_special_section *spec;
3370 const struct elf_backend_data *bed;
3371
3372 /* See if this is one of the special sections. */
3373 if (sec->name == NULL)
3374 return NULL;
3375
3376 bed = get_elf_backend_data (abfd);
3377 spec = bed->special_sections;
3378 if (spec)
3379 {
3380 spec = _bfd_elf_get_special_section (sec->name,
3381 bed->special_sections,
3382 sec->use_rela_p);
3383 if (spec != NULL)
3384 return spec;
3385 }
3386
3387 if (sec->name[0] != '.')
3388 return NULL;
3389
3390 i = sec->name[1] - 'b';
3391 if (i < 0 || i > 'z' - 'b')
3392 return NULL;
3393
3394 spec = special_sections[i];
3395
3396 if (spec == NULL)
3397 return NULL;
3398
3399 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
3400 }
3401
3402 bool
3403 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
3404 {
3405 struct bfd_elf_section_data *sdata;
3406 const struct elf_backend_data *bed;
3407 const struct bfd_elf_special_section *ssect;
3408
3409 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
3410 if (sdata == NULL)
3411 {
3412 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
3413 sizeof (*sdata));
3414 if (sdata == NULL)
3415 return false;
3416 sec->used_by_bfd = sdata;
3417 }
3418
3419 /* Indicate whether or not this section should use RELA relocations. */
3420 bed = get_elf_backend_data (abfd);
3421 sec->use_rela_p = bed->default_use_rela_p;
3422
3423 /* Set up ELF section type and flags for newly created sections, if
3424 there is an ABI mandated section. */
3425 ssect = (*bed->get_sec_type_attr) (abfd, sec);
3426 if (ssect != NULL)
3427 {
3428 elf_section_type (sec) = ssect->type;
3429 elf_section_flags (sec) = ssect->attr;
3430 }
3431
3432 return _bfd_generic_new_section_hook (abfd, sec);
3433 }
3434
3435 /* Create a new bfd section from an ELF program header.
3436
3437 Since program segments have no names, we generate a synthetic name
3438 of the form segment<NUM>, where NUM is generally the index in the
3439 program header table. For segments that are split (see below) we
3440 generate the names segment<NUM>a and segment<NUM>b.
3441
3442 Note that some program segments may have a file size that is different than
3443 (less than) the memory size. All this means is that at execution the
3444 system must allocate the amount of memory specified by the memory size,
3445 but only initialize it with the first "file size" bytes read from the
3446 file. This would occur for example, with program segments consisting
3447 of combined data+bss.
3448
3449 To handle the above situation, this routine generates TWO bfd sections
3450 for the single program segment. The first has the length specified by
3451 the file size of the segment, and the second has the length specified
3452 by the difference between the two sizes. In effect, the segment is split
3453 into its initialized and uninitialized parts. */
3454
3455 bool
3456 _bfd_elf_make_section_from_phdr (bfd *abfd,
3457 Elf_Internal_Phdr *hdr,
3458 int hdr_index,
3459 const char *type_name)
3460 {
3461 asection *newsect;
3462 char *name;
3463 char namebuf[64];
3464 size_t len;
3465 int split;
3466 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
3467
3468 split = ((hdr->p_memsz > 0)
3469 && (hdr->p_filesz > 0)
3470 && (hdr->p_memsz > hdr->p_filesz));
3471
3472 if (hdr->p_filesz > 0)
3473 {
3474 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
3475 len = strlen (namebuf) + 1;
3476 name = (char *) bfd_alloc (abfd, len);
3477 if (!name)
3478 return false;
3479 memcpy (name, namebuf, len);
3480 newsect = bfd_make_section (abfd, name);
3481 if (newsect == NULL)
3482 return false;
3483 newsect->vma = hdr->p_vaddr / opb;
3484 newsect->lma = hdr->p_paddr / opb;
3485 newsect->size = hdr->p_filesz;
3486 newsect->filepos = hdr->p_offset;
3487 newsect->flags |= SEC_HAS_CONTENTS;
3488 newsect->alignment_power = bfd_log2 (hdr->p_align);
3489 if (hdr->p_type == PT_LOAD)
3490 {
3491 newsect->flags |= SEC_ALLOC;
3492 newsect->flags |= SEC_LOAD;
3493 if (hdr->p_flags & PF_X)
3494 {
3495 /* FIXME: all we known is that it has execute PERMISSION,
3496 may be data. */
3497 newsect->flags |= SEC_CODE;
3498 }
3499 }
3500 if (!(hdr->p_flags & PF_W))
3501 {
3502 newsect->flags |= SEC_READONLY;
3503 }
3504 }
3505
3506 if (hdr->p_memsz > hdr->p_filesz)
3507 {
3508 bfd_vma align;
3509
3510 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
3511 len = strlen (namebuf) + 1;
3512 name = (char *) bfd_alloc (abfd, len);
3513 if (!name)
3514 return false;
3515 memcpy (name, namebuf, len);
3516 newsect = bfd_make_section (abfd, name);
3517 if (newsect == NULL)
3518 return false;
3519 newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
3520 newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
3521 newsect->size = hdr->p_memsz - hdr->p_filesz;
3522 newsect->filepos = hdr->p_offset + hdr->p_filesz;
3523 align = newsect->vma & -newsect->vma;
3524 if (align == 0 || align > hdr->p_align)
3525 align = hdr->p_align;
3526 newsect->alignment_power = bfd_log2 (align);
3527 if (hdr->p_type == PT_LOAD)
3528 {
3529 newsect->flags |= SEC_ALLOC;
3530 if (hdr->p_flags & PF_X)
3531 newsect->flags |= SEC_CODE;
3532 }
3533 if (!(hdr->p_flags & PF_W))
3534 newsect->flags |= SEC_READONLY;
3535 }
3536
3537 return true;
3538 }
3539
3540 static bool
3541 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3542 {
3543 /* The return value is ignored. Build-ids are considered optional. */
3544 if (templ->xvec->flavour == bfd_target_elf_flavour)
3545 return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3546 (templ, offset);
3547 return false;
3548 }
3549
3550 bool
3551 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3552 {
3553 const struct elf_backend_data *bed;
3554
3555 switch (hdr->p_type)
3556 {
3557 case PT_NULL:
3558 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3559
3560 case PT_LOAD:
3561 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3562 return false;
3563 if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3564 _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3565 return true;
3566
3567 case PT_DYNAMIC:
3568 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3569
3570 case PT_INTERP:
3571 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3572
3573 case PT_NOTE:
3574 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3575 return false;
3576 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3577 hdr->p_align))
3578 return false;
3579 return true;
3580
3581 case PT_SHLIB:
3582 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3583
3584 case PT_PHDR:
3585 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3586
3587 case PT_GNU_EH_FRAME:
3588 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3589 "eh_frame_hdr");
3590
3591 case PT_GNU_STACK:
3592 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3593
3594 case PT_GNU_RELRO:
3595 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3596
3597 case PT_GNU_SFRAME:
3598 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3599 "sframe");
3600
3601 default:
3602 /* Check for any processor-specific program segment types. */
3603 bed = get_elf_backend_data (abfd);
3604 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3605 }
3606 }
3607
3608 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3609 REL or RELA. */
3610
3611 Elf_Internal_Shdr *
3612 _bfd_elf_single_rel_hdr (asection *sec)
3613 {
3614 if (elf_section_data (sec)->rel.hdr)
3615 {
3616 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3617 return elf_section_data (sec)->rel.hdr;
3618 }
3619 else
3620 return elf_section_data (sec)->rela.hdr;
3621 }
3622
3623 static bool
3624 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3625 Elf_Internal_Shdr *rel_hdr,
3626 const char *sec_name,
3627 bool use_rela_p)
3628 {
3629 char *name = (char *) bfd_alloc (abfd,
3630 sizeof ".rela" + strlen (sec_name));
3631 if (name == NULL)
3632 return false;
3633
3634 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3635 rel_hdr->sh_name =
3636 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3637 false);
3638 if (rel_hdr->sh_name == (unsigned int) -1)
3639 return false;
3640
3641 return true;
3642 }
3643
3644 /* Allocate and initialize a section-header for a new reloc section,
3645 containing relocations against ASECT. It is stored in RELDATA. If
3646 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3647 relocations. */
3648
3649 static bool
3650 _bfd_elf_init_reloc_shdr (bfd *abfd,
3651 struct bfd_elf_section_reloc_data *reldata,
3652 const char *sec_name,
3653 bool use_rela_p,
3654 bool delay_st_name_p)
3655 {
3656 Elf_Internal_Shdr *rel_hdr;
3657 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3658
3659 BFD_ASSERT (reldata->hdr == NULL);
3660 rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3661 if (rel_hdr == NULL)
3662 return false;
3663 reldata->hdr = rel_hdr;
3664
3665 if (delay_st_name_p)
3666 rel_hdr->sh_name = (unsigned int) -1;
3667 else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3668 use_rela_p))
3669 return false;
3670 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3671 rel_hdr->sh_entsize = (use_rela_p
3672 ? bed->s->sizeof_rela
3673 : bed->s->sizeof_rel);
3674 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3675 rel_hdr->sh_flags = 0;
3676 rel_hdr->sh_addr = 0;
3677 rel_hdr->sh_size = 0;
3678 rel_hdr->sh_offset = 0;
3679
3680 return true;
3681 }
3682
3683 /* Return the default section type based on the passed in section flags. */
3684
3685 int
3686 bfd_elf_get_default_section_type (flagword flags)
3687 {
3688 if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3689 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3690 return SHT_NOBITS;
3691 return SHT_PROGBITS;
3692 }
3693
3694 struct fake_section_arg
3695 {
3696 struct bfd_link_info *link_info;
3697 bool failed;
3698 };
3699
3700 /* Set up an ELF internal section header for a section. */
3701
3702 static void
3703 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3704 {
3705 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3706 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3707 struct bfd_elf_section_data *esd = elf_section_data (asect);
3708 Elf_Internal_Shdr *this_hdr;
3709 unsigned int sh_type;
3710 const char *name = asect->name;
3711 bool delay_st_name_p = false;
3712 bfd_vma mask;
3713
3714 if (arg->failed)
3715 {
3716 /* We already failed; just get out of the bfd_map_over_sections
3717 loop. */
3718 return;
3719 }
3720
3721 this_hdr = &esd->this_hdr;
3722
3723 /* ld: compress DWARF debug sections with names: .debug_*. */
3724 if (arg->link_info
3725 && (abfd->flags & BFD_COMPRESS) != 0
3726 && (asect->flags & SEC_DEBUGGING) != 0
3727 && name[1] == 'd'
3728 && name[6] == '_')
3729 {
3730 /* If this section will be compressed, delay adding section
3731 name to section name section after it is compressed in
3732 _bfd_elf_assign_file_positions_for_non_load. */
3733 delay_st_name_p = true;
3734 }
3735
3736 if (delay_st_name_p)
3737 this_hdr->sh_name = (unsigned int) -1;
3738 else
3739 {
3740 this_hdr->sh_name
3741 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3742 name, false);
3743 if (this_hdr->sh_name == (unsigned int) -1)
3744 {
3745 arg->failed = true;
3746 return;
3747 }
3748 }
3749
3750 /* Don't clear sh_flags. Assembler may set additional bits. */
3751
3752 if ((asect->flags & SEC_ALLOC) != 0
3753 || asect->user_set_vma)
3754 this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
3755 else
3756 this_hdr->sh_addr = 0;
3757
3758 this_hdr->sh_offset = 0;
3759 this_hdr->sh_size = asect->size;
3760 this_hdr->sh_link = 0;
3761 /* PR 17512: file: 0eb809fe, 8b0535ee. */
3762 if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3763 {
3764 _bfd_error_handler
3765 /* xgettext:c-format */
3766 (_("%pB: error: alignment power %d of section `%pA' is too big"),
3767 abfd, asect->alignment_power, asect);
3768 arg->failed = true;
3769 return;
3770 }
3771 /* Set sh_addralign to the highest power of two given by alignment
3772 consistent with the section VMA. Linker scripts can force VMA. */
3773 mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3774 this_hdr->sh_addralign = mask & -mask;
3775 /* The sh_entsize and sh_info fields may have been set already by
3776 copy_private_section_data. */
3777
3778 this_hdr->bfd_section = asect;
3779 this_hdr->contents = NULL;
3780
3781 /* If the section type is unspecified, we set it based on
3782 asect->flags. */
3783 if (asect->type != 0)
3784 sh_type = asect->type;
3785 else if ((asect->flags & SEC_GROUP) != 0)
3786 sh_type = SHT_GROUP;
3787 else
3788 sh_type = bfd_elf_get_default_section_type (asect->flags);
3789
3790 if (this_hdr->sh_type == SHT_NULL)
3791 this_hdr->sh_type = sh_type;
3792 else if (this_hdr->sh_type == SHT_NOBITS
3793 && sh_type == SHT_PROGBITS
3794 && (asect->flags & SEC_ALLOC) != 0)
3795 {
3796 /* Warn if we are changing a NOBITS section to PROGBITS, but
3797 allow the link to proceed. This can happen when users link
3798 non-bss input sections to bss output sections, or emit data
3799 to a bss output section via a linker script. */
3800 _bfd_error_handler
3801 (_("warning: section `%pA' type changed to PROGBITS"), asect);
3802 this_hdr->sh_type = sh_type;
3803 }
3804
3805 switch (this_hdr->sh_type)
3806 {
3807 default:
3808 break;
3809
3810 case SHT_STRTAB:
3811 case SHT_NOTE:
3812 case SHT_NOBITS:
3813 case SHT_PROGBITS:
3814 break;
3815
3816 case SHT_INIT_ARRAY:
3817 case SHT_FINI_ARRAY:
3818 case SHT_PREINIT_ARRAY:
3819 this_hdr->sh_entsize = bed->s->arch_size / 8;
3820 break;
3821
3822 case SHT_HASH:
3823 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3824 break;
3825
3826 case SHT_DYNSYM:
3827 this_hdr->sh_entsize = bed->s->sizeof_sym;
3828 break;
3829
3830 case SHT_DYNAMIC:
3831 this_hdr->sh_entsize = bed->s->sizeof_dyn;
3832 break;
3833
3834 case SHT_RELA:
3835 if (get_elf_backend_data (abfd)->may_use_rela_p)
3836 this_hdr->sh_entsize = bed->s->sizeof_rela;
3837 break;
3838
3839 case SHT_REL:
3840 if (get_elf_backend_data (abfd)->may_use_rel_p)
3841 this_hdr->sh_entsize = bed->s->sizeof_rel;
3842 break;
3843
3844 case SHT_GNU_versym:
3845 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3846 break;
3847
3848 case SHT_GNU_verdef:
3849 this_hdr->sh_entsize = 0;
3850 /* objcopy or strip will copy over sh_info, but may not set
3851 cverdefs. The linker will set cverdefs, but sh_info will be
3852 zero. */
3853 if (this_hdr->sh_info == 0)
3854 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3855 else
3856 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3857 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3858 break;
3859
3860 case SHT_GNU_verneed:
3861 this_hdr->sh_entsize = 0;
3862 /* objcopy or strip will copy over sh_info, but may not set
3863 cverrefs. The linker will set cverrefs, but sh_info will be
3864 zero. */
3865 if (this_hdr->sh_info == 0)
3866 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3867 else
3868 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3869 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3870 break;
3871
3872 case SHT_GROUP:
3873 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3874 break;
3875
3876 case SHT_GNU_HASH:
3877 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3878 break;
3879 }
3880
3881 if ((asect->flags & SEC_ALLOC) != 0)
3882 this_hdr->sh_flags |= SHF_ALLOC;
3883 if ((asect->flags & SEC_READONLY) == 0)
3884 this_hdr->sh_flags |= SHF_WRITE;
3885 if ((asect->flags & SEC_CODE) != 0)
3886 this_hdr->sh_flags |= SHF_EXECINSTR;
3887 if ((asect->flags & SEC_MERGE) != 0)
3888 {
3889 this_hdr->sh_flags |= SHF_MERGE;
3890 this_hdr->sh_entsize = asect->entsize;
3891 }
3892 if ((asect->flags & SEC_STRINGS) != 0)
3893 this_hdr->sh_flags |= SHF_STRINGS;
3894 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3895 this_hdr->sh_flags |= SHF_GROUP;
3896 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3897 {
3898 this_hdr->sh_flags |= SHF_TLS;
3899 if (asect->size == 0
3900 && (asect->flags & SEC_HAS_CONTENTS) == 0)
3901 {
3902 struct bfd_link_order *o = asect->map_tail.link_order;
3903
3904 this_hdr->sh_size = 0;
3905 if (o != NULL)
3906 {
3907 this_hdr->sh_size = o->offset + o->size;
3908 if (this_hdr->sh_size != 0)
3909 this_hdr->sh_type = SHT_NOBITS;
3910 }
3911 }
3912 }
3913 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3914 this_hdr->sh_flags |= SHF_EXCLUDE;
3915
3916 /* If the section has relocs, set up a section header for the
3917 SHT_REL[A] section. If two relocation sections are required for
3918 this section, it is up to the processor-specific back-end to
3919 create the other. */
3920 if ((asect->flags & SEC_RELOC) != 0)
3921 {
3922 /* When doing a relocatable link, create both REL and RELA sections if
3923 needed. */
3924 if (arg->link_info
3925 /* Do the normal setup if we wouldn't create any sections here. */
3926 && esd->rel.count + esd->rela.count > 0
3927 && (bfd_link_relocatable (arg->link_info)
3928 || arg->link_info->emitrelocations))
3929 {
3930 if (esd->rel.count && esd->rel.hdr == NULL
3931 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3932 false, delay_st_name_p))
3933 {
3934 arg->failed = true;
3935 return;
3936 }
3937 if (esd->rela.count && esd->rela.hdr == NULL
3938 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3939 true, delay_st_name_p))
3940 {
3941 arg->failed = true;
3942 return;
3943 }
3944 }
3945 else if (!_bfd_elf_init_reloc_shdr (abfd,
3946 (asect->use_rela_p
3947 ? &esd->rela : &esd->rel),
3948 name,
3949 asect->use_rela_p,
3950 delay_st_name_p))
3951 {
3952 arg->failed = true;
3953 return;
3954 }
3955 }
3956
3957 /* Check for processor-specific section types. */
3958 sh_type = this_hdr->sh_type;
3959 if (bed->elf_backend_fake_sections
3960 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3961 {
3962 arg->failed = true;
3963 return;
3964 }
3965
3966 if (sh_type == SHT_NOBITS && asect->size != 0)
3967 {
3968 /* Don't change the header type from NOBITS if we are being
3969 called for objcopy --only-keep-debug. */
3970 this_hdr->sh_type = sh_type;
3971 }
3972 }
3973
3974 /* Fill in the contents of a SHT_GROUP section. Called from
3975 _bfd_elf_compute_section_file_positions for gas, objcopy, and
3976 when ELF targets use the generic linker, ld. Called for ld -r
3977 from bfd_elf_final_link. */
3978
3979 void
3980 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3981 {
3982 bool *failedptr = (bool *) failedptrarg;
3983 asection *elt, *first;
3984 unsigned char *loc;
3985 bool gas;
3986
3987 /* Ignore linker created group section. See elfNN_ia64_object_p in
3988 elfxx-ia64.c. */
3989 if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3990 || sec->size == 0
3991 || *failedptr)
3992 return;
3993
3994 if (elf_section_data (sec)->this_hdr.sh_info == 0)
3995 {
3996 unsigned long symindx = 0;
3997
3998 /* elf_group_id will have been set up by objcopy and the
3999 generic linker. */
4000 if (elf_group_id (sec) != NULL)
4001 symindx = elf_group_id (sec)->udata.i;
4002
4003 if (symindx == 0)
4004 {
4005 /* If called from the assembler, swap_out_syms will have set up
4006 elf_section_syms.
4007 PR 25699: A corrupt input file could contain bogus group info. */
4008 if (sec->index >= elf_num_section_syms (abfd)
4009 || elf_section_syms (abfd)[sec->index] == NULL)
4010 {
4011 *failedptr = true;
4012 return;
4013 }
4014 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
4015 }
4016 elf_section_data (sec)->this_hdr.sh_info = symindx;
4017 }
4018 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
4019 {
4020 /* The ELF backend linker sets sh_info to -2 when the group
4021 signature symbol is global, and thus the index can't be
4022 set until all local symbols are output. */
4023 asection *igroup;
4024 struct bfd_elf_section_data *sec_data;
4025 unsigned long symndx;
4026 unsigned long extsymoff;
4027 struct elf_link_hash_entry *h;
4028
4029 /* The point of this little dance to the first SHF_GROUP section
4030 then back to the SHT_GROUP section is that this gets us to
4031 the SHT_GROUP in the input object. */
4032 igroup = elf_sec_group (elf_next_in_group (sec));
4033 sec_data = elf_section_data (igroup);
4034 symndx = sec_data->this_hdr.sh_info;
4035 extsymoff = 0;
4036 if (!elf_bad_symtab (igroup->owner))
4037 {
4038 Elf_Internal_Shdr *symtab_hdr;
4039
4040 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
4041 extsymoff = symtab_hdr->sh_info;
4042 }
4043 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
4044 while (h->root.type == bfd_link_hash_indirect
4045 || h->root.type == bfd_link_hash_warning)
4046 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4047
4048 elf_section_data (sec)->this_hdr.sh_info = h->indx;
4049 }
4050
4051 /* The contents won't be allocated for "ld -r" or objcopy. */
4052 gas = true;
4053 if (sec->contents == NULL)
4054 {
4055 gas = false;
4056 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
4057
4058 /* Arrange for the section to be written out. */
4059 elf_section_data (sec)->this_hdr.contents = sec->contents;
4060 if (sec->contents == NULL)
4061 {
4062 *failedptr = true;
4063 return;
4064 }
4065 }
4066
4067 loc = sec->contents + sec->size;
4068
4069 /* Get the pointer to the first section in the group that gas
4070 squirreled away here. objcopy arranges for this to be set to the
4071 start of the input section group. */
4072 first = elt = elf_next_in_group (sec);
4073
4074 /* First element is a flag word. Rest of section is elf section
4075 indices for all the sections of the group. Write them backwards
4076 just to keep the group in the same order as given in .section
4077 directives, not that it matters. */
4078 while (elt != NULL)
4079 {
4080 asection *s;
4081
4082 s = elt;
4083 if (!gas)
4084 s = s->output_section;
4085 if (s != NULL
4086 && !bfd_is_abs_section (s))
4087 {
4088 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
4089 struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
4090
4091 if (elf_sec->rel.hdr != NULL
4092 && (gas
4093 || (input_elf_sec->rel.hdr != NULL
4094 && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
4095 {
4096 elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
4097 loc -= 4;
4098 if (loc == sec->contents)
4099 break;
4100 H_PUT_32 (abfd, elf_sec->rel.idx, loc);
4101 }
4102 if (elf_sec->rela.hdr != NULL
4103 && (gas
4104 || (input_elf_sec->rela.hdr != NULL
4105 && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
4106 {
4107 elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
4108 loc -= 4;
4109 if (loc == sec->contents)
4110 break;
4111 H_PUT_32 (abfd, elf_sec->rela.idx, loc);
4112 }
4113 loc -= 4;
4114 if (loc == sec->contents)
4115 break;
4116 H_PUT_32 (abfd, elf_sec->this_idx, loc);
4117 }
4118 elt = elf_next_in_group (elt);
4119 if (elt == first)
4120 break;
4121 }
4122
4123 /* We should always get here with loc == sec->contents + 4, but it is
4124 possible to craft bogus SHT_GROUP sections that will cause segfaults
4125 in objcopy without checking loc here and in the loop above. */
4126 if (loc == sec->contents)
4127 BFD_ASSERT (0);
4128 else
4129 {
4130 loc -= 4;
4131 if (loc != sec->contents)
4132 {
4133 BFD_ASSERT (0);
4134 memset (sec->contents + 4, 0, loc - sec->contents);
4135 loc = sec->contents;
4136 }
4137 }
4138
4139 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
4140 }
4141
4142 /* Given NAME, the name of a relocation section stripped of its
4143 .rel/.rela prefix, return the section in ABFD to which the
4144 relocations apply. */
4145
4146 asection *
4147 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
4148 {
4149 /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
4150 section likely apply to .got.plt or .got section. */
4151 if (get_elf_backend_data (abfd)->want_got_plt
4152 && strcmp (name, ".plt") == 0)
4153 {
4154 asection *sec;
4155
4156 name = ".got.plt";
4157 sec = bfd_get_section_by_name (abfd, name);
4158 if (sec != NULL)
4159 return sec;
4160 name = ".got";
4161 }
4162
4163 return bfd_get_section_by_name (abfd, name);
4164 }
4165
4166 /* Return the section to which RELOC_SEC applies. */
4167
4168 static asection *
4169 elf_get_reloc_section (asection *reloc_sec)
4170 {
4171 const char *name;
4172 unsigned int type;
4173 bfd *abfd;
4174 const struct elf_backend_data *bed;
4175
4176 type = elf_section_data (reloc_sec)->this_hdr.sh_type;
4177 if (type != SHT_REL && type != SHT_RELA)
4178 return NULL;
4179
4180 /* We look up the section the relocs apply to by name. */
4181 name = reloc_sec->name;
4182 if (!startswith (name, ".rel"))
4183 return NULL;
4184 name += 4;
4185 if (type == SHT_RELA && *name++ != 'a')
4186 return NULL;
4187
4188 abfd = reloc_sec->owner;
4189 bed = get_elf_backend_data (abfd);
4190 return bed->get_reloc_section (abfd, name);
4191 }
4192
4193 /* Assign all ELF section numbers. The dummy first section is handled here
4194 too. The link/info pointers for the standard section types are filled
4195 in here too, while we're at it. LINK_INFO will be 0 when arriving
4196 here for gas, objcopy, and when using the generic ELF linker. */
4197
4198 static bool
4199 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
4200 {
4201 struct elf_obj_tdata *t = elf_tdata (abfd);
4202 asection *sec;
4203 unsigned int section_number;
4204 Elf_Internal_Shdr **i_shdrp;
4205 struct bfd_elf_section_data *d;
4206 bool need_symtab;
4207 size_t amt;
4208
4209 section_number = 1;
4210
4211 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
4212
4213 /* SHT_GROUP sections are in relocatable files only. */
4214 if (link_info == NULL || !link_info->resolve_section_groups)
4215 {
4216 size_t reloc_count = 0;
4217
4218 /* Put SHT_GROUP sections first. */
4219 for (sec = abfd->sections; sec != NULL; sec = sec->next)
4220 {
4221 d = elf_section_data (sec);
4222
4223 if (d->this_hdr.sh_type == SHT_GROUP)
4224 {
4225 if (sec->flags & SEC_LINKER_CREATED)
4226 {
4227 /* Remove the linker created SHT_GROUP sections. */
4228 bfd_section_list_remove (abfd, sec);
4229 abfd->section_count--;
4230 }
4231 else
4232 d->this_idx = section_number++;
4233 }
4234
4235 /* Count relocations. */
4236 reloc_count += sec->reloc_count;
4237 }
4238
4239 /* Set/clear HAS_RELOC depending on whether there are relocations. */
4240 if (reloc_count == 0)
4241 abfd->flags &= ~HAS_RELOC;
4242 else
4243 abfd->flags |= HAS_RELOC;
4244 }
4245
4246 for (sec = abfd->sections; sec; sec = sec->next)
4247 {
4248 d = elf_section_data (sec);
4249
4250 if (d->this_hdr.sh_type != SHT_GROUP)
4251 d->this_idx = section_number++;
4252 if (d->this_hdr.sh_name != (unsigned int) -1)
4253 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
4254 if (d->rel.hdr)
4255 {
4256 d->rel.idx = section_number++;
4257 if (d->rel.hdr->sh_name != (unsigned int) -1)
4258 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
4259 }
4260 else
4261 d->rel.idx = 0;
4262
4263 if (d->rela.hdr)
4264 {
4265 d->rela.idx = section_number++;
4266 if (d->rela.hdr->sh_name != (unsigned int) -1)
4267 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
4268 }
4269 else
4270 d->rela.idx = 0;
4271 }
4272
4273 need_symtab = (bfd_get_symcount (abfd) > 0
4274 || (link_info == NULL
4275 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4276 == HAS_RELOC)));
4277 if (need_symtab)
4278 {
4279 elf_onesymtab (abfd) = section_number++;
4280 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
4281 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
4282 {
4283 elf_section_list *entry;
4284
4285 BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
4286
4287 entry = bfd_zalloc (abfd, sizeof (*entry));
4288 entry->ndx = section_number++;
4289 elf_symtab_shndx_list (abfd) = entry;
4290 entry->hdr.sh_name
4291 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
4292 ".symtab_shndx", false);
4293 if (entry->hdr.sh_name == (unsigned int) -1)
4294 return false;
4295 }
4296 elf_strtab_sec (abfd) = section_number++;
4297 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
4298 }
4299
4300 elf_shstrtab_sec (abfd) = section_number++;
4301 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
4302 elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
4303
4304 if (section_number >= SHN_LORESERVE)
4305 {
4306 /* xgettext:c-format */
4307 _bfd_error_handler (_("%pB: too many sections: %u"),
4308 abfd, section_number);
4309 return false;
4310 }
4311
4312 elf_numsections (abfd) = section_number;
4313 elf_elfheader (abfd)->e_shnum = section_number;
4314
4315 /* Set up the list of section header pointers, in agreement with the
4316 indices. */
4317 amt = section_number * sizeof (Elf_Internal_Shdr *);
4318 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
4319 if (i_shdrp == NULL)
4320 return false;
4321
4322 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
4323 sizeof (Elf_Internal_Shdr));
4324 if (i_shdrp[0] == NULL)
4325 {
4326 bfd_release (abfd, i_shdrp);
4327 return false;
4328 }
4329
4330 elf_elfsections (abfd) = i_shdrp;
4331
4332 i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
4333 if (need_symtab)
4334 {
4335 i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
4336 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
4337 {
4338 elf_section_list * entry = elf_symtab_shndx_list (abfd);
4339 BFD_ASSERT (entry != NULL);
4340 i_shdrp[entry->ndx] = & entry->hdr;
4341 entry->hdr.sh_link = elf_onesymtab (abfd);
4342 }
4343 i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
4344 t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
4345 }
4346
4347 for (sec = abfd->sections; sec; sec = sec->next)
4348 {
4349 asection *s;
4350
4351 d = elf_section_data (sec);
4352
4353 i_shdrp[d->this_idx] = &d->this_hdr;
4354 if (d->rel.idx != 0)
4355 i_shdrp[d->rel.idx] = d->rel.hdr;
4356 if (d->rela.idx != 0)
4357 i_shdrp[d->rela.idx] = d->rela.hdr;
4358
4359 /* Fill in the sh_link and sh_info fields while we're at it. */
4360
4361 /* sh_link of a reloc section is the section index of the symbol
4362 table. sh_info is the section index of the section to which
4363 the relocation entries apply. */
4364 if (d->rel.idx != 0)
4365 {
4366 d->rel.hdr->sh_link = elf_onesymtab (abfd);
4367 d->rel.hdr->sh_info = d->this_idx;
4368 d->rel.hdr->sh_flags |= SHF_INFO_LINK;
4369 }
4370 if (d->rela.idx != 0)
4371 {
4372 d->rela.hdr->sh_link = elf_onesymtab (abfd);
4373 d->rela.hdr->sh_info = d->this_idx;
4374 d->rela.hdr->sh_flags |= SHF_INFO_LINK;
4375 }
4376
4377 /* We need to set up sh_link for SHF_LINK_ORDER. */
4378 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
4379 {
4380 s = elf_linked_to_section (sec);
4381 /* We can now have a NULL linked section pointer.
4382 This happens when the sh_link field is 0, which is done
4383 when a linked to section is discarded but the linking
4384 section has been retained for some reason. */
4385 if (s)
4386 {
4387 /* Check discarded linkonce section. */
4388 if (discarded_section (s))
4389 {
4390 asection *kept;
4391 _bfd_error_handler
4392 /* xgettext:c-format */
4393 (_("%pB: sh_link of section `%pA' points to"
4394 " discarded section `%pA' of `%pB'"),
4395 abfd, d->this_hdr.bfd_section, s, s->owner);
4396 /* Point to the kept section if it has the same
4397 size as the discarded one. */
4398 kept = _bfd_elf_check_kept_section (s, link_info);
4399 if (kept == NULL)
4400 {
4401 bfd_set_error (bfd_error_bad_value);
4402 return false;
4403 }
4404 s = kept;
4405 }
4406 /* Handle objcopy. */
4407 else if (s->output_section == NULL)
4408 {
4409 _bfd_error_handler
4410 /* xgettext:c-format */
4411 (_("%pB: sh_link of section `%pA' points to"
4412 " removed section `%pA' of `%pB'"),
4413 abfd, d->this_hdr.bfd_section, s, s->owner);
4414 bfd_set_error (bfd_error_bad_value);
4415 return false;
4416 }
4417 s = s->output_section;
4418 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4419 }
4420 }
4421
4422 switch (d->this_hdr.sh_type)
4423 {
4424 case SHT_REL:
4425 case SHT_RELA:
4426 /* sh_link is the section index of the symbol table.
4427 sh_info is the section index of the section to which the
4428 relocation entries apply. */
4429 if (d->this_hdr.sh_link == 0)
4430 {
4431 /* FIXME maybe: If this is a reloc section which we are
4432 treating as a normal section then we likely should
4433 not be assuming its sh_link is .dynsym or .symtab. */
4434 if ((sec->flags & SEC_ALLOC) != 0)
4435 {
4436 s = bfd_get_section_by_name (abfd, ".dynsym");
4437 if (s != NULL)
4438 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4439 }
4440 else
4441 d->this_hdr.sh_link = elf_onesymtab (abfd);
4442 }
4443
4444 s = elf_get_reloc_section (sec);
4445 if (s != NULL)
4446 {
4447 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
4448 d->this_hdr.sh_flags |= SHF_INFO_LINK;
4449 }
4450 break;
4451
4452 case SHT_STRTAB:
4453 /* We assume that a section named .stab*str is a stabs
4454 string section. We look for a section with the same name
4455 but without the trailing ``str'', and set its sh_link
4456 field to point to this section. */
4457 if (startswith (sec->name, ".stab")
4458 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
4459 {
4460 size_t len;
4461 char *alc;
4462
4463 len = strlen (sec->name);
4464 alc = (char *) bfd_malloc (len - 2);
4465 if (alc == NULL)
4466 return false;
4467 memcpy (alc, sec->name, len - 3);
4468 alc[len - 3] = '\0';
4469 s = bfd_get_section_by_name (abfd, alc);
4470 free (alc);
4471 if (s != NULL)
4472 {
4473 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
4474
4475 /* This is a .stab section. */
4476 elf_section_data (s)->this_hdr.sh_entsize = 12;
4477 }
4478 }
4479 break;
4480
4481 case SHT_DYNAMIC:
4482 case SHT_DYNSYM:
4483 case SHT_GNU_verneed:
4484 case SHT_GNU_verdef:
4485 /* sh_link is the section header index of the string table
4486 used for the dynamic entries, or the symbol table, or the
4487 version strings. */
4488 s = bfd_get_section_by_name (abfd, ".dynstr");
4489 if (s != NULL)
4490 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4491 break;
4492
4493 case SHT_GNU_LIBLIST:
4494 /* sh_link is the section header index of the prelink library
4495 list used for the dynamic entries, or the symbol table, or
4496 the version strings. */
4497 s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
4498 ? ".dynstr" : ".gnu.libstr"));
4499 if (s != NULL)
4500 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4501 break;
4502
4503 case SHT_HASH:
4504 case SHT_GNU_HASH:
4505 case SHT_GNU_versym:
4506 /* sh_link is the section header index of the symbol table
4507 this hash table or version table is for. */
4508 s = bfd_get_section_by_name (abfd, ".dynsym");
4509 if (s != NULL)
4510 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4511 break;
4512
4513 case SHT_GROUP:
4514 d->this_hdr.sh_link = elf_onesymtab (abfd);
4515 }
4516 }
4517
4518 /* Delay setting sh_name to _bfd_elf_write_object_contents so that
4519 _bfd_elf_assign_file_positions_for_non_load can convert DWARF
4520 debug section name from .debug_* to .zdebug_* if needed. */
4521
4522 return true;
4523 }
4524
4525 static bool
4526 sym_is_global (bfd *abfd, asymbol *sym)
4527 {
4528 /* If the backend has a special mapping, use it. */
4529 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4530 if (bed->elf_backend_sym_is_global)
4531 return (*bed->elf_backend_sym_is_global) (abfd, sym);
4532
4533 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
4534 || bfd_is_und_section (bfd_asymbol_section (sym))
4535 || bfd_is_com_section (bfd_asymbol_section (sym)));
4536 }
4537
4538 /* Filter global symbols of ABFD to include in the import library. All
4539 SYMCOUNT symbols of ABFD can be examined from their pointers in
4540 SYMS. Pointers of symbols to keep should be stored contiguously at
4541 the beginning of that array.
4542
4543 Returns the number of symbols to keep. */
4544
4545 unsigned int
4546 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4547 asymbol **syms, long symcount)
4548 {
4549 long src_count, dst_count = 0;
4550
4551 for (src_count = 0; src_count < symcount; src_count++)
4552 {
4553 asymbol *sym = syms[src_count];
4554 char *name = (char *) bfd_asymbol_name (sym);
4555 struct bfd_link_hash_entry *h;
4556
4557 if (!sym_is_global (abfd, sym))
4558 continue;
4559
4560 h = bfd_link_hash_lookup (info->hash, name, false, false, false);
4561 if (h == NULL)
4562 continue;
4563 if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4564 continue;
4565 if (h->linker_def || h->ldscript_def)
4566 continue;
4567
4568 syms[dst_count++] = sym;
4569 }
4570
4571 syms[dst_count] = NULL;
4572
4573 return dst_count;
4574 }
4575
4576 /* Don't output symbols for sections that are not going to be output,
4577 that are duplicates or there is no BFD section. */
4578
4579 static bool
4580 ignore_sym (asymbol *sym)
4581 {
4582 if (sym == NULL)
4583 return false;
4584
4585 if (sym->section == NULL)
4586 return true;
4587
4588 if ((sym->flags & BSF_SECTION_SYM) != 0)
4589 {
4590 if ((sym->flags & BSF_SECTION_SYM_USED) == 0)
4591 return true;
4592 /* With ld -r on generic elf targets it is possible to have
4593 multiple section symbols in the output for a given section.
4594 We'd like to get rid of all but the first one. This drops
4595 them if the first input section is non-zero size, but fails
4596 to do so if the first input section is zero sized. */
4597 if (sym->section->output_offset != 0)
4598 return true;
4599 }
4600
4601 return discarded_section (sym->section);
4602 }
4603
4604 /* Map symbol from it's internal number to the external number, moving
4605 all local symbols to be at the head of the list. */
4606
4607 static bool
4608 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4609 {
4610 unsigned int symcount = bfd_get_symcount (abfd);
4611 asymbol **syms = bfd_get_outsymbols (abfd);
4612 asymbol **sect_syms;
4613 unsigned int num_locals = 0;
4614 unsigned int num_globals = 0;
4615 unsigned int max_index = 0;
4616 unsigned int idx;
4617 asection *asect;
4618 asymbol **new_syms;
4619 size_t amt;
4620
4621 #ifdef DEBUG
4622 fprintf (stderr, "elf_map_symbols\n");
4623 fflush (stderr);
4624 #endif
4625
4626 for (asect = abfd->sections; asect; asect = asect->next)
4627 {
4628 if (max_index < asect->index)
4629 max_index = asect->index;
4630 }
4631
4632 max_index++;
4633 amt = max_index * sizeof (asymbol *);
4634 sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4635 if (sect_syms == NULL)
4636 return false;
4637 elf_section_syms (abfd) = sect_syms;
4638 elf_num_section_syms (abfd) = max_index;
4639
4640 /* Init sect_syms entries for any section symbols we have already
4641 decided to output. */
4642 for (idx = 0; idx < symcount; idx++)
4643 {
4644 asymbol *sym = syms[idx];
4645
4646 if ((sym->flags & BSF_SECTION_SYM) != 0
4647 && sym->value == 0
4648 && !ignore_sym (sym)
4649 && !bfd_is_abs_section (sym->section))
4650 {
4651 asection *sec = sym->section;
4652
4653 if (sec->owner != abfd)
4654 sec = sec->output_section;
4655
4656 sect_syms[sec->index] = syms[idx];
4657 }
4658 }
4659
4660 /* Classify all of the symbols. */
4661 for (idx = 0; idx < symcount; idx++)
4662 {
4663 if (ignore_sym (syms[idx]))
4664 continue;
4665 if (sym_is_global (abfd, syms[idx]))
4666 num_globals++;
4667 else
4668 num_locals++;
4669 }
4670
4671 /* We will be adding a section symbol for each normal BFD section. Most
4672 sections will already have a section symbol in outsymbols, but
4673 eg. SHT_GROUP sections will not, and we need the section symbol mapped
4674 at least in that case. */
4675 for (asect = abfd->sections; asect; asect = asect->next)
4676 {
4677 asymbol *sym = asect->symbol;
4678 /* Don't include ignored section symbols. */
4679 if (!ignore_sym (sym)
4680 && sect_syms[asect->index] == NULL)
4681 {
4682 if (sym_is_global (abfd, asect->symbol))
4683 num_globals++;
4684 else
4685 num_locals++;
4686 }
4687 }
4688
4689 /* Now sort the symbols so the local symbols are first. */
4690 amt = (num_locals + num_globals) * sizeof (asymbol *);
4691 new_syms = (asymbol **) bfd_alloc (abfd, amt);
4692 if (new_syms == NULL)
4693 return false;
4694
4695 unsigned int num_globals2 = 0;
4696 unsigned int num_locals2 = 0;
4697 for (idx = 0; idx < symcount; idx++)
4698 {
4699 asymbol *sym = syms[idx];
4700 unsigned int i;
4701
4702 if (ignore_sym (sym))
4703 continue;
4704
4705 if (sym_is_global (abfd, sym))
4706 i = num_locals + num_globals2++;
4707 else
4708 i = num_locals2++;
4709 new_syms[i] = sym;
4710 sym->udata.i = i + 1;
4711 }
4712 for (asect = abfd->sections; asect; asect = asect->next)
4713 {
4714 asymbol *sym = asect->symbol;
4715 if (!ignore_sym (sym)
4716 && sect_syms[asect->index] == NULL)
4717 {
4718 unsigned int i;
4719
4720 sect_syms[asect->index] = sym;
4721 if (sym_is_global (abfd, sym))
4722 i = num_locals + num_globals2++;
4723 else
4724 i = num_locals2++;
4725 new_syms[i] = sym;
4726 sym->udata.i = i + 1;
4727 }
4728 }
4729
4730 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4731
4732 *pnum_locals = num_locals;
4733 return true;
4734 }
4735
4736 /* Align to the maximum file alignment that could be required for any
4737 ELF data structure. */
4738
4739 static inline file_ptr
4740 align_file_position (file_ptr off, int align)
4741 {
4742 return (off + align - 1) & ~(align - 1);
4743 }
4744
4745 /* Assign a file position to a section, optionally aligning to the
4746 required section alignment. */
4747
4748 file_ptr
4749 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4750 file_ptr offset,
4751 bool align)
4752 {
4753 if (align && i_shdrp->sh_addralign > 1)
4754 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign & -i_shdrp->sh_addralign);
4755 i_shdrp->sh_offset = offset;
4756 if (i_shdrp->bfd_section != NULL)
4757 i_shdrp->bfd_section->filepos = offset;
4758 if (i_shdrp->sh_type != SHT_NOBITS)
4759 offset += i_shdrp->sh_size;
4760 return offset;
4761 }
4762
4763 /* Compute the file positions we are going to put the sections at, and
4764 otherwise prepare to begin writing out the ELF file. If LINK_INFO
4765 is not NULL, this is being called by the ELF backend linker. */
4766
4767 bool
4768 _bfd_elf_compute_section_file_positions (bfd *abfd,
4769 struct bfd_link_info *link_info)
4770 {
4771 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4772 struct fake_section_arg fsargs;
4773 bool failed;
4774 struct elf_strtab_hash *strtab = NULL;
4775 Elf_Internal_Shdr *shstrtab_hdr;
4776 bool need_symtab;
4777
4778 if (abfd->output_has_begun)
4779 return true;
4780
4781 /* Do any elf backend specific processing first. */
4782 if (bed->elf_backend_begin_write_processing)
4783 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4784
4785 if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4786 return false;
4787
4788 fsargs.failed = false;
4789 fsargs.link_info = link_info;
4790 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4791 if (fsargs.failed)
4792 return false;
4793
4794 if (!assign_section_numbers (abfd, link_info))
4795 return false;
4796
4797 /* The backend linker builds symbol table information itself. */
4798 need_symtab = (link_info == NULL
4799 && (bfd_get_symcount (abfd) > 0
4800 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4801 == HAS_RELOC)));
4802 if (need_symtab)
4803 {
4804 /* Non-zero if doing a relocatable link. */
4805 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4806
4807 if (! swap_out_syms (abfd, &strtab, relocatable_p, link_info))
4808 return false;
4809 }
4810
4811 failed = false;
4812 if (link_info == NULL)
4813 {
4814 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4815 if (failed)
4816 goto err_free_strtab;
4817 }
4818
4819 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4820 /* sh_name was set in init_file_header. */
4821 shstrtab_hdr->sh_type = SHT_STRTAB;
4822 shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
4823 shstrtab_hdr->sh_addr = 0;
4824 /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */
4825 shstrtab_hdr->sh_entsize = 0;
4826 shstrtab_hdr->sh_link = 0;
4827 shstrtab_hdr->sh_info = 0;
4828 /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load. */
4829 shstrtab_hdr->sh_addralign = 1;
4830
4831 if (!assign_file_positions_except_relocs (abfd, link_info))
4832 goto err_free_strtab;
4833
4834 if (strtab != NULL)
4835 {
4836 file_ptr off;
4837 Elf_Internal_Shdr *hdr;
4838
4839 off = elf_next_file_pos (abfd);
4840
4841 hdr = & elf_symtab_hdr (abfd);
4842 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4843
4844 if (elf_symtab_shndx_list (abfd) != NULL)
4845 {
4846 hdr = & elf_symtab_shndx_list (abfd)->hdr;
4847 if (hdr->sh_size != 0)
4848 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4849 /* FIXME: What about other symtab_shndx sections in the list ? */
4850 }
4851
4852 hdr = &elf_tdata (abfd)->strtab_hdr;
4853 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4854
4855 elf_next_file_pos (abfd) = off;
4856
4857 /* Now that we know where the .strtab section goes, write it
4858 out. */
4859 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4860 || ! _bfd_elf_strtab_emit (abfd, strtab))
4861 goto err_free_strtab;
4862 _bfd_elf_strtab_free (strtab);
4863 }
4864
4865 abfd->output_has_begun = true;
4866 return true;
4867
4868 err_free_strtab:
4869 if (strtab != NULL)
4870 _bfd_elf_strtab_free (strtab);
4871 return false;
4872 }
4873
4874 /* Retrieve .eh_frame_hdr. Prior to size_dynamic_sections the
4875 function effectively returns whether --eh-frame-hdr is given on the
4876 command line. After size_dynamic_sections the result reflects
4877 whether .eh_frame_hdr will actually be output (sizing isn't done
4878 until ldemul_after_allocation). */
4879
4880 static asection *
4881 elf_eh_frame_hdr (const struct bfd_link_info *info)
4882 {
4883 if (info != NULL && is_elf_hash_table (info->hash))
4884 return elf_hash_table (info)->eh_info.hdr_sec;
4885 return NULL;
4886 }
4887
4888 /* Make an initial estimate of the size of the program header. If we
4889 get the number wrong here, we'll redo section placement. */
4890
4891 static bfd_size_type
4892 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4893 {
4894 size_t segs;
4895 asection *s;
4896 const struct elf_backend_data *bed;
4897
4898 /* Assume we will need exactly two PT_LOAD segments: one for text
4899 and one for data. */
4900 segs = 2;
4901
4902 s = bfd_get_section_by_name (abfd, ".interp");
4903 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4904 {
4905 /* If we have a loadable interpreter section, we need a
4906 PT_INTERP segment. In this case, assume we also need a
4907 PT_PHDR segment, although that may not be true for all
4908 targets. */
4909 segs += 2;
4910 }
4911
4912 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4913 {
4914 /* We need a PT_DYNAMIC segment. */
4915 ++segs;
4916 }
4917
4918 if (info != NULL && info->relro)
4919 {
4920 /* We need a PT_GNU_RELRO segment. */
4921 ++segs;
4922 }
4923
4924 if (elf_eh_frame_hdr (info))
4925 {
4926 /* We need a PT_GNU_EH_FRAME segment. */
4927 ++segs;
4928 }
4929
4930 if (elf_stack_flags (abfd))
4931 {
4932 /* We need a PT_GNU_STACK segment. */
4933 ++segs;
4934 }
4935
4936 if (elf_sframe (abfd))
4937 {
4938 /* We need a PT_GNU_SFRAME segment. */
4939 ++segs;
4940 }
4941
4942 s = bfd_get_section_by_name (abfd,
4943 NOTE_GNU_PROPERTY_SECTION_NAME);
4944 if (s != NULL && s->size != 0)
4945 {
4946 /* We need a PT_GNU_PROPERTY segment. */
4947 ++segs;
4948 }
4949
4950 for (s = abfd->sections; s != NULL; s = s->next)
4951 {
4952 if ((s->flags & SEC_LOAD) != 0
4953 && elf_section_type (s) == SHT_NOTE)
4954 {
4955 unsigned int alignment_power;
4956 /* We need a PT_NOTE segment. */
4957 ++segs;
4958 /* Try to create just one PT_NOTE segment for all adjacent
4959 loadable SHT_NOTE sections. gABI requires that within a
4960 PT_NOTE segment (and also inside of each SHT_NOTE section)
4961 each note should have the same alignment. So we check
4962 whether the sections are correctly aligned. */
4963 alignment_power = s->alignment_power;
4964 while (s->next != NULL
4965 && s->next->alignment_power == alignment_power
4966 && (s->next->flags & SEC_LOAD) != 0
4967 && elf_section_type (s->next) == SHT_NOTE)
4968 s = s->next;
4969 }
4970 }
4971
4972 for (s = abfd->sections; s != NULL; s = s->next)
4973 {
4974 if (s->flags & SEC_THREAD_LOCAL)
4975 {
4976 /* We need a PT_TLS segment. */
4977 ++segs;
4978 break;
4979 }
4980 }
4981
4982 bed = get_elf_backend_data (abfd);
4983
4984 if ((abfd->flags & D_PAGED) != 0
4985 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4986 {
4987 /* Add a PT_GNU_MBIND segment for each mbind section. */
4988 bfd_vma commonpagesize;
4989 unsigned int page_align_power;
4990
4991 if (info != NULL)
4992 commonpagesize = info->commonpagesize;
4993 else
4994 commonpagesize = bed->commonpagesize;
4995 page_align_power = bfd_log2 (commonpagesize);
4996 for (s = abfd->sections; s != NULL; s = s->next)
4997 if (elf_section_flags (s) & SHF_GNU_MBIND)
4998 {
4999 if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
5000 {
5001 _bfd_error_handler
5002 /* xgettext:c-format */
5003 (_("%pB: GNU_MBIND section `%pA' has invalid "
5004 "sh_info field: %d"),
5005 abfd, s, elf_section_data (s)->this_hdr.sh_info);
5006 continue;
5007 }
5008 /* Align mbind section to page size. */
5009 if (s->alignment_power < page_align_power)
5010 s->alignment_power = page_align_power;
5011 segs ++;
5012 }
5013 }
5014
5015 /* Let the backend count up any program headers it might need. */
5016 if (bed->elf_backend_additional_program_headers)
5017 {
5018 int a;
5019
5020 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
5021 if (a == -1)
5022 abort ();
5023 segs += a;
5024 }
5025
5026 return segs * bed->s->sizeof_phdr;
5027 }
5028
5029 /* Find the segment that contains the output_section of section. */
5030
5031 Elf_Internal_Phdr *
5032 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
5033 {
5034 struct elf_segment_map *m;
5035 Elf_Internal_Phdr *p;
5036
5037 for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
5038 m != NULL;
5039 m = m->next, p++)
5040 {
5041 int i;
5042
5043 for (i = m->count - 1; i >= 0; i--)
5044 if (m->sections[i] == section)
5045 return p;
5046 }
5047
5048 return NULL;
5049 }
5050
5051 /* Create a mapping from a set of sections to a program segment. */
5052
5053 static struct elf_segment_map *
5054 make_mapping (bfd *abfd,
5055 asection **sections,
5056 unsigned int from,
5057 unsigned int to,
5058 bool phdr)
5059 {
5060 struct elf_segment_map *m;
5061 unsigned int i;
5062 asection **hdrpp;
5063 size_t amt;
5064
5065 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5066 amt += (to - from) * sizeof (asection *);
5067 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5068 if (m == NULL)
5069 return NULL;
5070 m->next = NULL;
5071 m->p_type = PT_LOAD;
5072 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
5073 m->sections[i - from] = *hdrpp;
5074 m->count = to - from;
5075
5076 if (from == 0 && phdr)
5077 {
5078 /* Include the headers in the first PT_LOAD segment. */
5079 m->includes_filehdr = 1;
5080 m->includes_phdrs = 1;
5081 }
5082
5083 return m;
5084 }
5085
5086 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
5087 on failure. */
5088
5089 struct elf_segment_map *
5090 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
5091 {
5092 struct elf_segment_map *m;
5093
5094 m = (struct elf_segment_map *) bfd_zalloc (abfd,
5095 sizeof (struct elf_segment_map));
5096 if (m == NULL)
5097 return NULL;
5098 m->next = NULL;
5099 m->p_type = PT_DYNAMIC;
5100 m->count = 1;
5101 m->sections[0] = dynsec;
5102
5103 return m;
5104 }
5105
5106 /* Possibly add or remove segments from the segment map. */
5107
5108 static bool
5109 elf_modify_segment_map (bfd *abfd,
5110 struct bfd_link_info *info,
5111 bool remove_empty_load)
5112 {
5113 struct elf_segment_map **m;
5114 const struct elf_backend_data *bed;
5115
5116 /* The placement algorithm assumes that non allocated sections are
5117 not in PT_LOAD segments. We ensure this here by removing such
5118 sections from the segment map. We also remove excluded
5119 sections. Finally, any PT_LOAD segment without sections is
5120 removed. */
5121 m = &elf_seg_map (abfd);
5122 while (*m)
5123 {
5124 unsigned int i, new_count;
5125
5126 for (new_count = 0, i = 0; i < (*m)->count; i++)
5127 {
5128 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
5129 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
5130 || (*m)->p_type != PT_LOAD))
5131 {
5132 (*m)->sections[new_count] = (*m)->sections[i];
5133 new_count++;
5134 }
5135 }
5136 (*m)->count = new_count;
5137
5138 if (remove_empty_load
5139 && (*m)->p_type == PT_LOAD
5140 && (*m)->count == 0
5141 && !(*m)->includes_phdrs)
5142 *m = (*m)->next;
5143 else
5144 m = &(*m)->next;
5145 }
5146
5147 bed = get_elf_backend_data (abfd);
5148 if (bed->elf_backend_modify_segment_map != NULL)
5149 {
5150 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
5151 return false;
5152 }
5153
5154 return true;
5155 }
5156
5157 #define IS_TBSS(s) \
5158 ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
5159
5160 /* Set up a mapping from BFD sections to program segments. Update
5161 NEED_LAYOUT if the section layout is changed. */
5162
5163 bool
5164 _bfd_elf_map_sections_to_segments (bfd *abfd,
5165 struct bfd_link_info *info,
5166 bool *need_layout)
5167 {
5168 unsigned int count;
5169 struct elf_segment_map *m;
5170 asection **sections = NULL;
5171 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5172 bool no_user_phdrs;
5173
5174 no_user_phdrs = elf_seg_map (abfd) == NULL;
5175
5176 if (info != NULL)
5177 {
5178 info->user_phdrs = !no_user_phdrs;
5179
5180 /* Size the relative relocations if DT_RELR is enabled. */
5181 if (info->enable_dt_relr
5182 && need_layout != NULL
5183 && bed->size_relative_relocs
5184 && !bed->size_relative_relocs (info, need_layout))
5185 info->callbacks->einfo
5186 (_("%F%P: failed to size relative relocations\n"));
5187 }
5188
5189 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
5190 {
5191 asection *s;
5192 unsigned int i;
5193 struct elf_segment_map *mfirst;
5194 struct elf_segment_map **pm;
5195 asection *last_hdr;
5196 bfd_vma last_size;
5197 unsigned int hdr_index;
5198 bfd_vma maxpagesize;
5199 asection **hdrpp;
5200 bool phdr_in_segment;
5201 bool writable;
5202 bool executable;
5203 unsigned int tls_count = 0;
5204 asection *first_tls = NULL;
5205 asection *first_mbind = NULL;
5206 asection *dynsec, *eh_frame_hdr;
5207 asection *sframe;
5208 size_t amt;
5209 bfd_vma addr_mask, wrap_to = 0; /* Bytes. */
5210 bfd_size_type phdr_size; /* Octets/bytes. */
5211 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5212
5213 /* Select the allocated sections, and sort them. */
5214
5215 amt = bfd_count_sections (abfd) * sizeof (asection *);
5216 sections = (asection **) bfd_malloc (amt);
5217 if (sections == NULL)
5218 goto error_return;
5219
5220 /* Calculate top address, avoiding undefined behaviour of shift
5221 left operator when shift count is equal to size of type
5222 being shifted. */
5223 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
5224 addr_mask = (addr_mask << 1) + 1;
5225
5226 i = 0;
5227 for (s = abfd->sections; s != NULL; s = s->next)
5228 {
5229 if ((s->flags & SEC_ALLOC) != 0)
5230 {
5231 /* target_index is unused until bfd_elf_final_link
5232 starts output of section symbols. Use it to make
5233 qsort stable. */
5234 s->target_index = i;
5235 sections[i] = s;
5236 ++i;
5237 /* A wrapping section potentially clashes with header. */
5238 if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
5239 wrap_to = (s->lma + s->size / opb) & addr_mask;
5240 }
5241 }
5242 BFD_ASSERT (i <= bfd_count_sections (abfd));
5243 count = i;
5244
5245 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
5246
5247 phdr_size = elf_program_header_size (abfd);
5248 if (phdr_size == (bfd_size_type) -1)
5249 phdr_size = get_program_header_size (abfd, info);
5250 phdr_size += bed->s->sizeof_ehdr;
5251 /* phdr_size is compared to LMA values which are in bytes. */
5252 phdr_size /= opb;
5253 if (info != NULL)
5254 maxpagesize = info->maxpagesize;
5255 else
5256 maxpagesize = bed->maxpagesize;
5257 if (maxpagesize == 0)
5258 maxpagesize = 1;
5259 phdr_in_segment = info != NULL && info->load_phdrs;
5260 if (count != 0
5261 && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
5262 >= (phdr_size & (maxpagesize - 1))))
5263 /* For compatibility with old scripts that may not be using
5264 SIZEOF_HEADERS, add headers when it looks like space has
5265 been left for them. */
5266 phdr_in_segment = true;
5267
5268 /* Build the mapping. */
5269 mfirst = NULL;
5270 pm = &mfirst;
5271
5272 /* If we have a .interp section, then create a PT_PHDR segment for
5273 the program headers and a PT_INTERP segment for the .interp
5274 section. */
5275 s = bfd_get_section_by_name (abfd, ".interp");
5276 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
5277 {
5278 amt = sizeof (struct elf_segment_map);
5279 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5280 if (m == NULL)
5281 goto error_return;
5282 m->next = NULL;
5283 m->p_type = PT_PHDR;
5284 m->p_flags = PF_R;
5285 m->p_flags_valid = 1;
5286 m->includes_phdrs = 1;
5287 phdr_in_segment = true;
5288 *pm = m;
5289 pm = &m->next;
5290
5291 amt = sizeof (struct elf_segment_map);
5292 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5293 if (m == NULL)
5294 goto error_return;
5295 m->next = NULL;
5296 m->p_type = PT_INTERP;
5297 m->count = 1;
5298 m->sections[0] = s;
5299
5300 *pm = m;
5301 pm = &m->next;
5302 }
5303
5304 /* Look through the sections. We put sections in the same program
5305 segment when the start of the second section can be placed within
5306 a few bytes of the end of the first section. */
5307 last_hdr = NULL;
5308 last_size = 0;
5309 hdr_index = 0;
5310 writable = false;
5311 executable = false;
5312 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
5313 if (dynsec != NULL
5314 && (dynsec->flags & SEC_LOAD) == 0)
5315 dynsec = NULL;
5316
5317 if ((abfd->flags & D_PAGED) == 0)
5318 phdr_in_segment = false;
5319
5320 /* Deal with -Ttext or something similar such that the first section
5321 is not adjacent to the program headers. This is an
5322 approximation, since at this point we don't know exactly how many
5323 program headers we will need. */
5324 if (phdr_in_segment && count > 0)
5325 {
5326 bfd_vma phdr_lma; /* Bytes. */
5327 bool separate_phdr = false;
5328
5329 phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
5330 if (info != NULL
5331 && info->separate_code
5332 && (sections[0]->flags & SEC_CODE) != 0)
5333 {
5334 /* If data sections should be separate from code and
5335 thus not executable, and the first section is
5336 executable then put the file and program headers in
5337 their own PT_LOAD. */
5338 separate_phdr = true;
5339 if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
5340 == (sections[0]->lma & addr_mask & -maxpagesize)))
5341 {
5342 /* The file and program headers are currently on the
5343 same page as the first section. Put them on the
5344 previous page if we can. */
5345 if (phdr_lma >= maxpagesize)
5346 phdr_lma -= maxpagesize;
5347 else
5348 separate_phdr = false;
5349 }
5350 }
5351 if ((sections[0]->lma & addr_mask) < phdr_lma
5352 || (sections[0]->lma & addr_mask) < phdr_size)
5353 /* If file and program headers would be placed at the end
5354 of memory then it's probably better to omit them. */
5355 phdr_in_segment = false;
5356 else if (phdr_lma < wrap_to)
5357 /* If a section wraps around to where we'll be placing
5358 file and program headers, then the headers will be
5359 overwritten. */
5360 phdr_in_segment = false;
5361 else if (separate_phdr)
5362 {
5363 m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
5364 if (m == NULL)
5365 goto error_return;
5366 m->p_paddr = phdr_lma * opb;
5367 m->p_vaddr_offset
5368 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
5369 m->p_paddr_valid = 1;
5370 *pm = m;
5371 pm = &m->next;
5372 phdr_in_segment = false;
5373 }
5374 }
5375
5376 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
5377 {
5378 asection *hdr;
5379 bool new_segment;
5380
5381 hdr = *hdrpp;
5382
5383 /* See if this section and the last one will fit in the same
5384 segment. */
5385
5386 if (last_hdr == NULL)
5387 {
5388 /* If we don't have a segment yet, then we don't need a new
5389 one (we build the last one after this loop). */
5390 new_segment = false;
5391 }
5392 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
5393 {
5394 /* If this section has a different relation between the
5395 virtual address and the load address, then we need a new
5396 segment. */
5397 new_segment = true;
5398 }
5399 else if (hdr->lma < last_hdr->lma + last_size
5400 || last_hdr->lma + last_size < last_hdr->lma)
5401 {
5402 /* If this section has a load address that makes it overlap
5403 the previous section, then we need a new segment. */
5404 new_segment = true;
5405 }
5406 else if ((abfd->flags & D_PAGED) != 0
5407 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
5408 == (hdr->lma & -maxpagesize)))
5409 {
5410 /* If we are demand paged then we can't map two disk
5411 pages onto the same memory page. */
5412 new_segment = false;
5413 }
5414 /* In the next test we have to be careful when last_hdr->lma is close
5415 to the end of the address space. If the aligned address wraps
5416 around to the start of the address space, then there are no more
5417 pages left in memory and it is OK to assume that the current
5418 section can be included in the current segment. */
5419 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
5420 + maxpagesize > last_hdr->lma)
5421 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
5422 + maxpagesize <= hdr->lma))
5423 {
5424 /* If putting this section in this segment would force us to
5425 skip a page in the segment, then we need a new segment. */
5426 new_segment = true;
5427 }
5428 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
5429 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
5430 {
5431 /* We don't want to put a loaded section after a
5432 nonloaded (ie. bss style) section in the same segment
5433 as that will force the non-loaded section to be loaded.
5434 Consider .tbss sections as loaded for this purpose. */
5435 new_segment = true;
5436 }
5437 else if ((abfd->flags & D_PAGED) == 0)
5438 {
5439 /* If the file is not demand paged, which means that we
5440 don't require the sections to be correctly aligned in the
5441 file, then there is no other reason for a new segment. */
5442 new_segment = false;
5443 }
5444 else if (info != NULL
5445 && info->separate_code
5446 && executable != ((hdr->flags & SEC_CODE) != 0))
5447 {
5448 new_segment = true;
5449 }
5450 else if (! writable
5451 && (hdr->flags & SEC_READONLY) == 0)
5452 {
5453 /* We don't want to put a writable section in a read only
5454 segment. */
5455 new_segment = true;
5456 }
5457 else
5458 {
5459 /* Otherwise, we can use the same segment. */
5460 new_segment = false;
5461 }
5462
5463 /* Allow interested parties a chance to override our decision. */
5464 if (last_hdr != NULL
5465 && info != NULL
5466 && info->callbacks->override_segment_assignment != NULL)
5467 new_segment
5468 = info->callbacks->override_segment_assignment (info, abfd, hdr,
5469 last_hdr,
5470 new_segment);
5471
5472 if (! new_segment)
5473 {
5474 if ((hdr->flags & SEC_READONLY) == 0)
5475 writable = true;
5476 if ((hdr->flags & SEC_CODE) != 0)
5477 executable = true;
5478 last_hdr = hdr;
5479 /* .tbss sections effectively have zero size. */
5480 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
5481 continue;
5482 }
5483
5484 /* We need a new program segment. We must create a new program
5485 header holding all the sections from hdr_index until hdr. */
5486
5487 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
5488 if (m == NULL)
5489 goto error_return;
5490
5491 *pm = m;
5492 pm = &m->next;
5493
5494 if ((hdr->flags & SEC_READONLY) == 0)
5495 writable = true;
5496 else
5497 writable = false;
5498
5499 if ((hdr->flags & SEC_CODE) == 0)
5500 executable = false;
5501 else
5502 executable = true;
5503
5504 last_hdr = hdr;
5505 /* .tbss sections effectively have zero size. */
5506 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
5507 hdr_index = i;
5508 phdr_in_segment = false;
5509 }
5510
5511 /* Create a final PT_LOAD program segment, but not if it's just
5512 for .tbss. */
5513 if (last_hdr != NULL
5514 && (i - hdr_index != 1
5515 || !IS_TBSS (last_hdr)))
5516 {
5517 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
5518 if (m == NULL)
5519 goto error_return;
5520
5521 *pm = m;
5522 pm = &m->next;
5523 }
5524
5525 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
5526 if (dynsec != NULL)
5527 {
5528 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
5529 if (m == NULL)
5530 goto error_return;
5531 *pm = m;
5532 pm = &m->next;
5533 }
5534
5535 /* For each batch of consecutive loadable SHT_NOTE sections,
5536 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
5537 because if we link together nonloadable .note sections and
5538 loadable .note sections, we will generate two .note sections
5539 in the output file. */
5540 for (s = abfd->sections; s != NULL; s = s->next)
5541 {
5542 if ((s->flags & SEC_LOAD) != 0
5543 && elf_section_type (s) == SHT_NOTE)
5544 {
5545 asection *s2;
5546 unsigned int alignment_power = s->alignment_power;
5547
5548 count = 1;
5549 for (s2 = s; s2->next != NULL; s2 = s2->next)
5550 {
5551 if (s2->next->alignment_power == alignment_power
5552 && (s2->next->flags & SEC_LOAD) != 0
5553 && elf_section_type (s2->next) == SHT_NOTE
5554 && align_power (s2->lma + s2->size / opb,
5555 alignment_power)
5556 == s2->next->lma)
5557 count++;
5558 else
5559 break;
5560 }
5561 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5562 amt += count * sizeof (asection *);
5563 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5564 if (m == NULL)
5565 goto error_return;
5566 m->next = NULL;
5567 m->p_type = PT_NOTE;
5568 m->count = count;
5569 while (count > 1)
5570 {
5571 m->sections[m->count - count--] = s;
5572 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5573 s = s->next;
5574 }
5575 m->sections[m->count - 1] = s;
5576 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5577 *pm = m;
5578 pm = &m->next;
5579 }
5580 if (s->flags & SEC_THREAD_LOCAL)
5581 {
5582 if (! tls_count)
5583 first_tls = s;
5584 tls_count++;
5585 }
5586 if (first_mbind == NULL
5587 && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5588 first_mbind = s;
5589 }
5590
5591 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
5592 if (tls_count > 0)
5593 {
5594 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5595 amt += tls_count * sizeof (asection *);
5596 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5597 if (m == NULL)
5598 goto error_return;
5599 m->next = NULL;
5600 m->p_type = PT_TLS;
5601 m->count = tls_count;
5602 /* Mandated PF_R. */
5603 m->p_flags = PF_R;
5604 m->p_flags_valid = 1;
5605 s = first_tls;
5606 for (i = 0; i < tls_count; ++i)
5607 {
5608 if ((s->flags & SEC_THREAD_LOCAL) == 0)
5609 {
5610 _bfd_error_handler
5611 (_("%pB: TLS sections are not adjacent:"), abfd);
5612 s = first_tls;
5613 i = 0;
5614 while (i < tls_count)
5615 {
5616 if ((s->flags & SEC_THREAD_LOCAL) != 0)
5617 {
5618 _bfd_error_handler (_(" TLS: %pA"), s);
5619 i++;
5620 }
5621 else
5622 _bfd_error_handler (_(" non-TLS: %pA"), s);
5623 s = s->next;
5624 }
5625 bfd_set_error (bfd_error_bad_value);
5626 goto error_return;
5627 }
5628 m->sections[i] = s;
5629 s = s->next;
5630 }
5631
5632 *pm = m;
5633 pm = &m->next;
5634 }
5635
5636 if (first_mbind
5637 && (abfd->flags & D_PAGED) != 0
5638 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5639 for (s = first_mbind; s != NULL; s = s->next)
5640 if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5641 && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5642 {
5643 /* Mandated PF_R. */
5644 unsigned long p_flags = PF_R;
5645 if ((s->flags & SEC_READONLY) == 0)
5646 p_flags |= PF_W;
5647 if ((s->flags & SEC_CODE) != 0)
5648 p_flags |= PF_X;
5649
5650 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5651 m = bfd_zalloc (abfd, amt);
5652 if (m == NULL)
5653 goto error_return;
5654 m->next = NULL;
5655 m->p_type = (PT_GNU_MBIND_LO
5656 + elf_section_data (s)->this_hdr.sh_info);
5657 m->count = 1;
5658 m->p_flags_valid = 1;
5659 m->sections[0] = s;
5660 m->p_flags = p_flags;
5661
5662 *pm = m;
5663 pm = &m->next;
5664 }
5665
5666 s = bfd_get_section_by_name (abfd,
5667 NOTE_GNU_PROPERTY_SECTION_NAME);
5668 if (s != NULL && s->size != 0)
5669 {
5670 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5671 m = bfd_zalloc (abfd, amt);
5672 if (m == NULL)
5673 goto error_return;
5674 m->next = NULL;
5675 m->p_type = PT_GNU_PROPERTY;
5676 m->count = 1;
5677 m->p_flags_valid = 1;
5678 m->sections[0] = s;
5679 m->p_flags = PF_R;
5680 *pm = m;
5681 pm = &m->next;
5682 }
5683
5684 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5685 segment. */
5686 eh_frame_hdr = elf_eh_frame_hdr (info);
5687 if (eh_frame_hdr != NULL
5688 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5689 {
5690 amt = sizeof (struct elf_segment_map);
5691 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5692 if (m == NULL)
5693 goto error_return;
5694 m->next = NULL;
5695 m->p_type = PT_GNU_EH_FRAME;
5696 m->count = 1;
5697 m->sections[0] = eh_frame_hdr->output_section;
5698
5699 *pm = m;
5700 pm = &m->next;
5701 }
5702
5703 /* If there is a .sframe section, throw in a PT_GNU_SFRAME
5704 segment. */
5705 sframe = elf_sframe (abfd);
5706 if (sframe != NULL
5707 && (sframe->output_section->flags & SEC_LOAD) != 0
5708 && sframe->size != 0)
5709 {
5710 amt = sizeof (struct elf_segment_map);
5711 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5712 if (m == NULL)
5713 goto error_return;
5714 m->next = NULL;
5715 m->p_type = PT_GNU_SFRAME;
5716 m->count = 1;
5717 m->sections[0] = sframe->output_section;
5718
5719 *pm = m;
5720 pm = &m->next;
5721 }
5722
5723 if (elf_stack_flags (abfd))
5724 {
5725 amt = sizeof (struct elf_segment_map);
5726 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5727 if (m == NULL)
5728 goto error_return;
5729 m->next = NULL;
5730 m->p_type = PT_GNU_STACK;
5731 m->p_flags = elf_stack_flags (abfd);
5732 m->p_align = bed->stack_align;
5733 m->p_flags_valid = 1;
5734 m->p_align_valid = m->p_align != 0;
5735 if (info->stacksize > 0)
5736 {
5737 m->p_size = info->stacksize;
5738 m->p_size_valid = 1;
5739 }
5740
5741 *pm = m;
5742 pm = &m->next;
5743 }
5744
5745 if (info != NULL && info->relro)
5746 {
5747 for (m = mfirst; m != NULL; m = m->next)
5748 {
5749 if (m->p_type == PT_LOAD
5750 && m->count != 0
5751 && m->sections[0]->vma >= info->relro_start
5752 && m->sections[0]->vma < info->relro_end)
5753 {
5754 i = m->count;
5755 while (--i != (unsigned) -1)
5756 {
5757 if (m->sections[i]->size > 0
5758 && (m->sections[i]->flags & SEC_LOAD) != 0
5759 && (m->sections[i]->flags & SEC_HAS_CONTENTS) != 0)
5760 break;
5761 }
5762
5763 if (i != (unsigned) -1)
5764 break;
5765 }
5766 }
5767
5768 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
5769 if (m != NULL)
5770 {
5771 amt = sizeof (struct elf_segment_map);
5772 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5773 if (m == NULL)
5774 goto error_return;
5775 m->next = NULL;
5776 m->p_type = PT_GNU_RELRO;
5777 *pm = m;
5778 pm = &m->next;
5779 }
5780 }
5781
5782 free (sections);
5783 elf_seg_map (abfd) = mfirst;
5784 }
5785
5786 if (!elf_modify_segment_map (abfd, info, no_user_phdrs || info == NULL))
5787 return false;
5788
5789 for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5790 ++count;
5791 elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5792
5793 return true;
5794
5795 error_return:
5796 free (sections);
5797 return false;
5798 }
5799
5800 /* Sort sections by address. */
5801
5802 static int
5803 elf_sort_sections (const void *arg1, const void *arg2)
5804 {
5805 const asection *sec1 = *(const asection **) arg1;
5806 const asection *sec2 = *(const asection **) arg2;
5807 bfd_size_type size1, size2;
5808
5809 /* Sort by LMA first, since this is the address used to
5810 place the section into a segment. */
5811 if (sec1->lma < sec2->lma)
5812 return -1;
5813 else if (sec1->lma > sec2->lma)
5814 return 1;
5815
5816 /* Then sort by VMA. Normally the LMA and the VMA will be
5817 the same, and this will do nothing. */
5818 if (sec1->vma < sec2->vma)
5819 return -1;
5820 else if (sec1->vma > sec2->vma)
5821 return 1;
5822
5823 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
5824
5825 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
5826 && (x)->size != 0)
5827
5828 if (TOEND (sec1))
5829 {
5830 if (!TOEND (sec2))
5831 return 1;
5832 }
5833 else if (TOEND (sec2))
5834 return -1;
5835
5836 #undef TOEND
5837
5838 /* Sort by size, to put zero sized sections
5839 before others at the same address. */
5840
5841 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5842 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5843
5844 if (size1 < size2)
5845 return -1;
5846 if (size1 > size2)
5847 return 1;
5848
5849 return sec1->target_index - sec2->target_index;
5850 }
5851
5852 /* This qsort comparison functions sorts PT_LOAD segments first and
5853 by p_paddr, for assign_file_positions_for_load_sections. */
5854
5855 static int
5856 elf_sort_segments (const void *arg1, const void *arg2)
5857 {
5858 const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5859 const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5860
5861 if (m1->p_type != m2->p_type)
5862 {
5863 if (m1->p_type == PT_NULL)
5864 return 1;
5865 if (m2->p_type == PT_NULL)
5866 return -1;
5867 return m1->p_type < m2->p_type ? -1 : 1;
5868 }
5869 if (m1->includes_filehdr != m2->includes_filehdr)
5870 return m1->includes_filehdr ? -1 : 1;
5871 if (m1->no_sort_lma != m2->no_sort_lma)
5872 return m1->no_sort_lma ? -1 : 1;
5873 if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5874 {
5875 bfd_vma lma1, lma2; /* Octets. */
5876 lma1 = 0;
5877 if (m1->p_paddr_valid)
5878 lma1 = m1->p_paddr;
5879 else if (m1->count != 0)
5880 {
5881 unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
5882 m1->sections[0]);
5883 lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
5884 }
5885 lma2 = 0;
5886 if (m2->p_paddr_valid)
5887 lma2 = m2->p_paddr;
5888 else if (m2->count != 0)
5889 {
5890 unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
5891 m2->sections[0]);
5892 lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
5893 }
5894 if (lma1 != lma2)
5895 return lma1 < lma2 ? -1 : 1;
5896 }
5897 if (m1->idx != m2->idx)
5898 return m1->idx < m2->idx ? -1 : 1;
5899 return 0;
5900 }
5901
5902 /* Ian Lance Taylor writes:
5903
5904 We shouldn't be using % with a negative signed number. That's just
5905 not good. We have to make sure either that the number is not
5906 negative, or that the number has an unsigned type. When the types
5907 are all the same size they wind up as unsigned. When file_ptr is a
5908 larger signed type, the arithmetic winds up as signed long long,
5909 which is wrong.
5910
5911 What we're trying to say here is something like ``increase OFF by
5912 the least amount that will cause it to be equal to the VMA modulo
5913 the page size.'' */
5914 /* In other words, something like:
5915
5916 vma_offset = m->sections[0]->vma % bed->maxpagesize;
5917 off_offset = off % bed->maxpagesize;
5918 if (vma_offset < off_offset)
5919 adjustment = vma_offset + bed->maxpagesize - off_offset;
5920 else
5921 adjustment = vma_offset - off_offset;
5922
5923 which can be collapsed into the expression below. */
5924
5925 static file_ptr
5926 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5927 {
5928 /* PR binutils/16199: Handle an alignment of zero. */
5929 if (maxpagesize == 0)
5930 maxpagesize = 1;
5931 return ((vma - off) % maxpagesize);
5932 }
5933
5934 static void
5935 print_segment_map (const struct elf_segment_map *m)
5936 {
5937 unsigned int j;
5938 const char *pt = get_segment_type (m->p_type);
5939 char buf[32];
5940
5941 if (pt == NULL)
5942 {
5943 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5944 sprintf (buf, "LOPROC+%7.7x",
5945 (unsigned int) (m->p_type - PT_LOPROC));
5946 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5947 sprintf (buf, "LOOS+%7.7x",
5948 (unsigned int) (m->p_type - PT_LOOS));
5949 else
5950 snprintf (buf, sizeof (buf), "%8.8x",
5951 (unsigned int) m->p_type);
5952 pt = buf;
5953 }
5954 fflush (stdout);
5955 fprintf (stderr, "%s:", pt);
5956 for (j = 0; j < m->count; j++)
5957 fprintf (stderr, " %s", m->sections [j]->name);
5958 putc ('\n',stderr);
5959 fflush (stderr);
5960 }
5961
5962 /* Assign file positions to the sections based on the mapping from
5963 sections to segments. This function also sets up some fields in
5964 the file header. */
5965
5966 static bool
5967 assign_file_positions_for_load_sections (bfd *abfd,
5968 struct bfd_link_info *link_info)
5969 {
5970 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5971 struct elf_segment_map *m;
5972 struct elf_segment_map *phdr_load_seg;
5973 Elf_Internal_Phdr *phdrs;
5974 Elf_Internal_Phdr *p;
5975 file_ptr off; /* Octets. */
5976 bfd_size_type maxpagesize;
5977 unsigned int alloc, actual;
5978 unsigned int i, j;
5979 struct elf_segment_map **sorted_seg_map;
5980 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5981
5982 if (link_info == NULL
5983 && !_bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
5984 return false;
5985
5986 alloc = 0;
5987 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5988 m->idx = alloc++;
5989
5990 if (alloc)
5991 {
5992 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5993 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5994 }
5995 else
5996 {
5997 /* PR binutils/12467. */
5998 elf_elfheader (abfd)->e_phoff = 0;
5999 elf_elfheader (abfd)->e_phentsize = 0;
6000 }
6001
6002 elf_elfheader (abfd)->e_phnum = alloc;
6003
6004 if (elf_program_header_size (abfd) == (bfd_size_type) -1)
6005 {
6006 actual = alloc;
6007 elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
6008 }
6009 else
6010 {
6011 actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
6012 BFD_ASSERT (elf_program_header_size (abfd)
6013 == actual * bed->s->sizeof_phdr);
6014 BFD_ASSERT (actual >= alloc);
6015 }
6016
6017 if (alloc == 0)
6018 {
6019 elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
6020 return true;
6021 }
6022
6023 /* We're writing the size in elf_program_header_size (abfd),
6024 see assign_file_positions_except_relocs, so make sure we have
6025 that amount allocated, with trailing space cleared.
6026 The variable alloc contains the computed need, while
6027 elf_program_header_size (abfd) contains the size used for the
6028 layout.
6029 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
6030 where the layout is forced to according to a larger size in the
6031 last iterations for the testcase ld-elf/header. */
6032 phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
6033 + alloc * sizeof (*sorted_seg_map)));
6034 sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
6035 elf_tdata (abfd)->phdr = phdrs;
6036 if (phdrs == NULL)
6037 return false;
6038
6039 for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
6040 {
6041 sorted_seg_map[j] = m;
6042 /* If elf_segment_map is not from map_sections_to_segments, the
6043 sections may not be correctly ordered. NOTE: sorting should
6044 not be done to the PT_NOTE section of a corefile, which may
6045 contain several pseudo-sections artificially created by bfd.
6046 Sorting these pseudo-sections breaks things badly. */
6047 if (m->count > 1
6048 && !(elf_elfheader (abfd)->e_type == ET_CORE
6049 && m->p_type == PT_NOTE))
6050 {
6051 for (i = 0; i < m->count; i++)
6052 m->sections[i]->target_index = i;
6053 qsort (m->sections, (size_t) m->count, sizeof (asection *),
6054 elf_sort_sections);
6055 }
6056 }
6057 if (alloc > 1)
6058 qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
6059 elf_sort_segments);
6060
6061 maxpagesize = 1;
6062 if ((abfd->flags & D_PAGED) != 0)
6063 {
6064 if (link_info != NULL)
6065 maxpagesize = link_info->maxpagesize;
6066 else
6067 maxpagesize = bed->maxpagesize;
6068 }
6069
6070 /* Sections must map to file offsets past the ELF file header. */
6071 off = bed->s->sizeof_ehdr;
6072 /* And if one of the PT_LOAD headers doesn't include the program
6073 headers then we'll be mapping program headers in the usual
6074 position after the ELF file header. */
6075 phdr_load_seg = NULL;
6076 for (j = 0; j < alloc; j++)
6077 {
6078 m = sorted_seg_map[j];
6079 if (m->p_type != PT_LOAD)
6080 break;
6081 if (m->includes_phdrs)
6082 {
6083 phdr_load_seg = m;
6084 break;
6085 }
6086 }
6087 if (phdr_load_seg == NULL)
6088 off += actual * bed->s->sizeof_phdr;
6089
6090 for (j = 0; j < alloc; j++)
6091 {
6092 asection **secpp;
6093 bfd_vma off_adjust; /* Octets. */
6094 bool no_contents;
6095 bfd_size_type p_align;
6096 bool p_align_p;
6097
6098 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
6099 number of sections with contents contributing to both p_filesz
6100 and p_memsz, followed by a number of sections with no contents
6101 that just contribute to p_memsz. In this loop, OFF tracks next
6102 available file offset for PT_LOAD and PT_NOTE segments. */
6103 m = sorted_seg_map[j];
6104 p = phdrs + m->idx;
6105 p->p_type = m->p_type;
6106 p->p_flags = m->p_flags;
6107 p_align = bed->p_align;
6108 p_align_p = false;
6109
6110 if (m->count == 0)
6111 p->p_vaddr = m->p_vaddr_offset * opb;
6112 else
6113 p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
6114
6115 if (m->p_paddr_valid)
6116 p->p_paddr = m->p_paddr;
6117 else if (m->count == 0)
6118 p->p_paddr = 0;
6119 else
6120 p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
6121
6122 if (p->p_type == PT_LOAD
6123 && (abfd->flags & D_PAGED) != 0)
6124 {
6125 /* p_align in demand paged PT_LOAD segments effectively stores
6126 the maximum page size. When copying an executable with
6127 objcopy, we set m->p_align from the input file. Use this
6128 value for maxpagesize rather than bed->maxpagesize, which
6129 may be different. Note that we use maxpagesize for PT_TLS
6130 segment alignment later in this function, so we are relying
6131 on at least one PT_LOAD segment appearing before a PT_TLS
6132 segment. */
6133 if (m->p_align_valid)
6134 maxpagesize = m->p_align;
6135 else if (p_align != 0
6136 && (link_info == NULL
6137 || !link_info->maxpagesize_is_set))
6138 /* Set p_align to the default p_align value while laying
6139 out segments aligning to the maximum page size or the
6140 largest section alignment. The run-time loader can
6141 align segments to the default p_align value or the
6142 maximum page size, depending on system page size. */
6143 p_align_p = true;
6144
6145 p->p_align = maxpagesize;
6146 }
6147 else if (m->p_align_valid)
6148 p->p_align = m->p_align;
6149 else if (m->count == 0)
6150 p->p_align = 1 << bed->s->log_file_align;
6151
6152 if (m == phdr_load_seg)
6153 {
6154 if (!m->includes_filehdr)
6155 p->p_offset = off;
6156 off += actual * bed->s->sizeof_phdr;
6157 }
6158
6159 no_contents = false;
6160 off_adjust = 0;
6161 if (p->p_type == PT_LOAD
6162 && m->count > 0)
6163 {
6164 bfd_size_type align; /* Bytes. */
6165 unsigned int align_power = 0;
6166
6167 if (m->p_align_valid)
6168 align = p->p_align;
6169 else
6170 {
6171 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
6172 {
6173 unsigned int secalign;
6174
6175 secalign = bfd_section_alignment (*secpp);
6176 if (secalign > align_power)
6177 align_power = secalign;
6178 }
6179 align = (bfd_size_type) 1 << align_power;
6180 if (align < maxpagesize)
6181 {
6182 /* If a section requires alignment higher than the
6183 default p_align value, don't set p_align to the
6184 default p_align value. */
6185 if (align > p_align)
6186 p_align_p = false;
6187 align = maxpagesize;
6188 }
6189 else
6190 {
6191 /* If a section requires alignment higher than the
6192 maximum page size, set p_align to the section
6193 alignment. */
6194 p_align_p = true;
6195 p_align = align;
6196 }
6197 }
6198
6199 for (i = 0; i < m->count; i++)
6200 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
6201 /* If we aren't making room for this section, then
6202 it must be SHT_NOBITS regardless of what we've
6203 set via struct bfd_elf_special_section. */
6204 elf_section_type (m->sections[i]) = SHT_NOBITS;
6205
6206 /* Find out whether this segment contains any loadable
6207 sections. */
6208 no_contents = true;
6209 for (i = 0; i < m->count; i++)
6210 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
6211 {
6212 no_contents = false;
6213 break;
6214 }
6215
6216 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
6217
6218 /* Broken hardware and/or kernel require that files do not
6219 map the same page with different permissions on some hppa
6220 processors. */
6221 if (j != 0
6222 && (abfd->flags & D_PAGED) != 0
6223 && bed->no_page_alias
6224 && (off & (maxpagesize - 1)) != 0
6225 && ((off & -maxpagesize)
6226 == ((off + off_adjust) & -maxpagesize)))
6227 off_adjust += maxpagesize;
6228 off += off_adjust;
6229 if (no_contents)
6230 {
6231 /* We shouldn't need to align the segment on disk since
6232 the segment doesn't need file space, but the gABI
6233 arguably requires the alignment and glibc ld.so
6234 checks it. So to comply with the alignment
6235 requirement but not waste file space, we adjust
6236 p_offset for just this segment. (OFF_ADJUST is
6237 subtracted from OFF later.) This may put p_offset
6238 past the end of file, but that shouldn't matter. */
6239 }
6240 else
6241 off_adjust = 0;
6242 }
6243 /* Make sure the .dynamic section is the first section in the
6244 PT_DYNAMIC segment. */
6245 else if (p->p_type == PT_DYNAMIC
6246 && m->count > 1
6247 && strcmp (m->sections[0]->name, ".dynamic") != 0)
6248 {
6249 _bfd_error_handler
6250 (_("%pB: The first section in the PT_DYNAMIC segment"
6251 " is not the .dynamic section"),
6252 abfd);
6253 bfd_set_error (bfd_error_bad_value);
6254 return false;
6255 }
6256 /* Set the note section type to SHT_NOTE. */
6257 else if (p->p_type == PT_NOTE)
6258 for (i = 0; i < m->count; i++)
6259 elf_section_type (m->sections[i]) = SHT_NOTE;
6260
6261 if (m->includes_filehdr)
6262 {
6263 if (!m->p_flags_valid)
6264 p->p_flags |= PF_R;
6265 p->p_filesz = bed->s->sizeof_ehdr;
6266 p->p_memsz = bed->s->sizeof_ehdr;
6267 if (p->p_type == PT_LOAD)
6268 {
6269 if (m->count > 0)
6270 {
6271 if (p->p_vaddr < (bfd_vma) off
6272 || (!m->p_paddr_valid
6273 && p->p_paddr < (bfd_vma) off))
6274 {
6275 _bfd_error_handler
6276 (_("%pB: not enough room for program headers,"
6277 " try linking with -N"),
6278 abfd);
6279 bfd_set_error (bfd_error_bad_value);
6280 return false;
6281 }
6282 p->p_vaddr -= off;
6283 if (!m->p_paddr_valid)
6284 p->p_paddr -= off;
6285 }
6286 }
6287 else if (sorted_seg_map[0]->includes_filehdr)
6288 {
6289 Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
6290 p->p_vaddr = filehdr->p_vaddr;
6291 if (!m->p_paddr_valid)
6292 p->p_paddr = filehdr->p_paddr;
6293 }
6294 }
6295
6296 if (m->includes_phdrs)
6297 {
6298 if (!m->p_flags_valid)
6299 p->p_flags |= PF_R;
6300 p->p_filesz += actual * bed->s->sizeof_phdr;
6301 p->p_memsz += actual * bed->s->sizeof_phdr;
6302 if (!m->includes_filehdr)
6303 {
6304 if (p->p_type == PT_LOAD)
6305 {
6306 elf_elfheader (abfd)->e_phoff = p->p_offset;
6307 if (m->count > 0)
6308 {
6309 p->p_vaddr -= off - p->p_offset;
6310 if (!m->p_paddr_valid)
6311 p->p_paddr -= off - p->p_offset;
6312 }
6313 }
6314 else if (phdr_load_seg != NULL)
6315 {
6316 Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
6317 bfd_vma phdr_off = 0; /* Octets. */
6318 if (phdr_load_seg->includes_filehdr)
6319 phdr_off = bed->s->sizeof_ehdr;
6320 p->p_vaddr = phdr->p_vaddr + phdr_off;
6321 if (!m->p_paddr_valid)
6322 p->p_paddr = phdr->p_paddr + phdr_off;
6323 p->p_offset = phdr->p_offset + phdr_off;
6324 }
6325 else
6326 p->p_offset = bed->s->sizeof_ehdr;
6327 }
6328 }
6329
6330 if (p->p_type == PT_LOAD
6331 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
6332 {
6333 if (!m->includes_filehdr && !m->includes_phdrs)
6334 {
6335 p->p_offset = off;
6336 if (no_contents)
6337 {
6338 /* Put meaningless p_offset for PT_LOAD segments
6339 without file contents somewhere within the first
6340 page, in an attempt to not point past EOF. */
6341 bfd_size_type align = maxpagesize;
6342 if (align < p->p_align)
6343 align = p->p_align;
6344 if (align < 1)
6345 align = 1;
6346 p->p_offset = off % align;
6347 }
6348 }
6349 else
6350 {
6351 file_ptr adjust; /* Octets. */
6352
6353 adjust = off - (p->p_offset + p->p_filesz);
6354 if (!no_contents)
6355 p->p_filesz += adjust;
6356 p->p_memsz += adjust;
6357 }
6358 }
6359
6360 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
6361 maps. Set filepos for sections in PT_LOAD segments, and in
6362 core files, for sections in PT_NOTE segments.
6363 assign_file_positions_for_non_load_sections will set filepos
6364 for other sections and update p_filesz for other segments. */
6365 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
6366 {
6367 asection *sec;
6368 bfd_size_type align;
6369 Elf_Internal_Shdr *this_hdr;
6370
6371 sec = *secpp;
6372 this_hdr = &elf_section_data (sec)->this_hdr;
6373 align = (bfd_size_type) 1 << bfd_section_alignment (sec);
6374
6375 if ((p->p_type == PT_LOAD
6376 || p->p_type == PT_TLS)
6377 && (this_hdr->sh_type != SHT_NOBITS
6378 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
6379 && ((this_hdr->sh_flags & SHF_TLS) == 0
6380 || p->p_type == PT_TLS))))
6381 {
6382 bfd_vma p_start = p->p_paddr; /* Octets. */
6383 bfd_vma p_end = p_start + p->p_memsz; /* Octets. */
6384 bfd_vma s_start = sec->lma * opb; /* Octets. */
6385 bfd_vma adjust = s_start - p_end; /* Octets. */
6386
6387 if (adjust != 0
6388 && (s_start < p_end
6389 || p_end < p_start))
6390 {
6391 _bfd_error_handler
6392 /* xgettext:c-format */
6393 (_("%pB: section %pA lma %#" PRIx64
6394 " adjusted to %#" PRIx64),
6395 abfd, sec, (uint64_t) s_start / opb,
6396 (uint64_t) p_end / opb);
6397 adjust = 0;
6398 sec->lma = p_end / opb;
6399 }
6400 p->p_memsz += adjust;
6401
6402 if (p->p_type == PT_LOAD)
6403 {
6404 if (this_hdr->sh_type != SHT_NOBITS)
6405 {
6406 off_adjust = 0;
6407 if (p->p_filesz + adjust < p->p_memsz)
6408 {
6409 /* We have a PROGBITS section following NOBITS ones.
6410 Allocate file space for the NOBITS section(s).
6411 We don't need to write out the zeros, posix
6412 fseek past the end of data already written
6413 followed by a write at that location is
6414 guaranteed to result in zeros being read
6415 from the gap. */
6416 adjust = p->p_memsz - p->p_filesz;
6417 }
6418 }
6419 /* We only adjust sh_offset in SHT_NOBITS sections
6420 as would seem proper for their address when the
6421 section is first in the segment. sh_offset
6422 doesn't really have any significance for
6423 SHT_NOBITS anyway, apart from a notional position
6424 relative to other sections. Historically we
6425 didn't bother with adjusting sh_offset and some
6426 programs depend on it not being adjusted. See
6427 pr12921 and pr25662. */
6428 if (this_hdr->sh_type != SHT_NOBITS || i == 0)
6429 {
6430 off += adjust;
6431 if (this_hdr->sh_type == SHT_NOBITS)
6432 off_adjust += adjust;
6433 }
6434 }
6435 if (this_hdr->sh_type != SHT_NOBITS)
6436 p->p_filesz += adjust;
6437 }
6438
6439 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
6440 {
6441 /* The section at i == 0 is the one that actually contains
6442 everything. */
6443 if (i == 0)
6444 {
6445 this_hdr->sh_offset = sec->filepos = off;
6446 off += this_hdr->sh_size;
6447 p->p_filesz = this_hdr->sh_size;
6448 p->p_memsz = 0;
6449 p->p_align = 1;
6450 }
6451 else
6452 {
6453 /* The rest are fake sections that shouldn't be written. */
6454 sec->filepos = 0;
6455 sec->size = 0;
6456 sec->flags = 0;
6457 continue;
6458 }
6459 }
6460 else
6461 {
6462 if (p->p_type == PT_LOAD)
6463 {
6464 this_hdr->sh_offset = sec->filepos = off;
6465 if (this_hdr->sh_type != SHT_NOBITS)
6466 off += this_hdr->sh_size;
6467 }
6468 else if (this_hdr->sh_type == SHT_NOBITS
6469 && (this_hdr->sh_flags & SHF_TLS) != 0
6470 && this_hdr->sh_offset == 0)
6471 {
6472 /* This is a .tbss section that didn't get a PT_LOAD.
6473 (See _bfd_elf_map_sections_to_segments "Create a
6474 final PT_LOAD".) Set sh_offset to the value it
6475 would have if we had created a zero p_filesz and
6476 p_memsz PT_LOAD header for the section. This
6477 also makes the PT_TLS header have the same
6478 p_offset value. */
6479 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
6480 off, align);
6481 this_hdr->sh_offset = sec->filepos = off + adjust;
6482 }
6483
6484 if (this_hdr->sh_type != SHT_NOBITS)
6485 {
6486 p->p_filesz += this_hdr->sh_size;
6487 /* A load section without SHF_ALLOC is something like
6488 a note section in a PT_NOTE segment. These take
6489 file space but are not loaded into memory. */
6490 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
6491 p->p_memsz += this_hdr->sh_size;
6492 }
6493 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
6494 {
6495 if (p->p_type == PT_TLS)
6496 p->p_memsz += this_hdr->sh_size;
6497
6498 /* .tbss is special. It doesn't contribute to p_memsz of
6499 normal segments. */
6500 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
6501 p->p_memsz += this_hdr->sh_size;
6502 }
6503
6504 if (align > p->p_align
6505 && !m->p_align_valid
6506 && (p->p_type != PT_LOAD
6507 || (abfd->flags & D_PAGED) == 0))
6508 p->p_align = align;
6509 }
6510
6511 if (!m->p_flags_valid)
6512 {
6513 p->p_flags |= PF_R;
6514 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
6515 p->p_flags |= PF_X;
6516 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
6517 p->p_flags |= PF_W;
6518 }
6519 }
6520
6521 off -= off_adjust;
6522
6523 /* PR ld/20815 - Check that the program header segment, if
6524 present, will be loaded into memory. */
6525 if (p->p_type == PT_PHDR
6526 && phdr_load_seg == NULL
6527 && !(bed->elf_backend_allow_non_load_phdr != NULL
6528 && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
6529 {
6530 /* The fix for this error is usually to edit the linker script being
6531 used and set up the program headers manually. Either that or
6532 leave room for the headers at the start of the SECTIONS. */
6533 _bfd_error_handler (_("%pB: error: PHDR segment not covered"
6534 " by LOAD segment"),
6535 abfd);
6536 if (link_info == NULL)
6537 return false;
6538 /* Arrange for the linker to exit with an error, deleting
6539 the output file unless --noinhibit-exec is given. */
6540 link_info->callbacks->info ("%X");
6541 }
6542
6543 /* Check that all sections are in a PT_LOAD segment.
6544 Don't check funky gdb generated core files. */
6545 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
6546 {
6547 bool check_vma = true;
6548
6549 for (i = 1; i < m->count; i++)
6550 if (m->sections[i]->vma == m->sections[i - 1]->vma
6551 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
6552 ->this_hdr), p) != 0
6553 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
6554 ->this_hdr), p) != 0)
6555 {
6556 /* Looks like we have overlays packed into the segment. */
6557 check_vma = false;
6558 break;
6559 }
6560
6561 for (i = 0; i < m->count; i++)
6562 {
6563 Elf_Internal_Shdr *this_hdr;
6564 asection *sec;
6565
6566 sec = m->sections[i];
6567 this_hdr = &(elf_section_data(sec)->this_hdr);
6568 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
6569 && !ELF_TBSS_SPECIAL (this_hdr, p))
6570 {
6571 _bfd_error_handler
6572 /* xgettext:c-format */
6573 (_("%pB: section `%pA' can't be allocated in segment %d"),
6574 abfd, sec, j);
6575 print_segment_map (m);
6576 }
6577 }
6578
6579 if (p_align_p)
6580 p->p_align = p_align;
6581 }
6582 }
6583
6584 elf_next_file_pos (abfd) = off;
6585
6586 if (link_info != NULL
6587 && phdr_load_seg != NULL
6588 && phdr_load_seg->includes_filehdr)
6589 {
6590 /* There is a segment that contains both the file headers and the
6591 program headers, so provide a symbol __ehdr_start pointing there.
6592 A program can use this to examine itself robustly. */
6593
6594 struct elf_link_hash_entry *hash
6595 = elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
6596 false, false, true);
6597 /* If the symbol was referenced and not defined, define it. */
6598 if (hash != NULL
6599 && (hash->root.type == bfd_link_hash_new
6600 || hash->root.type == bfd_link_hash_undefined
6601 || hash->root.type == bfd_link_hash_undefweak
6602 || hash->root.type == bfd_link_hash_common))
6603 {
6604 asection *s = NULL;
6605 bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
6606
6607 if (phdr_load_seg->count != 0)
6608 /* The segment contains sections, so use the first one. */
6609 s = phdr_load_seg->sections[0];
6610 else
6611 /* Use the first (i.e. lowest-addressed) section in any segment. */
6612 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6613 if (m->p_type == PT_LOAD && m->count != 0)
6614 {
6615 s = m->sections[0];
6616 break;
6617 }
6618
6619 if (s != NULL)
6620 {
6621 hash->root.u.def.value = filehdr_vaddr - s->vma;
6622 hash->root.u.def.section = s;
6623 }
6624 else
6625 {
6626 hash->root.u.def.value = filehdr_vaddr;
6627 hash->root.u.def.section = bfd_abs_section_ptr;
6628 }
6629
6630 hash->root.type = bfd_link_hash_defined;
6631 hash->def_regular = 1;
6632 hash->non_elf = 0;
6633 }
6634 }
6635
6636 return true;
6637 }
6638
6639 /* Determine if a bfd is a debuginfo file. Unfortunately there
6640 is no defined method for detecting such files, so we have to
6641 use heuristics instead. */
6642
6643 bool
6644 is_debuginfo_file (bfd *abfd)
6645 {
6646 if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6647 return false;
6648
6649 Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6650 Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6651 Elf_Internal_Shdr **headerp;
6652
6653 for (headerp = start_headers; headerp < end_headers; headerp ++)
6654 {
6655 Elf_Internal_Shdr *header = * headerp;
6656
6657 /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6658 The only allocated sections are SHT_NOBITS or SHT_NOTES. */
6659 if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6660 && header->sh_type != SHT_NOBITS
6661 && header->sh_type != SHT_NOTE)
6662 return false;
6663 }
6664
6665 return true;
6666 }
6667
6668 /* Assign file positions for other sections, except for compressed debug
6669 and sections assigned in _bfd_elf_assign_file_positions_for_non_load. */
6670
6671 static bool
6672 assign_file_positions_for_non_load_sections (bfd *abfd,
6673 struct bfd_link_info *link_info)
6674 {
6675 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6676 Elf_Internal_Shdr **i_shdrpp;
6677 Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6678 Elf_Internal_Phdr *phdrs;
6679 Elf_Internal_Phdr *p;
6680 struct elf_segment_map *m;
6681 file_ptr off;
6682 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
6683 bfd_vma maxpagesize;
6684
6685 if (link_info != NULL)
6686 maxpagesize = link_info->maxpagesize;
6687 else
6688 maxpagesize = bed->maxpagesize;
6689 i_shdrpp = elf_elfsections (abfd);
6690 end_hdrpp = i_shdrpp + elf_numsections (abfd);
6691 off = elf_next_file_pos (abfd);
6692 for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6693 {
6694 Elf_Internal_Shdr *hdr;
6695 bfd_vma align;
6696
6697 hdr = *hdrpp;
6698 if (hdr->bfd_section != NULL
6699 && (hdr->bfd_section->filepos != 0
6700 || (hdr->sh_type == SHT_NOBITS
6701 && hdr->contents == NULL)))
6702 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6703 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6704 {
6705 if (hdr->sh_size != 0
6706 /* PR 24717 - debuginfo files are known to be not strictly
6707 compliant with the ELF standard. In particular they often
6708 have .note.gnu.property sections that are outside of any
6709 loadable segment. This is not a problem for such files,
6710 so do not warn about them. */
6711 && ! is_debuginfo_file (abfd))
6712 _bfd_error_handler
6713 /* xgettext:c-format */
6714 (_("%pB: warning: allocated section `%s' not in segment"),
6715 abfd,
6716 (hdr->bfd_section == NULL
6717 ? "*unknown*"
6718 : hdr->bfd_section->name));
6719 /* We don't need to page align empty sections. */
6720 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6721 align = maxpagesize;
6722 else
6723 align = hdr->sh_addralign & -hdr->sh_addralign;
6724 off += vma_page_aligned_bias (hdr->sh_addr, off, align);
6725 off = _bfd_elf_assign_file_position_for_section (hdr, off,
6726 false);
6727 }
6728 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6729 && hdr->bfd_section == NULL)
6730 /* We don't know the offset of these sections yet:
6731 their size has not been decided. */
6732 || (abfd->is_linker_output
6733 && hdr->bfd_section != NULL
6734 && (hdr->sh_name == -1u
6735 || bfd_section_is_ctf (hdr->bfd_section)))
6736 || hdr == i_shdrpp[elf_onesymtab (abfd)]
6737 || (elf_symtab_shndx_list (abfd) != NULL
6738 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6739 || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6740 || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6741 hdr->sh_offset = -1;
6742 else
6743 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6744 }
6745 elf_next_file_pos (abfd) = off;
6746
6747 /* Now that we have set the section file positions, we can set up
6748 the file positions for the non PT_LOAD segments. */
6749 phdrs = elf_tdata (abfd)->phdr;
6750 for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6751 {
6752 if (p->p_type == PT_GNU_RELRO)
6753 {
6754 bfd_vma start, end; /* Bytes. */
6755 bool ok;
6756
6757 if (link_info != NULL)
6758 {
6759 /* During linking the range of the RELRO segment is passed
6760 in link_info. Note that there may be padding between
6761 relro_start and the first RELRO section. */
6762 start = link_info->relro_start;
6763 end = link_info->relro_end;
6764 }
6765 else if (m->count != 0)
6766 {
6767 if (!m->p_size_valid)
6768 abort ();
6769 start = m->sections[0]->vma;
6770 end = start + m->p_size / opb;
6771 }
6772 else
6773 {
6774 start = 0;
6775 end = 0;
6776 }
6777
6778 ok = false;
6779 if (start < end)
6780 {
6781 struct elf_segment_map *lm;
6782 const Elf_Internal_Phdr *lp;
6783 unsigned int i;
6784
6785 /* Find a LOAD segment containing a section in the RELRO
6786 segment. */
6787 for (lm = elf_seg_map (abfd), lp = phdrs;
6788 lm != NULL;
6789 lm = lm->next, lp++)
6790 {
6791 if (lp->p_type == PT_LOAD
6792 && lm->count != 0
6793 && (lm->sections[lm->count - 1]->vma
6794 + (!IS_TBSS (lm->sections[lm->count - 1])
6795 ? lm->sections[lm->count - 1]->size / opb
6796 : 0)) > start
6797 && lm->sections[0]->vma < end)
6798 break;
6799 }
6800
6801 if (lm != NULL)
6802 {
6803 /* Find the section starting the RELRO segment. */
6804 for (i = 0; i < lm->count; i++)
6805 {
6806 asection *s = lm->sections[i];
6807 if (s->vma >= start
6808 && s->vma < end
6809 && s->size != 0)
6810 break;
6811 }
6812
6813 if (i < lm->count)
6814 {
6815 p->p_vaddr = lm->sections[i]->vma * opb;
6816 p->p_paddr = lm->sections[i]->lma * opb;
6817 p->p_offset = lm->sections[i]->filepos;
6818 p->p_memsz = end * opb - p->p_vaddr;
6819 p->p_filesz = p->p_memsz;
6820
6821 /* The RELRO segment typically ends a few bytes
6822 into .got.plt but other layouts are possible.
6823 In cases where the end does not match any
6824 loaded section (for instance is in file
6825 padding), trim p_filesz back to correspond to
6826 the end of loaded section contents. */
6827 if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6828 p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6829
6830 /* Preserve the alignment and flags if they are
6831 valid. The gold linker generates RW/4 for
6832 the PT_GNU_RELRO section. It is better for
6833 objcopy/strip to honor these attributes
6834 otherwise gdb will choke when using separate
6835 debug files. */
6836 if (!m->p_align_valid)
6837 p->p_align = 1;
6838 if (!m->p_flags_valid)
6839 p->p_flags = PF_R;
6840 ok = true;
6841 }
6842 }
6843 }
6844
6845 if (!ok)
6846 {
6847 if (link_info != NULL)
6848 _bfd_error_handler
6849 (_("%pB: warning: unable to allocate any sections"
6850 " to PT_GNU_RELRO segment"),
6851 abfd);
6852 memset (p, 0, sizeof *p);
6853 }
6854 }
6855 else if (p->p_type == PT_GNU_STACK)
6856 {
6857 if (m->p_size_valid)
6858 p->p_memsz = m->p_size;
6859 }
6860 else if (m->count != 0)
6861 {
6862 unsigned int i;
6863
6864 if (p->p_type != PT_LOAD
6865 && (p->p_type != PT_NOTE
6866 || bfd_get_format (abfd) != bfd_core))
6867 {
6868 /* A user specified segment layout may include a PHDR
6869 segment that overlaps with a LOAD segment... */
6870 if (p->p_type == PT_PHDR)
6871 {
6872 m->count = 0;
6873 continue;
6874 }
6875
6876 if (m->includes_filehdr || m->includes_phdrs)
6877 {
6878 /* PR 17512: file: 2195325e. */
6879 _bfd_error_handler
6880 (_("%pB: error: non-load segment %d includes file header "
6881 "and/or program header"),
6882 abfd, (int) (p - phdrs));
6883 return false;
6884 }
6885
6886 p->p_filesz = 0;
6887 p->p_offset = m->sections[0]->filepos;
6888 for (i = m->count; i-- != 0;)
6889 {
6890 asection *sect = m->sections[i];
6891 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6892 if (hdr->sh_type != SHT_NOBITS)
6893 {
6894 p->p_filesz = sect->filepos - p->p_offset + hdr->sh_size;
6895 /* NB: p_memsz of the loadable PT_NOTE segment
6896 should be the same as p_filesz. */
6897 if (p->p_type == PT_NOTE
6898 && (hdr->sh_flags & SHF_ALLOC) != 0)
6899 p->p_memsz = p->p_filesz;
6900 break;
6901 }
6902 }
6903 }
6904 }
6905 }
6906
6907 return true;
6908 }
6909
6910 static elf_section_list *
6911 find_section_in_list (unsigned int i, elf_section_list * list)
6912 {
6913 for (;list != NULL; list = list->next)
6914 if (list->ndx == i)
6915 break;
6916 return list;
6917 }
6918
6919 /* Work out the file positions of all the sections. This is called by
6920 _bfd_elf_compute_section_file_positions. All the section sizes and
6921 VMAs must be known before this is called.
6922
6923 Reloc sections come in two flavours: Those processed specially as
6924 "side-channel" data attached to a section to which they apply, and
6925 those that bfd doesn't process as relocations. The latter sort are
6926 stored in a normal bfd section by bfd_section_from_shdr. We don't
6927 consider the former sort here, unless they form part of the loadable
6928 image. Reloc sections not assigned here (and compressed debugging
6929 sections and CTF sections which nothing else in the file can rely
6930 upon) will be handled later by assign_file_positions_for_relocs.
6931
6932 We also don't set the positions of the .symtab and .strtab here. */
6933
6934 static bool
6935 assign_file_positions_except_relocs (bfd *abfd,
6936 struct bfd_link_info *link_info)
6937 {
6938 struct elf_obj_tdata *tdata = elf_tdata (abfd);
6939 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6940 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6941 unsigned int alloc;
6942
6943 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6944 && bfd_get_format (abfd) != bfd_core)
6945 {
6946 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6947 unsigned int num_sec = elf_numsections (abfd);
6948 Elf_Internal_Shdr **hdrpp;
6949 unsigned int i;
6950 file_ptr off;
6951
6952 /* Start after the ELF header. */
6953 off = i_ehdrp->e_ehsize;
6954
6955 /* We are not creating an executable, which means that we are
6956 not creating a program header, and that the actual order of
6957 the sections in the file is unimportant. */
6958 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6959 {
6960 Elf_Internal_Shdr *hdr;
6961
6962 hdr = *hdrpp;
6963 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6964 && hdr->bfd_section == NULL)
6965 /* Do not assign offsets for these sections yet: we don't know
6966 their sizes. */
6967 || (abfd->is_linker_output
6968 && hdr->bfd_section != NULL
6969 && (hdr->sh_name == -1u
6970 || bfd_section_is_ctf (hdr->bfd_section)))
6971 || i == elf_onesymtab (abfd)
6972 || (elf_symtab_shndx_list (abfd) != NULL
6973 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6974 || i == elf_strtab_sec (abfd)
6975 || i == elf_shstrtab_sec (abfd))
6976 {
6977 hdr->sh_offset = -1;
6978 }
6979 else
6980 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6981 }
6982
6983 elf_next_file_pos (abfd) = off;
6984 elf_program_header_size (abfd) = 0;
6985 }
6986 else
6987 {
6988 /* Assign file positions for the loaded sections based on the
6989 assignment of sections to segments. */
6990 if (!assign_file_positions_for_load_sections (abfd, link_info))
6991 return false;
6992
6993 /* And for non-load sections. */
6994 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6995 return false;
6996 }
6997
6998 if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6999 return false;
7000
7001 /* Write out the program headers. */
7002 alloc = i_ehdrp->e_phnum;
7003 if (alloc != 0)
7004 {
7005 if (link_info != NULL && ! link_info->no_warn_rwx_segments)
7006 {
7007 bool warned_tls = false;
7008 bool warned_rwx = false;
7009
7010 /* Memory resident segments with non-zero size and RWX
7011 permissions are a security risk, so we generate a warning
7012 here if we are creating any. */
7013 unsigned int i;
7014
7015 for (i = 0; i < alloc; i++)
7016 {
7017 const Elf_Internal_Phdr * phdr = tdata->phdr + i;
7018
7019 if (phdr->p_memsz == 0)
7020 continue;
7021
7022 if (! warned_tls
7023 && phdr->p_type == PT_TLS
7024 && (phdr->p_flags & PF_X))
7025 {
7026 if (link_info->warn_is_error_for_rwx_segments)
7027 {
7028 _bfd_error_handler (_("\
7029 error: %pB has a TLS segment with execute permission"),
7030 abfd);
7031 return false;
7032 }
7033
7034 _bfd_error_handler (_("\
7035 warning: %pB has a TLS segment with execute permission"),
7036 abfd);
7037 if (warned_rwx)
7038 break;
7039
7040 warned_tls = true;
7041 }
7042 else if (! warned_rwx
7043 && phdr->p_type == PT_LOAD
7044 && ((phdr->p_flags & (PF_R | PF_W | PF_X))
7045 == (PF_R | PF_W | PF_X)))
7046 {
7047 if (link_info->warn_is_error_for_rwx_segments)
7048 {
7049 _bfd_error_handler (_("\
7050 error: %pB has a LOAD segment with RWX permissions"),
7051 abfd);
7052 return false;
7053 }
7054
7055 _bfd_error_handler (_("\
7056 warning: %pB has a LOAD segment with RWX permissions"),
7057 abfd);
7058 if (warned_tls)
7059 break;
7060
7061 warned_rwx = true;
7062 }
7063 }
7064 }
7065
7066 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
7067 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
7068 return false;
7069 }
7070
7071 return true;
7072 }
7073
7074 bool
7075 _bfd_elf_init_file_header (bfd *abfd,
7076 struct bfd_link_info *info ATTRIBUTE_UNUSED)
7077 {
7078 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
7079 struct elf_strtab_hash *shstrtab;
7080 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7081
7082 i_ehdrp = elf_elfheader (abfd);
7083
7084 shstrtab = _bfd_elf_strtab_init ();
7085 if (shstrtab == NULL)
7086 return false;
7087
7088 elf_shstrtab (abfd) = shstrtab;
7089
7090 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
7091 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
7092 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
7093 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
7094
7095 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
7096 i_ehdrp->e_ident[EI_DATA] =
7097 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
7098 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
7099
7100 if ((abfd->flags & DYNAMIC) != 0)
7101 i_ehdrp->e_type = ET_DYN;
7102 else if ((abfd->flags & EXEC_P) != 0)
7103 i_ehdrp->e_type = ET_EXEC;
7104 else if (bfd_get_format (abfd) == bfd_core)
7105 i_ehdrp->e_type = ET_CORE;
7106 else
7107 i_ehdrp->e_type = ET_REL;
7108
7109 switch (bfd_get_arch (abfd))
7110 {
7111 case bfd_arch_unknown:
7112 i_ehdrp->e_machine = EM_NONE;
7113 break;
7114
7115 /* There used to be a long list of cases here, each one setting
7116 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
7117 in the corresponding bfd definition. To avoid duplication,
7118 the switch was removed. Machines that need special handling
7119 can generally do it in elf_backend_final_write_processing(),
7120 unless they need the information earlier than the final write.
7121 Such need can generally be supplied by replacing the tests for
7122 e_machine with the conditions used to determine it. */
7123 default:
7124 i_ehdrp->e_machine = bed->elf_machine_code;
7125 }
7126
7127 i_ehdrp->e_version = bed->s->ev_current;
7128 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
7129
7130 /* No program header, for now. */
7131 i_ehdrp->e_phoff = 0;
7132 i_ehdrp->e_phentsize = 0;
7133 i_ehdrp->e_phnum = 0;
7134
7135 /* Each bfd section is section header entry. */
7136 i_ehdrp->e_entry = bfd_get_start_address (abfd);
7137 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
7138
7139 elf_tdata (abfd)->symtab_hdr.sh_name =
7140 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
7141 elf_tdata (abfd)->strtab_hdr.sh_name =
7142 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
7143 elf_tdata (abfd)->shstrtab_hdr.sh_name =
7144 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
7145 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
7146 || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
7147 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
7148 return false;
7149
7150 return true;
7151 }
7152
7153 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
7154
7155 FIXME: We used to have code here to sort the PT_LOAD segments into
7156 ascending order, as per the ELF spec. But this breaks some programs,
7157 including the Linux kernel. But really either the spec should be
7158 changed or the programs updated. */
7159
7160 bool
7161 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
7162 {
7163 if (link_info != NULL && bfd_link_pie (link_info))
7164 {
7165 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
7166 unsigned int num_segments = i_ehdrp->e_phnum;
7167 struct elf_obj_tdata *tdata = elf_tdata (obfd);
7168 Elf_Internal_Phdr *segment = tdata->phdr;
7169 Elf_Internal_Phdr *end_segment = &segment[num_segments];
7170
7171 /* Find the lowest p_vaddr in PT_LOAD segments. */
7172 bfd_vma p_vaddr = (bfd_vma) -1;
7173 for (; segment < end_segment; segment++)
7174 if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
7175 p_vaddr = segment->p_vaddr;
7176
7177 /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
7178 segments is non-zero. */
7179 if (p_vaddr)
7180 i_ehdrp->e_type = ET_EXEC;
7181 }
7182 return true;
7183 }
7184
7185 /* Assign file positions for all the reloc sections which are not part
7186 of the loadable file image, and the file position of section headers. */
7187
7188 static bool
7189 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
7190 {
7191 file_ptr off;
7192 Elf_Internal_Shdr **shdrpp, **end_shdrpp;
7193 Elf_Internal_Shdr *shdrp;
7194 Elf_Internal_Ehdr *i_ehdrp;
7195 const struct elf_backend_data *bed;
7196
7197 /* Skip non-load sections without section header. */
7198 if ((abfd->flags & BFD_NO_SECTION_HEADER) != 0)
7199 return true;
7200
7201 off = elf_next_file_pos (abfd);
7202
7203 shdrpp = elf_elfsections (abfd);
7204 end_shdrpp = shdrpp + elf_numsections (abfd);
7205 for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
7206 {
7207 shdrp = *shdrpp;
7208 if (shdrp->sh_offset == -1)
7209 {
7210 asection *sec = shdrp->bfd_section;
7211 if (sec == NULL
7212 || shdrp->sh_type == SHT_REL
7213 || shdrp->sh_type == SHT_RELA)
7214 ;
7215 else if (bfd_section_is_ctf (sec))
7216 {
7217 /* Update section size and contents. */
7218 shdrp->sh_size = sec->size;
7219 shdrp->contents = sec->contents;
7220 }
7221 else if (shdrp->sh_name == -1u)
7222 {
7223 const char *name = sec->name;
7224 struct bfd_elf_section_data *d;
7225
7226 /* Compress DWARF debug sections. */
7227 if (!bfd_compress_section (abfd, sec, shdrp->contents))
7228 return false;
7229
7230 if (sec->compress_status == COMPRESS_SECTION_DONE
7231 && (abfd->flags & BFD_COMPRESS_GABI) == 0
7232 && name[1] == 'd')
7233 {
7234 /* If section is compressed with zlib-gnu, convert
7235 section name from .debug_* to .zdebug_*. */
7236 char *new_name = bfd_debug_name_to_zdebug (abfd, name);
7237 if (new_name == NULL)
7238 return false;
7239 name = new_name;
7240 }
7241 /* Add section name to section name section. */
7242 shdrp->sh_name
7243 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
7244 name, false);
7245 d = elf_section_data (sec);
7246
7247 /* Add reloc section name to section name section. */
7248 if (d->rel.hdr
7249 && !_bfd_elf_set_reloc_sh_name (abfd, d->rel.hdr,
7250 name, false))
7251 return false;
7252 if (d->rela.hdr
7253 && !_bfd_elf_set_reloc_sh_name (abfd, d->rela.hdr,
7254 name, true))
7255 return false;
7256
7257 /* Update section size and contents. */
7258 shdrp->sh_size = sec->size;
7259 shdrp->contents = sec->contents;
7260 sec->contents = NULL;
7261 }
7262
7263 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
7264 }
7265 }
7266
7267 /* Place section name section after DWARF debug sections have been
7268 compressed. */
7269 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
7270 shdrp = &elf_tdata (abfd)->shstrtab_hdr;
7271 shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
7272 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
7273
7274 /* Place the section headers. */
7275 i_ehdrp = elf_elfheader (abfd);
7276 bed = get_elf_backend_data (abfd);
7277 off = align_file_position (off, 1 << bed->s->log_file_align);
7278 i_ehdrp->e_shoff = off;
7279 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
7280 elf_next_file_pos (abfd) = off;
7281
7282 return true;
7283 }
7284
7285 bool
7286 _bfd_elf_write_object_contents (bfd *abfd)
7287 {
7288 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7289 Elf_Internal_Shdr **i_shdrp;
7290 bool failed;
7291 unsigned int count, num_sec;
7292 struct elf_obj_tdata *t;
7293
7294 if (! abfd->output_has_begun
7295 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7296 return false;
7297 /* Do not rewrite ELF data when the BFD has been opened for update.
7298 abfd->output_has_begun was set to TRUE on opening, so creation of
7299 new sections, and modification of existing section sizes was
7300 restricted. This means the ELF header, program headers and
7301 section headers can't have changed. If the contents of any
7302 sections has been modified, then those changes have already been
7303 written to the BFD. */
7304 else if (abfd->direction == both_direction)
7305 {
7306 BFD_ASSERT (abfd->output_has_begun);
7307 return true;
7308 }
7309
7310 i_shdrp = elf_elfsections (abfd);
7311
7312 failed = false;
7313 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
7314 if (failed)
7315 return false;
7316
7317 if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
7318 return false;
7319
7320 /* After writing the headers, we need to write the sections too... */
7321 num_sec = elf_numsections (abfd);
7322 for (count = 1; count < num_sec; count++)
7323 {
7324 /* Don't set the sh_name field without section header. */
7325 if ((abfd->flags & BFD_NO_SECTION_HEADER) == 0)
7326 i_shdrp[count]->sh_name
7327 = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
7328 i_shdrp[count]->sh_name);
7329 if (bed->elf_backend_section_processing)
7330 if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
7331 return false;
7332 if (i_shdrp[count]->contents)
7333 {
7334 bfd_size_type amt = i_shdrp[count]->sh_size;
7335
7336 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
7337 || bfd_write (i_shdrp[count]->contents, amt, abfd) != amt)
7338 return false;
7339 }
7340 }
7341
7342 /* Write out the section header names. */
7343 t = elf_tdata (abfd);
7344 if (elf_shstrtab (abfd) != NULL
7345 && t->shstrtab_hdr.sh_offset != -1
7346 && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
7347 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
7348 return false;
7349
7350 if (!(*bed->elf_backend_final_write_processing) (abfd))
7351 return false;
7352
7353 if (!bed->s->write_shdrs_and_ehdr (abfd))
7354 return false;
7355
7356 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
7357 if (t->o->build_id.after_write_object_contents != NULL
7358 && !(*t->o->build_id.after_write_object_contents) (abfd))
7359 return false;
7360 if (t->o->package_metadata.after_write_object_contents != NULL
7361 && !(*t->o->package_metadata.after_write_object_contents) (abfd))
7362 return false;
7363
7364 return true;
7365 }
7366
7367 bool
7368 _bfd_elf_write_corefile_contents (bfd *abfd)
7369 {
7370 /* Hopefully this can be done just like an object file. */
7371 return _bfd_elf_write_object_contents (abfd);
7372 }
7373
7374 /* Given a section, search the header to find them. */
7375
7376 unsigned int
7377 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
7378 {
7379 const struct elf_backend_data *bed;
7380 unsigned int sec_index;
7381
7382 if (elf_section_data (asect) != NULL
7383 && elf_section_data (asect)->this_idx != 0)
7384 return elf_section_data (asect)->this_idx;
7385
7386 if (bfd_is_abs_section (asect))
7387 sec_index = SHN_ABS;
7388 else if (bfd_is_com_section (asect))
7389 sec_index = SHN_COMMON;
7390 else if (bfd_is_und_section (asect))
7391 sec_index = SHN_UNDEF;
7392 else
7393 sec_index = SHN_BAD;
7394
7395 bed = get_elf_backend_data (abfd);
7396 if (bed->elf_backend_section_from_bfd_section)
7397 {
7398 int retval = sec_index;
7399
7400 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
7401 return retval;
7402 }
7403
7404 if (sec_index == SHN_BAD)
7405 bfd_set_error (bfd_error_nonrepresentable_section);
7406
7407 return sec_index;
7408 }
7409
7410 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
7411 on error. */
7412
7413 int
7414 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
7415 {
7416 asymbol *asym_ptr = *asym_ptr_ptr;
7417 int idx;
7418 flagword flags = asym_ptr->flags;
7419
7420 /* When gas creates relocations against local labels, it creates its
7421 own symbol for the section, but does put the symbol into the
7422 symbol chain, so udata is 0. When the linker is generating
7423 relocatable output, this section symbol may be for one of the
7424 input sections rather than the output section. */
7425 if (asym_ptr->udata.i == 0
7426 && (flags & BSF_SECTION_SYM)
7427 && asym_ptr->section)
7428 {
7429 asection *sec;
7430
7431 sec = asym_ptr->section;
7432 if (sec->owner != abfd && sec->output_section != NULL)
7433 sec = sec->output_section;
7434 if (sec->owner == abfd
7435 && sec->index < elf_num_section_syms (abfd)
7436 && elf_section_syms (abfd)[sec->index] != NULL)
7437 asym_ptr->udata.i = elf_section_syms (abfd)[sec->index]->udata.i;
7438 }
7439
7440 idx = asym_ptr->udata.i;
7441
7442 if (idx == 0)
7443 {
7444 /* This case can occur when using --strip-symbol on a symbol
7445 which is used in a relocation entry. */
7446 _bfd_error_handler
7447 /* xgettext:c-format */
7448 (_("%pB: symbol `%s' required but not present"),
7449 abfd, bfd_asymbol_name (asym_ptr));
7450 bfd_set_error (bfd_error_no_symbols);
7451 return -1;
7452 }
7453
7454 #if DEBUG & 4
7455 {
7456 fprintf (stderr,
7457 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d,"
7458 " flags = 0x%.8x\n",
7459 (long) asym_ptr, asym_ptr->name, idx, flags);
7460 fflush (stderr);
7461 }
7462 #endif
7463
7464 return idx;
7465 }
7466
7467 static inline bfd_vma
7468 segment_size (Elf_Internal_Phdr *segment)
7469 {
7470 return (segment->p_memsz > segment->p_filesz
7471 ? segment->p_memsz : segment->p_filesz);
7472 }
7473
7474
7475 /* Returns the end address of the segment + 1. */
7476 static inline bfd_vma
7477 segment_end (Elf_Internal_Phdr *segment, bfd_vma start)
7478 {
7479 return start + segment_size (segment);
7480 }
7481
7482 static inline bfd_size_type
7483 section_size (asection *section, Elf_Internal_Phdr *segment)
7484 {
7485 if ((section->flags & SEC_HAS_CONTENTS) != 0
7486 || (section->flags & SEC_THREAD_LOCAL) == 0
7487 || segment->p_type == PT_TLS)
7488 return section->size;
7489 return 0;
7490 }
7491
7492 /* Returns TRUE if the given section is contained within the given
7493 segment. LMA addresses are compared against PADDR when
7494 USE_VADDR is false, VMA against VADDR when true. */
7495 static bool
7496 is_contained_by (asection *section, Elf_Internal_Phdr *segment,
7497 bfd_vma paddr, bfd_vma vaddr, unsigned int opb,
7498 bool use_vaddr)
7499 {
7500 bfd_vma seg_addr = !use_vaddr ? paddr : vaddr;
7501 bfd_vma addr = !use_vaddr ? section->lma : section->vma;
7502 bfd_vma octet;
7503 if (_bfd_mul_overflow (addr, opb, &octet))
7504 return false;
7505 /* The third and fourth lines below are testing that the section end
7506 address is within the segment. It's written this way to avoid
7507 overflow. Add seg_addr + section_size to both sides of the
7508 inequality to make it obvious. */
7509 return (octet >= seg_addr
7510 && segment_size (segment) >= section_size (section, segment)
7511 && (octet - seg_addr
7512 <= segment_size (segment) - section_size (section, segment)));
7513 }
7514
7515 /* Handle PT_NOTE segment. */
7516 static bool
7517 is_note (asection *s, Elf_Internal_Phdr *p)
7518 {
7519 return (p->p_type == PT_NOTE
7520 && elf_section_type (s) == SHT_NOTE
7521 && (ufile_ptr) s->filepos >= p->p_offset
7522 && p->p_filesz >= s->size
7523 && (ufile_ptr) s->filepos - p->p_offset <= p->p_filesz - s->size);
7524 }
7525
7526 /* Rewrite program header information. */
7527
7528 static bool
7529 rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
7530 {
7531 Elf_Internal_Ehdr *iehdr;
7532 struct elf_segment_map *map;
7533 struct elf_segment_map *map_first;
7534 struct elf_segment_map **pointer_to_map;
7535 Elf_Internal_Phdr *segment;
7536 asection *section;
7537 unsigned int i;
7538 unsigned int num_segments;
7539 bool phdr_included = false;
7540 bool p_paddr_valid;
7541 struct elf_segment_map *phdr_adjust_seg = NULL;
7542 unsigned int phdr_adjust_num = 0;
7543 const struct elf_backend_data *bed;
7544 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
7545
7546 bed = get_elf_backend_data (ibfd);
7547 iehdr = elf_elfheader (ibfd);
7548
7549 map_first = NULL;
7550 pointer_to_map = &map_first;
7551
7552 num_segments = elf_elfheader (ibfd)->e_phnum;
7553
7554 /* The complicated case when p_vaddr is 0 is to handle the Solaris
7555 linker, which generates a PT_INTERP section with p_vaddr and
7556 p_memsz set to 0. */
7557 #define IS_SOLARIS_PT_INTERP(p, s) \
7558 (p->p_vaddr == 0 \
7559 && p->p_paddr == 0 \
7560 && p->p_memsz == 0 \
7561 && p->p_filesz > 0 \
7562 && (s->flags & SEC_HAS_CONTENTS) != 0 \
7563 && s->size > 0 \
7564 && (bfd_vma) s->filepos >= p->p_offset \
7565 && ((bfd_vma) s->filepos + s->size \
7566 <= p->p_offset + p->p_filesz))
7567
7568 /* Decide if the given section should be included in the given segment.
7569 A section will be included if:
7570 1. It is within the address space of the segment -- we use the LMA
7571 if that is set for the segment and the VMA otherwise,
7572 2. It is an allocated section or a NOTE section in a PT_NOTE
7573 segment.
7574 3. There is an output section associated with it,
7575 4. The section has not already been allocated to a previous segment.
7576 5. PT_GNU_STACK segments do not include any sections.
7577 6. PT_TLS segment includes only SHF_TLS sections.
7578 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
7579 8. PT_DYNAMIC should not contain empty sections at the beginning
7580 (with the possible exception of .dynamic). */
7581 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, opb, paddr_valid) \
7582 (((is_contained_by (section, segment, segment->p_paddr, \
7583 segment->p_vaddr, opb, !paddr_valid) \
7584 && (section->flags & SEC_ALLOC) != 0) \
7585 || is_note (section, segment)) \
7586 && segment->p_type != PT_GNU_STACK \
7587 && (segment->p_type != PT_TLS \
7588 || (section->flags & SEC_THREAD_LOCAL)) \
7589 && (segment->p_type == PT_LOAD \
7590 || segment->p_type == PT_TLS \
7591 || (section->flags & SEC_THREAD_LOCAL) == 0) \
7592 && (segment->p_type != PT_DYNAMIC \
7593 || section_size (section, segment) > 0 \
7594 || (segment->p_paddr \
7595 ? segment->p_paddr != section->lma * (opb) \
7596 : segment->p_vaddr != section->vma * (opb)) \
7597 || (strcmp (bfd_section_name (section), ".dynamic") == 0)) \
7598 && (segment->p_type != PT_LOAD || !section->segment_mark))
7599
7600 /* If the output section of a section in the input segment is NULL,
7601 it is removed from the corresponding output segment. */
7602 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, opb, paddr_valid) \
7603 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, opb, paddr_valid) \
7604 && section->output_section != NULL)
7605
7606 /* Returns TRUE iff seg1 starts after the end of seg2. */
7607 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
7608 (seg1->field >= segment_end (seg2, seg2->field))
7609
7610 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
7611 their VMA address ranges and their LMA address ranges overlap.
7612 It is possible to have overlapping VMA ranges without overlapping LMA
7613 ranges. RedBoot images for example can have both .data and .bss mapped
7614 to the same VMA range, but with the .data section mapped to a different
7615 LMA. */
7616 #define SEGMENT_OVERLAPS(seg1, seg2) \
7617 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
7618 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
7619 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
7620 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
7621
7622 /* Initialise the segment mark field, and discard stupid alignment. */
7623 for (section = ibfd->sections; section != NULL; section = section->next)
7624 {
7625 asection *o = section->output_section;
7626 if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
7627 o->alignment_power = 0;
7628 section->segment_mark = false;
7629 }
7630
7631 /* The Solaris linker creates program headers in which all the
7632 p_paddr fields are zero. When we try to objcopy or strip such a
7633 file, we get confused. Check for this case, and if we find it
7634 don't set the p_paddr_valid fields. */
7635 p_paddr_valid = false;
7636 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7637 i < num_segments;
7638 i++, segment++)
7639 if (segment->p_paddr != 0)
7640 {
7641 p_paddr_valid = true;
7642 break;
7643 }
7644
7645 /* Scan through the segments specified in the program header
7646 of the input BFD. For this first scan we look for overlaps
7647 in the loadable segments. These can be created by weird
7648 parameters to objcopy. Also, fix some solaris weirdness. */
7649 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7650 i < num_segments;
7651 i++, segment++)
7652 {
7653 unsigned int j;
7654 Elf_Internal_Phdr *segment2;
7655
7656 if (segment->p_type == PT_INTERP)
7657 for (section = ibfd->sections; section; section = section->next)
7658 if (IS_SOLARIS_PT_INTERP (segment, section))
7659 {
7660 /* Mininal change so that the normal section to segment
7661 assignment code will work. */
7662 segment->p_vaddr = section->vma * opb;
7663 break;
7664 }
7665
7666 if (segment->p_type != PT_LOAD)
7667 {
7668 /* Remove PT_GNU_RELRO segment. */
7669 if (segment->p_type == PT_GNU_RELRO)
7670 segment->p_type = PT_NULL;
7671 continue;
7672 }
7673
7674 /* Determine if this segment overlaps any previous segments. */
7675 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
7676 {
7677 bfd_signed_vma extra_length;
7678
7679 if (segment2->p_type != PT_LOAD
7680 || !SEGMENT_OVERLAPS (segment, segment2))
7681 continue;
7682
7683 /* Merge the two segments together. */
7684 if (segment2->p_vaddr < segment->p_vaddr)
7685 {
7686 /* Extend SEGMENT2 to include SEGMENT and then delete
7687 SEGMENT. */
7688 extra_length = (segment_end (segment, segment->p_vaddr)
7689 - segment_end (segment2, segment2->p_vaddr));
7690
7691 if (extra_length > 0)
7692 {
7693 segment2->p_memsz += extra_length;
7694 segment2->p_filesz += extra_length;
7695 }
7696
7697 segment->p_type = PT_NULL;
7698
7699 /* Since we have deleted P we must restart the outer loop. */
7700 i = 0;
7701 segment = elf_tdata (ibfd)->phdr;
7702 break;
7703 }
7704 else
7705 {
7706 /* Extend SEGMENT to include SEGMENT2 and then delete
7707 SEGMENT2. */
7708 extra_length = (segment_end (segment2, segment2->p_vaddr)
7709 - segment_end (segment, segment->p_vaddr));
7710
7711 if (extra_length > 0)
7712 {
7713 segment->p_memsz += extra_length;
7714 segment->p_filesz += extra_length;
7715 }
7716
7717 segment2->p_type = PT_NULL;
7718 }
7719 }
7720 }
7721
7722 /* The second scan attempts to assign sections to segments. */
7723 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7724 i < num_segments;
7725 i++, segment++)
7726 {
7727 unsigned int section_count;
7728 asection **sections;
7729 asection *output_section;
7730 unsigned int isec;
7731 asection *matching_lma;
7732 asection *suggested_lma;
7733 unsigned int j;
7734 size_t amt;
7735 asection *first_section;
7736
7737 if (segment->p_type == PT_NULL)
7738 continue;
7739
7740 first_section = NULL;
7741 /* Compute how many sections might be placed into this segment. */
7742 for (section = ibfd->sections, section_count = 0;
7743 section != NULL;
7744 section = section->next)
7745 {
7746 /* Find the first section in the input segment, which may be
7747 removed from the corresponding output segment. */
7748 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, opb, p_paddr_valid))
7749 {
7750 if (first_section == NULL)
7751 first_section = section;
7752 if (section->output_section != NULL)
7753 ++section_count;
7754 }
7755 }
7756
7757 /* Allocate a segment map big enough to contain
7758 all of the sections we have selected. */
7759 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7760 amt += section_count * sizeof (asection *);
7761 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7762 if (map == NULL)
7763 return false;
7764
7765 /* Initialise the fields of the segment map. Default to
7766 using the physical address of the segment in the input BFD. */
7767 map->next = NULL;
7768 map->p_type = segment->p_type;
7769 map->p_flags = segment->p_flags;
7770 map->p_flags_valid = 1;
7771
7772 if (map->p_type == PT_LOAD
7773 && (ibfd->flags & D_PAGED) != 0
7774 && maxpagesize > 1
7775 && segment->p_align > 1)
7776 {
7777 map->p_align = segment->p_align;
7778 if (segment->p_align > maxpagesize)
7779 map->p_align = maxpagesize;
7780 map->p_align_valid = 1;
7781 }
7782
7783 /* If the first section in the input segment is removed, there is
7784 no need to preserve segment physical address in the corresponding
7785 output segment. */
7786 if (!first_section || first_section->output_section != NULL)
7787 {
7788 map->p_paddr = segment->p_paddr;
7789 map->p_paddr_valid = p_paddr_valid;
7790 }
7791
7792 /* Determine if this segment contains the ELF file header
7793 and if it contains the program headers themselves. */
7794 map->includes_filehdr = (segment->p_offset == 0
7795 && segment->p_filesz >= iehdr->e_ehsize);
7796 map->includes_phdrs = 0;
7797
7798 if (!phdr_included || segment->p_type != PT_LOAD)
7799 {
7800 map->includes_phdrs =
7801 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7802 && (segment->p_offset + segment->p_filesz
7803 >= ((bfd_vma) iehdr->e_phoff
7804 + iehdr->e_phnum * iehdr->e_phentsize)));
7805
7806 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7807 phdr_included = true;
7808 }
7809
7810 if (section_count == 0)
7811 {
7812 /* Special segments, such as the PT_PHDR segment, may contain
7813 no sections, but ordinary, loadable segments should contain
7814 something. They are allowed by the ELF spec however, so only
7815 a warning is produced.
7816 Don't warn if an empty PT_LOAD contains the program headers.
7817 There is however the valid use case of embedded systems which
7818 have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7819 flash memory with zeros. No warning is shown for that case. */
7820 if (segment->p_type == PT_LOAD
7821 && !map->includes_phdrs
7822 && (segment->p_filesz > 0 || segment->p_memsz == 0))
7823 /* xgettext:c-format */
7824 _bfd_error_handler
7825 (_("%pB: warning: empty loadable segment detected"
7826 " at vaddr=%#" PRIx64 ", is this intentional?"),
7827 ibfd, (uint64_t) segment->p_vaddr);
7828
7829 map->p_vaddr_offset = segment->p_vaddr / opb;
7830 map->count = 0;
7831 *pointer_to_map = map;
7832 pointer_to_map = &map->next;
7833
7834 continue;
7835 }
7836
7837 /* Now scan the sections in the input BFD again and attempt
7838 to add their corresponding output sections to the segment map.
7839 The problem here is how to handle an output section which has
7840 been moved (ie had its LMA changed). There are four possibilities:
7841
7842 1. None of the sections have been moved.
7843 In this case we can continue to use the segment LMA from the
7844 input BFD.
7845
7846 2. All of the sections have been moved by the same amount.
7847 In this case we can change the segment's LMA to match the LMA
7848 of the first section.
7849
7850 3. Some of the sections have been moved, others have not.
7851 In this case those sections which have not been moved can be
7852 placed in the current segment which will have to have its size,
7853 and possibly its LMA changed, and a new segment or segments will
7854 have to be created to contain the other sections.
7855
7856 4. The sections have been moved, but not by the same amount.
7857 In this case we can change the segment's LMA to match the LMA
7858 of the first section and we will have to create a new segment
7859 or segments to contain the other sections.
7860
7861 In order to save time, we allocate an array to hold the section
7862 pointers that we are interested in. As these sections get assigned
7863 to a segment, they are removed from this array. */
7864
7865 amt = section_count * sizeof (asection *);
7866 sections = (asection **) bfd_malloc (amt);
7867 if (sections == NULL)
7868 return false;
7869
7870 /* Step One: Scan for segment vs section LMA conflicts.
7871 Also add the sections to the section array allocated above.
7872 Also add the sections to the current segment. In the common
7873 case, where the sections have not been moved, this means that
7874 we have completely filled the segment, and there is nothing
7875 more to do. */
7876 isec = 0;
7877 matching_lma = NULL;
7878 suggested_lma = NULL;
7879
7880 for (section = first_section, j = 0;
7881 section != NULL;
7882 section = section->next)
7883 {
7884 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, opb, p_paddr_valid))
7885 {
7886 output_section = section->output_section;
7887
7888 sections[j++] = section;
7889
7890 /* The Solaris native linker always sets p_paddr to 0.
7891 We try to catch that case here, and set it to the
7892 correct value. Note - some backends require that
7893 p_paddr be left as zero. */
7894 if (!p_paddr_valid
7895 && segment->p_vaddr != 0
7896 && !bed->want_p_paddr_set_to_zero
7897 && isec == 0
7898 && output_section->lma != 0
7899 && (align_power (segment->p_vaddr
7900 + (map->includes_filehdr
7901 ? iehdr->e_ehsize : 0)
7902 + (map->includes_phdrs
7903 ? iehdr->e_phnum * iehdr->e_phentsize
7904 : 0),
7905 output_section->alignment_power * opb)
7906 == (output_section->vma * opb)))
7907 map->p_paddr = segment->p_vaddr;
7908
7909 /* Match up the physical address of the segment with the
7910 LMA address of the output section. */
7911 if (is_contained_by (output_section, segment, map->p_paddr,
7912 0, opb, false)
7913 || is_note (section, segment))
7914 {
7915 if (matching_lma == NULL
7916 || output_section->lma < matching_lma->lma)
7917 matching_lma = output_section;
7918
7919 /* We assume that if the section fits within the segment
7920 then it does not overlap any other section within that
7921 segment. */
7922 map->sections[isec++] = output_section;
7923 }
7924 else if (suggested_lma == NULL)
7925 suggested_lma = output_section;
7926
7927 if (j == section_count)
7928 break;
7929 }
7930 }
7931
7932 BFD_ASSERT (j == section_count);
7933
7934 /* Step Two: Adjust the physical address of the current segment,
7935 if necessary. */
7936 if (isec == section_count)
7937 {
7938 /* All of the sections fitted within the segment as currently
7939 specified. This is the default case. Add the segment to
7940 the list of built segments and carry on to process the next
7941 program header in the input BFD. */
7942 map->count = section_count;
7943 *pointer_to_map = map;
7944 pointer_to_map = &map->next;
7945
7946 if (p_paddr_valid
7947 && !bed->want_p_paddr_set_to_zero)
7948 {
7949 bfd_vma hdr_size = 0;
7950 if (map->includes_filehdr)
7951 hdr_size = iehdr->e_ehsize;
7952 if (map->includes_phdrs)
7953 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7954
7955 /* Account for padding before the first section in the
7956 segment. */
7957 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7958 - matching_lma->lma);
7959 }
7960
7961 free (sections);
7962 continue;
7963 }
7964 else
7965 {
7966 /* Change the current segment's physical address to match
7967 the LMA of the first section that fitted, or if no
7968 section fitted, the first section. */
7969 if (matching_lma == NULL)
7970 matching_lma = suggested_lma;
7971
7972 map->p_paddr = matching_lma->lma * opb;
7973
7974 /* Offset the segment physical address from the lma
7975 to allow for space taken up by elf headers. */
7976 if (map->includes_phdrs)
7977 {
7978 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7979
7980 /* iehdr->e_phnum is just an estimate of the number
7981 of program headers that we will need. Make a note
7982 here of the number we used and the segment we chose
7983 to hold these headers, so that we can adjust the
7984 offset when we know the correct value. */
7985 phdr_adjust_num = iehdr->e_phnum;
7986 phdr_adjust_seg = map;
7987 }
7988
7989 if (map->includes_filehdr)
7990 {
7991 bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7992 map->p_paddr -= iehdr->e_ehsize;
7993 /* We've subtracted off the size of headers from the
7994 first section lma, but there may have been some
7995 alignment padding before that section too. Try to
7996 account for that by adjusting the segment lma down to
7997 the same alignment. */
7998 if (segment->p_align != 0 && segment->p_align < align)
7999 align = segment->p_align;
8000 map->p_paddr &= -(align * opb);
8001 }
8002 }
8003
8004 /* Step Three: Loop over the sections again, this time assigning
8005 those that fit to the current segment and removing them from the
8006 sections array; but making sure not to leave large gaps. Once all
8007 possible sections have been assigned to the current segment it is
8008 added to the list of built segments and if sections still remain
8009 to be assigned, a new segment is constructed before repeating
8010 the loop. */
8011 isec = 0;
8012 do
8013 {
8014 map->count = 0;
8015 suggested_lma = NULL;
8016
8017 /* Fill the current segment with sections that fit. */
8018 for (j = 0; j < section_count; j++)
8019 {
8020 section = sections[j];
8021
8022 if (section == NULL)
8023 continue;
8024
8025 output_section = section->output_section;
8026
8027 BFD_ASSERT (output_section != NULL);
8028
8029 if (is_contained_by (output_section, segment, map->p_paddr,
8030 0, opb, false)
8031 || is_note (section, segment))
8032 {
8033 if (map->count == 0)
8034 {
8035 /* If the first section in a segment does not start at
8036 the beginning of the segment, then something is
8037 wrong. */
8038 if (align_power (map->p_paddr
8039 + (map->includes_filehdr
8040 ? iehdr->e_ehsize : 0)
8041 + (map->includes_phdrs
8042 ? iehdr->e_phnum * iehdr->e_phentsize
8043 : 0),
8044 output_section->alignment_power * opb)
8045 != output_section->lma * opb)
8046 goto sorry;
8047 }
8048 else
8049 {
8050 asection *prev_sec;
8051
8052 prev_sec = map->sections[map->count - 1];
8053
8054 /* If the gap between the end of the previous section
8055 and the start of this section is more than
8056 maxpagesize then we need to start a new segment. */
8057 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
8058 maxpagesize)
8059 < BFD_ALIGN (output_section->lma, maxpagesize))
8060 || (prev_sec->lma + prev_sec->size
8061 > output_section->lma))
8062 {
8063 if (suggested_lma == NULL)
8064 suggested_lma = output_section;
8065
8066 continue;
8067 }
8068 }
8069
8070 map->sections[map->count++] = output_section;
8071 ++isec;
8072 sections[j] = NULL;
8073 if (segment->p_type == PT_LOAD)
8074 section->segment_mark = true;
8075 }
8076 else if (suggested_lma == NULL)
8077 suggested_lma = output_section;
8078 }
8079
8080 /* PR 23932. A corrupt input file may contain sections that cannot
8081 be assigned to any segment - because for example they have a
8082 negative size - or segments that do not contain any sections.
8083 But there are also valid reasons why a segment can be empty.
8084 So allow a count of zero. */
8085
8086 /* Add the current segment to the list of built segments. */
8087 *pointer_to_map = map;
8088 pointer_to_map = &map->next;
8089
8090 if (isec < section_count)
8091 {
8092 /* We still have not allocated all of the sections to
8093 segments. Create a new segment here, initialise it
8094 and carry on looping. */
8095 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
8096 amt += section_count * sizeof (asection *);
8097 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
8098 if (map == NULL)
8099 {
8100 free (sections);
8101 return false;
8102 }
8103
8104 /* Initialise the fields of the segment map. Set the physical
8105 physical address to the LMA of the first section that has
8106 not yet been assigned. */
8107 map->next = NULL;
8108 map->p_type = segment->p_type;
8109 map->p_flags = segment->p_flags;
8110 map->p_flags_valid = 1;
8111 map->p_paddr = suggested_lma->lma * opb;
8112 map->p_paddr_valid = p_paddr_valid;
8113 map->includes_filehdr = 0;
8114 map->includes_phdrs = 0;
8115 }
8116
8117 continue;
8118 sorry:
8119 bfd_set_error (bfd_error_sorry);
8120 free (sections);
8121 return false;
8122 }
8123 while (isec < section_count);
8124
8125 free (sections);
8126 }
8127
8128 elf_seg_map (obfd) = map_first;
8129
8130 /* If we had to estimate the number of program headers that were
8131 going to be needed, then check our estimate now and adjust
8132 the offset if necessary. */
8133 if (phdr_adjust_seg != NULL)
8134 {
8135 unsigned int count;
8136
8137 for (count = 0, map = map_first; map != NULL; map = map->next)
8138 count++;
8139
8140 if (count > phdr_adjust_num)
8141 phdr_adjust_seg->p_paddr
8142 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
8143
8144 for (map = map_first; map != NULL; map = map->next)
8145 if (map->p_type == PT_PHDR)
8146 {
8147 bfd_vma adjust
8148 = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
8149 map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
8150 break;
8151 }
8152 }
8153
8154 #undef IS_SOLARIS_PT_INTERP
8155 #undef IS_SECTION_IN_INPUT_SEGMENT
8156 #undef INCLUDE_SECTION_IN_SEGMENT
8157 #undef SEGMENT_AFTER_SEGMENT
8158 #undef SEGMENT_OVERLAPS
8159 return true;
8160 }
8161
8162 /* Return true if p_align in the ELF program header in ABFD is valid. */
8163
8164 static bool
8165 elf_is_p_align_valid (bfd *abfd)
8166 {
8167 unsigned int i;
8168 Elf_Internal_Phdr *segment;
8169 unsigned int num_segments;
8170 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8171 bfd_size_type maxpagesize = bed->maxpagesize;
8172 bfd_size_type p_align = bed->p_align;
8173
8174 /* Return true if the default p_align value isn't set or the maximum
8175 page size is the same as the minimum page size. */
8176 if (p_align == 0 || maxpagesize == bed->minpagesize)
8177 return true;
8178
8179 /* When the default p_align value is set, p_align may be set to the
8180 default p_align value while segments are aligned to the maximum
8181 page size. In this case, the input p_align will be ignored and
8182 the maximum page size will be used to align the output segments. */
8183 segment = elf_tdata (abfd)->phdr;
8184 num_segments = elf_elfheader (abfd)->e_phnum;
8185 for (i = 0; i < num_segments; i++, segment++)
8186 if (segment->p_type == PT_LOAD
8187 && (segment->p_align != p_align
8188 || vma_page_aligned_bias (segment->p_vaddr,
8189 segment->p_offset,
8190 maxpagesize) != 0))
8191 return true;
8192
8193 return false;
8194 }
8195
8196 /* Copy ELF program header information. */
8197
8198 static bool
8199 copy_elf_program_header (bfd *ibfd, bfd *obfd)
8200 {
8201 Elf_Internal_Ehdr *iehdr;
8202 struct elf_segment_map *map;
8203 struct elf_segment_map *map_first;
8204 struct elf_segment_map **pointer_to_map;
8205 Elf_Internal_Phdr *segment;
8206 unsigned int i;
8207 unsigned int num_segments;
8208 bool phdr_included = false;
8209 bool p_paddr_valid;
8210 bool p_palign_valid;
8211 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
8212
8213 iehdr = elf_elfheader (ibfd);
8214
8215 map_first = NULL;
8216 pointer_to_map = &map_first;
8217
8218 /* If all the segment p_paddr fields are zero, don't set
8219 map->p_paddr_valid. */
8220 p_paddr_valid = false;
8221 num_segments = elf_elfheader (ibfd)->e_phnum;
8222 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8223 i < num_segments;
8224 i++, segment++)
8225 if (segment->p_paddr != 0)
8226 {
8227 p_paddr_valid = true;
8228 break;
8229 }
8230
8231 p_palign_valid = elf_is_p_align_valid (ibfd);
8232
8233 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8234 i < num_segments;
8235 i++, segment++)
8236 {
8237 asection *section;
8238 unsigned int section_count;
8239 size_t amt;
8240 Elf_Internal_Shdr *this_hdr;
8241 asection *first_section = NULL;
8242 asection *lowest_section;
8243
8244 /* Compute how many sections are in this segment. */
8245 for (section = ibfd->sections, section_count = 0;
8246 section != NULL;
8247 section = section->next)
8248 {
8249 this_hdr = &(elf_section_data(section)->this_hdr);
8250 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8251 {
8252 if (first_section == NULL)
8253 first_section = section;
8254 section_count++;
8255 }
8256 }
8257
8258 /* Allocate a segment map big enough to contain
8259 all of the sections we have selected. */
8260 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
8261 amt += section_count * sizeof (asection *);
8262 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
8263 if (map == NULL)
8264 return false;
8265
8266 /* Initialize the fields of the output segment map with the
8267 input segment. */
8268 map->next = NULL;
8269 map->p_type = segment->p_type;
8270 map->p_flags = segment->p_flags;
8271 map->p_flags_valid = 1;
8272 map->p_paddr = segment->p_paddr;
8273 map->p_paddr_valid = p_paddr_valid;
8274 map->p_align = segment->p_align;
8275 /* Keep p_align of PT_GNU_STACK for stack alignment. */
8276 map->p_align_valid = (map->p_type == PT_GNU_STACK
8277 || p_palign_valid);
8278 map->p_vaddr_offset = 0;
8279
8280 if (map->p_type == PT_GNU_RELRO
8281 || map->p_type == PT_GNU_STACK)
8282 {
8283 /* The PT_GNU_RELRO segment may contain the first a few
8284 bytes in the .got.plt section even if the whole .got.plt
8285 section isn't in the PT_GNU_RELRO segment. We won't
8286 change the size of the PT_GNU_RELRO segment.
8287 Similarly, PT_GNU_STACK size is significant on uclinux
8288 systems. */
8289 map->p_size = segment->p_memsz;
8290 map->p_size_valid = 1;
8291 }
8292
8293 /* Determine if this segment contains the ELF file header
8294 and if it contains the program headers themselves. */
8295 map->includes_filehdr = (segment->p_offset == 0
8296 && segment->p_filesz >= iehdr->e_ehsize);
8297
8298 map->includes_phdrs = 0;
8299 if (! phdr_included || segment->p_type != PT_LOAD)
8300 {
8301 map->includes_phdrs =
8302 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
8303 && (segment->p_offset + segment->p_filesz
8304 >= ((bfd_vma) iehdr->e_phoff
8305 + iehdr->e_phnum * iehdr->e_phentsize)));
8306
8307 if (segment->p_type == PT_LOAD && map->includes_phdrs)
8308 phdr_included = true;
8309 }
8310
8311 lowest_section = NULL;
8312 if (section_count != 0)
8313 {
8314 unsigned int isec = 0;
8315
8316 for (section = first_section;
8317 section != NULL;
8318 section = section->next)
8319 {
8320 this_hdr = &(elf_section_data(section)->this_hdr);
8321 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8322 {
8323 map->sections[isec++] = section->output_section;
8324 if ((section->flags & SEC_ALLOC) != 0)
8325 {
8326 bfd_vma seg_off;
8327
8328 if (lowest_section == NULL
8329 || section->lma < lowest_section->lma)
8330 lowest_section = section;
8331
8332 /* Section lmas are set up from PT_LOAD header
8333 p_paddr in _bfd_elf_make_section_from_shdr.
8334 If this header has a p_paddr that disagrees
8335 with the section lma, flag the p_paddr as
8336 invalid. */
8337 if ((section->flags & SEC_LOAD) != 0)
8338 seg_off = this_hdr->sh_offset - segment->p_offset;
8339 else
8340 seg_off = this_hdr->sh_addr - segment->p_vaddr;
8341 if (section->lma * opb - segment->p_paddr != seg_off)
8342 map->p_paddr_valid = false;
8343 }
8344 if (isec == section_count)
8345 break;
8346 }
8347 }
8348 }
8349
8350 if (section_count == 0)
8351 map->p_vaddr_offset = segment->p_vaddr / opb;
8352 else if (map->p_paddr_valid)
8353 {
8354 /* Account for padding before the first section in the segment. */
8355 bfd_vma hdr_size = 0;
8356 if (map->includes_filehdr)
8357 hdr_size = iehdr->e_ehsize;
8358 if (map->includes_phdrs)
8359 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
8360
8361 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
8362 - (lowest_section ? lowest_section->lma : 0));
8363 }
8364
8365 map->count = section_count;
8366 *pointer_to_map = map;
8367 pointer_to_map = &map->next;
8368 }
8369
8370 elf_seg_map (obfd) = map_first;
8371 return true;
8372 }
8373
8374 /* Copy private BFD data. This copies or rewrites ELF program header
8375 information. */
8376
8377 static bool
8378 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
8379 {
8380 bfd_vma maxpagesize;
8381
8382 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8383 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8384 return true;
8385
8386 if (elf_tdata (ibfd)->phdr == NULL)
8387 return true;
8388
8389 if (ibfd->xvec == obfd->xvec)
8390 {
8391 /* Check to see if any sections in the input BFD
8392 covered by ELF program header have changed. */
8393 Elf_Internal_Phdr *segment;
8394 asection * section;
8395 asection * osec;
8396 asection * prev;
8397 unsigned int i, num_segments;
8398 Elf_Internal_Shdr *this_hdr;
8399 const struct elf_backend_data *bed;
8400
8401 bed = get_elf_backend_data (ibfd);
8402
8403 /* Regenerate the segment map if p_paddr is set to 0. */
8404 if (bed->want_p_paddr_set_to_zero)
8405 goto rewrite;
8406
8407 /* Initialize the segment mark field. */
8408 for (section = obfd->sections; section != NULL;
8409 section = section->next)
8410 section->segment_mark = false;
8411
8412 num_segments = elf_elfheader (ibfd)->e_phnum;
8413 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8414 i < num_segments;
8415 i++, segment++)
8416 {
8417 /* PR binutils/3535. The Solaris linker always sets the p_paddr
8418 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
8419 which severly confuses things, so always regenerate the segment
8420 map in this case. */
8421 if (segment->p_paddr == 0
8422 && segment->p_memsz == 0
8423 && (segment->p_type == PT_INTERP
8424 || segment->p_type == PT_DYNAMIC))
8425 goto rewrite;
8426
8427 for (section = ibfd->sections, prev = NULL;
8428 section != NULL; section = section->next)
8429 {
8430 /* We mark the output section so that we know it comes
8431 from the input BFD. */
8432 osec = section->output_section;
8433 if (osec)
8434 osec->segment_mark = true;
8435
8436 /* Check if this section is covered by the segment. */
8437 this_hdr = &(elf_section_data(section)->this_hdr);
8438 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8439 {
8440 /* FIXME: Check if its output section is changed or
8441 removed. What else do we need to check? */
8442 if (osec == NULL
8443 || section->flags != osec->flags
8444 || section->lma != osec->lma
8445 || section->vma != osec->vma
8446 || section->size != osec->size
8447 || section->rawsize != osec->rawsize
8448 || section->alignment_power != osec->alignment_power)
8449 goto rewrite;
8450
8451 /* PR 31450: If this is an allocated section then make sure
8452 that this section's vma to lma relationship is the same
8453 as previous (allocated) section's. */
8454 if (prev != NULL
8455 && section->flags & SEC_ALLOC
8456 && section->lma - section->vma != prev->lma - prev->vma)
8457 goto rewrite;
8458
8459 if (section->flags & SEC_ALLOC)
8460 prev = section;
8461 }
8462 }
8463 }
8464
8465 /* Check to see if any output section do not come from the
8466 input BFD. */
8467 for (section = obfd->sections; section != NULL;
8468 section = section->next)
8469 {
8470 if (!section->segment_mark)
8471 goto rewrite;
8472 else
8473 section->segment_mark = false;
8474 }
8475
8476 return copy_elf_program_header (ibfd, obfd);
8477 }
8478
8479 rewrite:
8480 maxpagesize = 0;
8481 if (ibfd->xvec == obfd->xvec)
8482 {
8483 /* When rewriting program header, set the output maxpagesize to
8484 the maximum alignment of input PT_LOAD segments. */
8485 Elf_Internal_Phdr *segment;
8486 unsigned int i;
8487 unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
8488
8489 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8490 i < num_segments;
8491 i++, segment++)
8492 if (segment->p_type == PT_LOAD
8493 && maxpagesize < segment->p_align)
8494 {
8495 /* PR 17512: file: f17299af. */
8496 if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
8497 /* xgettext:c-format */
8498 _bfd_error_handler (_("%pB: warning: segment alignment of %#"
8499 PRIx64 " is too large"),
8500 ibfd, (uint64_t) segment->p_align);
8501 else
8502 maxpagesize = segment->p_align;
8503 }
8504 }
8505 if (maxpagesize == 0)
8506 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
8507
8508 return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
8509 }
8510
8511 /* Initialize private output section information from input section. */
8512
8513 bool
8514 _bfd_elf_init_private_section_data (bfd *ibfd,
8515 asection *isec,
8516 bfd *obfd,
8517 asection *osec,
8518 struct bfd_link_info *link_info)
8519
8520 {
8521 Elf_Internal_Shdr *ihdr, *ohdr;
8522 bool final_link = (link_info != NULL
8523 && !bfd_link_relocatable (link_info));
8524
8525 if (ibfd->xvec->flavour != bfd_target_elf_flavour
8526 || obfd->xvec->flavour != bfd_target_elf_flavour)
8527 return true;
8528
8529 BFD_ASSERT (elf_section_data (osec) != NULL);
8530
8531 /* If this is a known ABI section, ELF section type and flags may
8532 have been set up when OSEC was created. For normal sections we
8533 allow the user to override the type and flags other than
8534 SHF_MASKOS and SHF_MASKPROC. */
8535 if (elf_section_type (osec) == SHT_PROGBITS
8536 || elf_section_type (osec) == SHT_NOTE
8537 || elf_section_type (osec) == SHT_NOBITS)
8538 elf_section_type (osec) = SHT_NULL;
8539 /* For objcopy and relocatable link, copy the ELF section type from
8540 the input file if the BFD section flags are the same. (If they
8541 are different the user may be doing something like
8542 "objcopy --set-section-flags .text=alloc,data".) For a final
8543 link allow some flags that the linker clears to differ. */
8544 if (elf_section_type (osec) == SHT_NULL
8545 && (osec->flags == isec->flags
8546 || (final_link
8547 && ((osec->flags ^ isec->flags)
8548 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
8549 elf_section_type (osec) = elf_section_type (isec);
8550
8551 /* FIXME: Is this correct for all OS/PROC specific flags? */
8552 elf_section_flags (osec) = (elf_section_flags (isec)
8553 & (SHF_MASKOS | SHF_MASKPROC));
8554
8555 /* Copy sh_info from input for mbind section. */
8556 if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
8557 && elf_section_flags (isec) & SHF_GNU_MBIND)
8558 elf_section_data (osec)->this_hdr.sh_info
8559 = elf_section_data (isec)->this_hdr.sh_info;
8560
8561 /* Set things up for objcopy and relocatable link. The output
8562 SHT_GROUP section will have its elf_next_in_group pointing back
8563 to the input group members. Ignore linker created group section.
8564 See elfNN_ia64_object_p in elfxx-ia64.c. */
8565 if ((link_info == NULL
8566 || !link_info->resolve_section_groups)
8567 && (elf_sec_group (isec) == NULL
8568 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
8569 {
8570 if (elf_section_flags (isec) & SHF_GROUP)
8571 elf_section_flags (osec) |= SHF_GROUP;
8572 elf_next_in_group (osec) = elf_next_in_group (isec);
8573 elf_section_data (osec)->group = elf_section_data (isec)->group;
8574 }
8575
8576 /* If not decompress, preserve SHF_COMPRESSED. */
8577 if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
8578 elf_section_flags (osec) |= (elf_section_flags (isec)
8579 & SHF_COMPRESSED);
8580
8581 ihdr = &elf_section_data (isec)->this_hdr;
8582
8583 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
8584 don't use the output section of the linked-to section since it
8585 may be NULL at this point. */
8586 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
8587 {
8588 ohdr = &elf_section_data (osec)->this_hdr;
8589 ohdr->sh_flags |= SHF_LINK_ORDER;
8590 elf_linked_to_section (osec) = elf_linked_to_section (isec);
8591 }
8592
8593 osec->use_rela_p = isec->use_rela_p;
8594
8595 return true;
8596 }
8597
8598 /* Copy private section information. This copies over the entsize
8599 field, and sometimes the info field. */
8600
8601 bool
8602 _bfd_elf_copy_private_section_data (bfd *ibfd,
8603 asection *isec,
8604 bfd *obfd,
8605 asection *osec)
8606 {
8607 Elf_Internal_Shdr *ihdr, *ohdr;
8608
8609 if (ibfd->xvec->flavour != bfd_target_elf_flavour
8610 || obfd->xvec->flavour != bfd_target_elf_flavour)
8611 return true;
8612
8613 ihdr = &elf_section_data (isec)->this_hdr;
8614 ohdr = &elf_section_data (osec)->this_hdr;
8615
8616 ohdr->sh_entsize = ihdr->sh_entsize;
8617
8618 if (ihdr->sh_type == SHT_SYMTAB
8619 || ihdr->sh_type == SHT_DYNSYM
8620 || ihdr->sh_type == SHT_GNU_verneed
8621 || ihdr->sh_type == SHT_GNU_verdef)
8622 ohdr->sh_info = ihdr->sh_info;
8623
8624 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
8625 NULL);
8626 }
8627
8628 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
8629 necessary if we are removing either the SHT_GROUP section or any of
8630 the group member sections. DISCARDED is the value that a section's
8631 output_section has if the section will be discarded, NULL when this
8632 function is called from objcopy, bfd_abs_section_ptr when called
8633 from the linker. */
8634
8635 bool
8636 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
8637 {
8638 asection *isec;
8639
8640 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
8641 if (elf_section_type (isec) == SHT_GROUP)
8642 {
8643 asection *first = elf_next_in_group (isec);
8644 asection *s = first;
8645 bfd_size_type removed = 0;
8646
8647 while (s != NULL)
8648 {
8649 /* If this member section is being output but the
8650 SHT_GROUP section is not, then clear the group info
8651 set up by _bfd_elf_copy_private_section_data. */
8652 if (s->output_section != discarded
8653 && isec->output_section == discarded)
8654 {
8655 elf_section_flags (s->output_section) &= ~SHF_GROUP;
8656 elf_group_name (s->output_section) = NULL;
8657 }
8658 else
8659 {
8660 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
8661 if (s->output_section == discarded
8662 && isec->output_section != discarded)
8663 {
8664 /* Conversely, if the member section is not being
8665 output but the SHT_GROUP section is, then adjust
8666 its size. */
8667 removed += 4;
8668 if (elf_sec->rel.hdr != NULL
8669 && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
8670 removed += 4;
8671 if (elf_sec->rela.hdr != NULL
8672 && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
8673 removed += 4;
8674 }
8675 else
8676 {
8677 /* Also adjust for zero-sized relocation member
8678 section. */
8679 if (elf_sec->rel.hdr != NULL
8680 && elf_sec->rel.hdr->sh_size == 0)
8681 removed += 4;
8682 if (elf_sec->rela.hdr != NULL
8683 && elf_sec->rela.hdr->sh_size == 0)
8684 removed += 4;
8685 }
8686 }
8687 s = elf_next_in_group (s);
8688 if (s == first)
8689 break;
8690 }
8691 if (removed != 0)
8692 {
8693 if (discarded != NULL)
8694 {
8695 /* If we've been called for ld -r, then we need to
8696 adjust the input section size. */
8697 if (isec->rawsize == 0)
8698 isec->rawsize = isec->size;
8699 isec->size = isec->rawsize - removed;
8700 if (isec->size <= 4)
8701 {
8702 isec->size = 0;
8703 isec->flags |= SEC_EXCLUDE;
8704 }
8705 }
8706 else if (isec->output_section != NULL)
8707 {
8708 /* Adjust the output section size when called from
8709 objcopy. */
8710 isec->output_section->size -= removed;
8711 if (isec->output_section->size <= 4)
8712 {
8713 isec->output_section->size = 0;
8714 isec->output_section->flags |= SEC_EXCLUDE;
8715 }
8716 }
8717 }
8718 }
8719
8720 return true;
8721 }
8722
8723 /* Copy private header information. */
8724
8725 bool
8726 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
8727 {
8728 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8729 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8730 return true;
8731
8732 /* Copy over private BFD data if it has not already been copied.
8733 This must be done here, rather than in the copy_private_bfd_data
8734 entry point, because the latter is called after the section
8735 contents have been set, which means that the program headers have
8736 already been worked out. */
8737 if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
8738 {
8739 if (! copy_private_bfd_data (ibfd, obfd))
8740 return false;
8741 }
8742
8743 return _bfd_elf_fixup_group_sections (ibfd, NULL);
8744 }
8745
8746 /* Copy private symbol information. If this symbol is in a section
8747 which we did not map into a BFD section, try to map the section
8748 index correctly. We use special macro definitions for the mapped
8749 section indices; these definitions are interpreted by the
8750 swap_out_syms function. */
8751
8752 #define MAP_ONESYMTAB (SHN_HIOS + 1)
8753 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
8754 #define MAP_STRTAB (SHN_HIOS + 3)
8755 #define MAP_SHSTRTAB (SHN_HIOS + 4)
8756 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
8757
8758 bool
8759 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
8760 asymbol *isymarg,
8761 bfd *obfd,
8762 asymbol *osymarg)
8763 {
8764 elf_symbol_type *isym, *osym;
8765
8766 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8767 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8768 return true;
8769
8770 isym = elf_symbol_from (isymarg);
8771 osym = elf_symbol_from (osymarg);
8772
8773 if (isym != NULL
8774 && isym->internal_elf_sym.st_shndx != 0
8775 && osym != NULL
8776 && bfd_is_abs_section (isym->symbol.section))
8777 {
8778 unsigned int shndx;
8779
8780 shndx = isym->internal_elf_sym.st_shndx;
8781 if (shndx == elf_onesymtab (ibfd))
8782 shndx = MAP_ONESYMTAB;
8783 else if (shndx == elf_dynsymtab (ibfd))
8784 shndx = MAP_DYNSYMTAB;
8785 else if (shndx == elf_elfsections (ibfd)[elf_onesymtab (ibfd)]->sh_link)
8786 shndx = MAP_STRTAB;
8787 else if (shndx == elf_elfheader (ibfd)->e_shstrndx)
8788 shndx = MAP_SHSTRTAB;
8789 else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
8790 shndx = MAP_SYM_SHNDX;
8791 osym->internal_elf_sym.st_shndx = shndx;
8792 }
8793
8794 return true;
8795 }
8796
8797 /* Swap out the symbols. */
8798
8799 static bool
8800 swap_out_syms (bfd *abfd,
8801 struct elf_strtab_hash **sttp,
8802 int relocatable_p,
8803 struct bfd_link_info *info)
8804 {
8805 const struct elf_backend_data *bed;
8806 unsigned int symcount;
8807 asymbol **syms;
8808 struct elf_strtab_hash *stt;
8809 Elf_Internal_Shdr *symtab_hdr;
8810 Elf_Internal_Shdr *symtab_shndx_hdr;
8811 Elf_Internal_Shdr *symstrtab_hdr;
8812 struct elf_sym_strtab *symstrtab;
8813 bfd_byte *outbound_syms;
8814 bfd_byte *outbound_shndx;
8815 unsigned long outbound_syms_index;
8816 unsigned int idx;
8817 unsigned int num_locals;
8818 size_t amt;
8819 bool name_local_sections;
8820
8821 if (!elf_map_symbols (abfd, &num_locals))
8822 return false;
8823
8824 /* Dump out the symtabs. */
8825 stt = _bfd_elf_strtab_init ();
8826 if (stt == NULL)
8827 return false;
8828
8829 bed = get_elf_backend_data (abfd);
8830 symcount = bfd_get_symcount (abfd);
8831 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8832 symtab_hdr->sh_type = SHT_SYMTAB;
8833 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8834 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8835 symtab_hdr->sh_info = num_locals + 1;
8836 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8837
8838 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8839 symstrtab_hdr->sh_type = SHT_STRTAB;
8840
8841 /* Allocate buffer to swap out the .strtab section. */
8842 if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8843 || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8844 {
8845 bfd_set_error (bfd_error_no_memory);
8846 _bfd_elf_strtab_free (stt);
8847 return false;
8848 }
8849
8850 if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8851 || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
8852 {
8853 error_no_mem:
8854 bfd_set_error (bfd_error_no_memory);
8855 error_return:
8856 free (symstrtab);
8857 _bfd_elf_strtab_free (stt);
8858 return false;
8859 }
8860 symtab_hdr->contents = outbound_syms;
8861 outbound_syms_index = 0;
8862
8863 outbound_shndx = NULL;
8864
8865 if (elf_symtab_shndx_list (abfd))
8866 {
8867 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8868 if (symtab_shndx_hdr->sh_name != 0)
8869 {
8870 if (_bfd_mul_overflow (symcount + 1,
8871 sizeof (Elf_External_Sym_Shndx), &amt))
8872 goto error_no_mem;
8873 outbound_shndx = (bfd_byte *) bfd_zalloc (abfd, amt);
8874 if (outbound_shndx == NULL)
8875 goto error_return;
8876
8877 symtab_shndx_hdr->contents = outbound_shndx;
8878 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8879 symtab_shndx_hdr->sh_size = amt;
8880 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8881 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8882 }
8883 /* FIXME: What about any other headers in the list ? */
8884 }
8885
8886 /* Now generate the data (for "contents"). */
8887 {
8888 /* Fill in zeroth symbol and swap it out. */
8889 Elf_Internal_Sym sym;
8890 sym.st_name = 0;
8891 sym.st_value = 0;
8892 sym.st_size = 0;
8893 sym.st_info = 0;
8894 sym.st_other = 0;
8895 sym.st_shndx = SHN_UNDEF;
8896 sym.st_target_internal = 0;
8897 symstrtab[outbound_syms_index].sym = sym;
8898 symstrtab[outbound_syms_index].dest_index = outbound_syms_index;
8899 outbound_syms_index++;
8900 }
8901
8902 name_local_sections
8903 = (bed->elf_backend_name_local_section_symbols
8904 && bed->elf_backend_name_local_section_symbols (abfd));
8905
8906 syms = bfd_get_outsymbols (abfd);
8907 for (idx = 0; idx < symcount; idx++)
8908 {
8909 Elf_Internal_Sym sym;
8910
8911 flagword flags = syms[idx]->flags;
8912 if (!name_local_sections
8913 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8914 {
8915 /* Local section symbols have no name. */
8916 sym.st_name = (unsigned long) -1;
8917 }
8918 else
8919 {
8920 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8921 to get the final offset for st_name. */
8922 sym.st_name
8923 = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8924 false);
8925 if (sym.st_name == (unsigned long) -1)
8926 goto error_return;
8927 }
8928
8929 bfd_vma value = syms[idx]->value;
8930 elf_symbol_type *type_ptr = elf_symbol_from (syms[idx]);
8931 asection *sec = syms[idx]->section;
8932
8933 if ((flags & BSF_SECTION_SYM) == 0 && bfd_is_com_section (sec))
8934 {
8935 /* ELF common symbols put the alignment into the `value' field,
8936 and the size into the `size' field. This is backwards from
8937 how BFD handles it, so reverse it here. */
8938 sym.st_size = value;
8939 if (type_ptr == NULL
8940 || type_ptr->internal_elf_sym.st_value == 0)
8941 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8942 else
8943 sym.st_value = type_ptr->internal_elf_sym.st_value;
8944 sym.st_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8945 }
8946 else
8947 {
8948 unsigned int shndx;
8949
8950 if (sec->output_section)
8951 {
8952 value += sec->output_offset;
8953 sec = sec->output_section;
8954 }
8955
8956 /* Don't add in the section vma for relocatable output. */
8957 if (! relocatable_p)
8958 value += sec->vma;
8959 sym.st_value = value;
8960 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8961
8962 if (bfd_is_abs_section (sec)
8963 && type_ptr != NULL
8964 && type_ptr->internal_elf_sym.st_shndx != 0)
8965 {
8966 /* This symbol is in a real ELF section which we did
8967 not create as a BFD section. Undo the mapping done
8968 by copy_private_symbol_data. */
8969 shndx = type_ptr->internal_elf_sym.st_shndx;
8970 switch (shndx)
8971 {
8972 case MAP_ONESYMTAB:
8973 shndx = elf_onesymtab (abfd);
8974 break;
8975 case MAP_DYNSYMTAB:
8976 shndx = elf_dynsymtab (abfd);
8977 break;
8978 case MAP_STRTAB:
8979 shndx = elf_strtab_sec (abfd);
8980 break;
8981 case MAP_SHSTRTAB:
8982 shndx = elf_shstrtab_sec (abfd);
8983 break;
8984 case MAP_SYM_SHNDX:
8985 if (elf_symtab_shndx_list (abfd))
8986 shndx = elf_symtab_shndx_list (abfd)->ndx;
8987 break;
8988 case SHN_COMMON:
8989 case SHN_ABS:
8990 shndx = SHN_ABS;
8991 break;
8992 default:
8993 if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8994 {
8995 if (bed->symbol_section_index)
8996 shndx = bed->symbol_section_index (abfd, type_ptr);
8997 /* Otherwise just leave the index alone. */
8998 }
8999 else
9000 {
9001 if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
9002 _bfd_error_handler (_("%pB: \
9003 Unable to handle section index %x in ELF symbol. Using ABS instead."),
9004 abfd, shndx);
9005 shndx = SHN_ABS;
9006 }
9007 break;
9008 }
9009 }
9010 else
9011 {
9012 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
9013
9014 if (shndx == SHN_BAD)
9015 {
9016 asection *sec2;
9017
9018 /* Writing this would be a hell of a lot easier if
9019 we had some decent documentation on bfd, and
9020 knew what to expect of the library, and what to
9021 demand of applications. For example, it
9022 appears that `objcopy' might not set the
9023 section of a symbol to be a section that is
9024 actually in the output file. */
9025 sec2 = bfd_get_section_by_name (abfd, sec->name);
9026 if (sec2 != NULL)
9027 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
9028 if (shndx == SHN_BAD)
9029 {
9030 /* xgettext:c-format */
9031 _bfd_error_handler
9032 (_("unable to find equivalent output section"
9033 " for symbol '%s' from section '%s'"),
9034 syms[idx]->name ? syms[idx]->name : "<Local sym>",
9035 sec->name);
9036 bfd_set_error (bfd_error_invalid_operation);
9037 goto error_return;
9038 }
9039 }
9040 }
9041
9042 sym.st_shndx = shndx;
9043 }
9044
9045 int type;
9046 if ((flags & BSF_THREAD_LOCAL) != 0)
9047 type = STT_TLS;
9048 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
9049 type = STT_GNU_IFUNC;
9050 else if ((flags & BSF_FUNCTION) != 0)
9051 type = STT_FUNC;
9052 else if ((flags & BSF_OBJECT) != 0)
9053 type = STT_OBJECT;
9054 else if ((flags & BSF_RELC) != 0)
9055 type = STT_RELC;
9056 else if ((flags & BSF_SRELC) != 0)
9057 type = STT_SRELC;
9058 else
9059 type = STT_NOTYPE;
9060
9061 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
9062 type = STT_TLS;
9063
9064 /* Processor-specific types. */
9065 if (type_ptr != NULL
9066 && bed->elf_backend_get_symbol_type)
9067 type = ((*bed->elf_backend_get_symbol_type)
9068 (&type_ptr->internal_elf_sym, type));
9069
9070 if (flags & BSF_SECTION_SYM)
9071 {
9072 if (flags & BSF_GLOBAL)
9073 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9074 else
9075 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
9076 }
9077 else if (bfd_is_com_section (syms[idx]->section))
9078 {
9079 if (type != STT_TLS)
9080 {
9081 if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
9082 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
9083 ? STT_COMMON : STT_OBJECT);
9084 else
9085 type = ((flags & BSF_ELF_COMMON) != 0
9086 ? STT_COMMON : STT_OBJECT);
9087 }
9088 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9089 }
9090 else if (bfd_is_und_section (syms[idx]->section))
9091 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
9092 ? STB_WEAK
9093 : STB_GLOBAL),
9094 type);
9095 else if (flags & BSF_FILE)
9096 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9097 else
9098 {
9099 int bind = STB_LOCAL;
9100
9101 if (flags & BSF_LOCAL)
9102 bind = STB_LOCAL;
9103 else if (flags & BSF_GNU_UNIQUE)
9104 bind = STB_GNU_UNIQUE;
9105 else if (flags & BSF_WEAK)
9106 bind = STB_WEAK;
9107 else if (flags & BSF_GLOBAL)
9108 bind = STB_GLOBAL;
9109
9110 sym.st_info = ELF_ST_INFO (bind, type);
9111 }
9112
9113 if (type_ptr != NULL)
9114 {
9115 sym.st_other = type_ptr->internal_elf_sym.st_other;
9116 sym.st_target_internal
9117 = type_ptr->internal_elf_sym.st_target_internal;
9118 }
9119 else
9120 {
9121 sym.st_other = 0;
9122 sym.st_target_internal = 0;
9123 }
9124
9125 symstrtab[outbound_syms_index].sym = sym;
9126 symstrtab[outbound_syms_index].dest_index = outbound_syms_index;
9127 outbound_syms_index++;
9128 }
9129
9130 /* Finalize the .strtab section. */
9131 _bfd_elf_strtab_finalize (stt);
9132
9133 /* Swap out the .strtab section. */
9134 for (idx = 0; idx < outbound_syms_index; idx++)
9135 {
9136 struct elf_sym_strtab *elfsym = &symstrtab[idx];
9137 if (elfsym->sym.st_name == (unsigned long) -1)
9138 elfsym->sym.st_name = 0;
9139 else
9140 elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
9141 elfsym->sym.st_name);
9142 if (info && info->callbacks->ctf_new_symbol)
9143 info->callbacks->ctf_new_symbol (elfsym->dest_index,
9144 &elfsym->sym);
9145
9146 /* Inform the linker of the addition of this symbol. */
9147
9148 bed->s->swap_symbol_out (abfd, &elfsym->sym,
9149 (outbound_syms
9150 + (elfsym->dest_index
9151 * bed->s->sizeof_sym)),
9152 NPTR_ADD (outbound_shndx,
9153 (elfsym->dest_index
9154 * sizeof (Elf_External_Sym_Shndx))));
9155 }
9156 free (symstrtab);
9157
9158 *sttp = stt;
9159 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
9160 symstrtab_hdr->sh_type = SHT_STRTAB;
9161 symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
9162 symstrtab_hdr->sh_addr = 0;
9163 symstrtab_hdr->sh_entsize = 0;
9164 symstrtab_hdr->sh_link = 0;
9165 symstrtab_hdr->sh_info = 0;
9166 symstrtab_hdr->sh_addralign = 1;
9167
9168 return true;
9169 }
9170
9171 /* Return the number of bytes required to hold the symtab vector.
9172
9173 Note that we base it on the count plus 1, since we will null terminate
9174 the vector allocated based on this size. However, the ELF symbol table
9175 always has a dummy entry as symbol #0, so it ends up even. */
9176
9177 long
9178 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
9179 {
9180 bfd_size_type symcount;
9181 long symtab_size;
9182 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
9183
9184 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
9185 if (symcount > LONG_MAX / sizeof (asymbol *))
9186 {
9187 bfd_set_error (bfd_error_file_too_big);
9188 return -1;
9189 }
9190 symtab_size = symcount * (sizeof (asymbol *));
9191 if (symcount == 0)
9192 symtab_size = sizeof (asymbol *);
9193 else if (!bfd_write_p (abfd))
9194 {
9195 ufile_ptr filesize = bfd_get_file_size (abfd);
9196
9197 if (filesize != 0 && (unsigned long) symtab_size > filesize)
9198 {
9199 bfd_set_error (bfd_error_file_truncated);
9200 return -1;
9201 }
9202 }
9203
9204 return symtab_size;
9205 }
9206
9207 long
9208 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
9209 {
9210 bfd_size_type symcount;
9211 long symtab_size;
9212 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
9213
9214 if (elf_dynsymtab (abfd) == 0)
9215 {
9216 /* Check if there is dynamic symbol table. */
9217 symcount = elf_tdata (abfd)->dt_symtab_count;
9218 if (symcount)
9219 goto compute_symtab_size;
9220
9221 bfd_set_error (bfd_error_invalid_operation);
9222 return -1;
9223 }
9224
9225 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
9226 if (symcount > LONG_MAX / sizeof (asymbol *))
9227 {
9228 bfd_set_error (bfd_error_file_too_big);
9229 return -1;
9230 }
9231
9232 compute_symtab_size:
9233 symtab_size = symcount * (sizeof (asymbol *));
9234 if (symcount == 0)
9235 symtab_size = sizeof (asymbol *);
9236 else if (!bfd_write_p (abfd))
9237 {
9238 ufile_ptr filesize = bfd_get_file_size (abfd);
9239
9240 if (filesize != 0 && (unsigned long) symtab_size > filesize)
9241 {
9242 bfd_set_error (bfd_error_file_truncated);
9243 return -1;
9244 }
9245 }
9246
9247 return symtab_size;
9248 }
9249
9250 long
9251 _bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
9252 {
9253 if (asect->reloc_count != 0 && !bfd_write_p (abfd))
9254 {
9255 /* Sanity check reloc section size. */
9256 ufile_ptr filesize = bfd_get_file_size (abfd);
9257
9258 if (filesize != 0)
9259 {
9260 struct bfd_elf_section_data *d = elf_section_data (asect);
9261 bfd_size_type rel_size = d->rel.hdr ? d->rel.hdr->sh_size : 0;
9262 bfd_size_type rela_size = d->rela.hdr ? d->rela.hdr->sh_size : 0;
9263
9264 if (rel_size + rela_size > filesize
9265 || rel_size + rela_size < rel_size)
9266 {
9267 bfd_set_error (bfd_error_file_truncated);
9268 return -1;
9269 }
9270 }
9271 }
9272
9273 #if SIZEOF_LONG == SIZEOF_INT
9274 if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
9275 {
9276 bfd_set_error (bfd_error_file_too_big);
9277 return -1;
9278 }
9279 #endif
9280 return (asect->reloc_count + 1L) * sizeof (arelent *);
9281 }
9282
9283 /* Canonicalize the relocs. */
9284
9285 long
9286 _bfd_elf_canonicalize_reloc (bfd *abfd,
9287 sec_ptr section,
9288 arelent **relptr,
9289 asymbol **symbols)
9290 {
9291 arelent *tblptr;
9292 unsigned int i;
9293 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9294
9295 if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
9296 return -1;
9297
9298 tblptr = section->relocation;
9299 for (i = 0; i < section->reloc_count; i++)
9300 *relptr++ = tblptr++;
9301
9302 *relptr = NULL;
9303
9304 return section->reloc_count;
9305 }
9306
9307 long
9308 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
9309 {
9310 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9311 long symcount = bed->s->slurp_symbol_table (abfd, allocation, false);
9312
9313 if (symcount >= 0)
9314 abfd->symcount = symcount;
9315 return symcount;
9316 }
9317
9318 long
9319 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
9320 asymbol **allocation)
9321 {
9322 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9323 long symcount = bed->s->slurp_symbol_table (abfd, allocation, true);
9324
9325 if (symcount >= 0)
9326 abfd->dynsymcount = symcount;
9327 return symcount;
9328 }
9329
9330 /* Return the size required for the dynamic reloc entries. Any loadable
9331 section that was actually installed in the BFD, and has type SHT_REL
9332 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
9333 dynamic reloc section. */
9334
9335 long
9336 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
9337 {
9338 bfd_size_type count, ext_rel_size;
9339 asection *s;
9340
9341 if (elf_dynsymtab (abfd) == 0)
9342 {
9343 bfd_set_error (bfd_error_invalid_operation);
9344 return -1;
9345 }
9346
9347 count = 1;
9348 ext_rel_size = 0;
9349 for (s = abfd->sections; s != NULL; s = s->next)
9350 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
9351 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
9352 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
9353 && (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
9354 {
9355 ext_rel_size += elf_section_data (s)->this_hdr.sh_size;
9356 if (ext_rel_size < elf_section_data (s)->this_hdr.sh_size)
9357 {
9358 bfd_set_error (bfd_error_file_truncated);
9359 return -1;
9360 }
9361 count += NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
9362 if (count > LONG_MAX / sizeof (arelent *))
9363 {
9364 bfd_set_error (bfd_error_file_too_big);
9365 return -1;
9366 }
9367 }
9368 if (count > 1 && !bfd_write_p (abfd))
9369 {
9370 /* Sanity check reloc section sizes. */
9371 ufile_ptr filesize = bfd_get_file_size (abfd);
9372 if (filesize != 0 && ext_rel_size > filesize)
9373 {
9374 bfd_set_error (bfd_error_file_truncated);
9375 return -1;
9376 }
9377 }
9378 return count * sizeof (arelent *);
9379 }
9380
9381 /* Canonicalize the dynamic relocation entries. Note that we return the
9382 dynamic relocations as a single block, although they are actually
9383 associated with particular sections; the interface, which was
9384 designed for SunOS style shared libraries, expects that there is only
9385 one set of dynamic relocs. Any loadable section that was actually
9386 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
9387 dynamic symbol table, is considered to be a dynamic reloc section. */
9388
9389 long
9390 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
9391 arelent **storage,
9392 asymbol **syms)
9393 {
9394 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
9395 asection *s;
9396 long ret;
9397
9398 if (elf_dynsymtab (abfd) == 0)
9399 {
9400 bfd_set_error (bfd_error_invalid_operation);
9401 return -1;
9402 }
9403
9404 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9405 ret = 0;
9406 for (s = abfd->sections; s != NULL; s = s->next)
9407 {
9408 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
9409 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
9410 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
9411 && (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
9412 {
9413 arelent *p;
9414 long count, i;
9415
9416 if (! (*slurp_relocs) (abfd, s, syms, true))
9417 return -1;
9418 count = NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
9419 p = s->relocation;
9420 for (i = 0; i < count; i++)
9421 *storage++ = p++;
9422 ret += count;
9423 }
9424 }
9425
9426 *storage = NULL;
9427
9428 return ret;
9429 }
9430 \f
9431 /* Read in the version information. */
9432
9433 bool
9434 _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
9435 {
9436 bfd_byte *contents = NULL;
9437 unsigned int freeidx = 0;
9438 size_t amt;
9439 void *contents_addr = NULL;
9440 size_t contents_size = 0;
9441
9442 if (elf_dynverref (abfd) != 0 || elf_tdata (abfd)->dt_verneed != NULL)
9443 {
9444 Elf_Internal_Shdr *hdr;
9445 Elf_External_Verneed *everneed;
9446 Elf_Internal_Verneed *iverneed;
9447 unsigned int i;
9448 bfd_byte *contents_end;
9449 size_t verneed_count;
9450 size_t verneed_size;
9451
9452 if (elf_tdata (abfd)->dt_verneed != NULL)
9453 {
9454 hdr = NULL;
9455 contents = elf_tdata (abfd)->dt_verneed;
9456 verneed_count = elf_tdata (abfd)->dt_verneed_count;
9457 verneed_size = verneed_count * sizeof (Elf_External_Verneed);
9458 }
9459 else
9460 {
9461 hdr = &elf_tdata (abfd)->dynverref_hdr;
9462
9463 if (hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
9464 {
9465 error_return_bad_verref:
9466 _bfd_error_handler
9467 (_("%pB: .gnu.version_r invalid entry"), abfd);
9468 bfd_set_error (bfd_error_bad_value);
9469 error_return_verref:
9470 elf_tdata (abfd)->verref = NULL;
9471 elf_tdata (abfd)->cverrefs = 0;
9472 goto error_return;
9473 }
9474
9475 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
9476 goto error_return_verref;
9477 contents_size = hdr->sh_size;
9478 contents = _bfd_mmap_readonly_temporary (abfd, contents_size,
9479 &contents_addr,
9480 &contents_size);
9481 if (contents == NULL)
9482 goto error_return_verref;
9483
9484 verneed_size = hdr->sh_size;
9485 verneed_count = hdr->sh_info;
9486 }
9487
9488 if (_bfd_mul_overflow (verneed_count,
9489 sizeof (Elf_Internal_Verneed), &amt))
9490 {
9491 bfd_set_error (bfd_error_file_too_big);
9492 goto error_return_verref;
9493 }
9494 if (amt == 0)
9495 goto error_return_verref;
9496 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_zalloc (abfd, amt);
9497 if (elf_tdata (abfd)->verref == NULL)
9498 goto error_return_verref;
9499
9500 BFD_ASSERT (sizeof (Elf_External_Verneed)
9501 == sizeof (Elf_External_Vernaux));
9502 contents_end = (contents + verneed_size
9503 - sizeof (Elf_External_Verneed));
9504 everneed = (Elf_External_Verneed *) contents;
9505 iverneed = elf_tdata (abfd)->verref;
9506 for (i = 0; i < verneed_count; i++, iverneed++)
9507 {
9508 Elf_External_Vernaux *evernaux;
9509 Elf_Internal_Vernaux *ivernaux;
9510 unsigned int j;
9511
9512 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
9513
9514 iverneed->vn_bfd = abfd;
9515
9516 if (elf_use_dt_symtab_p (abfd))
9517 {
9518 if (iverneed->vn_file < elf_tdata (abfd)->dt_strsz)
9519 iverneed->vn_filename
9520 = elf_tdata (abfd)->dt_strtab + iverneed->vn_file;
9521 else
9522 iverneed->vn_filename = NULL;
9523 }
9524 else if (hdr == NULL)
9525 goto error_return_bad_verref;
9526 else
9527 iverneed->vn_filename
9528 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9529 iverneed->vn_file);
9530 if (iverneed->vn_filename == NULL)
9531 goto error_return_bad_verref;
9532
9533 if (iverneed->vn_cnt == 0)
9534 iverneed->vn_auxptr = NULL;
9535 else
9536 {
9537 if (_bfd_mul_overflow (iverneed->vn_cnt,
9538 sizeof (Elf_Internal_Vernaux), &amt))
9539 {
9540 bfd_set_error (bfd_error_file_too_big);
9541 goto error_return_verref;
9542 }
9543 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
9544 bfd_alloc (abfd, amt);
9545 if (iverneed->vn_auxptr == NULL)
9546 goto error_return_verref;
9547 }
9548
9549 if (iverneed->vn_aux
9550 > (size_t) (contents_end - (bfd_byte *) everneed))
9551 goto error_return_bad_verref;
9552
9553 evernaux = ((Elf_External_Vernaux *)
9554 ((bfd_byte *) everneed + iverneed->vn_aux));
9555 ivernaux = iverneed->vn_auxptr;
9556 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
9557 {
9558 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
9559
9560 if (elf_use_dt_symtab_p (abfd))
9561 {
9562 if (ivernaux->vna_name < elf_tdata (abfd)->dt_strsz)
9563 ivernaux->vna_nodename
9564 = elf_tdata (abfd)->dt_strtab + ivernaux->vna_name;
9565 else
9566 ivernaux->vna_nodename = NULL;
9567 }
9568 else if (hdr == NULL)
9569 goto error_return_bad_verref;
9570 else
9571 ivernaux->vna_nodename
9572 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9573 ivernaux->vna_name);
9574 if (ivernaux->vna_nodename == NULL)
9575 goto error_return_bad_verref;
9576
9577 if (ivernaux->vna_other > freeidx)
9578 freeidx = ivernaux->vna_other;
9579
9580 ivernaux->vna_nextptr = NULL;
9581 if (ivernaux->vna_next == 0)
9582 {
9583 iverneed->vn_cnt = j + 1;
9584 break;
9585 }
9586 if (j + 1 < iverneed->vn_cnt)
9587 ivernaux->vna_nextptr = ivernaux + 1;
9588
9589 if (ivernaux->vna_next
9590 > (size_t) (contents_end - (bfd_byte *) evernaux))
9591 goto error_return_bad_verref;
9592
9593 evernaux = ((Elf_External_Vernaux *)
9594 ((bfd_byte *) evernaux + ivernaux->vna_next));
9595 }
9596
9597 iverneed->vn_nextref = NULL;
9598 if (iverneed->vn_next == 0)
9599 break;
9600 if (hdr != NULL && (i + 1 < hdr->sh_info))
9601 iverneed->vn_nextref = iverneed + 1;
9602
9603 if (iverneed->vn_next
9604 > (size_t) (contents_end - (bfd_byte *) everneed))
9605 goto error_return_bad_verref;
9606
9607 everneed = ((Elf_External_Verneed *)
9608 ((bfd_byte *) everneed + iverneed->vn_next));
9609 }
9610 elf_tdata (abfd)->cverrefs = i;
9611
9612 if (contents != elf_tdata (abfd)->dt_verneed)
9613 _bfd_munmap_readonly_temporary (contents_addr, contents_size);
9614 contents = NULL;
9615 contents_addr = NULL;
9616 }
9617
9618 if (elf_dynverdef (abfd) != 0 || elf_tdata (abfd)->dt_verdef != NULL)
9619 {
9620 Elf_Internal_Shdr *hdr;
9621 Elf_External_Verdef *everdef;
9622 Elf_Internal_Verdef *iverdef;
9623 Elf_Internal_Verdef *iverdefarr;
9624 Elf_Internal_Verdef iverdefmem;
9625 unsigned int i;
9626 unsigned int maxidx;
9627 bfd_byte *contents_end_def, *contents_end_aux;
9628 size_t verdef_count;
9629 size_t verdef_size;
9630
9631 if (elf_tdata (abfd)->dt_verdef != NULL)
9632 {
9633 hdr = NULL;
9634 contents = elf_tdata (abfd)->dt_verdef;
9635 verdef_count = elf_tdata (abfd)->dt_verdef_count;
9636 verdef_size = verdef_count * sizeof (Elf_External_Verdef);
9637 }
9638 else
9639 {
9640 hdr = &elf_tdata (abfd)->dynverdef_hdr;
9641
9642 if (hdr->sh_size < sizeof (Elf_External_Verdef))
9643 {
9644 error_return_bad_verdef:
9645 _bfd_error_handler
9646 (_("%pB: .gnu.version_d invalid entry"), abfd);
9647 bfd_set_error (bfd_error_bad_value);
9648 error_return_verdef:
9649 elf_tdata (abfd)->verdef = NULL;
9650 elf_tdata (abfd)->cverdefs = 0;
9651 goto error_return;
9652 }
9653
9654 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
9655 goto error_return_verdef;
9656 contents_size = hdr->sh_size;
9657 contents = _bfd_mmap_readonly_temporary (abfd, contents_size,
9658 &contents_addr,
9659 &contents_size);
9660 if (contents == NULL)
9661 goto error_return_verdef;
9662
9663 BFD_ASSERT (sizeof (Elf_External_Verdef)
9664 >= sizeof (Elf_External_Verdaux));
9665
9666 verdef_count = hdr->sh_info;
9667 verdef_size = hdr->sh_size;
9668 }
9669
9670 contents_end_def = (contents + verdef_size
9671 - sizeof (Elf_External_Verdef));
9672 contents_end_aux = (contents + verdef_size
9673 - sizeof (Elf_External_Verdaux));
9674
9675 /* We know the number of entries in the section but not the maximum
9676 index. Therefore we have to run through all entries and find
9677 the maximum. */
9678 everdef = (Elf_External_Verdef *) contents;
9679 maxidx = 0;
9680 for (i = 0; i < verdef_count; ++i)
9681 {
9682 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9683
9684 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
9685 goto error_return_bad_verdef;
9686 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
9687 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
9688
9689 if (iverdefmem.vd_next == 0)
9690 break;
9691
9692 if (iverdefmem.vd_next
9693 > (size_t) (contents_end_def - (bfd_byte *) everdef))
9694 goto error_return_bad_verdef;
9695
9696 everdef = ((Elf_External_Verdef *)
9697 ((bfd_byte *) everdef + iverdefmem.vd_next));
9698 }
9699
9700 if (default_imported_symver)
9701 {
9702 if (freeidx > maxidx)
9703 maxidx = ++freeidx;
9704 else
9705 freeidx = ++maxidx;
9706 }
9707 if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
9708 {
9709 bfd_set_error (bfd_error_file_too_big);
9710 goto error_return_verdef;
9711 }
9712
9713 if (amt == 0)
9714 goto error_return_verdef;
9715 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9716 if (elf_tdata (abfd)->verdef == NULL)
9717 goto error_return_verdef;
9718
9719 elf_tdata (abfd)->cverdefs = maxidx;
9720
9721 everdef = (Elf_External_Verdef *) contents;
9722 iverdefarr = elf_tdata (abfd)->verdef;
9723 for (i = 0; i < verdef_count; ++i)
9724 {
9725 Elf_External_Verdaux *everdaux;
9726 Elf_Internal_Verdaux *iverdaux;
9727 unsigned int j;
9728
9729 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9730
9731 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
9732 goto error_return_bad_verdef;
9733
9734 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
9735 memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
9736
9737 iverdef->vd_bfd = abfd;
9738
9739 if (iverdef->vd_cnt == 0)
9740 iverdef->vd_auxptr = NULL;
9741 else
9742 {
9743 if (_bfd_mul_overflow (iverdef->vd_cnt,
9744 sizeof (Elf_Internal_Verdaux), &amt))
9745 {
9746 bfd_set_error (bfd_error_file_too_big);
9747 goto error_return_verdef;
9748 }
9749 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
9750 bfd_alloc (abfd, amt);
9751 if (iverdef->vd_auxptr == NULL)
9752 goto error_return_verdef;
9753 }
9754
9755 if (iverdef->vd_aux
9756 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
9757 goto error_return_bad_verdef;
9758
9759 everdaux = ((Elf_External_Verdaux *)
9760 ((bfd_byte *) everdef + iverdef->vd_aux));
9761 iverdaux = iverdef->vd_auxptr;
9762 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
9763 {
9764 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
9765
9766 if (elf_use_dt_symtab_p (abfd))
9767 {
9768 if (iverdaux->vda_name < elf_tdata (abfd)->dt_strsz)
9769 iverdaux->vda_nodename
9770 = elf_tdata (abfd)->dt_strtab + iverdaux->vda_name;
9771 else
9772 iverdaux->vda_nodename = NULL;
9773 }
9774 else
9775 iverdaux->vda_nodename
9776 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9777 iverdaux->vda_name);
9778 if (iverdaux->vda_nodename == NULL)
9779 goto error_return_bad_verdef;
9780
9781 iverdaux->vda_nextptr = NULL;
9782 if (iverdaux->vda_next == 0)
9783 {
9784 iverdef->vd_cnt = j + 1;
9785 break;
9786 }
9787 if (j + 1 < iverdef->vd_cnt)
9788 iverdaux->vda_nextptr = iverdaux + 1;
9789
9790 if (iverdaux->vda_next
9791 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
9792 goto error_return_bad_verdef;
9793
9794 everdaux = ((Elf_External_Verdaux *)
9795 ((bfd_byte *) everdaux + iverdaux->vda_next));
9796 }
9797
9798 iverdef->vd_nodename = NULL;
9799 if (iverdef->vd_cnt)
9800 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
9801
9802 iverdef->vd_nextdef = NULL;
9803 if (iverdef->vd_next == 0)
9804 break;
9805 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
9806 iverdef->vd_nextdef = iverdef + 1;
9807
9808 everdef = ((Elf_External_Verdef *)
9809 ((bfd_byte *) everdef + iverdef->vd_next));
9810 }
9811
9812 if (contents != elf_tdata (abfd)->dt_verdef)
9813 _bfd_munmap_readonly_temporary (contents_addr, contents_size);
9814 contents = NULL;
9815 contents_addr = NULL;
9816 }
9817 else if (default_imported_symver)
9818 {
9819 if (freeidx < 3)
9820 freeidx = 3;
9821 else
9822 freeidx++;
9823
9824 if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
9825 {
9826 bfd_set_error (bfd_error_file_too_big);
9827 goto error_return;
9828 }
9829 if (amt == 0)
9830 goto error_return;
9831 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9832 if (elf_tdata (abfd)->verdef == NULL)
9833 goto error_return;
9834
9835 elf_tdata (abfd)->cverdefs = freeidx;
9836 }
9837
9838 /* Create a default version based on the soname. */
9839 if (default_imported_symver)
9840 {
9841 Elf_Internal_Verdef *iverdef;
9842 Elf_Internal_Verdaux *iverdaux;
9843
9844 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
9845
9846 iverdef->vd_version = VER_DEF_CURRENT;
9847 iverdef->vd_flags = 0;
9848 iverdef->vd_ndx = freeidx;
9849 iverdef->vd_cnt = 1;
9850
9851 iverdef->vd_bfd = abfd;
9852
9853 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
9854 if (iverdef->vd_nodename == NULL)
9855 goto error_return_verdef;
9856 iverdef->vd_nextdef = NULL;
9857 iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
9858 bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
9859 if (iverdef->vd_auxptr == NULL)
9860 goto error_return_verdef;
9861
9862 iverdaux = iverdef->vd_auxptr;
9863 iverdaux->vda_nodename = iverdef->vd_nodename;
9864 }
9865
9866 return true;
9867
9868 error_return:
9869 if (contents != elf_tdata (abfd)->dt_verneed
9870 && contents != elf_tdata (abfd)->dt_verdef)
9871 _bfd_munmap_readonly_temporary (contents_addr, contents_size);
9872 return false;
9873 }
9874 \f
9875 asymbol *
9876 _bfd_elf_make_empty_symbol (bfd *abfd)
9877 {
9878 elf_symbol_type *newsym;
9879
9880 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
9881 if (!newsym)
9882 return NULL;
9883 newsym->symbol.the_bfd = abfd;
9884 return &newsym->symbol;
9885 }
9886
9887 void
9888 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
9889 asymbol *symbol,
9890 symbol_info *ret)
9891 {
9892 bfd_symbol_info (symbol, ret);
9893 }
9894
9895 /* Return whether a symbol name implies a local symbol. Most targets
9896 use this function for the is_local_label_name entry point, but some
9897 override it. */
9898
9899 bool
9900 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
9901 const char *name)
9902 {
9903 /* Normal local symbols start with ``.L''. */
9904 if (name[0] == '.' && name[1] == 'L')
9905 return true;
9906
9907 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
9908 DWARF debugging symbols starting with ``..''. */
9909 if (name[0] == '.' && name[1] == '.')
9910 return true;
9911
9912 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
9913 emitting DWARF debugging output. I suspect this is actually a
9914 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
9915 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
9916 underscore to be emitted on some ELF targets). For ease of use,
9917 we treat such symbols as local. */
9918 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
9919 return true;
9920
9921 /* Treat assembler generated fake symbols, dollar local labels and
9922 forward-backward labels (aka local labels) as locals.
9923 These labels have the form:
9924
9925 L0^A.* (fake symbols)
9926
9927 [.]?L[0123456789]+{^A|^B}[0123456789]* (local labels)
9928
9929 Versions which start with .L will have already been matched above,
9930 so we only need to match the rest. */
9931 if (name[0] == 'L' && ISDIGIT (name[1]))
9932 {
9933 bool ret = false;
9934 const char * p;
9935 char c;
9936
9937 for (p = name + 2; (c = *p); p++)
9938 {
9939 if (c == 1 || c == 2)
9940 {
9941 if (c == 1 && p == name + 2)
9942 /* A fake symbol. */
9943 return true;
9944
9945 /* FIXME: We are being paranoid here and treating symbols like
9946 L0^Bfoo as if there were non-local, on the grounds that the
9947 assembler will never generate them. But can any symbol
9948 containing an ASCII value in the range 1-31 ever be anything
9949 other than some kind of local ? */
9950 ret = true;
9951 }
9952
9953 if (! ISDIGIT (c))
9954 {
9955 ret = false;
9956 break;
9957 }
9958 }
9959 return ret;
9960 }
9961
9962 return false;
9963 }
9964
9965 alent *
9966 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9967 asymbol *symbol ATTRIBUTE_UNUSED)
9968 {
9969 abort ();
9970 return NULL;
9971 }
9972
9973 bool
9974 _bfd_elf_set_arch_mach (bfd *abfd,
9975 enum bfd_architecture arch,
9976 unsigned long machine)
9977 {
9978 /* If this isn't the right architecture for this backend, and this
9979 isn't the generic backend, fail. */
9980 if (arch != get_elf_backend_data (abfd)->arch
9981 && arch != bfd_arch_unknown
9982 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9983 return false;
9984
9985 return bfd_default_set_arch_mach (abfd, arch, machine);
9986 }
9987
9988 /* Find the nearest line to a particular section and offset,
9989 for error reporting. */
9990
9991 bool
9992 _bfd_elf_find_nearest_line (bfd *abfd,
9993 asymbol **symbols,
9994 asection *section,
9995 bfd_vma offset,
9996 const char **filename_ptr,
9997 const char **functionname_ptr,
9998 unsigned int *line_ptr,
9999 unsigned int *discriminator_ptr)
10000 {
10001 return _bfd_elf_find_nearest_line_with_alt (abfd, NULL, symbols, section,
10002 offset, filename_ptr,
10003 functionname_ptr, line_ptr,
10004 discriminator_ptr);
10005 }
10006
10007 /* Find the nearest line to a particular section and offset,
10008 for error reporting. ALT_BFD representing a .gnu_debugaltlink file
10009 can be optionally specified. */
10010
10011 bool
10012 _bfd_elf_find_nearest_line_with_alt (bfd *abfd,
10013 const char *alt_filename,
10014 asymbol **symbols,
10015 asection *section,
10016 bfd_vma offset,
10017 const char **filename_ptr,
10018 const char **functionname_ptr,
10019 unsigned int *line_ptr,
10020 unsigned int *discriminator_ptr)
10021 {
10022 bool found;
10023
10024 if (_bfd_dwarf2_find_nearest_line_with_alt (abfd, alt_filename, symbols, NULL,
10025 section, offset, filename_ptr,
10026 functionname_ptr, line_ptr,
10027 discriminator_ptr,
10028 dwarf_debug_sections,
10029 &elf_tdata (abfd)->dwarf2_find_line_info))
10030 return true;
10031
10032 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
10033 filename_ptr, functionname_ptr, line_ptr))
10034 {
10035 if (!*functionname_ptr)
10036 _bfd_elf_find_function (abfd, symbols, section, offset,
10037 *filename_ptr ? NULL : filename_ptr,
10038 functionname_ptr);
10039 return true;
10040 }
10041
10042 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
10043 &found, filename_ptr,
10044 functionname_ptr, line_ptr,
10045 &elf_tdata (abfd)->line_info))
10046 return false;
10047 if (found && (*functionname_ptr || *line_ptr))
10048 return true;
10049
10050 if (symbols == NULL)
10051 return false;
10052
10053 if (! _bfd_elf_find_function (abfd, symbols, section, offset,
10054 filename_ptr, functionname_ptr))
10055 return false;
10056
10057 *line_ptr = 0;
10058 return true;
10059 }
10060
10061 /* Find the line for a symbol. */
10062
10063 bool
10064 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
10065 const char **filename_ptr, unsigned int *line_ptr)
10066 {
10067 struct elf_obj_tdata *tdata = elf_tdata (abfd);
10068 return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
10069 filename_ptr, NULL, line_ptr, NULL,
10070 dwarf_debug_sections,
10071 &tdata->dwarf2_find_line_info);
10072 }
10073
10074 /* After a call to bfd_find_nearest_line, successive calls to
10075 bfd_find_inliner_info can be used to get source information about
10076 each level of function inlining that terminated at the address
10077 passed to bfd_find_nearest_line. Currently this is only supported
10078 for DWARF2 with appropriate DWARF3 extensions. */
10079
10080 bool
10081 _bfd_elf_find_inliner_info (bfd *abfd,
10082 const char **filename_ptr,
10083 const char **functionname_ptr,
10084 unsigned int *line_ptr)
10085 {
10086 struct elf_obj_tdata *tdata = elf_tdata (abfd);
10087 return _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
10088 functionname_ptr, line_ptr,
10089 &tdata->dwarf2_find_line_info);
10090 }
10091
10092 int
10093 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
10094 {
10095 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10096 int ret = bed->s->sizeof_ehdr;
10097
10098 if (!bfd_link_relocatable (info))
10099 {
10100 bfd_size_type phdr_size = elf_program_header_size (abfd);
10101
10102 if (phdr_size == (bfd_size_type) -1)
10103 {
10104 struct elf_segment_map *m;
10105
10106 phdr_size = 0;
10107 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
10108 phdr_size += bed->s->sizeof_phdr;
10109
10110 if (phdr_size == 0)
10111 phdr_size = get_program_header_size (abfd, info);
10112 }
10113
10114 elf_program_header_size (abfd) = phdr_size;
10115 ret += phdr_size;
10116 }
10117
10118 return ret;
10119 }
10120
10121 bool
10122 _bfd_elf_set_section_contents (bfd *abfd,
10123 sec_ptr section,
10124 const void *location,
10125 file_ptr offset,
10126 bfd_size_type count)
10127 {
10128 Elf_Internal_Shdr *hdr;
10129
10130 if (! abfd->output_has_begun
10131 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
10132 return false;
10133
10134 if (!count)
10135 return true;
10136
10137 hdr = &elf_section_data (section)->this_hdr;
10138 if (hdr->sh_offset == (file_ptr) -1)
10139 {
10140 unsigned char *contents;
10141
10142 if (bfd_section_is_ctf (section))
10143 /* Nothing to do with this section: the contents are generated
10144 later. */
10145 return true;
10146
10147 if ((offset + count) > hdr->sh_size)
10148 {
10149 _bfd_error_handler
10150 (_("%pB:%pA: error: attempting to write"
10151 " over the end of the section"),
10152 abfd, section);
10153
10154 bfd_set_error (bfd_error_invalid_operation);
10155 return false;
10156 }
10157
10158 contents = hdr->contents;
10159 if (contents == NULL)
10160 {
10161 _bfd_error_handler
10162 (_("%pB:%pA: error: attempting to write"
10163 " section into an empty buffer"),
10164 abfd, section);
10165
10166 bfd_set_error (bfd_error_invalid_operation);
10167 return false;
10168 }
10169
10170 memcpy (contents + offset, location, count);
10171 return true;
10172 }
10173
10174 return _bfd_generic_set_section_contents (abfd, section,
10175 location, offset, count);
10176 }
10177
10178 bool
10179 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
10180 arelent *cache_ptr ATTRIBUTE_UNUSED,
10181 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
10182 {
10183 abort ();
10184 return false;
10185 }
10186
10187 /* Try to convert a non-ELF reloc into an ELF one. */
10188
10189 bool
10190 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
10191 {
10192 /* Check whether we really have an ELF howto. */
10193
10194 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
10195 {
10196 bfd_reloc_code_real_type code;
10197 reloc_howto_type *howto;
10198
10199 /* Alien reloc: Try to determine its type to replace it with an
10200 equivalent ELF reloc. */
10201
10202 if (areloc->howto->pc_relative)
10203 {
10204 switch (areloc->howto->bitsize)
10205 {
10206 case 8:
10207 code = BFD_RELOC_8_PCREL;
10208 break;
10209 case 12:
10210 code = BFD_RELOC_12_PCREL;
10211 break;
10212 case 16:
10213 code = BFD_RELOC_16_PCREL;
10214 break;
10215 case 24:
10216 code = BFD_RELOC_24_PCREL;
10217 break;
10218 case 32:
10219 code = BFD_RELOC_32_PCREL;
10220 break;
10221 case 64:
10222 code = BFD_RELOC_64_PCREL;
10223 break;
10224 default:
10225 goto fail;
10226 }
10227
10228 howto = bfd_reloc_type_lookup (abfd, code);
10229
10230 if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
10231 {
10232 if (howto->pcrel_offset)
10233 areloc->addend += areloc->address;
10234 else
10235 areloc->addend -= areloc->address; /* addend is unsigned!! */
10236 }
10237 }
10238 else
10239 {
10240 switch (areloc->howto->bitsize)
10241 {
10242 case 8:
10243 code = BFD_RELOC_8;
10244 break;
10245 case 14:
10246 code = BFD_RELOC_14;
10247 break;
10248 case 16:
10249 code = BFD_RELOC_16;
10250 break;
10251 case 26:
10252 code = BFD_RELOC_26;
10253 break;
10254 case 32:
10255 code = BFD_RELOC_32;
10256 break;
10257 case 64:
10258 code = BFD_RELOC_64;
10259 break;
10260 default:
10261 goto fail;
10262 }
10263
10264 howto = bfd_reloc_type_lookup (abfd, code);
10265 }
10266
10267 if (howto)
10268 areloc->howto = howto;
10269 else
10270 goto fail;
10271 }
10272
10273 return true;
10274
10275 fail:
10276 /* xgettext:c-format */
10277 _bfd_error_handler (_("%pB: %s unsupported"),
10278 abfd, areloc->howto->name);
10279 bfd_set_error (bfd_error_sorry);
10280 return false;
10281 }
10282
10283 bool
10284 _bfd_elf_free_cached_info (bfd *abfd)
10285 {
10286 struct elf_obj_tdata *tdata;
10287
10288 if ((bfd_get_format (abfd) == bfd_object
10289 || bfd_get_format (abfd) == bfd_core)
10290 && (tdata = elf_tdata (abfd)) != NULL)
10291 {
10292 if (tdata->o != NULL && elf_shstrtab (abfd) != NULL)
10293 _bfd_elf_strtab_free (elf_shstrtab (abfd));
10294 _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
10295 _bfd_dwarf1_cleanup_debug_info (abfd, &tdata->dwarf1_find_line_info);
10296 _bfd_stab_cleanup (abfd, &tdata->line_info);
10297 }
10298
10299 return _bfd_generic_bfd_free_cached_info (abfd);
10300 }
10301
10302 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
10303 in the relocation's offset. Thus we cannot allow any sort of sanity
10304 range-checking to interfere. There is nothing else to do in processing
10305 this reloc. */
10306
10307 bfd_reloc_status_type
10308 _bfd_elf_rel_vtable_reloc_fn
10309 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
10310 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
10311 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
10312 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
10313 {
10314 return bfd_reloc_ok;
10315 }
10316 \f
10317 /* Elf core file support. Much of this only works on native
10318 toolchains, since we rely on knowing the
10319 machine-dependent procfs structure in order to pick
10320 out details about the corefile. */
10321
10322 #ifdef HAVE_SYS_PROCFS_H
10323 # include <sys/procfs.h>
10324 #endif
10325
10326 /* Return a PID that identifies a "thread" for threaded cores, or the
10327 PID of the main process for non-threaded cores. */
10328
10329 static int
10330 elfcore_make_pid (bfd *abfd)
10331 {
10332 int pid;
10333
10334 pid = elf_tdata (abfd)->core->lwpid;
10335 if (pid == 0)
10336 pid = elf_tdata (abfd)->core->pid;
10337
10338 return pid;
10339 }
10340
10341 /* If there isn't a section called NAME, make one, using data from
10342 SECT. Note, this function will generate a reference to NAME, so
10343 you shouldn't deallocate or overwrite it. */
10344
10345 static bool
10346 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
10347 {
10348 asection *sect2;
10349
10350 if (bfd_get_section_by_name (abfd, name) != NULL)
10351 return true;
10352
10353 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
10354 if (sect2 == NULL)
10355 return false;
10356
10357 sect2->size = sect->size;
10358 sect2->filepos = sect->filepos;
10359 sect2->alignment_power = sect->alignment_power;
10360 return true;
10361 }
10362
10363 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
10364 actually creates up to two pseudosections:
10365 - For the single-threaded case, a section named NAME, unless
10366 such a section already exists.
10367 - For the multi-threaded case, a section named "NAME/PID", where
10368 PID is elfcore_make_pid (abfd).
10369 Both pseudosections have identical contents. */
10370 bool
10371 _bfd_elfcore_make_pseudosection (bfd *abfd,
10372 char *name,
10373 size_t size,
10374 ufile_ptr filepos)
10375 {
10376 char buf[100];
10377 char *threaded_name;
10378 size_t len;
10379 asection *sect;
10380
10381 /* Build the section name. */
10382
10383 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
10384 len = strlen (buf) + 1;
10385 threaded_name = (char *) bfd_alloc (abfd, len);
10386 if (threaded_name == NULL)
10387 return false;
10388 memcpy (threaded_name, buf, len);
10389
10390 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
10391 SEC_HAS_CONTENTS);
10392 if (sect == NULL)
10393 return false;
10394 sect->size = size;
10395 sect->filepos = filepos;
10396 sect->alignment_power = 2;
10397
10398 return elfcore_maybe_make_sect (abfd, name, sect);
10399 }
10400
10401 static bool
10402 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
10403 size_t offs)
10404 {
10405 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
10406 SEC_HAS_CONTENTS);
10407
10408 if (sect == NULL)
10409 return false;
10410
10411 sect->size = note->descsz - offs;
10412 sect->filepos = note->descpos + offs;
10413 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
10414
10415 return true;
10416 }
10417
10418 /* prstatus_t exists on:
10419 solaris 2.5+
10420 linux 2.[01] + glibc
10421 unixware 4.2
10422 */
10423
10424 #if defined (HAVE_PRSTATUS_T)
10425
10426 static bool
10427 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
10428 {
10429 size_t size;
10430 int offset;
10431
10432 if (note->descsz == sizeof (prstatus_t))
10433 {
10434 prstatus_t prstat;
10435
10436 size = sizeof (prstat.pr_reg);
10437 offset = offsetof (prstatus_t, pr_reg);
10438 memcpy (&prstat, note->descdata, sizeof (prstat));
10439
10440 /* Do not overwrite the core signal if it
10441 has already been set by another thread. */
10442 if (elf_tdata (abfd)->core->signal == 0)
10443 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
10444 if (elf_tdata (abfd)->core->pid == 0)
10445 elf_tdata (abfd)->core->pid = prstat.pr_pid;
10446
10447 /* pr_who exists on:
10448 solaris 2.5+
10449 unixware 4.2
10450 pr_who doesn't exist on:
10451 linux 2.[01]
10452 */
10453 #if defined (HAVE_PRSTATUS_T_PR_WHO)
10454 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
10455 #else
10456 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
10457 #endif
10458 }
10459 #if defined (HAVE_PRSTATUS32_T)
10460 else if (note->descsz == sizeof (prstatus32_t))
10461 {
10462 /* 64-bit host, 32-bit corefile */
10463 prstatus32_t prstat;
10464
10465 size = sizeof (prstat.pr_reg);
10466 offset = offsetof (prstatus32_t, pr_reg);
10467 memcpy (&prstat, note->descdata, sizeof (prstat));
10468
10469 /* Do not overwrite the core signal if it
10470 has already been set by another thread. */
10471 if (elf_tdata (abfd)->core->signal == 0)
10472 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
10473 if (elf_tdata (abfd)->core->pid == 0)
10474 elf_tdata (abfd)->core->pid = prstat.pr_pid;
10475
10476 /* pr_who exists on:
10477 solaris 2.5+
10478 unixware 4.2
10479 pr_who doesn't exist on:
10480 linux 2.[01]
10481 */
10482 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
10483 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
10484 #else
10485 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
10486 #endif
10487 }
10488 #endif /* HAVE_PRSTATUS32_T */
10489 else
10490 {
10491 /* Fail - we don't know how to handle any other
10492 note size (ie. data object type). */
10493 return true;
10494 }
10495
10496 /* Make a ".reg/999" section and a ".reg" section. */
10497 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
10498 size, note->descpos + offset);
10499 }
10500 #endif /* defined (HAVE_PRSTATUS_T) */
10501
10502 /* Create a pseudosection containing the exact contents of NOTE. */
10503 static bool
10504 elfcore_make_note_pseudosection (bfd *abfd,
10505 char *name,
10506 Elf_Internal_Note *note)
10507 {
10508 return _bfd_elfcore_make_pseudosection (abfd, name,
10509 note->descsz, note->descpos);
10510 }
10511
10512 /* There isn't a consistent prfpregset_t across platforms,
10513 but it doesn't matter, because we don't have to pick this
10514 data structure apart. */
10515
10516 static bool
10517 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
10518 {
10519 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10520 }
10521
10522 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
10523 type of NT_PRXFPREG. Just include the whole note's contents
10524 literally. */
10525
10526 static bool
10527 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
10528 {
10529 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
10530 }
10531
10532 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
10533 with a note type of NT_X86_XSTATE. Just include the whole note's
10534 contents literally. */
10535
10536 static bool
10537 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
10538 {
10539 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
10540 }
10541
10542 static bool
10543 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
10544 {
10545 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
10546 }
10547
10548 static bool
10549 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
10550 {
10551 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
10552 }
10553
10554 static bool
10555 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
10556 {
10557 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
10558 }
10559
10560 static bool
10561 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
10562 {
10563 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
10564 }
10565
10566 static bool
10567 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
10568 {
10569 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
10570 }
10571
10572 static bool
10573 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
10574 {
10575 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
10576 }
10577
10578 static bool
10579 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
10580 {
10581 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
10582 }
10583
10584 static bool
10585 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
10586 {
10587 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
10588 }
10589
10590 static bool
10591 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
10592 {
10593 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
10594 }
10595
10596 static bool
10597 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
10598 {
10599 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
10600 }
10601
10602 static bool
10603 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
10604 {
10605 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
10606 }
10607
10608 static bool
10609 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
10610 {
10611 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
10612 }
10613
10614 static bool
10615 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
10616 {
10617 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
10618 }
10619
10620 static bool
10621 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
10622 {
10623 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
10624 }
10625
10626 static bool
10627 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
10628 {
10629 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
10630 }
10631
10632 static bool
10633 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
10634 {
10635 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
10636 }
10637
10638 static bool
10639 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
10640 {
10641 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
10642 }
10643
10644 static bool
10645 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
10646 {
10647 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
10648 }
10649
10650 static bool
10651 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
10652 {
10653 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
10654 }
10655
10656 static bool
10657 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
10658 {
10659 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
10660 }
10661
10662 static bool
10663 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
10664 {
10665 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
10666 }
10667
10668 static bool
10669 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
10670 {
10671 return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
10672 }
10673
10674 static bool
10675 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
10676 {
10677 return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
10678 }
10679
10680 static bool
10681 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
10682 {
10683 return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
10684 }
10685
10686 static bool
10687 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
10688 {
10689 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
10690 }
10691
10692 static bool
10693 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
10694 {
10695 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
10696 }
10697
10698 static bool
10699 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
10700 {
10701 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
10702 }
10703
10704 static bool
10705 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
10706 {
10707 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
10708 }
10709
10710 static bool
10711 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
10712 {
10713 return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
10714 }
10715
10716 static bool
10717 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
10718 {
10719 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
10720 }
10721
10722 static bool
10723 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
10724 {
10725 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
10726 }
10727
10728 static bool
10729 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
10730 {
10731 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
10732 }
10733
10734 static bool
10735 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
10736 {
10737 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
10738 }
10739
10740 static bool
10741 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
10742 {
10743 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
10744 }
10745
10746 static bool
10747 elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note)
10748 {
10749 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-mte",
10750 note);
10751 }
10752
10753 static bool
10754 elfcore_grok_aarch_ssve (bfd *abfd, Elf_Internal_Note *note)
10755 {
10756 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-ssve", note);
10757 }
10758
10759 static bool
10760 elfcore_grok_aarch_za (bfd *abfd, Elf_Internal_Note *note)
10761 {
10762 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-za", note);
10763 }
10764
10765 /* Convert NOTE into a bfd_section called ".reg-aarch-zt". Return TRUE if
10766 successful, otherwise return FALSE. */
10767
10768 static bool
10769 elfcore_grok_aarch_zt (bfd *abfd, Elf_Internal_Note *note)
10770 {
10771 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-zt", note);
10772 }
10773
10774 static bool
10775 elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
10776 {
10777 return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
10778 }
10779
10780 /* Convert NOTE into a bfd_section called ".reg-riscv-csr". Return TRUE if
10781 successful otherwise, return FALSE. */
10782
10783 static bool
10784 elfcore_grok_riscv_csr (bfd *abfd, Elf_Internal_Note *note)
10785 {
10786 return elfcore_make_note_pseudosection (abfd, ".reg-riscv-csr", note);
10787 }
10788
10789 /* Convert NOTE into a bfd_section called ".gdb-tdesc". Return TRUE if
10790 successful otherwise, return FALSE. */
10791
10792 static bool
10793 elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
10794 {
10795 return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
10796 }
10797
10798 static bool
10799 elfcore_grok_loongarch_cpucfg (bfd *abfd, Elf_Internal_Note *note)
10800 {
10801 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-cpucfg", note);
10802 }
10803
10804 static bool
10805 elfcore_grok_loongarch_lbt (bfd *abfd, Elf_Internal_Note *note)
10806 {
10807 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lbt", note);
10808 }
10809
10810 static bool
10811 elfcore_grok_loongarch_lsx (bfd *abfd, Elf_Internal_Note *note)
10812 {
10813 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lsx", note);
10814 }
10815
10816 static bool
10817 elfcore_grok_loongarch_lasx (bfd *abfd, Elf_Internal_Note *note)
10818 {
10819 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lasx", note);
10820 }
10821
10822 #if defined (HAVE_PRPSINFO_T)
10823 typedef prpsinfo_t elfcore_psinfo_t;
10824 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
10825 typedef prpsinfo32_t elfcore_psinfo32_t;
10826 #endif
10827 #endif
10828
10829 #if defined (HAVE_PSINFO_T)
10830 typedef psinfo_t elfcore_psinfo_t;
10831 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
10832 typedef psinfo32_t elfcore_psinfo32_t;
10833 #endif
10834 #endif
10835
10836 /* return a malloc'ed copy of a string at START which is at
10837 most MAX bytes long, possibly without a terminating '\0'.
10838 the copy will always have a terminating '\0'. */
10839
10840 char *
10841 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
10842 {
10843 char *dups;
10844 char *end = (char *) memchr (start, '\0', max);
10845 size_t len;
10846
10847 if (end == NULL)
10848 len = max;
10849 else
10850 len = end - start;
10851
10852 dups = (char *) bfd_alloc (abfd, len + 1);
10853 if (dups == NULL)
10854 return NULL;
10855
10856 memcpy (dups, start, len);
10857 dups[len] = '\0';
10858
10859 return dups;
10860 }
10861
10862 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10863 static bool
10864 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
10865 {
10866 if (note->descsz == sizeof (elfcore_psinfo_t))
10867 {
10868 elfcore_psinfo_t psinfo;
10869
10870 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10871
10872 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
10873 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10874 #endif
10875 elf_tdata (abfd)->core->program
10876 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10877 sizeof (psinfo.pr_fname));
10878
10879 elf_tdata (abfd)->core->command
10880 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10881 sizeof (psinfo.pr_psargs));
10882 }
10883 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
10884 else if (note->descsz == sizeof (elfcore_psinfo32_t))
10885 {
10886 /* 64-bit host, 32-bit corefile */
10887 elfcore_psinfo32_t psinfo;
10888
10889 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10890
10891 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
10892 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10893 #endif
10894 elf_tdata (abfd)->core->program
10895 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10896 sizeof (psinfo.pr_fname));
10897
10898 elf_tdata (abfd)->core->command
10899 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10900 sizeof (psinfo.pr_psargs));
10901 }
10902 #endif
10903
10904 else
10905 {
10906 /* Fail - we don't know how to handle any other
10907 note size (ie. data object type). */
10908 return true;
10909 }
10910
10911 /* Note that for some reason, a spurious space is tacked
10912 onto the end of the args in some (at least one anyway)
10913 implementations, so strip it off if it exists. */
10914
10915 {
10916 char *command = elf_tdata (abfd)->core->command;
10917 int n = strlen (command);
10918
10919 if (0 < n && command[n - 1] == ' ')
10920 command[n - 1] = '\0';
10921 }
10922
10923 return true;
10924 }
10925 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
10926
10927 #if defined (HAVE_PSTATUS_T)
10928 static bool
10929 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
10930 {
10931 if (note->descsz == sizeof (pstatus_t)
10932 #if defined (HAVE_PXSTATUS_T)
10933 || note->descsz == sizeof (pxstatus_t)
10934 #endif
10935 )
10936 {
10937 pstatus_t pstat;
10938
10939 memcpy (&pstat, note->descdata, sizeof (pstat));
10940
10941 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10942 }
10943 #if defined (HAVE_PSTATUS32_T)
10944 else if (note->descsz == sizeof (pstatus32_t))
10945 {
10946 /* 64-bit host, 32-bit corefile */
10947 pstatus32_t pstat;
10948
10949 memcpy (&pstat, note->descdata, sizeof (pstat));
10950
10951 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10952 }
10953 #endif
10954 /* Could grab some more details from the "representative"
10955 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
10956 NT_LWPSTATUS note, presumably. */
10957
10958 return true;
10959 }
10960 #endif /* defined (HAVE_PSTATUS_T) */
10961
10962 #if defined (HAVE_LWPSTATUS_T)
10963 static bool
10964 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
10965 {
10966 lwpstatus_t lwpstat;
10967 char buf[100];
10968 char *name;
10969 size_t len;
10970 asection *sect;
10971
10972 if (note->descsz != sizeof (lwpstat)
10973 #if defined (HAVE_LWPXSTATUS_T)
10974 && note->descsz != sizeof (lwpxstatus_t)
10975 #endif
10976 )
10977 return true;
10978
10979 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
10980
10981 elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
10982 /* Do not overwrite the core signal if it has already been set by
10983 another thread. */
10984 if (elf_tdata (abfd)->core->signal == 0)
10985 elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
10986
10987 /* Make a ".reg/999" section. */
10988
10989 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
10990 len = strlen (buf) + 1;
10991 name = bfd_alloc (abfd, len);
10992 if (name == NULL)
10993 return false;
10994 memcpy (name, buf, len);
10995
10996 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10997 if (sect == NULL)
10998 return false;
10999
11000 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11001 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
11002 sect->filepos = note->descpos
11003 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
11004 #endif
11005
11006 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11007 sect->size = sizeof (lwpstat.pr_reg);
11008 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
11009 #endif
11010
11011 sect->alignment_power = 2;
11012
11013 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
11014 return false;
11015
11016 /* Make a ".reg2/999" section */
11017
11018 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
11019 len = strlen (buf) + 1;
11020 name = bfd_alloc (abfd, len);
11021 if (name == NULL)
11022 return false;
11023 memcpy (name, buf, len);
11024
11025 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11026 if (sect == NULL)
11027 return false;
11028
11029 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11030 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
11031 sect->filepos = note->descpos
11032 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
11033 #endif
11034
11035 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
11036 sect->size = sizeof (lwpstat.pr_fpreg);
11037 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
11038 #endif
11039
11040 sect->alignment_power = 2;
11041
11042 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
11043 }
11044 #endif /* defined (HAVE_LWPSTATUS_T) */
11045
11046 /* These constants, and the structure offsets used below, are defined by
11047 Cygwin's core_dump.h */
11048 #define NOTE_INFO_PROCESS 1
11049 #define NOTE_INFO_THREAD 2
11050 #define NOTE_INFO_MODULE 3
11051 #define NOTE_INFO_MODULE64 4
11052
11053 static bool
11054 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
11055 {
11056 char buf[30];
11057 char *name;
11058 size_t len;
11059 unsigned int name_size;
11060 asection *sect;
11061 unsigned int type;
11062 int is_active_thread;
11063 bfd_vma base_addr;
11064
11065 if (note->descsz < 4)
11066 return true;
11067
11068 if (! startswith (note->namedata, "win32"))
11069 return true;
11070
11071 type = bfd_get_32 (abfd, note->descdata);
11072
11073 struct
11074 {
11075 const char *type_name;
11076 unsigned long min_size;
11077 } size_check[] =
11078 {
11079 { "NOTE_INFO_PROCESS", 12 },
11080 { "NOTE_INFO_THREAD", 12 },
11081 { "NOTE_INFO_MODULE", 12 },
11082 { "NOTE_INFO_MODULE64", 16 },
11083 };
11084
11085 if (type == 0 || type > (sizeof(size_check)/sizeof(size_check[0])))
11086 return true;
11087
11088 if (note->descsz < size_check[type - 1].min_size)
11089 {
11090 _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes"
11091 " is too small"),
11092 abfd, size_check[type - 1].type_name, note->descsz);
11093 return true;
11094 }
11095
11096 switch (type)
11097 {
11098 case NOTE_INFO_PROCESS:
11099 /* FIXME: need to add ->core->command. */
11100 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
11101 elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
11102 break;
11103
11104 case NOTE_INFO_THREAD:
11105 /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
11106 structure. */
11107 /* thread_info.tid */
11108 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
11109
11110 len = strlen (buf) + 1;
11111 name = (char *) bfd_alloc (abfd, len);
11112 if (name == NULL)
11113 return false;
11114
11115 memcpy (name, buf, len);
11116
11117 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11118 if (sect == NULL)
11119 return false;
11120
11121 /* sizeof (thread_info.thread_context) */
11122 sect->size = note->descsz - 12;
11123 /* offsetof (thread_info.thread_context) */
11124 sect->filepos = note->descpos + 12;
11125 sect->alignment_power = 2;
11126
11127 /* thread_info.is_active_thread */
11128 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
11129
11130 if (is_active_thread)
11131 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
11132 return false;
11133 break;
11134
11135 case NOTE_INFO_MODULE:
11136 case NOTE_INFO_MODULE64:
11137 /* Make a ".module/xxxxxxxx" section. */
11138 if (type == NOTE_INFO_MODULE)
11139 {
11140 /* module_info.base_address */
11141 base_addr = bfd_get_32 (abfd, note->descdata + 4);
11142 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
11143 /* module_info.module_name_size */
11144 name_size = bfd_get_32 (abfd, note->descdata + 8);
11145 }
11146 else /* NOTE_INFO_MODULE64 */
11147 {
11148 /* module_info.base_address */
11149 base_addr = bfd_get_64 (abfd, note->descdata + 4);
11150 sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
11151 /* module_info.module_name_size */
11152 name_size = bfd_get_32 (abfd, note->descdata + 12);
11153 }
11154
11155 len = strlen (buf) + 1;
11156 name = (char *) bfd_alloc (abfd, len);
11157 if (name == NULL)
11158 return false;
11159
11160 memcpy (name, buf, len);
11161
11162 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11163
11164 if (sect == NULL)
11165 return false;
11166
11167 if (note->descsz < 12 + name_size)
11168 {
11169 _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu"
11170 " is too small to contain a name of size %u"),
11171 abfd, note->descsz, name_size);
11172 return true;
11173 }
11174
11175 sect->size = note->descsz;
11176 sect->filepos = note->descpos;
11177 sect->alignment_power = 2;
11178 break;
11179
11180 default:
11181 return true;
11182 }
11183
11184 return true;
11185 }
11186
11187 static bool
11188 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
11189 {
11190 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11191
11192 switch (note->type)
11193 {
11194 default:
11195 return true;
11196
11197 case NT_PRSTATUS:
11198 if (bed->elf_backend_grok_prstatus)
11199 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
11200 return true;
11201 #if defined (HAVE_PRSTATUS_T)
11202 return elfcore_grok_prstatus (abfd, note);
11203 #else
11204 return true;
11205 #endif
11206
11207 #if defined (HAVE_PSTATUS_T)
11208 case NT_PSTATUS:
11209 return elfcore_grok_pstatus (abfd, note);
11210 #endif
11211
11212 #if defined (HAVE_LWPSTATUS_T)
11213 case NT_LWPSTATUS:
11214 return elfcore_grok_lwpstatus (abfd, note);
11215 #endif
11216
11217 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
11218 return elfcore_grok_prfpreg (abfd, note);
11219
11220 case NT_WIN32PSTATUS:
11221 return elfcore_grok_win32pstatus (abfd, note);
11222
11223 case NT_PRXFPREG: /* Linux SSE extension */
11224 if (note->namesz == 6
11225 && strcmp (note->namedata, "LINUX") == 0)
11226 return elfcore_grok_prxfpreg (abfd, note);
11227 else
11228 return true;
11229
11230 case NT_X86_XSTATE: /* Linux XSAVE extension */
11231 if (note->namesz == 6
11232 && strcmp (note->namedata, "LINUX") == 0)
11233 return elfcore_grok_xstatereg (abfd, note);
11234 else
11235 return true;
11236
11237 case NT_PPC_VMX:
11238 if (note->namesz == 6
11239 && strcmp (note->namedata, "LINUX") == 0)
11240 return elfcore_grok_ppc_vmx (abfd, note);
11241 else
11242 return true;
11243
11244 case NT_PPC_VSX:
11245 if (note->namesz == 6
11246 && strcmp (note->namedata, "LINUX") == 0)
11247 return elfcore_grok_ppc_vsx (abfd, note);
11248 else
11249 return true;
11250
11251 case NT_PPC_TAR:
11252 if (note->namesz == 6
11253 && strcmp (note->namedata, "LINUX") == 0)
11254 return elfcore_grok_ppc_tar (abfd, note);
11255 else
11256 return true;
11257
11258 case NT_PPC_PPR:
11259 if (note->namesz == 6
11260 && strcmp (note->namedata, "LINUX") == 0)
11261 return elfcore_grok_ppc_ppr (abfd, note);
11262 else
11263 return true;
11264
11265 case NT_PPC_DSCR:
11266 if (note->namesz == 6
11267 && strcmp (note->namedata, "LINUX") == 0)
11268 return elfcore_grok_ppc_dscr (abfd, note);
11269 else
11270 return true;
11271
11272 case NT_PPC_EBB:
11273 if (note->namesz == 6
11274 && strcmp (note->namedata, "LINUX") == 0)
11275 return elfcore_grok_ppc_ebb (abfd, note);
11276 else
11277 return true;
11278
11279 case NT_PPC_PMU:
11280 if (note->namesz == 6
11281 && strcmp (note->namedata, "LINUX") == 0)
11282 return elfcore_grok_ppc_pmu (abfd, note);
11283 else
11284 return true;
11285
11286 case NT_PPC_TM_CGPR:
11287 if (note->namesz == 6
11288 && strcmp (note->namedata, "LINUX") == 0)
11289 return elfcore_grok_ppc_tm_cgpr (abfd, note);
11290 else
11291 return true;
11292
11293 case NT_PPC_TM_CFPR:
11294 if (note->namesz == 6
11295 && strcmp (note->namedata, "LINUX") == 0)
11296 return elfcore_grok_ppc_tm_cfpr (abfd, note);
11297 else
11298 return true;
11299
11300 case NT_PPC_TM_CVMX:
11301 if (note->namesz == 6
11302 && strcmp (note->namedata, "LINUX") == 0)
11303 return elfcore_grok_ppc_tm_cvmx (abfd, note);
11304 else
11305 return true;
11306
11307 case NT_PPC_TM_CVSX:
11308 if (note->namesz == 6
11309 && strcmp (note->namedata, "LINUX") == 0)
11310 return elfcore_grok_ppc_tm_cvsx (abfd, note);
11311 else
11312 return true;
11313
11314 case NT_PPC_TM_SPR:
11315 if (note->namesz == 6
11316 && strcmp (note->namedata, "LINUX") == 0)
11317 return elfcore_grok_ppc_tm_spr (abfd, note);
11318 else
11319 return true;
11320
11321 case NT_PPC_TM_CTAR:
11322 if (note->namesz == 6
11323 && strcmp (note->namedata, "LINUX") == 0)
11324 return elfcore_grok_ppc_tm_ctar (abfd, note);
11325 else
11326 return true;
11327
11328 case NT_PPC_TM_CPPR:
11329 if (note->namesz == 6
11330 && strcmp (note->namedata, "LINUX") == 0)
11331 return elfcore_grok_ppc_tm_cppr (abfd, note);
11332 else
11333 return true;
11334
11335 case NT_PPC_TM_CDSCR:
11336 if (note->namesz == 6
11337 && strcmp (note->namedata, "LINUX") == 0)
11338 return elfcore_grok_ppc_tm_cdscr (abfd, note);
11339 else
11340 return true;
11341
11342 case NT_S390_HIGH_GPRS:
11343 if (note->namesz == 6
11344 && strcmp (note->namedata, "LINUX") == 0)
11345 return elfcore_grok_s390_high_gprs (abfd, note);
11346 else
11347 return true;
11348
11349 case NT_S390_TIMER:
11350 if (note->namesz == 6
11351 && strcmp (note->namedata, "LINUX") == 0)
11352 return elfcore_grok_s390_timer (abfd, note);
11353 else
11354 return true;
11355
11356 case NT_S390_TODCMP:
11357 if (note->namesz == 6
11358 && strcmp (note->namedata, "LINUX") == 0)
11359 return elfcore_grok_s390_todcmp (abfd, note);
11360 else
11361 return true;
11362
11363 case NT_S390_TODPREG:
11364 if (note->namesz == 6
11365 && strcmp (note->namedata, "LINUX") == 0)
11366 return elfcore_grok_s390_todpreg (abfd, note);
11367 else
11368 return true;
11369
11370 case NT_S390_CTRS:
11371 if (note->namesz == 6
11372 && strcmp (note->namedata, "LINUX") == 0)
11373 return elfcore_grok_s390_ctrs (abfd, note);
11374 else
11375 return true;
11376
11377 case NT_S390_PREFIX:
11378 if (note->namesz == 6
11379 && strcmp (note->namedata, "LINUX") == 0)
11380 return elfcore_grok_s390_prefix (abfd, note);
11381 else
11382 return true;
11383
11384 case NT_S390_LAST_BREAK:
11385 if (note->namesz == 6
11386 && strcmp (note->namedata, "LINUX") == 0)
11387 return elfcore_grok_s390_last_break (abfd, note);
11388 else
11389 return true;
11390
11391 case NT_S390_SYSTEM_CALL:
11392 if (note->namesz == 6
11393 && strcmp (note->namedata, "LINUX") == 0)
11394 return elfcore_grok_s390_system_call (abfd, note);
11395 else
11396 return true;
11397
11398 case NT_S390_TDB:
11399 if (note->namesz == 6
11400 && strcmp (note->namedata, "LINUX") == 0)
11401 return elfcore_grok_s390_tdb (abfd, note);
11402 else
11403 return true;
11404
11405 case NT_S390_VXRS_LOW:
11406 if (note->namesz == 6
11407 && strcmp (note->namedata, "LINUX") == 0)
11408 return elfcore_grok_s390_vxrs_low (abfd, note);
11409 else
11410 return true;
11411
11412 case NT_S390_VXRS_HIGH:
11413 if (note->namesz == 6
11414 && strcmp (note->namedata, "LINUX") == 0)
11415 return elfcore_grok_s390_vxrs_high (abfd, note);
11416 else
11417 return true;
11418
11419 case NT_S390_GS_CB:
11420 if (note->namesz == 6
11421 && strcmp (note->namedata, "LINUX") == 0)
11422 return elfcore_grok_s390_gs_cb (abfd, note);
11423 else
11424 return true;
11425
11426 case NT_S390_GS_BC:
11427 if (note->namesz == 6
11428 && strcmp (note->namedata, "LINUX") == 0)
11429 return elfcore_grok_s390_gs_bc (abfd, note);
11430 else
11431 return true;
11432
11433 case NT_ARC_V2:
11434 if (note->namesz == 6
11435 && strcmp (note->namedata, "LINUX") == 0)
11436 return elfcore_grok_arc_v2 (abfd, note);
11437 else
11438 return true;
11439
11440 case NT_ARM_VFP:
11441 if (note->namesz == 6
11442 && strcmp (note->namedata, "LINUX") == 0)
11443 return elfcore_grok_arm_vfp (abfd, note);
11444 else
11445 return true;
11446
11447 case NT_ARM_TLS:
11448 if (note->namesz == 6
11449 && strcmp (note->namedata, "LINUX") == 0)
11450 return elfcore_grok_aarch_tls (abfd, note);
11451 else
11452 return true;
11453
11454 case NT_ARM_HW_BREAK:
11455 if (note->namesz == 6
11456 && strcmp (note->namedata, "LINUX") == 0)
11457 return elfcore_grok_aarch_hw_break (abfd, note);
11458 else
11459 return true;
11460
11461 case NT_ARM_HW_WATCH:
11462 if (note->namesz == 6
11463 && strcmp (note->namedata, "LINUX") == 0)
11464 return elfcore_grok_aarch_hw_watch (abfd, note);
11465 else
11466 return true;
11467
11468 case NT_ARM_SVE:
11469 if (note->namesz == 6
11470 && strcmp (note->namedata, "LINUX") == 0)
11471 return elfcore_grok_aarch_sve (abfd, note);
11472 else
11473 return true;
11474
11475 case NT_ARM_PAC_MASK:
11476 if (note->namesz == 6
11477 && strcmp (note->namedata, "LINUX") == 0)
11478 return elfcore_grok_aarch_pauth (abfd, note);
11479 else
11480 return true;
11481
11482 case NT_ARM_TAGGED_ADDR_CTRL:
11483 if (note->namesz == 6
11484 && strcmp (note->namedata, "LINUX") == 0)
11485 return elfcore_grok_aarch_mte (abfd, note);
11486 else
11487 return true;
11488
11489 case NT_ARM_SSVE:
11490 if (note->namesz == 6
11491 && strcmp (note->namedata, "LINUX") == 0)
11492 return elfcore_grok_aarch_ssve (abfd, note);
11493 else
11494 return true;
11495
11496 case NT_ARM_ZA:
11497 if (note->namesz == 6
11498 && strcmp (note->namedata, "LINUX") == 0)
11499 return elfcore_grok_aarch_za (abfd, note);
11500 else
11501 return true;
11502
11503 case NT_ARM_ZT:
11504 if (note->namesz == 6
11505 && strcmp (note->namedata, "LINUX") == 0)
11506 return elfcore_grok_aarch_zt (abfd, note);
11507 else
11508 return true;
11509
11510 case NT_GDB_TDESC:
11511 if (note->namesz == 4
11512 && strcmp (note->namedata, "GDB") == 0)
11513 return elfcore_grok_gdb_tdesc (abfd, note);
11514 else
11515 return true;
11516
11517 case NT_RISCV_CSR:
11518 if (note->namesz == 4
11519 && strcmp (note->namedata, "GDB") == 0)
11520 return elfcore_grok_riscv_csr (abfd, note);
11521 else
11522 return true;
11523
11524 case NT_LARCH_CPUCFG:
11525 if (note->namesz == 6
11526 && strcmp (note->namedata, "LINUX") == 0)
11527 return elfcore_grok_loongarch_cpucfg (abfd, note);
11528 else
11529 return true;
11530
11531 case NT_LARCH_LBT:
11532 if (note->namesz == 6
11533 && strcmp (note->namedata, "LINUX") == 0)
11534 return elfcore_grok_loongarch_lbt (abfd, note);
11535 else
11536 return true;
11537
11538 case NT_LARCH_LSX:
11539 if (note->namesz == 6
11540 && strcmp (note->namedata, "LINUX") == 0)
11541 return elfcore_grok_loongarch_lsx (abfd, note);
11542 else
11543 return true;
11544
11545 case NT_LARCH_LASX:
11546 if (note->namesz == 6
11547 && strcmp (note->namedata, "LINUX") == 0)
11548 return elfcore_grok_loongarch_lasx (abfd, note);
11549 else
11550 return true;
11551
11552 case NT_PRPSINFO:
11553 case NT_PSINFO:
11554 if (bed->elf_backend_grok_psinfo)
11555 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
11556 return true;
11557 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11558 return elfcore_grok_psinfo (abfd, note);
11559 #else
11560 return true;
11561 #endif
11562
11563 case NT_AUXV:
11564 return elfcore_make_auxv_note_section (abfd, note, 0);
11565
11566 case NT_FILE:
11567 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
11568 note);
11569
11570 case NT_SIGINFO:
11571 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
11572 note);
11573
11574 }
11575 }
11576
11577 static bool
11578 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
11579 {
11580 struct bfd_build_id* build_id;
11581
11582 if (note->descsz == 0)
11583 return false;
11584
11585 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
11586 if (build_id == NULL)
11587 return false;
11588
11589 build_id->size = note->descsz;
11590 memcpy (build_id->data, note->descdata, note->descsz);
11591 abfd->build_id = build_id;
11592
11593 return true;
11594 }
11595
11596 static bool
11597 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
11598 {
11599 switch (note->type)
11600 {
11601 default:
11602 return true;
11603
11604 case NT_GNU_PROPERTY_TYPE_0:
11605 return _bfd_elf_parse_gnu_properties (abfd, note);
11606
11607 case NT_GNU_BUILD_ID:
11608 return elfobj_grok_gnu_build_id (abfd, note);
11609 }
11610 }
11611
11612 static bool
11613 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
11614 {
11615 struct sdt_note *cur =
11616 (struct sdt_note *) bfd_alloc (abfd,
11617 sizeof (struct sdt_note) + note->descsz);
11618
11619 cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
11620 cur->size = (bfd_size_type) note->descsz;
11621 memcpy (cur->data, note->descdata, note->descsz);
11622
11623 elf_tdata (abfd)->sdt_note_head = cur;
11624
11625 return true;
11626 }
11627
11628 static bool
11629 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
11630 {
11631 switch (note->type)
11632 {
11633 case NT_STAPSDT:
11634 return elfobj_grok_stapsdt_note_1 (abfd, note);
11635
11636 default:
11637 return true;
11638 }
11639 }
11640
11641 static bool
11642 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
11643 {
11644 size_t offset;
11645
11646 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
11647 {
11648 case ELFCLASS32:
11649 if (note->descsz < 108)
11650 return false;
11651 break;
11652
11653 case ELFCLASS64:
11654 if (note->descsz < 120)
11655 return false;
11656 break;
11657
11658 default:
11659 return false;
11660 }
11661
11662 /* Check for version 1 in pr_version. */
11663 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
11664 return false;
11665
11666 offset = 4;
11667
11668 /* Skip over pr_psinfosz. */
11669 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
11670 offset += 4;
11671 else
11672 {
11673 offset += 4; /* Padding before pr_psinfosz. */
11674 offset += 8;
11675 }
11676
11677 /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
11678 elf_tdata (abfd)->core->program
11679 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
11680 offset += 17;
11681
11682 /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
11683 elf_tdata (abfd)->core->command
11684 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
11685 offset += 81;
11686
11687 /* Padding before pr_pid. */
11688 offset += 2;
11689
11690 /* The pr_pid field was added in version "1a". */
11691 if (note->descsz < offset + 4)
11692 return true;
11693
11694 elf_tdata (abfd)->core->pid
11695 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11696
11697 return true;
11698 }
11699
11700 static bool
11701 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
11702 {
11703 size_t offset;
11704 size_t size;
11705 size_t min_size;
11706
11707 /* Compute offset of pr_getregsz, skipping over pr_statussz.
11708 Also compute minimum size of this note. */
11709 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
11710 {
11711 case ELFCLASS32:
11712 offset = 4 + 4;
11713 min_size = offset + (4 * 2) + 4 + 4 + 4;
11714 break;
11715
11716 case ELFCLASS64:
11717 offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */
11718 min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
11719 break;
11720
11721 default:
11722 return false;
11723 }
11724
11725 if (note->descsz < min_size)
11726 return false;
11727
11728 /* Check for version 1 in pr_version. */
11729 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
11730 return false;
11731
11732 /* Extract size of pr_reg from pr_gregsetsz. */
11733 /* Skip over pr_gregsetsz and pr_fpregsetsz. */
11734 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
11735 {
11736 size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11737 offset += 4 * 2;
11738 }
11739 else
11740 {
11741 size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
11742 offset += 8 * 2;
11743 }
11744
11745 /* Skip over pr_osreldate. */
11746 offset += 4;
11747
11748 /* Read signal from pr_cursig. */
11749 if (elf_tdata (abfd)->core->signal == 0)
11750 elf_tdata (abfd)->core->signal
11751 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11752 offset += 4;
11753
11754 /* Read TID from pr_pid. */
11755 elf_tdata (abfd)->core->lwpid
11756 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11757 offset += 4;
11758
11759 /* Padding before pr_reg. */
11760 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
11761 offset += 4;
11762
11763 /* Make sure that there is enough data remaining in the note. */
11764 if ((note->descsz - offset) < size)
11765 return false;
11766
11767 /* Make a ".reg/999" section and a ".reg" section. */
11768 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
11769 size, note->descpos + offset);
11770 }
11771
11772 static bool
11773 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
11774 {
11775 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11776
11777 switch (note->type)
11778 {
11779 case NT_PRSTATUS:
11780 if (bed->elf_backend_grok_freebsd_prstatus)
11781 if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
11782 return true;
11783 return elfcore_grok_freebsd_prstatus (abfd, note);
11784
11785 case NT_FPREGSET:
11786 return elfcore_grok_prfpreg (abfd, note);
11787
11788 case NT_PRPSINFO:
11789 return elfcore_grok_freebsd_psinfo (abfd, note);
11790
11791 case NT_FREEBSD_THRMISC:
11792 return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
11793
11794 case NT_FREEBSD_PROCSTAT_PROC:
11795 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
11796 note);
11797
11798 case NT_FREEBSD_PROCSTAT_FILES:
11799 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
11800 note);
11801
11802 case NT_FREEBSD_PROCSTAT_VMMAP:
11803 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
11804 note);
11805
11806 case NT_FREEBSD_PROCSTAT_AUXV:
11807 return elfcore_make_auxv_note_section (abfd, note, 4);
11808
11809 case NT_FREEBSD_X86_SEGBASES:
11810 return elfcore_make_note_pseudosection (abfd, ".reg-x86-segbases", note);
11811
11812 case NT_X86_XSTATE:
11813 return elfcore_grok_xstatereg (abfd, note);
11814
11815 case NT_FREEBSD_PTLWPINFO:
11816 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
11817 note);
11818
11819 case NT_ARM_TLS:
11820 return elfcore_grok_aarch_tls (abfd, note);
11821
11822 case NT_ARM_VFP:
11823 return elfcore_grok_arm_vfp (abfd, note);
11824
11825 default:
11826 return true;
11827 }
11828 }
11829
11830 static bool
11831 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
11832 {
11833 char *cp;
11834
11835 cp = strchr (note->namedata, '@');
11836 if (cp != NULL)
11837 {
11838 *lwpidp = atoi(cp + 1);
11839 return true;
11840 }
11841 return false;
11842 }
11843
11844 static bool
11845 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11846 {
11847 if (note->descsz <= 0x7c + 31)
11848 return false;
11849
11850 /* Signal number at offset 0x08. */
11851 elf_tdata (abfd)->core->signal
11852 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11853
11854 /* Process ID at offset 0x50. */
11855 elf_tdata (abfd)->core->pid
11856 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
11857
11858 /* Command name at 0x7c (max 32 bytes, including nul). */
11859 elf_tdata (abfd)->core->command
11860 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
11861
11862 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
11863 note);
11864 }
11865
11866 static bool
11867 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
11868 {
11869 int lwp;
11870
11871 if (elfcore_netbsd_get_lwpid (note, &lwp))
11872 elf_tdata (abfd)->core->lwpid = lwp;
11873
11874 switch (note->type)
11875 {
11876 case NT_NETBSDCORE_PROCINFO:
11877 /* NetBSD-specific core "procinfo". Note that we expect to
11878 find this note before any of the others, which is fine,
11879 since the kernel writes this note out first when it
11880 creates a core file. */
11881 return elfcore_grok_netbsd_procinfo (abfd, note);
11882 case NT_NETBSDCORE_AUXV:
11883 /* NetBSD-specific Elf Auxiliary Vector data. */
11884 return elfcore_make_auxv_note_section (abfd, note, 4);
11885 case NT_NETBSDCORE_LWPSTATUS:
11886 return elfcore_make_note_pseudosection (abfd,
11887 ".note.netbsdcore.lwpstatus",
11888 note);
11889 default:
11890 break;
11891 }
11892
11893 /* As of March 2020 there are no other machine-independent notes
11894 defined for NetBSD core files. If the note type is less
11895 than the start of the machine-dependent note types, we don't
11896 understand it. */
11897
11898 if (note->type < NT_NETBSDCORE_FIRSTMACH)
11899 return true;
11900
11901
11902 switch (bfd_get_arch (abfd))
11903 {
11904 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
11905 PT_GETFPREGS == mach+2. */
11906
11907 case bfd_arch_aarch64:
11908 case bfd_arch_alpha:
11909 case bfd_arch_sparc:
11910 switch (note->type)
11911 {
11912 case NT_NETBSDCORE_FIRSTMACH+0:
11913 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11914
11915 case NT_NETBSDCORE_FIRSTMACH+2:
11916 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11917
11918 default:
11919 return true;
11920 }
11921
11922 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
11923 There's also old PT___GETREGS40 == mach + 1 for old reg
11924 structure which lacks GBR. */
11925
11926 case bfd_arch_sh:
11927 switch (note->type)
11928 {
11929 case NT_NETBSDCORE_FIRSTMACH+3:
11930 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11931
11932 case NT_NETBSDCORE_FIRSTMACH+5:
11933 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11934
11935 default:
11936 return true;
11937 }
11938
11939 /* On all other arch's, PT_GETREGS == mach+1 and
11940 PT_GETFPREGS == mach+3. */
11941
11942 default:
11943 switch (note->type)
11944 {
11945 case NT_NETBSDCORE_FIRSTMACH+1:
11946 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11947
11948 case NT_NETBSDCORE_FIRSTMACH+3:
11949 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11950
11951 default:
11952 return true;
11953 }
11954 }
11955 /* NOTREACHED */
11956 }
11957
11958 static bool
11959 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11960 {
11961 if (note->descsz <= 0x48 + 31)
11962 return false;
11963
11964 /* Signal number at offset 0x08. */
11965 elf_tdata (abfd)->core->signal
11966 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11967
11968 /* Process ID at offset 0x20. */
11969 elf_tdata (abfd)->core->pid
11970 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
11971
11972 /* Command name at 0x48 (max 32 bytes, including nul). */
11973 elf_tdata (abfd)->core->command
11974 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
11975
11976 return true;
11977 }
11978
11979 /* Processes Solaris's process status note.
11980 sig_off ~ offsetof(prstatus_t, pr_cursig)
11981 pid_off ~ offsetof(prstatus_t, pr_pid)
11982 lwpid_off ~ offsetof(prstatus_t, pr_who)
11983 gregset_size ~ sizeof(gregset_t)
11984 gregset_offset ~ offsetof(prstatus_t, pr_reg) */
11985
11986 static bool
11987 elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
11988 int pid_off, int lwpid_off, size_t gregset_size,
11989 size_t gregset_offset)
11990 {
11991 asection *sect = NULL;
11992 elf_tdata (abfd)->core->signal
11993 = bfd_get_16 (abfd, note->descdata + sig_off);
11994 elf_tdata (abfd)->core->pid
11995 = bfd_get_32 (abfd, note->descdata + pid_off);
11996 elf_tdata (abfd)->core->lwpid
11997 = bfd_get_32 (abfd, note->descdata + lwpid_off);
11998
11999 sect = bfd_get_section_by_name (abfd, ".reg");
12000 if (sect != NULL)
12001 sect->size = gregset_size;
12002
12003 return _bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
12004 note->descpos + gregset_offset);
12005 }
12006
12007 /* Gets program and arguments from a core.
12008 prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
12009 comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs) */
12010
12011 static bool
12012 elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
12013 int prog_off, int comm_off)
12014 {
12015 elf_tdata (abfd)->core->program
12016 = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
12017 elf_tdata (abfd)->core->command
12018 = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
12019
12020 return true;
12021 }
12022
12023 /* Processes Solaris's LWP status note.
12024 gregset_size ~ sizeof(gregset_t)
12025 gregset_off ~ offsetof(lwpstatus_t, pr_reg)
12026 fpregset_size ~ sizeof(fpregset_t)
12027 fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg) */
12028
12029 static bool
12030 elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
12031 size_t gregset_size, int gregset_off,
12032 size_t fpregset_size, int fpregset_off)
12033 {
12034 asection *sect = NULL;
12035 char reg2_section_name[16] = { 0 };
12036
12037 (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",
12038 elf_tdata (abfd)->core->lwpid);
12039
12040 /* offsetof(lwpstatus_t, pr_lwpid) */
12041 elf_tdata (abfd)->core->lwpid
12042 = bfd_get_32 (abfd, note->descdata + 4);
12043 /* offsetof(lwpstatus_t, pr_cursig) */
12044 elf_tdata (abfd)->core->signal
12045 = bfd_get_16 (abfd, note->descdata + 12);
12046
12047 sect = bfd_get_section_by_name (abfd, ".reg");
12048 if (sect != NULL)
12049 sect->size = gregset_size;
12050 else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
12051 note->descpos + gregset_off))
12052 return false;
12053
12054 sect = bfd_get_section_by_name (abfd, reg2_section_name);
12055 if (sect != NULL)
12056 {
12057 sect->size = fpregset_size;
12058 sect->filepos = note->descpos + fpregset_off;
12059 sect->alignment_power = 2;
12060 }
12061 else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg2", fpregset_size,
12062 note->descpos + fpregset_off))
12063 return false;
12064
12065 return true;
12066 }
12067
12068 static bool
12069 elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
12070 {
12071 if (note == NULL)
12072 return false;
12073
12074 /* core files are identified as 32- or 64-bit, SPARC or x86,
12075 by the size of the descsz which matches the sizeof()
12076 the type appropriate for that note type (e.g., prstatus_t for
12077 SOLARIS_NT_PRSTATUS) for the corresponding architecture
12078 on Solaris. The core file bitness may differ from the bitness of
12079 gdb itself, so fixed values are used instead of sizeof().
12080 Appropriate fixed offsets are also used to obtain data from
12081 the note. */
12082
12083 switch ((int) note->type)
12084 {
12085 case SOLARIS_NT_PRSTATUS:
12086 switch (note->descsz)
12087 {
12088 case 508: /* sizeof(prstatus_t) SPARC 32-bit */
12089 return elfcore_grok_solaris_prstatus(abfd, note,
12090 136, 216, 308, 152, 356);
12091 case 904: /* sizeof(prstatus_t) SPARC 64-bit */
12092 return elfcore_grok_solaris_prstatus(abfd, note,
12093 264, 360, 520, 304, 600);
12094 case 432: /* sizeof(prstatus_t) Intel 32-bit */
12095 return elfcore_grok_solaris_prstatus(abfd, note,
12096 136, 216, 308, 76, 356);
12097 case 824: /* sizeof(prstatus_t) Intel 64-bit */
12098 return elfcore_grok_solaris_prstatus(abfd, note,
12099 264, 360, 520, 224, 600);
12100 default:
12101 return true;
12102 }
12103
12104 case SOLARIS_NT_PSINFO:
12105 case SOLARIS_NT_PRPSINFO:
12106 switch (note->descsz)
12107 {
12108 case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
12109 return elfcore_grok_solaris_info(abfd, note, 84, 100);
12110 case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
12111 return elfcore_grok_solaris_info(abfd, note, 120, 136);
12112 case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
12113 return elfcore_grok_solaris_info(abfd, note, 88, 104);
12114 case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
12115 return elfcore_grok_solaris_info(abfd, note, 136, 152);
12116 default:
12117 return true;
12118 }
12119
12120 case SOLARIS_NT_LWPSTATUS:
12121 switch (note->descsz)
12122 {
12123 case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
12124 return elfcore_grok_solaris_lwpstatus(abfd, note,
12125 152, 344, 400, 496);
12126 case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
12127 return elfcore_grok_solaris_lwpstatus(abfd, note,
12128 304, 544, 544, 848);
12129 case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
12130 return elfcore_grok_solaris_lwpstatus(abfd, note,
12131 76, 344, 380, 420);
12132 case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
12133 return elfcore_grok_solaris_lwpstatus(abfd, note,
12134 224, 544, 528, 768);
12135 default:
12136 return true;
12137 }
12138
12139 case SOLARIS_NT_LWPSINFO:
12140 /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
12141 if (note->descsz == 128 || note->descsz == 152)
12142 elf_tdata (abfd)->core->lwpid =
12143 bfd_get_32 (abfd, note->descdata + 4);
12144 break;
12145
12146 default:
12147 break;
12148 }
12149
12150 return true;
12151 }
12152
12153 /* For name starting with "CORE" this may be either a Solaris
12154 core file or a gdb-generated core file. Do Solaris-specific
12155 processing on selected note types first with
12156 elfcore_grok_solaris_note(), then process the note
12157 in elfcore_grok_note(). */
12158
12159 static bool
12160 elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
12161 {
12162 if (!elfcore_grok_solaris_note_impl (abfd, note))
12163 return false;
12164
12165 return elfcore_grok_note (abfd, note);
12166 }
12167
12168 static bool
12169 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
12170 {
12171 if (note->type == NT_OPENBSD_PROCINFO)
12172 return elfcore_grok_openbsd_procinfo (abfd, note);
12173
12174 if (note->type == NT_OPENBSD_REGS)
12175 return elfcore_make_note_pseudosection (abfd, ".reg", note);
12176
12177 if (note->type == NT_OPENBSD_FPREGS)
12178 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
12179
12180 if (note->type == NT_OPENBSD_XFPREGS)
12181 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
12182
12183 if (note->type == NT_OPENBSD_AUXV)
12184 return elfcore_make_auxv_note_section (abfd, note, 0);
12185
12186 if (note->type == NT_OPENBSD_WCOOKIE)
12187 {
12188 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
12189 SEC_HAS_CONTENTS);
12190
12191 if (sect == NULL)
12192 return false;
12193 sect->size = note->descsz;
12194 sect->filepos = note->descpos;
12195 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
12196
12197 return true;
12198 }
12199
12200 return true;
12201 }
12202
12203 static bool
12204 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
12205 {
12206 void *ddata = note->descdata;
12207 char buf[100];
12208 char *name;
12209 asection *sect;
12210 short sig;
12211 unsigned flags;
12212
12213 if (note->descsz < 16)
12214 return false;
12215
12216 /* nto_procfs_status 'pid' field is at offset 0. */
12217 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
12218
12219 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
12220 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
12221
12222 /* nto_procfs_status 'flags' field is at offset 8. */
12223 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
12224
12225 /* nto_procfs_status 'what' field is at offset 14. */
12226 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
12227 {
12228 elf_tdata (abfd)->core->signal = sig;
12229 elf_tdata (abfd)->core->lwpid = *tid;
12230 }
12231
12232 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
12233 do not come from signals so we make sure we set the current
12234 thread just in case. */
12235 if (flags & 0x00000080)
12236 elf_tdata (abfd)->core->lwpid = *tid;
12237
12238 /* Make a ".qnx_core_status/%d" section. */
12239 sprintf (buf, ".qnx_core_status/%ld", *tid);
12240
12241 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
12242 if (name == NULL)
12243 return false;
12244 strcpy (name, buf);
12245
12246 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
12247 if (sect == NULL)
12248 return false;
12249
12250 sect->size = note->descsz;
12251 sect->filepos = note->descpos;
12252 sect->alignment_power = 2;
12253
12254 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
12255 }
12256
12257 static bool
12258 elfcore_grok_nto_regs (bfd *abfd,
12259 Elf_Internal_Note *note,
12260 long tid,
12261 char *base)
12262 {
12263 char buf[100];
12264 char *name;
12265 asection *sect;
12266
12267 /* Make a "(base)/%d" section. */
12268 sprintf (buf, "%s/%ld", base, tid);
12269
12270 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
12271 if (name == NULL)
12272 return false;
12273 strcpy (name, buf);
12274
12275 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
12276 if (sect == NULL)
12277 return false;
12278
12279 sect->size = note->descsz;
12280 sect->filepos = note->descpos;
12281 sect->alignment_power = 2;
12282
12283 /* This is the current thread. */
12284 if (elf_tdata (abfd)->core->lwpid == tid)
12285 return elfcore_maybe_make_sect (abfd, base, sect);
12286
12287 return true;
12288 }
12289
12290 static bool
12291 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
12292 {
12293 /* Every GREG section has a STATUS section before it. Store the
12294 tid from the previous call to pass down to the next gregs
12295 function. */
12296 static long tid = 1;
12297
12298 switch (note->type)
12299 {
12300 case QNT_CORE_INFO:
12301 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
12302 case QNT_CORE_STATUS:
12303 return elfcore_grok_nto_status (abfd, note, &tid);
12304 case QNT_CORE_GREG:
12305 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
12306 case QNT_CORE_FPREG:
12307 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
12308 default:
12309 return true;
12310 }
12311 }
12312
12313 static bool
12314 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
12315 {
12316 char *name;
12317 asection *sect;
12318 size_t len;
12319
12320 /* Use note name as section name. */
12321 len = note->namesz;
12322 name = (char *) bfd_alloc (abfd, len);
12323 if (name == NULL)
12324 return false;
12325 memcpy (name, note->namedata, len);
12326 name[len - 1] = '\0';
12327
12328 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
12329 if (sect == NULL)
12330 return false;
12331
12332 sect->size = note->descsz;
12333 sect->filepos = note->descpos;
12334 sect->alignment_power = 1;
12335
12336 return true;
12337 }
12338
12339 /* Function: elfcore_write_note
12340
12341 Inputs:
12342 buffer to hold note, and current size of buffer
12343 name of note
12344 type of note
12345 data for note
12346 size of data for note
12347
12348 Writes note to end of buffer. ELF64 notes are written exactly as
12349 for ELF32, despite the current (as of 2006) ELF gabi specifying
12350 that they ought to have 8-byte namesz and descsz field, and have
12351 8-byte alignment. Other writers, eg. Linux kernel, do the same.
12352
12353 Return:
12354 Pointer to realloc'd buffer, *BUFSIZ updated. */
12355
12356 char *
12357 elfcore_write_note (bfd *abfd,
12358 char *buf,
12359 int *bufsiz,
12360 const char *name,
12361 int type,
12362 const void *input,
12363 int size)
12364 {
12365 Elf_External_Note *xnp;
12366 size_t namesz;
12367 size_t newspace;
12368 char *dest;
12369
12370 namesz = 0;
12371 if (name != NULL)
12372 namesz = strlen (name) + 1;
12373
12374 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
12375
12376 buf = (char *) realloc (buf, *bufsiz + newspace);
12377 if (buf == NULL)
12378 return buf;
12379 dest = buf + *bufsiz;
12380 *bufsiz += newspace;
12381 xnp = (Elf_External_Note *) dest;
12382 H_PUT_32 (abfd, namesz, xnp->namesz);
12383 H_PUT_32 (abfd, size, xnp->descsz);
12384 H_PUT_32 (abfd, type, xnp->type);
12385 dest = xnp->name;
12386 if (name != NULL)
12387 {
12388 memcpy (dest, name, namesz);
12389 dest += namesz;
12390 while (namesz & 3)
12391 {
12392 *dest++ = '\0';
12393 ++namesz;
12394 }
12395 }
12396 memcpy (dest, input, size);
12397 dest += size;
12398 while (size & 3)
12399 {
12400 *dest++ = '\0';
12401 ++size;
12402 }
12403 return buf;
12404 }
12405
12406 /* gcc-8 warns (*) on all the strncpy calls in this function about
12407 possible string truncation. The "truncation" is not a bug. We
12408 have an external representation of structs with fields that are not
12409 necessarily NULL terminated and corresponding internal
12410 representation fields that are one larger so that they can always
12411 be NULL terminated.
12412 gcc versions between 4.2 and 4.6 do not allow pragma control of
12413 diagnostics inside functions, giving a hard error if you try to use
12414 the finer control available with later versions.
12415 gcc prior to 4.2 warns about diagnostic push and pop.
12416 gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
12417 unless you also add #pragma GCC diagnostic ignored "-Wpragma".
12418 (*) Depending on your system header files! */
12419 #if GCC_VERSION >= 8000
12420 # pragma GCC diagnostic push
12421 # pragma GCC diagnostic ignored "-Wstringop-truncation"
12422 #endif
12423 char *
12424 elfcore_write_prpsinfo (bfd *abfd,
12425 char *buf,
12426 int *bufsiz,
12427 const char *fname,
12428 const char *psargs)
12429 {
12430 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12431
12432 if (bed->elf_backend_write_core_note != NULL)
12433 {
12434 char *ret;
12435 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
12436 NT_PRPSINFO, fname, psargs);
12437 if (ret != NULL)
12438 return ret;
12439 }
12440
12441 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
12442 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
12443 if (bed->s->elfclass == ELFCLASS32)
12444 {
12445 # if defined (HAVE_PSINFO32_T)
12446 psinfo32_t data;
12447 int note_type = NT_PSINFO;
12448 # else
12449 prpsinfo32_t data;
12450 int note_type = NT_PRPSINFO;
12451 # endif
12452
12453 memset (&data, 0, sizeof (data));
12454 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
12455 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
12456 return elfcore_write_note (abfd, buf, bufsiz,
12457 "CORE", note_type, &data, sizeof (data));
12458 }
12459 else
12460 # endif
12461 {
12462 # if defined (HAVE_PSINFO_T)
12463 psinfo_t data;
12464 int note_type = NT_PSINFO;
12465 # else
12466 prpsinfo_t data;
12467 int note_type = NT_PRPSINFO;
12468 # endif
12469
12470 memset (&data, 0, sizeof (data));
12471 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
12472 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
12473 return elfcore_write_note (abfd, buf, bufsiz,
12474 "CORE", note_type, &data, sizeof (data));
12475 }
12476 #endif /* PSINFO_T or PRPSINFO_T */
12477
12478 free (buf);
12479 return NULL;
12480 }
12481 #if GCC_VERSION >= 8000
12482 # pragma GCC diagnostic pop
12483 #endif
12484
12485 char *
12486 elfcore_write_linux_prpsinfo32
12487 (bfd *abfd, char *buf, int *bufsiz,
12488 const struct elf_internal_linux_prpsinfo *prpsinfo)
12489 {
12490 if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
12491 {
12492 struct elf_external_linux_prpsinfo32_ugid16 data;
12493
12494 swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
12495 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
12496 &data, sizeof (data));
12497 }
12498 else
12499 {
12500 struct elf_external_linux_prpsinfo32_ugid32 data;
12501
12502 swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
12503 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
12504 &data, sizeof (data));
12505 }
12506 }
12507
12508 char *
12509 elfcore_write_linux_prpsinfo64
12510 (bfd *abfd, char *buf, int *bufsiz,
12511 const struct elf_internal_linux_prpsinfo *prpsinfo)
12512 {
12513 if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
12514 {
12515 struct elf_external_linux_prpsinfo64_ugid16 data;
12516
12517 swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
12518 return elfcore_write_note (abfd, buf, bufsiz,
12519 "CORE", NT_PRPSINFO, &data, sizeof (data));
12520 }
12521 else
12522 {
12523 struct elf_external_linux_prpsinfo64_ugid32 data;
12524
12525 swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
12526 return elfcore_write_note (abfd, buf, bufsiz,
12527 "CORE", NT_PRPSINFO, &data, sizeof (data));
12528 }
12529 }
12530
12531 char *
12532 elfcore_write_prstatus (bfd *abfd,
12533 char *buf,
12534 int *bufsiz,
12535 long pid,
12536 int cursig,
12537 const void *gregs)
12538 {
12539 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12540
12541 if (bed->elf_backend_write_core_note != NULL)
12542 {
12543 char *ret;
12544 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
12545 NT_PRSTATUS,
12546 pid, cursig, gregs);
12547 if (ret != NULL)
12548 return ret;
12549 }
12550
12551 #if defined (HAVE_PRSTATUS_T)
12552 #if defined (HAVE_PRSTATUS32_T)
12553 if (bed->s->elfclass == ELFCLASS32)
12554 {
12555 prstatus32_t prstat;
12556
12557 memset (&prstat, 0, sizeof (prstat));
12558 prstat.pr_pid = pid;
12559 prstat.pr_cursig = cursig;
12560 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
12561 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
12562 NT_PRSTATUS, &prstat, sizeof (prstat));
12563 }
12564 else
12565 #endif
12566 {
12567 prstatus_t prstat;
12568
12569 memset (&prstat, 0, sizeof (prstat));
12570 prstat.pr_pid = pid;
12571 prstat.pr_cursig = cursig;
12572 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
12573 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
12574 NT_PRSTATUS, &prstat, sizeof (prstat));
12575 }
12576 #endif /* HAVE_PRSTATUS_T */
12577
12578 free (buf);
12579 return NULL;
12580 }
12581
12582 #if defined (HAVE_LWPSTATUS_T)
12583 char *
12584 elfcore_write_lwpstatus (bfd *abfd,
12585 char *buf,
12586 int *bufsiz,
12587 long pid,
12588 int cursig,
12589 const void *gregs)
12590 {
12591 lwpstatus_t lwpstat;
12592 const char *note_name = "CORE";
12593
12594 memset (&lwpstat, 0, sizeof (lwpstat));
12595 lwpstat.pr_lwpid = pid >> 16;
12596 lwpstat.pr_cursig = cursig;
12597 #if defined (HAVE_LWPSTATUS_T_PR_REG)
12598 memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
12599 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
12600 #if !defined(gregs)
12601 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
12602 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
12603 #else
12604 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
12605 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
12606 #endif
12607 #endif
12608 return elfcore_write_note (abfd, buf, bufsiz, note_name,
12609 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
12610 }
12611 #endif /* HAVE_LWPSTATUS_T */
12612
12613 #if defined (HAVE_PSTATUS_T)
12614 char *
12615 elfcore_write_pstatus (bfd *abfd,
12616 char *buf,
12617 int *bufsiz,
12618 long pid,
12619 int cursig ATTRIBUTE_UNUSED,
12620 const void *gregs ATTRIBUTE_UNUSED)
12621 {
12622 const char *note_name = "CORE";
12623 #if defined (HAVE_PSTATUS32_T)
12624 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12625
12626 if (bed->s->elfclass == ELFCLASS32)
12627 {
12628 pstatus32_t pstat;
12629
12630 memset (&pstat, 0, sizeof (pstat));
12631 pstat.pr_pid = pid & 0xffff;
12632 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
12633 NT_PSTATUS, &pstat, sizeof (pstat));
12634 return buf;
12635 }
12636 else
12637 #endif
12638 {
12639 pstatus_t pstat;
12640
12641 memset (&pstat, 0, sizeof (pstat));
12642 pstat.pr_pid = pid & 0xffff;
12643 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
12644 NT_PSTATUS, &pstat, sizeof (pstat));
12645 return buf;
12646 }
12647 }
12648 #endif /* HAVE_PSTATUS_T */
12649
12650 char *
12651 elfcore_write_prfpreg (bfd *abfd,
12652 char *buf,
12653 int *bufsiz,
12654 const void *fpregs,
12655 int size)
12656 {
12657 const char *note_name = "CORE";
12658 return elfcore_write_note (abfd, buf, bufsiz,
12659 note_name, NT_FPREGSET, fpregs, size);
12660 }
12661
12662 char *
12663 elfcore_write_prxfpreg (bfd *abfd,
12664 char *buf,
12665 int *bufsiz,
12666 const void *xfpregs,
12667 int size)
12668 {
12669 char *note_name = "LINUX";
12670 return elfcore_write_note (abfd, buf, bufsiz,
12671 note_name, NT_PRXFPREG, xfpregs, size);
12672 }
12673
12674 char *
12675 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
12676 const void *xfpregs, int size)
12677 {
12678 char *note_name;
12679 if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
12680 note_name = "FreeBSD";
12681 else
12682 note_name = "LINUX";
12683 return elfcore_write_note (abfd, buf, bufsiz,
12684 note_name, NT_X86_XSTATE, xfpregs, size);
12685 }
12686
12687 char *
12688 elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
12689 const void *regs, int size)
12690 {
12691 char *note_name = "FreeBSD";
12692 return elfcore_write_note (abfd, buf, bufsiz,
12693 note_name, NT_FREEBSD_X86_SEGBASES, regs, size);
12694 }
12695
12696 char *
12697 elfcore_write_ppc_vmx (bfd *abfd,
12698 char *buf,
12699 int *bufsiz,
12700 const void *ppc_vmx,
12701 int size)
12702 {
12703 char *note_name = "LINUX";
12704 return elfcore_write_note (abfd, buf, bufsiz,
12705 note_name, NT_PPC_VMX, ppc_vmx, size);
12706 }
12707
12708 char *
12709 elfcore_write_ppc_vsx (bfd *abfd,
12710 char *buf,
12711 int *bufsiz,
12712 const void *ppc_vsx,
12713 int size)
12714 {
12715 char *note_name = "LINUX";
12716 return elfcore_write_note (abfd, buf, bufsiz,
12717 note_name, NT_PPC_VSX, ppc_vsx, size);
12718 }
12719
12720 char *
12721 elfcore_write_ppc_tar (bfd *abfd,
12722 char *buf,
12723 int *bufsiz,
12724 const void *ppc_tar,
12725 int size)
12726 {
12727 char *note_name = "LINUX";
12728 return elfcore_write_note (abfd, buf, bufsiz,
12729 note_name, NT_PPC_TAR, ppc_tar, size);
12730 }
12731
12732 char *
12733 elfcore_write_ppc_ppr (bfd *abfd,
12734 char *buf,
12735 int *bufsiz,
12736 const void *ppc_ppr,
12737 int size)
12738 {
12739 char *note_name = "LINUX";
12740 return elfcore_write_note (abfd, buf, bufsiz,
12741 note_name, NT_PPC_PPR, ppc_ppr, size);
12742 }
12743
12744 char *
12745 elfcore_write_ppc_dscr (bfd *abfd,
12746 char *buf,
12747 int *bufsiz,
12748 const void *ppc_dscr,
12749 int size)
12750 {
12751 char *note_name = "LINUX";
12752 return elfcore_write_note (abfd, buf, bufsiz,
12753 note_name, NT_PPC_DSCR, ppc_dscr, size);
12754 }
12755
12756 char *
12757 elfcore_write_ppc_ebb (bfd *abfd,
12758 char *buf,
12759 int *bufsiz,
12760 const void *ppc_ebb,
12761 int size)
12762 {
12763 char *note_name = "LINUX";
12764 return elfcore_write_note (abfd, buf, bufsiz,
12765 note_name, NT_PPC_EBB, ppc_ebb, size);
12766 }
12767
12768 char *
12769 elfcore_write_ppc_pmu (bfd *abfd,
12770 char *buf,
12771 int *bufsiz,
12772 const void *ppc_pmu,
12773 int size)
12774 {
12775 char *note_name = "LINUX";
12776 return elfcore_write_note (abfd, buf, bufsiz,
12777 note_name, NT_PPC_PMU, ppc_pmu, size);
12778 }
12779
12780 char *
12781 elfcore_write_ppc_tm_cgpr (bfd *abfd,
12782 char *buf,
12783 int *bufsiz,
12784 const void *ppc_tm_cgpr,
12785 int size)
12786 {
12787 char *note_name = "LINUX";
12788 return elfcore_write_note (abfd, buf, bufsiz,
12789 note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
12790 }
12791
12792 char *
12793 elfcore_write_ppc_tm_cfpr (bfd *abfd,
12794 char *buf,
12795 int *bufsiz,
12796 const void *ppc_tm_cfpr,
12797 int size)
12798 {
12799 char *note_name = "LINUX";
12800 return elfcore_write_note (abfd, buf, bufsiz,
12801 note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
12802 }
12803
12804 char *
12805 elfcore_write_ppc_tm_cvmx (bfd *abfd,
12806 char *buf,
12807 int *bufsiz,
12808 const void *ppc_tm_cvmx,
12809 int size)
12810 {
12811 char *note_name = "LINUX";
12812 return elfcore_write_note (abfd, buf, bufsiz,
12813 note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
12814 }
12815
12816 char *
12817 elfcore_write_ppc_tm_cvsx (bfd *abfd,
12818 char *buf,
12819 int *bufsiz,
12820 const void *ppc_tm_cvsx,
12821 int size)
12822 {
12823 char *note_name = "LINUX";
12824 return elfcore_write_note (abfd, buf, bufsiz,
12825 note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
12826 }
12827
12828 char *
12829 elfcore_write_ppc_tm_spr (bfd *abfd,
12830 char *buf,
12831 int *bufsiz,
12832 const void *ppc_tm_spr,
12833 int size)
12834 {
12835 char *note_name = "LINUX";
12836 return elfcore_write_note (abfd, buf, bufsiz,
12837 note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
12838 }
12839
12840 char *
12841 elfcore_write_ppc_tm_ctar (bfd *abfd,
12842 char *buf,
12843 int *bufsiz,
12844 const void *ppc_tm_ctar,
12845 int size)
12846 {
12847 char *note_name = "LINUX";
12848 return elfcore_write_note (abfd, buf, bufsiz,
12849 note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
12850 }
12851
12852 char *
12853 elfcore_write_ppc_tm_cppr (bfd *abfd,
12854 char *buf,
12855 int *bufsiz,
12856 const void *ppc_tm_cppr,
12857 int size)
12858 {
12859 char *note_name = "LINUX";
12860 return elfcore_write_note (abfd, buf, bufsiz,
12861 note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
12862 }
12863
12864 char *
12865 elfcore_write_ppc_tm_cdscr (bfd *abfd,
12866 char *buf,
12867 int *bufsiz,
12868 const void *ppc_tm_cdscr,
12869 int size)
12870 {
12871 char *note_name = "LINUX";
12872 return elfcore_write_note (abfd, buf, bufsiz,
12873 note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
12874 }
12875
12876 static char *
12877 elfcore_write_s390_high_gprs (bfd *abfd,
12878 char *buf,
12879 int *bufsiz,
12880 const void *s390_high_gprs,
12881 int size)
12882 {
12883 char *note_name = "LINUX";
12884 return elfcore_write_note (abfd, buf, bufsiz,
12885 note_name, NT_S390_HIGH_GPRS,
12886 s390_high_gprs, size);
12887 }
12888
12889 char *
12890 elfcore_write_s390_timer (bfd *abfd,
12891 char *buf,
12892 int *bufsiz,
12893 const void *s390_timer,
12894 int size)
12895 {
12896 char *note_name = "LINUX";
12897 return elfcore_write_note (abfd, buf, bufsiz,
12898 note_name, NT_S390_TIMER, s390_timer, size);
12899 }
12900
12901 char *
12902 elfcore_write_s390_todcmp (bfd *abfd,
12903 char *buf,
12904 int *bufsiz,
12905 const void *s390_todcmp,
12906 int size)
12907 {
12908 char *note_name = "LINUX";
12909 return elfcore_write_note (abfd, buf, bufsiz,
12910 note_name, NT_S390_TODCMP, s390_todcmp, size);
12911 }
12912
12913 char *
12914 elfcore_write_s390_todpreg (bfd *abfd,
12915 char *buf,
12916 int *bufsiz,
12917 const void *s390_todpreg,
12918 int size)
12919 {
12920 char *note_name = "LINUX";
12921 return elfcore_write_note (abfd, buf, bufsiz,
12922 note_name, NT_S390_TODPREG, s390_todpreg, size);
12923 }
12924
12925 char *
12926 elfcore_write_s390_ctrs (bfd *abfd,
12927 char *buf,
12928 int *bufsiz,
12929 const void *s390_ctrs,
12930 int size)
12931 {
12932 char *note_name = "LINUX";
12933 return elfcore_write_note (abfd, buf, bufsiz,
12934 note_name, NT_S390_CTRS, s390_ctrs, size);
12935 }
12936
12937 char *
12938 elfcore_write_s390_prefix (bfd *abfd,
12939 char *buf,
12940 int *bufsiz,
12941 const void *s390_prefix,
12942 int size)
12943 {
12944 char *note_name = "LINUX";
12945 return elfcore_write_note (abfd, buf, bufsiz,
12946 note_name, NT_S390_PREFIX, s390_prefix, size);
12947 }
12948
12949 char *
12950 elfcore_write_s390_last_break (bfd *abfd,
12951 char *buf,
12952 int *bufsiz,
12953 const void *s390_last_break,
12954 int size)
12955 {
12956 char *note_name = "LINUX";
12957 return elfcore_write_note (abfd, buf, bufsiz,
12958 note_name, NT_S390_LAST_BREAK,
12959 s390_last_break, size);
12960 }
12961
12962 char *
12963 elfcore_write_s390_system_call (bfd *abfd,
12964 char *buf,
12965 int *bufsiz,
12966 const void *s390_system_call,
12967 int size)
12968 {
12969 char *note_name = "LINUX";
12970 return elfcore_write_note (abfd, buf, bufsiz,
12971 note_name, NT_S390_SYSTEM_CALL,
12972 s390_system_call, size);
12973 }
12974
12975 char *
12976 elfcore_write_s390_tdb (bfd *abfd,
12977 char *buf,
12978 int *bufsiz,
12979 const void *s390_tdb,
12980 int size)
12981 {
12982 char *note_name = "LINUX";
12983 return elfcore_write_note (abfd, buf, bufsiz,
12984 note_name, NT_S390_TDB, s390_tdb, size);
12985 }
12986
12987 char *
12988 elfcore_write_s390_vxrs_low (bfd *abfd,
12989 char *buf,
12990 int *bufsiz,
12991 const void *s390_vxrs_low,
12992 int size)
12993 {
12994 char *note_name = "LINUX";
12995 return elfcore_write_note (abfd, buf, bufsiz,
12996 note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
12997 }
12998
12999 char *
13000 elfcore_write_s390_vxrs_high (bfd *abfd,
13001 char *buf,
13002 int *bufsiz,
13003 const void *s390_vxrs_high,
13004 int size)
13005 {
13006 char *note_name = "LINUX";
13007 return elfcore_write_note (abfd, buf, bufsiz,
13008 note_name, NT_S390_VXRS_HIGH,
13009 s390_vxrs_high, size);
13010 }
13011
13012 char *
13013 elfcore_write_s390_gs_cb (bfd *abfd,
13014 char *buf,
13015 int *bufsiz,
13016 const void *s390_gs_cb,
13017 int size)
13018 {
13019 char *note_name = "LINUX";
13020 return elfcore_write_note (abfd, buf, bufsiz,
13021 note_name, NT_S390_GS_CB,
13022 s390_gs_cb, size);
13023 }
13024
13025 char *
13026 elfcore_write_s390_gs_bc (bfd *abfd,
13027 char *buf,
13028 int *bufsiz,
13029 const void *s390_gs_bc,
13030 int size)
13031 {
13032 char *note_name = "LINUX";
13033 return elfcore_write_note (abfd, buf, bufsiz,
13034 note_name, NT_S390_GS_BC,
13035 s390_gs_bc, size);
13036 }
13037
13038 char *
13039 elfcore_write_arm_vfp (bfd *abfd,
13040 char *buf,
13041 int *bufsiz,
13042 const void *arm_vfp,
13043 int size)
13044 {
13045 char *note_name = "LINUX";
13046 return elfcore_write_note (abfd, buf, bufsiz,
13047 note_name, NT_ARM_VFP, arm_vfp, size);
13048 }
13049
13050 char *
13051 elfcore_write_aarch_tls (bfd *abfd,
13052 char *buf,
13053 int *bufsiz,
13054 const void *aarch_tls,
13055 int size)
13056 {
13057 char *note_name = "LINUX";
13058 return elfcore_write_note (abfd, buf, bufsiz,
13059 note_name, NT_ARM_TLS, aarch_tls, size);
13060 }
13061
13062 char *
13063 elfcore_write_aarch_hw_break (bfd *abfd,
13064 char *buf,
13065 int *bufsiz,
13066 const void *aarch_hw_break,
13067 int size)
13068 {
13069 char *note_name = "LINUX";
13070 return elfcore_write_note (abfd, buf, bufsiz,
13071 note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
13072 }
13073
13074 char *
13075 elfcore_write_aarch_hw_watch (bfd *abfd,
13076 char *buf,
13077 int *bufsiz,
13078 const void *aarch_hw_watch,
13079 int size)
13080 {
13081 char *note_name = "LINUX";
13082 return elfcore_write_note (abfd, buf, bufsiz,
13083 note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
13084 }
13085
13086 char *
13087 elfcore_write_aarch_sve (bfd *abfd,
13088 char *buf,
13089 int *bufsiz,
13090 const void *aarch_sve,
13091 int size)
13092 {
13093 char *note_name = "LINUX";
13094 return elfcore_write_note (abfd, buf, bufsiz,
13095 note_name, NT_ARM_SVE, aarch_sve, size);
13096 }
13097
13098 char *
13099 elfcore_write_aarch_pauth (bfd *abfd,
13100 char *buf,
13101 int *bufsiz,
13102 const void *aarch_pauth,
13103 int size)
13104 {
13105 char *note_name = "LINUX";
13106 return elfcore_write_note (abfd, buf, bufsiz,
13107 note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
13108 }
13109
13110 char *
13111 elfcore_write_aarch_mte (bfd *abfd,
13112 char *buf,
13113 int *bufsiz,
13114 const void *aarch_mte,
13115 int size)
13116 {
13117 char *note_name = "LINUX";
13118 return elfcore_write_note (abfd, buf, bufsiz,
13119 note_name, NT_ARM_TAGGED_ADDR_CTRL,
13120 aarch_mte,
13121 size);
13122 }
13123
13124 char *
13125 elfcore_write_aarch_ssve (bfd *abfd,
13126 char *buf,
13127 int *bufsiz,
13128 const void *aarch_ssve,
13129 int size)
13130 {
13131 char *note_name = "LINUX";
13132 return elfcore_write_note (abfd, buf, bufsiz,
13133 note_name, NT_ARM_SSVE,
13134 aarch_ssve,
13135 size);
13136 }
13137
13138 char *
13139 elfcore_write_aarch_za (bfd *abfd,
13140 char *buf,
13141 int *bufsiz,
13142 const void *aarch_za,
13143 int size)
13144 {
13145 char *note_name = "LINUX";
13146 return elfcore_write_note (abfd, buf, bufsiz,
13147 note_name, NT_ARM_ZA,
13148 aarch_za,
13149 size);
13150 }
13151
13152 /* Write the buffer of zt register values in aarch_zt (length SIZE) into
13153 the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
13154 written into. Return a pointer to the new start of the note buffer, to
13155 replace BUF which may no longer be valid. */
13156
13157 char *
13158 elfcore_write_aarch_zt (bfd *abfd,
13159 char *buf,
13160 int *bufsiz,
13161 const void *aarch_zt,
13162 int size)
13163 {
13164 char *note_name = "LINUX";
13165 return elfcore_write_note (abfd, buf, bufsiz,
13166 note_name, NT_ARM_ZT,
13167 aarch_zt,
13168 size);
13169 }
13170
13171 char *
13172 elfcore_write_arc_v2 (bfd *abfd,
13173 char *buf,
13174 int *bufsiz,
13175 const void *arc_v2,
13176 int size)
13177 {
13178 char *note_name = "LINUX";
13179 return elfcore_write_note (abfd, buf, bufsiz,
13180 note_name, NT_ARC_V2, arc_v2, size);
13181 }
13182
13183 char *
13184 elfcore_write_loongarch_cpucfg (bfd *abfd,
13185 char *buf,
13186 int *bufsiz,
13187 const void *loongarch_cpucfg,
13188 int size)
13189 {
13190 char *note_name = "LINUX";
13191 return elfcore_write_note (abfd, buf, bufsiz,
13192 note_name, NT_LARCH_CPUCFG,
13193 loongarch_cpucfg, size);
13194 }
13195
13196 char *
13197 elfcore_write_loongarch_lbt (bfd *abfd,
13198 char *buf,
13199 int *bufsiz,
13200 const void *loongarch_lbt,
13201 int size)
13202 {
13203 char *note_name = "LINUX";
13204 return elfcore_write_note (abfd, buf, bufsiz,
13205 note_name, NT_LARCH_LBT, loongarch_lbt, size);
13206 }
13207
13208 char *
13209 elfcore_write_loongarch_lsx (bfd *abfd,
13210 char *buf,
13211 int *bufsiz,
13212 const void *loongarch_lsx,
13213 int size)
13214 {
13215 char *note_name = "LINUX";
13216 return elfcore_write_note (abfd, buf, bufsiz,
13217 note_name, NT_LARCH_LSX, loongarch_lsx, size);
13218 }
13219
13220 char *
13221 elfcore_write_loongarch_lasx (bfd *abfd,
13222 char *buf,
13223 int *bufsiz,
13224 const void *loongarch_lasx,
13225 int size)
13226 {
13227 char *note_name = "LINUX";
13228 return elfcore_write_note (abfd, buf, bufsiz,
13229 note_name, NT_LARCH_LASX, loongarch_lasx, size);
13230 }
13231
13232 /* Write the buffer of csr values in CSRS (length SIZE) into the note
13233 buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
13234 written into. Return a pointer to the new start of the note buffer, to
13235 replace BUF which may no longer be valid. */
13236
13237 char *
13238 elfcore_write_riscv_csr (bfd *abfd,
13239 char *buf,
13240 int *bufsiz,
13241 const void *csrs,
13242 int size)
13243 {
13244 const char *note_name = "GDB";
13245 return elfcore_write_note (abfd, buf, bufsiz,
13246 note_name, NT_RISCV_CSR, csrs, size);
13247 }
13248
13249 /* Write the target description (a string) pointed to by TDESC, length
13250 SIZE, into the note buffer BUF, and update *BUFSIZ. ABFD is the bfd the
13251 note is being written into. Return a pointer to the new start of the
13252 note buffer, to replace BUF which may no longer be valid. */
13253
13254 char *
13255 elfcore_write_gdb_tdesc (bfd *abfd,
13256 char *buf,
13257 int *bufsiz,
13258 const void *tdesc,
13259 int size)
13260 {
13261 const char *note_name = "GDB";
13262 return elfcore_write_note (abfd, buf, bufsiz,
13263 note_name, NT_GDB_TDESC, tdesc, size);
13264 }
13265
13266 char *
13267 elfcore_write_register_note (bfd *abfd,
13268 char *buf,
13269 int *bufsiz,
13270 const char *section,
13271 const void *data,
13272 int size)
13273 {
13274 if (strcmp (section, ".reg2") == 0)
13275 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
13276 if (strcmp (section, ".reg-xfp") == 0)
13277 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
13278 if (strcmp (section, ".reg-xstate") == 0)
13279 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
13280 if (strcmp (section, ".reg-x86-segbases") == 0)
13281 return elfcore_write_x86_segbases (abfd, buf, bufsiz, data, size);
13282 if (strcmp (section, ".reg-ppc-vmx") == 0)
13283 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
13284 if (strcmp (section, ".reg-ppc-vsx") == 0)
13285 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
13286 if (strcmp (section, ".reg-ppc-tar") == 0)
13287 return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
13288 if (strcmp (section, ".reg-ppc-ppr") == 0)
13289 return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
13290 if (strcmp (section, ".reg-ppc-dscr") == 0)
13291 return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
13292 if (strcmp (section, ".reg-ppc-ebb") == 0)
13293 return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
13294 if (strcmp (section, ".reg-ppc-pmu") == 0)
13295 return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
13296 if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
13297 return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
13298 if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
13299 return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
13300 if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
13301 return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
13302 if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
13303 return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
13304 if (strcmp (section, ".reg-ppc-tm-spr") == 0)
13305 return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
13306 if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
13307 return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
13308 if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
13309 return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
13310 if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
13311 return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
13312 if (strcmp (section, ".reg-s390-high-gprs") == 0)
13313 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
13314 if (strcmp (section, ".reg-s390-timer") == 0)
13315 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
13316 if (strcmp (section, ".reg-s390-todcmp") == 0)
13317 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
13318 if (strcmp (section, ".reg-s390-todpreg") == 0)
13319 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
13320 if (strcmp (section, ".reg-s390-ctrs") == 0)
13321 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
13322 if (strcmp (section, ".reg-s390-prefix") == 0)
13323 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
13324 if (strcmp (section, ".reg-s390-last-break") == 0)
13325 return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
13326 if (strcmp (section, ".reg-s390-system-call") == 0)
13327 return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
13328 if (strcmp (section, ".reg-s390-tdb") == 0)
13329 return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
13330 if (strcmp (section, ".reg-s390-vxrs-low") == 0)
13331 return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
13332 if (strcmp (section, ".reg-s390-vxrs-high") == 0)
13333 return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
13334 if (strcmp (section, ".reg-s390-gs-cb") == 0)
13335 return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
13336 if (strcmp (section, ".reg-s390-gs-bc") == 0)
13337 return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
13338 if (strcmp (section, ".reg-arm-vfp") == 0)
13339 return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
13340 if (strcmp (section, ".reg-aarch-tls") == 0)
13341 return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
13342 if (strcmp (section, ".reg-aarch-hw-break") == 0)
13343 return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
13344 if (strcmp (section, ".reg-aarch-hw-watch") == 0)
13345 return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
13346 if (strcmp (section, ".reg-aarch-sve") == 0)
13347 return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
13348 if (strcmp (section, ".reg-aarch-pauth") == 0)
13349 return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
13350 if (strcmp (section, ".reg-aarch-mte") == 0)
13351 return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size);
13352 if (strcmp (section, ".reg-aarch-ssve") == 0)
13353 return elfcore_write_aarch_ssve (abfd, buf, bufsiz, data, size);
13354 if (strcmp (section, ".reg-aarch-za") == 0)
13355 return elfcore_write_aarch_za (abfd, buf, bufsiz, data, size);
13356 if (strcmp (section, ".reg-aarch-zt") == 0)
13357 return elfcore_write_aarch_zt (abfd, buf, bufsiz, data, size);
13358 if (strcmp (section, ".reg-arc-v2") == 0)
13359 return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
13360 if (strcmp (section, ".gdb-tdesc") == 0)
13361 return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
13362 if (strcmp (section, ".reg-riscv-csr") == 0)
13363 return elfcore_write_riscv_csr (abfd, buf, bufsiz, data, size);
13364 if (strcmp (section, ".reg-loongarch-cpucfg") == 0)
13365 return elfcore_write_loongarch_cpucfg (abfd, buf, bufsiz, data, size);
13366 if (strcmp (section, ".reg-loongarch-lbt") == 0)
13367 return elfcore_write_loongarch_lbt (abfd, buf, bufsiz, data, size);
13368 if (strcmp (section, ".reg-loongarch-lsx") == 0)
13369 return elfcore_write_loongarch_lsx (abfd, buf, bufsiz, data, size);
13370 if (strcmp (section, ".reg-loongarch-lasx") == 0)
13371 return elfcore_write_loongarch_lasx (abfd, buf, bufsiz, data, size);
13372 return NULL;
13373 }
13374
13375 char *
13376 elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
13377 const void *buf, int bufsiz)
13378 {
13379 return elfcore_write_note (obfd, note_data, note_size,
13380 "CORE", NT_FILE, buf, bufsiz);
13381 }
13382
13383 static bool
13384 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
13385 size_t align)
13386 {
13387 char *p;
13388
13389 /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
13390 gABI specifies that PT_NOTE alignment should be aligned to 4
13391 bytes for 32-bit objects and to 8 bytes for 64-bit objects. If
13392 align is less than 4, we use 4 byte alignment. */
13393 if (align < 4)
13394 align = 4;
13395 if (align != 4 && align != 8)
13396 return false;
13397
13398 p = buf;
13399 while (p < buf + size)
13400 {
13401 Elf_External_Note *xnp = (Elf_External_Note *) p;
13402 Elf_Internal_Note in;
13403
13404 if (offsetof (Elf_External_Note, name) > buf - p + size)
13405 return false;
13406
13407 in.type = H_GET_32 (abfd, xnp->type);
13408
13409 in.namesz = H_GET_32 (abfd, xnp->namesz);
13410 in.namedata = xnp->name;
13411 if (in.namesz > buf - in.namedata + size)
13412 return false;
13413
13414 in.descsz = H_GET_32 (abfd, xnp->descsz);
13415 in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
13416 in.descpos = offset + (in.descdata - buf);
13417 if (in.descsz != 0
13418 && (in.descdata >= buf + size
13419 || in.descsz > buf - in.descdata + size))
13420 return false;
13421
13422 switch (bfd_get_format (abfd))
13423 {
13424 default:
13425 return true;
13426
13427 case bfd_core:
13428 {
13429 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
13430 struct
13431 {
13432 const char * string;
13433 size_t len;
13434 bool (*func) (bfd *, Elf_Internal_Note *);
13435 }
13436 grokers[] =
13437 {
13438 GROKER_ELEMENT ("", elfcore_grok_note),
13439 GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
13440 GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
13441 GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
13442 GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
13443 GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
13444 GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
13445 GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)
13446 };
13447 #undef GROKER_ELEMENT
13448 int i;
13449
13450 for (i = ARRAY_SIZE (grokers); i--;)
13451 {
13452 if (in.namesz >= grokers[i].len
13453 && strncmp (in.namedata, grokers[i].string,
13454 grokers[i].len) == 0)
13455 {
13456 if (! grokers[i].func (abfd, & in))
13457 return false;
13458 break;
13459 }
13460 }
13461 break;
13462 }
13463
13464 case bfd_object:
13465 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
13466 {
13467 if (! elfobj_grok_gnu_note (abfd, &in))
13468 return false;
13469 }
13470 else if (in.namesz == sizeof "stapsdt"
13471 && strcmp (in.namedata, "stapsdt") == 0)
13472 {
13473 if (! elfobj_grok_stapsdt_note (abfd, &in))
13474 return false;
13475 }
13476 break;
13477 }
13478
13479 p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
13480 }
13481
13482 return true;
13483 }
13484
13485 bool
13486 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
13487 size_t align)
13488 {
13489 char *buf;
13490
13491 if (size == 0 || (size + 1) == 0)
13492 return true;
13493
13494 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
13495 return false;
13496
13497 buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
13498 if (buf == NULL)
13499 return false;
13500
13501 /* PR 17512: file: ec08f814
13502 0-termintate the buffer so that string searches will not overflow. */
13503 buf[size] = 0;
13504
13505 if (!elf_parse_notes (abfd, buf, size, offset, align))
13506 {
13507 free (buf);
13508 return false;
13509 }
13510
13511 free (buf);
13512 return true;
13513 }
13514 \f
13515 /* Providing external access to the ELF program header table. */
13516
13517 /* Return an upper bound on the number of bytes required to store a
13518 copy of ABFD's program header table entries. Return -1 if an error
13519 occurs; bfd_get_error will return an appropriate code. */
13520
13521 long
13522 bfd_get_elf_phdr_upper_bound (bfd *abfd)
13523 {
13524 if (abfd->xvec->flavour != bfd_target_elf_flavour)
13525 {
13526 bfd_set_error (bfd_error_wrong_format);
13527 return -1;
13528 }
13529
13530 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
13531 }
13532
13533 /* Copy ABFD's program header table entries to *PHDRS. The entries
13534 will be stored as an array of Elf_Internal_Phdr structures, as
13535 defined in include/elf/internal.h. To find out how large the
13536 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
13537
13538 Return the number of program header table entries read, or -1 if an
13539 error occurs; bfd_get_error will return an appropriate code. */
13540
13541 int
13542 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
13543 {
13544 int num_phdrs;
13545
13546 if (abfd->xvec->flavour != bfd_target_elf_flavour)
13547 {
13548 bfd_set_error (bfd_error_wrong_format);
13549 return -1;
13550 }
13551
13552 num_phdrs = elf_elfheader (abfd)->e_phnum;
13553 if (num_phdrs != 0)
13554 memcpy (phdrs, elf_tdata (abfd)->phdr,
13555 num_phdrs * sizeof (Elf_Internal_Phdr));
13556
13557 return num_phdrs;
13558 }
13559
13560 enum elf_reloc_type_class
13561 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
13562 const asection *rel_sec ATTRIBUTE_UNUSED,
13563 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
13564 {
13565 return reloc_class_normal;
13566 }
13567
13568 /* For RELA architectures, return the relocation value for a
13569 relocation against a local symbol. */
13570
13571 bfd_vma
13572 _bfd_elf_rela_local_sym (bfd *abfd,
13573 Elf_Internal_Sym *sym,
13574 asection **psec,
13575 Elf_Internal_Rela *rel)
13576 {
13577 asection *sec = *psec;
13578 bfd_vma relocation;
13579
13580 relocation = (sec->output_section->vma
13581 + sec->output_offset
13582 + sym->st_value);
13583 if ((sec->flags & SEC_MERGE)
13584 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
13585 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
13586 {
13587 rel->r_addend =
13588 _bfd_merged_section_offset (abfd, psec,
13589 elf_section_data (sec)->sec_info,
13590 sym->st_value + rel->r_addend);
13591 if (sec != *psec)
13592 {
13593 /* If we have changed the section, and our original section is
13594 marked with SEC_EXCLUDE, it means that the original
13595 SEC_MERGE section has been completely subsumed in some
13596 other SEC_MERGE section. In this case, we need to leave
13597 some info around for --emit-relocs. */
13598 if ((sec->flags & SEC_EXCLUDE) != 0)
13599 sec->kept_section = *psec;
13600 sec = *psec;
13601 }
13602 rel->r_addend -= relocation;
13603 rel->r_addend += sec->output_section->vma + sec->output_offset;
13604 }
13605 return relocation;
13606 }
13607
13608 bfd_vma
13609 _bfd_elf_rel_local_sym (bfd *abfd,
13610 Elf_Internal_Sym *sym,
13611 asection **psec,
13612 bfd_vma addend)
13613 {
13614 asection *sec = *psec;
13615
13616 if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
13617 return sym->st_value + addend;
13618
13619 return _bfd_merged_section_offset (abfd, psec,
13620 elf_section_data (sec)->sec_info,
13621 sym->st_value + addend);
13622 }
13623
13624 /* Adjust an address within a section. Given OFFSET within SEC, return
13625 the new offset within the section, based upon changes made to the
13626 section. Returns -1 if the offset is now invalid.
13627 The offset (in abnd out) is in target sized bytes, however big a
13628 byte may be. */
13629
13630 bfd_vma
13631 _bfd_elf_section_offset (bfd *abfd,
13632 struct bfd_link_info *info,
13633 asection *sec,
13634 bfd_vma offset)
13635 {
13636 switch (sec->sec_info_type)
13637 {
13638 case SEC_INFO_TYPE_STABS:
13639 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
13640 offset);
13641 case SEC_INFO_TYPE_EH_FRAME:
13642 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
13643
13644 default:
13645 if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
13646 {
13647 /* Reverse the offset. */
13648 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13649 bfd_size_type address_size = bed->s->arch_size / 8;
13650
13651 /* address_size and sec->size are in octets. Convert
13652 to bytes before subtracting the original offset. */
13653 offset = ((sec->size - address_size)
13654 / bfd_octets_per_byte (abfd, sec) - offset);
13655 }
13656 return offset;
13657 }
13658 }
13659 \f
13660 long
13661 _bfd_elf_get_synthetic_symtab (bfd *abfd,
13662 long symcount ATTRIBUTE_UNUSED,
13663 asymbol **syms ATTRIBUTE_UNUSED,
13664 long dynsymcount,
13665 asymbol **dynsyms,
13666 asymbol **ret)
13667 {
13668 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13669 asection *relplt;
13670 asymbol *s;
13671 const char *relplt_name;
13672 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
13673 arelent *p;
13674 long count, i, n;
13675 size_t size;
13676 Elf_Internal_Shdr *hdr;
13677 char *names;
13678 asection *plt;
13679
13680 *ret = NULL;
13681
13682 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
13683 return 0;
13684
13685 if (dynsymcount <= 0)
13686 return 0;
13687
13688 if (!bed->plt_sym_val)
13689 return 0;
13690
13691 relplt_name = bed->relplt_name;
13692 if (relplt_name == NULL)
13693 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
13694 relplt = bfd_get_section_by_name (abfd, relplt_name);
13695 if (relplt == NULL)
13696 return 0;
13697
13698 hdr = &elf_section_data (relplt)->this_hdr;
13699 if (hdr->sh_link != elf_dynsymtab (abfd)
13700 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
13701 return 0;
13702
13703 plt = bfd_get_section_by_name (abfd, ".plt");
13704 if (plt == NULL)
13705 return 0;
13706
13707 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
13708 if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
13709 return -1;
13710
13711 count = NUM_SHDR_ENTRIES (hdr);
13712 size = count * sizeof (asymbol);
13713 p = relplt->relocation;
13714 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
13715 {
13716 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
13717 if (p->addend != 0)
13718 {
13719 #ifdef BFD64
13720 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
13721 #else
13722 size += sizeof ("+0x") - 1 + 8;
13723 #endif
13724 }
13725 }
13726
13727 s = *ret = (asymbol *) bfd_malloc (size);
13728 if (s == NULL)
13729 return -1;
13730
13731 names = (char *) (s + count);
13732 p = relplt->relocation;
13733 n = 0;
13734 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
13735 {
13736 size_t len;
13737 bfd_vma addr;
13738
13739 addr = bed->plt_sym_val (i, plt, p);
13740 if (addr == (bfd_vma) -1)
13741 continue;
13742
13743 *s = **p->sym_ptr_ptr;
13744 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
13745 we are defining a symbol, ensure one of them is set. */
13746 if ((s->flags & BSF_LOCAL) == 0)
13747 s->flags |= BSF_GLOBAL;
13748 s->flags |= BSF_SYNTHETIC;
13749 s->section = plt;
13750 s->value = addr - plt->vma;
13751 s->name = names;
13752 s->udata.p = NULL;
13753 len = strlen ((*p->sym_ptr_ptr)->name);
13754 memcpy (names, (*p->sym_ptr_ptr)->name, len);
13755 names += len;
13756 if (p->addend != 0)
13757 {
13758 char buf[30], *a;
13759
13760 memcpy (names, "+0x", sizeof ("+0x") - 1);
13761 names += sizeof ("+0x") - 1;
13762 bfd_sprintf_vma (abfd, buf, p->addend);
13763 for (a = buf; *a == '0'; ++a)
13764 ;
13765 len = strlen (a);
13766 memcpy (names, a, len);
13767 names += len;
13768 }
13769 memcpy (names, "@plt", sizeof ("@plt"));
13770 names += sizeof ("@plt");
13771 ++s, ++n;
13772 }
13773
13774 return n;
13775 }
13776
13777 /* It is only used by x86-64 so far.
13778 ??? This repeats *COM* id of zero. sec->id is supposed to be unique,
13779 but current usage would allow all of _bfd_std_section to be zero. */
13780 static const asymbol lcomm_sym
13781 = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
13782 asection _bfd_elf_large_com_section
13783 = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
13784 "LARGE_COMMON", 0, SEC_IS_COMMON);
13785
13786 bool
13787 _bfd_elf_final_write_processing (bfd *abfd)
13788 {
13789 Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */
13790
13791 i_ehdrp = elf_elfheader (abfd);
13792
13793 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13794 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
13795
13796 /* Set the osabi field to ELFOSABI_GNU if the binary contains
13797 SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
13798 or STB_GNU_UNIQUE binding. */
13799 if (elf_tdata (abfd)->has_gnu_osabi != 0)
13800 {
13801 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13802 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
13803 else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
13804 && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
13805 {
13806 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
13807 _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
13808 "and FreeBSD targets"));
13809 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
13810 _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
13811 "only by GNU and FreeBSD targets"));
13812 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
13813 _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
13814 "only by GNU and FreeBSD targets"));
13815 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
13816 _bfd_error_handler (_("GNU_RETAIN section is supported "
13817 "only by GNU and FreeBSD targets"));
13818 bfd_set_error (bfd_error_sorry);
13819 return false;
13820 }
13821 }
13822 return true;
13823 }
13824
13825
13826 /* Return TRUE for ELF symbol types that represent functions.
13827 This is the default version of this function, which is sufficient for
13828 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
13829
13830 bool
13831 _bfd_elf_is_function_type (unsigned int type)
13832 {
13833 return (type == STT_FUNC
13834 || type == STT_GNU_IFUNC);
13835 }
13836
13837 /* If the ELF symbol SYM might be a function in SEC, return the
13838 function size and set *CODE_OFF to the function's entry point,
13839 otherwise return zero. */
13840
13841 bfd_size_type
13842 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
13843 bfd_vma *code_off)
13844 {
13845 bfd_size_type size;
13846 elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
13847
13848 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
13849 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
13850 || sym->section != sec)
13851 return 0;
13852
13853 size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
13854
13855 /* In theory we should check that the symbol's type satisfies
13856 _bfd_elf_is_function_type(), but there are some function-like
13857 symbols which would fail this test. (eg _start). Instead
13858 we check for hidden, local, notype symbols with zero size.
13859 This type of symbol is generated by the annobin plugin for gcc
13860 and clang, and should not be considered to be a function symbol. */
13861 if (size == 0
13862 && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
13863 && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
13864 && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
13865 return 0;
13866
13867 *code_off = sym->value;
13868 /* Do not return 0 for the function's size. */
13869 return size ? size : 1;
13870 }
13871
13872 /* Set to non-zero to enable some debug messages. */
13873 #define DEBUG_SECONDARY_RELOCS 0
13874
13875 /* An internal-to-the-bfd-library only section type
13876 used to indicate a cached secondary reloc section. */
13877 #define SHT_SECONDARY_RELOC (SHT_LOOS + SHT_RELA)
13878
13879 /* Create a BFD section to hold a secondary reloc section. */
13880
13881 bool
13882 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
13883 Elf_Internal_Shdr *hdr,
13884 const char * name,
13885 unsigned int shindex)
13886 {
13887 /* We only support RELA secondary relocs. */
13888 if (hdr->sh_type != SHT_RELA)
13889 return false;
13890
13891 #if DEBUG_SECONDARY_RELOCS
13892 fprintf (stderr, "secondary reloc section %s encountered\n", name);
13893 #endif
13894 hdr->sh_type = SHT_SECONDARY_RELOC;
13895 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
13896 }
13897
13898 /* Read in any secondary relocs associated with SEC. */
13899
13900 bool
13901 _bfd_elf_slurp_secondary_reloc_section (bfd * abfd,
13902 asection * sec,
13903 asymbol ** symbols,
13904 bool dynamic)
13905 {
13906 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13907 asection * relsec;
13908 bool result = true;
13909 bfd_vma (*r_sym) (bfd_vma);
13910 ufile_ptr filesize;
13911
13912 #if BFD_DEFAULT_TARGET_SIZE > 32
13913 if (bfd_arch_bits_per_address (abfd) != 32)
13914 r_sym = elf64_r_sym;
13915 else
13916 #endif
13917 r_sym = elf32_r_sym;
13918
13919 if (!elf_section_data (sec)->has_secondary_relocs)
13920 return true;
13921
13922 /* Discover if there are any secondary reloc sections
13923 associated with SEC. */
13924 filesize = bfd_get_file_size (abfd);
13925 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13926 {
13927 Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
13928
13929 if (hdr->sh_type == SHT_SECONDARY_RELOC
13930 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
13931 && (hdr->sh_entsize == ebd->s->sizeof_rel
13932 || hdr->sh_entsize == ebd->s->sizeof_rela))
13933 {
13934 bfd_byte * native_relocs;
13935 bfd_byte * native_reloc;
13936 arelent * internal_relocs;
13937 arelent * internal_reloc;
13938 size_t i;
13939 unsigned int entsize;
13940 unsigned int symcount;
13941 bfd_size_type reloc_count;
13942 size_t amt;
13943
13944 if (ebd->elf_info_to_howto == NULL)
13945 return false;
13946
13947 #if DEBUG_SECONDARY_RELOCS
13948 fprintf (stderr, "read secondary relocs for %s from %s\n",
13949 sec->name, relsec->name);
13950 #endif
13951 entsize = hdr->sh_entsize;
13952
13953 if (filesize != 0
13954 && ((ufile_ptr) hdr->sh_offset > filesize
13955 || hdr->sh_size > filesize - hdr->sh_offset))
13956 {
13957 bfd_set_error (bfd_error_file_truncated);
13958 result = false;
13959 continue;
13960 }
13961
13962 native_relocs = bfd_malloc (hdr->sh_size);
13963 if (native_relocs == NULL)
13964 {
13965 result = false;
13966 continue;
13967 }
13968
13969 reloc_count = NUM_SHDR_ENTRIES (hdr);
13970 if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
13971 {
13972 free (native_relocs);
13973 bfd_set_error (bfd_error_file_too_big);
13974 result = false;
13975 continue;
13976 }
13977
13978 internal_relocs = (arelent *) bfd_alloc (abfd, amt);
13979 if (internal_relocs == NULL)
13980 {
13981 free (native_relocs);
13982 result = false;
13983 continue;
13984 }
13985
13986 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
13987 || bfd_read (native_relocs, hdr->sh_size, abfd) != hdr->sh_size)
13988 {
13989 free (native_relocs);
13990 /* The internal_relocs will be freed when
13991 the memory for the bfd is released. */
13992 result = false;
13993 continue;
13994 }
13995
13996 if (dynamic)
13997 symcount = bfd_get_dynamic_symcount (abfd);
13998 else
13999 symcount = bfd_get_symcount (abfd);
14000
14001 for (i = 0, internal_reloc = internal_relocs,
14002 native_reloc = native_relocs;
14003 i < reloc_count;
14004 i++, internal_reloc++, native_reloc += entsize)
14005 {
14006 bool res;
14007 Elf_Internal_Rela rela;
14008
14009 if (entsize == ebd->s->sizeof_rel)
14010 ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
14011 else /* entsize == ebd->s->sizeof_rela */
14012 ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
14013
14014 /* The address of an ELF reloc is section relative for an object
14015 file, and absolute for an executable file or shared library.
14016 The address of a normal BFD reloc is always section relative,
14017 and the address of a dynamic reloc is absolute.. */
14018 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
14019 internal_reloc->address = rela.r_offset;
14020 else
14021 internal_reloc->address = rela.r_offset - sec->vma;
14022
14023 if (r_sym (rela.r_info) == STN_UNDEF)
14024 {
14025 /* FIXME: This and the error case below mean that we
14026 have a symbol on relocs that is not elf_symbol_type. */
14027 internal_reloc->sym_ptr_ptr =
14028 bfd_abs_section_ptr->symbol_ptr_ptr;
14029 }
14030 else if (r_sym (rela.r_info) > symcount)
14031 {
14032 _bfd_error_handler
14033 /* xgettext:c-format */
14034 (_("%pB(%pA): relocation %zu has invalid symbol index %lu"),
14035 abfd, sec, i, (long) r_sym (rela.r_info));
14036 bfd_set_error (bfd_error_bad_value);
14037 internal_reloc->sym_ptr_ptr =
14038 bfd_abs_section_ptr->symbol_ptr_ptr;
14039 result = false;
14040 }
14041 else
14042 {
14043 asymbol **ps;
14044
14045 ps = symbols + r_sym (rela.r_info) - 1;
14046 internal_reloc->sym_ptr_ptr = ps;
14047 /* Make sure that this symbol is not removed by strip. */
14048 (*ps)->flags |= BSF_KEEP;
14049 }
14050
14051 internal_reloc->addend = rela.r_addend;
14052
14053 res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
14054 if (! res || internal_reloc->howto == NULL)
14055 {
14056 #if DEBUG_SECONDARY_RELOCS
14057 fprintf (stderr,
14058 "there is no howto associated with reloc %lx\n",
14059 rela.r_info);
14060 #endif
14061 result = false;
14062 }
14063 }
14064
14065 free (native_relocs);
14066 /* Store the internal relocs. */
14067 elf_section_data (relsec)->sec_info = internal_relocs;
14068 }
14069 }
14070
14071 return result;
14072 }
14073
14074 /* Set the ELF section header fields of an output secondary reloc section. */
14075
14076 bool
14077 _bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
14078 bfd *obfd ATTRIBUTE_UNUSED,
14079 const Elf_Internal_Shdr *isection,
14080 Elf_Internal_Shdr *osection)
14081 {
14082 asection * isec;
14083 asection * osec;
14084 struct bfd_elf_section_data * esd;
14085
14086 if (isection == NULL)
14087 return false;
14088
14089 if (isection->sh_type != SHT_SECONDARY_RELOC)
14090 return true;
14091
14092 isec = isection->bfd_section;
14093 if (isec == NULL)
14094 return false;
14095
14096 osec = osection->bfd_section;
14097 if (osec == NULL)
14098 return false;
14099
14100 esd = elf_section_data (osec);
14101 BFD_ASSERT (esd->sec_info == NULL);
14102 esd->sec_info = elf_section_data (isec)->sec_info;
14103 osection->sh_type = SHT_RELA;
14104 osection->sh_link = elf_onesymtab (obfd);
14105 if (osection->sh_link == 0)
14106 {
14107 /* There is no symbol table - we are hosed... */
14108 _bfd_error_handler
14109 /* xgettext:c-format */
14110 (_("%pB(%pA): link section cannot be set"
14111 " because the output file does not have a symbol table"),
14112 obfd, osec);
14113 bfd_set_error (bfd_error_bad_value);
14114 return false;
14115 }
14116
14117 /* Find the output section that corresponds to the isection's
14118 sh_info link. */
14119 if (isection->sh_info == 0
14120 || isection->sh_info >= elf_numsections (ibfd))
14121 {
14122 _bfd_error_handler
14123 /* xgettext:c-format */
14124 (_("%pB(%pA): info section index is invalid"),
14125 obfd, osec);
14126 bfd_set_error (bfd_error_bad_value);
14127 return false;
14128 }
14129
14130 isection = elf_elfsections (ibfd)[isection->sh_info];
14131
14132 if (isection == NULL
14133 || isection->bfd_section == NULL
14134 || isection->bfd_section->output_section == NULL)
14135 {
14136 _bfd_error_handler
14137 /* xgettext:c-format */
14138 (_("%pB(%pA): info section index cannot be set"
14139 " because the section is not in the output"),
14140 obfd, osec);
14141 bfd_set_error (bfd_error_bad_value);
14142 return false;
14143 }
14144
14145 esd = elf_section_data (isection->bfd_section->output_section);
14146 BFD_ASSERT (esd != NULL);
14147 osection->sh_info = esd->this_idx;
14148 esd->has_secondary_relocs = true;
14149 #if DEBUG_SECONDARY_RELOCS
14150 fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
14151 osec->name, osection->sh_link, osection->sh_info);
14152 fprintf (stderr, "mark section %s as having secondary relocs\n",
14153 bfd_section_name (isection->bfd_section->output_section));
14154 #endif
14155
14156 return true;
14157 }
14158
14159 /* Write out a secondary reloc section.
14160
14161 FIXME: Currently this function can result in a serious performance penalty
14162 for files with secondary relocs and lots of sections. The proper way to
14163 fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
14164 relocs together and then to have this function just walk that chain. */
14165
14166 bool
14167 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
14168 {
14169 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
14170 bfd_vma addr_offset;
14171 asection * relsec;
14172 bfd_vma (*r_info) (bfd_vma, bfd_vma);
14173 bool result = true;
14174
14175 if (sec == NULL)
14176 return false;
14177
14178 #if BFD_DEFAULT_TARGET_SIZE > 32
14179 if (bfd_arch_bits_per_address (abfd) != 32)
14180 r_info = elf64_r_info;
14181 else
14182 #endif
14183 r_info = elf32_r_info;
14184
14185 /* The address of an ELF reloc is section relative for an object
14186 file, and absolute for an executable file or shared library.
14187 The address of a BFD reloc is always section relative. */
14188 addr_offset = 0;
14189 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
14190 addr_offset = sec->vma;
14191
14192 /* Discover if there are any secondary reloc sections
14193 associated with SEC. */
14194 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
14195 {
14196 const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
14197 Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
14198
14199 if (hdr->sh_type == SHT_RELA
14200 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
14201 {
14202 asymbol * last_sym;
14203 int last_sym_idx;
14204 size_t reloc_count;
14205 size_t idx;
14206 bfd_size_type entsize;
14207 arelent * src_irel;
14208 bfd_byte * dst_rela;
14209
14210 if (hdr->contents != NULL)
14211 {
14212 _bfd_error_handler
14213 /* xgettext:c-format */
14214 (_("%pB(%pA): error: secondary reloc section processed twice"),
14215 abfd, relsec);
14216 bfd_set_error (bfd_error_bad_value);
14217 result = false;
14218 continue;
14219 }
14220
14221 entsize = hdr->sh_entsize;
14222 if (entsize == 0)
14223 {
14224 _bfd_error_handler
14225 /* xgettext:c-format */
14226 (_("%pB(%pA): error: secondary reloc section"
14227 " has zero sized entries"),
14228 abfd, relsec);
14229 bfd_set_error (bfd_error_bad_value);
14230 result = false;
14231 continue;
14232 }
14233 else if (entsize != ebd->s->sizeof_rel
14234 && entsize != ebd->s->sizeof_rela)
14235 {
14236 _bfd_error_handler
14237 /* xgettext:c-format */
14238 (_("%pB(%pA): error: secondary reloc section"
14239 " has non-standard sized entries"),
14240 abfd, relsec);
14241 bfd_set_error (bfd_error_bad_value);
14242 result = false;
14243 continue;
14244 }
14245
14246 reloc_count = hdr->sh_size / entsize;
14247 hdr->sh_size = entsize * reloc_count;
14248 if (reloc_count == 0)
14249 {
14250 _bfd_error_handler
14251 /* xgettext:c-format */
14252 (_("%pB(%pA): error: secondary reloc section is empty!"),
14253 abfd, relsec);
14254 bfd_set_error (bfd_error_bad_value);
14255 result = false;
14256 continue;
14257 }
14258
14259 hdr->contents = bfd_alloc (abfd, hdr->sh_size);
14260 if (hdr->contents == NULL)
14261 continue;
14262
14263 #if DEBUG_SECONDARY_RELOCS
14264 fprintf (stderr, "write %u secondary relocs for %s from %s\n",
14265 reloc_count, sec->name, relsec->name);
14266 #endif
14267 last_sym = NULL;
14268 last_sym_idx = 0;
14269 dst_rela = hdr->contents;
14270 src_irel = (arelent *) esd->sec_info;
14271 if (src_irel == NULL)
14272 {
14273 _bfd_error_handler
14274 /* xgettext:c-format */
14275 (_("%pB(%pA): error: internal relocs missing"
14276 " for secondary reloc section"),
14277 abfd, relsec);
14278 bfd_set_error (bfd_error_bad_value);
14279 result = false;
14280 continue;
14281 }
14282
14283 for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
14284 {
14285 Elf_Internal_Rela src_rela;
14286 arelent *ptr;
14287 asymbol *sym;
14288 int n;
14289
14290 ptr = src_irel + idx;
14291 if (ptr == NULL)
14292 {
14293 _bfd_error_handler
14294 /* xgettext:c-format */
14295 (_("%pB(%pA): error: reloc table entry %zu is empty"),
14296 abfd, relsec, idx);
14297 bfd_set_error (bfd_error_bad_value);
14298 result = false;
14299 break;
14300 }
14301
14302 if (ptr->sym_ptr_ptr == NULL)
14303 {
14304 /* FIXME: Is this an error ? */
14305 n = 0;
14306 }
14307 else
14308 {
14309 sym = *ptr->sym_ptr_ptr;
14310
14311 if (sym == last_sym)
14312 n = last_sym_idx;
14313 else
14314 {
14315 n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
14316 if (n < 0)
14317 {
14318 _bfd_error_handler
14319 /* xgettext:c-format */
14320 (_("%pB(%pA): error: secondary reloc %zu"
14321 " references a missing symbol"),
14322 abfd, relsec, idx);
14323 bfd_set_error (bfd_error_bad_value);
14324 result = false;
14325 n = 0;
14326 }
14327
14328 last_sym = sym;
14329 last_sym_idx = n;
14330 }
14331
14332 if (sym->the_bfd != NULL
14333 && sym->the_bfd->xvec != abfd->xvec
14334 && ! _bfd_elf_validate_reloc (abfd, ptr))
14335 {
14336 _bfd_error_handler
14337 /* xgettext:c-format */
14338 (_("%pB(%pA): error: secondary reloc %zu"
14339 " references a deleted symbol"),
14340 abfd, relsec, idx);
14341 bfd_set_error (bfd_error_bad_value);
14342 result = false;
14343 n = 0;
14344 }
14345 }
14346
14347 src_rela.r_offset = ptr->address + addr_offset;
14348 if (ptr->howto == NULL)
14349 {
14350 _bfd_error_handler
14351 /* xgettext:c-format */
14352 (_("%pB(%pA): error: secondary reloc %zu"
14353 " is of an unknown type"),
14354 abfd, relsec, idx);
14355 bfd_set_error (bfd_error_bad_value);
14356 result = false;
14357 src_rela.r_info = r_info (0, 0);
14358 }
14359 else
14360 src_rela.r_info = r_info (n, ptr->howto->type);
14361 src_rela.r_addend = ptr->addend;
14362
14363 if (entsize == ebd->s->sizeof_rel)
14364 ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
14365 else /* entsize == ebd->s->sizeof_rela */
14366 ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
14367 }
14368 }
14369 }
14370
14371 return result;
14372 }
14373
14374 /* Mmap in section contents. If FINAL_LINK is false, set *BUF to NULL
14375 before calling bfd_get_full_section_contents. */
14376
14377 static bool
14378 elf_mmap_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **buf,
14379 bool final_link)
14380 {
14381 #ifdef USE_MMAP
14382 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14383 if (bed->use_mmap
14384 && sec->compress_status == COMPRESS_SECTION_NONE
14385 && (sec->flags & SEC_LINKER_CREATED) == 0)
14386 {
14387 /* Use mmap only if section size >= the minimum mmap section
14388 size. */
14389 size_t readsz = bfd_get_section_limit_octets (abfd, sec);
14390 size_t allocsz = bfd_get_section_alloc_size (abfd, sec);
14391 if (readsz == allocsz && readsz >= _bfd_minimum_mmap_size)
14392 {
14393 if (sec->contents != NULL)
14394 {
14395 if (!sec->mmapped_p)
14396 abort ();
14397 *buf = sec->contents;
14398 return true;
14399 }
14400 if (sec->mmapped_p)
14401 abort ();
14402 sec->mmapped_p = 1;
14403
14404 /* Never use the preallocated buffer if mmapp is used. */
14405 *buf = NULL;
14406 }
14407 }
14408 #endif
14409 /* NB: When this is called from elf_link_input_bfd, FINAL_LINK is
14410 true. If FINAL_LINK is false, *BUF is set to the preallocated
14411 buffer if USE_MMAP is undefined and *BUF is set to NULL if
14412 USE_MMAP is defined. */
14413 if (!final_link)
14414 *buf = NULL;
14415 bool ret = bfd_get_full_section_contents (abfd, sec, buf);
14416 if (ret && sec->mmapped_p)
14417 *buf = sec->contents;
14418 return ret;
14419 }
14420
14421 /* Mmap in section contents. */
14422
14423 bool
14424 _bfd_elf_mmap_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **buf)
14425 {
14426 return elf_mmap_section_contents (abfd, sec, buf, false);
14427 }
14428
14429 /* Mmap in the full section contents for the final link. */
14430
14431 bool
14432 _bfd_elf_link_mmap_section_contents (bfd *abfd, sec_ptr sec,
14433 bfd_byte **buf)
14434 {
14435 return elf_mmap_section_contents (abfd, sec, buf, true);
14436 }
14437
14438 /* Munmap section contents. */
14439
14440 void
14441 _bfd_elf_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED,
14442 void *contents)
14443 {
14444 /* NB: Since _bfd_elf_munmap_section_contents is called like free,
14445 CONTENTS may be NULL. */
14446 if (contents == NULL)
14447 return;
14448
14449 #ifdef USE_MMAP
14450 if (sec->mmapped_p)
14451 {
14452 /* _bfd_elf_mmap_section_contents may return the previously
14453 mapped section contents. Munmap the section contents only
14454 if they haven't been cached. */
14455 if (elf_section_data (sec)->this_hdr.contents == contents)
14456 return;
14457
14458 /* When _bfd_elf_mmap_section_contents returns CONTENTS as
14459 malloced, CONTENTS_ADDR is set to NULL. */
14460 if (elf_section_data (sec)->contents_addr != NULL)
14461 {
14462 /* NB: CONTENTS_ADDR and CONTENTS_SIZE must be valid. */
14463 if (munmap (elf_section_data (sec)->contents_addr,
14464 elf_section_data (sec)->contents_size) != 0)
14465 abort ();
14466 sec->mmapped_p = 0;
14467 sec->contents = NULL;
14468 elf_section_data (sec)->contents_addr = NULL;
14469 elf_section_data (sec)->contents_size = 0;
14470 return;
14471 }
14472 }
14473 #endif
14474
14475 free (contents);
14476 }
14477
14478 /* Munmap the full section contents for the final link. */
14479
14480 void
14481 _bfd_elf_link_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED)
14482 {
14483 #ifdef USE_MMAP
14484 if (sec->mmapped_p && elf_section_data (sec)->contents_addr != NULL)
14485 {
14486 /* When _bfd_elf_link_mmap_section_contents returns CONTENTS as
14487 malloced, CONTENTS_ADDR is set to NULL. */
14488 /* NB: CONTENTS_ADDR and CONTENTS_SIZE must be valid. */
14489 if (munmap (elf_section_data (sec)->contents_addr,
14490 elf_section_data (sec)->contents_size) != 0)
14491 abort ();
14492 sec->mmapped_p = 0;
14493 sec->contents = NULL;
14494 elf_section_data (sec)->contents_addr = NULL;
14495 elf_section_data (sec)->contents_size = 0;
14496 }
14497 #endif
14498 }