]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - bfd/elf.c
ld: Support customized output section type
[thirdparty/binutils-gdb.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2
3 Copyright (C) 1993-2022 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 const unsigned char *name = (const unsigned char *) namearg;
200 unsigned long h = 0;
201 unsigned long g;
202 int ch;
203
204 while ((ch = *name++) != '\0')
205 {
206 h = (h << 4) + ch;
207 if ((g = (h & 0xf0000000)) != 0)
208 {
209 h ^= g >> 24;
210 /* The ELF ABI says `h &= ~g', but this is equivalent in
211 this case and on some machines one insn instead of two. */
212 h ^= g;
213 }
214 }
215 return h & 0xffffffff;
216 }
217
218 /* DT_GNU_HASH hash function. Do not change this function; you will
219 cause invalid hash tables to be generated. */
220
221 unsigned long
222 bfd_elf_gnu_hash (const char *namearg)
223 {
224 const unsigned char *name = (const unsigned char *) namearg;
225 unsigned long h = 5381;
226 unsigned char ch;
227
228 while ((ch = *name++) != '\0')
229 h = (h << 5) + h + ch;
230 return h & 0xffffffff;
231 }
232
233 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
234 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
235 bool
236 bfd_elf_allocate_object (bfd *abfd,
237 size_t object_size,
238 enum elf_target_id object_id)
239 {
240 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
241 abfd->tdata.any = bfd_zalloc (abfd, object_size);
242 if (abfd->tdata.any == NULL)
243 return false;
244
245 elf_object_id (abfd) = object_id;
246 if (abfd->direction != read_direction)
247 {
248 struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
249 if (o == NULL)
250 return false;
251 elf_tdata (abfd)->o = o;
252 elf_program_header_size (abfd) = (bfd_size_type) -1;
253 }
254 return true;
255 }
256
257
258 bool
259 bfd_elf_make_object (bfd *abfd)
260 {
261 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
262 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
263 bed->target_id);
264 }
265
266 bool
267 bfd_elf_mkcorefile (bfd *abfd)
268 {
269 /* I think this can be done just like an object file. */
270 if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
271 return false;
272 elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
273 return elf_tdata (abfd)->core != NULL;
274 }
275
276 char *
277 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
278 {
279 Elf_Internal_Shdr **i_shdrp;
280 bfd_byte *shstrtab = NULL;
281 file_ptr offset;
282 bfd_size_type shstrtabsize;
283
284 i_shdrp = elf_elfsections (abfd);
285 if (i_shdrp == 0
286 || shindex >= elf_numsections (abfd)
287 || i_shdrp[shindex] == 0)
288 return NULL;
289
290 shstrtab = i_shdrp[shindex]->contents;
291 if (shstrtab == NULL)
292 {
293 /* No cached one, attempt to read, and cache what we read. */
294 offset = i_shdrp[shindex]->sh_offset;
295 shstrtabsize = i_shdrp[shindex]->sh_size;
296
297 /* Allocate and clear an extra byte at the end, to prevent crashes
298 in case the string table is not terminated. */
299 if (shstrtabsize + 1 <= 1
300 || bfd_seek (abfd, offset, SEEK_SET) != 0
301 || (shstrtab = _bfd_alloc_and_read (abfd, shstrtabsize + 1,
302 shstrtabsize)) == NULL)
303 {
304 /* Once we've failed to read it, make sure we don't keep
305 trying. Otherwise, we'll keep allocating space for
306 the string table over and over. */
307 i_shdrp[shindex]->sh_size = 0;
308 }
309 else
310 shstrtab[shstrtabsize] = '\0';
311 i_shdrp[shindex]->contents = shstrtab;
312 }
313 return (char *) shstrtab;
314 }
315
316 char *
317 bfd_elf_string_from_elf_section (bfd *abfd,
318 unsigned int shindex,
319 unsigned int strindex)
320 {
321 Elf_Internal_Shdr *hdr;
322
323 if (strindex == 0)
324 return "";
325
326 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
327 return NULL;
328
329 hdr = elf_elfsections (abfd)[shindex];
330
331 if (hdr->contents == NULL)
332 {
333 if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
334 {
335 /* PR 17512: file: f057ec89. */
336 /* xgettext:c-format */
337 _bfd_error_handler (_("%pB: attempt to load strings from"
338 " a non-string section (number %d)"),
339 abfd, shindex);
340 return NULL;
341 }
342
343 if (bfd_elf_get_str_section (abfd, shindex) == NULL)
344 return NULL;
345 }
346 else
347 {
348 /* PR 24273: The string section's contents may have already
349 been loaded elsewhere, eg because a corrupt file has the
350 string section index in the ELF header pointing at a group
351 section. So be paranoid, and test that the last byte of
352 the section is zero. */
353 if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
354 return NULL;
355 }
356
357 if (strindex >= hdr->sh_size)
358 {
359 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
360 _bfd_error_handler
361 /* xgettext:c-format */
362 (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
363 abfd, strindex, (uint64_t) hdr->sh_size,
364 (shindex == shstrndx && strindex == hdr->sh_name
365 ? ".shstrtab"
366 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
367 return NULL;
368 }
369
370 return ((char *) hdr->contents) + strindex;
371 }
372
373 /* Read and convert symbols to internal format.
374 SYMCOUNT specifies the number of symbols to read, starting from
375 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
376 are non-NULL, they are used to store the internal symbols, external
377 symbols, and symbol section index extensions, respectively.
378 Returns a pointer to the internal symbol buffer (malloced if necessary)
379 or NULL if there were no symbols or some kind of problem. */
380
381 Elf_Internal_Sym *
382 bfd_elf_get_elf_syms (bfd *ibfd,
383 Elf_Internal_Shdr *symtab_hdr,
384 size_t symcount,
385 size_t symoffset,
386 Elf_Internal_Sym *intsym_buf,
387 void *extsym_buf,
388 Elf_External_Sym_Shndx *extshndx_buf)
389 {
390 Elf_Internal_Shdr *shndx_hdr;
391 void *alloc_ext;
392 const bfd_byte *esym;
393 Elf_External_Sym_Shndx *alloc_extshndx;
394 Elf_External_Sym_Shndx *shndx;
395 Elf_Internal_Sym *alloc_intsym;
396 Elf_Internal_Sym *isym;
397 Elf_Internal_Sym *isymend;
398 const struct elf_backend_data *bed;
399 size_t extsym_size;
400 size_t amt;
401 file_ptr pos;
402
403 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
404 abort ();
405
406 if (symcount == 0)
407 return intsym_buf;
408
409 /* Normal syms might have section extension entries. */
410 shndx_hdr = NULL;
411 if (elf_symtab_shndx_list (ibfd) != NULL)
412 {
413 elf_section_list * entry;
414 Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
415
416 /* Find an index section that is linked to this symtab section. */
417 for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
418 {
419 /* PR 20063. */
420 if (entry->hdr.sh_link >= elf_numsections (ibfd))
421 continue;
422
423 if (sections[entry->hdr.sh_link] == symtab_hdr)
424 {
425 shndx_hdr = & entry->hdr;
426 break;
427 };
428 }
429
430 if (shndx_hdr == NULL)
431 {
432 if (symtab_hdr == & elf_symtab_hdr (ibfd))
433 /* Not really accurate, but this was how the old code used to work. */
434 shndx_hdr = & elf_symtab_shndx_list (ibfd)->hdr;
435 /* Otherwise we do nothing. The assumption is that
436 the index table will not be needed. */
437 }
438 }
439
440 /* Read the symbols. */
441 alloc_ext = NULL;
442 alloc_extshndx = NULL;
443 alloc_intsym = NULL;
444 bed = get_elf_backend_data (ibfd);
445 extsym_size = bed->s->sizeof_sym;
446 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
447 {
448 bfd_set_error (bfd_error_file_too_big);
449 intsym_buf = NULL;
450 goto out;
451 }
452 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
453 if (extsym_buf == NULL)
454 {
455 alloc_ext = bfd_malloc (amt);
456 extsym_buf = alloc_ext;
457 }
458 if (extsym_buf == NULL
459 || bfd_seek (ibfd, pos, SEEK_SET) != 0
460 || bfd_bread (extsym_buf, amt, ibfd) != amt)
461 {
462 intsym_buf = NULL;
463 goto out;
464 }
465
466 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
467 extshndx_buf = NULL;
468 else
469 {
470 if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
471 {
472 bfd_set_error (bfd_error_file_too_big);
473 intsym_buf = NULL;
474 goto out;
475 }
476 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
477 if (extshndx_buf == NULL)
478 {
479 alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
480 extshndx_buf = alloc_extshndx;
481 }
482 if (extshndx_buf == NULL
483 || bfd_seek (ibfd, pos, SEEK_SET) != 0
484 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
485 {
486 intsym_buf = NULL;
487 goto out;
488 }
489 }
490
491 if (intsym_buf == NULL)
492 {
493 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
494 {
495 bfd_set_error (bfd_error_file_too_big);
496 goto out;
497 }
498 alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
499 intsym_buf = alloc_intsym;
500 if (intsym_buf == NULL)
501 goto out;
502 }
503
504 /* Convert the symbols to internal form. */
505 isymend = intsym_buf + symcount;
506 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
507 shndx = extshndx_buf;
508 isym < isymend;
509 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
510 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
511 {
512 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
513 /* xgettext:c-format */
514 _bfd_error_handler (_("%pB symbol number %lu references"
515 " nonexistent SHT_SYMTAB_SHNDX section"),
516 ibfd, (unsigned long) symoffset);
517 free (alloc_intsym);
518 intsym_buf = NULL;
519 goto out;
520 }
521
522 out:
523 free (alloc_ext);
524 free (alloc_extshndx);
525
526 return intsym_buf;
527 }
528
529 /* Look up a symbol name. */
530 const char *
531 bfd_elf_sym_name (bfd *abfd,
532 Elf_Internal_Shdr *symtab_hdr,
533 Elf_Internal_Sym *isym,
534 asection *sym_sec)
535 {
536 const char *name;
537 unsigned int iname = isym->st_name;
538 unsigned int shindex = symtab_hdr->sh_link;
539
540 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
541 /* Check for a bogus st_shndx to avoid crashing. */
542 && isym->st_shndx < elf_numsections (abfd))
543 {
544 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
545 shindex = elf_elfheader (abfd)->e_shstrndx;
546 }
547
548 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
549 if (name == NULL)
550 name = "(null)";
551 else if (sym_sec && *name == '\0')
552 name = bfd_section_name (sym_sec);
553
554 return name;
555 }
556
557 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
558 sections. The first element is the flags, the rest are section
559 pointers. */
560
561 typedef union elf_internal_group {
562 Elf_Internal_Shdr *shdr;
563 unsigned int flags;
564 } Elf_Internal_Group;
565
566 /* Return the name of the group signature symbol. Why isn't the
567 signature just a string? */
568
569 static const char *
570 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
571 {
572 Elf_Internal_Shdr *hdr;
573 unsigned char esym[sizeof (Elf64_External_Sym)];
574 Elf_External_Sym_Shndx eshndx;
575 Elf_Internal_Sym isym;
576
577 /* First we need to ensure the symbol table is available. Make sure
578 that it is a symbol table section. */
579 if (ghdr->sh_link >= elf_numsections (abfd))
580 return NULL;
581 hdr = elf_elfsections (abfd) [ghdr->sh_link];
582 if (hdr->sh_type != SHT_SYMTAB
583 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
584 return NULL;
585
586 /* Go read the symbol. */
587 hdr = &elf_tdata (abfd)->symtab_hdr;
588 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
589 &isym, esym, &eshndx) == NULL)
590 return NULL;
591
592 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
593 }
594
595 /* Set next_in_group list pointer, and group name for NEWSECT. */
596
597 static bool
598 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
599 {
600 unsigned int num_group = elf_tdata (abfd)->num_group;
601
602 /* If num_group is zero, read in all SHT_GROUP sections. The count
603 is set to -1 if there are no SHT_GROUP sections. */
604 if (num_group == 0)
605 {
606 unsigned int i, shnum;
607
608 /* First count the number of groups. If we have a SHT_GROUP
609 section with just a flag word (ie. sh_size is 4), ignore it. */
610 shnum = elf_numsections (abfd);
611 num_group = 0;
612
613 #define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize) \
614 ( (shdr)->sh_type == SHT_GROUP \
615 && (shdr)->sh_size >= minsize \
616 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
617 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
618
619 for (i = 0; i < shnum; i++)
620 {
621 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
622
623 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
624 num_group += 1;
625 }
626
627 if (num_group == 0)
628 {
629 num_group = (unsigned) -1;
630 elf_tdata (abfd)->num_group = num_group;
631 elf_tdata (abfd)->group_sect_ptr = NULL;
632 }
633 else
634 {
635 /* We keep a list of elf section headers for group sections,
636 so we can find them quickly. */
637 size_t amt;
638
639 elf_tdata (abfd)->num_group = num_group;
640 amt = num_group * sizeof (Elf_Internal_Shdr *);
641 elf_tdata (abfd)->group_sect_ptr
642 = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
643 if (elf_tdata (abfd)->group_sect_ptr == NULL)
644 return false;
645 num_group = 0;
646
647 for (i = 0; i < shnum; i++)
648 {
649 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
650
651 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
652 {
653 unsigned char *src;
654 Elf_Internal_Group *dest;
655
656 /* Make sure the group section has a BFD section
657 attached to it. */
658 if (!bfd_section_from_shdr (abfd, i))
659 return false;
660
661 /* Add to list of sections. */
662 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
663 num_group += 1;
664
665 /* Read the raw contents. */
666 BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
667 shdr->contents = NULL;
668 if (_bfd_mul_overflow (shdr->sh_size,
669 sizeof (*dest) / 4, &amt)
670 || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
671 || !(shdr->contents
672 = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
673 {
674 _bfd_error_handler
675 /* xgettext:c-format */
676 (_("%pB: invalid size field in group section"
677 " header: %#" PRIx64 ""),
678 abfd, (uint64_t) shdr->sh_size);
679 bfd_set_error (bfd_error_bad_value);
680 -- num_group;
681 continue;
682 }
683
684 /* Translate raw contents, a flag word followed by an
685 array of elf section indices all in target byte order,
686 to the flag word followed by an array of elf section
687 pointers. */
688 src = shdr->contents + shdr->sh_size;
689 dest = (Elf_Internal_Group *) (shdr->contents + amt);
690
691 while (1)
692 {
693 unsigned int idx;
694
695 src -= 4;
696 --dest;
697 idx = H_GET_32 (abfd, src);
698 if (src == shdr->contents)
699 {
700 dest->shdr = NULL;
701 dest->flags = idx;
702 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
703 shdr->bfd_section->flags
704 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
705 break;
706 }
707 if (idx < shnum)
708 {
709 dest->shdr = elf_elfsections (abfd)[idx];
710 /* PR binutils/23199: All sections in a
711 section group should be marked with
712 SHF_GROUP. But some tools generate
713 broken objects without SHF_GROUP. Fix
714 them up here. */
715 dest->shdr->sh_flags |= SHF_GROUP;
716 }
717 if (idx >= shnum
718 || dest->shdr->sh_type == SHT_GROUP)
719 {
720 _bfd_error_handler
721 (_("%pB: invalid entry in SHT_GROUP section [%u]"),
722 abfd, i);
723 dest->shdr = NULL;
724 }
725 }
726 }
727 }
728
729 /* PR 17510: Corrupt binaries might contain invalid groups. */
730 if (num_group != (unsigned) elf_tdata (abfd)->num_group)
731 {
732 elf_tdata (abfd)->num_group = num_group;
733
734 /* If all groups are invalid then fail. */
735 if (num_group == 0)
736 {
737 elf_tdata (abfd)->group_sect_ptr = NULL;
738 elf_tdata (abfd)->num_group = num_group = -1;
739 _bfd_error_handler
740 (_("%pB: no valid group sections found"), abfd);
741 bfd_set_error (bfd_error_bad_value);
742 }
743 }
744 }
745 }
746
747 if (num_group != (unsigned) -1)
748 {
749 unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
750 unsigned int j;
751
752 for (j = 0; j < num_group; j++)
753 {
754 /* Begin search from previous found group. */
755 unsigned i = (j + search_offset) % num_group;
756
757 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
758 Elf_Internal_Group *idx;
759 bfd_size_type n_elt;
760
761 if (shdr == NULL)
762 continue;
763
764 idx = (Elf_Internal_Group *) shdr->contents;
765 if (idx == NULL || shdr->sh_size < 4)
766 {
767 /* See PR 21957 for a reproducer. */
768 /* xgettext:c-format */
769 _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
770 abfd, shdr->bfd_section);
771 elf_tdata (abfd)->group_sect_ptr[i] = NULL;
772 bfd_set_error (bfd_error_bad_value);
773 return false;
774 }
775 n_elt = shdr->sh_size / 4;
776
777 /* Look through this group's sections to see if current
778 section is a member. */
779 while (--n_elt != 0)
780 if ((++idx)->shdr == hdr)
781 {
782 asection *s = NULL;
783
784 /* We are a member of this group. Go looking through
785 other members to see if any others are linked via
786 next_in_group. */
787 idx = (Elf_Internal_Group *) shdr->contents;
788 n_elt = shdr->sh_size / 4;
789 while (--n_elt != 0)
790 if ((++idx)->shdr != NULL
791 && (s = idx->shdr->bfd_section) != NULL
792 && elf_next_in_group (s) != NULL)
793 break;
794 if (n_elt != 0)
795 {
796 /* Snarf the group name from other member, and
797 insert current section in circular list. */
798 elf_group_name (newsect) = elf_group_name (s);
799 elf_next_in_group (newsect) = elf_next_in_group (s);
800 elf_next_in_group (s) = newsect;
801 }
802 else
803 {
804 const char *gname;
805
806 gname = group_signature (abfd, shdr);
807 if (gname == NULL)
808 return false;
809 elf_group_name (newsect) = gname;
810
811 /* Start a circular list with one element. */
812 elf_next_in_group (newsect) = newsect;
813 }
814
815 /* If the group section has been created, point to the
816 new member. */
817 if (shdr->bfd_section != NULL)
818 elf_next_in_group (shdr->bfd_section) = newsect;
819
820 elf_tdata (abfd)->group_search_offset = i;
821 j = num_group - 1;
822 break;
823 }
824 }
825 }
826
827 if (elf_group_name (newsect) == NULL)
828 {
829 /* xgettext:c-format */
830 _bfd_error_handler (_("%pB: no group info for section '%pA'"),
831 abfd, newsect);
832 return false;
833 }
834 return true;
835 }
836
837 bool
838 _bfd_elf_setup_sections (bfd *abfd)
839 {
840 unsigned int i;
841 unsigned int num_group = elf_tdata (abfd)->num_group;
842 bool result = true;
843 asection *s;
844
845 /* Process SHF_LINK_ORDER. */
846 for (s = abfd->sections; s != NULL; s = s->next)
847 {
848 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
849 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
850 {
851 unsigned int elfsec = this_hdr->sh_link;
852 /* An sh_link value of 0 is now allowed. It indicates that linked
853 to section has already been discarded, but that the current
854 section has been retained for some other reason. This linking
855 section is still a candidate for later garbage collection
856 however. */
857 if (elfsec == 0)
858 {
859 elf_linked_to_section (s) = NULL;
860 }
861 else
862 {
863 asection *linksec = NULL;
864
865 if (elfsec < elf_numsections (abfd))
866 {
867 this_hdr = elf_elfsections (abfd)[elfsec];
868 linksec = this_hdr->bfd_section;
869 }
870
871 /* PR 1991, 2008:
872 Some strip/objcopy may leave an incorrect value in
873 sh_link. We don't want to proceed. */
874 if (linksec == NULL)
875 {
876 _bfd_error_handler
877 /* xgettext:c-format */
878 (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
879 s->owner, elfsec, s);
880 result = false;
881 }
882
883 elf_linked_to_section (s) = linksec;
884 }
885 }
886 else if (this_hdr->sh_type == SHT_GROUP
887 && elf_next_in_group (s) == NULL)
888 {
889 _bfd_error_handler
890 /* xgettext:c-format */
891 (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
892 abfd, elf_section_data (s)->this_idx);
893 result = false;
894 }
895 }
896
897 /* Process section groups. */
898 if (num_group == (unsigned) -1)
899 return result;
900
901 for (i = 0; i < num_group; i++)
902 {
903 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
904 Elf_Internal_Group *idx;
905 unsigned int n_elt;
906
907 /* PR binutils/18758: Beware of corrupt binaries with invalid group data. */
908 if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
909 {
910 _bfd_error_handler
911 /* xgettext:c-format */
912 (_("%pB: section group entry number %u is corrupt"),
913 abfd, i);
914 result = false;
915 continue;
916 }
917
918 idx = (Elf_Internal_Group *) shdr->contents;
919 n_elt = shdr->sh_size / 4;
920
921 while (--n_elt != 0)
922 {
923 ++ idx;
924
925 if (idx->shdr == NULL)
926 continue;
927 else if (idx->shdr->bfd_section)
928 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
929 else if (idx->shdr->sh_type != SHT_RELA
930 && idx->shdr->sh_type != SHT_REL)
931 {
932 /* There are some unknown sections in the group. */
933 _bfd_error_handler
934 /* xgettext:c-format */
935 (_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
936 abfd,
937 idx->shdr->sh_type,
938 bfd_elf_string_from_elf_section (abfd,
939 (elf_elfheader (abfd)
940 ->e_shstrndx),
941 idx->shdr->sh_name),
942 shdr->bfd_section);
943 result = false;
944 }
945 }
946 }
947
948 return result;
949 }
950
951 bool
952 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
953 {
954 return elf_next_in_group (sec) != NULL;
955 }
956
957 const char *
958 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
959 {
960 if (elf_sec_group (sec) != NULL)
961 return elf_group_name (sec);
962 return NULL;
963 }
964
965 static char *
966 convert_debug_to_zdebug (bfd *abfd, const char *name)
967 {
968 unsigned int len = strlen (name);
969 char *new_name = bfd_alloc (abfd, len + 2);
970 if (new_name == NULL)
971 return NULL;
972 new_name[0] = '.';
973 new_name[1] = 'z';
974 memcpy (new_name + 2, name + 1, len);
975 return new_name;
976 }
977
978 static char *
979 convert_zdebug_to_debug (bfd *abfd, const char *name)
980 {
981 unsigned int len = strlen (name);
982 char *new_name = bfd_alloc (abfd, len);
983 if (new_name == NULL)
984 return NULL;
985 new_name[0] = '.';
986 memcpy (new_name + 1, name + 2, len - 1);
987 return new_name;
988 }
989
990 /* This a copy of lto_section defined in GCC (lto-streamer.h). */
991
992 struct lto_section
993 {
994 int16_t major_version;
995 int16_t minor_version;
996 unsigned char slim_object;
997
998 /* Flags is a private field that is not defined publicly. */
999 uint16_t flags;
1000 };
1001
1002 /* Make a BFD section from an ELF section. We store a pointer to the
1003 BFD section in the bfd_section field of the header. */
1004
1005 bool
1006 _bfd_elf_make_section_from_shdr (bfd *abfd,
1007 Elf_Internal_Shdr *hdr,
1008 const char *name,
1009 int shindex)
1010 {
1011 asection *newsect;
1012 flagword flags;
1013 const struct elf_backend_data *bed;
1014 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
1015
1016 if (hdr->bfd_section != NULL)
1017 return true;
1018
1019 newsect = bfd_make_section_anyway (abfd, name);
1020 if (newsect == NULL)
1021 return false;
1022
1023 hdr->bfd_section = newsect;
1024 elf_section_data (newsect)->this_hdr = *hdr;
1025 elf_section_data (newsect)->this_idx = shindex;
1026
1027 /* Always use the real type/flags. */
1028 elf_section_type (newsect) = hdr->sh_type;
1029 elf_section_flags (newsect) = hdr->sh_flags;
1030
1031 newsect->filepos = hdr->sh_offset;
1032
1033 flags = SEC_NO_FLAGS;
1034 if (hdr->sh_type != SHT_NOBITS)
1035 flags |= SEC_HAS_CONTENTS;
1036 if (hdr->sh_type == SHT_GROUP)
1037 flags |= SEC_GROUP;
1038 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1039 {
1040 flags |= SEC_ALLOC;
1041 if (hdr->sh_type != SHT_NOBITS)
1042 flags |= SEC_LOAD;
1043 }
1044 if ((hdr->sh_flags & SHF_WRITE) == 0)
1045 flags |= SEC_READONLY;
1046 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1047 flags |= SEC_CODE;
1048 else if ((flags & SEC_LOAD) != 0)
1049 flags |= SEC_DATA;
1050 if ((hdr->sh_flags & SHF_MERGE) != 0)
1051 {
1052 flags |= SEC_MERGE;
1053 newsect->entsize = hdr->sh_entsize;
1054 }
1055 if ((hdr->sh_flags & SHF_STRINGS) != 0)
1056 flags |= SEC_STRINGS;
1057 if (hdr->sh_flags & SHF_GROUP)
1058 if (!setup_group (abfd, hdr, newsect))
1059 return false;
1060 if ((hdr->sh_flags & SHF_TLS) != 0)
1061 flags |= SEC_THREAD_LOCAL;
1062 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1063 flags |= SEC_EXCLUDE;
1064
1065 switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1066 {
1067 /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1068 but binutils as of 2019-07-23 did not set the EI_OSABI header
1069 byte. */
1070 case ELFOSABI_GNU:
1071 case ELFOSABI_FREEBSD:
1072 if ((hdr->sh_flags & SHF_GNU_RETAIN) != 0)
1073 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_retain;
1074 /* Fall through */
1075 case ELFOSABI_NONE:
1076 if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1077 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1078 break;
1079 }
1080
1081 if ((flags & SEC_ALLOC) == 0)
1082 {
1083 /* The debugging sections appear to be recognized only by name,
1084 not any sort of flag. Their SEC_ALLOC bits are cleared. */
1085 if (name [0] == '.')
1086 {
1087 if (startswith (name, ".debug")
1088 || startswith (name, ".gnu.debuglto_.debug_")
1089 || startswith (name, ".gnu.linkonce.wi.")
1090 || startswith (name, ".zdebug"))
1091 flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1092 else if (startswith (name, GNU_BUILD_ATTRS_SECTION_NAME)
1093 || startswith (name, ".note.gnu"))
1094 {
1095 flags |= SEC_ELF_OCTETS;
1096 opb = 1;
1097 }
1098 else if (startswith (name, ".line")
1099 || startswith (name, ".stab")
1100 || strcmp (name, ".gdb_index") == 0)
1101 flags |= SEC_DEBUGGING;
1102 }
1103 }
1104
1105 if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
1106 || !bfd_set_section_size (newsect, hdr->sh_size)
1107 || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
1108 & -hdr->sh_addralign)))
1109 return false;
1110
1111 /* As a GNU extension, if the name begins with .gnu.linkonce, we
1112 only link a single copy of the section. This is used to support
1113 g++. g++ will emit each template expansion in its own section.
1114 The symbols will be defined as weak, so that multiple definitions
1115 are permitted. The GNU linker extension is to actually discard
1116 all but one of the sections. */
1117 if (startswith (name, ".gnu.linkonce")
1118 && elf_next_in_group (newsect) == NULL)
1119 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1120
1121 if (!bfd_set_section_flags (newsect, flags))
1122 return false;
1123
1124 bed = get_elf_backend_data (abfd);
1125 if (bed->elf_backend_section_flags)
1126 if (!bed->elf_backend_section_flags (hdr))
1127 return false;
1128
1129 /* We do not parse the PT_NOTE segments as we are interested even in the
1130 separate debug info files which may have the segments offsets corrupted.
1131 PT_NOTEs from the core files are currently not parsed using BFD. */
1132 if (hdr->sh_type == SHT_NOTE)
1133 {
1134 bfd_byte *contents;
1135
1136 if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
1137 return false;
1138
1139 elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1140 hdr->sh_offset, hdr->sh_addralign);
1141 free (contents);
1142 }
1143
1144 if ((newsect->flags & SEC_ALLOC) != 0)
1145 {
1146 Elf_Internal_Phdr *phdr;
1147 unsigned int i, nload;
1148
1149 /* Some ELF linkers produce binaries with all the program header
1150 p_paddr fields zero. If we have such a binary with more than
1151 one PT_LOAD header, then leave the section lma equal to vma
1152 so that we don't create sections with overlapping lma. */
1153 phdr = elf_tdata (abfd)->phdr;
1154 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1155 if (phdr->p_paddr != 0)
1156 break;
1157 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1158 ++nload;
1159 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1160 return true;
1161
1162 phdr = elf_tdata (abfd)->phdr;
1163 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1164 {
1165 if (((phdr->p_type == PT_LOAD
1166 && (hdr->sh_flags & SHF_TLS) == 0)
1167 || phdr->p_type == PT_TLS)
1168 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1169 {
1170 if ((newsect->flags & SEC_LOAD) == 0)
1171 newsect->lma = (phdr->p_paddr
1172 + hdr->sh_addr - phdr->p_vaddr) / opb;
1173 else
1174 /* We used to use the same adjustment for SEC_LOAD
1175 sections, but that doesn't work if the segment
1176 is packed with code from multiple VMAs.
1177 Instead we calculate the section LMA based on
1178 the segment LMA. It is assumed that the
1179 segment will contain sections with contiguous
1180 LMAs, even if the VMAs are not. */
1181 newsect->lma = (phdr->p_paddr
1182 + hdr->sh_offset - phdr->p_offset) / opb;
1183
1184 /* With contiguous segments, we can't tell from file
1185 offsets whether a section with zero size should
1186 be placed at the end of one segment or the
1187 beginning of the next. Decide based on vaddr. */
1188 if (hdr->sh_addr >= phdr->p_vaddr
1189 && (hdr->sh_addr + hdr->sh_size
1190 <= phdr->p_vaddr + phdr->p_memsz))
1191 break;
1192 }
1193 }
1194 }
1195
1196 /* Compress/decompress DWARF debug sections with names: .debug_* and
1197 .zdebug_*, after the section flags is set. */
1198 if ((newsect->flags & SEC_DEBUGGING)
1199 && ((name[1] == 'd' && name[6] == '_')
1200 || (name[1] == 'z' && name[7] == '_')))
1201 {
1202 enum { nothing, compress, decompress } action = nothing;
1203 int compression_header_size;
1204 bfd_size_type uncompressed_size;
1205 unsigned int uncompressed_align_power;
1206 bool compressed
1207 = bfd_is_section_compressed_with_header (abfd, newsect,
1208 &compression_header_size,
1209 &uncompressed_size,
1210 &uncompressed_align_power);
1211 if (compressed)
1212 {
1213 /* Compressed section. Check if we should decompress. */
1214 if ((abfd->flags & BFD_DECOMPRESS))
1215 action = decompress;
1216 }
1217
1218 /* Compress the uncompressed section or convert from/to .zdebug*
1219 section. Check if we should compress. */
1220 if (action == nothing)
1221 {
1222 if (newsect->size != 0
1223 && (abfd->flags & BFD_COMPRESS)
1224 && compression_header_size >= 0
1225 && uncompressed_size > 0
1226 && (!compressed
1227 || ((compression_header_size > 0)
1228 != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
1229 action = compress;
1230 else
1231 return true;
1232 }
1233
1234 if (action == compress)
1235 {
1236 if (!bfd_init_section_compress_status (abfd, newsect))
1237 {
1238 _bfd_error_handler
1239 /* xgettext:c-format */
1240 (_("%pB: unable to initialize compress status for section %s"),
1241 abfd, name);
1242 return false;
1243 }
1244 }
1245 else
1246 {
1247 if (!bfd_init_section_decompress_status (abfd, newsect))
1248 {
1249 _bfd_error_handler
1250 /* xgettext:c-format */
1251 (_("%pB: unable to initialize decompress status for section %s"),
1252 abfd, name);
1253 return false;
1254 }
1255 }
1256
1257 if (abfd->is_linker_input)
1258 {
1259 if (name[1] == 'z'
1260 && (action == decompress
1261 || (action == compress
1262 && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
1263 {
1264 /* Convert section name from .zdebug_* to .debug_* so
1265 that linker will consider this section as a debug
1266 section. */
1267 char *new_name = convert_zdebug_to_debug (abfd, name);
1268 if (new_name == NULL)
1269 return false;
1270 bfd_rename_section (newsect, new_name);
1271 }
1272 }
1273 else
1274 /* For objdump, don't rename the section. For objcopy, delay
1275 section rename to elf_fake_sections. */
1276 newsect->flags |= SEC_ELF_RENAME;
1277 }
1278
1279 /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
1280 section. */
1281 if (startswith (name, ".gnu.lto_.lto."))
1282 {
1283 struct lto_section lsection;
1284 if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
1285 sizeof (struct lto_section)))
1286 abfd->lto_slim_object = lsection.slim_object;
1287 }
1288
1289 return true;
1290 }
1291
1292 const char *const bfd_elf_section_type_names[] =
1293 {
1294 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1295 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1296 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1297 };
1298
1299 /* ELF relocs are against symbols. If we are producing relocatable
1300 output, and the reloc is against an external symbol, and nothing
1301 has given us any additional addend, the resulting reloc will also
1302 be against the same symbol. In such a case, we don't want to
1303 change anything about the way the reloc is handled, since it will
1304 all be done at final link time. Rather than put special case code
1305 into bfd_perform_relocation, all the reloc types use this howto
1306 function, or should call this function for relocatable output. */
1307
1308 bfd_reloc_status_type
1309 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1310 arelent *reloc_entry,
1311 asymbol *symbol,
1312 void *data ATTRIBUTE_UNUSED,
1313 asection *input_section,
1314 bfd *output_bfd,
1315 char **error_message ATTRIBUTE_UNUSED)
1316 {
1317 if (output_bfd != NULL
1318 && (symbol->flags & BSF_SECTION_SYM) == 0
1319 && (! reloc_entry->howto->partial_inplace
1320 || reloc_entry->addend == 0))
1321 {
1322 reloc_entry->address += input_section->output_offset;
1323 return bfd_reloc_ok;
1324 }
1325
1326 /* In some cases the relocation should be treated as output section
1327 relative, as when linking ELF DWARF into PE COFF. Many ELF
1328 targets lack section relative relocations and instead use
1329 ordinary absolute relocations for references between DWARF
1330 sections. That is arguably a bug in those targets but it happens
1331 to work for the usual case of linking to non-loaded ELF debug
1332 sections with VMAs forced to zero. PE COFF on the other hand
1333 doesn't allow a section VMA of zero. */
1334 if (output_bfd == NULL
1335 && !reloc_entry->howto->pc_relative
1336 && (symbol->section->flags & SEC_DEBUGGING) != 0
1337 && (input_section->flags & SEC_DEBUGGING) != 0)
1338 reloc_entry->addend -= symbol->section->output_section->vma;
1339
1340 return bfd_reloc_continue;
1341 }
1342 \f
1343 /* Returns TRUE if section A matches section B.
1344 Names, addresses and links may be different, but everything else
1345 should be the same. */
1346
1347 static bool
1348 section_match (const Elf_Internal_Shdr * a,
1349 const Elf_Internal_Shdr * b)
1350 {
1351 if (a->sh_type != b->sh_type
1352 || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1353 || a->sh_addralign != b->sh_addralign
1354 || a->sh_entsize != b->sh_entsize)
1355 return false;
1356 if (a->sh_type == SHT_SYMTAB
1357 || a->sh_type == SHT_STRTAB)
1358 return true;
1359 return a->sh_size == b->sh_size;
1360 }
1361
1362 /* Find a section in OBFD that has the same characteristics
1363 as IHEADER. Return the index of this section or SHN_UNDEF if
1364 none can be found. Check's section HINT first, as this is likely
1365 to be the correct section. */
1366
1367 static unsigned int
1368 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1369 const unsigned int hint)
1370 {
1371 Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1372 unsigned int i;
1373
1374 BFD_ASSERT (iheader != NULL);
1375
1376 /* See PR 20922 for a reproducer of the NULL test. */
1377 if (hint < elf_numsections (obfd)
1378 && oheaders[hint] != NULL
1379 && section_match (oheaders[hint], iheader))
1380 return hint;
1381
1382 for (i = 1; i < elf_numsections (obfd); i++)
1383 {
1384 Elf_Internal_Shdr * oheader = oheaders[i];
1385
1386 if (oheader == NULL)
1387 continue;
1388 if (section_match (oheader, iheader))
1389 /* FIXME: Do we care if there is a potential for
1390 multiple matches ? */
1391 return i;
1392 }
1393
1394 return SHN_UNDEF;
1395 }
1396
1397 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1398 Processor specific section, based upon a matching input section.
1399 Returns TRUE upon success, FALSE otherwise. */
1400
1401 static bool
1402 copy_special_section_fields (const bfd *ibfd,
1403 bfd *obfd,
1404 const Elf_Internal_Shdr *iheader,
1405 Elf_Internal_Shdr *oheader,
1406 const unsigned int secnum)
1407 {
1408 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1409 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1410 bool changed = false;
1411 unsigned int sh_link;
1412
1413 if (oheader->sh_type == SHT_NOBITS)
1414 {
1415 /* This is a feature for objcopy --only-keep-debug:
1416 When a section's type is changed to NOBITS, we preserve
1417 the sh_link and sh_info fields so that they can be
1418 matched up with the original.
1419
1420 Note: Strictly speaking these assignments are wrong.
1421 The sh_link and sh_info fields should point to the
1422 relevent sections in the output BFD, which may not be in
1423 the same location as they were in the input BFD. But
1424 the whole point of this action is to preserve the
1425 original values of the sh_link and sh_info fields, so
1426 that they can be matched up with the section headers in
1427 the original file. So strictly speaking we may be
1428 creating an invalid ELF file, but it is only for a file
1429 that just contains debug info and only for sections
1430 without any contents. */
1431 if (oheader->sh_link == 0)
1432 oheader->sh_link = iheader->sh_link;
1433 if (oheader->sh_info == 0)
1434 oheader->sh_info = iheader->sh_info;
1435 return true;
1436 }
1437
1438 /* Allow the target a chance to decide how these fields should be set. */
1439 if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1440 iheader, oheader))
1441 return true;
1442
1443 /* We have an iheader which might match oheader, and which has non-zero
1444 sh_info and/or sh_link fields. Attempt to follow those links and find
1445 the section in the output bfd which corresponds to the linked section
1446 in the input bfd. */
1447 if (iheader->sh_link != SHN_UNDEF)
1448 {
1449 /* See PR 20931 for a reproducer. */
1450 if (iheader->sh_link >= elf_numsections (ibfd))
1451 {
1452 _bfd_error_handler
1453 /* xgettext:c-format */
1454 (_("%pB: invalid sh_link field (%d) in section number %d"),
1455 ibfd, iheader->sh_link, secnum);
1456 return false;
1457 }
1458
1459 sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1460 if (sh_link != SHN_UNDEF)
1461 {
1462 oheader->sh_link = sh_link;
1463 changed = true;
1464 }
1465 else
1466 /* FIXME: Should we install iheader->sh_link
1467 if we could not find a match ? */
1468 _bfd_error_handler
1469 /* xgettext:c-format */
1470 (_("%pB: failed to find link section for section %d"), obfd, secnum);
1471 }
1472
1473 if (iheader->sh_info)
1474 {
1475 /* The sh_info field can hold arbitrary information, but if the
1476 SHF_LINK_INFO flag is set then it should be interpreted as a
1477 section index. */
1478 if (iheader->sh_flags & SHF_INFO_LINK)
1479 {
1480 sh_link = find_link (obfd, iheaders[iheader->sh_info],
1481 iheader->sh_info);
1482 if (sh_link != SHN_UNDEF)
1483 oheader->sh_flags |= SHF_INFO_LINK;
1484 }
1485 else
1486 /* No idea what it means - just copy it. */
1487 sh_link = iheader->sh_info;
1488
1489 if (sh_link != SHN_UNDEF)
1490 {
1491 oheader->sh_info = sh_link;
1492 changed = true;
1493 }
1494 else
1495 _bfd_error_handler
1496 /* xgettext:c-format */
1497 (_("%pB: failed to find info section for section %d"), obfd, secnum);
1498 }
1499
1500 return changed;
1501 }
1502
1503 /* Copy the program header and other data from one object module to
1504 another. */
1505
1506 bool
1507 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1508 {
1509 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1510 Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1511 const struct elf_backend_data *bed;
1512 unsigned int i;
1513
1514 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1515 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1516 return true;
1517
1518 if (!elf_flags_init (obfd))
1519 {
1520 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1521 elf_flags_init (obfd) = true;
1522 }
1523
1524 elf_gp (obfd) = elf_gp (ibfd);
1525
1526 /* Also copy the EI_OSABI field. */
1527 elf_elfheader (obfd)->e_ident[EI_OSABI] =
1528 elf_elfheader (ibfd)->e_ident[EI_OSABI];
1529
1530 /* If set, copy the EI_ABIVERSION field. */
1531 if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1532 elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1533 = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1534
1535 /* Copy object attributes. */
1536 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1537
1538 if (iheaders == NULL || oheaders == NULL)
1539 return true;
1540
1541 bed = get_elf_backend_data (obfd);
1542
1543 /* Possibly copy other fields in the section header. */
1544 for (i = 1; i < elf_numsections (obfd); i++)
1545 {
1546 unsigned int j;
1547 Elf_Internal_Shdr * oheader = oheaders[i];
1548
1549 /* Ignore ordinary sections. SHT_NOBITS sections are considered however
1550 because of a special case need for generating separate debug info
1551 files. See below for more details. */
1552 if (oheader == NULL
1553 || (oheader->sh_type != SHT_NOBITS
1554 && oheader->sh_type < SHT_LOOS))
1555 continue;
1556
1557 /* Ignore empty sections, and sections whose
1558 fields have already been initialised. */
1559 if (oheader->sh_size == 0
1560 || (oheader->sh_info != 0 && oheader->sh_link != 0))
1561 continue;
1562
1563 /* Scan for the matching section in the input bfd.
1564 First we try for a direct mapping between the input and output sections. */
1565 for (j = 1; j < elf_numsections (ibfd); j++)
1566 {
1567 const Elf_Internal_Shdr * iheader = iheaders[j];
1568
1569 if (iheader == NULL)
1570 continue;
1571
1572 if (oheader->bfd_section != NULL
1573 && iheader->bfd_section != NULL
1574 && iheader->bfd_section->output_section != NULL
1575 && iheader->bfd_section->output_section == oheader->bfd_section)
1576 {
1577 /* We have found a connection from the input section to the
1578 output section. Attempt to copy the header fields. If
1579 this fails then do not try any further sections - there
1580 should only be a one-to-one mapping between input and output. */
1581 if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1582 j = elf_numsections (ibfd);
1583 break;
1584 }
1585 }
1586
1587 if (j < elf_numsections (ibfd))
1588 continue;
1589
1590 /* That failed. So try to deduce the corresponding input section.
1591 Unfortunately we cannot compare names as the output string table
1592 is empty, so instead we check size, address and type. */
1593 for (j = 1; j < elf_numsections (ibfd); j++)
1594 {
1595 const Elf_Internal_Shdr * iheader = iheaders[j];
1596
1597 if (iheader == NULL)
1598 continue;
1599
1600 /* Try matching fields in the input section's header.
1601 Since --only-keep-debug turns all non-debug sections into
1602 SHT_NOBITS sections, the output SHT_NOBITS type matches any
1603 input type. */
1604 if ((oheader->sh_type == SHT_NOBITS
1605 || iheader->sh_type == oheader->sh_type)
1606 && (iheader->sh_flags & ~ SHF_INFO_LINK)
1607 == (oheader->sh_flags & ~ SHF_INFO_LINK)
1608 && iheader->sh_addralign == oheader->sh_addralign
1609 && iheader->sh_entsize == oheader->sh_entsize
1610 && iheader->sh_size == oheader->sh_size
1611 && iheader->sh_addr == oheader->sh_addr
1612 && (iheader->sh_info != oheader->sh_info
1613 || iheader->sh_link != oheader->sh_link))
1614 {
1615 if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1616 break;
1617 }
1618 }
1619
1620 if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1621 {
1622 /* Final attempt. Call the backend copy function
1623 with a NULL input section. */
1624 (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1625 NULL, oheader);
1626 }
1627 }
1628
1629 return true;
1630 }
1631
1632 static const char *
1633 get_segment_type (unsigned int p_type)
1634 {
1635 const char *pt;
1636 switch (p_type)
1637 {
1638 case PT_NULL: pt = "NULL"; break;
1639 case PT_LOAD: pt = "LOAD"; break;
1640 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1641 case PT_INTERP: pt = "INTERP"; break;
1642 case PT_NOTE: pt = "NOTE"; break;
1643 case PT_SHLIB: pt = "SHLIB"; break;
1644 case PT_PHDR: pt = "PHDR"; break;
1645 case PT_TLS: pt = "TLS"; break;
1646 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1647 case PT_GNU_STACK: pt = "STACK"; break;
1648 case PT_GNU_RELRO: pt = "RELRO"; break;
1649 default: pt = NULL; break;
1650 }
1651 return pt;
1652 }
1653
1654 /* Print out the program headers. */
1655
1656 bool
1657 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1658 {
1659 FILE *f = (FILE *) farg;
1660 Elf_Internal_Phdr *p;
1661 asection *s;
1662 bfd_byte *dynbuf = NULL;
1663
1664 p = elf_tdata (abfd)->phdr;
1665 if (p != NULL)
1666 {
1667 unsigned int i, c;
1668
1669 fprintf (f, _("\nProgram Header:\n"));
1670 c = elf_elfheader (abfd)->e_phnum;
1671 for (i = 0; i < c; i++, p++)
1672 {
1673 const char *pt = get_segment_type (p->p_type);
1674 char buf[20];
1675
1676 if (pt == NULL)
1677 {
1678 sprintf (buf, "0x%lx", p->p_type);
1679 pt = buf;
1680 }
1681 fprintf (f, "%8s off 0x", pt);
1682 bfd_fprintf_vma (abfd, f, p->p_offset);
1683 fprintf (f, " vaddr 0x");
1684 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1685 fprintf (f, " paddr 0x");
1686 bfd_fprintf_vma (abfd, f, p->p_paddr);
1687 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1688 fprintf (f, " filesz 0x");
1689 bfd_fprintf_vma (abfd, f, p->p_filesz);
1690 fprintf (f, " memsz 0x");
1691 bfd_fprintf_vma (abfd, f, p->p_memsz);
1692 fprintf (f, " flags %c%c%c",
1693 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1694 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1695 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1696 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1697 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1698 fprintf (f, "\n");
1699 }
1700 }
1701
1702 s = bfd_get_section_by_name (abfd, ".dynamic");
1703 if (s != NULL)
1704 {
1705 unsigned int elfsec;
1706 unsigned long shlink;
1707 bfd_byte *extdyn, *extdynend;
1708 size_t extdynsize;
1709 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1710
1711 fprintf (f, _("\nDynamic Section:\n"));
1712
1713 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1714 goto error_return;
1715
1716 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1717 if (elfsec == SHN_BAD)
1718 goto error_return;
1719 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1720
1721 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1722 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1723
1724 extdyn = dynbuf;
1725 /* PR 17512: file: 6f427532. */
1726 if (s->size < extdynsize)
1727 goto error_return;
1728 extdynend = extdyn + s->size;
1729 /* PR 17512: file: id:000006,sig:06,src:000000,op:flip4,pos:5664.
1730 Fix range check. */
1731 for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
1732 {
1733 Elf_Internal_Dyn dyn;
1734 const char *name = "";
1735 char ab[20];
1736 bool stringp;
1737 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1738
1739 (*swap_dyn_in) (abfd, extdyn, &dyn);
1740
1741 if (dyn.d_tag == DT_NULL)
1742 break;
1743
1744 stringp = false;
1745 switch (dyn.d_tag)
1746 {
1747 default:
1748 if (bed->elf_backend_get_target_dtag)
1749 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1750
1751 if (!strcmp (name, ""))
1752 {
1753 sprintf (ab, "%#" BFD_VMA_FMT "x", dyn.d_tag);
1754 name = ab;
1755 }
1756 break;
1757
1758 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
1759 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1760 case DT_PLTGOT: name = "PLTGOT"; break;
1761 case DT_HASH: name = "HASH"; break;
1762 case DT_STRTAB: name = "STRTAB"; break;
1763 case DT_SYMTAB: name = "SYMTAB"; break;
1764 case DT_RELA: name = "RELA"; break;
1765 case DT_RELASZ: name = "RELASZ"; break;
1766 case DT_RELAENT: name = "RELAENT"; break;
1767 case DT_STRSZ: name = "STRSZ"; break;
1768 case DT_SYMENT: name = "SYMENT"; break;
1769 case DT_INIT: name = "INIT"; break;
1770 case DT_FINI: name = "FINI"; break;
1771 case DT_SONAME: name = "SONAME"; stringp = true; break;
1772 case DT_RPATH: name = "RPATH"; stringp = true; break;
1773 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1774 case DT_REL: name = "REL"; break;
1775 case DT_RELSZ: name = "RELSZ"; break;
1776 case DT_RELENT: name = "RELENT"; break;
1777 case DT_RELR: name = "RELR"; break;
1778 case DT_RELRSZ: name = "RELRSZ"; break;
1779 case DT_RELRENT: name = "RELRENT"; break;
1780 case DT_PLTREL: name = "PLTREL"; break;
1781 case DT_DEBUG: name = "DEBUG"; break;
1782 case DT_TEXTREL: name = "TEXTREL"; break;
1783 case DT_JMPREL: name = "JMPREL"; break;
1784 case DT_BIND_NOW: name = "BIND_NOW"; break;
1785 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1786 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1787 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1788 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1789 case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
1790 case DT_FLAGS: name = "FLAGS"; break;
1791 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1792 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1793 case DT_CHECKSUM: name = "CHECKSUM"; break;
1794 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1795 case DT_MOVEENT: name = "MOVEENT"; break;
1796 case DT_MOVESZ: name = "MOVESZ"; break;
1797 case DT_FEATURE: name = "FEATURE"; break;
1798 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1799 case DT_SYMINSZ: name = "SYMINSZ"; break;
1800 case DT_SYMINENT: name = "SYMINENT"; break;
1801 case DT_CONFIG: name = "CONFIG"; stringp = true; break;
1802 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
1803 case DT_AUDIT: name = "AUDIT"; stringp = true; break;
1804 case DT_PLTPAD: name = "PLTPAD"; break;
1805 case DT_MOVETAB: name = "MOVETAB"; break;
1806 case DT_SYMINFO: name = "SYMINFO"; break;
1807 case DT_RELACOUNT: name = "RELACOUNT"; break;
1808 case DT_RELCOUNT: name = "RELCOUNT"; break;
1809 case DT_FLAGS_1: name = "FLAGS_1"; break;
1810 case DT_VERSYM: name = "VERSYM"; break;
1811 case DT_VERDEF: name = "VERDEF"; break;
1812 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1813 case DT_VERNEED: name = "VERNEED"; break;
1814 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1815 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
1816 case DT_USED: name = "USED"; break;
1817 case DT_FILTER: name = "FILTER"; stringp = true; break;
1818 case DT_GNU_HASH: name = "GNU_HASH"; break;
1819 }
1820
1821 fprintf (f, " %-20s ", name);
1822 if (! stringp)
1823 {
1824 fprintf (f, "0x");
1825 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1826 }
1827 else
1828 {
1829 const char *string;
1830 unsigned int tagv = dyn.d_un.d_val;
1831
1832 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1833 if (string == NULL)
1834 goto error_return;
1835 fprintf (f, "%s", string);
1836 }
1837 fprintf (f, "\n");
1838 }
1839
1840 free (dynbuf);
1841 dynbuf = NULL;
1842 }
1843
1844 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1845 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1846 {
1847 if (! _bfd_elf_slurp_version_tables (abfd, false))
1848 return false;
1849 }
1850
1851 if (elf_dynverdef (abfd) != 0)
1852 {
1853 Elf_Internal_Verdef *t;
1854
1855 fprintf (f, _("\nVersion definitions:\n"));
1856 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1857 {
1858 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1859 t->vd_flags, t->vd_hash,
1860 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1861 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1862 {
1863 Elf_Internal_Verdaux *a;
1864
1865 fprintf (f, "\t");
1866 for (a = t->vd_auxptr->vda_nextptr;
1867 a != NULL;
1868 a = a->vda_nextptr)
1869 fprintf (f, "%s ",
1870 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1871 fprintf (f, "\n");
1872 }
1873 }
1874 }
1875
1876 if (elf_dynverref (abfd) != 0)
1877 {
1878 Elf_Internal_Verneed *t;
1879
1880 fprintf (f, _("\nVersion References:\n"));
1881 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1882 {
1883 Elf_Internal_Vernaux *a;
1884
1885 fprintf (f, _(" required from %s:\n"),
1886 t->vn_filename ? t->vn_filename : "<corrupt>");
1887 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1888 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1889 a->vna_flags, a->vna_other,
1890 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1891 }
1892 }
1893
1894 return true;
1895
1896 error_return:
1897 free (dynbuf);
1898 return false;
1899 }
1900
1901 /* Get version name. If BASE_P is TRUE, return "Base" for VER_FLG_BASE
1902 and return symbol version for symbol version itself. */
1903
1904 const char *
1905 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
1906 bool base_p,
1907 bool *hidden)
1908 {
1909 const char *version_string = NULL;
1910 if (elf_dynversym (abfd) != 0
1911 && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
1912 {
1913 unsigned int vernum = ((elf_symbol_type *) symbol)->version;
1914
1915 *hidden = (vernum & VERSYM_HIDDEN) != 0;
1916 vernum &= VERSYM_VERSION;
1917
1918 if (vernum == 0)
1919 version_string = "";
1920 else if (vernum == 1
1921 && (vernum > elf_tdata (abfd)->cverdefs
1922 || (elf_tdata (abfd)->verdef[0].vd_flags
1923 == VER_FLG_BASE)))
1924 version_string = base_p ? "Base" : "";
1925 else if (vernum <= elf_tdata (abfd)->cverdefs)
1926 {
1927 const char *nodename
1928 = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1929 version_string = "";
1930 if (base_p
1931 || nodename == NULL
1932 || symbol->name == NULL
1933 || strcmp (symbol->name, nodename) != 0)
1934 version_string = nodename;
1935 }
1936 else
1937 {
1938 Elf_Internal_Verneed *t;
1939
1940 version_string = _("<corrupt>");
1941 for (t = elf_tdata (abfd)->verref;
1942 t != NULL;
1943 t = t->vn_nextref)
1944 {
1945 Elf_Internal_Vernaux *a;
1946
1947 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1948 {
1949 if (a->vna_other == vernum)
1950 {
1951 *hidden = true;
1952 version_string = a->vna_nodename;
1953 break;
1954 }
1955 }
1956 }
1957 }
1958 }
1959 return version_string;
1960 }
1961
1962 /* Display ELF-specific fields of a symbol. */
1963
1964 void
1965 bfd_elf_print_symbol (bfd *abfd,
1966 void *filep,
1967 asymbol *symbol,
1968 bfd_print_symbol_type how)
1969 {
1970 FILE *file = (FILE *) filep;
1971 switch (how)
1972 {
1973 case bfd_print_symbol_name:
1974 fprintf (file, "%s", symbol->name);
1975 break;
1976 case bfd_print_symbol_more:
1977 fprintf (file, "elf ");
1978 bfd_fprintf_vma (abfd, file, symbol->value);
1979 fprintf (file, " %x", symbol->flags);
1980 break;
1981 case bfd_print_symbol_all:
1982 {
1983 const char *section_name;
1984 const char *name = NULL;
1985 const struct elf_backend_data *bed;
1986 unsigned char st_other;
1987 bfd_vma val;
1988 const char *version_string;
1989 bool hidden;
1990
1991 section_name = symbol->section ? symbol->section->name : "(*none*)";
1992
1993 bed = get_elf_backend_data (abfd);
1994 if (bed->elf_backend_print_symbol_all)
1995 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1996
1997 if (name == NULL)
1998 {
1999 name = symbol->name;
2000 bfd_print_symbol_vandf (abfd, file, symbol);
2001 }
2002
2003 fprintf (file, " %s\t", section_name);
2004 /* Print the "other" value for a symbol. For common symbols,
2005 we've already printed the size; now print the alignment.
2006 For other symbols, we have no specified alignment, and
2007 we've printed the address; now print the size. */
2008 if (symbol->section && bfd_is_com_section (symbol->section))
2009 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
2010 else
2011 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
2012 bfd_fprintf_vma (abfd, file, val);
2013
2014 /* If we have version information, print it. */
2015 version_string = _bfd_elf_get_symbol_version_string (abfd,
2016 symbol,
2017 true,
2018 &hidden);
2019 if (version_string)
2020 {
2021 if (!hidden)
2022 fprintf (file, " %-11s", version_string);
2023 else
2024 {
2025 int i;
2026
2027 fprintf (file, " (%s)", version_string);
2028 for (i = 10 - strlen (version_string); i > 0; --i)
2029 putc (' ', file);
2030 }
2031 }
2032
2033 /* If the st_other field is not zero, print it. */
2034 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2035
2036 switch (st_other)
2037 {
2038 case 0: break;
2039 case STV_INTERNAL: fprintf (file, " .internal"); break;
2040 case STV_HIDDEN: fprintf (file, " .hidden"); break;
2041 case STV_PROTECTED: fprintf (file, " .protected"); break;
2042 default:
2043 /* Some other non-defined flags are also present, so print
2044 everything hex. */
2045 fprintf (file, " 0x%02x", (unsigned int) st_other);
2046 }
2047
2048 fprintf (file, " %s", name);
2049 }
2050 break;
2051 }
2052 }
2053 \f
2054 /* ELF .o/exec file reading */
2055
2056 /* Create a new bfd section from an ELF section header. */
2057
2058 bool
2059 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2060 {
2061 Elf_Internal_Shdr *hdr;
2062 Elf_Internal_Ehdr *ehdr;
2063 const struct elf_backend_data *bed;
2064 const char *name;
2065 bool ret = true;
2066
2067 if (shindex >= elf_numsections (abfd))
2068 return false;
2069
2070 /* PR17512: A corrupt ELF binary might contain a loop of sections via
2071 sh_link or sh_info. Detect this here, by refusing to load a
2072 section that we are already in the process of loading. */
2073 if (elf_tdata (abfd)->being_created[shindex])
2074 {
2075 _bfd_error_handler
2076 (_("%pB: warning: loop in section dependencies detected"), abfd);
2077 return false;
2078 }
2079 elf_tdata (abfd)->being_created[shindex] = true;
2080
2081 hdr = elf_elfsections (abfd)[shindex];
2082 ehdr = elf_elfheader (abfd);
2083 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2084 hdr->sh_name);
2085 if (name == NULL)
2086 goto fail;
2087
2088 bed = get_elf_backend_data (abfd);
2089 switch (hdr->sh_type)
2090 {
2091 case SHT_NULL:
2092 /* Inactive section. Throw it away. */
2093 goto success;
2094
2095 case SHT_PROGBITS: /* Normal section with contents. */
2096 case SHT_NOBITS: /* .bss section. */
2097 case SHT_HASH: /* .hash section. */
2098 case SHT_NOTE: /* .note section. */
2099 case SHT_INIT_ARRAY: /* .init_array section. */
2100 case SHT_FINI_ARRAY: /* .fini_array section. */
2101 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
2102 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
2103 case SHT_GNU_HASH: /* .gnu.hash section. */
2104 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2105 goto success;
2106
2107 case SHT_DYNAMIC: /* Dynamic linking information. */
2108 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2109 goto fail;
2110
2111 if (hdr->sh_link > elf_numsections (abfd))
2112 {
2113 /* PR 10478: Accept Solaris binaries with a sh_link
2114 field set to SHN_BEFORE or SHN_AFTER. */
2115 switch (bfd_get_arch (abfd))
2116 {
2117 case bfd_arch_i386:
2118 case bfd_arch_sparc:
2119 if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
2120 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
2121 break;
2122 /* Otherwise fall through. */
2123 default:
2124 goto fail;
2125 }
2126 }
2127 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2128 goto fail;
2129 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2130 {
2131 Elf_Internal_Shdr *dynsymhdr;
2132
2133 /* The shared libraries distributed with hpux11 have a bogus
2134 sh_link field for the ".dynamic" section. Find the
2135 string table for the ".dynsym" section instead. */
2136 if (elf_dynsymtab (abfd) != 0)
2137 {
2138 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2139 hdr->sh_link = dynsymhdr->sh_link;
2140 }
2141 else
2142 {
2143 unsigned int i, num_sec;
2144
2145 num_sec = elf_numsections (abfd);
2146 for (i = 1; i < num_sec; i++)
2147 {
2148 dynsymhdr = elf_elfsections (abfd)[i];
2149 if (dynsymhdr->sh_type == SHT_DYNSYM)
2150 {
2151 hdr->sh_link = dynsymhdr->sh_link;
2152 break;
2153 }
2154 }
2155 }
2156 }
2157 goto success;
2158
2159 case SHT_SYMTAB: /* A symbol table. */
2160 if (elf_onesymtab (abfd) == shindex)
2161 goto success;
2162
2163 if (hdr->sh_entsize != bed->s->sizeof_sym)
2164 goto fail;
2165
2166 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2167 {
2168 if (hdr->sh_size != 0)
2169 goto fail;
2170 /* Some assemblers erroneously set sh_info to one with a
2171 zero sh_size. ld sees this as a global symbol count
2172 of (unsigned) -1. Fix it here. */
2173 hdr->sh_info = 0;
2174 goto success;
2175 }
2176
2177 /* PR 18854: A binary might contain more than one symbol table.
2178 Unusual, but possible. Warn, but continue. */
2179 if (elf_onesymtab (abfd) != 0)
2180 {
2181 _bfd_error_handler
2182 /* xgettext:c-format */
2183 (_("%pB: warning: multiple symbol tables detected"
2184 " - ignoring the table in section %u"),
2185 abfd, shindex);
2186 goto success;
2187 }
2188 elf_onesymtab (abfd) = shindex;
2189 elf_symtab_hdr (abfd) = *hdr;
2190 elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2191 abfd->flags |= HAS_SYMS;
2192
2193 /* Sometimes a shared object will map in the symbol table. If
2194 SHF_ALLOC is set, and this is a shared object, then we also
2195 treat this section as a BFD section. We can not base the
2196 decision purely on SHF_ALLOC, because that flag is sometimes
2197 set in a relocatable object file, which would confuse the
2198 linker. */
2199 if ((hdr->sh_flags & SHF_ALLOC) != 0
2200 && (abfd->flags & DYNAMIC) != 0
2201 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2202 shindex))
2203 goto fail;
2204
2205 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2206 can't read symbols without that section loaded as well. It
2207 is most likely specified by the next section header. */
2208 {
2209 elf_section_list * entry;
2210 unsigned int i, num_sec;
2211
2212 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2213 if (entry->hdr.sh_link == shindex)
2214 goto success;
2215
2216 num_sec = elf_numsections (abfd);
2217 for (i = shindex + 1; i < num_sec; i++)
2218 {
2219 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2220
2221 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2222 && hdr2->sh_link == shindex)
2223 break;
2224 }
2225
2226 if (i == num_sec)
2227 for (i = 1; i < shindex; i++)
2228 {
2229 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2230
2231 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2232 && hdr2->sh_link == shindex)
2233 break;
2234 }
2235
2236 if (i != shindex)
2237 ret = bfd_section_from_shdr (abfd, i);
2238 /* else FIXME: we have failed to find the symbol table - should we issue an error ? */
2239 goto success;
2240 }
2241
2242 case SHT_DYNSYM: /* A dynamic symbol table. */
2243 if (elf_dynsymtab (abfd) == shindex)
2244 goto success;
2245
2246 if (hdr->sh_entsize != bed->s->sizeof_sym)
2247 goto fail;
2248
2249 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2250 {
2251 if (hdr->sh_size != 0)
2252 goto fail;
2253
2254 /* Some linkers erroneously set sh_info to one with a
2255 zero sh_size. ld sees this as a global symbol count
2256 of (unsigned) -1. Fix it here. */
2257 hdr->sh_info = 0;
2258 goto success;
2259 }
2260
2261 /* PR 18854: A binary might contain more than one dynamic symbol table.
2262 Unusual, but possible. Warn, but continue. */
2263 if (elf_dynsymtab (abfd) != 0)
2264 {
2265 _bfd_error_handler
2266 /* xgettext:c-format */
2267 (_("%pB: warning: multiple dynamic symbol tables detected"
2268 " - ignoring the table in section %u"),
2269 abfd, shindex);
2270 goto success;
2271 }
2272 elf_dynsymtab (abfd) = shindex;
2273 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2274 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2275 abfd->flags |= HAS_SYMS;
2276
2277 /* Besides being a symbol table, we also treat this as a regular
2278 section, so that objcopy can handle it. */
2279 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2280 goto success;
2281
2282 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections. */
2283 {
2284 elf_section_list * entry;
2285
2286 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2287 if (entry->ndx == shindex)
2288 goto success;
2289
2290 entry = bfd_alloc (abfd, sizeof (*entry));
2291 if (entry == NULL)
2292 goto fail;
2293 entry->ndx = shindex;
2294 entry->hdr = * hdr;
2295 entry->next = elf_symtab_shndx_list (abfd);
2296 elf_symtab_shndx_list (abfd) = entry;
2297 elf_elfsections (abfd)[shindex] = & entry->hdr;
2298 goto success;
2299 }
2300
2301 case SHT_STRTAB: /* A string table. */
2302 if (hdr->bfd_section != NULL)
2303 goto success;
2304
2305 if (ehdr->e_shstrndx == shindex)
2306 {
2307 elf_tdata (abfd)->shstrtab_hdr = *hdr;
2308 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2309 goto success;
2310 }
2311
2312 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2313 {
2314 symtab_strtab:
2315 elf_tdata (abfd)->strtab_hdr = *hdr;
2316 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2317 goto success;
2318 }
2319
2320 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2321 {
2322 dynsymtab_strtab:
2323 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2324 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2325 elf_elfsections (abfd)[shindex] = hdr;
2326 /* We also treat this as a regular section, so that objcopy
2327 can handle it. */
2328 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2329 shindex);
2330 goto success;
2331 }
2332
2333 /* If the string table isn't one of the above, then treat it as a
2334 regular section. We need to scan all the headers to be sure,
2335 just in case this strtab section appeared before the above. */
2336 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2337 {
2338 unsigned int i, num_sec;
2339
2340 num_sec = elf_numsections (abfd);
2341 for (i = 1; i < num_sec; i++)
2342 {
2343 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2344 if (hdr2->sh_link == shindex)
2345 {
2346 /* Prevent endless recursion on broken objects. */
2347 if (i == shindex)
2348 goto fail;
2349 if (! bfd_section_from_shdr (abfd, i))
2350 goto fail;
2351 if (elf_onesymtab (abfd) == i)
2352 goto symtab_strtab;
2353 if (elf_dynsymtab (abfd) == i)
2354 goto dynsymtab_strtab;
2355 }
2356 }
2357 }
2358 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2359 goto success;
2360
2361 case SHT_REL:
2362 case SHT_RELA:
2363 case SHT_RELR:
2364 /* *These* do a lot of work -- but build no sections! */
2365 {
2366 asection *target_sect;
2367 Elf_Internal_Shdr *hdr2, **p_hdr;
2368 unsigned int num_sec = elf_numsections (abfd);
2369 struct bfd_elf_section_data *esdt;
2370 bfd_size_type size;
2371
2372 if (hdr->sh_type == SHT_REL)
2373 size = bed->s->sizeof_rel;
2374 else if (hdr->sh_type == SHT_RELA)
2375 size = bed->s->sizeof_rela;
2376 else
2377 size = bed->s->arch_size / 8;
2378 if (hdr->sh_entsize != size)
2379 goto fail;
2380
2381 /* Check for a bogus link to avoid crashing. */
2382 if (hdr->sh_link >= num_sec)
2383 {
2384 _bfd_error_handler
2385 /* xgettext:c-format */
2386 (_("%pB: invalid link %u for reloc section %s (index %u)"),
2387 abfd, hdr->sh_link, name, shindex);
2388 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2389 shindex);
2390 goto success;
2391 }
2392
2393 /* Get the symbol table. */
2394 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2395 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2396 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2397 goto fail;
2398
2399 /* If this is an alloc section in an executable or shared
2400 library, or the reloc section does not use the main symbol
2401 table we don't treat it as a reloc section. BFD can't
2402 adequately represent such a section, so at least for now,
2403 we don't try. We just present it as a normal section. We
2404 also can't use it as a reloc section if it points to the
2405 null section, an invalid section, another reloc section, or
2406 its sh_link points to the null section. */
2407 if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2408 && (hdr->sh_flags & SHF_ALLOC) != 0)
2409 || hdr->sh_link == SHN_UNDEF
2410 || hdr->sh_link != elf_onesymtab (abfd)
2411 || hdr->sh_info == SHN_UNDEF
2412 || hdr->sh_info >= num_sec
2413 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2414 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2415 {
2416 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2417 shindex);
2418 goto success;
2419 }
2420
2421 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2422 goto fail;
2423
2424 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2425 if (target_sect == NULL)
2426 goto fail;
2427
2428 esdt = elf_section_data (target_sect);
2429 if (hdr->sh_type == SHT_RELA)
2430 p_hdr = &esdt->rela.hdr;
2431 else
2432 p_hdr = &esdt->rel.hdr;
2433
2434 /* PR 17512: file: 0b4f81b7.
2435 Also see PR 24456, for a file which deliberately has two reloc
2436 sections. */
2437 if (*p_hdr != NULL)
2438 {
2439 if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2440 {
2441 _bfd_error_handler
2442 /* xgettext:c-format */
2443 (_("%pB: warning: secondary relocation section '%s' "
2444 "for section %pA found - ignoring"),
2445 abfd, name, target_sect);
2446 }
2447 else
2448 esdt->has_secondary_relocs = true;
2449 goto success;
2450 }
2451
2452 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2453 if (hdr2 == NULL)
2454 goto fail;
2455 *hdr2 = *hdr;
2456 *p_hdr = hdr2;
2457 elf_elfsections (abfd)[shindex] = hdr2;
2458 target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2459 * bed->s->int_rels_per_ext_rel);
2460 target_sect->flags |= SEC_RELOC;
2461 target_sect->relocation = NULL;
2462 target_sect->rel_filepos = hdr->sh_offset;
2463 /* In the section to which the relocations apply, mark whether
2464 its relocations are of the REL or RELA variety. */
2465 if (hdr->sh_size != 0)
2466 {
2467 if (hdr->sh_type == SHT_RELA)
2468 target_sect->use_rela_p = 1;
2469 }
2470 abfd->flags |= HAS_RELOC;
2471 goto success;
2472 }
2473
2474 case SHT_GNU_verdef:
2475 elf_dynverdef (abfd) = shindex;
2476 elf_tdata (abfd)->dynverdef_hdr = *hdr;
2477 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2478 goto success;
2479
2480 case SHT_GNU_versym:
2481 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
2482 goto fail;
2483
2484 elf_dynversym (abfd) = shindex;
2485 elf_tdata (abfd)->dynversym_hdr = *hdr;
2486 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2487 goto success;
2488
2489 case SHT_GNU_verneed:
2490 elf_dynverref (abfd) = shindex;
2491 elf_tdata (abfd)->dynverref_hdr = *hdr;
2492 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2493 goto success;
2494
2495 case SHT_SHLIB:
2496 goto success;
2497
2498 case SHT_GROUP:
2499 if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
2500 goto fail;
2501
2502 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2503 goto fail;
2504
2505 goto success;
2506
2507 default:
2508 /* Possibly an attributes section. */
2509 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
2510 || hdr->sh_type == bed->obj_attrs_section_type)
2511 {
2512 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2513 goto fail;
2514 _bfd_elf_parse_attributes (abfd, hdr);
2515 goto success;
2516 }
2517
2518 /* Check for any processor-specific section types. */
2519 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
2520 goto success;
2521
2522 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2523 {
2524 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2525 /* FIXME: How to properly handle allocated section reserved
2526 for applications? */
2527 _bfd_error_handler
2528 /* xgettext:c-format */
2529 (_("%pB: unknown type [%#x] section `%s'"),
2530 abfd, hdr->sh_type, name);
2531 else
2532 {
2533 /* Allow sections reserved for applications. */
2534 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2535 shindex);
2536 goto success;
2537 }
2538 }
2539 else if (hdr->sh_type >= SHT_LOPROC
2540 && hdr->sh_type <= SHT_HIPROC)
2541 /* FIXME: We should handle this section. */
2542 _bfd_error_handler
2543 /* xgettext:c-format */
2544 (_("%pB: unknown type [%#x] section `%s'"),
2545 abfd, hdr->sh_type, name);
2546 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
2547 {
2548 /* Unrecognised OS-specific sections. */
2549 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2550 /* SHF_OS_NONCONFORMING indicates that special knowledge is
2551 required to correctly process the section and the file should
2552 be rejected with an error message. */
2553 _bfd_error_handler
2554 /* xgettext:c-format */
2555 (_("%pB: unknown type [%#x] section `%s'"),
2556 abfd, hdr->sh_type, name);
2557 else
2558 {
2559 /* Otherwise it should be processed. */
2560 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2561 goto success;
2562 }
2563 }
2564 else
2565 /* FIXME: We should handle this section. */
2566 _bfd_error_handler
2567 /* xgettext:c-format */
2568 (_("%pB: unknown type [%#x] section `%s'"),
2569 abfd, hdr->sh_type, name);
2570
2571 goto fail;
2572 }
2573
2574 fail:
2575 ret = false;
2576 success:
2577 elf_tdata (abfd)->being_created[shindex] = false;
2578 return ret;
2579 }
2580
2581 /* Return the local symbol specified by ABFD, R_SYMNDX. */
2582
2583 Elf_Internal_Sym *
2584 bfd_sym_from_r_symndx (struct sym_cache *cache,
2585 bfd *abfd,
2586 unsigned long r_symndx)
2587 {
2588 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2589
2590 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2591 {
2592 Elf_Internal_Shdr *symtab_hdr;
2593 unsigned char esym[sizeof (Elf64_External_Sym)];
2594 Elf_External_Sym_Shndx eshndx;
2595
2596 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2597 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2598 &cache->sym[ent], esym, &eshndx) == NULL)
2599 return NULL;
2600
2601 if (cache->abfd != abfd)
2602 {
2603 memset (cache->indx, -1, sizeof (cache->indx));
2604 cache->abfd = abfd;
2605 }
2606 cache->indx[ent] = r_symndx;
2607 }
2608
2609 return &cache->sym[ent];
2610 }
2611
2612 /* Given an ELF section number, retrieve the corresponding BFD
2613 section. */
2614
2615 asection *
2616 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
2617 {
2618 if (sec_index >= elf_numsections (abfd))
2619 return NULL;
2620 return elf_elfsections (abfd)[sec_index]->bfd_section;
2621 }
2622
2623 static const struct bfd_elf_special_section special_sections_b[] =
2624 {
2625 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2626 { NULL, 0, 0, 0, 0 }
2627 };
2628
2629 static const struct bfd_elf_special_section special_sections_c[] =
2630 {
2631 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
2632 { STRING_COMMA_LEN (".ctf"), 0, SHT_PROGBITS, 0 },
2633 { NULL, 0, 0, 0, 0 }
2634 };
2635
2636 static const struct bfd_elf_special_section special_sections_d[] =
2637 {
2638 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2639 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2640 /* There are more DWARF sections than these, but they needn't be added here
2641 unless you have to cope with broken compilers that don't emit section
2642 attributes or you want to help the user writing assembler. */
2643 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
2644 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
2645 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
2646 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
2647 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
2648 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
2649 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
2650 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
2651 { NULL, 0, 0, 0, 0 }
2652 };
2653
2654 static const struct bfd_elf_special_section special_sections_f[] =
2655 {
2656 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2657 { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2658 { NULL, 0 , 0, 0, 0 }
2659 };
2660
2661 static const struct bfd_elf_special_section special_sections_g[] =
2662 {
2663 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2664 { STRING_COMMA_LEN (".gnu.linkonce.n"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2665 { STRING_COMMA_LEN (".gnu.linkonce.p"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2666 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE },
2667 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2668 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
2669 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
2670 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
2671 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2672 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
2673 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
2674 { NULL, 0, 0, 0, 0 }
2675 };
2676
2677 static const struct bfd_elf_special_section special_sections_h[] =
2678 {
2679 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
2680 { NULL, 0, 0, 0, 0 }
2681 };
2682
2683 static const struct bfd_elf_special_section special_sections_i[] =
2684 {
2685 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2686 { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2687 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
2688 { NULL, 0, 0, 0, 0 }
2689 };
2690
2691 static const struct bfd_elf_special_section special_sections_l[] =
2692 {
2693 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2694 { NULL, 0, 0, 0, 0 }
2695 };
2696
2697 static const struct bfd_elf_special_section special_sections_n[] =
2698 {
2699 { STRING_COMMA_LEN (".noinit"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2700 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2701 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
2702 { NULL, 0, 0, 0, 0 }
2703 };
2704
2705 static const struct bfd_elf_special_section special_sections_p[] =
2706 {
2707 { STRING_COMMA_LEN (".persistent.bss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2708 { STRING_COMMA_LEN (".persistent"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2709 { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2710 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2711 { NULL, 0, 0, 0, 0 }
2712 };
2713
2714 static const struct bfd_elf_special_section special_sections_r[] =
2715 {
2716 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2717 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2718 { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
2719 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
2720 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
2721 { NULL, 0, 0, 0, 0 }
2722 };
2723
2724 static const struct bfd_elf_special_section special_sections_s[] =
2725 {
2726 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2727 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
2728 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
2729 /* See struct bfd_elf_special_section declaration for the semantics of
2730 this special case where .prefix_length != strlen (.prefix). */
2731 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
2732 { NULL, 0, 0, 0, 0 }
2733 };
2734
2735 static const struct bfd_elf_special_section special_sections_t[] =
2736 {
2737 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2738 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2739 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2740 { NULL, 0, 0, 0, 0 }
2741 };
2742
2743 static const struct bfd_elf_special_section special_sections_z[] =
2744 {
2745 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
2746 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
2747 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
2748 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2749 { NULL, 0, 0, 0, 0 }
2750 };
2751
2752 static const struct bfd_elf_special_section * const special_sections[] =
2753 {
2754 special_sections_b, /* 'b' */
2755 special_sections_c, /* 'c' */
2756 special_sections_d, /* 'd' */
2757 NULL, /* 'e' */
2758 special_sections_f, /* 'f' */
2759 special_sections_g, /* 'g' */
2760 special_sections_h, /* 'h' */
2761 special_sections_i, /* 'i' */
2762 NULL, /* 'j' */
2763 NULL, /* 'k' */
2764 special_sections_l, /* 'l' */
2765 NULL, /* 'm' */
2766 special_sections_n, /* 'n' */
2767 NULL, /* 'o' */
2768 special_sections_p, /* 'p' */
2769 NULL, /* 'q' */
2770 special_sections_r, /* 'r' */
2771 special_sections_s, /* 's' */
2772 special_sections_t, /* 't' */
2773 NULL, /* 'u' */
2774 NULL, /* 'v' */
2775 NULL, /* 'w' */
2776 NULL, /* 'x' */
2777 NULL, /* 'y' */
2778 special_sections_z /* 'z' */
2779 };
2780
2781 const struct bfd_elf_special_section *
2782 _bfd_elf_get_special_section (const char *name,
2783 const struct bfd_elf_special_section *spec,
2784 unsigned int rela)
2785 {
2786 int i;
2787 int len;
2788
2789 len = strlen (name);
2790
2791 for (i = 0; spec[i].prefix != NULL; i++)
2792 {
2793 int suffix_len;
2794 int prefix_len = spec[i].prefix_length;
2795
2796 if (len < prefix_len)
2797 continue;
2798 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2799 continue;
2800
2801 suffix_len = spec[i].suffix_length;
2802 if (suffix_len <= 0)
2803 {
2804 if (name[prefix_len] != 0)
2805 {
2806 if (suffix_len == 0)
2807 continue;
2808 if (name[prefix_len] != '.'
2809 && (suffix_len == -2
2810 || (rela && spec[i].type == SHT_REL)))
2811 continue;
2812 }
2813 }
2814 else
2815 {
2816 if (len < prefix_len + suffix_len)
2817 continue;
2818 if (memcmp (name + len - suffix_len,
2819 spec[i].prefix + prefix_len,
2820 suffix_len) != 0)
2821 continue;
2822 }
2823 return &spec[i];
2824 }
2825
2826 return NULL;
2827 }
2828
2829 const struct bfd_elf_special_section *
2830 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2831 {
2832 int i;
2833 const struct bfd_elf_special_section *spec;
2834 const struct elf_backend_data *bed;
2835
2836 /* See if this is one of the special sections. */
2837 if (sec->name == NULL)
2838 return NULL;
2839
2840 bed = get_elf_backend_data (abfd);
2841 spec = bed->special_sections;
2842 if (spec)
2843 {
2844 spec = _bfd_elf_get_special_section (sec->name,
2845 bed->special_sections,
2846 sec->use_rela_p);
2847 if (spec != NULL)
2848 return spec;
2849 }
2850
2851 if (sec->name[0] != '.')
2852 return NULL;
2853
2854 i = sec->name[1] - 'b';
2855 if (i < 0 || i > 'z' - 'b')
2856 return NULL;
2857
2858 spec = special_sections[i];
2859
2860 if (spec == NULL)
2861 return NULL;
2862
2863 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2864 }
2865
2866 bool
2867 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2868 {
2869 struct bfd_elf_section_data *sdata;
2870 const struct elf_backend_data *bed;
2871 const struct bfd_elf_special_section *ssect;
2872
2873 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2874 if (sdata == NULL)
2875 {
2876 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
2877 sizeof (*sdata));
2878 if (sdata == NULL)
2879 return false;
2880 sec->used_by_bfd = sdata;
2881 }
2882
2883 /* Indicate whether or not this section should use RELA relocations. */
2884 bed = get_elf_backend_data (abfd);
2885 sec->use_rela_p = bed->default_use_rela_p;
2886
2887 /* Set up ELF section type and flags for newly created sections, if
2888 there is an ABI mandated section. */
2889 ssect = (*bed->get_sec_type_attr) (abfd, sec);
2890 if (ssect != NULL)
2891 {
2892 elf_section_type (sec) = ssect->type;
2893 elf_section_flags (sec) = ssect->attr;
2894 }
2895
2896 return _bfd_generic_new_section_hook (abfd, sec);
2897 }
2898
2899 /* Create a new bfd section from an ELF program header.
2900
2901 Since program segments have no names, we generate a synthetic name
2902 of the form segment<NUM>, where NUM is generally the index in the
2903 program header table. For segments that are split (see below) we
2904 generate the names segment<NUM>a and segment<NUM>b.
2905
2906 Note that some program segments may have a file size that is different than
2907 (less than) the memory size. All this means is that at execution the
2908 system must allocate the amount of memory specified by the memory size,
2909 but only initialize it with the first "file size" bytes read from the
2910 file. This would occur for example, with program segments consisting
2911 of combined data+bss.
2912
2913 To handle the above situation, this routine generates TWO bfd sections
2914 for the single program segment. The first has the length specified by
2915 the file size of the segment, and the second has the length specified
2916 by the difference between the two sizes. In effect, the segment is split
2917 into its initialized and uninitialized parts.
2918
2919 */
2920
2921 bool
2922 _bfd_elf_make_section_from_phdr (bfd *abfd,
2923 Elf_Internal_Phdr *hdr,
2924 int hdr_index,
2925 const char *type_name)
2926 {
2927 asection *newsect;
2928 char *name;
2929 char namebuf[64];
2930 size_t len;
2931 int split;
2932 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
2933
2934 split = ((hdr->p_memsz > 0)
2935 && (hdr->p_filesz > 0)
2936 && (hdr->p_memsz > hdr->p_filesz));
2937
2938 if (hdr->p_filesz > 0)
2939 {
2940 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
2941 len = strlen (namebuf) + 1;
2942 name = (char *) bfd_alloc (abfd, len);
2943 if (!name)
2944 return false;
2945 memcpy (name, namebuf, len);
2946 newsect = bfd_make_section (abfd, name);
2947 if (newsect == NULL)
2948 return false;
2949 newsect->vma = hdr->p_vaddr / opb;
2950 newsect->lma = hdr->p_paddr / opb;
2951 newsect->size = hdr->p_filesz;
2952 newsect->filepos = hdr->p_offset;
2953 newsect->flags |= SEC_HAS_CONTENTS;
2954 newsect->alignment_power = bfd_log2 (hdr->p_align);
2955 if (hdr->p_type == PT_LOAD)
2956 {
2957 newsect->flags |= SEC_ALLOC;
2958 newsect->flags |= SEC_LOAD;
2959 if (hdr->p_flags & PF_X)
2960 {
2961 /* FIXME: all we known is that it has execute PERMISSION,
2962 may be data. */
2963 newsect->flags |= SEC_CODE;
2964 }
2965 }
2966 if (!(hdr->p_flags & PF_W))
2967 {
2968 newsect->flags |= SEC_READONLY;
2969 }
2970 }
2971
2972 if (hdr->p_memsz > hdr->p_filesz)
2973 {
2974 bfd_vma align;
2975
2976 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
2977 len = strlen (namebuf) + 1;
2978 name = (char *) bfd_alloc (abfd, len);
2979 if (!name)
2980 return false;
2981 memcpy (name, namebuf, len);
2982 newsect = bfd_make_section (abfd, name);
2983 if (newsect == NULL)
2984 return false;
2985 newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
2986 newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
2987 newsect->size = hdr->p_memsz - hdr->p_filesz;
2988 newsect->filepos = hdr->p_offset + hdr->p_filesz;
2989 align = newsect->vma & -newsect->vma;
2990 if (align == 0 || align > hdr->p_align)
2991 align = hdr->p_align;
2992 newsect->alignment_power = bfd_log2 (align);
2993 if (hdr->p_type == PT_LOAD)
2994 {
2995 newsect->flags |= SEC_ALLOC;
2996 if (hdr->p_flags & PF_X)
2997 newsect->flags |= SEC_CODE;
2998 }
2999 if (!(hdr->p_flags & PF_W))
3000 newsect->flags |= SEC_READONLY;
3001 }
3002
3003 return true;
3004 }
3005
3006 static bool
3007 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3008 {
3009 /* The return value is ignored. Build-ids are considered optional. */
3010 if (templ->xvec->flavour == bfd_target_elf_flavour)
3011 return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3012 (templ, offset);
3013 return false;
3014 }
3015
3016 bool
3017 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3018 {
3019 const struct elf_backend_data *bed;
3020
3021 switch (hdr->p_type)
3022 {
3023 case PT_NULL:
3024 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3025
3026 case PT_LOAD:
3027 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3028 return false;
3029 if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3030 _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3031 return true;
3032
3033 case PT_DYNAMIC:
3034 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3035
3036 case PT_INTERP:
3037 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3038
3039 case PT_NOTE:
3040 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3041 return false;
3042 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3043 hdr->p_align))
3044 return false;
3045 return true;
3046
3047 case PT_SHLIB:
3048 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3049
3050 case PT_PHDR:
3051 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3052
3053 case PT_GNU_EH_FRAME:
3054 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3055 "eh_frame_hdr");
3056
3057 case PT_GNU_STACK:
3058 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3059
3060 case PT_GNU_RELRO:
3061 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3062
3063 default:
3064 /* Check for any processor-specific program segment types. */
3065 bed = get_elf_backend_data (abfd);
3066 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3067 }
3068 }
3069
3070 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3071 REL or RELA. */
3072
3073 Elf_Internal_Shdr *
3074 _bfd_elf_single_rel_hdr (asection *sec)
3075 {
3076 if (elf_section_data (sec)->rel.hdr)
3077 {
3078 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3079 return elf_section_data (sec)->rel.hdr;
3080 }
3081 else
3082 return elf_section_data (sec)->rela.hdr;
3083 }
3084
3085 static bool
3086 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3087 Elf_Internal_Shdr *rel_hdr,
3088 const char *sec_name,
3089 bool use_rela_p)
3090 {
3091 char *name = (char *) bfd_alloc (abfd,
3092 sizeof ".rela" + strlen (sec_name));
3093 if (name == NULL)
3094 return false;
3095
3096 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3097 rel_hdr->sh_name =
3098 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3099 false);
3100 if (rel_hdr->sh_name == (unsigned int) -1)
3101 return false;
3102
3103 return true;
3104 }
3105
3106 /* Allocate and initialize a section-header for a new reloc section,
3107 containing relocations against ASECT. It is stored in RELDATA. If
3108 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3109 relocations. */
3110
3111 static bool
3112 _bfd_elf_init_reloc_shdr (bfd *abfd,
3113 struct bfd_elf_section_reloc_data *reldata,
3114 const char *sec_name,
3115 bool use_rela_p,
3116 bool delay_st_name_p)
3117 {
3118 Elf_Internal_Shdr *rel_hdr;
3119 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3120
3121 BFD_ASSERT (reldata->hdr == NULL);
3122 rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3123 reldata->hdr = rel_hdr;
3124
3125 if (delay_st_name_p)
3126 rel_hdr->sh_name = (unsigned int) -1;
3127 else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3128 use_rela_p))
3129 return false;
3130 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3131 rel_hdr->sh_entsize = (use_rela_p
3132 ? bed->s->sizeof_rela
3133 : bed->s->sizeof_rel);
3134 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3135 rel_hdr->sh_flags = 0;
3136 rel_hdr->sh_addr = 0;
3137 rel_hdr->sh_size = 0;
3138 rel_hdr->sh_offset = 0;
3139
3140 return true;
3141 }
3142
3143 /* Return the default section type based on the passed in section flags. */
3144
3145 int
3146 bfd_elf_get_default_section_type (flagword flags)
3147 {
3148 if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3149 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3150 return SHT_NOBITS;
3151 return SHT_PROGBITS;
3152 }
3153
3154 struct fake_section_arg
3155 {
3156 struct bfd_link_info *link_info;
3157 bool failed;
3158 };
3159
3160 /* Set up an ELF internal section header for a section. */
3161
3162 static void
3163 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3164 {
3165 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3166 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3167 struct bfd_elf_section_data *esd = elf_section_data (asect);
3168 Elf_Internal_Shdr *this_hdr;
3169 unsigned int sh_type;
3170 const char *name = asect->name;
3171 bool delay_st_name_p = false;
3172 bfd_vma mask;
3173
3174 if (arg->failed)
3175 {
3176 /* We already failed; just get out of the bfd_map_over_sections
3177 loop. */
3178 return;
3179 }
3180
3181 this_hdr = &esd->this_hdr;
3182
3183 if (arg->link_info)
3184 {
3185 /* ld: compress DWARF debug sections with names: .debug_*. */
3186 if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
3187 && (asect->flags & SEC_DEBUGGING)
3188 && name[1] == 'd'
3189 && name[6] == '_')
3190 {
3191 /* Set SEC_ELF_COMPRESS to indicate this section should be
3192 compressed. */
3193 asect->flags |= SEC_ELF_COMPRESS;
3194 /* If this section will be compressed, delay adding section
3195 name to section name section after it is compressed in
3196 _bfd_elf_assign_file_positions_for_non_load. */
3197 delay_st_name_p = true;
3198 }
3199 }
3200 else if ((asect->flags & SEC_ELF_RENAME))
3201 {
3202 /* objcopy: rename output DWARF debug section. */
3203 if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
3204 {
3205 /* When we decompress or compress with SHF_COMPRESSED,
3206 convert section name from .zdebug_* to .debug_* if
3207 needed. */
3208 if (name[1] == 'z')
3209 {
3210 char *new_name = convert_zdebug_to_debug (abfd, name);
3211 if (new_name == NULL)
3212 {
3213 arg->failed = true;
3214 return;
3215 }
3216 name = new_name;
3217 }
3218 }
3219 else if (asect->compress_status == COMPRESS_SECTION_DONE)
3220 {
3221 /* PR binutils/18087: Compression does not always make a
3222 section smaller. So only rename the section when
3223 compression has actually taken place. If input section
3224 name is .zdebug_*, we should never compress it again. */
3225 char *new_name = convert_debug_to_zdebug (abfd, name);
3226 if (new_name == NULL)
3227 {
3228 arg->failed = true;
3229 return;
3230 }
3231 BFD_ASSERT (name[1] != 'z');
3232 name = new_name;
3233 }
3234 }
3235
3236 if (delay_st_name_p)
3237 this_hdr->sh_name = (unsigned int) -1;
3238 else
3239 {
3240 this_hdr->sh_name
3241 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3242 name, false);
3243 if (this_hdr->sh_name == (unsigned int) -1)
3244 {
3245 arg->failed = true;
3246 return;
3247 }
3248 }
3249
3250 /* Don't clear sh_flags. Assembler may set additional bits. */
3251
3252 if ((asect->flags & SEC_ALLOC) != 0
3253 || asect->user_set_vma)
3254 this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
3255 else
3256 this_hdr->sh_addr = 0;
3257
3258 this_hdr->sh_offset = 0;
3259 this_hdr->sh_size = asect->size;
3260 this_hdr->sh_link = 0;
3261 /* PR 17512: file: 0eb809fe, 8b0535ee. */
3262 if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3263 {
3264 _bfd_error_handler
3265 /* xgettext:c-format */
3266 (_("%pB: error: alignment power %d of section `%pA' is too big"),
3267 abfd, asect->alignment_power, asect);
3268 arg->failed = true;
3269 return;
3270 }
3271 /* Set sh_addralign to the highest power of two given by alignment
3272 consistent with the section VMA. Linker scripts can force VMA. */
3273 mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3274 this_hdr->sh_addralign = mask & -mask;
3275 /* The sh_entsize and sh_info fields may have been set already by
3276 copy_private_section_data. */
3277
3278 this_hdr->bfd_section = asect;
3279 this_hdr->contents = NULL;
3280
3281 /* If the section type is unspecified, we set it based on
3282 asect->flags. */
3283 if (asect->type != 0)
3284 sh_type = asect->type;
3285 else if ((asect->flags & SEC_GROUP) != 0)
3286 sh_type = SHT_GROUP;
3287 else
3288 sh_type = bfd_elf_get_default_section_type (asect->flags);
3289
3290 if (this_hdr->sh_type == SHT_NULL)
3291 this_hdr->sh_type = sh_type;
3292 else if (this_hdr->sh_type == SHT_NOBITS
3293 && sh_type == SHT_PROGBITS
3294 && (asect->flags & SEC_ALLOC) != 0)
3295 {
3296 /* Warn if we are changing a NOBITS section to PROGBITS, but
3297 allow the link to proceed. This can happen when users link
3298 non-bss input sections to bss output sections, or emit data
3299 to a bss output section via a linker script. */
3300 _bfd_error_handler
3301 (_("warning: section `%pA' type changed to PROGBITS"), asect);
3302 this_hdr->sh_type = sh_type;
3303 }
3304
3305 switch (this_hdr->sh_type)
3306 {
3307 default:
3308 break;
3309
3310 case SHT_STRTAB:
3311 case SHT_NOTE:
3312 case SHT_NOBITS:
3313 case SHT_PROGBITS:
3314 break;
3315
3316 case SHT_INIT_ARRAY:
3317 case SHT_FINI_ARRAY:
3318 case SHT_PREINIT_ARRAY:
3319 this_hdr->sh_entsize = bed->s->arch_size / 8;
3320 break;
3321
3322 case SHT_HASH:
3323 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3324 break;
3325
3326 case SHT_DYNSYM:
3327 this_hdr->sh_entsize = bed->s->sizeof_sym;
3328 break;
3329
3330 case SHT_DYNAMIC:
3331 this_hdr->sh_entsize = bed->s->sizeof_dyn;
3332 break;
3333
3334 case SHT_RELA:
3335 if (get_elf_backend_data (abfd)->may_use_rela_p)
3336 this_hdr->sh_entsize = bed->s->sizeof_rela;
3337 break;
3338
3339 case SHT_REL:
3340 if (get_elf_backend_data (abfd)->may_use_rel_p)
3341 this_hdr->sh_entsize = bed->s->sizeof_rel;
3342 break;
3343
3344 case SHT_GNU_versym:
3345 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3346 break;
3347
3348 case SHT_GNU_verdef:
3349 this_hdr->sh_entsize = 0;
3350 /* objcopy or strip will copy over sh_info, but may not set
3351 cverdefs. The linker will set cverdefs, but sh_info will be
3352 zero. */
3353 if (this_hdr->sh_info == 0)
3354 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3355 else
3356 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3357 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3358 break;
3359
3360 case SHT_GNU_verneed:
3361 this_hdr->sh_entsize = 0;
3362 /* objcopy or strip will copy over sh_info, but may not set
3363 cverrefs. The linker will set cverrefs, but sh_info will be
3364 zero. */
3365 if (this_hdr->sh_info == 0)
3366 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3367 else
3368 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3369 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3370 break;
3371
3372 case SHT_GROUP:
3373 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3374 break;
3375
3376 case SHT_GNU_HASH:
3377 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3378 break;
3379 }
3380
3381 if ((asect->flags & SEC_ALLOC) != 0)
3382 this_hdr->sh_flags |= SHF_ALLOC;
3383 if ((asect->flags & SEC_READONLY) == 0)
3384 this_hdr->sh_flags |= SHF_WRITE;
3385 if ((asect->flags & SEC_CODE) != 0)
3386 this_hdr->sh_flags |= SHF_EXECINSTR;
3387 if ((asect->flags & SEC_MERGE) != 0)
3388 {
3389 this_hdr->sh_flags |= SHF_MERGE;
3390 this_hdr->sh_entsize = asect->entsize;
3391 }
3392 if ((asect->flags & SEC_STRINGS) != 0)
3393 this_hdr->sh_flags |= SHF_STRINGS;
3394 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3395 this_hdr->sh_flags |= SHF_GROUP;
3396 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3397 {
3398 this_hdr->sh_flags |= SHF_TLS;
3399 if (asect->size == 0
3400 && (asect->flags & SEC_HAS_CONTENTS) == 0)
3401 {
3402 struct bfd_link_order *o = asect->map_tail.link_order;
3403
3404 this_hdr->sh_size = 0;
3405 if (o != NULL)
3406 {
3407 this_hdr->sh_size = o->offset + o->size;
3408 if (this_hdr->sh_size != 0)
3409 this_hdr->sh_type = SHT_NOBITS;
3410 }
3411 }
3412 }
3413 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3414 this_hdr->sh_flags |= SHF_EXCLUDE;
3415
3416 /* If the section has relocs, set up a section header for the
3417 SHT_REL[A] section. If two relocation sections are required for
3418 this section, it is up to the processor-specific back-end to
3419 create the other. */
3420 if ((asect->flags & SEC_RELOC) != 0)
3421 {
3422 /* When doing a relocatable link, create both REL and RELA sections if
3423 needed. */
3424 if (arg->link_info
3425 /* Do the normal setup if we wouldn't create any sections here. */
3426 && esd->rel.count + esd->rela.count > 0
3427 && (bfd_link_relocatable (arg->link_info)
3428 || arg->link_info->emitrelocations))
3429 {
3430 if (esd->rel.count && esd->rel.hdr == NULL
3431 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3432 false, delay_st_name_p))
3433 {
3434 arg->failed = true;
3435 return;
3436 }
3437 if (esd->rela.count && esd->rela.hdr == NULL
3438 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3439 true, delay_st_name_p))
3440 {
3441 arg->failed = true;
3442 return;
3443 }
3444 }
3445 else if (!_bfd_elf_init_reloc_shdr (abfd,
3446 (asect->use_rela_p
3447 ? &esd->rela : &esd->rel),
3448 name,
3449 asect->use_rela_p,
3450 delay_st_name_p))
3451 {
3452 arg->failed = true;
3453 return;
3454 }
3455 }
3456
3457 /* Check for processor-specific section types. */
3458 sh_type = this_hdr->sh_type;
3459 if (bed->elf_backend_fake_sections
3460 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3461 {
3462 arg->failed = true;
3463 return;
3464 }
3465
3466 if (sh_type == SHT_NOBITS && asect->size != 0)
3467 {
3468 /* Don't change the header type from NOBITS if we are being
3469 called for objcopy --only-keep-debug. */
3470 this_hdr->sh_type = sh_type;
3471 }
3472 }
3473
3474 /* Fill in the contents of a SHT_GROUP section. Called from
3475 _bfd_elf_compute_section_file_positions for gas, objcopy, and
3476 when ELF targets use the generic linker, ld. Called for ld -r
3477 from bfd_elf_final_link. */
3478
3479 void
3480 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3481 {
3482 bool *failedptr = (bool *) failedptrarg;
3483 asection *elt, *first;
3484 unsigned char *loc;
3485 bool gas;
3486
3487 /* Ignore linker created group section. See elfNN_ia64_object_p in
3488 elfxx-ia64.c. */
3489 if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3490 || sec->size == 0
3491 || *failedptr)
3492 return;
3493
3494 if (elf_section_data (sec)->this_hdr.sh_info == 0)
3495 {
3496 unsigned long symindx = 0;
3497
3498 /* elf_group_id will have been set up by objcopy and the
3499 generic linker. */
3500 if (elf_group_id (sec) != NULL)
3501 symindx = elf_group_id (sec)->udata.i;
3502
3503 if (symindx == 0)
3504 {
3505 /* If called from the assembler, swap_out_syms will have set up
3506 elf_section_syms.
3507 PR 25699: A corrupt input file could contain bogus group info. */
3508 if (sec->index >= elf_num_section_syms (abfd)
3509 || elf_section_syms (abfd)[sec->index] == NULL)
3510 {
3511 *failedptr = true;
3512 return;
3513 }
3514 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3515 }
3516 elf_section_data (sec)->this_hdr.sh_info = symindx;
3517 }
3518 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
3519 {
3520 /* The ELF backend linker sets sh_info to -2 when the group
3521 signature symbol is global, and thus the index can't be
3522 set until all local symbols are output. */
3523 asection *igroup;
3524 struct bfd_elf_section_data *sec_data;
3525 unsigned long symndx;
3526 unsigned long extsymoff;
3527 struct elf_link_hash_entry *h;
3528
3529 /* The point of this little dance to the first SHF_GROUP section
3530 then back to the SHT_GROUP section is that this gets us to
3531 the SHT_GROUP in the input object. */
3532 igroup = elf_sec_group (elf_next_in_group (sec));
3533 sec_data = elf_section_data (igroup);
3534 symndx = sec_data->this_hdr.sh_info;
3535 extsymoff = 0;
3536 if (!elf_bad_symtab (igroup->owner))
3537 {
3538 Elf_Internal_Shdr *symtab_hdr;
3539
3540 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3541 extsymoff = symtab_hdr->sh_info;
3542 }
3543 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3544 while (h->root.type == bfd_link_hash_indirect
3545 || h->root.type == bfd_link_hash_warning)
3546 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3547
3548 elf_section_data (sec)->this_hdr.sh_info = h->indx;
3549 }
3550
3551 /* The contents won't be allocated for "ld -r" or objcopy. */
3552 gas = true;
3553 if (sec->contents == NULL)
3554 {
3555 gas = false;
3556 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
3557
3558 /* Arrange for the section to be written out. */
3559 elf_section_data (sec)->this_hdr.contents = sec->contents;
3560 if (sec->contents == NULL)
3561 {
3562 *failedptr = true;
3563 return;
3564 }
3565 }
3566
3567 loc = sec->contents + sec->size;
3568
3569 /* Get the pointer to the first section in the group that gas
3570 squirreled away here. objcopy arranges for this to be set to the
3571 start of the input section group. */
3572 first = elt = elf_next_in_group (sec);
3573
3574 /* First element is a flag word. Rest of section is elf section
3575 indices for all the sections of the group. Write them backwards
3576 just to keep the group in the same order as given in .section
3577 directives, not that it matters. */
3578 while (elt != NULL)
3579 {
3580 asection *s;
3581
3582 s = elt;
3583 if (!gas)
3584 s = s->output_section;
3585 if (s != NULL
3586 && !bfd_is_abs_section (s))
3587 {
3588 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
3589 struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
3590
3591 if (elf_sec->rel.hdr != NULL
3592 && (gas
3593 || (input_elf_sec->rel.hdr != NULL
3594 && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
3595 {
3596 elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
3597 loc -= 4;
3598 H_PUT_32 (abfd, elf_sec->rel.idx, loc);
3599 }
3600 if (elf_sec->rela.hdr != NULL
3601 && (gas
3602 || (input_elf_sec->rela.hdr != NULL
3603 && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
3604 {
3605 elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
3606 loc -= 4;
3607 H_PUT_32 (abfd, elf_sec->rela.idx, loc);
3608 }
3609 loc -= 4;
3610 H_PUT_32 (abfd, elf_sec->this_idx, loc);
3611 }
3612 elt = elf_next_in_group (elt);
3613 if (elt == first)
3614 break;
3615 }
3616
3617 loc -= 4;
3618 BFD_ASSERT (loc == sec->contents);
3619
3620 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
3621 }
3622
3623 /* Given NAME, the name of a relocation section stripped of its
3624 .rel/.rela prefix, return the section in ABFD to which the
3625 relocations apply. */
3626
3627 asection *
3628 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
3629 {
3630 /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
3631 section likely apply to .got.plt or .got section. */
3632 if (get_elf_backend_data (abfd)->want_got_plt
3633 && strcmp (name, ".plt") == 0)
3634 {
3635 asection *sec;
3636
3637 name = ".got.plt";
3638 sec = bfd_get_section_by_name (abfd, name);
3639 if (sec != NULL)
3640 return sec;
3641 name = ".got";
3642 }
3643
3644 return bfd_get_section_by_name (abfd, name);
3645 }
3646
3647 /* Return the section to which RELOC_SEC applies. */
3648
3649 static asection *
3650 elf_get_reloc_section (asection *reloc_sec)
3651 {
3652 const char *name;
3653 unsigned int type;
3654 bfd *abfd;
3655 const struct elf_backend_data *bed;
3656
3657 type = elf_section_data (reloc_sec)->this_hdr.sh_type;
3658 if (type != SHT_REL && type != SHT_RELA)
3659 return NULL;
3660
3661 /* We look up the section the relocs apply to by name. */
3662 name = reloc_sec->name;
3663 if (!startswith (name, ".rel"))
3664 return NULL;
3665 name += 4;
3666 if (type == SHT_RELA && *name++ != 'a')
3667 return NULL;
3668
3669 abfd = reloc_sec->owner;
3670 bed = get_elf_backend_data (abfd);
3671 return bed->get_reloc_section (abfd, name);
3672 }
3673
3674 /* Assign all ELF section numbers. The dummy first section is handled here
3675 too. The link/info pointers for the standard section types are filled
3676 in here too, while we're at it. LINK_INFO will be 0 when arriving
3677 here for objcopy, and when using the generic ELF linker. */
3678
3679 static bool
3680 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
3681 {
3682 struct elf_obj_tdata *t = elf_tdata (abfd);
3683 asection *sec;
3684 unsigned int section_number;
3685 Elf_Internal_Shdr **i_shdrp;
3686 struct bfd_elf_section_data *d;
3687 bool need_symtab;
3688 size_t amt;
3689
3690 section_number = 1;
3691
3692 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
3693
3694 /* SHT_GROUP sections are in relocatable files only. */
3695 if (link_info == NULL || !link_info->resolve_section_groups)
3696 {
3697 size_t reloc_count = 0;
3698
3699 /* Put SHT_GROUP sections first. */
3700 for (sec = abfd->sections; sec != NULL; sec = sec->next)
3701 {
3702 d = elf_section_data (sec);
3703
3704 if (d->this_hdr.sh_type == SHT_GROUP)
3705 {
3706 if (sec->flags & SEC_LINKER_CREATED)
3707 {
3708 /* Remove the linker created SHT_GROUP sections. */
3709 bfd_section_list_remove (abfd, sec);
3710 abfd->section_count--;
3711 }
3712 else
3713 d->this_idx = section_number++;
3714 }
3715
3716 /* Count relocations. */
3717 reloc_count += sec->reloc_count;
3718 }
3719
3720 /* Clear HAS_RELOC if there are no relocations. */
3721 if (reloc_count == 0)
3722 abfd->flags &= ~HAS_RELOC;
3723 }
3724
3725 for (sec = abfd->sections; sec; sec = sec->next)
3726 {
3727 d = elf_section_data (sec);
3728
3729 if (d->this_hdr.sh_type != SHT_GROUP)
3730 d->this_idx = section_number++;
3731 if (d->this_hdr.sh_name != (unsigned int) -1)
3732 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
3733 if (d->rel.hdr)
3734 {
3735 d->rel.idx = section_number++;
3736 if (d->rel.hdr->sh_name != (unsigned int) -1)
3737 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
3738 }
3739 else
3740 d->rel.idx = 0;
3741
3742 if (d->rela.hdr)
3743 {
3744 d->rela.idx = section_number++;
3745 if (d->rela.hdr->sh_name != (unsigned int) -1)
3746 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
3747 }
3748 else
3749 d->rela.idx = 0;
3750 }
3751
3752 need_symtab = (bfd_get_symcount (abfd) > 0
3753 || (link_info == NULL
3754 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3755 == HAS_RELOC)));
3756 if (need_symtab)
3757 {
3758 elf_onesymtab (abfd) = section_number++;
3759 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
3760 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
3761 {
3762 elf_section_list *entry;
3763
3764 BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
3765
3766 entry = bfd_zalloc (abfd, sizeof (*entry));
3767 entry->ndx = section_number++;
3768 elf_symtab_shndx_list (abfd) = entry;
3769 entry->hdr.sh_name
3770 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3771 ".symtab_shndx", false);
3772 if (entry->hdr.sh_name == (unsigned int) -1)
3773 return false;
3774 }
3775 elf_strtab_sec (abfd) = section_number++;
3776 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
3777 }
3778
3779 elf_shstrtab_sec (abfd) = section_number++;
3780 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
3781 elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
3782
3783 if (section_number >= SHN_LORESERVE)
3784 {
3785 /* xgettext:c-format */
3786 _bfd_error_handler (_("%pB: too many sections: %u"),
3787 abfd, section_number);
3788 return false;
3789 }
3790
3791 elf_numsections (abfd) = section_number;
3792 elf_elfheader (abfd)->e_shnum = section_number;
3793
3794 /* Set up the list of section header pointers, in agreement with the
3795 indices. */
3796 amt = section_number * sizeof (Elf_Internal_Shdr *);
3797 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
3798 if (i_shdrp == NULL)
3799 return false;
3800
3801 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3802 sizeof (Elf_Internal_Shdr));
3803 if (i_shdrp[0] == NULL)
3804 {
3805 bfd_release (abfd, i_shdrp);
3806 return false;
3807 }
3808
3809 elf_elfsections (abfd) = i_shdrp;
3810
3811 i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
3812 if (need_symtab)
3813 {
3814 i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
3815 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3816 {
3817 elf_section_list * entry = elf_symtab_shndx_list (abfd);
3818 BFD_ASSERT (entry != NULL);
3819 i_shdrp[entry->ndx] = & entry->hdr;
3820 entry->hdr.sh_link = elf_onesymtab (abfd);
3821 }
3822 i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
3823 t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
3824 }
3825
3826 for (sec = abfd->sections; sec; sec = sec->next)
3827 {
3828 asection *s;
3829
3830 d = elf_section_data (sec);
3831
3832 i_shdrp[d->this_idx] = &d->this_hdr;
3833 if (d->rel.idx != 0)
3834 i_shdrp[d->rel.idx] = d->rel.hdr;
3835 if (d->rela.idx != 0)
3836 i_shdrp[d->rela.idx] = d->rela.hdr;
3837
3838 /* Fill in the sh_link and sh_info fields while we're at it. */
3839
3840 /* sh_link of a reloc section is the section index of the symbol
3841 table. sh_info is the section index of the section to which
3842 the relocation entries apply. */
3843 if (d->rel.idx != 0)
3844 {
3845 d->rel.hdr->sh_link = elf_onesymtab (abfd);
3846 d->rel.hdr->sh_info = d->this_idx;
3847 d->rel.hdr->sh_flags |= SHF_INFO_LINK;
3848 }
3849 if (d->rela.idx != 0)
3850 {
3851 d->rela.hdr->sh_link = elf_onesymtab (abfd);
3852 d->rela.hdr->sh_info = d->this_idx;
3853 d->rela.hdr->sh_flags |= SHF_INFO_LINK;
3854 }
3855
3856 /* We need to set up sh_link for SHF_LINK_ORDER. */
3857 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3858 {
3859 s = elf_linked_to_section (sec);
3860 /* We can now have a NULL linked section pointer.
3861 This happens when the sh_link field is 0, which is done
3862 when a linked to section is discarded but the linking
3863 section has been retained for some reason. */
3864 if (s)
3865 {
3866 /* Check discarded linkonce section. */
3867 if (discarded_section (s))
3868 {
3869 asection *kept;
3870 _bfd_error_handler
3871 /* xgettext:c-format */
3872 (_("%pB: sh_link of section `%pA' points to"
3873 " discarded section `%pA' of `%pB'"),
3874 abfd, d->this_hdr.bfd_section, s, s->owner);
3875 /* Point to the kept section if it has the same
3876 size as the discarded one. */
3877 kept = _bfd_elf_check_kept_section (s, link_info);
3878 if (kept == NULL)
3879 {
3880 bfd_set_error (bfd_error_bad_value);
3881 return false;
3882 }
3883 s = kept;
3884 }
3885 /* Handle objcopy. */
3886 else if (s->output_section == NULL)
3887 {
3888 _bfd_error_handler
3889 /* xgettext:c-format */
3890 (_("%pB: sh_link of section `%pA' points to"
3891 " removed section `%pA' of `%pB'"),
3892 abfd, d->this_hdr.bfd_section, s, s->owner);
3893 bfd_set_error (bfd_error_bad_value);
3894 return false;
3895 }
3896 s = s->output_section;
3897 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3898 }
3899 }
3900
3901 switch (d->this_hdr.sh_type)
3902 {
3903 case SHT_REL:
3904 case SHT_RELA:
3905 /* A reloc section which we are treating as a normal BFD
3906 section. sh_link is the section index of the symbol
3907 table. sh_info is the section index of the section to
3908 which the relocation entries apply. We assume that an
3909 allocated reloc section uses the dynamic symbol table
3910 if there is one. Otherwise we guess the normal symbol
3911 table. FIXME: How can we be sure? */
3912 if (d->this_hdr.sh_link == 0 && (sec->flags & SEC_ALLOC) != 0)
3913 {
3914 s = bfd_get_section_by_name (abfd, ".dynsym");
3915 if (s != NULL)
3916 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3917 }
3918 if (d->this_hdr.sh_link == 0)
3919 d->this_hdr.sh_link = elf_onesymtab (abfd);
3920
3921 s = elf_get_reloc_section (sec);
3922 if (s != NULL)
3923 {
3924 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3925 d->this_hdr.sh_flags |= SHF_INFO_LINK;
3926 }
3927 break;
3928
3929 case SHT_STRTAB:
3930 /* We assume that a section named .stab*str is a stabs
3931 string section. We look for a section with the same name
3932 but without the trailing ``str'', and set its sh_link
3933 field to point to this section. */
3934 if (startswith (sec->name, ".stab")
3935 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3936 {
3937 size_t len;
3938 char *alc;
3939
3940 len = strlen (sec->name);
3941 alc = (char *) bfd_malloc (len - 2);
3942 if (alc == NULL)
3943 return false;
3944 memcpy (alc, sec->name, len - 3);
3945 alc[len - 3] = '\0';
3946 s = bfd_get_section_by_name (abfd, alc);
3947 free (alc);
3948 if (s != NULL)
3949 {
3950 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3951
3952 /* This is a .stab section. */
3953 elf_section_data (s)->this_hdr.sh_entsize = 12;
3954 }
3955 }
3956 break;
3957
3958 case SHT_DYNAMIC:
3959 case SHT_DYNSYM:
3960 case SHT_GNU_verneed:
3961 case SHT_GNU_verdef:
3962 /* sh_link is the section header index of the string table
3963 used for the dynamic entries, or the symbol table, or the
3964 version strings. */
3965 s = bfd_get_section_by_name (abfd, ".dynstr");
3966 if (s != NULL)
3967 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3968 break;
3969
3970 case SHT_GNU_LIBLIST:
3971 /* sh_link is the section header index of the prelink library
3972 list used for the dynamic entries, or the symbol table, or
3973 the version strings. */
3974 s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
3975 ? ".dynstr" : ".gnu.libstr"));
3976 if (s != NULL)
3977 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3978 break;
3979
3980 case SHT_HASH:
3981 case SHT_GNU_HASH:
3982 case SHT_GNU_versym:
3983 /* sh_link is the section header index of the symbol table
3984 this hash table or version table is for. */
3985 s = bfd_get_section_by_name (abfd, ".dynsym");
3986 if (s != NULL)
3987 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3988 break;
3989
3990 case SHT_GROUP:
3991 d->this_hdr.sh_link = elf_onesymtab (abfd);
3992 }
3993 }
3994
3995 /* Delay setting sh_name to _bfd_elf_write_object_contents so that
3996 _bfd_elf_assign_file_positions_for_non_load can convert DWARF
3997 debug section name from .debug_* to .zdebug_* if needed. */
3998
3999 return true;
4000 }
4001
4002 static bool
4003 sym_is_global (bfd *abfd, asymbol *sym)
4004 {
4005 /* If the backend has a special mapping, use it. */
4006 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4007 if (bed->elf_backend_sym_is_global)
4008 return (*bed->elf_backend_sym_is_global) (abfd, sym);
4009
4010 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
4011 || bfd_is_und_section (bfd_asymbol_section (sym))
4012 || bfd_is_com_section (bfd_asymbol_section (sym)));
4013 }
4014
4015 /* Filter global symbols of ABFD to include in the import library. All
4016 SYMCOUNT symbols of ABFD can be examined from their pointers in
4017 SYMS. Pointers of symbols to keep should be stored contiguously at
4018 the beginning of that array.
4019
4020 Returns the number of symbols to keep. */
4021
4022 unsigned int
4023 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4024 asymbol **syms, long symcount)
4025 {
4026 long src_count, dst_count = 0;
4027
4028 for (src_count = 0; src_count < symcount; src_count++)
4029 {
4030 asymbol *sym = syms[src_count];
4031 char *name = (char *) bfd_asymbol_name (sym);
4032 struct bfd_link_hash_entry *h;
4033
4034 if (!sym_is_global (abfd, sym))
4035 continue;
4036
4037 h = bfd_link_hash_lookup (info->hash, name, false, false, false);
4038 if (h == NULL)
4039 continue;
4040 if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4041 continue;
4042 if (h->linker_def || h->ldscript_def)
4043 continue;
4044
4045 syms[dst_count++] = sym;
4046 }
4047
4048 syms[dst_count] = NULL;
4049
4050 return dst_count;
4051 }
4052
4053 /* Don't output section symbols for sections that are not going to be
4054 output, that are duplicates or there is no BFD section. */
4055
4056 static bool
4057 ignore_section_sym (bfd *abfd, asymbol *sym)
4058 {
4059 elf_symbol_type *type_ptr;
4060
4061 if (sym == NULL)
4062 return false;
4063
4064 if ((sym->flags & BSF_SECTION_SYM) == 0)
4065 return false;
4066
4067 /* Ignore the section symbol if it isn't used. */
4068 if ((sym->flags & BSF_SECTION_SYM_USED) == 0)
4069 return true;
4070
4071 if (sym->section == NULL)
4072 return true;
4073
4074 type_ptr = elf_symbol_from (sym);
4075 return ((type_ptr != NULL
4076 && type_ptr->internal_elf_sym.st_shndx != 0
4077 && bfd_is_abs_section (sym->section))
4078 || !(sym->section->owner == abfd
4079 || (sym->section->output_section != NULL
4080 && sym->section->output_section->owner == abfd
4081 && sym->section->output_offset == 0)
4082 || bfd_is_abs_section (sym->section)));
4083 }
4084
4085 /* Map symbol from it's internal number to the external number, moving
4086 all local symbols to be at the head of the list. */
4087
4088 static bool
4089 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4090 {
4091 unsigned int symcount = bfd_get_symcount (abfd);
4092 asymbol **syms = bfd_get_outsymbols (abfd);
4093 asymbol **sect_syms;
4094 unsigned int num_locals = 0;
4095 unsigned int num_globals = 0;
4096 unsigned int num_locals2 = 0;
4097 unsigned int num_globals2 = 0;
4098 unsigned int max_index = 0;
4099 unsigned int idx;
4100 asection *asect;
4101 asymbol **new_syms;
4102 size_t amt;
4103
4104 #ifdef DEBUG
4105 fprintf (stderr, "elf_map_symbols\n");
4106 fflush (stderr);
4107 #endif
4108
4109 for (asect = abfd->sections; asect; asect = asect->next)
4110 {
4111 if (max_index < asect->index)
4112 max_index = asect->index;
4113 }
4114
4115 max_index++;
4116 amt = max_index * sizeof (asymbol *);
4117 sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4118 if (sect_syms == NULL)
4119 return false;
4120 elf_section_syms (abfd) = sect_syms;
4121 elf_num_section_syms (abfd) = max_index;
4122
4123 /* Init sect_syms entries for any section symbols we have already
4124 decided to output. */
4125 for (idx = 0; idx < symcount; idx++)
4126 {
4127 asymbol *sym = syms[idx];
4128
4129 if ((sym->flags & BSF_SECTION_SYM) != 0
4130 && sym->value == 0
4131 && !ignore_section_sym (abfd, sym)
4132 && !bfd_is_abs_section (sym->section))
4133 {
4134 asection *sec = sym->section;
4135
4136 if (sec->owner != abfd)
4137 sec = sec->output_section;
4138
4139 sect_syms[sec->index] = syms[idx];
4140 }
4141 }
4142
4143 /* Classify all of the symbols. */
4144 for (idx = 0; idx < symcount; idx++)
4145 {
4146 if (sym_is_global (abfd, syms[idx]))
4147 num_globals++;
4148 else if (!ignore_section_sym (abfd, syms[idx]))
4149 num_locals++;
4150 }
4151
4152 /* We will be adding a section symbol for each normal BFD section. Most
4153 sections will already have a section symbol in outsymbols, but
4154 eg. SHT_GROUP sections will not, and we need the section symbol mapped
4155 at least in that case. */
4156 for (asect = abfd->sections; asect; asect = asect->next)
4157 {
4158 asymbol *sym = asect->symbol;
4159 /* Don't include ignored section symbols. */
4160 if (!ignore_section_sym (abfd, sym)
4161 && sect_syms[asect->index] == NULL)
4162 {
4163 if (!sym_is_global (abfd, asect->symbol))
4164 num_locals++;
4165 else
4166 num_globals++;
4167 }
4168 }
4169
4170 /* Now sort the symbols so the local symbols are first. */
4171 amt = (num_locals + num_globals) * sizeof (asymbol *);
4172 new_syms = (asymbol **) bfd_alloc (abfd, amt);
4173 if (new_syms == NULL)
4174 return false;
4175
4176 for (idx = 0; idx < symcount; idx++)
4177 {
4178 asymbol *sym = syms[idx];
4179 unsigned int i;
4180
4181 if (sym_is_global (abfd, sym))
4182 i = num_locals + num_globals2++;
4183 /* Don't include ignored section symbols. */
4184 else if (!ignore_section_sym (abfd, sym))
4185 i = num_locals2++;
4186 else
4187 continue;
4188 new_syms[i] = sym;
4189 sym->udata.i = i + 1;
4190 }
4191 for (asect = abfd->sections; asect; asect = asect->next)
4192 {
4193 asymbol *sym = asect->symbol;
4194 if (!ignore_section_sym (abfd, sym)
4195 && sect_syms[asect->index] == NULL)
4196 {
4197 unsigned int i;
4198
4199 sect_syms[asect->index] = sym;
4200 if (!sym_is_global (abfd, sym))
4201 i = num_locals2++;
4202 else
4203 i = num_locals + num_globals2++;
4204 new_syms[i] = sym;
4205 sym->udata.i = i + 1;
4206 }
4207 }
4208
4209 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4210
4211 *pnum_locals = num_locals;
4212 return true;
4213 }
4214
4215 /* Align to the maximum file alignment that could be required for any
4216 ELF data structure. */
4217
4218 static inline file_ptr
4219 align_file_position (file_ptr off, int align)
4220 {
4221 return (off + align - 1) & ~(align - 1);
4222 }
4223
4224 /* Assign a file position to a section, optionally aligning to the
4225 required section alignment. */
4226
4227 file_ptr
4228 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4229 file_ptr offset,
4230 bool align)
4231 {
4232 if (align && i_shdrp->sh_addralign > 1)
4233 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign & -i_shdrp->sh_addralign);
4234 i_shdrp->sh_offset = offset;
4235 if (i_shdrp->bfd_section != NULL)
4236 i_shdrp->bfd_section->filepos = offset;
4237 if (i_shdrp->sh_type != SHT_NOBITS)
4238 offset += i_shdrp->sh_size;
4239 return offset;
4240 }
4241
4242 /* Compute the file positions we are going to put the sections at, and
4243 otherwise prepare to begin writing out the ELF file. If LINK_INFO
4244 is not NULL, this is being called by the ELF backend linker. */
4245
4246 bool
4247 _bfd_elf_compute_section_file_positions (bfd *abfd,
4248 struct bfd_link_info *link_info)
4249 {
4250 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4251 struct fake_section_arg fsargs;
4252 bool failed;
4253 struct elf_strtab_hash *strtab = NULL;
4254 Elf_Internal_Shdr *shstrtab_hdr;
4255 bool need_symtab;
4256
4257 if (abfd->output_has_begun)
4258 return true;
4259
4260 /* Do any elf backend specific processing first. */
4261 if (bed->elf_backend_begin_write_processing)
4262 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4263
4264 if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4265 return false;
4266
4267 fsargs.failed = false;
4268 fsargs.link_info = link_info;
4269 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4270 if (fsargs.failed)
4271 return false;
4272
4273 if (!assign_section_numbers (abfd, link_info))
4274 return false;
4275
4276 /* The backend linker builds symbol table information itself. */
4277 need_symtab = (link_info == NULL
4278 && (bfd_get_symcount (abfd) > 0
4279 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4280 == HAS_RELOC)));
4281 if (need_symtab)
4282 {
4283 /* Non-zero if doing a relocatable link. */
4284 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4285
4286 if (! swap_out_syms (abfd, &strtab, relocatable_p, link_info))
4287 return false;
4288 }
4289
4290 failed = false;
4291 if (link_info == NULL)
4292 {
4293 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4294 if (failed)
4295 return false;
4296 }
4297
4298 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4299 /* sh_name was set in init_file_header. */
4300 shstrtab_hdr->sh_type = SHT_STRTAB;
4301 shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
4302 shstrtab_hdr->sh_addr = 0;
4303 /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */
4304 shstrtab_hdr->sh_entsize = 0;
4305 shstrtab_hdr->sh_link = 0;
4306 shstrtab_hdr->sh_info = 0;
4307 /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load. */
4308 shstrtab_hdr->sh_addralign = 1;
4309
4310 if (!assign_file_positions_except_relocs (abfd, link_info))
4311 return false;
4312
4313 if (need_symtab)
4314 {
4315 file_ptr off;
4316 Elf_Internal_Shdr *hdr;
4317
4318 off = elf_next_file_pos (abfd);
4319
4320 hdr = & elf_symtab_hdr (abfd);
4321 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4322
4323 if (elf_symtab_shndx_list (abfd) != NULL)
4324 {
4325 hdr = & elf_symtab_shndx_list (abfd)->hdr;
4326 if (hdr->sh_size != 0)
4327 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4328 /* FIXME: What about other symtab_shndx sections in the list ? */
4329 }
4330
4331 hdr = &elf_tdata (abfd)->strtab_hdr;
4332 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
4333
4334 elf_next_file_pos (abfd) = off;
4335
4336 /* Now that we know where the .strtab section goes, write it
4337 out. */
4338 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4339 || ! _bfd_elf_strtab_emit (abfd, strtab))
4340 return false;
4341 _bfd_elf_strtab_free (strtab);
4342 }
4343
4344 abfd->output_has_begun = true;
4345
4346 return true;
4347 }
4348
4349 /* Retrieve .eh_frame_hdr. Prior to size_dynamic_sections the
4350 function effectively returns whether --eh-frame-hdr is given on the
4351 command line. After size_dynamic_sections the result reflects
4352 whether .eh_frame_hdr will actually be output (sizing isn't done
4353 until ldemul_after_allocation). */
4354
4355 static asection *
4356 elf_eh_frame_hdr (const struct bfd_link_info *info)
4357 {
4358 if (info != NULL && is_elf_hash_table (info->hash))
4359 return elf_hash_table (info)->eh_info.hdr_sec;
4360 return NULL;
4361 }
4362
4363 /* Make an initial estimate of the size of the program header. If we
4364 get the number wrong here, we'll redo section placement. */
4365
4366 static bfd_size_type
4367 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4368 {
4369 size_t segs;
4370 asection *s;
4371 const struct elf_backend_data *bed;
4372
4373 /* Assume we will need exactly two PT_LOAD segments: one for text
4374 and one for data. */
4375 segs = 2;
4376
4377 s = bfd_get_section_by_name (abfd, ".interp");
4378 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4379 {
4380 /* If we have a loadable interpreter section, we need a
4381 PT_INTERP segment. In this case, assume we also need a
4382 PT_PHDR segment, although that may not be true for all
4383 targets. */
4384 segs += 2;
4385 }
4386
4387 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4388 {
4389 /* We need a PT_DYNAMIC segment. */
4390 ++segs;
4391 }
4392
4393 if (info != NULL && info->relro)
4394 {
4395 /* We need a PT_GNU_RELRO segment. */
4396 ++segs;
4397 }
4398
4399 if (elf_eh_frame_hdr (info))
4400 {
4401 /* We need a PT_GNU_EH_FRAME segment. */
4402 ++segs;
4403 }
4404
4405 if (elf_stack_flags (abfd))
4406 {
4407 /* We need a PT_GNU_STACK segment. */
4408 ++segs;
4409 }
4410
4411 s = bfd_get_section_by_name (abfd,
4412 NOTE_GNU_PROPERTY_SECTION_NAME);
4413 if (s != NULL && s->size != 0)
4414 {
4415 /* We need a PT_GNU_PROPERTY segment. */
4416 ++segs;
4417 }
4418
4419 for (s = abfd->sections; s != NULL; s = s->next)
4420 {
4421 if ((s->flags & SEC_LOAD) != 0
4422 && elf_section_type (s) == SHT_NOTE)
4423 {
4424 unsigned int alignment_power;
4425 /* We need a PT_NOTE segment. */
4426 ++segs;
4427 /* Try to create just one PT_NOTE segment for all adjacent
4428 loadable SHT_NOTE sections. gABI requires that within a
4429 PT_NOTE segment (and also inside of each SHT_NOTE section)
4430 each note should have the same alignment. So we check
4431 whether the sections are correctly aligned. */
4432 alignment_power = s->alignment_power;
4433 while (s->next != NULL
4434 && s->next->alignment_power == alignment_power
4435 && (s->next->flags & SEC_LOAD) != 0
4436 && elf_section_type (s->next) == SHT_NOTE)
4437 s = s->next;
4438 }
4439 }
4440
4441 for (s = abfd->sections; s != NULL; s = s->next)
4442 {
4443 if (s->flags & SEC_THREAD_LOCAL)
4444 {
4445 /* We need a PT_TLS segment. */
4446 ++segs;
4447 break;
4448 }
4449 }
4450
4451 bed = get_elf_backend_data (abfd);
4452
4453 if ((abfd->flags & D_PAGED) != 0
4454 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4455 {
4456 /* Add a PT_GNU_MBIND segment for each mbind section. */
4457 bfd_vma commonpagesize;
4458 unsigned int page_align_power;
4459
4460 if (info != NULL)
4461 commonpagesize = info->commonpagesize;
4462 else
4463 commonpagesize = bed->commonpagesize;
4464 page_align_power = bfd_log2 (commonpagesize);
4465 for (s = abfd->sections; s != NULL; s = s->next)
4466 if (elf_section_flags (s) & SHF_GNU_MBIND)
4467 {
4468 if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4469 {
4470 _bfd_error_handler
4471 /* xgettext:c-format */
4472 (_("%pB: GNU_MBIND section `%pA' has invalid "
4473 "sh_info field: %d"),
4474 abfd, s, elf_section_data (s)->this_hdr.sh_info);
4475 continue;
4476 }
4477 /* Align mbind section to page size. */
4478 if (s->alignment_power < page_align_power)
4479 s->alignment_power = page_align_power;
4480 segs ++;
4481 }
4482 }
4483
4484 /* Let the backend count up any program headers it might need. */
4485 if (bed->elf_backend_additional_program_headers)
4486 {
4487 int a;
4488
4489 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4490 if (a == -1)
4491 abort ();
4492 segs += a;
4493 }
4494
4495 return segs * bed->s->sizeof_phdr;
4496 }
4497
4498 /* Find the segment that contains the output_section of section. */
4499
4500 Elf_Internal_Phdr *
4501 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4502 {
4503 struct elf_segment_map *m;
4504 Elf_Internal_Phdr *p;
4505
4506 for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
4507 m != NULL;
4508 m = m->next, p++)
4509 {
4510 int i;
4511
4512 for (i = m->count - 1; i >= 0; i--)
4513 if (m->sections[i] == section)
4514 return p;
4515 }
4516
4517 return NULL;
4518 }
4519
4520 /* Create a mapping from a set of sections to a program segment. */
4521
4522 static struct elf_segment_map *
4523 make_mapping (bfd *abfd,
4524 asection **sections,
4525 unsigned int from,
4526 unsigned int to,
4527 bool phdr)
4528 {
4529 struct elf_segment_map *m;
4530 unsigned int i;
4531 asection **hdrpp;
4532 size_t amt;
4533
4534 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4535 amt += (to - from) * sizeof (asection *);
4536 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4537 if (m == NULL)
4538 return NULL;
4539 m->next = NULL;
4540 m->p_type = PT_LOAD;
4541 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
4542 m->sections[i - from] = *hdrpp;
4543 m->count = to - from;
4544
4545 if (from == 0 && phdr)
4546 {
4547 /* Include the headers in the first PT_LOAD segment. */
4548 m->includes_filehdr = 1;
4549 m->includes_phdrs = 1;
4550 }
4551
4552 return m;
4553 }
4554
4555 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
4556 on failure. */
4557
4558 struct elf_segment_map *
4559 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
4560 {
4561 struct elf_segment_map *m;
4562
4563 m = (struct elf_segment_map *) bfd_zalloc (abfd,
4564 sizeof (struct elf_segment_map));
4565 if (m == NULL)
4566 return NULL;
4567 m->next = NULL;
4568 m->p_type = PT_DYNAMIC;
4569 m->count = 1;
4570 m->sections[0] = dynsec;
4571
4572 return m;
4573 }
4574
4575 /* Possibly add or remove segments from the segment map. */
4576
4577 static bool
4578 elf_modify_segment_map (bfd *abfd,
4579 struct bfd_link_info *info,
4580 bool remove_empty_load)
4581 {
4582 struct elf_segment_map **m;
4583 const struct elf_backend_data *bed;
4584
4585 /* The placement algorithm assumes that non allocated sections are
4586 not in PT_LOAD segments. We ensure this here by removing such
4587 sections from the segment map. We also remove excluded
4588 sections. Finally, any PT_LOAD segment without sections is
4589 removed. */
4590 m = &elf_seg_map (abfd);
4591 while (*m)
4592 {
4593 unsigned int i, new_count;
4594
4595 for (new_count = 0, i = 0; i < (*m)->count; i++)
4596 {
4597 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
4598 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
4599 || (*m)->p_type != PT_LOAD))
4600 {
4601 (*m)->sections[new_count] = (*m)->sections[i];
4602 new_count++;
4603 }
4604 }
4605 (*m)->count = new_count;
4606
4607 if (remove_empty_load
4608 && (*m)->p_type == PT_LOAD
4609 && (*m)->count == 0
4610 && !(*m)->includes_phdrs)
4611 *m = (*m)->next;
4612 else
4613 m = &(*m)->next;
4614 }
4615
4616 bed = get_elf_backend_data (abfd);
4617 if (bed->elf_backend_modify_segment_map != NULL)
4618 {
4619 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
4620 return false;
4621 }
4622
4623 return true;
4624 }
4625
4626 #define IS_TBSS(s) \
4627 ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
4628
4629 /* Set up a mapping from BFD sections to program segments. Update
4630 NEED_LAYOUT if the section layout is changed. */
4631
4632 bool
4633 _bfd_elf_map_sections_to_segments (bfd *abfd,
4634 struct bfd_link_info *info,
4635 bool *need_layout)
4636 {
4637 unsigned int count;
4638 struct elf_segment_map *m;
4639 asection **sections = NULL;
4640 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4641 bool no_user_phdrs;
4642
4643 no_user_phdrs = elf_seg_map (abfd) == NULL;
4644
4645 if (info != NULL)
4646 {
4647 info->user_phdrs = !no_user_phdrs;
4648
4649 /* Size the relative relocations if DT_RELR is enabled. */
4650 if (info->enable_dt_relr
4651 && need_layout != NULL
4652 && bed->size_relative_relocs
4653 && !bed->size_relative_relocs (info, need_layout))
4654 info->callbacks->einfo
4655 (_("%F%P: failed to size relative relocations\n"));
4656 }
4657
4658 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
4659 {
4660 asection *s;
4661 unsigned int i;
4662 struct elf_segment_map *mfirst;
4663 struct elf_segment_map **pm;
4664 asection *last_hdr;
4665 bfd_vma last_size;
4666 unsigned int hdr_index;
4667 bfd_vma maxpagesize;
4668 asection **hdrpp;
4669 bool phdr_in_segment;
4670 bool writable;
4671 bool executable;
4672 unsigned int tls_count = 0;
4673 asection *first_tls = NULL;
4674 asection *first_mbind = NULL;
4675 asection *dynsec, *eh_frame_hdr;
4676 size_t amt;
4677 bfd_vma addr_mask, wrap_to = 0; /* Bytes. */
4678 bfd_size_type phdr_size; /* Octets/bytes. */
4679 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
4680
4681 /* Select the allocated sections, and sort them. */
4682
4683 amt = bfd_count_sections (abfd) * sizeof (asection *);
4684 sections = (asection **) bfd_malloc (amt);
4685 if (sections == NULL)
4686 goto error_return;
4687
4688 /* Calculate top address, avoiding undefined behaviour of shift
4689 left operator when shift count is equal to size of type
4690 being shifted. */
4691 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
4692 addr_mask = (addr_mask << 1) + 1;
4693
4694 i = 0;
4695 for (s = abfd->sections; s != NULL; s = s->next)
4696 {
4697 if ((s->flags & SEC_ALLOC) != 0)
4698 {
4699 /* target_index is unused until bfd_elf_final_link
4700 starts output of section symbols. Use it to make
4701 qsort stable. */
4702 s->target_index = i;
4703 sections[i] = s;
4704 ++i;
4705 /* A wrapping section potentially clashes with header. */
4706 if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
4707 wrap_to = (s->lma + s->size / opb) & addr_mask;
4708 }
4709 }
4710 BFD_ASSERT (i <= bfd_count_sections (abfd));
4711 count = i;
4712
4713 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
4714
4715 phdr_size = elf_program_header_size (abfd);
4716 if (phdr_size == (bfd_size_type) -1)
4717 phdr_size = get_program_header_size (abfd, info);
4718 phdr_size += bed->s->sizeof_ehdr;
4719 /* phdr_size is compared to LMA values which are in bytes. */
4720 phdr_size /= opb;
4721 if (info != NULL)
4722 maxpagesize = info->maxpagesize;
4723 else
4724 maxpagesize = bed->maxpagesize;
4725 if (maxpagesize == 0)
4726 maxpagesize = 1;
4727 phdr_in_segment = info != NULL && info->load_phdrs;
4728 if (count != 0
4729 && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
4730 >= (phdr_size & (maxpagesize - 1))))
4731 /* For compatibility with old scripts that may not be using
4732 SIZEOF_HEADERS, add headers when it looks like space has
4733 been left for them. */
4734 phdr_in_segment = true;
4735
4736 /* Build the mapping. */
4737 mfirst = NULL;
4738 pm = &mfirst;
4739
4740 /* If we have a .interp section, then create a PT_PHDR segment for
4741 the program headers and a PT_INTERP segment for the .interp
4742 section. */
4743 s = bfd_get_section_by_name (abfd, ".interp");
4744 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4745 {
4746 amt = sizeof (struct elf_segment_map);
4747 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4748 if (m == NULL)
4749 goto error_return;
4750 m->next = NULL;
4751 m->p_type = PT_PHDR;
4752 m->p_flags = PF_R;
4753 m->p_flags_valid = 1;
4754 m->includes_phdrs = 1;
4755 phdr_in_segment = true;
4756 *pm = m;
4757 pm = &m->next;
4758
4759 amt = sizeof (struct elf_segment_map);
4760 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4761 if (m == NULL)
4762 goto error_return;
4763 m->next = NULL;
4764 m->p_type = PT_INTERP;
4765 m->count = 1;
4766 m->sections[0] = s;
4767
4768 *pm = m;
4769 pm = &m->next;
4770 }
4771
4772 /* Look through the sections. We put sections in the same program
4773 segment when the start of the second section can be placed within
4774 a few bytes of the end of the first section. */
4775 last_hdr = NULL;
4776 last_size = 0;
4777 hdr_index = 0;
4778 writable = false;
4779 executable = false;
4780 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
4781 if (dynsec != NULL
4782 && (dynsec->flags & SEC_LOAD) == 0)
4783 dynsec = NULL;
4784
4785 if ((abfd->flags & D_PAGED) == 0)
4786 phdr_in_segment = false;
4787
4788 /* Deal with -Ttext or something similar such that the first section
4789 is not adjacent to the program headers. This is an
4790 approximation, since at this point we don't know exactly how many
4791 program headers we will need. */
4792 if (phdr_in_segment && count > 0)
4793 {
4794 bfd_vma phdr_lma; /* Bytes. */
4795 bool separate_phdr = false;
4796
4797 phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
4798 if (info != NULL
4799 && info->separate_code
4800 && (sections[0]->flags & SEC_CODE) != 0)
4801 {
4802 /* If data sections should be separate from code and
4803 thus not executable, and the first section is
4804 executable then put the file and program headers in
4805 their own PT_LOAD. */
4806 separate_phdr = true;
4807 if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
4808 == (sections[0]->lma & addr_mask & -maxpagesize)))
4809 {
4810 /* The file and program headers are currently on the
4811 same page as the first section. Put them on the
4812 previous page if we can. */
4813 if (phdr_lma >= maxpagesize)
4814 phdr_lma -= maxpagesize;
4815 else
4816 separate_phdr = false;
4817 }
4818 }
4819 if ((sections[0]->lma & addr_mask) < phdr_lma
4820 || (sections[0]->lma & addr_mask) < phdr_size)
4821 /* If file and program headers would be placed at the end
4822 of memory then it's probably better to omit them. */
4823 phdr_in_segment = false;
4824 else if (phdr_lma < wrap_to)
4825 /* If a section wraps around to where we'll be placing
4826 file and program headers, then the headers will be
4827 overwritten. */
4828 phdr_in_segment = false;
4829 else if (separate_phdr)
4830 {
4831 m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
4832 if (m == NULL)
4833 goto error_return;
4834 m->p_paddr = phdr_lma * opb;
4835 m->p_vaddr_offset
4836 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
4837 m->p_paddr_valid = 1;
4838 *pm = m;
4839 pm = &m->next;
4840 phdr_in_segment = false;
4841 }
4842 }
4843
4844 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
4845 {
4846 asection *hdr;
4847 bool new_segment;
4848
4849 hdr = *hdrpp;
4850
4851 /* See if this section and the last one will fit in the same
4852 segment. */
4853
4854 if (last_hdr == NULL)
4855 {
4856 /* If we don't have a segment yet, then we don't need a new
4857 one (we build the last one after this loop). */
4858 new_segment = false;
4859 }
4860 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
4861 {
4862 /* If this section has a different relation between the
4863 virtual address and the load address, then we need a new
4864 segment. */
4865 new_segment = true;
4866 }
4867 else if (hdr->lma < last_hdr->lma + last_size
4868 || last_hdr->lma + last_size < last_hdr->lma)
4869 {
4870 /* If this section has a load address that makes it overlap
4871 the previous section, then we need a new segment. */
4872 new_segment = true;
4873 }
4874 else if ((abfd->flags & D_PAGED) != 0
4875 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
4876 == (hdr->lma & -maxpagesize)))
4877 {
4878 /* If we are demand paged then we can't map two disk
4879 pages onto the same memory page. */
4880 new_segment = false;
4881 }
4882 /* In the next test we have to be careful when last_hdr->lma is close
4883 to the end of the address space. If the aligned address wraps
4884 around to the start of the address space, then there are no more
4885 pages left in memory and it is OK to assume that the current
4886 section can be included in the current segment. */
4887 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4888 + maxpagesize > last_hdr->lma)
4889 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4890 + maxpagesize <= hdr->lma))
4891 {
4892 /* If putting this section in this segment would force us to
4893 skip a page in the segment, then we need a new segment. */
4894 new_segment = true;
4895 }
4896 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
4897 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
4898 {
4899 /* We don't want to put a loaded section after a
4900 nonloaded (ie. bss style) section in the same segment
4901 as that will force the non-loaded section to be loaded.
4902 Consider .tbss sections as loaded for this purpose. */
4903 new_segment = true;
4904 }
4905 else if ((abfd->flags & D_PAGED) == 0)
4906 {
4907 /* If the file is not demand paged, which means that we
4908 don't require the sections to be correctly aligned in the
4909 file, then there is no other reason for a new segment. */
4910 new_segment = false;
4911 }
4912 else if (info != NULL
4913 && info->separate_code
4914 && executable != ((hdr->flags & SEC_CODE) != 0))
4915 {
4916 new_segment = true;
4917 }
4918 else if (! writable
4919 && (hdr->flags & SEC_READONLY) == 0)
4920 {
4921 /* We don't want to put a writable section in a read only
4922 segment. */
4923 new_segment = true;
4924 }
4925 else
4926 {
4927 /* Otherwise, we can use the same segment. */
4928 new_segment = false;
4929 }
4930
4931 /* Allow interested parties a chance to override our decision. */
4932 if (last_hdr != NULL
4933 && info != NULL
4934 && info->callbacks->override_segment_assignment != NULL)
4935 new_segment
4936 = info->callbacks->override_segment_assignment (info, abfd, hdr,
4937 last_hdr,
4938 new_segment);
4939
4940 if (! new_segment)
4941 {
4942 if ((hdr->flags & SEC_READONLY) == 0)
4943 writable = true;
4944 if ((hdr->flags & SEC_CODE) != 0)
4945 executable = true;
4946 last_hdr = hdr;
4947 /* .tbss sections effectively have zero size. */
4948 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4949 continue;
4950 }
4951
4952 /* We need a new program segment. We must create a new program
4953 header holding all the sections from hdr_index until hdr. */
4954
4955 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4956 if (m == NULL)
4957 goto error_return;
4958
4959 *pm = m;
4960 pm = &m->next;
4961
4962 if ((hdr->flags & SEC_READONLY) == 0)
4963 writable = true;
4964 else
4965 writable = false;
4966
4967 if ((hdr->flags & SEC_CODE) == 0)
4968 executable = false;
4969 else
4970 executable = true;
4971
4972 last_hdr = hdr;
4973 /* .tbss sections effectively have zero size. */
4974 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
4975 hdr_index = i;
4976 phdr_in_segment = false;
4977 }
4978
4979 /* Create a final PT_LOAD program segment, but not if it's just
4980 for .tbss. */
4981 if (last_hdr != NULL
4982 && (i - hdr_index != 1
4983 || !IS_TBSS (last_hdr)))
4984 {
4985 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4986 if (m == NULL)
4987 goto error_return;
4988
4989 *pm = m;
4990 pm = &m->next;
4991 }
4992
4993 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
4994 if (dynsec != NULL)
4995 {
4996 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
4997 if (m == NULL)
4998 goto error_return;
4999 *pm = m;
5000 pm = &m->next;
5001 }
5002
5003 /* For each batch of consecutive loadable SHT_NOTE sections,
5004 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
5005 because if we link together nonloadable .note sections and
5006 loadable .note sections, we will generate two .note sections
5007 in the output file. */
5008 for (s = abfd->sections; s != NULL; s = s->next)
5009 {
5010 if ((s->flags & SEC_LOAD) != 0
5011 && elf_section_type (s) == SHT_NOTE)
5012 {
5013 asection *s2;
5014 unsigned int alignment_power = s->alignment_power;
5015
5016 count = 1;
5017 for (s2 = s; s2->next != NULL; s2 = s2->next)
5018 {
5019 if (s2->next->alignment_power == alignment_power
5020 && (s2->next->flags & SEC_LOAD) != 0
5021 && elf_section_type (s2->next) == SHT_NOTE
5022 && align_power (s2->lma + s2->size / opb,
5023 alignment_power)
5024 == s2->next->lma)
5025 count++;
5026 else
5027 break;
5028 }
5029 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5030 amt += count * sizeof (asection *);
5031 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5032 if (m == NULL)
5033 goto error_return;
5034 m->next = NULL;
5035 m->p_type = PT_NOTE;
5036 m->count = count;
5037 while (count > 1)
5038 {
5039 m->sections[m->count - count--] = s;
5040 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5041 s = s->next;
5042 }
5043 m->sections[m->count - 1] = s;
5044 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5045 *pm = m;
5046 pm = &m->next;
5047 }
5048 if (s->flags & SEC_THREAD_LOCAL)
5049 {
5050 if (! tls_count)
5051 first_tls = s;
5052 tls_count++;
5053 }
5054 if (first_mbind == NULL
5055 && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5056 first_mbind = s;
5057 }
5058
5059 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
5060 if (tls_count > 0)
5061 {
5062 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5063 amt += tls_count * sizeof (asection *);
5064 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5065 if (m == NULL)
5066 goto error_return;
5067 m->next = NULL;
5068 m->p_type = PT_TLS;
5069 m->count = tls_count;
5070 /* Mandated PF_R. */
5071 m->p_flags = PF_R;
5072 m->p_flags_valid = 1;
5073 s = first_tls;
5074 for (i = 0; i < tls_count; ++i)
5075 {
5076 if ((s->flags & SEC_THREAD_LOCAL) == 0)
5077 {
5078 _bfd_error_handler
5079 (_("%pB: TLS sections are not adjacent:"), abfd);
5080 s = first_tls;
5081 i = 0;
5082 while (i < tls_count)
5083 {
5084 if ((s->flags & SEC_THREAD_LOCAL) != 0)
5085 {
5086 _bfd_error_handler (_(" TLS: %pA"), s);
5087 i++;
5088 }
5089 else
5090 _bfd_error_handler (_(" non-TLS: %pA"), s);
5091 s = s->next;
5092 }
5093 bfd_set_error (bfd_error_bad_value);
5094 goto error_return;
5095 }
5096 m->sections[i] = s;
5097 s = s->next;
5098 }
5099
5100 *pm = m;
5101 pm = &m->next;
5102 }
5103
5104 if (first_mbind
5105 && (abfd->flags & D_PAGED) != 0
5106 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5107 for (s = first_mbind; s != NULL; s = s->next)
5108 if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5109 && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5110 {
5111 /* Mandated PF_R. */
5112 unsigned long p_flags = PF_R;
5113 if ((s->flags & SEC_READONLY) == 0)
5114 p_flags |= PF_W;
5115 if ((s->flags & SEC_CODE) != 0)
5116 p_flags |= PF_X;
5117
5118 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5119 m = bfd_zalloc (abfd, amt);
5120 if (m == NULL)
5121 goto error_return;
5122 m->next = NULL;
5123 m->p_type = (PT_GNU_MBIND_LO
5124 + elf_section_data (s)->this_hdr.sh_info);
5125 m->count = 1;
5126 m->p_flags_valid = 1;
5127 m->sections[0] = s;
5128 m->p_flags = p_flags;
5129
5130 *pm = m;
5131 pm = &m->next;
5132 }
5133
5134 s = bfd_get_section_by_name (abfd,
5135 NOTE_GNU_PROPERTY_SECTION_NAME);
5136 if (s != NULL && s->size != 0)
5137 {
5138 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5139 m = bfd_zalloc (abfd, amt);
5140 if (m == NULL)
5141 goto error_return;
5142 m->next = NULL;
5143 m->p_type = PT_GNU_PROPERTY;
5144 m->count = 1;
5145 m->p_flags_valid = 1;
5146 m->sections[0] = s;
5147 m->p_flags = PF_R;
5148 *pm = m;
5149 pm = &m->next;
5150 }
5151
5152 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5153 segment. */
5154 eh_frame_hdr = elf_eh_frame_hdr (info);
5155 if (eh_frame_hdr != NULL
5156 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5157 {
5158 amt = sizeof (struct elf_segment_map);
5159 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5160 if (m == NULL)
5161 goto error_return;
5162 m->next = NULL;
5163 m->p_type = PT_GNU_EH_FRAME;
5164 m->count = 1;
5165 m->sections[0] = eh_frame_hdr->output_section;
5166
5167 *pm = m;
5168 pm = &m->next;
5169 }
5170
5171 if (elf_stack_flags (abfd))
5172 {
5173 amt = sizeof (struct elf_segment_map);
5174 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5175 if (m == NULL)
5176 goto error_return;
5177 m->next = NULL;
5178 m->p_type = PT_GNU_STACK;
5179 m->p_flags = elf_stack_flags (abfd);
5180 m->p_align = bed->stack_align;
5181 m->p_flags_valid = 1;
5182 m->p_align_valid = m->p_align != 0;
5183 if (info->stacksize > 0)
5184 {
5185 m->p_size = info->stacksize;
5186 m->p_size_valid = 1;
5187 }
5188
5189 *pm = m;
5190 pm = &m->next;
5191 }
5192
5193 if (info != NULL && info->relro)
5194 {
5195 for (m = mfirst; m != NULL; m = m->next)
5196 {
5197 if (m->p_type == PT_LOAD
5198 && m->count != 0
5199 && m->sections[0]->vma >= info->relro_start
5200 && m->sections[0]->vma < info->relro_end)
5201 {
5202 i = m->count;
5203 while (--i != (unsigned) -1)
5204 {
5205 if (m->sections[i]->size > 0
5206 && (m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
5207 == (SEC_LOAD | SEC_HAS_CONTENTS))
5208 break;
5209 }
5210
5211 if (i != (unsigned) -1)
5212 break;
5213 }
5214 }
5215
5216 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
5217 if (m != NULL)
5218 {
5219 amt = sizeof (struct elf_segment_map);
5220 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5221 if (m == NULL)
5222 goto error_return;
5223 m->next = NULL;
5224 m->p_type = PT_GNU_RELRO;
5225 *pm = m;
5226 pm = &m->next;
5227 }
5228 }
5229
5230 free (sections);
5231 elf_seg_map (abfd) = mfirst;
5232 }
5233
5234 if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
5235 return false;
5236
5237 for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5238 ++count;
5239 elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5240
5241 return true;
5242
5243 error_return:
5244 free (sections);
5245 return false;
5246 }
5247
5248 /* Sort sections by address. */
5249
5250 static int
5251 elf_sort_sections (const void *arg1, const void *arg2)
5252 {
5253 const asection *sec1 = *(const asection **) arg1;
5254 const asection *sec2 = *(const asection **) arg2;
5255 bfd_size_type size1, size2;
5256
5257 /* Sort by LMA first, since this is the address used to
5258 place the section into a segment. */
5259 if (sec1->lma < sec2->lma)
5260 return -1;
5261 else if (sec1->lma > sec2->lma)
5262 return 1;
5263
5264 /* Then sort by VMA. Normally the LMA and the VMA will be
5265 the same, and this will do nothing. */
5266 if (sec1->vma < sec2->vma)
5267 return -1;
5268 else if (sec1->vma > sec2->vma)
5269 return 1;
5270
5271 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
5272
5273 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
5274 && (x)->size != 0)
5275
5276 if (TOEND (sec1))
5277 {
5278 if (!TOEND (sec2))
5279 return 1;
5280 }
5281 else if (TOEND (sec2))
5282 return -1;
5283
5284 #undef TOEND
5285
5286 /* Sort by size, to put zero sized sections
5287 before others at the same address. */
5288
5289 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5290 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5291
5292 if (size1 < size2)
5293 return -1;
5294 if (size1 > size2)
5295 return 1;
5296
5297 return sec1->target_index - sec2->target_index;
5298 }
5299
5300 /* This qsort comparison functions sorts PT_LOAD segments first and
5301 by p_paddr, for assign_file_positions_for_load_sections. */
5302
5303 static int
5304 elf_sort_segments (const void *arg1, const void *arg2)
5305 {
5306 const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5307 const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5308
5309 if (m1->p_type != m2->p_type)
5310 {
5311 if (m1->p_type == PT_NULL)
5312 return 1;
5313 if (m2->p_type == PT_NULL)
5314 return -1;
5315 return m1->p_type < m2->p_type ? -1 : 1;
5316 }
5317 if (m1->includes_filehdr != m2->includes_filehdr)
5318 return m1->includes_filehdr ? -1 : 1;
5319 if (m1->no_sort_lma != m2->no_sort_lma)
5320 return m1->no_sort_lma ? -1 : 1;
5321 if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5322 {
5323 bfd_vma lma1, lma2; /* Octets. */
5324 lma1 = 0;
5325 if (m1->p_paddr_valid)
5326 lma1 = m1->p_paddr;
5327 else if (m1->count != 0)
5328 {
5329 unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
5330 m1->sections[0]);
5331 lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
5332 }
5333 lma2 = 0;
5334 if (m2->p_paddr_valid)
5335 lma2 = m2->p_paddr;
5336 else if (m2->count != 0)
5337 {
5338 unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
5339 m2->sections[0]);
5340 lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
5341 }
5342 if (lma1 != lma2)
5343 return lma1 < lma2 ? -1 : 1;
5344 }
5345 if (m1->idx != m2->idx)
5346 return m1->idx < m2->idx ? -1 : 1;
5347 return 0;
5348 }
5349
5350 /* Ian Lance Taylor writes:
5351
5352 We shouldn't be using % with a negative signed number. That's just
5353 not good. We have to make sure either that the number is not
5354 negative, or that the number has an unsigned type. When the types
5355 are all the same size they wind up as unsigned. When file_ptr is a
5356 larger signed type, the arithmetic winds up as signed long long,
5357 which is wrong.
5358
5359 What we're trying to say here is something like ``increase OFF by
5360 the least amount that will cause it to be equal to the VMA modulo
5361 the page size.'' */
5362 /* In other words, something like:
5363
5364 vma_offset = m->sections[0]->vma % bed->maxpagesize;
5365 off_offset = off % bed->maxpagesize;
5366 if (vma_offset < off_offset)
5367 adjustment = vma_offset + bed->maxpagesize - off_offset;
5368 else
5369 adjustment = vma_offset - off_offset;
5370
5371 which can be collapsed into the expression below. */
5372
5373 static file_ptr
5374 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5375 {
5376 /* PR binutils/16199: Handle an alignment of zero. */
5377 if (maxpagesize == 0)
5378 maxpagesize = 1;
5379 return ((vma - off) % maxpagesize);
5380 }
5381
5382 static void
5383 print_segment_map (const struct elf_segment_map *m)
5384 {
5385 unsigned int j;
5386 const char *pt = get_segment_type (m->p_type);
5387 char buf[32];
5388
5389 if (pt == NULL)
5390 {
5391 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5392 sprintf (buf, "LOPROC+%7.7x",
5393 (unsigned int) (m->p_type - PT_LOPROC));
5394 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5395 sprintf (buf, "LOOS+%7.7x",
5396 (unsigned int) (m->p_type - PT_LOOS));
5397 else
5398 snprintf (buf, sizeof (buf), "%8.8x",
5399 (unsigned int) m->p_type);
5400 pt = buf;
5401 }
5402 fflush (stdout);
5403 fprintf (stderr, "%s:", pt);
5404 for (j = 0; j < m->count; j++)
5405 fprintf (stderr, " %s", m->sections [j]->name);
5406 putc ('\n',stderr);
5407 fflush (stderr);
5408 }
5409
5410 static bool
5411 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
5412 {
5413 void *buf;
5414 bool ret;
5415
5416 if (bfd_seek (abfd, pos, SEEK_SET) != 0)
5417 return false;
5418 buf = bfd_zmalloc (len);
5419 if (buf == NULL)
5420 return false;
5421 ret = bfd_bwrite (buf, len, abfd) == len;
5422 free (buf);
5423 return ret;
5424 }
5425
5426 /* Assign file positions to the sections based on the mapping from
5427 sections to segments. This function also sets up some fields in
5428 the file header. */
5429
5430 static bool
5431 assign_file_positions_for_load_sections (bfd *abfd,
5432 struct bfd_link_info *link_info)
5433 {
5434 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5435 struct elf_segment_map *m;
5436 struct elf_segment_map *phdr_load_seg;
5437 Elf_Internal_Phdr *phdrs;
5438 Elf_Internal_Phdr *p;
5439 file_ptr off; /* Octets. */
5440 bfd_size_type maxpagesize;
5441 bfd_size_type p_align;
5442 bool p_align_p = false;
5443 unsigned int alloc, actual;
5444 unsigned int i, j;
5445 struct elf_segment_map **sorted_seg_map;
5446 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5447
5448 if (link_info == NULL
5449 && !_bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
5450 return false;
5451
5452 alloc = 0;
5453 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5454 m->idx = alloc++;
5455
5456 if (alloc)
5457 {
5458 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5459 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5460 }
5461 else
5462 {
5463 /* PR binutils/12467. */
5464 elf_elfheader (abfd)->e_phoff = 0;
5465 elf_elfheader (abfd)->e_phentsize = 0;
5466 }
5467
5468 elf_elfheader (abfd)->e_phnum = alloc;
5469
5470 if (elf_program_header_size (abfd) == (bfd_size_type) -1)
5471 {
5472 actual = alloc;
5473 elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5474 }
5475 else
5476 {
5477 actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5478 BFD_ASSERT (elf_program_header_size (abfd)
5479 == actual * bed->s->sizeof_phdr);
5480 BFD_ASSERT (actual >= alloc);
5481 }
5482
5483 if (alloc == 0)
5484 {
5485 elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
5486 return true;
5487 }
5488
5489 /* We're writing the size in elf_program_header_size (abfd),
5490 see assign_file_positions_except_relocs, so make sure we have
5491 that amount allocated, with trailing space cleared.
5492 The variable alloc contains the computed need, while
5493 elf_program_header_size (abfd) contains the size used for the
5494 layout.
5495 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5496 where the layout is forced to according to a larger size in the
5497 last iterations for the testcase ld-elf/header. */
5498 phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5499 + alloc * sizeof (*sorted_seg_map)));
5500 sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
5501 elf_tdata (abfd)->phdr = phdrs;
5502 if (phdrs == NULL)
5503 return false;
5504
5505 for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
5506 {
5507 sorted_seg_map[j] = m;
5508 /* If elf_segment_map is not from map_sections_to_segments, the
5509 sections may not be correctly ordered. NOTE: sorting should
5510 not be done to the PT_NOTE section of a corefile, which may
5511 contain several pseudo-sections artificially created by bfd.
5512 Sorting these pseudo-sections breaks things badly. */
5513 if (m->count > 1
5514 && !(elf_elfheader (abfd)->e_type == ET_CORE
5515 && m->p_type == PT_NOTE))
5516 {
5517 for (i = 0; i < m->count; i++)
5518 m->sections[i]->target_index = i;
5519 qsort (m->sections, (size_t) m->count, sizeof (asection *),
5520 elf_sort_sections);
5521 }
5522 }
5523 if (alloc > 1)
5524 qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
5525 elf_sort_segments);
5526
5527 p_align = bed->p_align;
5528 maxpagesize = 1;
5529 if ((abfd->flags & D_PAGED) != 0)
5530 {
5531 if (link_info != NULL)
5532 maxpagesize = link_info->maxpagesize;
5533 else
5534 maxpagesize = bed->maxpagesize;
5535 }
5536
5537 /* Sections must map to file offsets past the ELF file header. */
5538 off = bed->s->sizeof_ehdr;
5539 /* And if one of the PT_LOAD headers doesn't include the program
5540 headers then we'll be mapping program headers in the usual
5541 position after the ELF file header. */
5542 phdr_load_seg = NULL;
5543 for (j = 0; j < alloc; j++)
5544 {
5545 m = sorted_seg_map[j];
5546 if (m->p_type != PT_LOAD)
5547 break;
5548 if (m->includes_phdrs)
5549 {
5550 phdr_load_seg = m;
5551 break;
5552 }
5553 }
5554 if (phdr_load_seg == NULL)
5555 off += actual * bed->s->sizeof_phdr;
5556
5557 for (j = 0; j < alloc; j++)
5558 {
5559 asection **secpp;
5560 bfd_vma off_adjust; /* Octets. */
5561 bool no_contents;
5562
5563 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
5564 number of sections with contents contributing to both p_filesz
5565 and p_memsz, followed by a number of sections with no contents
5566 that just contribute to p_memsz. In this loop, OFF tracks next
5567 available file offset for PT_LOAD and PT_NOTE segments. */
5568 m = sorted_seg_map[j];
5569 p = phdrs + m->idx;
5570 p->p_type = m->p_type;
5571 p->p_flags = m->p_flags;
5572
5573 if (m->count == 0)
5574 p->p_vaddr = m->p_vaddr_offset * opb;
5575 else
5576 p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
5577
5578 if (m->p_paddr_valid)
5579 p->p_paddr = m->p_paddr;
5580 else if (m->count == 0)
5581 p->p_paddr = 0;
5582 else
5583 p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
5584
5585 if (p->p_type == PT_LOAD
5586 && (abfd->flags & D_PAGED) != 0)
5587 {
5588 /* p_align in demand paged PT_LOAD segments effectively stores
5589 the maximum page size. When copying an executable with
5590 objcopy, we set m->p_align from the input file. Use this
5591 value for maxpagesize rather than bed->maxpagesize, which
5592 may be different. Note that we use maxpagesize for PT_TLS
5593 segment alignment later in this function, so we are relying
5594 on at least one PT_LOAD segment appearing before a PT_TLS
5595 segment. */
5596 if (m->p_align_valid)
5597 maxpagesize = m->p_align;
5598 else if (p_align != 0
5599 && (link_info == NULL
5600 || !link_info->maxpagesize_is_set))
5601 /* Set p_align to the default p_align value while laying
5602 out segments aligning to the maximum page size or the
5603 largest section alignment. The run-time loader can
5604 align segments to the default p_align value or the
5605 maximum page size, depending on system page size. */
5606 p_align_p = true;
5607
5608 p->p_align = maxpagesize;
5609 }
5610 else if (m->p_align_valid)
5611 p->p_align = m->p_align;
5612 else if (m->count == 0)
5613 p->p_align = 1 << bed->s->log_file_align;
5614
5615 if (m == phdr_load_seg)
5616 {
5617 if (!m->includes_filehdr)
5618 p->p_offset = off;
5619 off += actual * bed->s->sizeof_phdr;
5620 }
5621
5622 no_contents = false;
5623 off_adjust = 0;
5624 if (p->p_type == PT_LOAD
5625 && m->count > 0)
5626 {
5627 bfd_size_type align; /* Bytes. */
5628 unsigned int align_power = 0;
5629
5630 if (m->p_align_valid)
5631 align = p->p_align;
5632 else
5633 {
5634 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5635 {
5636 unsigned int secalign;
5637
5638 secalign = bfd_section_alignment (*secpp);
5639 if (secalign > align_power)
5640 align_power = secalign;
5641 }
5642 align = (bfd_size_type) 1 << align_power;
5643 if (align < maxpagesize)
5644 {
5645 /* If a section requires alignment higher than the
5646 default p_align value, don't set p_align to the
5647 default p_align value. */
5648 if (align > p_align)
5649 p_align_p = false;
5650 align = maxpagesize;
5651 }
5652 else
5653 {
5654 /* If a section requires alignment higher than the
5655 maximum page size, set p_align to the section
5656 alignment. */
5657 p_align_p = true;
5658 p_align = align;
5659 }
5660 }
5661
5662 for (i = 0; i < m->count; i++)
5663 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
5664 /* If we aren't making room for this section, then
5665 it must be SHT_NOBITS regardless of what we've
5666 set via struct bfd_elf_special_section. */
5667 elf_section_type (m->sections[i]) = SHT_NOBITS;
5668
5669 /* Find out whether this segment contains any loadable
5670 sections. */
5671 no_contents = true;
5672 for (i = 0; i < m->count; i++)
5673 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
5674 {
5675 no_contents = false;
5676 break;
5677 }
5678
5679 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
5680
5681 /* Broken hardware and/or kernel require that files do not
5682 map the same page with different permissions on some hppa
5683 processors. */
5684 if (j != 0
5685 && (abfd->flags & D_PAGED) != 0
5686 && bed->no_page_alias
5687 && (off & (maxpagesize - 1)) != 0
5688 && ((off & -maxpagesize)
5689 == ((off + off_adjust) & -maxpagesize)))
5690 off_adjust += maxpagesize;
5691 off += off_adjust;
5692 if (no_contents)
5693 {
5694 /* We shouldn't need to align the segment on disk since
5695 the segment doesn't need file space, but the gABI
5696 arguably requires the alignment and glibc ld.so
5697 checks it. So to comply with the alignment
5698 requirement but not waste file space, we adjust
5699 p_offset for just this segment. (OFF_ADJUST is
5700 subtracted from OFF later.) This may put p_offset
5701 past the end of file, but that shouldn't matter. */
5702 }
5703 else
5704 off_adjust = 0;
5705 }
5706 /* Make sure the .dynamic section is the first section in the
5707 PT_DYNAMIC segment. */
5708 else if (p->p_type == PT_DYNAMIC
5709 && m->count > 1
5710 && strcmp (m->sections[0]->name, ".dynamic") != 0)
5711 {
5712 _bfd_error_handler
5713 (_("%pB: The first section in the PT_DYNAMIC segment"
5714 " is not the .dynamic section"),
5715 abfd);
5716 bfd_set_error (bfd_error_bad_value);
5717 return false;
5718 }
5719 /* Set the note section type to SHT_NOTE. */
5720 else if (p->p_type == PT_NOTE)
5721 for (i = 0; i < m->count; i++)
5722 elf_section_type (m->sections[i]) = SHT_NOTE;
5723
5724 if (m->includes_filehdr)
5725 {
5726 if (!m->p_flags_valid)
5727 p->p_flags |= PF_R;
5728 p->p_filesz = bed->s->sizeof_ehdr;
5729 p->p_memsz = bed->s->sizeof_ehdr;
5730 if (p->p_type == PT_LOAD)
5731 {
5732 if (m->count > 0)
5733 {
5734 if (p->p_vaddr < (bfd_vma) off
5735 || (!m->p_paddr_valid
5736 && p->p_paddr < (bfd_vma) off))
5737 {
5738 _bfd_error_handler
5739 (_("%pB: not enough room for program headers,"
5740 " try linking with -N"),
5741 abfd);
5742 bfd_set_error (bfd_error_bad_value);
5743 return false;
5744 }
5745 p->p_vaddr -= off;
5746 if (!m->p_paddr_valid)
5747 p->p_paddr -= off;
5748 }
5749 }
5750 else if (sorted_seg_map[0]->includes_filehdr)
5751 {
5752 Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
5753 p->p_vaddr = filehdr->p_vaddr;
5754 if (!m->p_paddr_valid)
5755 p->p_paddr = filehdr->p_paddr;
5756 }
5757 }
5758
5759 if (m->includes_phdrs)
5760 {
5761 if (!m->p_flags_valid)
5762 p->p_flags |= PF_R;
5763 p->p_filesz += actual * bed->s->sizeof_phdr;
5764 p->p_memsz += actual * bed->s->sizeof_phdr;
5765 if (!m->includes_filehdr)
5766 {
5767 if (p->p_type == PT_LOAD)
5768 {
5769 elf_elfheader (abfd)->e_phoff = p->p_offset;
5770 if (m->count > 0)
5771 {
5772 p->p_vaddr -= off - p->p_offset;
5773 if (!m->p_paddr_valid)
5774 p->p_paddr -= off - p->p_offset;
5775 }
5776 }
5777 else if (phdr_load_seg != NULL)
5778 {
5779 Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
5780 bfd_vma phdr_off = 0; /* Octets. */
5781 if (phdr_load_seg->includes_filehdr)
5782 phdr_off = bed->s->sizeof_ehdr;
5783 p->p_vaddr = phdr->p_vaddr + phdr_off;
5784 if (!m->p_paddr_valid)
5785 p->p_paddr = phdr->p_paddr + phdr_off;
5786 p->p_offset = phdr->p_offset + phdr_off;
5787 }
5788 else
5789 p->p_offset = bed->s->sizeof_ehdr;
5790 }
5791 }
5792
5793 if (p->p_type == PT_LOAD
5794 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
5795 {
5796 if (!m->includes_filehdr && !m->includes_phdrs)
5797 {
5798 p->p_offset = off;
5799 if (no_contents)
5800 {
5801 /* Put meaningless p_offset for PT_LOAD segments
5802 without file contents somewhere within the first
5803 page, in an attempt to not point past EOF. */
5804 bfd_size_type align = maxpagesize;
5805 if (align < p->p_align)
5806 align = p->p_align;
5807 if (align < 1)
5808 align = 1;
5809 p->p_offset = off % align;
5810 }
5811 }
5812 else
5813 {
5814 file_ptr adjust; /* Octets. */
5815
5816 adjust = off - (p->p_offset + p->p_filesz);
5817 if (!no_contents)
5818 p->p_filesz += adjust;
5819 p->p_memsz += adjust;
5820 }
5821 }
5822
5823 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
5824 maps. Set filepos for sections in PT_LOAD segments, and in
5825 core files, for sections in PT_NOTE segments.
5826 assign_file_positions_for_non_load_sections will set filepos
5827 for other sections and update p_filesz for other segments. */
5828 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5829 {
5830 asection *sec;
5831 bfd_size_type align;
5832 Elf_Internal_Shdr *this_hdr;
5833
5834 sec = *secpp;
5835 this_hdr = &elf_section_data (sec)->this_hdr;
5836 align = (bfd_size_type) 1 << bfd_section_alignment (sec);
5837
5838 if ((p->p_type == PT_LOAD
5839 || p->p_type == PT_TLS)
5840 && (this_hdr->sh_type != SHT_NOBITS
5841 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
5842 && ((this_hdr->sh_flags & SHF_TLS) == 0
5843 || p->p_type == PT_TLS))))
5844 {
5845 bfd_vma p_start = p->p_paddr; /* Octets. */
5846 bfd_vma p_end = p_start + p->p_memsz; /* Octets. */
5847 bfd_vma s_start = sec->lma * opb; /* Octets. */
5848 bfd_vma adjust = s_start - p_end; /* Octets. */
5849
5850 if (adjust != 0
5851 && (s_start < p_end
5852 || p_end < p_start))
5853 {
5854 _bfd_error_handler
5855 /* xgettext:c-format */
5856 (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64),
5857 abfd, sec, (uint64_t) s_start / opb,
5858 (uint64_t) p_end / opb);
5859 adjust = 0;
5860 sec->lma = p_end / opb;
5861 }
5862 p->p_memsz += adjust;
5863
5864 if (p->p_type == PT_LOAD)
5865 {
5866 if (this_hdr->sh_type != SHT_NOBITS)
5867 {
5868 off_adjust = 0;
5869 if (p->p_filesz + adjust < p->p_memsz)
5870 {
5871 /* We have a PROGBITS section following NOBITS ones.
5872 Allocate file space for the NOBITS section(s) and
5873 zero it. */
5874 adjust = p->p_memsz - p->p_filesz;
5875 if (!write_zeros (abfd, off, adjust))
5876 return false;
5877 }
5878 }
5879 /* We only adjust sh_offset in SHT_NOBITS sections
5880 as would seem proper for their address when the
5881 section is first in the segment. sh_offset
5882 doesn't really have any significance for
5883 SHT_NOBITS anyway, apart from a notional position
5884 relative to other sections. Historically we
5885 didn't bother with adjusting sh_offset and some
5886 programs depend on it not being adjusted. See
5887 pr12921 and pr25662. */
5888 if (this_hdr->sh_type != SHT_NOBITS || i == 0)
5889 {
5890 off += adjust;
5891 if (this_hdr->sh_type == SHT_NOBITS)
5892 off_adjust += adjust;
5893 }
5894 }
5895 if (this_hdr->sh_type != SHT_NOBITS)
5896 p->p_filesz += adjust;
5897 }
5898
5899 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
5900 {
5901 /* The section at i == 0 is the one that actually contains
5902 everything. */
5903 if (i == 0)
5904 {
5905 this_hdr->sh_offset = sec->filepos = off;
5906 off += this_hdr->sh_size;
5907 p->p_filesz = this_hdr->sh_size;
5908 p->p_memsz = 0;
5909 p->p_align = 1;
5910 }
5911 else
5912 {
5913 /* The rest are fake sections that shouldn't be written. */
5914 sec->filepos = 0;
5915 sec->size = 0;
5916 sec->flags = 0;
5917 continue;
5918 }
5919 }
5920 else
5921 {
5922 if (p->p_type == PT_LOAD)
5923 {
5924 this_hdr->sh_offset = sec->filepos = off;
5925 if (this_hdr->sh_type != SHT_NOBITS)
5926 off += this_hdr->sh_size;
5927 }
5928 else if (this_hdr->sh_type == SHT_NOBITS
5929 && (this_hdr->sh_flags & SHF_TLS) != 0
5930 && this_hdr->sh_offset == 0)
5931 {
5932 /* This is a .tbss section that didn't get a PT_LOAD.
5933 (See _bfd_elf_map_sections_to_segments "Create a
5934 final PT_LOAD".) Set sh_offset to the value it
5935 would have if we had created a zero p_filesz and
5936 p_memsz PT_LOAD header for the section. This
5937 also makes the PT_TLS header have the same
5938 p_offset value. */
5939 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
5940 off, align);
5941 this_hdr->sh_offset = sec->filepos = off + adjust;
5942 }
5943
5944 if (this_hdr->sh_type != SHT_NOBITS)
5945 {
5946 p->p_filesz += this_hdr->sh_size;
5947 /* A load section without SHF_ALLOC is something like
5948 a note section in a PT_NOTE segment. These take
5949 file space but are not loaded into memory. */
5950 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5951 p->p_memsz += this_hdr->sh_size;
5952 }
5953 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5954 {
5955 if (p->p_type == PT_TLS)
5956 p->p_memsz += this_hdr->sh_size;
5957
5958 /* .tbss is special. It doesn't contribute to p_memsz of
5959 normal segments. */
5960 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
5961 p->p_memsz += this_hdr->sh_size;
5962 }
5963
5964 if (align > p->p_align
5965 && !m->p_align_valid
5966 && (p->p_type != PT_LOAD
5967 || (abfd->flags & D_PAGED) == 0))
5968 p->p_align = align;
5969 }
5970
5971 if (!m->p_flags_valid)
5972 {
5973 p->p_flags |= PF_R;
5974 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
5975 p->p_flags |= PF_X;
5976 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
5977 p->p_flags |= PF_W;
5978 }
5979 }
5980
5981 off -= off_adjust;
5982
5983 /* PR ld/20815 - Check that the program header segment, if
5984 present, will be loaded into memory. */
5985 if (p->p_type == PT_PHDR
5986 && phdr_load_seg == NULL
5987 && !(bed->elf_backend_allow_non_load_phdr != NULL
5988 && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
5989 {
5990 /* The fix for this error is usually to edit the linker script being
5991 used and set up the program headers manually. Either that or
5992 leave room for the headers at the start of the SECTIONS. */
5993 _bfd_error_handler (_("%pB: error: PHDR segment not covered"
5994 " by LOAD segment"),
5995 abfd);
5996 if (link_info == NULL)
5997 return false;
5998 /* Arrange for the linker to exit with an error, deleting
5999 the output file unless --noinhibit-exec is given. */
6000 link_info->callbacks->info ("%X");
6001 }
6002
6003 /* Check that all sections are in a PT_LOAD segment.
6004 Don't check funky gdb generated core files. */
6005 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
6006 {
6007 bool check_vma = true;
6008
6009 for (i = 1; i < m->count; i++)
6010 if (m->sections[i]->vma == m->sections[i - 1]->vma
6011 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
6012 ->this_hdr), p) != 0
6013 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
6014 ->this_hdr), p) != 0)
6015 {
6016 /* Looks like we have overlays packed into the segment. */
6017 check_vma = false;
6018 break;
6019 }
6020
6021 for (i = 0; i < m->count; i++)
6022 {
6023 Elf_Internal_Shdr *this_hdr;
6024 asection *sec;
6025
6026 sec = m->sections[i];
6027 this_hdr = &(elf_section_data(sec)->this_hdr);
6028 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
6029 && !ELF_TBSS_SPECIAL (this_hdr, p))
6030 {
6031 _bfd_error_handler
6032 /* xgettext:c-format */
6033 (_("%pB: section `%pA' can't be allocated in segment %d"),
6034 abfd, sec, j);
6035 print_segment_map (m);
6036 }
6037 }
6038
6039 if (p_align_p)
6040 p->p_align = p_align;
6041 }
6042 }
6043
6044 elf_next_file_pos (abfd) = off;
6045
6046 if (link_info != NULL
6047 && phdr_load_seg != NULL
6048 && phdr_load_seg->includes_filehdr)
6049 {
6050 /* There is a segment that contains both the file headers and the
6051 program headers, so provide a symbol __ehdr_start pointing there.
6052 A program can use this to examine itself robustly. */
6053
6054 struct elf_link_hash_entry *hash
6055 = elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
6056 false, false, true);
6057 /* If the symbol was referenced and not defined, define it. */
6058 if (hash != NULL
6059 && (hash->root.type == bfd_link_hash_new
6060 || hash->root.type == bfd_link_hash_undefined
6061 || hash->root.type == bfd_link_hash_undefweak
6062 || hash->root.type == bfd_link_hash_common))
6063 {
6064 asection *s = NULL;
6065 bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
6066
6067 if (phdr_load_seg->count != 0)
6068 /* The segment contains sections, so use the first one. */
6069 s = phdr_load_seg->sections[0];
6070 else
6071 /* Use the first (i.e. lowest-addressed) section in any segment. */
6072 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6073 if (m->p_type == PT_LOAD && m->count != 0)
6074 {
6075 s = m->sections[0];
6076 break;
6077 }
6078
6079 if (s != NULL)
6080 {
6081 hash->root.u.def.value = filehdr_vaddr - s->vma;
6082 hash->root.u.def.section = s;
6083 }
6084 else
6085 {
6086 hash->root.u.def.value = filehdr_vaddr;
6087 hash->root.u.def.section = bfd_abs_section_ptr;
6088 }
6089
6090 hash->root.type = bfd_link_hash_defined;
6091 hash->def_regular = 1;
6092 hash->non_elf = 0;
6093 }
6094 }
6095
6096 return true;
6097 }
6098
6099 /* Determine if a bfd is a debuginfo file. Unfortunately there
6100 is no defined method for detecting such files, so we have to
6101 use heuristics instead. */
6102
6103 bool
6104 is_debuginfo_file (bfd *abfd)
6105 {
6106 if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6107 return false;
6108
6109 Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6110 Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6111 Elf_Internal_Shdr **headerp;
6112
6113 for (headerp = start_headers; headerp < end_headers; headerp ++)
6114 {
6115 Elf_Internal_Shdr *header = * headerp;
6116
6117 /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6118 The only allocated sections are SHT_NOBITS or SHT_NOTES. */
6119 if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6120 && header->sh_type != SHT_NOBITS
6121 && header->sh_type != SHT_NOTE)
6122 return false;
6123 }
6124
6125 return true;
6126 }
6127
6128 /* Assign file positions for the other sections, except for compressed debugging
6129 and other sections assigned in _bfd_elf_assign_file_positions_for_non_load(). */
6130
6131 static bool
6132 assign_file_positions_for_non_load_sections (bfd *abfd,
6133 struct bfd_link_info *link_info)
6134 {
6135 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6136 Elf_Internal_Shdr **i_shdrpp;
6137 Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6138 Elf_Internal_Phdr *phdrs;
6139 Elf_Internal_Phdr *p;
6140 struct elf_segment_map *m;
6141 file_ptr off;
6142 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
6143 bfd_vma maxpagesize;
6144
6145 if (link_info != NULL)
6146 maxpagesize = link_info->maxpagesize;
6147 else
6148 maxpagesize = bed->maxpagesize;
6149 i_shdrpp = elf_elfsections (abfd);
6150 end_hdrpp = i_shdrpp + elf_numsections (abfd);
6151 off = elf_next_file_pos (abfd);
6152 for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6153 {
6154 Elf_Internal_Shdr *hdr;
6155 bfd_vma align;
6156
6157 hdr = *hdrpp;
6158 if (hdr->bfd_section != NULL
6159 && (hdr->bfd_section->filepos != 0
6160 || (hdr->sh_type == SHT_NOBITS
6161 && hdr->contents == NULL)))
6162 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6163 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6164 {
6165 if (hdr->sh_size != 0
6166 /* PR 24717 - debuginfo files are known to be not strictly
6167 compliant with the ELF standard. In particular they often
6168 have .note.gnu.property sections that are outside of any
6169 loadable segment. This is not a problem for such files,
6170 so do not warn about them. */
6171 && ! is_debuginfo_file (abfd))
6172 _bfd_error_handler
6173 /* xgettext:c-format */
6174 (_("%pB: warning: allocated section `%s' not in segment"),
6175 abfd,
6176 (hdr->bfd_section == NULL
6177 ? "*unknown*"
6178 : hdr->bfd_section->name));
6179 /* We don't need to page align empty sections. */
6180 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6181 align = maxpagesize;
6182 else
6183 align = hdr->sh_addralign & -hdr->sh_addralign;
6184 off += vma_page_aligned_bias (hdr->sh_addr, off, align);
6185 off = _bfd_elf_assign_file_position_for_section (hdr, off,
6186 false);
6187 }
6188 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6189 && hdr->bfd_section == NULL)
6190 /* We don't know the offset of these sections yet: their size has
6191 not been decided. */
6192 || (hdr->bfd_section != NULL
6193 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6194 || (bfd_section_is_ctf (hdr->bfd_section)
6195 && abfd->is_linker_output)))
6196 || hdr == i_shdrpp[elf_onesymtab (abfd)]
6197 || (elf_symtab_shndx_list (abfd) != NULL
6198 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6199 || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6200 || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6201 hdr->sh_offset = -1;
6202 else
6203 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6204 }
6205 elf_next_file_pos (abfd) = off;
6206
6207 /* Now that we have set the section file positions, we can set up
6208 the file positions for the non PT_LOAD segments. */
6209 phdrs = elf_tdata (abfd)->phdr;
6210 for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6211 {
6212 if (p->p_type == PT_GNU_RELRO)
6213 {
6214 bfd_vma start, end; /* Bytes. */
6215 bool ok;
6216
6217 if (link_info != NULL)
6218 {
6219 /* During linking the range of the RELRO segment is passed
6220 in link_info. Note that there may be padding between
6221 relro_start and the first RELRO section. */
6222 start = link_info->relro_start;
6223 end = link_info->relro_end;
6224 }
6225 else if (m->count != 0)
6226 {
6227 if (!m->p_size_valid)
6228 abort ();
6229 start = m->sections[0]->vma;
6230 end = start + m->p_size / opb;
6231 }
6232 else
6233 {
6234 start = 0;
6235 end = 0;
6236 }
6237
6238 ok = false;
6239 if (start < end)
6240 {
6241 struct elf_segment_map *lm;
6242 const Elf_Internal_Phdr *lp;
6243 unsigned int i;
6244
6245 /* Find a LOAD segment containing a section in the RELRO
6246 segment. */
6247 for (lm = elf_seg_map (abfd), lp = phdrs;
6248 lm != NULL;
6249 lm = lm->next, lp++)
6250 {
6251 if (lp->p_type == PT_LOAD
6252 && lm->count != 0
6253 && (lm->sections[lm->count - 1]->vma
6254 + (!IS_TBSS (lm->sections[lm->count - 1])
6255 ? lm->sections[lm->count - 1]->size / opb
6256 : 0)) > start
6257 && lm->sections[0]->vma < end)
6258 break;
6259 }
6260
6261 if (lm != NULL)
6262 {
6263 /* Find the section starting the RELRO segment. */
6264 for (i = 0; i < lm->count; i++)
6265 {
6266 asection *s = lm->sections[i];
6267 if (s->vma >= start
6268 && s->vma < end
6269 && s->size != 0)
6270 break;
6271 }
6272
6273 if (i < lm->count)
6274 {
6275 p->p_vaddr = lm->sections[i]->vma * opb;
6276 p->p_paddr = lm->sections[i]->lma * opb;
6277 p->p_offset = lm->sections[i]->filepos;
6278 p->p_memsz = end * opb - p->p_vaddr;
6279 p->p_filesz = p->p_memsz;
6280
6281 /* The RELRO segment typically ends a few bytes
6282 into .got.plt but other layouts are possible.
6283 In cases where the end does not match any
6284 loaded section (for instance is in file
6285 padding), trim p_filesz back to correspond to
6286 the end of loaded section contents. */
6287 if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6288 p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6289
6290 /* Preserve the alignment and flags if they are
6291 valid. The gold linker generates RW/4 for
6292 the PT_GNU_RELRO section. It is better for
6293 objcopy/strip to honor these attributes
6294 otherwise gdb will choke when using separate
6295 debug files. */
6296 if (!m->p_align_valid)
6297 p->p_align = 1;
6298 if (!m->p_flags_valid)
6299 p->p_flags = PF_R;
6300 ok = true;
6301 }
6302 }
6303 }
6304
6305 if (!ok)
6306 {
6307 if (link_info != NULL)
6308 _bfd_error_handler
6309 (_("%pB: warning: unable to allocate any sections to PT_GNU_RELRO segment"),
6310 abfd);
6311 memset (p, 0, sizeof *p);
6312 }
6313 }
6314 else if (p->p_type == PT_GNU_STACK)
6315 {
6316 if (m->p_size_valid)
6317 p->p_memsz = m->p_size;
6318 }
6319 else if (m->count != 0)
6320 {
6321 unsigned int i;
6322
6323 if (p->p_type != PT_LOAD
6324 && (p->p_type != PT_NOTE
6325 || bfd_get_format (abfd) != bfd_core))
6326 {
6327 /* A user specified segment layout may include a PHDR
6328 segment that overlaps with a LOAD segment... */
6329 if (p->p_type == PT_PHDR)
6330 {
6331 m->count = 0;
6332 continue;
6333 }
6334
6335 if (m->includes_filehdr || m->includes_phdrs)
6336 {
6337 /* PR 17512: file: 2195325e. */
6338 _bfd_error_handler
6339 (_("%pB: error: non-load segment %d includes file header "
6340 "and/or program header"),
6341 abfd, (int) (p - phdrs));
6342 return false;
6343 }
6344
6345 p->p_filesz = 0;
6346 p->p_offset = m->sections[0]->filepos;
6347 for (i = m->count; i-- != 0;)
6348 {
6349 asection *sect = m->sections[i];
6350 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6351 if (hdr->sh_type != SHT_NOBITS)
6352 {
6353 p->p_filesz = sect->filepos - p->p_offset + hdr->sh_size;
6354 /* NB: p_memsz of the loadable PT_NOTE segment
6355 should be the same as p_filesz. */
6356 if (p->p_type == PT_NOTE
6357 && (hdr->sh_flags & SHF_ALLOC) != 0)
6358 p->p_memsz = p->p_filesz;
6359 break;
6360 }
6361 }
6362 }
6363 }
6364 }
6365
6366 return true;
6367 }
6368
6369 static elf_section_list *
6370 find_section_in_list (unsigned int i, elf_section_list * list)
6371 {
6372 for (;list != NULL; list = list->next)
6373 if (list->ndx == i)
6374 break;
6375 return list;
6376 }
6377
6378 /* Work out the file positions of all the sections. This is called by
6379 _bfd_elf_compute_section_file_positions. All the section sizes and
6380 VMAs must be known before this is called.
6381
6382 Reloc sections come in two flavours: Those processed specially as
6383 "side-channel" data attached to a section to which they apply, and those that
6384 bfd doesn't process as relocations. The latter sort are stored in a normal
6385 bfd section by bfd_section_from_shdr. We don't consider the former sort
6386 here, unless they form part of the loadable image. Reloc sections not
6387 assigned here (and compressed debugging sections and CTF sections which
6388 nothing else in the file can rely upon) will be handled later by
6389 assign_file_positions_for_relocs.
6390
6391 We also don't set the positions of the .symtab and .strtab here. */
6392
6393 static bool
6394 assign_file_positions_except_relocs (bfd *abfd,
6395 struct bfd_link_info *link_info)
6396 {
6397 struct elf_obj_tdata *tdata = elf_tdata (abfd);
6398 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6399 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6400 unsigned int alloc;
6401
6402 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6403 && bfd_get_format (abfd) != bfd_core)
6404 {
6405 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6406 unsigned int num_sec = elf_numsections (abfd);
6407 Elf_Internal_Shdr **hdrpp;
6408 unsigned int i;
6409 file_ptr off;
6410
6411 /* Start after the ELF header. */
6412 off = i_ehdrp->e_ehsize;
6413
6414 /* We are not creating an executable, which means that we are
6415 not creating a program header, and that the actual order of
6416 the sections in the file is unimportant. */
6417 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6418 {
6419 Elf_Internal_Shdr *hdr;
6420
6421 hdr = *hdrpp;
6422 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6423 && hdr->bfd_section == NULL)
6424 /* Do not assign offsets for these sections yet: we don't know
6425 their sizes. */
6426 || (hdr->bfd_section != NULL
6427 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6428 || (bfd_section_is_ctf (hdr->bfd_section)
6429 && abfd->is_linker_output)))
6430 || i == elf_onesymtab (abfd)
6431 || (elf_symtab_shndx_list (abfd) != NULL
6432 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6433 || i == elf_strtab_sec (abfd)
6434 || i == elf_shstrtab_sec (abfd))
6435 {
6436 hdr->sh_offset = -1;
6437 }
6438 else
6439 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
6440 }
6441
6442 elf_next_file_pos (abfd) = off;
6443 elf_program_header_size (abfd) = 0;
6444 }
6445 else
6446 {
6447 /* Assign file positions for the loaded sections based on the
6448 assignment of sections to segments. */
6449 if (!assign_file_positions_for_load_sections (abfd, link_info))
6450 return false;
6451
6452 /* And for non-load sections. */
6453 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6454 return false;
6455 }
6456
6457 if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6458 return false;
6459
6460 /* Write out the program headers. */
6461 alloc = i_ehdrp->e_phnum;
6462 if (alloc != 0)
6463 {
6464 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
6465 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
6466 return false;
6467 }
6468
6469 return true;
6470 }
6471
6472 bool
6473 _bfd_elf_init_file_header (bfd *abfd,
6474 struct bfd_link_info *info ATTRIBUTE_UNUSED)
6475 {
6476 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
6477 struct elf_strtab_hash *shstrtab;
6478 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6479
6480 i_ehdrp = elf_elfheader (abfd);
6481
6482 shstrtab = _bfd_elf_strtab_init ();
6483 if (shstrtab == NULL)
6484 return false;
6485
6486 elf_shstrtab (abfd) = shstrtab;
6487
6488 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
6489 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
6490 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
6491 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
6492
6493 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
6494 i_ehdrp->e_ident[EI_DATA] =
6495 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
6496 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
6497
6498 if ((abfd->flags & DYNAMIC) != 0)
6499 i_ehdrp->e_type = ET_DYN;
6500 else if ((abfd->flags & EXEC_P) != 0)
6501 i_ehdrp->e_type = ET_EXEC;
6502 else if (bfd_get_format (abfd) == bfd_core)
6503 i_ehdrp->e_type = ET_CORE;
6504 else
6505 i_ehdrp->e_type = ET_REL;
6506
6507 switch (bfd_get_arch (abfd))
6508 {
6509 case bfd_arch_unknown:
6510 i_ehdrp->e_machine = EM_NONE;
6511 break;
6512
6513 /* There used to be a long list of cases here, each one setting
6514 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
6515 in the corresponding bfd definition. To avoid duplication,
6516 the switch was removed. Machines that need special handling
6517 can generally do it in elf_backend_final_write_processing(),
6518 unless they need the information earlier than the final write.
6519 Such need can generally be supplied by replacing the tests for
6520 e_machine with the conditions used to determine it. */
6521 default:
6522 i_ehdrp->e_machine = bed->elf_machine_code;
6523 }
6524
6525 i_ehdrp->e_version = bed->s->ev_current;
6526 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
6527
6528 /* No program header, for now. */
6529 i_ehdrp->e_phoff = 0;
6530 i_ehdrp->e_phentsize = 0;
6531 i_ehdrp->e_phnum = 0;
6532
6533 /* Each bfd section is section header entry. */
6534 i_ehdrp->e_entry = bfd_get_start_address (abfd);
6535 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
6536
6537 elf_tdata (abfd)->symtab_hdr.sh_name =
6538 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
6539 elf_tdata (abfd)->strtab_hdr.sh_name =
6540 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
6541 elf_tdata (abfd)->shstrtab_hdr.sh_name =
6542 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
6543 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
6544 || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
6545 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
6546 return false;
6547
6548 return true;
6549 }
6550
6551 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
6552
6553 FIXME: We used to have code here to sort the PT_LOAD segments into
6554 ascending order, as per the ELF spec. But this breaks some programs,
6555 including the Linux kernel. But really either the spec should be
6556 changed or the programs updated. */
6557
6558 bool
6559 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
6560 {
6561 if (link_info != NULL && bfd_link_pie (link_info))
6562 {
6563 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
6564 unsigned int num_segments = i_ehdrp->e_phnum;
6565 struct elf_obj_tdata *tdata = elf_tdata (obfd);
6566 Elf_Internal_Phdr *segment = tdata->phdr;
6567 Elf_Internal_Phdr *end_segment = &segment[num_segments];
6568
6569 /* Find the lowest p_vaddr in PT_LOAD segments. */
6570 bfd_vma p_vaddr = (bfd_vma) -1;
6571 for (; segment < end_segment; segment++)
6572 if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
6573 p_vaddr = segment->p_vaddr;
6574
6575 /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
6576 segments is non-zero. */
6577 if (p_vaddr)
6578 i_ehdrp->e_type = ET_EXEC;
6579 }
6580 return true;
6581 }
6582
6583 /* Assign file positions for all the reloc sections which are not part
6584 of the loadable file image, and the file position of section headers. */
6585
6586 static bool
6587 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
6588 {
6589 file_ptr off;
6590 Elf_Internal_Shdr **shdrpp, **end_shdrpp;
6591 Elf_Internal_Shdr *shdrp;
6592 Elf_Internal_Ehdr *i_ehdrp;
6593 const struct elf_backend_data *bed;
6594
6595 off = elf_next_file_pos (abfd);
6596
6597 shdrpp = elf_elfsections (abfd);
6598 end_shdrpp = shdrpp + elf_numsections (abfd);
6599 for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
6600 {
6601 shdrp = *shdrpp;
6602 if (shdrp->sh_offset == -1)
6603 {
6604 asection *sec = shdrp->bfd_section;
6605 bool is_rel = (shdrp->sh_type == SHT_REL
6606 || shdrp->sh_type == SHT_RELA);
6607 bool is_ctf = sec && bfd_section_is_ctf (sec);
6608 if (is_rel
6609 || is_ctf
6610 || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
6611 {
6612 if (!is_rel && !is_ctf)
6613 {
6614 const char *name = sec->name;
6615 struct bfd_elf_section_data *d;
6616
6617 /* Compress DWARF debug sections. */
6618 if (!bfd_compress_section (abfd, sec,
6619 shdrp->contents))
6620 return false;
6621
6622 if (sec->compress_status == COMPRESS_SECTION_DONE
6623 && (abfd->flags & BFD_COMPRESS_GABI) == 0)
6624 {
6625 /* If section is compressed with zlib-gnu, convert
6626 section name from .debug_* to .zdebug_*. */
6627 char *new_name
6628 = convert_debug_to_zdebug (abfd, name);
6629 if (new_name == NULL)
6630 return false;
6631 name = new_name;
6632 }
6633 /* Add section name to section name section. */
6634 if (shdrp->sh_name != (unsigned int) -1)
6635 abort ();
6636 shdrp->sh_name
6637 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
6638 name, false);
6639 d = elf_section_data (sec);
6640
6641 /* Add reloc section name to section name section. */
6642 if (d->rel.hdr
6643 && !_bfd_elf_set_reloc_sh_name (abfd,
6644 d->rel.hdr,
6645 name, false))
6646 return false;
6647 if (d->rela.hdr
6648 && !_bfd_elf_set_reloc_sh_name (abfd,
6649 d->rela.hdr,
6650 name, true))
6651 return false;
6652
6653 /* Update section size and contents. */
6654 shdrp->sh_size = sec->size;
6655 shdrp->contents = sec->contents;
6656 shdrp->bfd_section->contents = NULL;
6657 }
6658 else if (is_ctf)
6659 {
6660 /* Update section size and contents. */
6661 shdrp->sh_size = sec->size;
6662 shdrp->contents = sec->contents;
6663 }
6664
6665 off = _bfd_elf_assign_file_position_for_section (shdrp,
6666 off,
6667 true);
6668 }
6669 }
6670 }
6671
6672 /* Place section name section after DWARF debug sections have been
6673 compressed. */
6674 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
6675 shdrp = &elf_tdata (abfd)->shstrtab_hdr;
6676 shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
6677 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
6678
6679 /* Place the section headers. */
6680 i_ehdrp = elf_elfheader (abfd);
6681 bed = get_elf_backend_data (abfd);
6682 off = align_file_position (off, 1 << bed->s->log_file_align);
6683 i_ehdrp->e_shoff = off;
6684 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
6685 elf_next_file_pos (abfd) = off;
6686
6687 return true;
6688 }
6689
6690 bool
6691 _bfd_elf_write_object_contents (bfd *abfd)
6692 {
6693 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6694 Elf_Internal_Shdr **i_shdrp;
6695 bool failed;
6696 unsigned int count, num_sec;
6697 struct elf_obj_tdata *t;
6698
6699 if (! abfd->output_has_begun
6700 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
6701 return false;
6702 /* Do not rewrite ELF data when the BFD has been opened for update.
6703 abfd->output_has_begun was set to TRUE on opening, so creation of new
6704 sections, and modification of existing section sizes was restricted.
6705 This means the ELF header, program headers and section headers can't have
6706 changed.
6707 If the contents of any sections has been modified, then those changes have
6708 already been written to the BFD. */
6709 else if (abfd->direction == both_direction)
6710 {
6711 BFD_ASSERT (abfd->output_has_begun);
6712 return true;
6713 }
6714
6715 i_shdrp = elf_elfsections (abfd);
6716
6717 failed = false;
6718 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
6719 if (failed)
6720 return false;
6721
6722 if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
6723 return false;
6724
6725 /* After writing the headers, we need to write the sections too... */
6726 num_sec = elf_numsections (abfd);
6727 for (count = 1; count < num_sec; count++)
6728 {
6729 i_shdrp[count]->sh_name
6730 = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
6731 i_shdrp[count]->sh_name);
6732 if (bed->elf_backend_section_processing)
6733 if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
6734 return false;
6735 if (i_shdrp[count]->contents)
6736 {
6737 bfd_size_type amt = i_shdrp[count]->sh_size;
6738
6739 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
6740 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
6741 return false;
6742 }
6743 }
6744
6745 /* Write out the section header names. */
6746 t = elf_tdata (abfd);
6747 if (elf_shstrtab (abfd) != NULL
6748 && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
6749 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
6750 return false;
6751
6752 if (!(*bed->elf_backend_final_write_processing) (abfd))
6753 return false;
6754
6755 if (!bed->s->write_shdrs_and_ehdr (abfd))
6756 return false;
6757
6758 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
6759 if (t->o->build_id.after_write_object_contents != NULL)
6760 return (*t->o->build_id.after_write_object_contents) (abfd);
6761
6762 return true;
6763 }
6764
6765 bool
6766 _bfd_elf_write_corefile_contents (bfd *abfd)
6767 {
6768 /* Hopefully this can be done just like an object file. */
6769 return _bfd_elf_write_object_contents (abfd);
6770 }
6771
6772 /* Given a section, search the header to find them. */
6773
6774 unsigned int
6775 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
6776 {
6777 const struct elf_backend_data *bed;
6778 unsigned int sec_index;
6779
6780 if (elf_section_data (asect) != NULL
6781 && elf_section_data (asect)->this_idx != 0)
6782 return elf_section_data (asect)->this_idx;
6783
6784 if (bfd_is_abs_section (asect))
6785 sec_index = SHN_ABS;
6786 else if (bfd_is_com_section (asect))
6787 sec_index = SHN_COMMON;
6788 else if (bfd_is_und_section (asect))
6789 sec_index = SHN_UNDEF;
6790 else
6791 sec_index = SHN_BAD;
6792
6793 bed = get_elf_backend_data (abfd);
6794 if (bed->elf_backend_section_from_bfd_section)
6795 {
6796 int retval = sec_index;
6797
6798 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
6799 return retval;
6800 }
6801
6802 if (sec_index == SHN_BAD)
6803 bfd_set_error (bfd_error_nonrepresentable_section);
6804
6805 return sec_index;
6806 }
6807
6808 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
6809 on error. */
6810
6811 int
6812 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
6813 {
6814 asymbol *asym_ptr = *asym_ptr_ptr;
6815 int idx;
6816 flagword flags = asym_ptr->flags;
6817
6818 /* When gas creates relocations against local labels, it creates its
6819 own symbol for the section, but does put the symbol into the
6820 symbol chain, so udata is 0. When the linker is generating
6821 relocatable output, this section symbol may be for one of the
6822 input sections rather than the output section. */
6823 if (asym_ptr->udata.i == 0
6824 && (flags & BSF_SECTION_SYM)
6825 && asym_ptr->section)
6826 {
6827 asection *sec;
6828
6829 sec = asym_ptr->section;
6830 if (sec->owner != abfd && sec->output_section != NULL)
6831 sec = sec->output_section;
6832 if (sec->owner == abfd
6833 && sec->index < elf_num_section_syms (abfd)
6834 && elf_section_syms (abfd)[sec->index] != NULL)
6835 asym_ptr->udata.i = elf_section_syms (abfd)[sec->index]->udata.i;
6836 }
6837
6838 idx = asym_ptr->udata.i;
6839
6840 if (idx == 0)
6841 {
6842 /* This case can occur when using --strip-symbol on a symbol
6843 which is used in a relocation entry. */
6844 _bfd_error_handler
6845 /* xgettext:c-format */
6846 (_("%pB: symbol `%s' required but not present"),
6847 abfd, bfd_asymbol_name (asym_ptr));
6848 bfd_set_error (bfd_error_no_symbols);
6849 return -1;
6850 }
6851
6852 #if DEBUG & 4
6853 {
6854 fprintf (stderr,
6855 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8x\n",
6856 (long) asym_ptr, asym_ptr->name, idx, flags);
6857 fflush (stderr);
6858 }
6859 #endif
6860
6861 return idx;
6862 }
6863
6864 /* Rewrite program header information. */
6865
6866 static bool
6867 rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
6868 {
6869 Elf_Internal_Ehdr *iehdr;
6870 struct elf_segment_map *map;
6871 struct elf_segment_map *map_first;
6872 struct elf_segment_map **pointer_to_map;
6873 Elf_Internal_Phdr *segment;
6874 asection *section;
6875 unsigned int i;
6876 unsigned int num_segments;
6877 bool phdr_included = false;
6878 bool p_paddr_valid;
6879 struct elf_segment_map *phdr_adjust_seg = NULL;
6880 unsigned int phdr_adjust_num = 0;
6881 const struct elf_backend_data *bed;
6882 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
6883
6884 bed = get_elf_backend_data (ibfd);
6885 iehdr = elf_elfheader (ibfd);
6886
6887 map_first = NULL;
6888 pointer_to_map = &map_first;
6889
6890 num_segments = elf_elfheader (ibfd)->e_phnum;
6891
6892 /* Returns the end address of the segment + 1. */
6893 #define SEGMENT_END(segment, start) \
6894 (start + (segment->p_memsz > segment->p_filesz \
6895 ? segment->p_memsz : segment->p_filesz))
6896
6897 #define SECTION_SIZE(section, segment) \
6898 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
6899 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
6900 ? section->size : 0)
6901
6902 /* Returns TRUE if the given section is contained within
6903 the given segment. VMA addresses are compared. */
6904 #define IS_CONTAINED_BY_VMA(section, segment, opb) \
6905 (section->vma * (opb) >= segment->p_vaddr \
6906 && (section->vma * (opb) + SECTION_SIZE (section, segment) \
6907 <= (SEGMENT_END (segment, segment->p_vaddr))))
6908
6909 /* Returns TRUE if the given section is contained within
6910 the given segment. LMA addresses are compared. */
6911 #define IS_CONTAINED_BY_LMA(section, segment, base, opb) \
6912 (section->lma * (opb) >= base \
6913 && (section->lma + SECTION_SIZE (section, segment) / (opb) >= section->lma) \
6914 && (section->lma * (opb) + SECTION_SIZE (section, segment) \
6915 <= SEGMENT_END (segment, base)))
6916
6917 /* Handle PT_NOTE segment. */
6918 #define IS_NOTE(p, s) \
6919 (p->p_type == PT_NOTE \
6920 && elf_section_type (s) == SHT_NOTE \
6921 && (bfd_vma) s->filepos >= p->p_offset \
6922 && ((bfd_vma) s->filepos + s->size \
6923 <= p->p_offset + p->p_filesz))
6924
6925 /* Special case: corefile "NOTE" section containing regs, prpsinfo
6926 etc. */
6927 #define IS_COREFILE_NOTE(p, s) \
6928 (IS_NOTE (p, s) \
6929 && bfd_get_format (ibfd) == bfd_core \
6930 && s->vma == 0 \
6931 && s->lma == 0)
6932
6933 /* The complicated case when p_vaddr is 0 is to handle the Solaris
6934 linker, which generates a PT_INTERP section with p_vaddr and
6935 p_memsz set to 0. */
6936 #define IS_SOLARIS_PT_INTERP(p, s) \
6937 (p->p_vaddr == 0 \
6938 && p->p_paddr == 0 \
6939 && p->p_memsz == 0 \
6940 && p->p_filesz > 0 \
6941 && (s->flags & SEC_HAS_CONTENTS) != 0 \
6942 && s->size > 0 \
6943 && (bfd_vma) s->filepos >= p->p_offset \
6944 && ((bfd_vma) s->filepos + s->size \
6945 <= p->p_offset + p->p_filesz))
6946
6947 /* Decide if the given section should be included in the given segment.
6948 A section will be included if:
6949 1. It is within the address space of the segment -- we use the LMA
6950 if that is set for the segment and the VMA otherwise,
6951 2. It is an allocated section or a NOTE section in a PT_NOTE
6952 segment.
6953 3. There is an output section associated with it,
6954 4. The section has not already been allocated to a previous segment.
6955 5. PT_GNU_STACK segments do not include any sections.
6956 6. PT_TLS segment includes only SHF_TLS sections.
6957 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
6958 8. PT_DYNAMIC should not contain empty sections at the beginning
6959 (with the possible exception of .dynamic). */
6960 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed, opb) \
6961 ((((segment->p_paddr \
6962 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr, opb) \
6963 : IS_CONTAINED_BY_VMA (section, segment, opb)) \
6964 && (section->flags & SEC_ALLOC) != 0) \
6965 || IS_NOTE (segment, section)) \
6966 && segment->p_type != PT_GNU_STACK \
6967 && (segment->p_type != PT_TLS \
6968 || (section->flags & SEC_THREAD_LOCAL)) \
6969 && (segment->p_type == PT_LOAD \
6970 || segment->p_type == PT_TLS \
6971 || (section->flags & SEC_THREAD_LOCAL) == 0) \
6972 && (segment->p_type != PT_DYNAMIC \
6973 || SECTION_SIZE (section, segment) > 0 \
6974 || (segment->p_paddr \
6975 ? segment->p_paddr != section->lma * (opb) \
6976 : segment->p_vaddr != section->vma * (opb)) \
6977 || (strcmp (bfd_section_name (section), ".dynamic") == 0)) \
6978 && (segment->p_type != PT_LOAD || !section->segment_mark))
6979
6980 /* If the output section of a section in the input segment is NULL,
6981 it is removed from the corresponding output segment. */
6982 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed, opb) \
6983 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb) \
6984 && section->output_section != NULL)
6985
6986 /* Returns TRUE iff seg1 starts after the end of seg2. */
6987 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
6988 (seg1->field >= SEGMENT_END (seg2, seg2->field))
6989
6990 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
6991 their VMA address ranges and their LMA address ranges overlap.
6992 It is possible to have overlapping VMA ranges without overlapping LMA
6993 ranges. RedBoot images for example can have both .data and .bss mapped
6994 to the same VMA range, but with the .data section mapped to a different
6995 LMA. */
6996 #define SEGMENT_OVERLAPS(seg1, seg2) \
6997 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
6998 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
6999 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
7000 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
7001
7002 /* Initialise the segment mark field, and discard stupid alignment. */
7003 for (section = ibfd->sections; section != NULL; section = section->next)
7004 {
7005 asection *o = section->output_section;
7006 if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
7007 o->alignment_power = 0;
7008 section->segment_mark = false;
7009 }
7010
7011 /* The Solaris linker creates program headers in which all the
7012 p_paddr fields are zero. When we try to objcopy or strip such a
7013 file, we get confused. Check for this case, and if we find it
7014 don't set the p_paddr_valid fields. */
7015 p_paddr_valid = false;
7016 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7017 i < num_segments;
7018 i++, segment++)
7019 if (segment->p_paddr != 0)
7020 {
7021 p_paddr_valid = true;
7022 break;
7023 }
7024
7025 /* Scan through the segments specified in the program header
7026 of the input BFD. For this first scan we look for overlaps
7027 in the loadable segments. These can be created by weird
7028 parameters to objcopy. Also, fix some solaris weirdness. */
7029 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7030 i < num_segments;
7031 i++, segment++)
7032 {
7033 unsigned int j;
7034 Elf_Internal_Phdr *segment2;
7035
7036 if (segment->p_type == PT_INTERP)
7037 for (section = ibfd->sections; section; section = section->next)
7038 if (IS_SOLARIS_PT_INTERP (segment, section))
7039 {
7040 /* Mininal change so that the normal section to segment
7041 assignment code will work. */
7042 segment->p_vaddr = section->vma * opb;
7043 break;
7044 }
7045
7046 if (segment->p_type != PT_LOAD)
7047 {
7048 /* Remove PT_GNU_RELRO segment. */
7049 if (segment->p_type == PT_GNU_RELRO)
7050 segment->p_type = PT_NULL;
7051 continue;
7052 }
7053
7054 /* Determine if this segment overlaps any previous segments. */
7055 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
7056 {
7057 bfd_signed_vma extra_length;
7058
7059 if (segment2->p_type != PT_LOAD
7060 || !SEGMENT_OVERLAPS (segment, segment2))
7061 continue;
7062
7063 /* Merge the two segments together. */
7064 if (segment2->p_vaddr < segment->p_vaddr)
7065 {
7066 /* Extend SEGMENT2 to include SEGMENT and then delete
7067 SEGMENT. */
7068 extra_length = (SEGMENT_END (segment, segment->p_vaddr)
7069 - SEGMENT_END (segment2, segment2->p_vaddr));
7070
7071 if (extra_length > 0)
7072 {
7073 segment2->p_memsz += extra_length;
7074 segment2->p_filesz += extra_length;
7075 }
7076
7077 segment->p_type = PT_NULL;
7078
7079 /* Since we have deleted P we must restart the outer loop. */
7080 i = 0;
7081 segment = elf_tdata (ibfd)->phdr;
7082 break;
7083 }
7084 else
7085 {
7086 /* Extend SEGMENT to include SEGMENT2 and then delete
7087 SEGMENT2. */
7088 extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
7089 - SEGMENT_END (segment, segment->p_vaddr));
7090
7091 if (extra_length > 0)
7092 {
7093 segment->p_memsz += extra_length;
7094 segment->p_filesz += extra_length;
7095 }
7096
7097 segment2->p_type = PT_NULL;
7098 }
7099 }
7100 }
7101
7102 /* The second scan attempts to assign sections to segments. */
7103 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7104 i < num_segments;
7105 i++, segment++)
7106 {
7107 unsigned int section_count;
7108 asection **sections;
7109 asection *output_section;
7110 unsigned int isec;
7111 asection *matching_lma;
7112 asection *suggested_lma;
7113 unsigned int j;
7114 size_t amt;
7115 asection *first_section;
7116
7117 if (segment->p_type == PT_NULL)
7118 continue;
7119
7120 first_section = NULL;
7121 /* Compute how many sections might be placed into this segment. */
7122 for (section = ibfd->sections, section_count = 0;
7123 section != NULL;
7124 section = section->next)
7125 {
7126 /* Find the first section in the input segment, which may be
7127 removed from the corresponding output segment. */
7128 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed, opb))
7129 {
7130 if (first_section == NULL)
7131 first_section = section;
7132 if (section->output_section != NULL)
7133 ++section_count;
7134 }
7135 }
7136
7137 /* Allocate a segment map big enough to contain
7138 all of the sections we have selected. */
7139 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7140 amt += section_count * sizeof (asection *);
7141 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7142 if (map == NULL)
7143 return false;
7144
7145 /* Initialise the fields of the segment map. Default to
7146 using the physical address of the segment in the input BFD. */
7147 map->next = NULL;
7148 map->p_type = segment->p_type;
7149 map->p_flags = segment->p_flags;
7150 map->p_flags_valid = 1;
7151
7152 if (map->p_type == PT_LOAD
7153 && (ibfd->flags & D_PAGED) != 0
7154 && maxpagesize > 1
7155 && segment->p_align > 1)
7156 {
7157 map->p_align = segment->p_align;
7158 if (segment->p_align > maxpagesize)
7159 map->p_align = maxpagesize;
7160 map->p_align_valid = 1;
7161 }
7162
7163 /* If the first section in the input segment is removed, there is
7164 no need to preserve segment physical address in the corresponding
7165 output segment. */
7166 if (!first_section || first_section->output_section != NULL)
7167 {
7168 map->p_paddr = segment->p_paddr;
7169 map->p_paddr_valid = p_paddr_valid;
7170 }
7171
7172 /* Determine if this segment contains the ELF file header
7173 and if it contains the program headers themselves. */
7174 map->includes_filehdr = (segment->p_offset == 0
7175 && segment->p_filesz >= iehdr->e_ehsize);
7176 map->includes_phdrs = 0;
7177
7178 if (!phdr_included || segment->p_type != PT_LOAD)
7179 {
7180 map->includes_phdrs =
7181 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7182 && (segment->p_offset + segment->p_filesz
7183 >= ((bfd_vma) iehdr->e_phoff
7184 + iehdr->e_phnum * iehdr->e_phentsize)));
7185
7186 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7187 phdr_included = true;
7188 }
7189
7190 if (section_count == 0)
7191 {
7192 /* Special segments, such as the PT_PHDR segment, may contain
7193 no sections, but ordinary, loadable segments should contain
7194 something. They are allowed by the ELF spec however, so only
7195 a warning is produced.
7196 There is however the valid use case of embedded systems which
7197 have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7198 flash memory with zeros. No warning is shown for that case. */
7199 if (segment->p_type == PT_LOAD
7200 && (segment->p_filesz > 0 || segment->p_memsz == 0))
7201 /* xgettext:c-format */
7202 _bfd_error_handler
7203 (_("%pB: warning: empty loadable segment detected"
7204 " at vaddr=%#" PRIx64 ", is this intentional?"),
7205 ibfd, (uint64_t) segment->p_vaddr);
7206
7207 map->p_vaddr_offset = segment->p_vaddr / opb;
7208 map->count = 0;
7209 *pointer_to_map = map;
7210 pointer_to_map = &map->next;
7211
7212 continue;
7213 }
7214
7215 /* Now scan the sections in the input BFD again and attempt
7216 to add their corresponding output sections to the segment map.
7217 The problem here is how to handle an output section which has
7218 been moved (ie had its LMA changed). There are four possibilities:
7219
7220 1. None of the sections have been moved.
7221 In this case we can continue to use the segment LMA from the
7222 input BFD.
7223
7224 2. All of the sections have been moved by the same amount.
7225 In this case we can change the segment's LMA to match the LMA
7226 of the first section.
7227
7228 3. Some of the sections have been moved, others have not.
7229 In this case those sections which have not been moved can be
7230 placed in the current segment which will have to have its size,
7231 and possibly its LMA changed, and a new segment or segments will
7232 have to be created to contain the other sections.
7233
7234 4. The sections have been moved, but not by the same amount.
7235 In this case we can change the segment's LMA to match the LMA
7236 of the first section and we will have to create a new segment
7237 or segments to contain the other sections.
7238
7239 In order to save time, we allocate an array to hold the section
7240 pointers that we are interested in. As these sections get assigned
7241 to a segment, they are removed from this array. */
7242
7243 amt = section_count * sizeof (asection *);
7244 sections = (asection **) bfd_malloc (amt);
7245 if (sections == NULL)
7246 return false;
7247
7248 /* Step One: Scan for segment vs section LMA conflicts.
7249 Also add the sections to the section array allocated above.
7250 Also add the sections to the current segment. In the common
7251 case, where the sections have not been moved, this means that
7252 we have completely filled the segment, and there is nothing
7253 more to do. */
7254 isec = 0;
7255 matching_lma = NULL;
7256 suggested_lma = NULL;
7257
7258 for (section = first_section, j = 0;
7259 section != NULL;
7260 section = section->next)
7261 {
7262 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed, opb))
7263 {
7264 output_section = section->output_section;
7265
7266 sections[j++] = section;
7267
7268 /* The Solaris native linker always sets p_paddr to 0.
7269 We try to catch that case here, and set it to the
7270 correct value. Note - some backends require that
7271 p_paddr be left as zero. */
7272 if (!p_paddr_valid
7273 && segment->p_vaddr != 0
7274 && !bed->want_p_paddr_set_to_zero
7275 && isec == 0
7276 && output_section->lma != 0
7277 && (align_power (segment->p_vaddr
7278 + (map->includes_filehdr
7279 ? iehdr->e_ehsize : 0)
7280 + (map->includes_phdrs
7281 ? iehdr->e_phnum * iehdr->e_phentsize
7282 : 0),
7283 output_section->alignment_power * opb)
7284 == (output_section->vma * opb)))
7285 map->p_paddr = segment->p_vaddr;
7286
7287 /* Match up the physical address of the segment with the
7288 LMA address of the output section. */
7289 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
7290 opb)
7291 || IS_COREFILE_NOTE (segment, section)
7292 || (bed->want_p_paddr_set_to_zero
7293 && IS_CONTAINED_BY_VMA (output_section, segment, opb)))
7294 {
7295 if (matching_lma == NULL
7296 || output_section->lma < matching_lma->lma)
7297 matching_lma = output_section;
7298
7299 /* We assume that if the section fits within the segment
7300 then it does not overlap any other section within that
7301 segment. */
7302 map->sections[isec++] = output_section;
7303 }
7304 else if (suggested_lma == NULL)
7305 suggested_lma = output_section;
7306
7307 if (j == section_count)
7308 break;
7309 }
7310 }
7311
7312 BFD_ASSERT (j == section_count);
7313
7314 /* Step Two: Adjust the physical address of the current segment,
7315 if necessary. */
7316 if (isec == section_count)
7317 {
7318 /* All of the sections fitted within the segment as currently
7319 specified. This is the default case. Add the segment to
7320 the list of built segments and carry on to process the next
7321 program header in the input BFD. */
7322 map->count = section_count;
7323 *pointer_to_map = map;
7324 pointer_to_map = &map->next;
7325
7326 if (p_paddr_valid
7327 && !bed->want_p_paddr_set_to_zero)
7328 {
7329 bfd_vma hdr_size = 0;
7330 if (map->includes_filehdr)
7331 hdr_size = iehdr->e_ehsize;
7332 if (map->includes_phdrs)
7333 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7334
7335 /* Account for padding before the first section in the
7336 segment. */
7337 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7338 - matching_lma->lma);
7339 }
7340
7341 free (sections);
7342 continue;
7343 }
7344 else
7345 {
7346 /* Change the current segment's physical address to match
7347 the LMA of the first section that fitted, or if no
7348 section fitted, the first section. */
7349 if (matching_lma == NULL)
7350 matching_lma = suggested_lma;
7351
7352 map->p_paddr = matching_lma->lma * opb;
7353
7354 /* Offset the segment physical address from the lma
7355 to allow for space taken up by elf headers. */
7356 if (map->includes_phdrs)
7357 {
7358 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7359
7360 /* iehdr->e_phnum is just an estimate of the number
7361 of program headers that we will need. Make a note
7362 here of the number we used and the segment we chose
7363 to hold these headers, so that we can adjust the
7364 offset when we know the correct value. */
7365 phdr_adjust_num = iehdr->e_phnum;
7366 phdr_adjust_seg = map;
7367 }
7368
7369 if (map->includes_filehdr)
7370 {
7371 bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7372 map->p_paddr -= iehdr->e_ehsize;
7373 /* We've subtracted off the size of headers from the
7374 first section lma, but there may have been some
7375 alignment padding before that section too. Try to
7376 account for that by adjusting the segment lma down to
7377 the same alignment. */
7378 if (segment->p_align != 0 && segment->p_align < align)
7379 align = segment->p_align;
7380 map->p_paddr &= -(align * opb);
7381 }
7382 }
7383
7384 /* Step Three: Loop over the sections again, this time assigning
7385 those that fit to the current segment and removing them from the
7386 sections array; but making sure not to leave large gaps. Once all
7387 possible sections have been assigned to the current segment it is
7388 added to the list of built segments and if sections still remain
7389 to be assigned, a new segment is constructed before repeating
7390 the loop. */
7391 isec = 0;
7392 do
7393 {
7394 map->count = 0;
7395 suggested_lma = NULL;
7396
7397 /* Fill the current segment with sections that fit. */
7398 for (j = 0; j < section_count; j++)
7399 {
7400 section = sections[j];
7401
7402 if (section == NULL)
7403 continue;
7404
7405 output_section = section->output_section;
7406
7407 BFD_ASSERT (output_section != NULL);
7408
7409 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr,
7410 opb)
7411 || IS_COREFILE_NOTE (segment, section))
7412 {
7413 if (map->count == 0)
7414 {
7415 /* If the first section in a segment does not start at
7416 the beginning of the segment, then something is
7417 wrong. */
7418 if (align_power (map->p_paddr
7419 + (map->includes_filehdr
7420 ? iehdr->e_ehsize : 0)
7421 + (map->includes_phdrs
7422 ? iehdr->e_phnum * iehdr->e_phentsize
7423 : 0),
7424 output_section->alignment_power * opb)
7425 != output_section->lma * opb)
7426 goto sorry;
7427 }
7428 else
7429 {
7430 asection *prev_sec;
7431
7432 prev_sec = map->sections[map->count - 1];
7433
7434 /* If the gap between the end of the previous section
7435 and the start of this section is more than
7436 maxpagesize then we need to start a new segment. */
7437 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
7438 maxpagesize)
7439 < BFD_ALIGN (output_section->lma, maxpagesize))
7440 || (prev_sec->lma + prev_sec->size
7441 > output_section->lma))
7442 {
7443 if (suggested_lma == NULL)
7444 suggested_lma = output_section;
7445
7446 continue;
7447 }
7448 }
7449
7450 map->sections[map->count++] = output_section;
7451 ++isec;
7452 sections[j] = NULL;
7453 if (segment->p_type == PT_LOAD)
7454 section->segment_mark = true;
7455 }
7456 else if (suggested_lma == NULL)
7457 suggested_lma = output_section;
7458 }
7459
7460 /* PR 23932. A corrupt input file may contain sections that cannot
7461 be assigned to any segment - because for example they have a
7462 negative size - or segments that do not contain any sections.
7463 But there are also valid reasons why a segment can be empty.
7464 So allow a count of zero. */
7465
7466 /* Add the current segment to the list of built segments. */
7467 *pointer_to_map = map;
7468 pointer_to_map = &map->next;
7469
7470 if (isec < section_count)
7471 {
7472 /* We still have not allocated all of the sections to
7473 segments. Create a new segment here, initialise it
7474 and carry on looping. */
7475 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7476 amt += section_count * sizeof (asection *);
7477 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7478 if (map == NULL)
7479 {
7480 free (sections);
7481 return false;
7482 }
7483
7484 /* Initialise the fields of the segment map. Set the physical
7485 physical address to the LMA of the first section that has
7486 not yet been assigned. */
7487 map->next = NULL;
7488 map->p_type = segment->p_type;
7489 map->p_flags = segment->p_flags;
7490 map->p_flags_valid = 1;
7491 map->p_paddr = suggested_lma->lma * opb;
7492 map->p_paddr_valid = p_paddr_valid;
7493 map->includes_filehdr = 0;
7494 map->includes_phdrs = 0;
7495 }
7496
7497 continue;
7498 sorry:
7499 bfd_set_error (bfd_error_sorry);
7500 free (sections);
7501 return false;
7502 }
7503 while (isec < section_count);
7504
7505 free (sections);
7506 }
7507
7508 elf_seg_map (obfd) = map_first;
7509
7510 /* If we had to estimate the number of program headers that were
7511 going to be needed, then check our estimate now and adjust
7512 the offset if necessary. */
7513 if (phdr_adjust_seg != NULL)
7514 {
7515 unsigned int count;
7516
7517 for (count = 0, map = map_first; map != NULL; map = map->next)
7518 count++;
7519
7520 if (count > phdr_adjust_num)
7521 phdr_adjust_seg->p_paddr
7522 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
7523
7524 for (map = map_first; map != NULL; map = map->next)
7525 if (map->p_type == PT_PHDR)
7526 {
7527 bfd_vma adjust
7528 = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
7529 map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
7530 break;
7531 }
7532 }
7533
7534 #undef SEGMENT_END
7535 #undef SECTION_SIZE
7536 #undef IS_CONTAINED_BY_VMA
7537 #undef IS_CONTAINED_BY_LMA
7538 #undef IS_NOTE
7539 #undef IS_COREFILE_NOTE
7540 #undef IS_SOLARIS_PT_INTERP
7541 #undef IS_SECTION_IN_INPUT_SEGMENT
7542 #undef INCLUDE_SECTION_IN_SEGMENT
7543 #undef SEGMENT_AFTER_SEGMENT
7544 #undef SEGMENT_OVERLAPS
7545 return true;
7546 }
7547
7548 /* Return true if p_align in the ELF program header in ABFD is valid. */
7549
7550 static bool
7551 elf_is_p_align_valid (bfd *abfd)
7552 {
7553 unsigned int i;
7554 Elf_Internal_Phdr *segment;
7555 unsigned int num_segments;
7556 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7557 bfd_size_type maxpagesize = bed->maxpagesize;
7558 bfd_size_type p_align = bed->p_align;
7559
7560 /* Return true if the default p_align value isn't set or the maximum
7561 page size is the same as the minimum page size. */
7562 if (p_align == 0 || maxpagesize == bed->minpagesize)
7563 return true;
7564
7565 /* When the default p_align value is set, p_align may be set to the
7566 default p_align value while segments are aligned to the maximum
7567 page size. In this case, the input p_align will be ignored and
7568 the maximum page size will be used to align the output segments. */
7569 segment = elf_tdata (abfd)->phdr;
7570 num_segments = elf_elfheader (abfd)->e_phnum;
7571 for (i = 0; i < num_segments; i++, segment++)
7572 if (segment->p_type == PT_LOAD
7573 && (segment->p_align != p_align
7574 || vma_page_aligned_bias (segment->p_vaddr,
7575 segment->p_offset,
7576 maxpagesize) != 0))
7577 return true;
7578
7579 return false;
7580 }
7581
7582 /* Copy ELF program header information. */
7583
7584 static bool
7585 copy_elf_program_header (bfd *ibfd, bfd *obfd)
7586 {
7587 Elf_Internal_Ehdr *iehdr;
7588 struct elf_segment_map *map;
7589 struct elf_segment_map *map_first;
7590 struct elf_segment_map **pointer_to_map;
7591 Elf_Internal_Phdr *segment;
7592 unsigned int i;
7593 unsigned int num_segments;
7594 bool phdr_included = false;
7595 bool p_paddr_valid;
7596 bool p_palign_valid;
7597 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
7598
7599 iehdr = elf_elfheader (ibfd);
7600
7601 map_first = NULL;
7602 pointer_to_map = &map_first;
7603
7604 /* If all the segment p_paddr fields are zero, don't set
7605 map->p_paddr_valid. */
7606 p_paddr_valid = false;
7607 num_segments = elf_elfheader (ibfd)->e_phnum;
7608 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7609 i < num_segments;
7610 i++, segment++)
7611 if (segment->p_paddr != 0)
7612 {
7613 p_paddr_valid = true;
7614 break;
7615 }
7616
7617 p_palign_valid = elf_is_p_align_valid (ibfd);
7618
7619 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7620 i < num_segments;
7621 i++, segment++)
7622 {
7623 asection *section;
7624 unsigned int section_count;
7625 size_t amt;
7626 Elf_Internal_Shdr *this_hdr;
7627 asection *first_section = NULL;
7628 asection *lowest_section;
7629
7630 /* Compute how many sections are in this segment. */
7631 for (section = ibfd->sections, section_count = 0;
7632 section != NULL;
7633 section = section->next)
7634 {
7635 this_hdr = &(elf_section_data(section)->this_hdr);
7636 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7637 {
7638 if (first_section == NULL)
7639 first_section = section;
7640 section_count++;
7641 }
7642 }
7643
7644 /* Allocate a segment map big enough to contain
7645 all of the sections we have selected. */
7646 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7647 amt += section_count * sizeof (asection *);
7648 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7649 if (map == NULL)
7650 return false;
7651
7652 /* Initialize the fields of the output segment map with the
7653 input segment. */
7654 map->next = NULL;
7655 map->p_type = segment->p_type;
7656 map->p_flags = segment->p_flags;
7657 map->p_flags_valid = 1;
7658 map->p_paddr = segment->p_paddr;
7659 map->p_paddr_valid = p_paddr_valid;
7660 map->p_align = segment->p_align;
7661 map->p_align_valid = p_palign_valid;
7662 map->p_vaddr_offset = 0;
7663
7664 if (map->p_type == PT_GNU_RELRO
7665 || map->p_type == PT_GNU_STACK)
7666 {
7667 /* The PT_GNU_RELRO segment may contain the first a few
7668 bytes in the .got.plt section even if the whole .got.plt
7669 section isn't in the PT_GNU_RELRO segment. We won't
7670 change the size of the PT_GNU_RELRO segment.
7671 Similarly, PT_GNU_STACK size is significant on uclinux
7672 systems. */
7673 map->p_size = segment->p_memsz;
7674 map->p_size_valid = 1;
7675 }
7676
7677 /* Determine if this segment contains the ELF file header
7678 and if it contains the program headers themselves. */
7679 map->includes_filehdr = (segment->p_offset == 0
7680 && segment->p_filesz >= iehdr->e_ehsize);
7681
7682 map->includes_phdrs = 0;
7683 if (! phdr_included || segment->p_type != PT_LOAD)
7684 {
7685 map->includes_phdrs =
7686 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7687 && (segment->p_offset + segment->p_filesz
7688 >= ((bfd_vma) iehdr->e_phoff
7689 + iehdr->e_phnum * iehdr->e_phentsize)));
7690
7691 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7692 phdr_included = true;
7693 }
7694
7695 lowest_section = NULL;
7696 if (section_count != 0)
7697 {
7698 unsigned int isec = 0;
7699
7700 for (section = first_section;
7701 section != NULL;
7702 section = section->next)
7703 {
7704 this_hdr = &(elf_section_data(section)->this_hdr);
7705 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7706 {
7707 map->sections[isec++] = section->output_section;
7708 if ((section->flags & SEC_ALLOC) != 0)
7709 {
7710 bfd_vma seg_off;
7711
7712 if (lowest_section == NULL
7713 || section->lma < lowest_section->lma)
7714 lowest_section = section;
7715
7716 /* Section lmas are set up from PT_LOAD header
7717 p_paddr in _bfd_elf_make_section_from_shdr.
7718 If this header has a p_paddr that disagrees
7719 with the section lma, flag the p_paddr as
7720 invalid. */
7721 if ((section->flags & SEC_LOAD) != 0)
7722 seg_off = this_hdr->sh_offset - segment->p_offset;
7723 else
7724 seg_off = this_hdr->sh_addr - segment->p_vaddr;
7725 if (section->lma * opb - segment->p_paddr != seg_off)
7726 map->p_paddr_valid = false;
7727 }
7728 if (isec == section_count)
7729 break;
7730 }
7731 }
7732 }
7733
7734 if (section_count == 0)
7735 map->p_vaddr_offset = segment->p_vaddr / opb;
7736 else if (map->p_paddr_valid)
7737 {
7738 /* Account for padding before the first section in the segment. */
7739 bfd_vma hdr_size = 0;
7740 if (map->includes_filehdr)
7741 hdr_size = iehdr->e_ehsize;
7742 if (map->includes_phdrs)
7743 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7744
7745 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7746 - (lowest_section ? lowest_section->lma : 0));
7747 }
7748
7749 map->count = section_count;
7750 *pointer_to_map = map;
7751 pointer_to_map = &map->next;
7752 }
7753
7754 elf_seg_map (obfd) = map_first;
7755 return true;
7756 }
7757
7758 /* Copy private BFD data. This copies or rewrites ELF program header
7759 information. */
7760
7761 static bool
7762 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
7763 {
7764 bfd_vma maxpagesize;
7765
7766 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7767 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7768 return true;
7769
7770 if (elf_tdata (ibfd)->phdr == NULL)
7771 return true;
7772
7773 if (ibfd->xvec == obfd->xvec)
7774 {
7775 /* Check to see if any sections in the input BFD
7776 covered by ELF program header have changed. */
7777 Elf_Internal_Phdr *segment;
7778 asection *section, *osec;
7779 unsigned int i, num_segments;
7780 Elf_Internal_Shdr *this_hdr;
7781 const struct elf_backend_data *bed;
7782
7783 bed = get_elf_backend_data (ibfd);
7784
7785 /* Regenerate the segment map if p_paddr is set to 0. */
7786 if (bed->want_p_paddr_set_to_zero)
7787 goto rewrite;
7788
7789 /* Initialize the segment mark field. */
7790 for (section = obfd->sections; section != NULL;
7791 section = section->next)
7792 section->segment_mark = false;
7793
7794 num_segments = elf_elfheader (ibfd)->e_phnum;
7795 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7796 i < num_segments;
7797 i++, segment++)
7798 {
7799 /* PR binutils/3535. The Solaris linker always sets the p_paddr
7800 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
7801 which severly confuses things, so always regenerate the segment
7802 map in this case. */
7803 if (segment->p_paddr == 0
7804 && segment->p_memsz == 0
7805 && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
7806 goto rewrite;
7807
7808 for (section = ibfd->sections;
7809 section != NULL; section = section->next)
7810 {
7811 /* We mark the output section so that we know it comes
7812 from the input BFD. */
7813 osec = section->output_section;
7814 if (osec)
7815 osec->segment_mark = true;
7816
7817 /* Check if this section is covered by the segment. */
7818 this_hdr = &(elf_section_data(section)->this_hdr);
7819 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7820 {
7821 /* FIXME: Check if its output section is changed or
7822 removed. What else do we need to check? */
7823 if (osec == NULL
7824 || section->flags != osec->flags
7825 || section->lma != osec->lma
7826 || section->vma != osec->vma
7827 || section->size != osec->size
7828 || section->rawsize != osec->rawsize
7829 || section->alignment_power != osec->alignment_power)
7830 goto rewrite;
7831 }
7832 }
7833 }
7834
7835 /* Check to see if any output section do not come from the
7836 input BFD. */
7837 for (section = obfd->sections; section != NULL;
7838 section = section->next)
7839 {
7840 if (!section->segment_mark)
7841 goto rewrite;
7842 else
7843 section->segment_mark = false;
7844 }
7845
7846 return copy_elf_program_header (ibfd, obfd);
7847 }
7848
7849 rewrite:
7850 maxpagesize = 0;
7851 if (ibfd->xvec == obfd->xvec)
7852 {
7853 /* When rewriting program header, set the output maxpagesize to
7854 the maximum alignment of input PT_LOAD segments. */
7855 Elf_Internal_Phdr *segment;
7856 unsigned int i;
7857 unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
7858
7859 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7860 i < num_segments;
7861 i++, segment++)
7862 if (segment->p_type == PT_LOAD
7863 && maxpagesize < segment->p_align)
7864 {
7865 /* PR 17512: file: f17299af. */
7866 if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
7867 /* xgettext:c-format */
7868 _bfd_error_handler (_("%pB: warning: segment alignment of %#"
7869 PRIx64 " is too large"),
7870 ibfd, (uint64_t) segment->p_align);
7871 else
7872 maxpagesize = segment->p_align;
7873 }
7874 }
7875 if (maxpagesize == 0)
7876 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
7877
7878 return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
7879 }
7880
7881 /* Initialize private output section information from input section. */
7882
7883 bool
7884 _bfd_elf_init_private_section_data (bfd *ibfd,
7885 asection *isec,
7886 bfd *obfd,
7887 asection *osec,
7888 struct bfd_link_info *link_info)
7889
7890 {
7891 Elf_Internal_Shdr *ihdr, *ohdr;
7892 bool final_link = (link_info != NULL
7893 && !bfd_link_relocatable (link_info));
7894
7895 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7896 || obfd->xvec->flavour != bfd_target_elf_flavour)
7897 return true;
7898
7899 BFD_ASSERT (elf_section_data (osec) != NULL);
7900
7901 /* If this is a known ABI section, ELF section type and flags may
7902 have been set up when OSEC was created. For normal sections we
7903 allow the user to override the type and flags other than
7904 SHF_MASKOS and SHF_MASKPROC. */
7905 if (elf_section_type (osec) == SHT_PROGBITS
7906 || elf_section_type (osec) == SHT_NOTE
7907 || elf_section_type (osec) == SHT_NOBITS)
7908 elf_section_type (osec) = SHT_NULL;
7909 /* For objcopy and relocatable link, copy the ELF section type from
7910 the input file if the BFD section flags are the same. (If they
7911 are different the user may be doing something like
7912 "objcopy --set-section-flags .text=alloc,data".) For a final
7913 link allow some flags that the linker clears to differ. */
7914 if (elf_section_type (osec) == SHT_NULL
7915 && (osec->flags == isec->flags
7916 || (final_link
7917 && ((osec->flags ^ isec->flags)
7918 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
7919 elf_section_type (osec) = elf_section_type (isec);
7920
7921 /* FIXME: Is this correct for all OS/PROC specific flags? */
7922 elf_section_flags (osec) = (elf_section_flags (isec)
7923 & (SHF_MASKOS | SHF_MASKPROC));
7924
7925 /* Copy sh_info from input for mbind section. */
7926 if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
7927 && elf_section_flags (isec) & SHF_GNU_MBIND)
7928 elf_section_data (osec)->this_hdr.sh_info
7929 = elf_section_data (isec)->this_hdr.sh_info;
7930
7931 /* Set things up for objcopy and relocatable link. The output
7932 SHT_GROUP section will have its elf_next_in_group pointing back
7933 to the input group members. Ignore linker created group section.
7934 See elfNN_ia64_object_p in elfxx-ia64.c. */
7935 if ((link_info == NULL
7936 || !link_info->resolve_section_groups)
7937 && (elf_sec_group (isec) == NULL
7938 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
7939 {
7940 if (elf_section_flags (isec) & SHF_GROUP)
7941 elf_section_flags (osec) |= SHF_GROUP;
7942 elf_next_in_group (osec) = elf_next_in_group (isec);
7943 elf_section_data (osec)->group = elf_section_data (isec)->group;
7944 }
7945
7946 /* If not decompress, preserve SHF_COMPRESSED. */
7947 if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
7948 elf_section_flags (osec) |= (elf_section_flags (isec)
7949 & SHF_COMPRESSED);
7950
7951 ihdr = &elf_section_data (isec)->this_hdr;
7952
7953 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
7954 don't use the output section of the linked-to section since it
7955 may be NULL at this point. */
7956 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
7957 {
7958 ohdr = &elf_section_data (osec)->this_hdr;
7959 ohdr->sh_flags |= SHF_LINK_ORDER;
7960 elf_linked_to_section (osec) = elf_linked_to_section (isec);
7961 }
7962
7963 osec->use_rela_p = isec->use_rela_p;
7964
7965 return true;
7966 }
7967
7968 /* Copy private section information. This copies over the entsize
7969 field, and sometimes the info field. */
7970
7971 bool
7972 _bfd_elf_copy_private_section_data (bfd *ibfd,
7973 asection *isec,
7974 bfd *obfd,
7975 asection *osec)
7976 {
7977 Elf_Internal_Shdr *ihdr, *ohdr;
7978
7979 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7980 || obfd->xvec->flavour != bfd_target_elf_flavour)
7981 return true;
7982
7983 ihdr = &elf_section_data (isec)->this_hdr;
7984 ohdr = &elf_section_data (osec)->this_hdr;
7985
7986 ohdr->sh_entsize = ihdr->sh_entsize;
7987
7988 if (ihdr->sh_type == SHT_SYMTAB
7989 || ihdr->sh_type == SHT_DYNSYM
7990 || ihdr->sh_type == SHT_GNU_verneed
7991 || ihdr->sh_type == SHT_GNU_verdef)
7992 ohdr->sh_info = ihdr->sh_info;
7993
7994 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
7995 NULL);
7996 }
7997
7998 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
7999 necessary if we are removing either the SHT_GROUP section or any of
8000 the group member sections. DISCARDED is the value that a section's
8001 output_section has if the section will be discarded, NULL when this
8002 function is called from objcopy, bfd_abs_section_ptr when called
8003 from the linker. */
8004
8005 bool
8006 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
8007 {
8008 asection *isec;
8009
8010 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
8011 if (elf_section_type (isec) == SHT_GROUP)
8012 {
8013 asection *first = elf_next_in_group (isec);
8014 asection *s = first;
8015 bfd_size_type removed = 0;
8016
8017 while (s != NULL)
8018 {
8019 /* If this member section is being output but the
8020 SHT_GROUP section is not, then clear the group info
8021 set up by _bfd_elf_copy_private_section_data. */
8022 if (s->output_section != discarded
8023 && isec->output_section == discarded)
8024 {
8025 elf_section_flags (s->output_section) &= ~SHF_GROUP;
8026 elf_group_name (s->output_section) = NULL;
8027 }
8028 else
8029 {
8030 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
8031 if (s->output_section == discarded
8032 && isec->output_section != discarded)
8033 {
8034 /* Conversely, if the member section is not being
8035 output but the SHT_GROUP section is, then adjust
8036 its size. */
8037 removed += 4;
8038 if (elf_sec->rel.hdr != NULL
8039 && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
8040 removed += 4;
8041 if (elf_sec->rela.hdr != NULL
8042 && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
8043 removed += 4;
8044 }
8045 else
8046 {
8047 /* Also adjust for zero-sized relocation member
8048 section. */
8049 if (elf_sec->rel.hdr != NULL
8050 && elf_sec->rel.hdr->sh_size == 0)
8051 removed += 4;
8052 if (elf_sec->rela.hdr != NULL
8053 && elf_sec->rela.hdr->sh_size == 0)
8054 removed += 4;
8055 }
8056 }
8057 s = elf_next_in_group (s);
8058 if (s == first)
8059 break;
8060 }
8061 if (removed != 0)
8062 {
8063 if (discarded != NULL)
8064 {
8065 /* If we've been called for ld -r, then we need to
8066 adjust the input section size. */
8067 if (isec->rawsize == 0)
8068 isec->rawsize = isec->size;
8069 isec->size = isec->rawsize - removed;
8070 if (isec->size <= 4)
8071 {
8072 isec->size = 0;
8073 isec->flags |= SEC_EXCLUDE;
8074 }
8075 }
8076 else if (isec->output_section != NULL)
8077 {
8078 /* Adjust the output section size when called from
8079 objcopy. */
8080 isec->output_section->size -= removed;
8081 if (isec->output_section->size <= 4)
8082 {
8083 isec->output_section->size = 0;
8084 isec->output_section->flags |= SEC_EXCLUDE;
8085 }
8086 }
8087 }
8088 }
8089
8090 return true;
8091 }
8092
8093 /* Copy private header information. */
8094
8095 bool
8096 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
8097 {
8098 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8099 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8100 return true;
8101
8102 /* Copy over private BFD data if it has not already been copied.
8103 This must be done here, rather than in the copy_private_bfd_data
8104 entry point, because the latter is called after the section
8105 contents have been set, which means that the program headers have
8106 already been worked out. */
8107 if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
8108 {
8109 if (! copy_private_bfd_data (ibfd, obfd))
8110 return false;
8111 }
8112
8113 return _bfd_elf_fixup_group_sections (ibfd, NULL);
8114 }
8115
8116 /* Copy private symbol information. If this symbol is in a section
8117 which we did not map into a BFD section, try to map the section
8118 index correctly. We use special macro definitions for the mapped
8119 section indices; these definitions are interpreted by the
8120 swap_out_syms function. */
8121
8122 #define MAP_ONESYMTAB (SHN_HIOS + 1)
8123 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
8124 #define MAP_STRTAB (SHN_HIOS + 3)
8125 #define MAP_SHSTRTAB (SHN_HIOS + 4)
8126 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
8127
8128 bool
8129 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
8130 asymbol *isymarg,
8131 bfd *obfd,
8132 asymbol *osymarg)
8133 {
8134 elf_symbol_type *isym, *osym;
8135
8136 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
8137 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
8138 return true;
8139
8140 isym = elf_symbol_from (isymarg);
8141 osym = elf_symbol_from (osymarg);
8142
8143 if (isym != NULL
8144 && isym->internal_elf_sym.st_shndx != 0
8145 && osym != NULL
8146 && bfd_is_abs_section (isym->symbol.section))
8147 {
8148 unsigned int shndx;
8149
8150 shndx = isym->internal_elf_sym.st_shndx;
8151 if (shndx == elf_onesymtab (ibfd))
8152 shndx = MAP_ONESYMTAB;
8153 else if (shndx == elf_dynsymtab (ibfd))
8154 shndx = MAP_DYNSYMTAB;
8155 else if (shndx == elf_strtab_sec (ibfd))
8156 shndx = MAP_STRTAB;
8157 else if (shndx == elf_shstrtab_sec (ibfd))
8158 shndx = MAP_SHSTRTAB;
8159 else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
8160 shndx = MAP_SYM_SHNDX;
8161 osym->internal_elf_sym.st_shndx = shndx;
8162 }
8163
8164 return true;
8165 }
8166
8167 /* Swap out the symbols. */
8168
8169 static bool
8170 swap_out_syms (bfd *abfd,
8171 struct elf_strtab_hash **sttp,
8172 int relocatable_p,
8173 struct bfd_link_info *info)
8174 {
8175 const struct elf_backend_data *bed;
8176 unsigned int symcount;
8177 asymbol **syms;
8178 struct elf_strtab_hash *stt;
8179 Elf_Internal_Shdr *symtab_hdr;
8180 Elf_Internal_Shdr *symtab_shndx_hdr;
8181 Elf_Internal_Shdr *symstrtab_hdr;
8182 struct elf_sym_strtab *symstrtab;
8183 bfd_byte *outbound_syms;
8184 bfd_byte *outbound_shndx;
8185 unsigned long outbound_syms_index;
8186 unsigned int idx;
8187 unsigned int num_locals;
8188 size_t amt;
8189 bool name_local_sections;
8190
8191 if (!elf_map_symbols (abfd, &num_locals))
8192 return false;
8193
8194 /* Dump out the symtabs. */
8195 stt = _bfd_elf_strtab_init ();
8196 if (stt == NULL)
8197 return false;
8198
8199 bed = get_elf_backend_data (abfd);
8200 symcount = bfd_get_symcount (abfd);
8201 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8202 symtab_hdr->sh_type = SHT_SYMTAB;
8203 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8204 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8205 symtab_hdr->sh_info = num_locals + 1;
8206 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8207
8208 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8209 symstrtab_hdr->sh_type = SHT_STRTAB;
8210
8211 /* Allocate buffer to swap out the .strtab section. */
8212 if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8213 || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8214 {
8215 bfd_set_error (bfd_error_no_memory);
8216 _bfd_elf_strtab_free (stt);
8217 return false;
8218 }
8219
8220 if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8221 || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
8222 {
8223 error_no_mem:
8224 bfd_set_error (bfd_error_no_memory);
8225 error_return:
8226 free (symstrtab);
8227 _bfd_elf_strtab_free (stt);
8228 return false;
8229 }
8230 symtab_hdr->contents = outbound_syms;
8231 outbound_syms_index = 0;
8232
8233 outbound_shndx = NULL;
8234
8235 if (elf_symtab_shndx_list (abfd))
8236 {
8237 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8238 if (symtab_shndx_hdr->sh_name != 0)
8239 {
8240 if (_bfd_mul_overflow (symcount + 1,
8241 sizeof (Elf_External_Sym_Shndx), &amt))
8242 goto error_no_mem;
8243 outbound_shndx = (bfd_byte *) bfd_zalloc (abfd, amt);
8244 if (outbound_shndx == NULL)
8245 goto error_return;
8246
8247 symtab_shndx_hdr->contents = outbound_shndx;
8248 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8249 symtab_shndx_hdr->sh_size = amt;
8250 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8251 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8252 }
8253 /* FIXME: What about any other headers in the list ? */
8254 }
8255
8256 /* Now generate the data (for "contents"). */
8257 {
8258 /* Fill in zeroth symbol and swap it out. */
8259 Elf_Internal_Sym sym;
8260 sym.st_name = 0;
8261 sym.st_value = 0;
8262 sym.st_size = 0;
8263 sym.st_info = 0;
8264 sym.st_other = 0;
8265 sym.st_shndx = SHN_UNDEF;
8266 sym.st_target_internal = 0;
8267 symstrtab[0].sym = sym;
8268 symstrtab[0].dest_index = outbound_syms_index;
8269 outbound_syms_index++;
8270 }
8271
8272 name_local_sections
8273 = (bed->elf_backend_name_local_section_symbols
8274 && bed->elf_backend_name_local_section_symbols (abfd));
8275
8276 syms = bfd_get_outsymbols (abfd);
8277 for (idx = 0; idx < symcount;)
8278 {
8279 Elf_Internal_Sym sym;
8280 bfd_vma value = syms[idx]->value;
8281 elf_symbol_type *type_ptr;
8282 flagword flags = syms[idx]->flags;
8283 int type;
8284
8285 if (!name_local_sections
8286 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8287 {
8288 /* Local section symbols have no name. */
8289 sym.st_name = (unsigned long) -1;
8290 }
8291 else
8292 {
8293 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8294 to get the final offset for st_name. */
8295 sym.st_name
8296 = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8297 false);
8298 if (sym.st_name == (unsigned long) -1)
8299 goto error_return;
8300 }
8301
8302 type_ptr = elf_symbol_from (syms[idx]);
8303
8304 if ((flags & BSF_SECTION_SYM) == 0
8305 && bfd_is_com_section (syms[idx]->section))
8306 {
8307 /* ELF common symbols put the alignment into the `value' field,
8308 and the size into the `size' field. This is backwards from
8309 how BFD handles it, so reverse it here. */
8310 sym.st_size = value;
8311 if (type_ptr == NULL
8312 || type_ptr->internal_elf_sym.st_value == 0)
8313 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8314 else
8315 sym.st_value = type_ptr->internal_elf_sym.st_value;
8316 sym.st_shndx = _bfd_elf_section_from_bfd_section
8317 (abfd, syms[idx]->section);
8318 }
8319 else
8320 {
8321 asection *sec = syms[idx]->section;
8322 unsigned int shndx;
8323
8324 if (sec->output_section)
8325 {
8326 value += sec->output_offset;
8327 sec = sec->output_section;
8328 }
8329
8330 /* Don't add in the section vma for relocatable output. */
8331 if (! relocatable_p)
8332 value += sec->vma;
8333 sym.st_value = value;
8334 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8335
8336 if (bfd_is_abs_section (sec)
8337 && type_ptr != NULL
8338 && type_ptr->internal_elf_sym.st_shndx != 0)
8339 {
8340 /* This symbol is in a real ELF section which we did
8341 not create as a BFD section. Undo the mapping done
8342 by copy_private_symbol_data. */
8343 shndx = type_ptr->internal_elf_sym.st_shndx;
8344 switch (shndx)
8345 {
8346 case MAP_ONESYMTAB:
8347 shndx = elf_onesymtab (abfd);
8348 break;
8349 case MAP_DYNSYMTAB:
8350 shndx = elf_dynsymtab (abfd);
8351 break;
8352 case MAP_STRTAB:
8353 shndx = elf_strtab_sec (abfd);
8354 break;
8355 case MAP_SHSTRTAB:
8356 shndx = elf_shstrtab_sec (abfd);
8357 break;
8358 case MAP_SYM_SHNDX:
8359 if (elf_symtab_shndx_list (abfd))
8360 shndx = elf_symtab_shndx_list (abfd)->ndx;
8361 break;
8362 case SHN_COMMON:
8363 case SHN_ABS:
8364 shndx = SHN_ABS;
8365 break;
8366 default:
8367 if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8368 {
8369 if (bed->symbol_section_index)
8370 shndx = bed->symbol_section_index (abfd, type_ptr);
8371 /* Otherwise just leave the index alone. */
8372 }
8373 else
8374 {
8375 if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
8376 _bfd_error_handler (_("%pB: \
8377 Unable to handle section index %x in ELF symbol. Using ABS instead."),
8378 abfd, shndx);
8379 shndx = SHN_ABS;
8380 }
8381 break;
8382 }
8383 }
8384 else
8385 {
8386 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8387
8388 if (shndx == SHN_BAD)
8389 {
8390 asection *sec2;
8391
8392 /* Writing this would be a hell of a lot easier if
8393 we had some decent documentation on bfd, and
8394 knew what to expect of the library, and what to
8395 demand of applications. For example, it
8396 appears that `objcopy' might not set the
8397 section of a symbol to be a section that is
8398 actually in the output file. */
8399 sec2 = bfd_get_section_by_name (abfd, sec->name);
8400 if (sec2 != NULL)
8401 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8402 if (shndx == SHN_BAD)
8403 {
8404 /* xgettext:c-format */
8405 _bfd_error_handler
8406 (_("unable to find equivalent output section"
8407 " for symbol '%s' from section '%s'"),
8408 syms[idx]->name ? syms[idx]->name : "<Local sym>",
8409 sec->name);
8410 bfd_set_error (bfd_error_invalid_operation);
8411 goto error_return;
8412 }
8413 }
8414 }
8415
8416 sym.st_shndx = shndx;
8417 }
8418
8419 if ((flags & BSF_THREAD_LOCAL) != 0)
8420 type = STT_TLS;
8421 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8422 type = STT_GNU_IFUNC;
8423 else if ((flags & BSF_FUNCTION) != 0)
8424 type = STT_FUNC;
8425 else if ((flags & BSF_OBJECT) != 0)
8426 type = STT_OBJECT;
8427 else if ((flags & BSF_RELC) != 0)
8428 type = STT_RELC;
8429 else if ((flags & BSF_SRELC) != 0)
8430 type = STT_SRELC;
8431 else
8432 type = STT_NOTYPE;
8433
8434 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8435 type = STT_TLS;
8436
8437 /* Processor-specific types. */
8438 if (type_ptr != NULL
8439 && bed->elf_backend_get_symbol_type)
8440 type = ((*bed->elf_backend_get_symbol_type)
8441 (&type_ptr->internal_elf_sym, type));
8442
8443 if (flags & BSF_SECTION_SYM)
8444 {
8445 if (flags & BSF_GLOBAL)
8446 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8447 else
8448 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8449 }
8450 else if (bfd_is_com_section (syms[idx]->section))
8451 {
8452 if (type != STT_TLS)
8453 {
8454 if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
8455 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
8456 ? STT_COMMON : STT_OBJECT);
8457 else
8458 type = ((flags & BSF_ELF_COMMON) != 0
8459 ? STT_COMMON : STT_OBJECT);
8460 }
8461 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
8462 }
8463 else if (bfd_is_und_section (syms[idx]->section))
8464 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
8465 ? STB_WEAK
8466 : STB_GLOBAL),
8467 type);
8468 else if (flags & BSF_FILE)
8469 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8470 else
8471 {
8472 int bind = STB_LOCAL;
8473
8474 if (flags & BSF_LOCAL)
8475 bind = STB_LOCAL;
8476 else if (flags & BSF_GNU_UNIQUE)
8477 bind = STB_GNU_UNIQUE;
8478 else if (flags & BSF_WEAK)
8479 bind = STB_WEAK;
8480 else if (flags & BSF_GLOBAL)
8481 bind = STB_GLOBAL;
8482
8483 sym.st_info = ELF_ST_INFO (bind, type);
8484 }
8485
8486 if (type_ptr != NULL)
8487 {
8488 sym.st_other = type_ptr->internal_elf_sym.st_other;
8489 sym.st_target_internal
8490 = type_ptr->internal_elf_sym.st_target_internal;
8491 }
8492 else
8493 {
8494 sym.st_other = 0;
8495 sym.st_target_internal = 0;
8496 }
8497
8498 idx++;
8499 symstrtab[idx].sym = sym;
8500 symstrtab[idx].dest_index = outbound_syms_index;
8501
8502 outbound_syms_index++;
8503 }
8504
8505 /* Finalize the .strtab section. */
8506 _bfd_elf_strtab_finalize (stt);
8507
8508 /* Swap out the .strtab section. */
8509 for (idx = 0; idx <= symcount; idx++)
8510 {
8511 struct elf_sym_strtab *elfsym = &symstrtab[idx];
8512 if (elfsym->sym.st_name == (unsigned long) -1)
8513 elfsym->sym.st_name = 0;
8514 else
8515 elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
8516 elfsym->sym.st_name);
8517 if (info && info->callbacks->ctf_new_symbol)
8518 info->callbacks->ctf_new_symbol (elfsym->dest_index,
8519 &elfsym->sym);
8520
8521 /* Inform the linker of the addition of this symbol. */
8522
8523 bed->s->swap_symbol_out (abfd, &elfsym->sym,
8524 (outbound_syms
8525 + (elfsym->dest_index
8526 * bed->s->sizeof_sym)),
8527 NPTR_ADD (outbound_shndx,
8528 (elfsym->dest_index
8529 * sizeof (Elf_External_Sym_Shndx))));
8530 }
8531 free (symstrtab);
8532
8533 *sttp = stt;
8534 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
8535 symstrtab_hdr->sh_type = SHT_STRTAB;
8536 symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
8537 symstrtab_hdr->sh_addr = 0;
8538 symstrtab_hdr->sh_entsize = 0;
8539 symstrtab_hdr->sh_link = 0;
8540 symstrtab_hdr->sh_info = 0;
8541 symstrtab_hdr->sh_addralign = 1;
8542
8543 return true;
8544 }
8545
8546 /* Return the number of bytes required to hold the symtab vector.
8547
8548 Note that we base it on the count plus 1, since we will null terminate
8549 the vector allocated based on this size. However, the ELF symbol table
8550 always has a dummy entry as symbol #0, so it ends up even. */
8551
8552 long
8553 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
8554 {
8555 bfd_size_type symcount;
8556 long symtab_size;
8557 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
8558
8559 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8560 if (symcount > LONG_MAX / sizeof (asymbol *))
8561 {
8562 bfd_set_error (bfd_error_file_too_big);
8563 return -1;
8564 }
8565 symtab_size = symcount * (sizeof (asymbol *));
8566 if (symcount == 0)
8567 symtab_size = sizeof (asymbol *);
8568 else if (!bfd_write_p (abfd))
8569 {
8570 ufile_ptr filesize = bfd_get_file_size (abfd);
8571
8572 if (filesize != 0 && (unsigned long) symtab_size > filesize)
8573 {
8574 bfd_set_error (bfd_error_file_truncated);
8575 return -1;
8576 }
8577 }
8578
8579 return symtab_size;
8580 }
8581
8582 long
8583 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
8584 {
8585 bfd_size_type symcount;
8586 long symtab_size;
8587 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
8588
8589 if (elf_dynsymtab (abfd) == 0)
8590 {
8591 bfd_set_error (bfd_error_invalid_operation);
8592 return -1;
8593 }
8594
8595 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8596 if (symcount > LONG_MAX / sizeof (asymbol *))
8597 {
8598 bfd_set_error (bfd_error_file_too_big);
8599 return -1;
8600 }
8601 symtab_size = symcount * (sizeof (asymbol *));
8602 if (symcount == 0)
8603 symtab_size = sizeof (asymbol *);
8604 else if (!bfd_write_p (abfd))
8605 {
8606 ufile_ptr filesize = bfd_get_file_size (abfd);
8607
8608 if (filesize != 0 && (unsigned long) symtab_size > filesize)
8609 {
8610 bfd_set_error (bfd_error_file_truncated);
8611 return -1;
8612 }
8613 }
8614
8615 return symtab_size;
8616 }
8617
8618 long
8619 _bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
8620 {
8621 if (asect->reloc_count != 0 && !bfd_write_p (abfd))
8622 {
8623 /* Sanity check reloc section size. */
8624 struct bfd_elf_section_data *d = elf_section_data (asect);
8625 Elf_Internal_Shdr *rel_hdr = &d->this_hdr;
8626 bfd_size_type ext_rel_size = rel_hdr->sh_size;
8627 ufile_ptr filesize = bfd_get_file_size (abfd);
8628
8629 if (filesize != 0 && ext_rel_size > filesize)
8630 {
8631 bfd_set_error (bfd_error_file_truncated);
8632 return -1;
8633 }
8634 }
8635
8636 #if SIZEOF_LONG == SIZEOF_INT
8637 if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
8638 {
8639 bfd_set_error (bfd_error_file_too_big);
8640 return -1;
8641 }
8642 #endif
8643 return (asect->reloc_count + 1L) * sizeof (arelent *);
8644 }
8645
8646 /* Canonicalize the relocs. */
8647
8648 long
8649 _bfd_elf_canonicalize_reloc (bfd *abfd,
8650 sec_ptr section,
8651 arelent **relptr,
8652 asymbol **symbols)
8653 {
8654 arelent *tblptr;
8655 unsigned int i;
8656 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8657
8658 if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
8659 return -1;
8660
8661 tblptr = section->relocation;
8662 for (i = 0; i < section->reloc_count; i++)
8663 *relptr++ = tblptr++;
8664
8665 *relptr = NULL;
8666
8667 return section->reloc_count;
8668 }
8669
8670 long
8671 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
8672 {
8673 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8674 long symcount = bed->s->slurp_symbol_table (abfd, allocation, false);
8675
8676 if (symcount >= 0)
8677 abfd->symcount = symcount;
8678 return symcount;
8679 }
8680
8681 long
8682 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
8683 asymbol **allocation)
8684 {
8685 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8686 long symcount = bed->s->slurp_symbol_table (abfd, allocation, true);
8687
8688 if (symcount >= 0)
8689 abfd->dynsymcount = symcount;
8690 return symcount;
8691 }
8692
8693 /* Return the size required for the dynamic reloc entries. Any loadable
8694 section that was actually installed in the BFD, and has type SHT_REL
8695 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
8696 dynamic reloc section. */
8697
8698 long
8699 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
8700 {
8701 bfd_size_type count, ext_rel_size;
8702 asection *s;
8703
8704 if (elf_dynsymtab (abfd) == 0)
8705 {
8706 bfd_set_error (bfd_error_invalid_operation);
8707 return -1;
8708 }
8709
8710 count = 1;
8711 ext_rel_size = 0;
8712 for (s = abfd->sections; s != NULL; s = s->next)
8713 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8714 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8715 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8716 {
8717 ext_rel_size += s->size;
8718 if (ext_rel_size < s->size)
8719 {
8720 bfd_set_error (bfd_error_file_truncated);
8721 return -1;
8722 }
8723 count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
8724 if (count > LONG_MAX / sizeof (arelent *))
8725 {
8726 bfd_set_error (bfd_error_file_too_big);
8727 return -1;
8728 }
8729 }
8730 if (count > 1 && !bfd_write_p (abfd))
8731 {
8732 /* Sanity check reloc section sizes. */
8733 ufile_ptr filesize = bfd_get_file_size (abfd);
8734 if (filesize != 0 && ext_rel_size > filesize)
8735 {
8736 bfd_set_error (bfd_error_file_truncated);
8737 return -1;
8738 }
8739 }
8740 return count * sizeof (arelent *);
8741 }
8742
8743 /* Canonicalize the dynamic relocation entries. Note that we return the
8744 dynamic relocations as a single block, although they are actually
8745 associated with particular sections; the interface, which was
8746 designed for SunOS style shared libraries, expects that there is only
8747 one set of dynamic relocs. Any loadable section that was actually
8748 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
8749 dynamic symbol table, is considered to be a dynamic reloc section. */
8750
8751 long
8752 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
8753 arelent **storage,
8754 asymbol **syms)
8755 {
8756 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
8757 asection *s;
8758 long ret;
8759
8760 if (elf_dynsymtab (abfd) == 0)
8761 {
8762 bfd_set_error (bfd_error_invalid_operation);
8763 return -1;
8764 }
8765
8766 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
8767 ret = 0;
8768 for (s = abfd->sections; s != NULL; s = s->next)
8769 {
8770 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8771 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8772 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8773 {
8774 arelent *p;
8775 long count, i;
8776
8777 if (! (*slurp_relocs) (abfd, s, syms, true))
8778 return -1;
8779 count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
8780 p = s->relocation;
8781 for (i = 0; i < count; i++)
8782 *storage++ = p++;
8783 ret += count;
8784 }
8785 }
8786
8787 *storage = NULL;
8788
8789 return ret;
8790 }
8791 \f
8792 /* Read in the version information. */
8793
8794 bool
8795 _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
8796 {
8797 bfd_byte *contents = NULL;
8798 unsigned int freeidx = 0;
8799 size_t amt;
8800
8801 if (elf_dynverref (abfd) != 0)
8802 {
8803 Elf_Internal_Shdr *hdr;
8804 Elf_External_Verneed *everneed;
8805 Elf_Internal_Verneed *iverneed;
8806 unsigned int i;
8807 bfd_byte *contents_end;
8808
8809 hdr = &elf_tdata (abfd)->dynverref_hdr;
8810
8811 if (hdr->sh_info == 0
8812 || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
8813 {
8814 error_return_bad_verref:
8815 _bfd_error_handler
8816 (_("%pB: .gnu.version_r invalid entry"), abfd);
8817 bfd_set_error (bfd_error_bad_value);
8818 error_return_verref:
8819 elf_tdata (abfd)->verref = NULL;
8820 elf_tdata (abfd)->cverrefs = 0;
8821 goto error_return;
8822 }
8823
8824 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8825 goto error_return_verref;
8826 contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8827 if (contents == NULL)
8828 goto error_return_verref;
8829
8830 if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt))
8831 {
8832 bfd_set_error (bfd_error_file_too_big);
8833 goto error_return_verref;
8834 }
8835 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_alloc (abfd, amt);
8836 if (elf_tdata (abfd)->verref == NULL)
8837 goto error_return_verref;
8838
8839 BFD_ASSERT (sizeof (Elf_External_Verneed)
8840 == sizeof (Elf_External_Vernaux));
8841 contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
8842 everneed = (Elf_External_Verneed *) contents;
8843 iverneed = elf_tdata (abfd)->verref;
8844 for (i = 0; i < hdr->sh_info; i++, iverneed++)
8845 {
8846 Elf_External_Vernaux *evernaux;
8847 Elf_Internal_Vernaux *ivernaux;
8848 unsigned int j;
8849
8850 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
8851
8852 iverneed->vn_bfd = abfd;
8853
8854 iverneed->vn_filename =
8855 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8856 iverneed->vn_file);
8857 if (iverneed->vn_filename == NULL)
8858 goto error_return_bad_verref;
8859
8860 if (iverneed->vn_cnt == 0)
8861 iverneed->vn_auxptr = NULL;
8862 else
8863 {
8864 if (_bfd_mul_overflow (iverneed->vn_cnt,
8865 sizeof (Elf_Internal_Vernaux), &amt))
8866 {
8867 bfd_set_error (bfd_error_file_too_big);
8868 goto error_return_verref;
8869 }
8870 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
8871 bfd_alloc (abfd, amt);
8872 if (iverneed->vn_auxptr == NULL)
8873 goto error_return_verref;
8874 }
8875
8876 if (iverneed->vn_aux
8877 > (size_t) (contents_end - (bfd_byte *) everneed))
8878 goto error_return_bad_verref;
8879
8880 evernaux = ((Elf_External_Vernaux *)
8881 ((bfd_byte *) everneed + iverneed->vn_aux));
8882 ivernaux = iverneed->vn_auxptr;
8883 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
8884 {
8885 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
8886
8887 ivernaux->vna_nodename =
8888 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8889 ivernaux->vna_name);
8890 if (ivernaux->vna_nodename == NULL)
8891 goto error_return_bad_verref;
8892
8893 if (ivernaux->vna_other > freeidx)
8894 freeidx = ivernaux->vna_other;
8895
8896 ivernaux->vna_nextptr = NULL;
8897 if (ivernaux->vna_next == 0)
8898 {
8899 iverneed->vn_cnt = j + 1;
8900 break;
8901 }
8902 if (j + 1 < iverneed->vn_cnt)
8903 ivernaux->vna_nextptr = ivernaux + 1;
8904
8905 if (ivernaux->vna_next
8906 > (size_t) (contents_end - (bfd_byte *) evernaux))
8907 goto error_return_bad_verref;
8908
8909 evernaux = ((Elf_External_Vernaux *)
8910 ((bfd_byte *) evernaux + ivernaux->vna_next));
8911 }
8912
8913 iverneed->vn_nextref = NULL;
8914 if (iverneed->vn_next == 0)
8915 break;
8916 if (i + 1 < hdr->sh_info)
8917 iverneed->vn_nextref = iverneed + 1;
8918
8919 if (iverneed->vn_next
8920 > (size_t) (contents_end - (bfd_byte *) everneed))
8921 goto error_return_bad_verref;
8922
8923 everneed = ((Elf_External_Verneed *)
8924 ((bfd_byte *) everneed + iverneed->vn_next));
8925 }
8926 elf_tdata (abfd)->cverrefs = i;
8927
8928 free (contents);
8929 contents = NULL;
8930 }
8931
8932 if (elf_dynverdef (abfd) != 0)
8933 {
8934 Elf_Internal_Shdr *hdr;
8935 Elf_External_Verdef *everdef;
8936 Elf_Internal_Verdef *iverdef;
8937 Elf_Internal_Verdef *iverdefarr;
8938 Elf_Internal_Verdef iverdefmem;
8939 unsigned int i;
8940 unsigned int maxidx;
8941 bfd_byte *contents_end_def, *contents_end_aux;
8942
8943 hdr = &elf_tdata (abfd)->dynverdef_hdr;
8944
8945 if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef))
8946 {
8947 error_return_bad_verdef:
8948 _bfd_error_handler
8949 (_("%pB: .gnu.version_d invalid entry"), abfd);
8950 bfd_set_error (bfd_error_bad_value);
8951 error_return_verdef:
8952 elf_tdata (abfd)->verdef = NULL;
8953 elf_tdata (abfd)->cverdefs = 0;
8954 goto error_return;
8955 }
8956
8957 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8958 goto error_return_verdef;
8959 contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8960 if (contents == NULL)
8961 goto error_return_verdef;
8962
8963 BFD_ASSERT (sizeof (Elf_External_Verdef)
8964 >= sizeof (Elf_External_Verdaux));
8965 contents_end_def = contents + hdr->sh_size
8966 - sizeof (Elf_External_Verdef);
8967 contents_end_aux = contents + hdr->sh_size
8968 - sizeof (Elf_External_Verdaux);
8969
8970 /* We know the number of entries in the section but not the maximum
8971 index. Therefore we have to run through all entries and find
8972 the maximum. */
8973 everdef = (Elf_External_Verdef *) contents;
8974 maxidx = 0;
8975 for (i = 0; i < hdr->sh_info; ++i)
8976 {
8977 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8978
8979 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
8980 goto error_return_bad_verdef;
8981 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
8982 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
8983
8984 if (iverdefmem.vd_next == 0)
8985 break;
8986
8987 if (iverdefmem.vd_next
8988 > (size_t) (contents_end_def - (bfd_byte *) everdef))
8989 goto error_return_bad_verdef;
8990
8991 everdef = ((Elf_External_Verdef *)
8992 ((bfd_byte *) everdef + iverdefmem.vd_next));
8993 }
8994
8995 if (default_imported_symver)
8996 {
8997 if (freeidx > maxidx)
8998 maxidx = ++freeidx;
8999 else
9000 freeidx = ++maxidx;
9001 }
9002 if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
9003 {
9004 bfd_set_error (bfd_error_file_too_big);
9005 goto error_return_verdef;
9006 }
9007 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9008 if (elf_tdata (abfd)->verdef == NULL)
9009 goto error_return_verdef;
9010
9011 elf_tdata (abfd)->cverdefs = maxidx;
9012
9013 everdef = (Elf_External_Verdef *) contents;
9014 iverdefarr = elf_tdata (abfd)->verdef;
9015 for (i = 0; i < hdr->sh_info; i++)
9016 {
9017 Elf_External_Verdaux *everdaux;
9018 Elf_Internal_Verdaux *iverdaux;
9019 unsigned int j;
9020
9021 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9022
9023 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
9024 goto error_return_bad_verdef;
9025
9026 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
9027 memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
9028
9029 iverdef->vd_bfd = abfd;
9030
9031 if (iverdef->vd_cnt == 0)
9032 iverdef->vd_auxptr = NULL;
9033 else
9034 {
9035 if (_bfd_mul_overflow (iverdef->vd_cnt,
9036 sizeof (Elf_Internal_Verdaux), &amt))
9037 {
9038 bfd_set_error (bfd_error_file_too_big);
9039 goto error_return_verdef;
9040 }
9041 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
9042 bfd_alloc (abfd, amt);
9043 if (iverdef->vd_auxptr == NULL)
9044 goto error_return_verdef;
9045 }
9046
9047 if (iverdef->vd_aux
9048 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
9049 goto error_return_bad_verdef;
9050
9051 everdaux = ((Elf_External_Verdaux *)
9052 ((bfd_byte *) everdef + iverdef->vd_aux));
9053 iverdaux = iverdef->vd_auxptr;
9054 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
9055 {
9056 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
9057
9058 iverdaux->vda_nodename =
9059 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9060 iverdaux->vda_name);
9061 if (iverdaux->vda_nodename == NULL)
9062 goto error_return_bad_verdef;
9063
9064 iverdaux->vda_nextptr = NULL;
9065 if (iverdaux->vda_next == 0)
9066 {
9067 iverdef->vd_cnt = j + 1;
9068 break;
9069 }
9070 if (j + 1 < iverdef->vd_cnt)
9071 iverdaux->vda_nextptr = iverdaux + 1;
9072
9073 if (iverdaux->vda_next
9074 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
9075 goto error_return_bad_verdef;
9076
9077 everdaux = ((Elf_External_Verdaux *)
9078 ((bfd_byte *) everdaux + iverdaux->vda_next));
9079 }
9080
9081 iverdef->vd_nodename = NULL;
9082 if (iverdef->vd_cnt)
9083 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
9084
9085 iverdef->vd_nextdef = NULL;
9086 if (iverdef->vd_next == 0)
9087 break;
9088 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
9089 iverdef->vd_nextdef = iverdef + 1;
9090
9091 everdef = ((Elf_External_Verdef *)
9092 ((bfd_byte *) everdef + iverdef->vd_next));
9093 }
9094
9095 free (contents);
9096 contents = NULL;
9097 }
9098 else if (default_imported_symver)
9099 {
9100 if (freeidx < 3)
9101 freeidx = 3;
9102 else
9103 freeidx++;
9104
9105 if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
9106 {
9107 bfd_set_error (bfd_error_file_too_big);
9108 goto error_return;
9109 }
9110 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9111 if (elf_tdata (abfd)->verdef == NULL)
9112 goto error_return;
9113
9114 elf_tdata (abfd)->cverdefs = freeidx;
9115 }
9116
9117 /* Create a default version based on the soname. */
9118 if (default_imported_symver)
9119 {
9120 Elf_Internal_Verdef *iverdef;
9121 Elf_Internal_Verdaux *iverdaux;
9122
9123 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
9124
9125 iverdef->vd_version = VER_DEF_CURRENT;
9126 iverdef->vd_flags = 0;
9127 iverdef->vd_ndx = freeidx;
9128 iverdef->vd_cnt = 1;
9129
9130 iverdef->vd_bfd = abfd;
9131
9132 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
9133 if (iverdef->vd_nodename == NULL)
9134 goto error_return_verdef;
9135 iverdef->vd_nextdef = NULL;
9136 iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
9137 bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
9138 if (iverdef->vd_auxptr == NULL)
9139 goto error_return_verdef;
9140
9141 iverdaux = iverdef->vd_auxptr;
9142 iverdaux->vda_nodename = iverdef->vd_nodename;
9143 }
9144
9145 return true;
9146
9147 error_return:
9148 free (contents);
9149 return false;
9150 }
9151 \f
9152 asymbol *
9153 _bfd_elf_make_empty_symbol (bfd *abfd)
9154 {
9155 elf_symbol_type *newsym;
9156
9157 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
9158 if (!newsym)
9159 return NULL;
9160 newsym->symbol.the_bfd = abfd;
9161 return &newsym->symbol;
9162 }
9163
9164 void
9165 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
9166 asymbol *symbol,
9167 symbol_info *ret)
9168 {
9169 bfd_symbol_info (symbol, ret);
9170 }
9171
9172 /* Return whether a symbol name implies a local symbol. Most targets
9173 use this function for the is_local_label_name entry point, but some
9174 override it. */
9175
9176 bool
9177 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
9178 const char *name)
9179 {
9180 /* Normal local symbols start with ``.L''. */
9181 if (name[0] == '.' && name[1] == 'L')
9182 return true;
9183
9184 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
9185 DWARF debugging symbols starting with ``..''. */
9186 if (name[0] == '.' && name[1] == '.')
9187 return true;
9188
9189 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
9190 emitting DWARF debugging output. I suspect this is actually a
9191 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
9192 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
9193 underscore to be emitted on some ELF targets). For ease of use,
9194 we treat such symbols as local. */
9195 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
9196 return true;
9197
9198 /* Treat assembler generated fake symbols, dollar local labels and
9199 forward-backward labels (aka local labels) as locals.
9200 These labels have the form:
9201
9202 L0^A.* (fake symbols)
9203
9204 [.]?L[0123456789]+{^A|^B}[0123456789]* (local labels)
9205
9206 Versions which start with .L will have already been matched above,
9207 so we only need to match the rest. */
9208 if (name[0] == 'L' && ISDIGIT (name[1]))
9209 {
9210 bool ret = false;
9211 const char * p;
9212 char c;
9213
9214 for (p = name + 2; (c = *p); p++)
9215 {
9216 if (c == 1 || c == 2)
9217 {
9218 if (c == 1 && p == name + 2)
9219 /* A fake symbol. */
9220 return true;
9221
9222 /* FIXME: We are being paranoid here and treating symbols like
9223 L0^Bfoo as if there were non-local, on the grounds that the
9224 assembler will never generate them. But can any symbol
9225 containing an ASCII value in the range 1-31 ever be anything
9226 other than some kind of local ? */
9227 ret = true;
9228 }
9229
9230 if (! ISDIGIT (c))
9231 {
9232 ret = false;
9233 break;
9234 }
9235 }
9236 return ret;
9237 }
9238
9239 return false;
9240 }
9241
9242 alent *
9243 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9244 asymbol *symbol ATTRIBUTE_UNUSED)
9245 {
9246 abort ();
9247 return NULL;
9248 }
9249
9250 bool
9251 _bfd_elf_set_arch_mach (bfd *abfd,
9252 enum bfd_architecture arch,
9253 unsigned long machine)
9254 {
9255 /* If this isn't the right architecture for this backend, and this
9256 isn't the generic backend, fail. */
9257 if (arch != get_elf_backend_data (abfd)->arch
9258 && arch != bfd_arch_unknown
9259 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9260 return false;
9261
9262 return bfd_default_set_arch_mach (abfd, arch, machine);
9263 }
9264
9265 /* Find the nearest line to a particular section and offset,
9266 for error reporting. */
9267
9268 bool
9269 _bfd_elf_find_nearest_line (bfd *abfd,
9270 asymbol **symbols,
9271 asection *section,
9272 bfd_vma offset,
9273 const char **filename_ptr,
9274 const char **functionname_ptr,
9275 unsigned int *line_ptr,
9276 unsigned int *discriminator_ptr)
9277 {
9278 bool found;
9279
9280 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
9281 filename_ptr, functionname_ptr,
9282 line_ptr, discriminator_ptr,
9283 dwarf_debug_sections,
9284 &elf_tdata (abfd)->dwarf2_find_line_info))
9285 return true;
9286
9287 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9288 filename_ptr, functionname_ptr, line_ptr))
9289 {
9290 if (!*functionname_ptr)
9291 _bfd_elf_find_function (abfd, symbols, section, offset,
9292 *filename_ptr ? NULL : filename_ptr,
9293 functionname_ptr);
9294 return true;
9295 }
9296
9297 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
9298 &found, filename_ptr,
9299 functionname_ptr, line_ptr,
9300 &elf_tdata (abfd)->line_info))
9301 return false;
9302 if (found && (*functionname_ptr || *line_ptr))
9303 return true;
9304
9305 if (symbols == NULL)
9306 return false;
9307
9308 if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9309 filename_ptr, functionname_ptr))
9310 return false;
9311
9312 *line_ptr = 0;
9313 return true;
9314 }
9315
9316 /* Find the line for a symbol. */
9317
9318 bool
9319 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9320 const char **filename_ptr, unsigned int *line_ptr)
9321 {
9322 return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9323 filename_ptr, NULL, line_ptr, NULL,
9324 dwarf_debug_sections,
9325 &elf_tdata (abfd)->dwarf2_find_line_info);
9326 }
9327
9328 /* After a call to bfd_find_nearest_line, successive calls to
9329 bfd_find_inliner_info can be used to get source information about
9330 each level of function inlining that terminated at the address
9331 passed to bfd_find_nearest_line. Currently this is only supported
9332 for DWARF2 with appropriate DWARF3 extensions. */
9333
9334 bool
9335 _bfd_elf_find_inliner_info (bfd *abfd,
9336 const char **filename_ptr,
9337 const char **functionname_ptr,
9338 unsigned int *line_ptr)
9339 {
9340 bool found;
9341 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9342 functionname_ptr, line_ptr,
9343 & elf_tdata (abfd)->dwarf2_find_line_info);
9344 return found;
9345 }
9346
9347 int
9348 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
9349 {
9350 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9351 int ret = bed->s->sizeof_ehdr;
9352
9353 if (!bfd_link_relocatable (info))
9354 {
9355 bfd_size_type phdr_size = elf_program_header_size (abfd);
9356
9357 if (phdr_size == (bfd_size_type) -1)
9358 {
9359 struct elf_segment_map *m;
9360
9361 phdr_size = 0;
9362 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
9363 phdr_size += bed->s->sizeof_phdr;
9364
9365 if (phdr_size == 0)
9366 phdr_size = get_program_header_size (abfd, info);
9367 }
9368
9369 elf_program_header_size (abfd) = phdr_size;
9370 ret += phdr_size;
9371 }
9372
9373 return ret;
9374 }
9375
9376 bool
9377 _bfd_elf_set_section_contents (bfd *abfd,
9378 sec_ptr section,
9379 const void *location,
9380 file_ptr offset,
9381 bfd_size_type count)
9382 {
9383 Elf_Internal_Shdr *hdr;
9384 file_ptr pos;
9385
9386 if (! abfd->output_has_begun
9387 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
9388 return false;
9389
9390 if (!count)
9391 return true;
9392
9393 hdr = &elf_section_data (section)->this_hdr;
9394 if (hdr->sh_offset == (file_ptr) -1)
9395 {
9396 unsigned char *contents;
9397
9398 if (bfd_section_is_ctf (section))
9399 /* Nothing to do with this section: the contents are generated
9400 later. */
9401 return true;
9402
9403 if ((section->flags & SEC_ELF_COMPRESS) == 0)
9404 {
9405 _bfd_error_handler
9406 (_("%pB:%pA: error: attempting to write into an unallocated compressed section"),
9407 abfd, section);
9408 bfd_set_error (bfd_error_invalid_operation);
9409 return false;
9410 }
9411
9412 if ((offset + count) > hdr->sh_size)
9413 {
9414 _bfd_error_handler
9415 (_("%pB:%pA: error: attempting to write over the end of the section"),
9416 abfd, section);
9417
9418 bfd_set_error (bfd_error_invalid_operation);
9419 return false;
9420 }
9421
9422 contents = hdr->contents;
9423 if (contents == NULL)
9424 {
9425 _bfd_error_handler
9426 (_("%pB:%pA: error: attempting to write section into an empty buffer"),
9427 abfd, section);
9428
9429 bfd_set_error (bfd_error_invalid_operation);
9430 return false;
9431 }
9432
9433 memcpy (contents + offset, location, count);
9434 return true;
9435 }
9436
9437 pos = hdr->sh_offset + offset;
9438 if (bfd_seek (abfd, pos, SEEK_SET) != 0
9439 || bfd_bwrite (location, count, abfd) != count)
9440 return false;
9441
9442 return true;
9443 }
9444
9445 bool
9446 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
9447 arelent *cache_ptr ATTRIBUTE_UNUSED,
9448 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
9449 {
9450 abort ();
9451 return false;
9452 }
9453
9454 /* Try to convert a non-ELF reloc into an ELF one. */
9455
9456 bool
9457 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
9458 {
9459 /* Check whether we really have an ELF howto. */
9460
9461 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
9462 {
9463 bfd_reloc_code_real_type code;
9464 reloc_howto_type *howto;
9465
9466 /* Alien reloc: Try to determine its type to replace it with an
9467 equivalent ELF reloc. */
9468
9469 if (areloc->howto->pc_relative)
9470 {
9471 switch (areloc->howto->bitsize)
9472 {
9473 case 8:
9474 code = BFD_RELOC_8_PCREL;
9475 break;
9476 case 12:
9477 code = BFD_RELOC_12_PCREL;
9478 break;
9479 case 16:
9480 code = BFD_RELOC_16_PCREL;
9481 break;
9482 case 24:
9483 code = BFD_RELOC_24_PCREL;
9484 break;
9485 case 32:
9486 code = BFD_RELOC_32_PCREL;
9487 break;
9488 case 64:
9489 code = BFD_RELOC_64_PCREL;
9490 break;
9491 default:
9492 goto fail;
9493 }
9494
9495 howto = bfd_reloc_type_lookup (abfd, code);
9496
9497 if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
9498 {
9499 if (howto->pcrel_offset)
9500 areloc->addend += areloc->address;
9501 else
9502 areloc->addend -= areloc->address; /* addend is unsigned!! */
9503 }
9504 }
9505 else
9506 {
9507 switch (areloc->howto->bitsize)
9508 {
9509 case 8:
9510 code = BFD_RELOC_8;
9511 break;
9512 case 14:
9513 code = BFD_RELOC_14;
9514 break;
9515 case 16:
9516 code = BFD_RELOC_16;
9517 break;
9518 case 26:
9519 code = BFD_RELOC_26;
9520 break;
9521 case 32:
9522 code = BFD_RELOC_32;
9523 break;
9524 case 64:
9525 code = BFD_RELOC_64;
9526 break;
9527 default:
9528 goto fail;
9529 }
9530
9531 howto = bfd_reloc_type_lookup (abfd, code);
9532 }
9533
9534 if (howto)
9535 areloc->howto = howto;
9536 else
9537 goto fail;
9538 }
9539
9540 return true;
9541
9542 fail:
9543 /* xgettext:c-format */
9544 _bfd_error_handler (_("%pB: %s unsupported"),
9545 abfd, areloc->howto->name);
9546 bfd_set_error (bfd_error_sorry);
9547 return false;
9548 }
9549
9550 bool
9551 _bfd_elf_close_and_cleanup (bfd *abfd)
9552 {
9553 struct elf_obj_tdata *tdata = elf_tdata (abfd);
9554 if (tdata != NULL
9555 && (bfd_get_format (abfd) == bfd_object
9556 || bfd_get_format (abfd) == bfd_core))
9557 {
9558 if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
9559 _bfd_elf_strtab_free (elf_shstrtab (abfd));
9560 _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
9561 }
9562
9563 return _bfd_generic_close_and_cleanup (abfd);
9564 }
9565
9566 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
9567 in the relocation's offset. Thus we cannot allow any sort of sanity
9568 range-checking to interfere. There is nothing else to do in processing
9569 this reloc. */
9570
9571 bfd_reloc_status_type
9572 _bfd_elf_rel_vtable_reloc_fn
9573 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
9574 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
9575 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
9576 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
9577 {
9578 return bfd_reloc_ok;
9579 }
9580 \f
9581 /* Elf core file support. Much of this only works on native
9582 toolchains, since we rely on knowing the
9583 machine-dependent procfs structure in order to pick
9584 out details about the corefile. */
9585
9586 #ifdef HAVE_SYS_PROCFS_H
9587 # include <sys/procfs.h>
9588 #endif
9589
9590 /* Return a PID that identifies a "thread" for threaded cores, or the
9591 PID of the main process for non-threaded cores. */
9592
9593 static int
9594 elfcore_make_pid (bfd *abfd)
9595 {
9596 int pid;
9597
9598 pid = elf_tdata (abfd)->core->lwpid;
9599 if (pid == 0)
9600 pid = elf_tdata (abfd)->core->pid;
9601
9602 return pid;
9603 }
9604
9605 /* If there isn't a section called NAME, make one, using
9606 data from SECT. Note, this function will generate a
9607 reference to NAME, so you shouldn't deallocate or
9608 overwrite it. */
9609
9610 static bool
9611 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
9612 {
9613 asection *sect2;
9614
9615 if (bfd_get_section_by_name (abfd, name) != NULL)
9616 return true;
9617
9618 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
9619 if (sect2 == NULL)
9620 return false;
9621
9622 sect2->size = sect->size;
9623 sect2->filepos = sect->filepos;
9624 sect2->alignment_power = sect->alignment_power;
9625 return true;
9626 }
9627
9628 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
9629 actually creates up to two pseudosections:
9630 - For the single-threaded case, a section named NAME, unless
9631 such a section already exists.
9632 - For the multi-threaded case, a section named "NAME/PID", where
9633 PID is elfcore_make_pid (abfd).
9634 Both pseudosections have identical contents. */
9635 bool
9636 _bfd_elfcore_make_pseudosection (bfd *abfd,
9637 char *name,
9638 size_t size,
9639 ufile_ptr filepos)
9640 {
9641 char buf[100];
9642 char *threaded_name;
9643 size_t len;
9644 asection *sect;
9645
9646 /* Build the section name. */
9647
9648 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
9649 len = strlen (buf) + 1;
9650 threaded_name = (char *) bfd_alloc (abfd, len);
9651 if (threaded_name == NULL)
9652 return false;
9653 memcpy (threaded_name, buf, len);
9654
9655 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
9656 SEC_HAS_CONTENTS);
9657 if (sect == NULL)
9658 return false;
9659 sect->size = size;
9660 sect->filepos = filepos;
9661 sect->alignment_power = 2;
9662
9663 return elfcore_maybe_make_sect (abfd, name, sect);
9664 }
9665
9666 static bool
9667 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
9668 size_t offs)
9669 {
9670 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
9671 SEC_HAS_CONTENTS);
9672
9673 if (sect == NULL)
9674 return false;
9675
9676 sect->size = note->descsz - offs;
9677 sect->filepos = note->descpos + offs;
9678 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
9679
9680 return true;
9681 }
9682
9683 /* prstatus_t exists on:
9684 solaris 2.5+
9685 linux 2.[01] + glibc
9686 unixware 4.2
9687 */
9688
9689 #if defined (HAVE_PRSTATUS_T)
9690
9691 static bool
9692 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
9693 {
9694 size_t size;
9695 int offset;
9696
9697 if (note->descsz == sizeof (prstatus_t))
9698 {
9699 prstatus_t prstat;
9700
9701 size = sizeof (prstat.pr_reg);
9702 offset = offsetof (prstatus_t, pr_reg);
9703 memcpy (&prstat, note->descdata, sizeof (prstat));
9704
9705 /* Do not overwrite the core signal if it
9706 has already been set by another thread. */
9707 if (elf_tdata (abfd)->core->signal == 0)
9708 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9709 if (elf_tdata (abfd)->core->pid == 0)
9710 elf_tdata (abfd)->core->pid = prstat.pr_pid;
9711
9712 /* pr_who exists on:
9713 solaris 2.5+
9714 unixware 4.2
9715 pr_who doesn't exist on:
9716 linux 2.[01]
9717 */
9718 #if defined (HAVE_PRSTATUS_T_PR_WHO)
9719 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9720 #else
9721 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9722 #endif
9723 }
9724 #if defined (HAVE_PRSTATUS32_T)
9725 else if (note->descsz == sizeof (prstatus32_t))
9726 {
9727 /* 64-bit host, 32-bit corefile */
9728 prstatus32_t prstat;
9729
9730 size = sizeof (prstat.pr_reg);
9731 offset = offsetof (prstatus32_t, pr_reg);
9732 memcpy (&prstat, note->descdata, sizeof (prstat));
9733
9734 /* Do not overwrite the core signal if it
9735 has already been set by another thread. */
9736 if (elf_tdata (abfd)->core->signal == 0)
9737 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9738 if (elf_tdata (abfd)->core->pid == 0)
9739 elf_tdata (abfd)->core->pid = prstat.pr_pid;
9740
9741 /* pr_who exists on:
9742 solaris 2.5+
9743 unixware 4.2
9744 pr_who doesn't exist on:
9745 linux 2.[01]
9746 */
9747 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
9748 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9749 #else
9750 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9751 #endif
9752 }
9753 #endif /* HAVE_PRSTATUS32_T */
9754 else
9755 {
9756 /* Fail - we don't know how to handle any other
9757 note size (ie. data object type). */
9758 return true;
9759 }
9760
9761 /* Make a ".reg/999" section and a ".reg" section. */
9762 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
9763 size, note->descpos + offset);
9764 }
9765 #endif /* defined (HAVE_PRSTATUS_T) */
9766
9767 /* Create a pseudosection containing the exact contents of NOTE. */
9768 static bool
9769 elfcore_make_note_pseudosection (bfd *abfd,
9770 char *name,
9771 Elf_Internal_Note *note)
9772 {
9773 return _bfd_elfcore_make_pseudosection (abfd, name,
9774 note->descsz, note->descpos);
9775 }
9776
9777 /* There isn't a consistent prfpregset_t across platforms,
9778 but it doesn't matter, because we don't have to pick this
9779 data structure apart. */
9780
9781 static bool
9782 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
9783 {
9784 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
9785 }
9786
9787 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
9788 type of NT_PRXFPREG. Just include the whole note's contents
9789 literally. */
9790
9791 static bool
9792 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
9793 {
9794 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
9795 }
9796
9797 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
9798 with a note type of NT_X86_XSTATE. Just include the whole note's
9799 contents literally. */
9800
9801 static bool
9802 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
9803 {
9804 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
9805 }
9806
9807 static bool
9808 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
9809 {
9810 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
9811 }
9812
9813 static bool
9814 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
9815 {
9816 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
9817 }
9818
9819 static bool
9820 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
9821 {
9822 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
9823 }
9824
9825 static bool
9826 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
9827 {
9828 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
9829 }
9830
9831 static bool
9832 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
9833 {
9834 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
9835 }
9836
9837 static bool
9838 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
9839 {
9840 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
9841 }
9842
9843 static bool
9844 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
9845 {
9846 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
9847 }
9848
9849 static bool
9850 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
9851 {
9852 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
9853 }
9854
9855 static bool
9856 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
9857 {
9858 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
9859 }
9860
9861 static bool
9862 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
9863 {
9864 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
9865 }
9866
9867 static bool
9868 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
9869 {
9870 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
9871 }
9872
9873 static bool
9874 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
9875 {
9876 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
9877 }
9878
9879 static bool
9880 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
9881 {
9882 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
9883 }
9884
9885 static bool
9886 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
9887 {
9888 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
9889 }
9890
9891 static bool
9892 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
9893 {
9894 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
9895 }
9896
9897 static bool
9898 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
9899 {
9900 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
9901 }
9902
9903 static bool
9904 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
9905 {
9906 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
9907 }
9908
9909 static bool
9910 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
9911 {
9912 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
9913 }
9914
9915 static bool
9916 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
9917 {
9918 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
9919 }
9920
9921 static bool
9922 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
9923 {
9924 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
9925 }
9926
9927 static bool
9928 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
9929 {
9930 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
9931 }
9932
9933 static bool
9934 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
9935 {
9936 return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
9937 }
9938
9939 static bool
9940 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
9941 {
9942 return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
9943 }
9944
9945 static bool
9946 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
9947 {
9948 return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
9949 }
9950
9951 static bool
9952 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
9953 {
9954 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
9955 }
9956
9957 static bool
9958 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
9959 {
9960 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
9961 }
9962
9963 static bool
9964 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
9965 {
9966 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
9967 }
9968
9969 static bool
9970 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
9971 {
9972 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
9973 }
9974
9975 static bool
9976 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
9977 {
9978 return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
9979 }
9980
9981 static bool
9982 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
9983 {
9984 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
9985 }
9986
9987 static bool
9988 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
9989 {
9990 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
9991 }
9992
9993 static bool
9994 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
9995 {
9996 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
9997 }
9998
9999 static bool
10000 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
10001 {
10002 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
10003 }
10004
10005 static bool
10006 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
10007 {
10008 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
10009 }
10010
10011 static bool
10012 elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note)
10013 {
10014 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-mte",
10015 note);
10016 }
10017
10018 static bool
10019 elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
10020 {
10021 return elfcore_make_note_pseudosection (abfd, ".reg-arc-v2", note);
10022 }
10023
10024 /* Convert NOTE into a bfd_section called ".reg-riscv-csr". Return TRUE if
10025 successful otherwise, return FALSE. */
10026
10027 static bool
10028 elfcore_grok_riscv_csr (bfd *abfd, Elf_Internal_Note *note)
10029 {
10030 return elfcore_make_note_pseudosection (abfd, ".reg-riscv-csr", note);
10031 }
10032
10033 /* Convert NOTE into a bfd_section called ".gdb-tdesc". Return TRUE if
10034 successful otherwise, return FALSE. */
10035
10036 static bool
10037 elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
10038 {
10039 return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
10040 }
10041
10042 static bool
10043 elfcore_grok_loongarch_cpucfg (bfd *abfd, Elf_Internal_Note *note)
10044 {
10045 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-cpucfg", note);
10046 }
10047
10048 static bool
10049 elfcore_grok_loongarch_lbt (bfd *abfd, Elf_Internal_Note *note)
10050 {
10051 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lbt", note);
10052 }
10053
10054 static bool
10055 elfcore_grok_loongarch_lsx (bfd *abfd, Elf_Internal_Note *note)
10056 {
10057 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lsx", note);
10058 }
10059
10060 static bool
10061 elfcore_grok_loongarch_lasx (bfd *abfd, Elf_Internal_Note *note)
10062 {
10063 return elfcore_make_note_pseudosection (abfd, ".reg-loongarch-lasx", note);
10064 }
10065
10066 #if defined (HAVE_PRPSINFO_T)
10067 typedef prpsinfo_t elfcore_psinfo_t;
10068 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
10069 typedef prpsinfo32_t elfcore_psinfo32_t;
10070 #endif
10071 #endif
10072
10073 #if defined (HAVE_PSINFO_T)
10074 typedef psinfo_t elfcore_psinfo_t;
10075 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
10076 typedef psinfo32_t elfcore_psinfo32_t;
10077 #endif
10078 #endif
10079
10080 /* return a malloc'ed copy of a string at START which is at
10081 most MAX bytes long, possibly without a terminating '\0'.
10082 the copy will always have a terminating '\0'. */
10083
10084 char *
10085 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
10086 {
10087 char *dups;
10088 char *end = (char *) memchr (start, '\0', max);
10089 size_t len;
10090
10091 if (end == NULL)
10092 len = max;
10093 else
10094 len = end - start;
10095
10096 dups = (char *) bfd_alloc (abfd, len + 1);
10097 if (dups == NULL)
10098 return NULL;
10099
10100 memcpy (dups, start, len);
10101 dups[len] = '\0';
10102
10103 return dups;
10104 }
10105
10106 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10107 static bool
10108 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
10109 {
10110 if (note->descsz == sizeof (elfcore_psinfo_t))
10111 {
10112 elfcore_psinfo_t psinfo;
10113
10114 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10115
10116 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
10117 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10118 #endif
10119 elf_tdata (abfd)->core->program
10120 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10121 sizeof (psinfo.pr_fname));
10122
10123 elf_tdata (abfd)->core->command
10124 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10125 sizeof (psinfo.pr_psargs));
10126 }
10127 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
10128 else if (note->descsz == sizeof (elfcore_psinfo32_t))
10129 {
10130 /* 64-bit host, 32-bit corefile */
10131 elfcore_psinfo32_t psinfo;
10132
10133 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10134
10135 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
10136 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10137 #endif
10138 elf_tdata (abfd)->core->program
10139 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10140 sizeof (psinfo.pr_fname));
10141
10142 elf_tdata (abfd)->core->command
10143 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10144 sizeof (psinfo.pr_psargs));
10145 }
10146 #endif
10147
10148 else
10149 {
10150 /* Fail - we don't know how to handle any other
10151 note size (ie. data object type). */
10152 return true;
10153 }
10154
10155 /* Note that for some reason, a spurious space is tacked
10156 onto the end of the args in some (at least one anyway)
10157 implementations, so strip it off if it exists. */
10158
10159 {
10160 char *command = elf_tdata (abfd)->core->command;
10161 int n = strlen (command);
10162
10163 if (0 < n && command[n - 1] == ' ')
10164 command[n - 1] = '\0';
10165 }
10166
10167 return true;
10168 }
10169 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
10170
10171 #if defined (HAVE_PSTATUS_T)
10172 static bool
10173 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
10174 {
10175 if (note->descsz == sizeof (pstatus_t)
10176 #if defined (HAVE_PXSTATUS_T)
10177 || note->descsz == sizeof (pxstatus_t)
10178 #endif
10179 )
10180 {
10181 pstatus_t pstat;
10182
10183 memcpy (&pstat, note->descdata, sizeof (pstat));
10184
10185 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10186 }
10187 #if defined (HAVE_PSTATUS32_T)
10188 else if (note->descsz == sizeof (pstatus32_t))
10189 {
10190 /* 64-bit host, 32-bit corefile */
10191 pstatus32_t pstat;
10192
10193 memcpy (&pstat, note->descdata, sizeof (pstat));
10194
10195 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10196 }
10197 #endif
10198 /* Could grab some more details from the "representative"
10199 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
10200 NT_LWPSTATUS note, presumably. */
10201
10202 return true;
10203 }
10204 #endif /* defined (HAVE_PSTATUS_T) */
10205
10206 #if defined (HAVE_LWPSTATUS_T)
10207 static bool
10208 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
10209 {
10210 lwpstatus_t lwpstat;
10211 char buf[100];
10212 char *name;
10213 size_t len;
10214 asection *sect;
10215
10216 if (note->descsz != sizeof (lwpstat)
10217 #if defined (HAVE_LWPXSTATUS_T)
10218 && note->descsz != sizeof (lwpxstatus_t)
10219 #endif
10220 )
10221 return true;
10222
10223 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
10224
10225 elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
10226 /* Do not overwrite the core signal if it has already been set by
10227 another thread. */
10228 if (elf_tdata (abfd)->core->signal == 0)
10229 elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
10230
10231 /* Make a ".reg/999" section. */
10232
10233 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
10234 len = strlen (buf) + 1;
10235 name = bfd_alloc (abfd, len);
10236 if (name == NULL)
10237 return false;
10238 memcpy (name, buf, len);
10239
10240 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10241 if (sect == NULL)
10242 return false;
10243
10244 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10245 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
10246 sect->filepos = note->descpos
10247 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
10248 #endif
10249
10250 #if defined (HAVE_LWPSTATUS_T_PR_REG)
10251 sect->size = sizeof (lwpstat.pr_reg);
10252 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
10253 #endif
10254
10255 sect->alignment_power = 2;
10256
10257 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
10258 return false;
10259
10260 /* Make a ".reg2/999" section */
10261
10262 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
10263 len = strlen (buf) + 1;
10264 name = bfd_alloc (abfd, len);
10265 if (name == NULL)
10266 return false;
10267 memcpy (name, buf, len);
10268
10269 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10270 if (sect == NULL)
10271 return false;
10272
10273 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10274 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
10275 sect->filepos = note->descpos
10276 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
10277 #endif
10278
10279 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
10280 sect->size = sizeof (lwpstat.pr_fpreg);
10281 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
10282 #endif
10283
10284 sect->alignment_power = 2;
10285
10286 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
10287 }
10288 #endif /* defined (HAVE_LWPSTATUS_T) */
10289
10290 /* These constants, and the structure offsets used below, are defined by
10291 Cygwin's core_dump.h */
10292 #define NOTE_INFO_PROCESS 1
10293 #define NOTE_INFO_THREAD 2
10294 #define NOTE_INFO_MODULE 3
10295 #define NOTE_INFO_MODULE64 4
10296
10297 static bool
10298 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
10299 {
10300 char buf[30];
10301 char *name;
10302 size_t len;
10303 unsigned int name_size;
10304 asection *sect;
10305 unsigned int type;
10306 int is_active_thread;
10307 bfd_vma base_addr;
10308
10309 if (note->descsz < 4)
10310 return true;
10311
10312 if (! startswith (note->namedata, "win32"))
10313 return true;
10314
10315 type = bfd_get_32 (abfd, note->descdata);
10316
10317 struct
10318 {
10319 const char *type_name;
10320 unsigned long min_size;
10321 } size_check[] =
10322 {
10323 { "NOTE_INFO_PROCESS", 12 },
10324 { "NOTE_INFO_THREAD", 12 },
10325 { "NOTE_INFO_MODULE", 12 },
10326 { "NOTE_INFO_MODULE64", 16 },
10327 };
10328
10329 if (type == 0 || type > (sizeof(size_check)/sizeof(size_check[0])))
10330 return true;
10331
10332 if (note->descsz < size_check[type - 1].min_size)
10333 {
10334 _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes is too small"),
10335 abfd, size_check[type - 1].type_name, note->descsz);
10336 return true;
10337 }
10338
10339 switch (type)
10340 {
10341 case NOTE_INFO_PROCESS:
10342 /* FIXME: need to add ->core->command. */
10343 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
10344 elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
10345 break;
10346
10347 case NOTE_INFO_THREAD:
10348 /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
10349 structure. */
10350 /* thread_info.tid */
10351 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
10352
10353 len = strlen (buf) + 1;
10354 name = (char *) bfd_alloc (abfd, len);
10355 if (name == NULL)
10356 return false;
10357
10358 memcpy (name, buf, len);
10359
10360 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10361 if (sect == NULL)
10362 return false;
10363
10364 /* sizeof (thread_info.thread_context) */
10365 sect->size = note->descsz - 12;
10366 /* offsetof (thread_info.thread_context) */
10367 sect->filepos = note->descpos + 12;
10368 sect->alignment_power = 2;
10369
10370 /* thread_info.is_active_thread */
10371 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
10372
10373 if (is_active_thread)
10374 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
10375 return false;
10376 break;
10377
10378 case NOTE_INFO_MODULE:
10379 case NOTE_INFO_MODULE64:
10380 /* Make a ".module/xxxxxxxx" section. */
10381 if (type == NOTE_INFO_MODULE)
10382 {
10383 /* module_info.base_address */
10384 base_addr = bfd_get_32 (abfd, note->descdata + 4);
10385 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
10386 /* module_info.module_name_size */
10387 name_size = bfd_get_32 (abfd, note->descdata + 8);
10388 }
10389 else /* NOTE_INFO_MODULE64 */
10390 {
10391 /* module_info.base_address */
10392 base_addr = bfd_get_64 (abfd, note->descdata + 4);
10393 sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
10394 /* module_info.module_name_size */
10395 name_size = bfd_get_32 (abfd, note->descdata + 12);
10396 }
10397
10398 len = strlen (buf) + 1;
10399 name = (char *) bfd_alloc (abfd, len);
10400 if (name == NULL)
10401 return false;
10402
10403 memcpy (name, buf, len);
10404
10405 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10406
10407 if (sect == NULL)
10408 return false;
10409
10410 if (note->descsz < 12 + name_size)
10411 {
10412 _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu is too small to contain a name of size %u"),
10413 abfd, note->descsz, name_size);
10414 return true;
10415 }
10416
10417 sect->size = note->descsz;
10418 sect->filepos = note->descpos;
10419 sect->alignment_power = 2;
10420 break;
10421
10422 default:
10423 return true;
10424 }
10425
10426 return true;
10427 }
10428
10429 static bool
10430 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
10431 {
10432 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10433
10434 switch (note->type)
10435 {
10436 default:
10437 return true;
10438
10439 case NT_PRSTATUS:
10440 if (bed->elf_backend_grok_prstatus)
10441 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
10442 return true;
10443 #if defined (HAVE_PRSTATUS_T)
10444 return elfcore_grok_prstatus (abfd, note);
10445 #else
10446 return true;
10447 #endif
10448
10449 #if defined (HAVE_PSTATUS_T)
10450 case NT_PSTATUS:
10451 return elfcore_grok_pstatus (abfd, note);
10452 #endif
10453
10454 #if defined (HAVE_LWPSTATUS_T)
10455 case NT_LWPSTATUS:
10456 return elfcore_grok_lwpstatus (abfd, note);
10457 #endif
10458
10459 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
10460 return elfcore_grok_prfpreg (abfd, note);
10461
10462 case NT_WIN32PSTATUS:
10463 return elfcore_grok_win32pstatus (abfd, note);
10464
10465 case NT_PRXFPREG: /* Linux SSE extension */
10466 if (note->namesz == 6
10467 && strcmp (note->namedata, "LINUX") == 0)
10468 return elfcore_grok_prxfpreg (abfd, note);
10469 else
10470 return true;
10471
10472 case NT_X86_XSTATE: /* Linux XSAVE extension */
10473 if (note->namesz == 6
10474 && strcmp (note->namedata, "LINUX") == 0)
10475 return elfcore_grok_xstatereg (abfd, note);
10476 else
10477 return true;
10478
10479 case NT_PPC_VMX:
10480 if (note->namesz == 6
10481 && strcmp (note->namedata, "LINUX") == 0)
10482 return elfcore_grok_ppc_vmx (abfd, note);
10483 else
10484 return true;
10485
10486 case NT_PPC_VSX:
10487 if (note->namesz == 6
10488 && strcmp (note->namedata, "LINUX") == 0)
10489 return elfcore_grok_ppc_vsx (abfd, note);
10490 else
10491 return true;
10492
10493 case NT_PPC_TAR:
10494 if (note->namesz == 6
10495 && strcmp (note->namedata, "LINUX") == 0)
10496 return elfcore_grok_ppc_tar (abfd, note);
10497 else
10498 return true;
10499
10500 case NT_PPC_PPR:
10501 if (note->namesz == 6
10502 && strcmp (note->namedata, "LINUX") == 0)
10503 return elfcore_grok_ppc_ppr (abfd, note);
10504 else
10505 return true;
10506
10507 case NT_PPC_DSCR:
10508 if (note->namesz == 6
10509 && strcmp (note->namedata, "LINUX") == 0)
10510 return elfcore_grok_ppc_dscr (abfd, note);
10511 else
10512 return true;
10513
10514 case NT_PPC_EBB:
10515 if (note->namesz == 6
10516 && strcmp (note->namedata, "LINUX") == 0)
10517 return elfcore_grok_ppc_ebb (abfd, note);
10518 else
10519 return true;
10520
10521 case NT_PPC_PMU:
10522 if (note->namesz == 6
10523 && strcmp (note->namedata, "LINUX") == 0)
10524 return elfcore_grok_ppc_pmu (abfd, note);
10525 else
10526 return true;
10527
10528 case NT_PPC_TM_CGPR:
10529 if (note->namesz == 6
10530 && strcmp (note->namedata, "LINUX") == 0)
10531 return elfcore_grok_ppc_tm_cgpr (abfd, note);
10532 else
10533 return true;
10534
10535 case NT_PPC_TM_CFPR:
10536 if (note->namesz == 6
10537 && strcmp (note->namedata, "LINUX") == 0)
10538 return elfcore_grok_ppc_tm_cfpr (abfd, note);
10539 else
10540 return true;
10541
10542 case NT_PPC_TM_CVMX:
10543 if (note->namesz == 6
10544 && strcmp (note->namedata, "LINUX") == 0)
10545 return elfcore_grok_ppc_tm_cvmx (abfd, note);
10546 else
10547 return true;
10548
10549 case NT_PPC_TM_CVSX:
10550 if (note->namesz == 6
10551 && strcmp (note->namedata, "LINUX") == 0)
10552 return elfcore_grok_ppc_tm_cvsx (abfd, note);
10553 else
10554 return true;
10555
10556 case NT_PPC_TM_SPR:
10557 if (note->namesz == 6
10558 && strcmp (note->namedata, "LINUX") == 0)
10559 return elfcore_grok_ppc_tm_spr (abfd, note);
10560 else
10561 return true;
10562
10563 case NT_PPC_TM_CTAR:
10564 if (note->namesz == 6
10565 && strcmp (note->namedata, "LINUX") == 0)
10566 return elfcore_grok_ppc_tm_ctar (abfd, note);
10567 else
10568 return true;
10569
10570 case NT_PPC_TM_CPPR:
10571 if (note->namesz == 6
10572 && strcmp (note->namedata, "LINUX") == 0)
10573 return elfcore_grok_ppc_tm_cppr (abfd, note);
10574 else
10575 return true;
10576
10577 case NT_PPC_TM_CDSCR:
10578 if (note->namesz == 6
10579 && strcmp (note->namedata, "LINUX") == 0)
10580 return elfcore_grok_ppc_tm_cdscr (abfd, note);
10581 else
10582 return true;
10583
10584 case NT_S390_HIGH_GPRS:
10585 if (note->namesz == 6
10586 && strcmp (note->namedata, "LINUX") == 0)
10587 return elfcore_grok_s390_high_gprs (abfd, note);
10588 else
10589 return true;
10590
10591 case NT_S390_TIMER:
10592 if (note->namesz == 6
10593 && strcmp (note->namedata, "LINUX") == 0)
10594 return elfcore_grok_s390_timer (abfd, note);
10595 else
10596 return true;
10597
10598 case NT_S390_TODCMP:
10599 if (note->namesz == 6
10600 && strcmp (note->namedata, "LINUX") == 0)
10601 return elfcore_grok_s390_todcmp (abfd, note);
10602 else
10603 return true;
10604
10605 case NT_S390_TODPREG:
10606 if (note->namesz == 6
10607 && strcmp (note->namedata, "LINUX") == 0)
10608 return elfcore_grok_s390_todpreg (abfd, note);
10609 else
10610 return true;
10611
10612 case NT_S390_CTRS:
10613 if (note->namesz == 6
10614 && strcmp (note->namedata, "LINUX") == 0)
10615 return elfcore_grok_s390_ctrs (abfd, note);
10616 else
10617 return true;
10618
10619 case NT_S390_PREFIX:
10620 if (note->namesz == 6
10621 && strcmp (note->namedata, "LINUX") == 0)
10622 return elfcore_grok_s390_prefix (abfd, note);
10623 else
10624 return true;
10625
10626 case NT_S390_LAST_BREAK:
10627 if (note->namesz == 6
10628 && strcmp (note->namedata, "LINUX") == 0)
10629 return elfcore_grok_s390_last_break (abfd, note);
10630 else
10631 return true;
10632
10633 case NT_S390_SYSTEM_CALL:
10634 if (note->namesz == 6
10635 && strcmp (note->namedata, "LINUX") == 0)
10636 return elfcore_grok_s390_system_call (abfd, note);
10637 else
10638 return true;
10639
10640 case NT_S390_TDB:
10641 if (note->namesz == 6
10642 && strcmp (note->namedata, "LINUX") == 0)
10643 return elfcore_grok_s390_tdb (abfd, note);
10644 else
10645 return true;
10646
10647 case NT_S390_VXRS_LOW:
10648 if (note->namesz == 6
10649 && strcmp (note->namedata, "LINUX") == 0)
10650 return elfcore_grok_s390_vxrs_low (abfd, note);
10651 else
10652 return true;
10653
10654 case NT_S390_VXRS_HIGH:
10655 if (note->namesz == 6
10656 && strcmp (note->namedata, "LINUX") == 0)
10657 return elfcore_grok_s390_vxrs_high (abfd, note);
10658 else
10659 return true;
10660
10661 case NT_S390_GS_CB:
10662 if (note->namesz == 6
10663 && strcmp (note->namedata, "LINUX") == 0)
10664 return elfcore_grok_s390_gs_cb (abfd, note);
10665 else
10666 return true;
10667
10668 case NT_S390_GS_BC:
10669 if (note->namesz == 6
10670 && strcmp (note->namedata, "LINUX") == 0)
10671 return elfcore_grok_s390_gs_bc (abfd, note);
10672 else
10673 return true;
10674
10675 case NT_ARC_V2:
10676 if (note->namesz == 6
10677 && strcmp (note->namedata, "LINUX") == 0)
10678 return elfcore_grok_arc_v2 (abfd, note);
10679 else
10680 return true;
10681
10682 case NT_ARM_VFP:
10683 if (note->namesz == 6
10684 && strcmp (note->namedata, "LINUX") == 0)
10685 return elfcore_grok_arm_vfp (abfd, note);
10686 else
10687 return true;
10688
10689 case NT_ARM_TLS:
10690 if (note->namesz == 6
10691 && strcmp (note->namedata, "LINUX") == 0)
10692 return elfcore_grok_aarch_tls (abfd, note);
10693 else
10694 return true;
10695
10696 case NT_ARM_HW_BREAK:
10697 if (note->namesz == 6
10698 && strcmp (note->namedata, "LINUX") == 0)
10699 return elfcore_grok_aarch_hw_break (abfd, note);
10700 else
10701 return true;
10702
10703 case NT_ARM_HW_WATCH:
10704 if (note->namesz == 6
10705 && strcmp (note->namedata, "LINUX") == 0)
10706 return elfcore_grok_aarch_hw_watch (abfd, note);
10707 else
10708 return true;
10709
10710 case NT_ARM_SVE:
10711 if (note->namesz == 6
10712 && strcmp (note->namedata, "LINUX") == 0)
10713 return elfcore_grok_aarch_sve (abfd, note);
10714 else
10715 return true;
10716
10717 case NT_ARM_PAC_MASK:
10718 if (note->namesz == 6
10719 && strcmp (note->namedata, "LINUX") == 0)
10720 return elfcore_grok_aarch_pauth (abfd, note);
10721 else
10722 return true;
10723
10724 case NT_ARM_TAGGED_ADDR_CTRL:
10725 if (note->namesz == 6
10726 && strcmp (note->namedata, "LINUX") == 0)
10727 return elfcore_grok_aarch_mte (abfd, note);
10728 else
10729 return true;
10730
10731 case NT_GDB_TDESC:
10732 if (note->namesz == 4
10733 && strcmp (note->namedata, "GDB") == 0)
10734 return elfcore_grok_gdb_tdesc (abfd, note);
10735 else
10736 return true;
10737
10738 case NT_RISCV_CSR:
10739 if (note->namesz == 4
10740 && strcmp (note->namedata, "GDB") == 0)
10741 return elfcore_grok_riscv_csr (abfd, note);
10742 else
10743 return true;
10744
10745 case NT_LARCH_CPUCFG:
10746 if (note->namesz == 6
10747 && strcmp (note->namedata, "LINUX") == 0)
10748 return elfcore_grok_loongarch_cpucfg (abfd, note);
10749 else
10750 return true;
10751
10752 case NT_LARCH_LBT:
10753 if (note->namesz == 6
10754 && strcmp (note->namedata, "LINUX") == 0)
10755 return elfcore_grok_loongarch_lbt (abfd, note);
10756 else
10757 return true;
10758
10759 case NT_LARCH_LSX:
10760 if (note->namesz == 6
10761 && strcmp (note->namedata, "LINUX") == 0)
10762 return elfcore_grok_loongarch_lsx (abfd, note);
10763 else
10764 return true;
10765
10766 case NT_LARCH_LASX:
10767 if (note->namesz == 6
10768 && strcmp (note->namedata, "LINUX") == 0)
10769 return elfcore_grok_loongarch_lasx (abfd, note);
10770 else
10771 return true;
10772
10773 case NT_PRPSINFO:
10774 case NT_PSINFO:
10775 if (bed->elf_backend_grok_psinfo)
10776 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
10777 return true;
10778 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10779 return elfcore_grok_psinfo (abfd, note);
10780 #else
10781 return true;
10782 #endif
10783
10784 case NT_AUXV:
10785 return elfcore_make_auxv_note_section (abfd, note, 0);
10786
10787 case NT_FILE:
10788 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
10789 note);
10790
10791 case NT_SIGINFO:
10792 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
10793 note);
10794
10795 }
10796 }
10797
10798 static bool
10799 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
10800 {
10801 struct bfd_build_id* build_id;
10802
10803 if (note->descsz == 0)
10804 return false;
10805
10806 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
10807 if (build_id == NULL)
10808 return false;
10809
10810 build_id->size = note->descsz;
10811 memcpy (build_id->data, note->descdata, note->descsz);
10812 abfd->build_id = build_id;
10813
10814 return true;
10815 }
10816
10817 static bool
10818 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
10819 {
10820 switch (note->type)
10821 {
10822 default:
10823 return true;
10824
10825 case NT_GNU_PROPERTY_TYPE_0:
10826 return _bfd_elf_parse_gnu_properties (abfd, note);
10827
10828 case NT_GNU_BUILD_ID:
10829 return elfobj_grok_gnu_build_id (abfd, note);
10830 }
10831 }
10832
10833 static bool
10834 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
10835 {
10836 struct sdt_note *cur =
10837 (struct sdt_note *) bfd_alloc (abfd,
10838 sizeof (struct sdt_note) + note->descsz);
10839
10840 cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
10841 cur->size = (bfd_size_type) note->descsz;
10842 memcpy (cur->data, note->descdata, note->descsz);
10843
10844 elf_tdata (abfd)->sdt_note_head = cur;
10845
10846 return true;
10847 }
10848
10849 static bool
10850 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
10851 {
10852 switch (note->type)
10853 {
10854 case NT_STAPSDT:
10855 return elfobj_grok_stapsdt_note_1 (abfd, note);
10856
10857 default:
10858 return true;
10859 }
10860 }
10861
10862 static bool
10863 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
10864 {
10865 size_t offset;
10866
10867 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10868 {
10869 case ELFCLASS32:
10870 if (note->descsz < 108)
10871 return false;
10872 break;
10873
10874 case ELFCLASS64:
10875 if (note->descsz < 120)
10876 return false;
10877 break;
10878
10879 default:
10880 return false;
10881 }
10882
10883 /* Check for version 1 in pr_version. */
10884 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10885 return false;
10886
10887 offset = 4;
10888
10889 /* Skip over pr_psinfosz. */
10890 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10891 offset += 4;
10892 else
10893 {
10894 offset += 4; /* Padding before pr_psinfosz. */
10895 offset += 8;
10896 }
10897
10898 /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
10899 elf_tdata (abfd)->core->program
10900 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
10901 offset += 17;
10902
10903 /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
10904 elf_tdata (abfd)->core->command
10905 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
10906 offset += 81;
10907
10908 /* Padding before pr_pid. */
10909 offset += 2;
10910
10911 /* The pr_pid field was added in version "1a". */
10912 if (note->descsz < offset + 4)
10913 return true;
10914
10915 elf_tdata (abfd)->core->pid
10916 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10917
10918 return true;
10919 }
10920
10921 static bool
10922 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
10923 {
10924 size_t offset;
10925 size_t size;
10926 size_t min_size;
10927
10928 /* Compute offset of pr_getregsz, skipping over pr_statussz.
10929 Also compute minimum size of this note. */
10930 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10931 {
10932 case ELFCLASS32:
10933 offset = 4 + 4;
10934 min_size = offset + (4 * 2) + 4 + 4 + 4;
10935 break;
10936
10937 case ELFCLASS64:
10938 offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */
10939 min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
10940 break;
10941
10942 default:
10943 return false;
10944 }
10945
10946 if (note->descsz < min_size)
10947 return false;
10948
10949 /* Check for version 1 in pr_version. */
10950 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10951 return false;
10952
10953 /* Extract size of pr_reg from pr_gregsetsz. */
10954 /* Skip over pr_gregsetsz and pr_fpregsetsz. */
10955 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10956 {
10957 size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10958 offset += 4 * 2;
10959 }
10960 else
10961 {
10962 size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
10963 offset += 8 * 2;
10964 }
10965
10966 /* Skip over pr_osreldate. */
10967 offset += 4;
10968
10969 /* Read signal from pr_cursig. */
10970 if (elf_tdata (abfd)->core->signal == 0)
10971 elf_tdata (abfd)->core->signal
10972 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10973 offset += 4;
10974
10975 /* Read TID from pr_pid. */
10976 elf_tdata (abfd)->core->lwpid
10977 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10978 offset += 4;
10979
10980 /* Padding before pr_reg. */
10981 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
10982 offset += 4;
10983
10984 /* Make sure that there is enough data remaining in the note. */
10985 if ((note->descsz - offset) < size)
10986 return false;
10987
10988 /* Make a ".reg/999" section and a ".reg" section. */
10989 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
10990 size, note->descpos + offset);
10991 }
10992
10993 static bool
10994 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
10995 {
10996 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10997
10998 switch (note->type)
10999 {
11000 case NT_PRSTATUS:
11001 if (bed->elf_backend_grok_freebsd_prstatus)
11002 if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
11003 return true;
11004 return elfcore_grok_freebsd_prstatus (abfd, note);
11005
11006 case NT_FPREGSET:
11007 return elfcore_grok_prfpreg (abfd, note);
11008
11009 case NT_PRPSINFO:
11010 return elfcore_grok_freebsd_psinfo (abfd, note);
11011
11012 case NT_FREEBSD_THRMISC:
11013 if (note->namesz == 8)
11014 return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
11015 else
11016 return true;
11017
11018 case NT_FREEBSD_PROCSTAT_PROC:
11019 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
11020 note);
11021
11022 case NT_FREEBSD_PROCSTAT_FILES:
11023 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
11024 note);
11025
11026 case NT_FREEBSD_PROCSTAT_VMMAP:
11027 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
11028 note);
11029
11030 case NT_FREEBSD_PROCSTAT_AUXV:
11031 return elfcore_make_auxv_note_section (abfd, note, 4);
11032
11033 case NT_X86_XSTATE:
11034 if (note->namesz == 8)
11035 return elfcore_grok_xstatereg (abfd, note);
11036 else
11037 return true;
11038
11039 case NT_FREEBSD_PTLWPINFO:
11040 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
11041 note);
11042
11043 case NT_ARM_VFP:
11044 return elfcore_grok_arm_vfp (abfd, note);
11045
11046 default:
11047 return true;
11048 }
11049 }
11050
11051 static bool
11052 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
11053 {
11054 char *cp;
11055
11056 cp = strchr (note->namedata, '@');
11057 if (cp != NULL)
11058 {
11059 *lwpidp = atoi(cp + 1);
11060 return true;
11061 }
11062 return false;
11063 }
11064
11065 static bool
11066 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11067 {
11068 if (note->descsz <= 0x7c + 31)
11069 return false;
11070
11071 /* Signal number at offset 0x08. */
11072 elf_tdata (abfd)->core->signal
11073 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11074
11075 /* Process ID at offset 0x50. */
11076 elf_tdata (abfd)->core->pid
11077 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
11078
11079 /* Command name at 0x7c (max 32 bytes, including nul). */
11080 elf_tdata (abfd)->core->command
11081 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
11082
11083 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
11084 note);
11085 }
11086
11087 static bool
11088 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
11089 {
11090 int lwp;
11091
11092 if (elfcore_netbsd_get_lwpid (note, &lwp))
11093 elf_tdata (abfd)->core->lwpid = lwp;
11094
11095 switch (note->type)
11096 {
11097 case NT_NETBSDCORE_PROCINFO:
11098 /* NetBSD-specific core "procinfo". Note that we expect to
11099 find this note before any of the others, which is fine,
11100 since the kernel writes this note out first when it
11101 creates a core file. */
11102 return elfcore_grok_netbsd_procinfo (abfd, note);
11103 case NT_NETBSDCORE_AUXV:
11104 /* NetBSD-specific Elf Auxiliary Vector data. */
11105 return elfcore_make_auxv_note_section (abfd, note, 4);
11106 case NT_NETBSDCORE_LWPSTATUS:
11107 return elfcore_make_note_pseudosection (abfd,
11108 ".note.netbsdcore.lwpstatus",
11109 note);
11110 default:
11111 break;
11112 }
11113
11114 /* As of March 2020 there are no other machine-independent notes
11115 defined for NetBSD core files. If the note type is less
11116 than the start of the machine-dependent note types, we don't
11117 understand it. */
11118
11119 if (note->type < NT_NETBSDCORE_FIRSTMACH)
11120 return true;
11121
11122
11123 switch (bfd_get_arch (abfd))
11124 {
11125 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
11126 PT_GETFPREGS == mach+2. */
11127
11128 case bfd_arch_aarch64:
11129 case bfd_arch_alpha:
11130 case bfd_arch_sparc:
11131 switch (note->type)
11132 {
11133 case NT_NETBSDCORE_FIRSTMACH+0:
11134 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11135
11136 case NT_NETBSDCORE_FIRSTMACH+2:
11137 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11138
11139 default:
11140 return true;
11141 }
11142
11143 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
11144 There's also old PT___GETREGS40 == mach + 1 for old reg
11145 structure which lacks GBR. */
11146
11147 case bfd_arch_sh:
11148 switch (note->type)
11149 {
11150 case NT_NETBSDCORE_FIRSTMACH+3:
11151 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11152
11153 case NT_NETBSDCORE_FIRSTMACH+5:
11154 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11155
11156 default:
11157 return true;
11158 }
11159
11160 /* On all other arch's, PT_GETREGS == mach+1 and
11161 PT_GETFPREGS == mach+3. */
11162
11163 default:
11164 switch (note->type)
11165 {
11166 case NT_NETBSDCORE_FIRSTMACH+1:
11167 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11168
11169 case NT_NETBSDCORE_FIRSTMACH+3:
11170 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11171
11172 default:
11173 return true;
11174 }
11175 }
11176 /* NOTREACHED */
11177 }
11178
11179 static bool
11180 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11181 {
11182 if (note->descsz <= 0x48 + 31)
11183 return false;
11184
11185 /* Signal number at offset 0x08. */
11186 elf_tdata (abfd)->core->signal
11187 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11188
11189 /* Process ID at offset 0x20. */
11190 elf_tdata (abfd)->core->pid
11191 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
11192
11193 /* Command name at 0x48 (max 32 bytes, including nul). */
11194 elf_tdata (abfd)->core->command
11195 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
11196
11197 return true;
11198 }
11199
11200 /* Processes Solaris's process status note.
11201 sig_off ~ offsetof(prstatus_t, pr_cursig)
11202 pid_off ~ offsetof(prstatus_t, pr_pid)
11203 lwpid_off ~ offsetof(prstatus_t, pr_who)
11204 gregset_size ~ sizeof(gregset_t)
11205 gregset_offset ~ offsetof(prstatus_t, pr_reg) */
11206
11207 static bool
11208 elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
11209 int pid_off, int lwpid_off, size_t gregset_size,
11210 size_t gregset_offset)
11211 {
11212 asection *sect = NULL;
11213 elf_tdata (abfd)->core->signal
11214 = bfd_get_16 (abfd, note->descdata + sig_off);
11215 elf_tdata (abfd)->core->pid
11216 = bfd_get_32 (abfd, note->descdata + pid_off);
11217 elf_tdata (abfd)->core->lwpid
11218 = bfd_get_32 (abfd, note->descdata + lwpid_off);
11219
11220 sect = bfd_get_section_by_name (abfd, ".reg");
11221 if (sect != NULL)
11222 sect->size = gregset_size;
11223
11224 return _bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11225 note->descpos + gregset_offset);
11226 }
11227
11228 /* Gets program and arguments from a core.
11229 prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
11230 comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs) */
11231
11232 static bool
11233 elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
11234 int prog_off, int comm_off)
11235 {
11236 elf_tdata (abfd)->core->program
11237 = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
11238 elf_tdata (abfd)->core->command
11239 = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
11240
11241 return true;
11242 }
11243
11244 /* Processes Solaris's LWP status note.
11245 gregset_size ~ sizeof(gregset_t)
11246 gregset_off ~ offsetof(lwpstatus_t, pr_reg)
11247 fpregset_size ~ sizeof(fpregset_t)
11248 fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg) */
11249
11250 static bool
11251 elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
11252 size_t gregset_size, int gregset_off,
11253 size_t fpregset_size, int fpregset_off)
11254 {
11255 asection *sect = NULL;
11256 char reg2_section_name[16] = { 0 };
11257
11258 (void) snprintf (reg2_section_name, 16, "%s/%i", ".reg2",
11259 elf_tdata (abfd)->core->lwpid);
11260
11261 /* offsetof(lwpstatus_t, pr_lwpid) */
11262 elf_tdata (abfd)->core->lwpid
11263 = bfd_get_32 (abfd, note->descdata + 4);
11264 /* offsetof(lwpstatus_t, pr_cursig) */
11265 elf_tdata (abfd)->core->signal
11266 = bfd_get_16 (abfd, note->descdata + 12);
11267
11268 sect = bfd_get_section_by_name (abfd, ".reg");
11269 if (sect != NULL)
11270 sect->size = gregset_size;
11271 else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg", gregset_size,
11272 note->descpos + gregset_off))
11273 return false;
11274
11275 sect = bfd_get_section_by_name (abfd, reg2_section_name);
11276 if (sect != NULL)
11277 {
11278 sect->size = fpregset_size;
11279 sect->filepos = note->descpos + fpregset_off;
11280 sect->alignment_power = 2;
11281 }
11282 else if (!_bfd_elfcore_make_pseudosection (abfd, ".reg2", fpregset_size,
11283 note->descpos + fpregset_off))
11284 return false;
11285
11286 return true;
11287 }
11288
11289 static bool
11290 elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
11291 {
11292 if (note == NULL)
11293 return false;
11294
11295 /* core files are identified as 32- or 64-bit, SPARC or x86,
11296 by the size of the descsz which matches the sizeof()
11297 the type appropriate for that note type (e.g., prstatus_t for
11298 SOLARIS_NT_PRSTATUS) for the corresponding architecture
11299 on Solaris. The core file bitness may differ from the bitness of
11300 gdb itself, so fixed values are used instead of sizeof().
11301 Appropriate fixed offsets are also used to obtain data from
11302 the note. */
11303
11304 switch ((int) note->type)
11305 {
11306 case SOLARIS_NT_PRSTATUS:
11307 switch (note->descsz)
11308 {
11309 case 508: /* sizeof(prstatus_t) SPARC 32-bit */
11310 return elfcore_grok_solaris_prstatus(abfd, note,
11311 136, 216, 308, 152, 356);
11312 case 904: /* sizeof(prstatus_t) SPARC 64-bit */
11313 return elfcore_grok_solaris_prstatus(abfd, note,
11314 264, 360, 520, 304, 600);
11315 case 432: /* sizeof(prstatus_t) Intel 32-bit */
11316 return elfcore_grok_solaris_prstatus(abfd, note,
11317 136, 216, 308, 76, 356);
11318 case 824: /* sizeof(prstatus_t) Intel 64-bit */
11319 return elfcore_grok_solaris_prstatus(abfd, note,
11320 264, 360, 520, 224, 600);
11321 default:
11322 return true;
11323 }
11324
11325 case SOLARIS_NT_PSINFO:
11326 case SOLARIS_NT_PRPSINFO:
11327 switch (note->descsz)
11328 {
11329 case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
11330 return elfcore_grok_solaris_info(abfd, note, 84, 100);
11331 case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
11332 return elfcore_grok_solaris_info(abfd, note, 120, 136);
11333 case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
11334 return elfcore_grok_solaris_info(abfd, note, 88, 104);
11335 case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
11336 return elfcore_grok_solaris_info(abfd, note, 136, 152);
11337 default:
11338 return true;
11339 }
11340
11341 case SOLARIS_NT_LWPSTATUS:
11342 switch (note->descsz)
11343 {
11344 case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
11345 return elfcore_grok_solaris_lwpstatus(abfd, note,
11346 152, 344, 400, 496);
11347 case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
11348 return elfcore_grok_solaris_lwpstatus(abfd, note,
11349 304, 544, 544, 848);
11350 case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
11351 return elfcore_grok_solaris_lwpstatus(abfd, note,
11352 76, 344, 380, 420);
11353 case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
11354 return elfcore_grok_solaris_lwpstatus(abfd, note,
11355 224, 544, 528, 768);
11356 default:
11357 return true;
11358 }
11359
11360 case SOLARIS_NT_LWPSINFO:
11361 /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
11362 if (note->descsz == 128 || note->descsz == 152)
11363 elf_tdata (abfd)->core->lwpid =
11364 bfd_get_32 (abfd, note->descdata + 4);
11365 break;
11366
11367 default:
11368 break;
11369 }
11370
11371 return true;
11372 }
11373
11374 /* For name starting with "CORE" this may be either a Solaris
11375 core file or a gdb-generated core file. Do Solaris-specific
11376 processing on selected note types first with
11377 elfcore_grok_solaris_note(), then process the note
11378 in elfcore_grok_note(). */
11379
11380 static bool
11381 elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
11382 {
11383 if (!elfcore_grok_solaris_note_impl (abfd, note))
11384 return false;
11385
11386 return elfcore_grok_note (abfd, note);
11387 }
11388
11389 static bool
11390 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
11391 {
11392 if (note->type == NT_OPENBSD_PROCINFO)
11393 return elfcore_grok_openbsd_procinfo (abfd, note);
11394
11395 if (note->type == NT_OPENBSD_REGS)
11396 return elfcore_make_note_pseudosection (abfd, ".reg", note);
11397
11398 if (note->type == NT_OPENBSD_FPREGS)
11399 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
11400
11401 if (note->type == NT_OPENBSD_XFPREGS)
11402 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
11403
11404 if (note->type == NT_OPENBSD_AUXV)
11405 return elfcore_make_auxv_note_section (abfd, note, 0);
11406
11407 if (note->type == NT_OPENBSD_WCOOKIE)
11408 {
11409 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
11410 SEC_HAS_CONTENTS);
11411
11412 if (sect == NULL)
11413 return false;
11414 sect->size = note->descsz;
11415 sect->filepos = note->descpos;
11416 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11417
11418 return true;
11419 }
11420
11421 return true;
11422 }
11423
11424 static bool
11425 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
11426 {
11427 void *ddata = note->descdata;
11428 char buf[100];
11429 char *name;
11430 asection *sect;
11431 short sig;
11432 unsigned flags;
11433
11434 if (note->descsz < 16)
11435 return false;
11436
11437 /* nto_procfs_status 'pid' field is at offset 0. */
11438 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
11439
11440 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
11441 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
11442
11443 /* nto_procfs_status 'flags' field is at offset 8. */
11444 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
11445
11446 /* nto_procfs_status 'what' field is at offset 14. */
11447 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
11448 {
11449 elf_tdata (abfd)->core->signal = sig;
11450 elf_tdata (abfd)->core->lwpid = *tid;
11451 }
11452
11453 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
11454 do not come from signals so we make sure we set the current
11455 thread just in case. */
11456 if (flags & 0x00000080)
11457 elf_tdata (abfd)->core->lwpid = *tid;
11458
11459 /* Make a ".qnx_core_status/%d" section. */
11460 sprintf (buf, ".qnx_core_status/%ld", *tid);
11461
11462 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11463 if (name == NULL)
11464 return false;
11465 strcpy (name, buf);
11466
11467 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11468 if (sect == NULL)
11469 return false;
11470
11471 sect->size = note->descsz;
11472 sect->filepos = note->descpos;
11473 sect->alignment_power = 2;
11474
11475 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
11476 }
11477
11478 static bool
11479 elfcore_grok_nto_regs (bfd *abfd,
11480 Elf_Internal_Note *note,
11481 long tid,
11482 char *base)
11483 {
11484 char buf[100];
11485 char *name;
11486 asection *sect;
11487
11488 /* Make a "(base)/%d" section. */
11489 sprintf (buf, "%s/%ld", base, tid);
11490
11491 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11492 if (name == NULL)
11493 return false;
11494 strcpy (name, buf);
11495
11496 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11497 if (sect == NULL)
11498 return false;
11499
11500 sect->size = note->descsz;
11501 sect->filepos = note->descpos;
11502 sect->alignment_power = 2;
11503
11504 /* This is the current thread. */
11505 if (elf_tdata (abfd)->core->lwpid == tid)
11506 return elfcore_maybe_make_sect (abfd, base, sect);
11507
11508 return true;
11509 }
11510
11511 #define BFD_QNT_CORE_INFO 7
11512 #define BFD_QNT_CORE_STATUS 8
11513 #define BFD_QNT_CORE_GREG 9
11514 #define BFD_QNT_CORE_FPREG 10
11515
11516 static bool
11517 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
11518 {
11519 /* Every GREG section has a STATUS section before it. Store the
11520 tid from the previous call to pass down to the next gregs
11521 function. */
11522 static long tid = 1;
11523
11524 switch (note->type)
11525 {
11526 case BFD_QNT_CORE_INFO:
11527 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
11528 case BFD_QNT_CORE_STATUS:
11529 return elfcore_grok_nto_status (abfd, note, &tid);
11530 case BFD_QNT_CORE_GREG:
11531 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
11532 case BFD_QNT_CORE_FPREG:
11533 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
11534 default:
11535 return true;
11536 }
11537 }
11538
11539 static bool
11540 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
11541 {
11542 char *name;
11543 asection *sect;
11544 size_t len;
11545
11546 /* Use note name as section name. */
11547 len = note->namesz;
11548 name = (char *) bfd_alloc (abfd, len);
11549 if (name == NULL)
11550 return false;
11551 memcpy (name, note->namedata, len);
11552 name[len - 1] = '\0';
11553
11554 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11555 if (sect == NULL)
11556 return false;
11557
11558 sect->size = note->descsz;
11559 sect->filepos = note->descpos;
11560 sect->alignment_power = 1;
11561
11562 return true;
11563 }
11564
11565 /* Function: elfcore_write_note
11566
11567 Inputs:
11568 buffer to hold note, and current size of buffer
11569 name of note
11570 type of note
11571 data for note
11572 size of data for note
11573
11574 Writes note to end of buffer. ELF64 notes are written exactly as
11575 for ELF32, despite the current (as of 2006) ELF gabi specifying
11576 that they ought to have 8-byte namesz and descsz field, and have
11577 8-byte alignment. Other writers, eg. Linux kernel, do the same.
11578
11579 Return:
11580 Pointer to realloc'd buffer, *BUFSIZ updated. */
11581
11582 char *
11583 elfcore_write_note (bfd *abfd,
11584 char *buf,
11585 int *bufsiz,
11586 const char *name,
11587 int type,
11588 const void *input,
11589 int size)
11590 {
11591 Elf_External_Note *xnp;
11592 size_t namesz;
11593 size_t newspace;
11594 char *dest;
11595
11596 namesz = 0;
11597 if (name != NULL)
11598 namesz = strlen (name) + 1;
11599
11600 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
11601
11602 buf = (char *) realloc (buf, *bufsiz + newspace);
11603 if (buf == NULL)
11604 return buf;
11605 dest = buf + *bufsiz;
11606 *bufsiz += newspace;
11607 xnp = (Elf_External_Note *) dest;
11608 H_PUT_32 (abfd, namesz, xnp->namesz);
11609 H_PUT_32 (abfd, size, xnp->descsz);
11610 H_PUT_32 (abfd, type, xnp->type);
11611 dest = xnp->name;
11612 if (name != NULL)
11613 {
11614 memcpy (dest, name, namesz);
11615 dest += namesz;
11616 while (namesz & 3)
11617 {
11618 *dest++ = '\0';
11619 ++namesz;
11620 }
11621 }
11622 memcpy (dest, input, size);
11623 dest += size;
11624 while (size & 3)
11625 {
11626 *dest++ = '\0';
11627 ++size;
11628 }
11629 return buf;
11630 }
11631
11632 /* gcc-8 warns (*) on all the strncpy calls in this function about
11633 possible string truncation. The "truncation" is not a bug. We
11634 have an external representation of structs with fields that are not
11635 necessarily NULL terminated and corresponding internal
11636 representation fields that are one larger so that they can always
11637 be NULL terminated.
11638 gcc versions between 4.2 and 4.6 do not allow pragma control of
11639 diagnostics inside functions, giving a hard error if you try to use
11640 the finer control available with later versions.
11641 gcc prior to 4.2 warns about diagnostic push and pop.
11642 gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11643 unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11644 (*) Depending on your system header files! */
11645 #if GCC_VERSION >= 8000
11646 # pragma GCC diagnostic push
11647 # pragma GCC diagnostic ignored "-Wstringop-truncation"
11648 #endif
11649 char *
11650 elfcore_write_prpsinfo (bfd *abfd,
11651 char *buf,
11652 int *bufsiz,
11653 const char *fname,
11654 const char *psargs)
11655 {
11656 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11657
11658 if (bed->elf_backend_write_core_note != NULL)
11659 {
11660 char *ret;
11661 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11662 NT_PRPSINFO, fname, psargs);
11663 if (ret != NULL)
11664 return ret;
11665 }
11666
11667 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11668 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
11669 if (bed->s->elfclass == ELFCLASS32)
11670 {
11671 # if defined (HAVE_PSINFO32_T)
11672 psinfo32_t data;
11673 int note_type = NT_PSINFO;
11674 # else
11675 prpsinfo32_t data;
11676 int note_type = NT_PRPSINFO;
11677 # endif
11678
11679 memset (&data, 0, sizeof (data));
11680 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11681 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11682 return elfcore_write_note (abfd, buf, bufsiz,
11683 "CORE", note_type, &data, sizeof (data));
11684 }
11685 else
11686 # endif
11687 {
11688 # if defined (HAVE_PSINFO_T)
11689 psinfo_t data;
11690 int note_type = NT_PSINFO;
11691 # else
11692 prpsinfo_t data;
11693 int note_type = NT_PRPSINFO;
11694 # endif
11695
11696 memset (&data, 0, sizeof (data));
11697 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11698 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11699 return elfcore_write_note (abfd, buf, bufsiz,
11700 "CORE", note_type, &data, sizeof (data));
11701 }
11702 #endif /* PSINFO_T or PRPSINFO_T */
11703
11704 free (buf);
11705 return NULL;
11706 }
11707 #if GCC_VERSION >= 8000
11708 # pragma GCC diagnostic pop
11709 #endif
11710
11711 char *
11712 elfcore_write_linux_prpsinfo32
11713 (bfd *abfd, char *buf, int *bufsiz,
11714 const struct elf_internal_linux_prpsinfo *prpsinfo)
11715 {
11716 if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11717 {
11718 struct elf_external_linux_prpsinfo32_ugid16 data;
11719
11720 swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11721 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11722 &data, sizeof (data));
11723 }
11724 else
11725 {
11726 struct elf_external_linux_prpsinfo32_ugid32 data;
11727
11728 swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11729 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11730 &data, sizeof (data));
11731 }
11732 }
11733
11734 char *
11735 elfcore_write_linux_prpsinfo64
11736 (bfd *abfd, char *buf, int *bufsiz,
11737 const struct elf_internal_linux_prpsinfo *prpsinfo)
11738 {
11739 if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11740 {
11741 struct elf_external_linux_prpsinfo64_ugid16 data;
11742
11743 swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11744 return elfcore_write_note (abfd, buf, bufsiz,
11745 "CORE", NT_PRPSINFO, &data, sizeof (data));
11746 }
11747 else
11748 {
11749 struct elf_external_linux_prpsinfo64_ugid32 data;
11750
11751 swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11752 return elfcore_write_note (abfd, buf, bufsiz,
11753 "CORE", NT_PRPSINFO, &data, sizeof (data));
11754 }
11755 }
11756
11757 char *
11758 elfcore_write_prstatus (bfd *abfd,
11759 char *buf,
11760 int *bufsiz,
11761 long pid,
11762 int cursig,
11763 const void *gregs)
11764 {
11765 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11766
11767 if (bed->elf_backend_write_core_note != NULL)
11768 {
11769 char *ret;
11770 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11771 NT_PRSTATUS,
11772 pid, cursig, gregs);
11773 if (ret != NULL)
11774 return ret;
11775 }
11776
11777 #if defined (HAVE_PRSTATUS_T)
11778 #if defined (HAVE_PRSTATUS32_T)
11779 if (bed->s->elfclass == ELFCLASS32)
11780 {
11781 prstatus32_t prstat;
11782
11783 memset (&prstat, 0, sizeof (prstat));
11784 prstat.pr_pid = pid;
11785 prstat.pr_cursig = cursig;
11786 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11787 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11788 NT_PRSTATUS, &prstat, sizeof (prstat));
11789 }
11790 else
11791 #endif
11792 {
11793 prstatus_t prstat;
11794
11795 memset (&prstat, 0, sizeof (prstat));
11796 prstat.pr_pid = pid;
11797 prstat.pr_cursig = cursig;
11798 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11799 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11800 NT_PRSTATUS, &prstat, sizeof (prstat));
11801 }
11802 #endif /* HAVE_PRSTATUS_T */
11803
11804 free (buf);
11805 return NULL;
11806 }
11807
11808 #if defined (HAVE_LWPSTATUS_T)
11809 char *
11810 elfcore_write_lwpstatus (bfd *abfd,
11811 char *buf,
11812 int *bufsiz,
11813 long pid,
11814 int cursig,
11815 const void *gregs)
11816 {
11817 lwpstatus_t lwpstat;
11818 const char *note_name = "CORE";
11819
11820 memset (&lwpstat, 0, sizeof (lwpstat));
11821 lwpstat.pr_lwpid = pid >> 16;
11822 lwpstat.pr_cursig = cursig;
11823 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11824 memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
11825 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11826 #if !defined(gregs)
11827 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11828 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11829 #else
11830 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11831 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11832 #endif
11833 #endif
11834 return elfcore_write_note (abfd, buf, bufsiz, note_name,
11835 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11836 }
11837 #endif /* HAVE_LWPSTATUS_T */
11838
11839 #if defined (HAVE_PSTATUS_T)
11840 char *
11841 elfcore_write_pstatus (bfd *abfd,
11842 char *buf,
11843 int *bufsiz,
11844 long pid,
11845 int cursig ATTRIBUTE_UNUSED,
11846 const void *gregs ATTRIBUTE_UNUSED)
11847 {
11848 const char *note_name = "CORE";
11849 #if defined (HAVE_PSTATUS32_T)
11850 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11851
11852 if (bed->s->elfclass == ELFCLASS32)
11853 {
11854 pstatus32_t pstat;
11855
11856 memset (&pstat, 0, sizeof (pstat));
11857 pstat.pr_pid = pid & 0xffff;
11858 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11859 NT_PSTATUS, &pstat, sizeof (pstat));
11860 return buf;
11861 }
11862 else
11863 #endif
11864 {
11865 pstatus_t pstat;
11866
11867 memset (&pstat, 0, sizeof (pstat));
11868 pstat.pr_pid = pid & 0xffff;
11869 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11870 NT_PSTATUS, &pstat, sizeof (pstat));
11871 return buf;
11872 }
11873 }
11874 #endif /* HAVE_PSTATUS_T */
11875
11876 char *
11877 elfcore_write_prfpreg (bfd *abfd,
11878 char *buf,
11879 int *bufsiz,
11880 const void *fpregs,
11881 int size)
11882 {
11883 const char *note_name = "CORE";
11884 return elfcore_write_note (abfd, buf, bufsiz,
11885 note_name, NT_FPREGSET, fpregs, size);
11886 }
11887
11888 char *
11889 elfcore_write_prxfpreg (bfd *abfd,
11890 char *buf,
11891 int *bufsiz,
11892 const void *xfpregs,
11893 int size)
11894 {
11895 char *note_name = "LINUX";
11896 return elfcore_write_note (abfd, buf, bufsiz,
11897 note_name, NT_PRXFPREG, xfpregs, size);
11898 }
11899
11900 char *
11901 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11902 const void *xfpregs, int size)
11903 {
11904 char *note_name;
11905 if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11906 note_name = "FreeBSD";
11907 else
11908 note_name = "LINUX";
11909 return elfcore_write_note (abfd, buf, bufsiz,
11910 note_name, NT_X86_XSTATE, xfpregs, size);
11911 }
11912
11913 char *
11914 elfcore_write_ppc_vmx (bfd *abfd,
11915 char *buf,
11916 int *bufsiz,
11917 const void *ppc_vmx,
11918 int size)
11919 {
11920 char *note_name = "LINUX";
11921 return elfcore_write_note (abfd, buf, bufsiz,
11922 note_name, NT_PPC_VMX, ppc_vmx, size);
11923 }
11924
11925 char *
11926 elfcore_write_ppc_vsx (bfd *abfd,
11927 char *buf,
11928 int *bufsiz,
11929 const void *ppc_vsx,
11930 int size)
11931 {
11932 char *note_name = "LINUX";
11933 return elfcore_write_note (abfd, buf, bufsiz,
11934 note_name, NT_PPC_VSX, ppc_vsx, size);
11935 }
11936
11937 char *
11938 elfcore_write_ppc_tar (bfd *abfd,
11939 char *buf,
11940 int *bufsiz,
11941 const void *ppc_tar,
11942 int size)
11943 {
11944 char *note_name = "LINUX";
11945 return elfcore_write_note (abfd, buf, bufsiz,
11946 note_name, NT_PPC_TAR, ppc_tar, size);
11947 }
11948
11949 char *
11950 elfcore_write_ppc_ppr (bfd *abfd,
11951 char *buf,
11952 int *bufsiz,
11953 const void *ppc_ppr,
11954 int size)
11955 {
11956 char *note_name = "LINUX";
11957 return elfcore_write_note (abfd, buf, bufsiz,
11958 note_name, NT_PPC_PPR, ppc_ppr, size);
11959 }
11960
11961 char *
11962 elfcore_write_ppc_dscr (bfd *abfd,
11963 char *buf,
11964 int *bufsiz,
11965 const void *ppc_dscr,
11966 int size)
11967 {
11968 char *note_name = "LINUX";
11969 return elfcore_write_note (abfd, buf, bufsiz,
11970 note_name, NT_PPC_DSCR, ppc_dscr, size);
11971 }
11972
11973 char *
11974 elfcore_write_ppc_ebb (bfd *abfd,
11975 char *buf,
11976 int *bufsiz,
11977 const void *ppc_ebb,
11978 int size)
11979 {
11980 char *note_name = "LINUX";
11981 return elfcore_write_note (abfd, buf, bufsiz,
11982 note_name, NT_PPC_EBB, ppc_ebb, size);
11983 }
11984
11985 char *
11986 elfcore_write_ppc_pmu (bfd *abfd,
11987 char *buf,
11988 int *bufsiz,
11989 const void *ppc_pmu,
11990 int size)
11991 {
11992 char *note_name = "LINUX";
11993 return elfcore_write_note (abfd, buf, bufsiz,
11994 note_name, NT_PPC_PMU, ppc_pmu, size);
11995 }
11996
11997 char *
11998 elfcore_write_ppc_tm_cgpr (bfd *abfd,
11999 char *buf,
12000 int *bufsiz,
12001 const void *ppc_tm_cgpr,
12002 int size)
12003 {
12004 char *note_name = "LINUX";
12005 return elfcore_write_note (abfd, buf, bufsiz,
12006 note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
12007 }
12008
12009 char *
12010 elfcore_write_ppc_tm_cfpr (bfd *abfd,
12011 char *buf,
12012 int *bufsiz,
12013 const void *ppc_tm_cfpr,
12014 int size)
12015 {
12016 char *note_name = "LINUX";
12017 return elfcore_write_note (abfd, buf, bufsiz,
12018 note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
12019 }
12020
12021 char *
12022 elfcore_write_ppc_tm_cvmx (bfd *abfd,
12023 char *buf,
12024 int *bufsiz,
12025 const void *ppc_tm_cvmx,
12026 int size)
12027 {
12028 char *note_name = "LINUX";
12029 return elfcore_write_note (abfd, buf, bufsiz,
12030 note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
12031 }
12032
12033 char *
12034 elfcore_write_ppc_tm_cvsx (bfd *abfd,
12035 char *buf,
12036 int *bufsiz,
12037 const void *ppc_tm_cvsx,
12038 int size)
12039 {
12040 char *note_name = "LINUX";
12041 return elfcore_write_note (abfd, buf, bufsiz,
12042 note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
12043 }
12044
12045 char *
12046 elfcore_write_ppc_tm_spr (bfd *abfd,
12047 char *buf,
12048 int *bufsiz,
12049 const void *ppc_tm_spr,
12050 int size)
12051 {
12052 char *note_name = "LINUX";
12053 return elfcore_write_note (abfd, buf, bufsiz,
12054 note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
12055 }
12056
12057 char *
12058 elfcore_write_ppc_tm_ctar (bfd *abfd,
12059 char *buf,
12060 int *bufsiz,
12061 const void *ppc_tm_ctar,
12062 int size)
12063 {
12064 char *note_name = "LINUX";
12065 return elfcore_write_note (abfd, buf, bufsiz,
12066 note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
12067 }
12068
12069 char *
12070 elfcore_write_ppc_tm_cppr (bfd *abfd,
12071 char *buf,
12072 int *bufsiz,
12073 const void *ppc_tm_cppr,
12074 int size)
12075 {
12076 char *note_name = "LINUX";
12077 return elfcore_write_note (abfd, buf, bufsiz,
12078 note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
12079 }
12080
12081 char *
12082 elfcore_write_ppc_tm_cdscr (bfd *abfd,
12083 char *buf,
12084 int *bufsiz,
12085 const void *ppc_tm_cdscr,
12086 int size)
12087 {
12088 char *note_name = "LINUX";
12089 return elfcore_write_note (abfd, buf, bufsiz,
12090 note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
12091 }
12092
12093 static char *
12094 elfcore_write_s390_high_gprs (bfd *abfd,
12095 char *buf,
12096 int *bufsiz,
12097 const void *s390_high_gprs,
12098 int size)
12099 {
12100 char *note_name = "LINUX";
12101 return elfcore_write_note (abfd, buf, bufsiz,
12102 note_name, NT_S390_HIGH_GPRS,
12103 s390_high_gprs, size);
12104 }
12105
12106 char *
12107 elfcore_write_s390_timer (bfd *abfd,
12108 char *buf,
12109 int *bufsiz,
12110 const void *s390_timer,
12111 int size)
12112 {
12113 char *note_name = "LINUX";
12114 return elfcore_write_note (abfd, buf, bufsiz,
12115 note_name, NT_S390_TIMER, s390_timer, size);
12116 }
12117
12118 char *
12119 elfcore_write_s390_todcmp (bfd *abfd,
12120 char *buf,
12121 int *bufsiz,
12122 const void *s390_todcmp,
12123 int size)
12124 {
12125 char *note_name = "LINUX";
12126 return elfcore_write_note (abfd, buf, bufsiz,
12127 note_name, NT_S390_TODCMP, s390_todcmp, size);
12128 }
12129
12130 char *
12131 elfcore_write_s390_todpreg (bfd *abfd,
12132 char *buf,
12133 int *bufsiz,
12134 const void *s390_todpreg,
12135 int size)
12136 {
12137 char *note_name = "LINUX";
12138 return elfcore_write_note (abfd, buf, bufsiz,
12139 note_name, NT_S390_TODPREG, s390_todpreg, size);
12140 }
12141
12142 char *
12143 elfcore_write_s390_ctrs (bfd *abfd,
12144 char *buf,
12145 int *bufsiz,
12146 const void *s390_ctrs,
12147 int size)
12148 {
12149 char *note_name = "LINUX";
12150 return elfcore_write_note (abfd, buf, bufsiz,
12151 note_name, NT_S390_CTRS, s390_ctrs, size);
12152 }
12153
12154 char *
12155 elfcore_write_s390_prefix (bfd *abfd,
12156 char *buf,
12157 int *bufsiz,
12158 const void *s390_prefix,
12159 int size)
12160 {
12161 char *note_name = "LINUX";
12162 return elfcore_write_note (abfd, buf, bufsiz,
12163 note_name, NT_S390_PREFIX, s390_prefix, size);
12164 }
12165
12166 char *
12167 elfcore_write_s390_last_break (bfd *abfd,
12168 char *buf,
12169 int *bufsiz,
12170 const void *s390_last_break,
12171 int size)
12172 {
12173 char *note_name = "LINUX";
12174 return elfcore_write_note (abfd, buf, bufsiz,
12175 note_name, NT_S390_LAST_BREAK,
12176 s390_last_break, size);
12177 }
12178
12179 char *
12180 elfcore_write_s390_system_call (bfd *abfd,
12181 char *buf,
12182 int *bufsiz,
12183 const void *s390_system_call,
12184 int size)
12185 {
12186 char *note_name = "LINUX";
12187 return elfcore_write_note (abfd, buf, bufsiz,
12188 note_name, NT_S390_SYSTEM_CALL,
12189 s390_system_call, size);
12190 }
12191
12192 char *
12193 elfcore_write_s390_tdb (bfd *abfd,
12194 char *buf,
12195 int *bufsiz,
12196 const void *s390_tdb,
12197 int size)
12198 {
12199 char *note_name = "LINUX";
12200 return elfcore_write_note (abfd, buf, bufsiz,
12201 note_name, NT_S390_TDB, s390_tdb, size);
12202 }
12203
12204 char *
12205 elfcore_write_s390_vxrs_low (bfd *abfd,
12206 char *buf,
12207 int *bufsiz,
12208 const void *s390_vxrs_low,
12209 int size)
12210 {
12211 char *note_name = "LINUX";
12212 return elfcore_write_note (abfd, buf, bufsiz,
12213 note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
12214 }
12215
12216 char *
12217 elfcore_write_s390_vxrs_high (bfd *abfd,
12218 char *buf,
12219 int *bufsiz,
12220 const void *s390_vxrs_high,
12221 int size)
12222 {
12223 char *note_name = "LINUX";
12224 return elfcore_write_note (abfd, buf, bufsiz,
12225 note_name, NT_S390_VXRS_HIGH,
12226 s390_vxrs_high, size);
12227 }
12228
12229 char *
12230 elfcore_write_s390_gs_cb (bfd *abfd,
12231 char *buf,
12232 int *bufsiz,
12233 const void *s390_gs_cb,
12234 int size)
12235 {
12236 char *note_name = "LINUX";
12237 return elfcore_write_note (abfd, buf, bufsiz,
12238 note_name, NT_S390_GS_CB,
12239 s390_gs_cb, size);
12240 }
12241
12242 char *
12243 elfcore_write_s390_gs_bc (bfd *abfd,
12244 char *buf,
12245 int *bufsiz,
12246 const void *s390_gs_bc,
12247 int size)
12248 {
12249 char *note_name = "LINUX";
12250 return elfcore_write_note (abfd, buf, bufsiz,
12251 note_name, NT_S390_GS_BC,
12252 s390_gs_bc, size);
12253 }
12254
12255 char *
12256 elfcore_write_arm_vfp (bfd *abfd,
12257 char *buf,
12258 int *bufsiz,
12259 const void *arm_vfp,
12260 int size)
12261 {
12262 char *note_name = "LINUX";
12263 return elfcore_write_note (abfd, buf, bufsiz,
12264 note_name, NT_ARM_VFP, arm_vfp, size);
12265 }
12266
12267 char *
12268 elfcore_write_aarch_tls (bfd *abfd,
12269 char *buf,
12270 int *bufsiz,
12271 const void *aarch_tls,
12272 int size)
12273 {
12274 char *note_name = "LINUX";
12275 return elfcore_write_note (abfd, buf, bufsiz,
12276 note_name, NT_ARM_TLS, aarch_tls, size);
12277 }
12278
12279 char *
12280 elfcore_write_aarch_hw_break (bfd *abfd,
12281 char *buf,
12282 int *bufsiz,
12283 const void *aarch_hw_break,
12284 int size)
12285 {
12286 char *note_name = "LINUX";
12287 return elfcore_write_note (abfd, buf, bufsiz,
12288 note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
12289 }
12290
12291 char *
12292 elfcore_write_aarch_hw_watch (bfd *abfd,
12293 char *buf,
12294 int *bufsiz,
12295 const void *aarch_hw_watch,
12296 int size)
12297 {
12298 char *note_name = "LINUX";
12299 return elfcore_write_note (abfd, buf, bufsiz,
12300 note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
12301 }
12302
12303 char *
12304 elfcore_write_aarch_sve (bfd *abfd,
12305 char *buf,
12306 int *bufsiz,
12307 const void *aarch_sve,
12308 int size)
12309 {
12310 char *note_name = "LINUX";
12311 return elfcore_write_note (abfd, buf, bufsiz,
12312 note_name, NT_ARM_SVE, aarch_sve, size);
12313 }
12314
12315 char *
12316 elfcore_write_aarch_pauth (bfd *abfd,
12317 char *buf,
12318 int *bufsiz,
12319 const void *aarch_pauth,
12320 int size)
12321 {
12322 char *note_name = "LINUX";
12323 return elfcore_write_note (abfd, buf, bufsiz,
12324 note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
12325 }
12326
12327 char *
12328 elfcore_write_aarch_mte (bfd *abfd,
12329 char *buf,
12330 int *bufsiz,
12331 const void *aarch_mte,
12332 int size)
12333 {
12334 char *note_name = "LINUX";
12335 return elfcore_write_note (abfd, buf, bufsiz,
12336 note_name, NT_ARM_TAGGED_ADDR_CTRL,
12337 aarch_mte,
12338 size);
12339 }
12340
12341 char *
12342 elfcore_write_arc_v2 (bfd *abfd,
12343 char *buf,
12344 int *bufsiz,
12345 const void *arc_v2,
12346 int size)
12347 {
12348 char *note_name = "LINUX";
12349 return elfcore_write_note (abfd, buf, bufsiz,
12350 note_name, NT_ARC_V2, arc_v2, size);
12351 }
12352
12353 char *
12354 elfcore_write_loongarch_cpucfg (bfd *abfd,
12355 char *buf,
12356 int *bufsiz,
12357 const void *loongarch_cpucfg,
12358 int size)
12359 {
12360 char *note_name = "LINUX";
12361 return elfcore_write_note (abfd, buf, bufsiz,
12362 note_name, NT_LARCH_CPUCFG,
12363 loongarch_cpucfg, size);
12364 }
12365
12366 char *
12367 elfcore_write_loongarch_lbt (bfd *abfd,
12368 char *buf,
12369 int *bufsiz,
12370 const void *loongarch_lbt,
12371 int size)
12372 {
12373 char *note_name = "LINUX";
12374 return elfcore_write_note (abfd, buf, bufsiz,
12375 note_name, NT_LARCH_LBT, loongarch_lbt, size);
12376 }
12377
12378 char *
12379 elfcore_write_loongarch_lsx (bfd *abfd,
12380 char *buf,
12381 int *bufsiz,
12382 const void *loongarch_lsx,
12383 int size)
12384 {
12385 char *note_name = "LINUX";
12386 return elfcore_write_note (abfd, buf, bufsiz,
12387 note_name, NT_LARCH_LSX, loongarch_lsx, size);
12388 }
12389
12390 char *
12391 elfcore_write_loongarch_lasx (bfd *abfd,
12392 char *buf,
12393 int *bufsiz,
12394 const void *loongarch_lasx,
12395 int size)
12396 {
12397 char *note_name = "LINUX";
12398 return elfcore_write_note (abfd, buf, bufsiz,
12399 note_name, NT_LARCH_LASX, loongarch_lasx, size);
12400 }
12401
12402 /* Write the buffer of csr values in CSRS (length SIZE) into the note
12403 buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
12404 written into. Return a pointer to the new start of the note buffer, to
12405 replace BUF which may no longer be valid. */
12406
12407 char *
12408 elfcore_write_riscv_csr (bfd *abfd,
12409 char *buf,
12410 int *bufsiz,
12411 const void *csrs,
12412 int size)
12413 {
12414 const char *note_name = "GDB";
12415 return elfcore_write_note (abfd, buf, bufsiz,
12416 note_name, NT_RISCV_CSR, csrs, size);
12417 }
12418
12419 /* Write the target description (a string) pointed to by TDESC, length
12420 SIZE, into the note buffer BUF, and update *BUFSIZ. ABFD is the bfd the
12421 note is being written into. Return a pointer to the new start of the
12422 note buffer, to replace BUF which may no longer be valid. */
12423
12424 char *
12425 elfcore_write_gdb_tdesc (bfd *abfd,
12426 char *buf,
12427 int *bufsiz,
12428 const void *tdesc,
12429 int size)
12430 {
12431 const char *note_name = "GDB";
12432 return elfcore_write_note (abfd, buf, bufsiz,
12433 note_name, NT_GDB_TDESC, tdesc, size);
12434 }
12435
12436 char *
12437 elfcore_write_register_note (bfd *abfd,
12438 char *buf,
12439 int *bufsiz,
12440 const char *section,
12441 const void *data,
12442 int size)
12443 {
12444 if (strcmp (section, ".reg2") == 0)
12445 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
12446 if (strcmp (section, ".reg-xfp") == 0)
12447 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
12448 if (strcmp (section, ".reg-xstate") == 0)
12449 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
12450 if (strcmp (section, ".reg-ppc-vmx") == 0)
12451 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
12452 if (strcmp (section, ".reg-ppc-vsx") == 0)
12453 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
12454 if (strcmp (section, ".reg-ppc-tar") == 0)
12455 return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
12456 if (strcmp (section, ".reg-ppc-ppr") == 0)
12457 return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
12458 if (strcmp (section, ".reg-ppc-dscr") == 0)
12459 return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
12460 if (strcmp (section, ".reg-ppc-ebb") == 0)
12461 return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
12462 if (strcmp (section, ".reg-ppc-pmu") == 0)
12463 return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
12464 if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
12465 return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
12466 if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
12467 return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
12468 if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
12469 return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
12470 if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
12471 return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
12472 if (strcmp (section, ".reg-ppc-tm-spr") == 0)
12473 return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
12474 if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
12475 return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
12476 if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
12477 return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
12478 if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
12479 return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
12480 if (strcmp (section, ".reg-s390-high-gprs") == 0)
12481 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
12482 if (strcmp (section, ".reg-s390-timer") == 0)
12483 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
12484 if (strcmp (section, ".reg-s390-todcmp") == 0)
12485 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
12486 if (strcmp (section, ".reg-s390-todpreg") == 0)
12487 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
12488 if (strcmp (section, ".reg-s390-ctrs") == 0)
12489 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
12490 if (strcmp (section, ".reg-s390-prefix") == 0)
12491 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
12492 if (strcmp (section, ".reg-s390-last-break") == 0)
12493 return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
12494 if (strcmp (section, ".reg-s390-system-call") == 0)
12495 return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
12496 if (strcmp (section, ".reg-s390-tdb") == 0)
12497 return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
12498 if (strcmp (section, ".reg-s390-vxrs-low") == 0)
12499 return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
12500 if (strcmp (section, ".reg-s390-vxrs-high") == 0)
12501 return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
12502 if (strcmp (section, ".reg-s390-gs-cb") == 0)
12503 return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
12504 if (strcmp (section, ".reg-s390-gs-bc") == 0)
12505 return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
12506 if (strcmp (section, ".reg-arm-vfp") == 0)
12507 return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
12508 if (strcmp (section, ".reg-aarch-tls") == 0)
12509 return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
12510 if (strcmp (section, ".reg-aarch-hw-break") == 0)
12511 return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
12512 if (strcmp (section, ".reg-aarch-hw-watch") == 0)
12513 return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
12514 if (strcmp (section, ".reg-aarch-sve") == 0)
12515 return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
12516 if (strcmp (section, ".reg-aarch-pauth") == 0)
12517 return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
12518 if (strcmp (section, ".reg-aarch-mte") == 0)
12519 return elfcore_write_aarch_mte (abfd, buf, bufsiz, data, size);
12520 if (strcmp (section, ".reg-arc-v2") == 0)
12521 return elfcore_write_arc_v2 (abfd, buf, bufsiz, data, size);
12522 if (strcmp (section, ".gdb-tdesc") == 0)
12523 return elfcore_write_gdb_tdesc (abfd, buf, bufsiz, data, size);
12524 if (strcmp (section, ".reg-riscv-csr") == 0)
12525 return elfcore_write_riscv_csr (abfd, buf, bufsiz, data, size);
12526 if (strcmp (section, ".reg-loongarch-cpucfg") == 0)
12527 return elfcore_write_loongarch_cpucfg (abfd, buf, bufsiz, data, size);
12528 if (strcmp (section, ".reg-loongarch-lbt") == 0)
12529 return elfcore_write_loongarch_lbt (abfd, buf, bufsiz, data, size);
12530 if (strcmp (section, ".reg-loongarch-lsx") == 0)
12531 return elfcore_write_loongarch_lsx (abfd, buf, bufsiz, data, size);
12532 if (strcmp (section, ".reg-loongarch-lasx") == 0)
12533 return elfcore_write_loongarch_lasx (abfd, buf, bufsiz, data, size);
12534 return NULL;
12535 }
12536
12537 char *
12538 elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
12539 const void *buf, int bufsiz)
12540 {
12541 return elfcore_write_note (obfd, note_data, note_size,
12542 "CORE", NT_FILE, buf, bufsiz);
12543 }
12544
12545 static bool
12546 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
12547 size_t align)
12548 {
12549 char *p;
12550
12551 /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
12552 gABI specifies that PT_NOTE alignment should be aligned to 4
12553 bytes for 32-bit objects and to 8 bytes for 64-bit objects. If
12554 align is less than 4, we use 4 byte alignment. */
12555 if (align < 4)
12556 align = 4;
12557 if (align != 4 && align != 8)
12558 return false;
12559
12560 p = buf;
12561 while (p < buf + size)
12562 {
12563 Elf_External_Note *xnp = (Elf_External_Note *) p;
12564 Elf_Internal_Note in;
12565
12566 if (offsetof (Elf_External_Note, name) > buf - p + size)
12567 return false;
12568
12569 in.type = H_GET_32 (abfd, xnp->type);
12570
12571 in.namesz = H_GET_32 (abfd, xnp->namesz);
12572 in.namedata = xnp->name;
12573 if (in.namesz > buf - in.namedata + size)
12574 return false;
12575
12576 in.descsz = H_GET_32 (abfd, xnp->descsz);
12577 in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
12578 in.descpos = offset + (in.descdata - buf);
12579 if (in.descsz != 0
12580 && (in.descdata >= buf + size
12581 || in.descsz > buf - in.descdata + size))
12582 return false;
12583
12584 switch (bfd_get_format (abfd))
12585 {
12586 default:
12587 return true;
12588
12589 case bfd_core:
12590 {
12591 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
12592 struct
12593 {
12594 const char * string;
12595 size_t len;
12596 bool (*func) (bfd *, Elf_Internal_Note *);
12597 }
12598 grokers[] =
12599 {
12600 GROKER_ELEMENT ("", elfcore_grok_note),
12601 GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
12602 GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
12603 GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
12604 GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
12605 GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
12606 GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
12607 GROKER_ELEMENT ("CORE", elfcore_grok_solaris_note)
12608 };
12609 #undef GROKER_ELEMENT
12610 int i;
12611
12612 for (i = ARRAY_SIZE (grokers); i--;)
12613 {
12614 if (in.namesz >= grokers[i].len
12615 && strncmp (in.namedata, grokers[i].string,
12616 grokers[i].len) == 0)
12617 {
12618 if (! grokers[i].func (abfd, & in))
12619 return false;
12620 break;
12621 }
12622 }
12623 break;
12624 }
12625
12626 case bfd_object:
12627 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
12628 {
12629 if (! elfobj_grok_gnu_note (abfd, &in))
12630 return false;
12631 }
12632 else if (in.namesz == sizeof "stapsdt"
12633 && strcmp (in.namedata, "stapsdt") == 0)
12634 {
12635 if (! elfobj_grok_stapsdt_note (abfd, &in))
12636 return false;
12637 }
12638 break;
12639 }
12640
12641 p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
12642 }
12643
12644 return true;
12645 }
12646
12647 bool
12648 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
12649 size_t align)
12650 {
12651 char *buf;
12652
12653 if (size == 0 || (size + 1) == 0)
12654 return true;
12655
12656 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
12657 return false;
12658
12659 buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
12660 if (buf == NULL)
12661 return false;
12662
12663 /* PR 17512: file: ec08f814
12664 0-termintate the buffer so that string searches will not overflow. */
12665 buf[size] = 0;
12666
12667 if (!elf_parse_notes (abfd, buf, size, offset, align))
12668 {
12669 free (buf);
12670 return false;
12671 }
12672
12673 free (buf);
12674 return true;
12675 }
12676 \f
12677 /* Providing external access to the ELF program header table. */
12678
12679 /* Return an upper bound on the number of bytes required to store a
12680 copy of ABFD's program header table entries. Return -1 if an error
12681 occurs; bfd_get_error will return an appropriate code. */
12682
12683 long
12684 bfd_get_elf_phdr_upper_bound (bfd *abfd)
12685 {
12686 if (abfd->xvec->flavour != bfd_target_elf_flavour)
12687 {
12688 bfd_set_error (bfd_error_wrong_format);
12689 return -1;
12690 }
12691
12692 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
12693 }
12694
12695 /* Copy ABFD's program header table entries to *PHDRS. The entries
12696 will be stored as an array of Elf_Internal_Phdr structures, as
12697 defined in include/elf/internal.h. To find out how large the
12698 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
12699
12700 Return the number of program header table entries read, or -1 if an
12701 error occurs; bfd_get_error will return an appropriate code. */
12702
12703 int
12704 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
12705 {
12706 int num_phdrs;
12707
12708 if (abfd->xvec->flavour != bfd_target_elf_flavour)
12709 {
12710 bfd_set_error (bfd_error_wrong_format);
12711 return -1;
12712 }
12713
12714 num_phdrs = elf_elfheader (abfd)->e_phnum;
12715 if (num_phdrs != 0)
12716 memcpy (phdrs, elf_tdata (abfd)->phdr,
12717 num_phdrs * sizeof (Elf_Internal_Phdr));
12718
12719 return num_phdrs;
12720 }
12721
12722 enum elf_reloc_type_class
12723 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
12724 const asection *rel_sec ATTRIBUTE_UNUSED,
12725 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
12726 {
12727 return reloc_class_normal;
12728 }
12729
12730 /* For RELA architectures, return the relocation value for a
12731 relocation against a local symbol. */
12732
12733 bfd_vma
12734 _bfd_elf_rela_local_sym (bfd *abfd,
12735 Elf_Internal_Sym *sym,
12736 asection **psec,
12737 Elf_Internal_Rela *rel)
12738 {
12739 asection *sec = *psec;
12740 bfd_vma relocation;
12741
12742 relocation = (sec->output_section->vma
12743 + sec->output_offset
12744 + sym->st_value);
12745 if ((sec->flags & SEC_MERGE)
12746 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
12747 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
12748 {
12749 rel->r_addend =
12750 _bfd_merged_section_offset (abfd, psec,
12751 elf_section_data (sec)->sec_info,
12752 sym->st_value + rel->r_addend);
12753 if (sec != *psec)
12754 {
12755 /* If we have changed the section, and our original section is
12756 marked with SEC_EXCLUDE, it means that the original
12757 SEC_MERGE section has been completely subsumed in some
12758 other SEC_MERGE section. In this case, we need to leave
12759 some info around for --emit-relocs. */
12760 if ((sec->flags & SEC_EXCLUDE) != 0)
12761 sec->kept_section = *psec;
12762 sec = *psec;
12763 }
12764 rel->r_addend -= relocation;
12765 rel->r_addend += sec->output_section->vma + sec->output_offset;
12766 }
12767 return relocation;
12768 }
12769
12770 bfd_vma
12771 _bfd_elf_rel_local_sym (bfd *abfd,
12772 Elf_Internal_Sym *sym,
12773 asection **psec,
12774 bfd_vma addend)
12775 {
12776 asection *sec = *psec;
12777
12778 if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
12779 return sym->st_value + addend;
12780
12781 return _bfd_merged_section_offset (abfd, psec,
12782 elf_section_data (sec)->sec_info,
12783 sym->st_value + addend);
12784 }
12785
12786 /* Adjust an address within a section. Given OFFSET within SEC, return
12787 the new offset within the section, based upon changes made to the
12788 section. Returns -1 if the offset is now invalid.
12789 The offset (in abnd out) is in target sized bytes, however big a
12790 byte may be. */
12791
12792 bfd_vma
12793 _bfd_elf_section_offset (bfd *abfd,
12794 struct bfd_link_info *info,
12795 asection *sec,
12796 bfd_vma offset)
12797 {
12798 switch (sec->sec_info_type)
12799 {
12800 case SEC_INFO_TYPE_STABS:
12801 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12802 offset);
12803 case SEC_INFO_TYPE_EH_FRAME:
12804 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
12805
12806 default:
12807 if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12808 {
12809 /* Reverse the offset. */
12810 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12811 bfd_size_type address_size = bed->s->arch_size / 8;
12812
12813 /* address_size and sec->size are in octets. Convert
12814 to bytes before subtracting the original offset. */
12815 offset = ((sec->size - address_size)
12816 / bfd_octets_per_byte (abfd, sec) - offset);
12817 }
12818 return offset;
12819 }
12820 }
12821 \f
12822 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
12823 reconstruct an ELF file by reading the segments out of remote memory
12824 based on the ELF file header at EHDR_VMA and the ELF program headers it
12825 points to. If not null, *LOADBASEP is filled in with the difference
12826 between the VMAs from which the segments were read, and the VMAs the
12827 file headers (and hence BFD's idea of each section's VMA) put them at.
12828
12829 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12830 remote memory at target address VMA into the local buffer at MYADDR; it
12831 should return zero on success or an `errno' code on failure. TEMPL must
12832 be a BFD for an ELF target with the word size and byte order found in
12833 the remote memory. */
12834
12835 bfd *
12836 bfd_elf_bfd_from_remote_memory
12837 (bfd *templ,
12838 bfd_vma ehdr_vma,
12839 bfd_size_type size,
12840 bfd_vma *loadbasep,
12841 int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
12842 {
12843 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
12844 (templ, ehdr_vma, size, loadbasep, target_read_memory);
12845 }
12846 \f
12847 long
12848 _bfd_elf_get_synthetic_symtab (bfd *abfd,
12849 long symcount ATTRIBUTE_UNUSED,
12850 asymbol **syms ATTRIBUTE_UNUSED,
12851 long dynsymcount,
12852 asymbol **dynsyms,
12853 asymbol **ret)
12854 {
12855 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12856 asection *relplt;
12857 asymbol *s;
12858 const char *relplt_name;
12859 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
12860 arelent *p;
12861 long count, i, n;
12862 size_t size;
12863 Elf_Internal_Shdr *hdr;
12864 char *names;
12865 asection *plt;
12866
12867 *ret = NULL;
12868
12869 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12870 return 0;
12871
12872 if (dynsymcount <= 0)
12873 return 0;
12874
12875 if (!bed->plt_sym_val)
12876 return 0;
12877
12878 relplt_name = bed->relplt_name;
12879 if (relplt_name == NULL)
12880 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
12881 relplt = bfd_get_section_by_name (abfd, relplt_name);
12882 if (relplt == NULL)
12883 return 0;
12884
12885 hdr = &elf_section_data (relplt)->this_hdr;
12886 if (hdr->sh_link != elf_dynsymtab (abfd)
12887 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12888 return 0;
12889
12890 plt = bfd_get_section_by_name (abfd, ".plt");
12891 if (plt == NULL)
12892 return 0;
12893
12894 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
12895 if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
12896 return -1;
12897
12898 count = relplt->size / hdr->sh_entsize;
12899 size = count * sizeof (asymbol);
12900 p = relplt->relocation;
12901 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12902 {
12903 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12904 if (p->addend != 0)
12905 {
12906 #ifdef BFD64
12907 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12908 #else
12909 size += sizeof ("+0x") - 1 + 8;
12910 #endif
12911 }
12912 }
12913
12914 s = *ret = (asymbol *) bfd_malloc (size);
12915 if (s == NULL)
12916 return -1;
12917
12918 names = (char *) (s + count);
12919 p = relplt->relocation;
12920 n = 0;
12921 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12922 {
12923 size_t len;
12924 bfd_vma addr;
12925
12926 addr = bed->plt_sym_val (i, plt, p);
12927 if (addr == (bfd_vma) -1)
12928 continue;
12929
12930 *s = **p->sym_ptr_ptr;
12931 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
12932 we are defining a symbol, ensure one of them is set. */
12933 if ((s->flags & BSF_LOCAL) == 0)
12934 s->flags |= BSF_GLOBAL;
12935 s->flags |= BSF_SYNTHETIC;
12936 s->section = plt;
12937 s->value = addr - plt->vma;
12938 s->name = names;
12939 s->udata.p = NULL;
12940 len = strlen ((*p->sym_ptr_ptr)->name);
12941 memcpy (names, (*p->sym_ptr_ptr)->name, len);
12942 names += len;
12943 if (p->addend != 0)
12944 {
12945 char buf[30], *a;
12946
12947 memcpy (names, "+0x", sizeof ("+0x") - 1);
12948 names += sizeof ("+0x") - 1;
12949 bfd_sprintf_vma (abfd, buf, p->addend);
12950 for (a = buf; *a == '0'; ++a)
12951 ;
12952 len = strlen (a);
12953 memcpy (names, a, len);
12954 names += len;
12955 }
12956 memcpy (names, "@plt", sizeof ("@plt"));
12957 names += sizeof ("@plt");
12958 ++s, ++n;
12959 }
12960
12961 return n;
12962 }
12963
12964 /* It is only used by x86-64 so far.
12965 ??? This repeats *COM* id of zero. sec->id is supposed to be unique,
12966 but current usage would allow all of _bfd_std_section to be zero. */
12967 static const asymbol lcomm_sym
12968 = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
12969 asection _bfd_elf_large_com_section
12970 = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
12971 "LARGE_COMMON", 0, SEC_IS_COMMON);
12972
12973 bool
12974 _bfd_elf_final_write_processing (bfd *abfd)
12975 {
12976 Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */
12977
12978 i_ehdrp = elf_elfheader (abfd);
12979
12980 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12981 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
12982
12983 /* Set the osabi field to ELFOSABI_GNU if the binary contains
12984 SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
12985 or STB_GNU_UNIQUE binding. */
12986 if (elf_tdata (abfd)->has_gnu_osabi != 0)
12987 {
12988 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12989 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
12990 else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
12991 && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
12992 {
12993 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
12994 _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
12995 "and FreeBSD targets"));
12996 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
12997 _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
12998 "only by GNU and FreeBSD targets"));
12999 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
13000 _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
13001 "only by GNU and FreeBSD targets"));
13002 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
13003 _bfd_error_handler (_("GNU_RETAIN section is supported "
13004 "only by GNU and FreeBSD targets"));
13005 bfd_set_error (bfd_error_sorry);
13006 return false;
13007 }
13008 }
13009 return true;
13010 }
13011
13012
13013 /* Return TRUE for ELF symbol types that represent functions.
13014 This is the default version of this function, which is sufficient for
13015 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
13016
13017 bool
13018 _bfd_elf_is_function_type (unsigned int type)
13019 {
13020 return (type == STT_FUNC
13021 || type == STT_GNU_IFUNC);
13022 }
13023
13024 /* If the ELF symbol SYM might be a function in SEC, return the
13025 function size and set *CODE_OFF to the function's entry point,
13026 otherwise return zero. */
13027
13028 bfd_size_type
13029 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
13030 bfd_vma *code_off)
13031 {
13032 bfd_size_type size;
13033 elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
13034
13035 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
13036 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
13037 || sym->section != sec)
13038 return 0;
13039
13040 size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
13041
13042 /* In theory we should check that the symbol's type satisfies
13043 _bfd_elf_is_function_type(), but there are some function-like
13044 symbols which would fail this test. (eg _start). Instead
13045 we check for hidden, local, notype symbols with zero size.
13046 This type of symbol is generated by the annobin plugin for gcc
13047 and clang, and should not be considered to be a function symbol. */
13048 if (size == 0
13049 && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
13050 && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
13051 && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
13052 return 0;
13053
13054 *code_off = sym->value;
13055 /* Do not return 0 for the function's size. */
13056 return size ? size : 1;
13057 }
13058
13059 /* Set to non-zero to enable some debug messages. */
13060 #define DEBUG_SECONDARY_RELOCS 0
13061
13062 /* An internal-to-the-bfd-library only section type
13063 used to indicate a cached secondary reloc section. */
13064 #define SHT_SECONDARY_RELOC (SHT_LOOS + SHT_RELA)
13065
13066 /* Create a BFD section to hold a secondary reloc section. */
13067
13068 bool
13069 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
13070 Elf_Internal_Shdr *hdr,
13071 const char * name,
13072 unsigned int shindex)
13073 {
13074 /* We only support RELA secondary relocs. */
13075 if (hdr->sh_type != SHT_RELA)
13076 return false;
13077
13078 #if DEBUG_SECONDARY_RELOCS
13079 fprintf (stderr, "secondary reloc section %s encountered\n", name);
13080 #endif
13081 hdr->sh_type = SHT_SECONDARY_RELOC;
13082 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
13083 }
13084
13085 /* Read in any secondary relocs associated with SEC. */
13086
13087 bool
13088 _bfd_elf_slurp_secondary_reloc_section (bfd * abfd,
13089 asection * sec,
13090 asymbol ** symbols,
13091 bool dynamic)
13092 {
13093 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13094 asection * relsec;
13095 bool result = true;
13096 bfd_vma (*r_sym) (bfd_vma);
13097
13098 #if BFD_DEFAULT_TARGET_SIZE > 32
13099 if (bfd_arch_bits_per_address (abfd) != 32)
13100 r_sym = elf64_r_sym;
13101 else
13102 #endif
13103 r_sym = elf32_r_sym;
13104
13105 if (!elf_section_data (sec)->has_secondary_relocs)
13106 return true;
13107
13108 /* Discover if there are any secondary reloc sections
13109 associated with SEC. */
13110 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13111 {
13112 Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
13113
13114 if (hdr->sh_type == SHT_SECONDARY_RELOC
13115 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
13116 && (hdr->sh_entsize == ebd->s->sizeof_rel
13117 || hdr->sh_entsize == ebd->s->sizeof_rela))
13118 {
13119 bfd_byte * native_relocs;
13120 bfd_byte * native_reloc;
13121 arelent * internal_relocs;
13122 arelent * internal_reloc;
13123 unsigned int i;
13124 unsigned int entsize;
13125 unsigned int symcount;
13126 unsigned int reloc_count;
13127 size_t amt;
13128
13129 if (ebd->elf_info_to_howto == NULL)
13130 return false;
13131
13132 #if DEBUG_SECONDARY_RELOCS
13133 fprintf (stderr, "read secondary relocs for %s from %s\n",
13134 sec->name, relsec->name);
13135 #endif
13136 entsize = hdr->sh_entsize;
13137
13138 native_relocs = bfd_malloc (hdr->sh_size);
13139 if (native_relocs == NULL)
13140 {
13141 result = false;
13142 continue;
13143 }
13144
13145 reloc_count = NUM_SHDR_ENTRIES (hdr);
13146 if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
13147 {
13148 free (native_relocs);
13149 bfd_set_error (bfd_error_file_too_big);
13150 result = false;
13151 continue;
13152 }
13153
13154 internal_relocs = (arelent *) bfd_alloc (abfd, amt);
13155 if (internal_relocs == NULL)
13156 {
13157 free (native_relocs);
13158 result = false;
13159 continue;
13160 }
13161
13162 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
13163 || (bfd_bread (native_relocs, hdr->sh_size, abfd)
13164 != hdr->sh_size))
13165 {
13166 free (native_relocs);
13167 /* The internal_relocs will be freed when
13168 the memory for the bfd is released. */
13169 result = false;
13170 continue;
13171 }
13172
13173 if (dynamic)
13174 symcount = bfd_get_dynamic_symcount (abfd);
13175 else
13176 symcount = bfd_get_symcount (abfd);
13177
13178 for (i = 0, internal_reloc = internal_relocs,
13179 native_reloc = native_relocs;
13180 i < reloc_count;
13181 i++, internal_reloc++, native_reloc += entsize)
13182 {
13183 bool res;
13184 Elf_Internal_Rela rela;
13185
13186 if (entsize == ebd->s->sizeof_rel)
13187 ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
13188 else /* entsize == ebd->s->sizeof_rela */
13189 ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
13190
13191 /* The address of an ELF reloc is section relative for an object
13192 file, and absolute for an executable file or shared library.
13193 The address of a normal BFD reloc is always section relative,
13194 and the address of a dynamic reloc is absolute.. */
13195 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
13196 internal_reloc->address = rela.r_offset;
13197 else
13198 internal_reloc->address = rela.r_offset - sec->vma;
13199
13200 if (r_sym (rela.r_info) == STN_UNDEF)
13201 {
13202 /* FIXME: This and the error case below mean that we
13203 have a symbol on relocs that is not elf_symbol_type. */
13204 internal_reloc->sym_ptr_ptr =
13205 bfd_abs_section_ptr->symbol_ptr_ptr;
13206 }
13207 else if (r_sym (rela.r_info) > symcount)
13208 {
13209 _bfd_error_handler
13210 /* xgettext:c-format */
13211 (_("%pB(%pA): relocation %d has invalid symbol index %ld"),
13212 abfd, sec, i, (long) r_sym (rela.r_info));
13213 bfd_set_error (bfd_error_bad_value);
13214 internal_reloc->sym_ptr_ptr =
13215 bfd_abs_section_ptr->symbol_ptr_ptr;
13216 result = false;
13217 }
13218 else
13219 {
13220 asymbol **ps;
13221
13222 ps = symbols + r_sym (rela.r_info) - 1;
13223 internal_reloc->sym_ptr_ptr = ps;
13224 /* Make sure that this symbol is not removed by strip. */
13225 (*ps)->flags |= BSF_KEEP;
13226 }
13227
13228 internal_reloc->addend = rela.r_addend;
13229
13230 res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
13231 if (! res || internal_reloc->howto == NULL)
13232 {
13233 #if DEBUG_SECONDARY_RELOCS
13234 fprintf (stderr, "there is no howto associated with reloc %lx\n",
13235 rela.r_info);
13236 #endif
13237 result = false;
13238 }
13239 }
13240
13241 free (native_relocs);
13242 /* Store the internal relocs. */
13243 elf_section_data (relsec)->sec_info = internal_relocs;
13244 }
13245 }
13246
13247 return result;
13248 }
13249
13250 /* Set the ELF section header fields of an output secondary reloc section. */
13251
13252 bool
13253 _bfd_elf_copy_special_section_fields (const bfd * ibfd ATTRIBUTE_UNUSED,
13254 bfd * obfd ATTRIBUTE_UNUSED,
13255 const Elf_Internal_Shdr * isection,
13256 Elf_Internal_Shdr * osection)
13257 {
13258 asection * isec;
13259 asection * osec;
13260 struct bfd_elf_section_data * esd;
13261
13262 if (isection == NULL)
13263 return false;
13264
13265 if (isection->sh_type != SHT_SECONDARY_RELOC)
13266 return true;
13267
13268 isec = isection->bfd_section;
13269 if (isec == NULL)
13270 return false;
13271
13272 osec = osection->bfd_section;
13273 if (osec == NULL)
13274 return false;
13275
13276 esd = elf_section_data (osec);
13277 BFD_ASSERT (esd->sec_info == NULL);
13278 esd->sec_info = elf_section_data (isec)->sec_info;
13279 osection->sh_type = SHT_RELA;
13280 osection->sh_link = elf_onesymtab (obfd);
13281 if (osection->sh_link == 0)
13282 {
13283 /* There is no symbol table - we are hosed... */
13284 _bfd_error_handler
13285 /* xgettext:c-format */
13286 (_("%pB(%pA): link section cannot be set because the output file does not have a symbol table"),
13287 obfd, osec);
13288 bfd_set_error (bfd_error_bad_value);
13289 return false;
13290 }
13291
13292 /* Find the output section that corresponds to the isection's sh_info link. */
13293 if (isection->sh_info == 0
13294 || isection->sh_info >= elf_numsections (ibfd))
13295 {
13296 _bfd_error_handler
13297 /* xgettext:c-format */
13298 (_("%pB(%pA): info section index is invalid"),
13299 obfd, osec);
13300 bfd_set_error (bfd_error_bad_value);
13301 return false;
13302 }
13303
13304 isection = elf_elfsections (ibfd)[isection->sh_info];
13305
13306 if (isection == NULL
13307 || isection->bfd_section == NULL
13308 || isection->bfd_section->output_section == NULL)
13309 {
13310 _bfd_error_handler
13311 /* xgettext:c-format */
13312 (_("%pB(%pA): info section index cannot be set because the section is not in the output"),
13313 obfd, osec);
13314 bfd_set_error (bfd_error_bad_value);
13315 return false;
13316 }
13317
13318 esd = elf_section_data (isection->bfd_section->output_section);
13319 BFD_ASSERT (esd != NULL);
13320 osection->sh_info = esd->this_idx;
13321 esd->has_secondary_relocs = true;
13322 #if DEBUG_SECONDARY_RELOCS
13323 fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
13324 osec->name, osection->sh_link, osection->sh_info);
13325 fprintf (stderr, "mark section %s as having secondary relocs\n",
13326 bfd_section_name (isection->bfd_section->output_section));
13327 #endif
13328
13329 return true;
13330 }
13331
13332 /* Write out a secondary reloc section.
13333
13334 FIXME: Currently this function can result in a serious performance penalty
13335 for files with secondary relocs and lots of sections. The proper way to
13336 fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
13337 relocs together and then to have this function just walk that chain. */
13338
13339 bool
13340 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
13341 {
13342 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
13343 bfd_vma addr_offset;
13344 asection * relsec;
13345 bfd_vma (*r_info) (bfd_vma, bfd_vma);
13346 bool result = true;
13347
13348 if (sec == NULL)
13349 return false;
13350
13351 #if BFD_DEFAULT_TARGET_SIZE > 32
13352 if (bfd_arch_bits_per_address (abfd) != 32)
13353 r_info = elf64_r_info;
13354 else
13355 #endif
13356 r_info = elf32_r_info;
13357
13358 /* The address of an ELF reloc is section relative for an object
13359 file, and absolute for an executable file or shared library.
13360 The address of a BFD reloc is always section relative. */
13361 addr_offset = 0;
13362 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
13363 addr_offset = sec->vma;
13364
13365 /* Discover if there are any secondary reloc sections
13366 associated with SEC. */
13367 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13368 {
13369 const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
13370 Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
13371
13372 if (hdr->sh_type == SHT_RELA
13373 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
13374 {
13375 asymbol * last_sym;
13376 int last_sym_idx;
13377 unsigned int reloc_count;
13378 unsigned int idx;
13379 unsigned int entsize;
13380 arelent * src_irel;
13381 bfd_byte * dst_rela;
13382
13383 if (hdr->contents != NULL)
13384 {
13385 _bfd_error_handler
13386 /* xgettext:c-format */
13387 (_("%pB(%pA): error: secondary reloc section processed twice"),
13388 abfd, relsec);
13389 bfd_set_error (bfd_error_bad_value);
13390 result = false;
13391 continue;
13392 }
13393
13394 entsize = hdr->sh_entsize;
13395 if (entsize == 0)
13396 {
13397 _bfd_error_handler
13398 /* xgettext:c-format */
13399 (_("%pB(%pA): error: secondary reloc section has zero sized entries"),
13400 abfd, relsec);
13401 bfd_set_error (bfd_error_bad_value);
13402 result = false;
13403 continue;
13404 }
13405 else if (entsize != ebd->s->sizeof_rel
13406 && entsize != ebd->s->sizeof_rela)
13407 {
13408 _bfd_error_handler
13409 /* xgettext:c-format */
13410 (_("%pB(%pA): error: secondary reloc section has non-standard sized entries"),
13411 abfd, relsec);
13412 bfd_set_error (bfd_error_bad_value);
13413 result = false;
13414 continue;
13415 }
13416
13417 reloc_count = hdr->sh_size / entsize;
13418 if (reloc_count <= 0)
13419 {
13420 _bfd_error_handler
13421 /* xgettext:c-format */
13422 (_("%pB(%pA): error: secondary reloc section is empty!"),
13423 abfd, relsec);
13424 bfd_set_error (bfd_error_bad_value);
13425 result = false;
13426 continue;
13427 }
13428
13429 hdr->contents = bfd_alloc (abfd, hdr->sh_size);
13430 if (hdr->contents == NULL)
13431 continue;
13432
13433 #if DEBUG_SECONDARY_RELOCS
13434 fprintf (stderr, "write %u secondary relocs for %s from %s\n",
13435 reloc_count, sec->name, relsec->name);
13436 #endif
13437 last_sym = NULL;
13438 last_sym_idx = 0;
13439 dst_rela = hdr->contents;
13440 src_irel = (arelent *) esd->sec_info;
13441 if (src_irel == NULL)
13442 {
13443 _bfd_error_handler
13444 /* xgettext:c-format */
13445 (_("%pB(%pA): error: internal relocs missing for secondary reloc section"),
13446 abfd, relsec);
13447 bfd_set_error (bfd_error_bad_value);
13448 result = false;
13449 continue;
13450 }
13451
13452 for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
13453 {
13454 Elf_Internal_Rela src_rela;
13455 arelent *ptr;
13456 asymbol *sym;
13457 int n;
13458
13459 ptr = src_irel + idx;
13460 if (ptr == NULL)
13461 {
13462 _bfd_error_handler
13463 /* xgettext:c-format */
13464 (_("%pB(%pA): error: reloc table entry %u is empty"),
13465 abfd, relsec, idx);
13466 bfd_set_error (bfd_error_bad_value);
13467 result = false;
13468 break;
13469 }
13470
13471 if (ptr->sym_ptr_ptr == NULL)
13472 {
13473 /* FIXME: Is this an error ? */
13474 n = 0;
13475 }
13476 else
13477 {
13478 sym = *ptr->sym_ptr_ptr;
13479
13480 if (sym == last_sym)
13481 n = last_sym_idx;
13482 else
13483 {
13484 n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
13485 if (n < 0)
13486 {
13487 _bfd_error_handler
13488 /* xgettext:c-format */
13489 (_("%pB(%pA): error: secondary reloc %u references a missing symbol"),
13490 abfd, relsec, idx);
13491 bfd_set_error (bfd_error_bad_value);
13492 result = false;
13493 n = 0;
13494 }
13495
13496 last_sym = sym;
13497 last_sym_idx = n;
13498 }
13499
13500 if (sym->the_bfd != NULL
13501 && sym->the_bfd->xvec != abfd->xvec
13502 && ! _bfd_elf_validate_reloc (abfd, ptr))
13503 {
13504 _bfd_error_handler
13505 /* xgettext:c-format */
13506 (_("%pB(%pA): error: secondary reloc %u references a deleted symbol"),
13507 abfd, relsec, idx);
13508 bfd_set_error (bfd_error_bad_value);
13509 result = false;
13510 n = 0;
13511 }
13512 }
13513
13514 src_rela.r_offset = ptr->address + addr_offset;
13515 if (ptr->howto == NULL)
13516 {
13517 _bfd_error_handler
13518 /* xgettext:c-format */
13519 (_("%pB(%pA): error: secondary reloc %u is of an unknown type"),
13520 abfd, relsec, idx);
13521 bfd_set_error (bfd_error_bad_value);
13522 result = false;
13523 src_rela.r_info = r_info (0, 0);
13524 }
13525 else
13526 src_rela.r_info = r_info (n, ptr->howto->type);
13527 src_rela.r_addend = ptr->addend;
13528
13529 if (entsize == ebd->s->sizeof_rel)
13530 ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
13531 else /* entsize == ebd->s->sizeof_rela */
13532 ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
13533 }
13534 }
13535 }
13536
13537 return result;
13538 }