Add support for ELF files which contain multiple reloc sections which all target...
[deliverable/binutils-gdb.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2
3 Copyright (C) 1993-2020 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 bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
54 static bfd_boolean swap_out_syms (bfd *, struct elf_strtab_hash **, int) ;
55 static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
56 file_ptr offset, size_t align);
57
58 /* Swap version information in and out. The version information is
59 currently size independent. If that ever changes, this code will
60 need to move into elfcode.h. */
61
62 /* Swap in a Verdef structure. */
63
64 void
65 _bfd_elf_swap_verdef_in (bfd *abfd,
66 const Elf_External_Verdef *src,
67 Elf_Internal_Verdef *dst)
68 {
69 dst->vd_version = H_GET_16 (abfd, src->vd_version);
70 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
71 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
72 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
73 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
74 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
75 dst->vd_next = H_GET_32 (abfd, src->vd_next);
76 }
77
78 /* Swap out a Verdef structure. */
79
80 void
81 _bfd_elf_swap_verdef_out (bfd *abfd,
82 const Elf_Internal_Verdef *src,
83 Elf_External_Verdef *dst)
84 {
85 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
86 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
87 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
88 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
89 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
90 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
91 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
92 }
93
94 /* Swap in a Verdaux structure. */
95
96 void
97 _bfd_elf_swap_verdaux_in (bfd *abfd,
98 const Elf_External_Verdaux *src,
99 Elf_Internal_Verdaux *dst)
100 {
101 dst->vda_name = H_GET_32 (abfd, src->vda_name);
102 dst->vda_next = H_GET_32 (abfd, src->vda_next);
103 }
104
105 /* Swap out a Verdaux structure. */
106
107 void
108 _bfd_elf_swap_verdaux_out (bfd *abfd,
109 const Elf_Internal_Verdaux *src,
110 Elf_External_Verdaux *dst)
111 {
112 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
113 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
114 }
115
116 /* Swap in a Verneed structure. */
117
118 void
119 _bfd_elf_swap_verneed_in (bfd *abfd,
120 const Elf_External_Verneed *src,
121 Elf_Internal_Verneed *dst)
122 {
123 dst->vn_version = H_GET_16 (abfd, src->vn_version);
124 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
125 dst->vn_file = H_GET_32 (abfd, src->vn_file);
126 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
127 dst->vn_next = H_GET_32 (abfd, src->vn_next);
128 }
129
130 /* Swap out a Verneed structure. */
131
132 void
133 _bfd_elf_swap_verneed_out (bfd *abfd,
134 const Elf_Internal_Verneed *src,
135 Elf_External_Verneed *dst)
136 {
137 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
138 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
139 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
140 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
141 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
142 }
143
144 /* Swap in a Vernaux structure. */
145
146 void
147 _bfd_elf_swap_vernaux_in (bfd *abfd,
148 const Elf_External_Vernaux *src,
149 Elf_Internal_Vernaux *dst)
150 {
151 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
152 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
153 dst->vna_other = H_GET_16 (abfd, src->vna_other);
154 dst->vna_name = H_GET_32 (abfd, src->vna_name);
155 dst->vna_next = H_GET_32 (abfd, src->vna_next);
156 }
157
158 /* Swap out a Vernaux structure. */
159
160 void
161 _bfd_elf_swap_vernaux_out (bfd *abfd,
162 const Elf_Internal_Vernaux *src,
163 Elf_External_Vernaux *dst)
164 {
165 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
166 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
167 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
168 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
169 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
170 }
171
172 /* Swap in a Versym structure. */
173
174 void
175 _bfd_elf_swap_versym_in (bfd *abfd,
176 const Elf_External_Versym *src,
177 Elf_Internal_Versym *dst)
178 {
179 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
180 }
181
182 /* Swap out a Versym structure. */
183
184 void
185 _bfd_elf_swap_versym_out (bfd *abfd,
186 const Elf_Internal_Versym *src,
187 Elf_External_Versym *dst)
188 {
189 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
190 }
191
192 /* Standard ELF hash function. Do not change this function; you will
193 cause invalid hash tables to be generated. */
194
195 unsigned long
196 bfd_elf_hash (const char *namearg)
197 {
198 const unsigned char *name = (const unsigned char *) namearg;
199 unsigned long h = 0;
200 unsigned long g;
201 int ch;
202
203 while ((ch = *name++) != '\0')
204 {
205 h = (h << 4) + ch;
206 if ((g = (h & 0xf0000000)) != 0)
207 {
208 h ^= g >> 24;
209 /* The ELF ABI says `h &= ~g', but this is equivalent in
210 this case and on some machines one insn instead of two. */
211 h ^= g;
212 }
213 }
214 return h & 0xffffffff;
215 }
216
217 /* DT_GNU_HASH hash function. Do not change this function; you will
218 cause invalid hash tables to be generated. */
219
220 unsigned long
221 bfd_elf_gnu_hash (const char *namearg)
222 {
223 const unsigned char *name = (const unsigned char *) namearg;
224 unsigned long h = 5381;
225 unsigned char ch;
226
227 while ((ch = *name++) != '\0')
228 h = (h << 5) + h + ch;
229 return h & 0xffffffff;
230 }
231
232 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
233 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
234 bfd_boolean
235 bfd_elf_allocate_object (bfd *abfd,
236 size_t object_size,
237 enum elf_target_id object_id)
238 {
239 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
240 abfd->tdata.any = bfd_zalloc (abfd, object_size);
241 if (abfd->tdata.any == NULL)
242 return FALSE;
243
244 elf_object_id (abfd) = object_id;
245 if (abfd->direction != read_direction)
246 {
247 struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
248 if (o == NULL)
249 return FALSE;
250 elf_tdata (abfd)->o = o;
251 elf_program_header_size (abfd) = (bfd_size_type) -1;
252 }
253 return TRUE;
254 }
255
256
257 bfd_boolean
258 bfd_elf_make_object (bfd *abfd)
259 {
260 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
261 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
262 bed->target_id);
263 }
264
265 bfd_boolean
266 bfd_elf_mkcorefile (bfd *abfd)
267 {
268 /* I think this can be done just like an object file. */
269 if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
270 return FALSE;
271 elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
272 return elf_tdata (abfd)->core != NULL;
273 }
274
275 char *
276 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
277 {
278 Elf_Internal_Shdr **i_shdrp;
279 bfd_byte *shstrtab = NULL;
280 file_ptr offset;
281 bfd_size_type shstrtabsize;
282
283 i_shdrp = elf_elfsections (abfd);
284 if (i_shdrp == 0
285 || shindex >= elf_numsections (abfd)
286 || i_shdrp[shindex] == 0)
287 return NULL;
288
289 shstrtab = i_shdrp[shindex]->contents;
290 if (shstrtab == NULL)
291 {
292 /* No cached one, attempt to read, and cache what we read. */
293 offset = i_shdrp[shindex]->sh_offset;
294 shstrtabsize = i_shdrp[shindex]->sh_size;
295
296 /* Allocate and clear an extra byte at the end, to prevent crashes
297 in case the string table is not terminated. */
298 if (shstrtabsize + 1 <= 1
299 || bfd_seek (abfd, offset, SEEK_SET) != 0
300 || (shstrtab = _bfd_alloc_and_read (abfd, shstrtabsize + 1,
301 shstrtabsize)) == NULL)
302 {
303 /* Once we've failed to read it, make sure we don't keep
304 trying. Otherwise, we'll keep allocating space for
305 the string table over and over. */
306 i_shdrp[shindex]->sh_size = 0;
307 }
308 else
309 shstrtab[shstrtabsize] = '\0';
310 i_shdrp[shindex]->contents = shstrtab;
311 }
312 return (char *) shstrtab;
313 }
314
315 char *
316 bfd_elf_string_from_elf_section (bfd *abfd,
317 unsigned int shindex,
318 unsigned int strindex)
319 {
320 Elf_Internal_Shdr *hdr;
321
322 if (strindex == 0)
323 return "";
324
325 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
326 return NULL;
327
328 hdr = elf_elfsections (abfd)[shindex];
329
330 if (hdr->contents == NULL)
331 {
332 if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
333 {
334 /* PR 17512: file: f057ec89. */
335 /* xgettext:c-format */
336 _bfd_error_handler (_("%pB: attempt to load strings from"
337 " a non-string section (number %d)"),
338 abfd, shindex);
339 return NULL;
340 }
341
342 if (bfd_elf_get_str_section (abfd, shindex) == NULL)
343 return NULL;
344 }
345 else
346 {
347 /* PR 24273: The string section's contents may have already
348 been loaded elsewhere, eg because a corrupt file has the
349 string section index in the ELF header pointing at a group
350 section. So be paranoid, and test that the last byte of
351 the section is zero. */
352 if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
353 return NULL;
354 }
355
356 if (strindex >= hdr->sh_size)
357 {
358 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
359 _bfd_error_handler
360 /* xgettext:c-format */
361 (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
362 abfd, strindex, (uint64_t) hdr->sh_size,
363 (shindex == shstrndx && strindex == hdr->sh_name
364 ? ".shstrtab"
365 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
366 return NULL;
367 }
368
369 return ((char *) hdr->contents) + strindex;
370 }
371
372 /* Read and convert symbols to internal format.
373 SYMCOUNT specifies the number of symbols to read, starting from
374 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
375 are non-NULL, they are used to store the internal symbols, external
376 symbols, and symbol section index extensions, respectively.
377 Returns a pointer to the internal symbol buffer (malloced if necessary)
378 or NULL if there were no symbols or some kind of problem. */
379
380 Elf_Internal_Sym *
381 bfd_elf_get_elf_syms (bfd *ibfd,
382 Elf_Internal_Shdr *symtab_hdr,
383 size_t symcount,
384 size_t symoffset,
385 Elf_Internal_Sym *intsym_buf,
386 void *extsym_buf,
387 Elf_External_Sym_Shndx *extshndx_buf)
388 {
389 Elf_Internal_Shdr *shndx_hdr;
390 void *alloc_ext;
391 const bfd_byte *esym;
392 Elf_External_Sym_Shndx *alloc_extshndx;
393 Elf_External_Sym_Shndx *shndx;
394 Elf_Internal_Sym *alloc_intsym;
395 Elf_Internal_Sym *isym;
396 Elf_Internal_Sym *isymend;
397 const struct elf_backend_data *bed;
398 size_t extsym_size;
399 size_t amt;
400 file_ptr pos;
401
402 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
403 abort ();
404
405 if (symcount == 0)
406 return intsym_buf;
407
408 /* Normal syms might have section extension entries. */
409 shndx_hdr = NULL;
410 if (elf_symtab_shndx_list (ibfd) != NULL)
411 {
412 elf_section_list * entry;
413 Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
414
415 /* Find an index section that is linked to this symtab section. */
416 for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
417 {
418 /* PR 20063. */
419 if (entry->hdr.sh_link >= elf_numsections (ibfd))
420 continue;
421
422 if (sections[entry->hdr.sh_link] == symtab_hdr)
423 {
424 shndx_hdr = & entry->hdr;
425 break;
426 };
427 }
428
429 if (shndx_hdr == NULL)
430 {
431 if (symtab_hdr == & elf_symtab_hdr (ibfd))
432 /* Not really accurate, but this was how the old code used to work. */
433 shndx_hdr = & elf_symtab_shndx_list (ibfd)->hdr;
434 /* Otherwise we do nothing. The assumption is that
435 the index table will not be needed. */
436 }
437 }
438
439 /* Read the symbols. */
440 alloc_ext = NULL;
441 alloc_extshndx = NULL;
442 alloc_intsym = NULL;
443 bed = get_elf_backend_data (ibfd);
444 extsym_size = bed->s->sizeof_sym;
445 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
446 {
447 bfd_set_error (bfd_error_file_too_big);
448 intsym_buf = NULL;
449 goto out;
450 }
451 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
452 if (extsym_buf == NULL)
453 {
454 alloc_ext = bfd_malloc (amt);
455 extsym_buf = alloc_ext;
456 }
457 if (extsym_buf == NULL
458 || bfd_seek (ibfd, pos, SEEK_SET) != 0
459 || bfd_bread (extsym_buf, amt, ibfd) != amt)
460 {
461 intsym_buf = NULL;
462 goto out;
463 }
464
465 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
466 extshndx_buf = NULL;
467 else
468 {
469 if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
470 {
471 bfd_set_error (bfd_error_file_too_big);
472 intsym_buf = NULL;
473 goto out;
474 }
475 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
476 if (extshndx_buf == NULL)
477 {
478 alloc_extshndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt);
479 extshndx_buf = alloc_extshndx;
480 }
481 if (extshndx_buf == NULL
482 || bfd_seek (ibfd, pos, SEEK_SET) != 0
483 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
484 {
485 intsym_buf = NULL;
486 goto out;
487 }
488 }
489
490 if (intsym_buf == NULL)
491 {
492 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
493 {
494 bfd_set_error (bfd_error_file_too_big);
495 goto out;
496 }
497 alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
498 intsym_buf = alloc_intsym;
499 if (intsym_buf == NULL)
500 goto out;
501 }
502
503 /* Convert the symbols to internal form. */
504 isymend = intsym_buf + symcount;
505 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
506 shndx = extshndx_buf;
507 isym < isymend;
508 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
509 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
510 {
511 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
512 /* xgettext:c-format */
513 _bfd_error_handler (_("%pB symbol number %lu references"
514 " nonexistent SHT_SYMTAB_SHNDX section"),
515 ibfd, (unsigned long) symoffset);
516 if (alloc_intsym != NULL)
517 free (alloc_intsym);
518 intsym_buf = NULL;
519 goto out;
520 }
521
522 out:
523 if (alloc_ext != NULL)
524 free (alloc_ext);
525 if (alloc_extshndx != NULL)
526 free (alloc_extshndx);
527
528 return intsym_buf;
529 }
530
531 /* Look up a symbol name. */
532 const char *
533 bfd_elf_sym_name (bfd *abfd,
534 Elf_Internal_Shdr *symtab_hdr,
535 Elf_Internal_Sym *isym,
536 asection *sym_sec)
537 {
538 const char *name;
539 unsigned int iname = isym->st_name;
540 unsigned int shindex = symtab_hdr->sh_link;
541
542 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
543 /* Check for a bogus st_shndx to avoid crashing. */
544 && isym->st_shndx < elf_numsections (abfd))
545 {
546 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
547 shindex = elf_elfheader (abfd)->e_shstrndx;
548 }
549
550 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
551 if (name == NULL)
552 name = "(null)";
553 else if (sym_sec && *name == '\0')
554 name = bfd_section_name (sym_sec);
555
556 return name;
557 }
558
559 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
560 sections. The first element is the flags, the rest are section
561 pointers. */
562
563 typedef union elf_internal_group {
564 Elf_Internal_Shdr *shdr;
565 unsigned int flags;
566 } Elf_Internal_Group;
567
568 /* Return the name of the group signature symbol. Why isn't the
569 signature just a string? */
570
571 static const char *
572 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
573 {
574 Elf_Internal_Shdr *hdr;
575 unsigned char esym[sizeof (Elf64_External_Sym)];
576 Elf_External_Sym_Shndx eshndx;
577 Elf_Internal_Sym isym;
578
579 /* First we need to ensure the symbol table is available. Make sure
580 that it is a symbol table section. */
581 if (ghdr->sh_link >= elf_numsections (abfd))
582 return NULL;
583 hdr = elf_elfsections (abfd) [ghdr->sh_link];
584 if (hdr->sh_type != SHT_SYMTAB
585 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
586 return NULL;
587
588 /* Go read the symbol. */
589 hdr = &elf_tdata (abfd)->symtab_hdr;
590 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
591 &isym, esym, &eshndx) == NULL)
592 return NULL;
593
594 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
595 }
596
597 /* Set next_in_group list pointer, and group name for NEWSECT. */
598
599 static bfd_boolean
600 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
601 {
602 unsigned int num_group = elf_tdata (abfd)->num_group;
603
604 /* If num_group is zero, read in all SHT_GROUP sections. The count
605 is set to -1 if there are no SHT_GROUP sections. */
606 if (num_group == 0)
607 {
608 unsigned int i, shnum;
609
610 /* First count the number of groups. If we have a SHT_GROUP
611 section with just a flag word (ie. sh_size is 4), ignore it. */
612 shnum = elf_numsections (abfd);
613 num_group = 0;
614
615 #define IS_VALID_GROUP_SECTION_HEADER(shdr, minsize) \
616 ( (shdr)->sh_type == SHT_GROUP \
617 && (shdr)->sh_size >= minsize \
618 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
619 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
620
621 for (i = 0; i < shnum; i++)
622 {
623 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
624
625 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
626 num_group += 1;
627 }
628
629 if (num_group == 0)
630 {
631 num_group = (unsigned) -1;
632 elf_tdata (abfd)->num_group = num_group;
633 elf_tdata (abfd)->group_sect_ptr = NULL;
634 }
635 else
636 {
637 /* We keep a list of elf section headers for group sections,
638 so we can find them quickly. */
639 size_t amt;
640
641 elf_tdata (abfd)->num_group = num_group;
642 amt = num_group * sizeof (Elf_Internal_Shdr *);
643 elf_tdata (abfd)->group_sect_ptr
644 = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
645 if (elf_tdata (abfd)->group_sect_ptr == NULL)
646 return FALSE;
647 num_group = 0;
648
649 for (i = 0; i < shnum; i++)
650 {
651 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
652
653 if (IS_VALID_GROUP_SECTION_HEADER (shdr, 2 * GRP_ENTRY_SIZE))
654 {
655 unsigned char *src;
656 Elf_Internal_Group *dest;
657
658 /* Make sure the group section has a BFD section
659 attached to it. */
660 if (!bfd_section_from_shdr (abfd, i))
661 return FALSE;
662
663 /* Add to list of sections. */
664 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
665 num_group += 1;
666
667 /* Read the raw contents. */
668 BFD_ASSERT (sizeof (*dest) >= 4 && sizeof (*dest) % 4 == 0);
669 shdr->contents = NULL;
670 if (_bfd_mul_overflow (shdr->sh_size,
671 sizeof (*dest) / 4, &amt)
672 || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
673 || !(shdr->contents
674 = _bfd_alloc_and_read (abfd, amt, shdr->sh_size)))
675 {
676 _bfd_error_handler
677 /* xgettext:c-format */
678 (_("%pB: invalid size field in group section"
679 " header: %#" PRIx64 ""),
680 abfd, (uint64_t) shdr->sh_size);
681 bfd_set_error (bfd_error_bad_value);
682 -- num_group;
683 continue;
684 }
685
686 /* Translate raw contents, a flag word followed by an
687 array of elf section indices all in target byte order,
688 to the flag word followed by an array of elf section
689 pointers. */
690 src = shdr->contents + shdr->sh_size;
691 dest = (Elf_Internal_Group *) (shdr->contents + amt);
692
693 while (1)
694 {
695 unsigned int idx;
696
697 src -= 4;
698 --dest;
699 idx = H_GET_32 (abfd, src);
700 if (src == shdr->contents)
701 {
702 dest->shdr = NULL;
703 dest->flags = idx;
704 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
705 shdr->bfd_section->flags
706 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
707 break;
708 }
709 if (idx < shnum)
710 {
711 dest->shdr = elf_elfsections (abfd)[idx];
712 /* PR binutils/23199: All sections in a
713 section group should be marked with
714 SHF_GROUP. But some tools generate
715 broken objects without SHF_GROUP. Fix
716 them up here. */
717 dest->shdr->sh_flags |= SHF_GROUP;
718 }
719 if (idx >= shnum
720 || dest->shdr->sh_type == SHT_GROUP)
721 {
722 _bfd_error_handler
723 (_("%pB: invalid entry in SHT_GROUP section [%u]"),
724 abfd, i);
725 dest->shdr = NULL;
726 }
727 }
728 }
729 }
730
731 /* PR 17510: Corrupt binaries might contain invalid groups. */
732 if (num_group != (unsigned) elf_tdata (abfd)->num_group)
733 {
734 elf_tdata (abfd)->num_group = num_group;
735
736 /* If all groups are invalid then fail. */
737 if (num_group == 0)
738 {
739 elf_tdata (abfd)->group_sect_ptr = NULL;
740 elf_tdata (abfd)->num_group = num_group = -1;
741 _bfd_error_handler
742 (_("%pB: no valid group sections found"), abfd);
743 bfd_set_error (bfd_error_bad_value);
744 }
745 }
746 }
747 }
748
749 if (num_group != (unsigned) -1)
750 {
751 unsigned int search_offset = elf_tdata (abfd)->group_search_offset;
752 unsigned int j;
753
754 for (j = 0; j < num_group; j++)
755 {
756 /* Begin search from previous found group. */
757 unsigned i = (j + search_offset) % num_group;
758
759 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
760 Elf_Internal_Group *idx;
761 bfd_size_type n_elt;
762
763 if (shdr == NULL)
764 continue;
765
766 idx = (Elf_Internal_Group *) shdr->contents;
767 if (idx == NULL || shdr->sh_size < 4)
768 {
769 /* See PR 21957 for a reproducer. */
770 /* xgettext:c-format */
771 _bfd_error_handler (_("%pB: group section '%pA' has no contents"),
772 abfd, shdr->bfd_section);
773 elf_tdata (abfd)->group_sect_ptr[i] = NULL;
774 bfd_set_error (bfd_error_bad_value);
775 return FALSE;
776 }
777 n_elt = shdr->sh_size / 4;
778
779 /* Look through this group's sections to see if current
780 section is a member. */
781 while (--n_elt != 0)
782 if ((++idx)->shdr == hdr)
783 {
784 asection *s = NULL;
785
786 /* We are a member of this group. Go looking through
787 other members to see if any others are linked via
788 next_in_group. */
789 idx = (Elf_Internal_Group *) shdr->contents;
790 n_elt = shdr->sh_size / 4;
791 while (--n_elt != 0)
792 if ((++idx)->shdr != NULL
793 && (s = idx->shdr->bfd_section) != NULL
794 && elf_next_in_group (s) != NULL)
795 break;
796 if (n_elt != 0)
797 {
798 /* Snarf the group name from other member, and
799 insert current section in circular list. */
800 elf_group_name (newsect) = elf_group_name (s);
801 elf_next_in_group (newsect) = elf_next_in_group (s);
802 elf_next_in_group (s) = newsect;
803 }
804 else
805 {
806 const char *gname;
807
808 gname = group_signature (abfd, shdr);
809 if (gname == NULL)
810 return FALSE;
811 elf_group_name (newsect) = gname;
812
813 /* Start a circular list with one element. */
814 elf_next_in_group (newsect) = newsect;
815 }
816
817 /* If the group section has been created, point to the
818 new member. */
819 if (shdr->bfd_section != NULL)
820 elf_next_in_group (shdr->bfd_section) = newsect;
821
822 elf_tdata (abfd)->group_search_offset = i;
823 j = num_group - 1;
824 break;
825 }
826 }
827 }
828
829 if (elf_group_name (newsect) == NULL)
830 {
831 /* xgettext:c-format */
832 _bfd_error_handler (_("%pB: no group info for section '%pA'"),
833 abfd, newsect);
834 return FALSE;
835 }
836 return TRUE;
837 }
838
839 bfd_boolean
840 _bfd_elf_setup_sections (bfd *abfd)
841 {
842 unsigned int i;
843 unsigned int num_group = elf_tdata (abfd)->num_group;
844 bfd_boolean result = TRUE;
845 asection *s;
846
847 /* Process SHF_LINK_ORDER. */
848 for (s = abfd->sections; s != NULL; s = s->next)
849 {
850 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
851 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
852 {
853 unsigned int elfsec = this_hdr->sh_link;
854 /* FIXME: The old Intel compiler and old strip/objcopy may
855 not set the sh_link or sh_info fields. Hence we could
856 get the situation where elfsec is 0. */
857 if (elfsec == 0)
858 {
859 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
860 if (bed->link_order_error_handler)
861 bed->link_order_error_handler
862 /* xgettext:c-format */
863 (_("%pB: warning: sh_link not set for section `%pA'"),
864 abfd, s);
865 }
866 else
867 {
868 asection *linksec = NULL;
869
870 if (elfsec < elf_numsections (abfd))
871 {
872 this_hdr = elf_elfsections (abfd)[elfsec];
873 linksec = this_hdr->bfd_section;
874 }
875
876 /* PR 1991, 2008:
877 Some strip/objcopy may leave an incorrect value in
878 sh_link. We don't want to proceed. */
879 if (linksec == NULL)
880 {
881 _bfd_error_handler
882 /* xgettext:c-format */
883 (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
884 s->owner, elfsec, s);
885 result = FALSE;
886 }
887
888 elf_linked_to_section (s) = linksec;
889 }
890 }
891 else if (this_hdr->sh_type == SHT_GROUP
892 && elf_next_in_group (s) == NULL)
893 {
894 _bfd_error_handler
895 /* xgettext:c-format */
896 (_("%pB: SHT_GROUP section [index %d] has no SHF_GROUP sections"),
897 abfd, elf_section_data (s)->this_idx);
898 result = FALSE;
899 }
900 }
901
902 /* Process section groups. */
903 if (num_group == (unsigned) -1)
904 return result;
905
906 for (i = 0; i < num_group; i++)
907 {
908 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
909 Elf_Internal_Group *idx;
910 unsigned int n_elt;
911
912 /* PR binutils/18758: Beware of corrupt binaries with invalid group data. */
913 if (shdr == NULL || shdr->bfd_section == NULL || shdr->contents == NULL)
914 {
915 _bfd_error_handler
916 /* xgettext:c-format */
917 (_("%pB: section group entry number %u is corrupt"),
918 abfd, i);
919 result = FALSE;
920 continue;
921 }
922
923 idx = (Elf_Internal_Group *) shdr->contents;
924 n_elt = shdr->sh_size / 4;
925
926 while (--n_elt != 0)
927 {
928 ++ idx;
929
930 if (idx->shdr == NULL)
931 continue;
932 else if (idx->shdr->bfd_section)
933 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
934 else if (idx->shdr->sh_type != SHT_RELA
935 && idx->shdr->sh_type != SHT_REL)
936 {
937 /* There are some unknown sections in the group. */
938 _bfd_error_handler
939 /* xgettext:c-format */
940 (_("%pB: unknown type [%#x] section `%s' in group [%pA]"),
941 abfd,
942 idx->shdr->sh_type,
943 bfd_elf_string_from_elf_section (abfd,
944 (elf_elfheader (abfd)
945 ->e_shstrndx),
946 idx->shdr->sh_name),
947 shdr->bfd_section);
948 result = FALSE;
949 }
950 }
951 }
952
953 return result;
954 }
955
956 bfd_boolean
957 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
958 {
959 return elf_next_in_group (sec) != NULL;
960 }
961
962 const char *
963 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
964 {
965 if (elf_sec_group (sec) != NULL)
966 return elf_group_name (sec);
967 return NULL;
968 }
969
970 static char *
971 convert_debug_to_zdebug (bfd *abfd, const char *name)
972 {
973 unsigned int len = strlen (name);
974 char *new_name = bfd_alloc (abfd, len + 2);
975 if (new_name == NULL)
976 return NULL;
977 new_name[0] = '.';
978 new_name[1] = 'z';
979 memcpy (new_name + 2, name + 1, len);
980 return new_name;
981 }
982
983 static char *
984 convert_zdebug_to_debug (bfd *abfd, const char *name)
985 {
986 unsigned int len = strlen (name);
987 char *new_name = bfd_alloc (abfd, len);
988 if (new_name == NULL)
989 return NULL;
990 new_name[0] = '.';
991 memcpy (new_name + 1, name + 2, len - 1);
992 return new_name;
993 }
994
995 /* This a copy of lto_section defined in GCC (lto-streamer.h). */
996
997 struct lto_section
998 {
999 int16_t major_version;
1000 int16_t minor_version;
1001 unsigned char slim_object;
1002
1003 /* Flags is a private field that is not defined publicly. */
1004 uint16_t flags;
1005 };
1006
1007 /* Make a BFD section from an ELF section. We store a pointer to the
1008 BFD section in the bfd_section field of the header. */
1009
1010 bfd_boolean
1011 _bfd_elf_make_section_from_shdr (bfd *abfd,
1012 Elf_Internal_Shdr *hdr,
1013 const char *name,
1014 int shindex)
1015 {
1016 asection *newsect;
1017 flagword flags;
1018 const struct elf_backend_data *bed;
1019
1020 if (hdr->bfd_section != NULL)
1021 return TRUE;
1022
1023 newsect = bfd_make_section_anyway (abfd, name);
1024 if (newsect == NULL)
1025 return FALSE;
1026
1027 hdr->bfd_section = newsect;
1028 elf_section_data (newsect)->this_hdr = *hdr;
1029 elf_section_data (newsect)->this_idx = shindex;
1030
1031 /* Always use the real type/flags. */
1032 elf_section_type (newsect) = hdr->sh_type;
1033 elf_section_flags (newsect) = hdr->sh_flags;
1034
1035 newsect->filepos = hdr->sh_offset;
1036
1037 if (!bfd_set_section_vma (newsect, hdr->sh_addr)
1038 || !bfd_set_section_size (newsect, hdr->sh_size)
1039 || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign)))
1040 return FALSE;
1041
1042 flags = SEC_NO_FLAGS;
1043 if (hdr->sh_type != SHT_NOBITS)
1044 flags |= SEC_HAS_CONTENTS;
1045 if (hdr->sh_type == SHT_GROUP)
1046 flags |= SEC_GROUP;
1047 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1048 {
1049 flags |= SEC_ALLOC;
1050 if (hdr->sh_type != SHT_NOBITS)
1051 flags |= SEC_LOAD;
1052 }
1053 if ((hdr->sh_flags & SHF_WRITE) == 0)
1054 flags |= SEC_READONLY;
1055 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
1056 flags |= SEC_CODE;
1057 else if ((flags & SEC_LOAD) != 0)
1058 flags |= SEC_DATA;
1059 if ((hdr->sh_flags & SHF_MERGE) != 0)
1060 {
1061 flags |= SEC_MERGE;
1062 newsect->entsize = hdr->sh_entsize;
1063 }
1064 if ((hdr->sh_flags & SHF_STRINGS) != 0)
1065 flags |= SEC_STRINGS;
1066 if (hdr->sh_flags & SHF_GROUP)
1067 if (!setup_group (abfd, hdr, newsect))
1068 return FALSE;
1069 if ((hdr->sh_flags & SHF_TLS) != 0)
1070 flags |= SEC_THREAD_LOCAL;
1071 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
1072 flags |= SEC_EXCLUDE;
1073
1074 switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
1075 {
1076 /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
1077 but binutils as of 2019-07-23 did not set the EI_OSABI header
1078 byte. */
1079 case ELFOSABI_NONE:
1080 case ELFOSABI_GNU:
1081 case ELFOSABI_FREEBSD:
1082 if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
1083 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
1084 break;
1085 }
1086
1087 if ((flags & SEC_ALLOC) == 0)
1088 {
1089 /* The debugging sections appear to be recognized only by name,
1090 not any sort of flag. Their SEC_ALLOC bits are cleared. */
1091 if (name [0] == '.')
1092 {
1093 if (strncmp (name, ".debug", 6) == 0
1094 || strncmp (name, ".gnu.linkonce.wi.", 17) == 0
1095 || strncmp (name, ".zdebug", 7) == 0)
1096 flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
1097 else if (strncmp (name, GNU_BUILD_ATTRS_SECTION_NAME, 21) == 0
1098 || strncmp (name, ".note.gnu", 9) == 0)
1099 flags |= SEC_ELF_OCTETS;
1100 else if (strncmp (name, ".line", 5) == 0
1101 || strncmp (name, ".stab", 5) == 0
1102 || strcmp (name, ".gdb_index") == 0)
1103 flags |= SEC_DEBUGGING;
1104 }
1105 }
1106
1107 /* As a GNU extension, if the name begins with .gnu.linkonce, we
1108 only link a single copy of the section. This is used to support
1109 g++. g++ will emit each template expansion in its own section.
1110 The symbols will be defined as weak, so that multiple definitions
1111 are permitted. The GNU linker extension is to actually discard
1112 all but one of the sections. */
1113 if (CONST_STRNEQ (name, ".gnu.linkonce")
1114 && elf_next_in_group (newsect) == NULL)
1115 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1116
1117 if (!bfd_set_section_flags (newsect, flags))
1118 return FALSE;
1119
1120 bed = get_elf_backend_data (abfd);
1121 if (bed->elf_backend_section_flags)
1122 if (!bed->elf_backend_section_flags (hdr))
1123 return FALSE;
1124
1125 /* We do not parse the PT_NOTE segments as we are interested even in the
1126 separate debug info files which may have the segments offsets corrupted.
1127 PT_NOTEs from the core files are currently not parsed using BFD. */
1128 if (hdr->sh_type == SHT_NOTE)
1129 {
1130 bfd_byte *contents;
1131
1132 if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
1133 return FALSE;
1134
1135 elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1136 hdr->sh_offset, hdr->sh_addralign);
1137 free (contents);
1138 }
1139
1140 if ((newsect->flags & SEC_ALLOC) != 0)
1141 {
1142 Elf_Internal_Phdr *phdr;
1143 unsigned int i, nload;
1144
1145 /* Some ELF linkers produce binaries with all the program header
1146 p_paddr fields zero. If we have such a binary with more than
1147 one PT_LOAD header, then leave the section lma equal to vma
1148 so that we don't create sections with overlapping lma. */
1149 phdr = elf_tdata (abfd)->phdr;
1150 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1151 if (phdr->p_paddr != 0)
1152 break;
1153 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1154 ++nload;
1155 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1156 return TRUE;
1157
1158 phdr = elf_tdata (abfd)->phdr;
1159 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1160 {
1161 if (((phdr->p_type == PT_LOAD
1162 && (hdr->sh_flags & SHF_TLS) == 0)
1163 || phdr->p_type == PT_TLS)
1164 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1165 {
1166 if ((newsect->flags & SEC_LOAD) == 0)
1167 newsect->lma = (phdr->p_paddr
1168 + hdr->sh_addr - phdr->p_vaddr);
1169 else
1170 /* We used to use the same adjustment for SEC_LOAD
1171 sections, but that doesn't work if the segment
1172 is packed with code from multiple VMAs.
1173 Instead we calculate the section LMA based on
1174 the segment LMA. It is assumed that the
1175 segment will contain sections with contiguous
1176 LMAs, even if the VMAs are not. */
1177 newsect->lma = (phdr->p_paddr
1178 + hdr->sh_offset - phdr->p_offset);
1179
1180 /* With contiguous segments, we can't tell from file
1181 offsets whether a section with zero size should
1182 be placed at the end of one segment or the
1183 beginning of the next. Decide based on vaddr. */
1184 if (hdr->sh_addr >= phdr->p_vaddr
1185 && (hdr->sh_addr + hdr->sh_size
1186 <= phdr->p_vaddr + phdr->p_memsz))
1187 break;
1188 }
1189 }
1190 }
1191
1192 /* Compress/decompress DWARF debug sections with names: .debug_* and
1193 .zdebug_*, after the section flags is set. */
1194 if ((newsect->flags & SEC_DEBUGGING)
1195 && ((name[1] == 'd' && name[6] == '_')
1196 || (name[1] == 'z' && name[7] == '_')))
1197 {
1198 enum { nothing, compress, decompress } action = nothing;
1199 int compression_header_size;
1200 bfd_size_type uncompressed_size;
1201 unsigned int uncompressed_align_power;
1202 bfd_boolean compressed
1203 = bfd_is_section_compressed_with_header (abfd, newsect,
1204 &compression_header_size,
1205 &uncompressed_size,
1206 &uncompressed_align_power);
1207 if (compressed)
1208 {
1209 /* Compressed section. Check if we should decompress. */
1210 if ((abfd->flags & BFD_DECOMPRESS))
1211 action = decompress;
1212 }
1213
1214 /* Compress the uncompressed section or convert from/to .zdebug*
1215 section. Check if we should compress. */
1216 if (action == nothing)
1217 {
1218 if (newsect->size != 0
1219 && (abfd->flags & BFD_COMPRESS)
1220 && compression_header_size >= 0
1221 && uncompressed_size > 0
1222 && (!compressed
1223 || ((compression_header_size > 0)
1224 != ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
1225 action = compress;
1226 else
1227 return TRUE;
1228 }
1229
1230 if (action == compress)
1231 {
1232 if (!bfd_init_section_compress_status (abfd, newsect))
1233 {
1234 _bfd_error_handler
1235 /* xgettext:c-format */
1236 (_("%pB: unable to initialize compress status for section %s"),
1237 abfd, name);
1238 return FALSE;
1239 }
1240 }
1241 else
1242 {
1243 if (!bfd_init_section_decompress_status (abfd, newsect))
1244 {
1245 _bfd_error_handler
1246 /* xgettext:c-format */
1247 (_("%pB: unable to initialize decompress status for section %s"),
1248 abfd, name);
1249 return FALSE;
1250 }
1251 }
1252
1253 if (abfd->is_linker_input)
1254 {
1255 if (name[1] == 'z'
1256 && (action == decompress
1257 || (action == compress
1258 && (abfd->flags & BFD_COMPRESS_GABI) != 0)))
1259 {
1260 /* Convert section name from .zdebug_* to .debug_* so
1261 that linker will consider this section as a debug
1262 section. */
1263 char *new_name = convert_zdebug_to_debug (abfd, name);
1264 if (new_name == NULL)
1265 return FALSE;
1266 bfd_rename_section (newsect, new_name);
1267 }
1268 }
1269 else
1270 /* For objdump, don't rename the section. For objcopy, delay
1271 section rename to elf_fake_sections. */
1272 newsect->flags |= SEC_ELF_RENAME;
1273 }
1274
1275 /* GCC uses .gnu.lto_.lto.<some_hash> as a LTO bytecode information
1276 section. */
1277 const char *lto_section_name = ".gnu.lto_.lto.";
1278 if (strncmp (name, lto_section_name, strlen (lto_section_name)) == 0)
1279 {
1280 struct lto_section lsection;
1281 if (bfd_get_section_contents (abfd, newsect, &lsection, 0,
1282 sizeof (struct lto_section)))
1283 abfd->lto_slim_object = lsection.slim_object;
1284 }
1285
1286 return TRUE;
1287 }
1288
1289 const char *const bfd_elf_section_type_names[] =
1290 {
1291 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1292 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1293 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1294 };
1295
1296 /* ELF relocs are against symbols. If we are producing relocatable
1297 output, and the reloc is against an external symbol, and nothing
1298 has given us any additional addend, the resulting reloc will also
1299 be against the same symbol. In such a case, we don't want to
1300 change anything about the way the reloc is handled, since it will
1301 all be done at final link time. Rather than put special case code
1302 into bfd_perform_relocation, all the reloc types use this howto
1303 function. It just short circuits the reloc if producing
1304 relocatable output against an external symbol. */
1305
1306 bfd_reloc_status_type
1307 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1308 arelent *reloc_entry,
1309 asymbol *symbol,
1310 void *data ATTRIBUTE_UNUSED,
1311 asection *input_section,
1312 bfd *output_bfd,
1313 char **error_message ATTRIBUTE_UNUSED)
1314 {
1315 if (output_bfd != NULL
1316 && (symbol->flags & BSF_SECTION_SYM) == 0
1317 && (! reloc_entry->howto->partial_inplace
1318 || reloc_entry->addend == 0))
1319 {
1320 reloc_entry->address += input_section->output_offset;
1321 return bfd_reloc_ok;
1322 }
1323
1324 return bfd_reloc_continue;
1325 }
1326 \f
1327 /* Returns TRUE if section A matches section B.
1328 Names, addresses and links may be different, but everything else
1329 should be the same. */
1330
1331 static bfd_boolean
1332 section_match (const Elf_Internal_Shdr * a,
1333 const Elf_Internal_Shdr * b)
1334 {
1335 if (a->sh_type != b->sh_type
1336 || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1337 || a->sh_addralign != b->sh_addralign
1338 || a->sh_entsize != b->sh_entsize)
1339 return FALSE;
1340 if (a->sh_type == SHT_SYMTAB
1341 || a->sh_type == SHT_STRTAB)
1342 return TRUE;
1343 return a->sh_size == b->sh_size;
1344 }
1345
1346 /* Find a section in OBFD that has the same characteristics
1347 as IHEADER. Return the index of this section or SHN_UNDEF if
1348 none can be found. Check's section HINT first, as this is likely
1349 to be the correct section. */
1350
1351 static unsigned int
1352 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1353 const unsigned int hint)
1354 {
1355 Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1356 unsigned int i;
1357
1358 BFD_ASSERT (iheader != NULL);
1359
1360 /* See PR 20922 for a reproducer of the NULL test. */
1361 if (hint < elf_numsections (obfd)
1362 && oheaders[hint] != NULL
1363 && section_match (oheaders[hint], iheader))
1364 return hint;
1365
1366 for (i = 1; i < elf_numsections (obfd); i++)
1367 {
1368 Elf_Internal_Shdr * oheader = oheaders[i];
1369
1370 if (oheader == NULL)
1371 continue;
1372 if (section_match (oheader, iheader))
1373 /* FIXME: Do we care if there is a potential for
1374 multiple matches ? */
1375 return i;
1376 }
1377
1378 return SHN_UNDEF;
1379 }
1380
1381 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1382 Processor specific section, based upon a matching input section.
1383 Returns TRUE upon success, FALSE otherwise. */
1384
1385 static bfd_boolean
1386 copy_special_section_fields (const bfd *ibfd,
1387 bfd *obfd,
1388 const Elf_Internal_Shdr *iheader,
1389 Elf_Internal_Shdr *oheader,
1390 const unsigned int secnum)
1391 {
1392 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
1393 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1394 bfd_boolean changed = FALSE;
1395 unsigned int sh_link;
1396
1397 if (oheader->sh_type == SHT_NOBITS)
1398 {
1399 /* This is a feature for objcopy --only-keep-debug:
1400 When a section's type is changed to NOBITS, we preserve
1401 the sh_link and sh_info fields so that they can be
1402 matched up with the original.
1403
1404 Note: Strictly speaking these assignments are wrong.
1405 The sh_link and sh_info fields should point to the
1406 relevent sections in the output BFD, which may not be in
1407 the same location as they were in the input BFD. But
1408 the whole point of this action is to preserve the
1409 original values of the sh_link and sh_info fields, so
1410 that they can be matched up with the section headers in
1411 the original file. So strictly speaking we may be
1412 creating an invalid ELF file, but it is only for a file
1413 that just contains debug info and only for sections
1414 without any contents. */
1415 if (oheader->sh_link == 0)
1416 oheader->sh_link = iheader->sh_link;
1417 if (oheader->sh_info == 0)
1418 oheader->sh_info = iheader->sh_info;
1419 return TRUE;
1420 }
1421
1422 /* Allow the target a chance to decide how these fields should be set. */
1423 if (bed->elf_backend_copy_special_section_fields != NULL
1424 && bed->elf_backend_copy_special_section_fields
1425 (ibfd, obfd, iheader, oheader))
1426 return TRUE;
1427
1428 /* We have an iheader which might match oheader, and which has non-zero
1429 sh_info and/or sh_link fields. Attempt to follow those links and find
1430 the section in the output bfd which corresponds to the linked section
1431 in the input bfd. */
1432 if (iheader->sh_link != SHN_UNDEF)
1433 {
1434 /* See PR 20931 for a reproducer. */
1435 if (iheader->sh_link >= elf_numsections (ibfd))
1436 {
1437 _bfd_error_handler
1438 /* xgettext:c-format */
1439 (_("%pB: invalid sh_link field (%d) in section number %d"),
1440 ibfd, iheader->sh_link, secnum);
1441 return FALSE;
1442 }
1443
1444 sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1445 if (sh_link != SHN_UNDEF)
1446 {
1447 oheader->sh_link = sh_link;
1448 changed = TRUE;
1449 }
1450 else
1451 /* FIXME: Should we install iheader->sh_link
1452 if we could not find a match ? */
1453 _bfd_error_handler
1454 /* xgettext:c-format */
1455 (_("%pB: failed to find link section for section %d"), obfd, secnum);
1456 }
1457
1458 if (iheader->sh_info)
1459 {
1460 /* The sh_info field can hold arbitrary information, but if the
1461 SHF_LINK_INFO flag is set then it should be interpreted as a
1462 section index. */
1463 if (iheader->sh_flags & SHF_INFO_LINK)
1464 {
1465 sh_link = find_link (obfd, iheaders[iheader->sh_info],
1466 iheader->sh_info);
1467 if (sh_link != SHN_UNDEF)
1468 oheader->sh_flags |= SHF_INFO_LINK;
1469 }
1470 else
1471 /* No idea what it means - just copy it. */
1472 sh_link = iheader->sh_info;
1473
1474 if (sh_link != SHN_UNDEF)
1475 {
1476 oheader->sh_info = sh_link;
1477 changed = TRUE;
1478 }
1479 else
1480 _bfd_error_handler
1481 /* xgettext:c-format */
1482 (_("%pB: failed to find info section for section %d"), obfd, secnum);
1483 }
1484
1485 return changed;
1486 }
1487
1488 /* Copy the program header and other data from one object module to
1489 another. */
1490
1491 bfd_boolean
1492 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1493 {
1494 const Elf_Internal_Shdr **iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1495 Elf_Internal_Shdr **oheaders = elf_elfsections (obfd);
1496 const struct elf_backend_data *bed;
1497 unsigned int i;
1498
1499 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1500 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1501 return TRUE;
1502
1503 if (!elf_flags_init (obfd))
1504 {
1505 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1506 elf_flags_init (obfd) = TRUE;
1507 }
1508
1509 elf_gp (obfd) = elf_gp (ibfd);
1510
1511 /* Also copy the EI_OSABI field. */
1512 elf_elfheader (obfd)->e_ident[EI_OSABI] =
1513 elf_elfheader (ibfd)->e_ident[EI_OSABI];
1514
1515 /* If set, copy the EI_ABIVERSION field. */
1516 if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1517 elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1518 = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1519
1520 /* Copy object attributes. */
1521 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1522
1523 if (iheaders == NULL || oheaders == NULL)
1524 return TRUE;
1525
1526 bed = get_elf_backend_data (obfd);
1527
1528 /* Possibly copy other fields in the section header. */
1529 for (i = 1; i < elf_numsections (obfd); i++)
1530 {
1531 unsigned int j;
1532 Elf_Internal_Shdr * oheader = oheaders[i];
1533
1534 /* Ignore ordinary sections. SHT_NOBITS sections are considered however
1535 because of a special case need for generating separate debug info
1536 files. See below for more details. */
1537 if (oheader == NULL
1538 || (oheader->sh_type != SHT_NOBITS
1539 && oheader->sh_type < SHT_LOOS))
1540 continue;
1541
1542 /* Ignore empty sections, and sections whose
1543 fields have already been initialised. */
1544 if (oheader->sh_size == 0
1545 || (oheader->sh_info != 0 && oheader->sh_link != 0))
1546 continue;
1547
1548 /* Scan for the matching section in the input bfd.
1549 First we try for a direct mapping between the input and output sections. */
1550 for (j = 1; j < elf_numsections (ibfd); j++)
1551 {
1552 const Elf_Internal_Shdr * iheader = iheaders[j];
1553
1554 if (iheader == NULL)
1555 continue;
1556
1557 if (oheader->bfd_section != NULL
1558 && iheader->bfd_section != NULL
1559 && iheader->bfd_section->output_section != NULL
1560 && iheader->bfd_section->output_section == oheader->bfd_section)
1561 {
1562 /* We have found a connection from the input section to the
1563 output section. Attempt to copy the header fields. If
1564 this fails then do not try any further sections - there
1565 should only be a one-to-one mapping between input and output. */
1566 if (! copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1567 j = elf_numsections (ibfd);
1568 break;
1569 }
1570 }
1571
1572 if (j < elf_numsections (ibfd))
1573 continue;
1574
1575 /* That failed. So try to deduce the corresponding input section.
1576 Unfortunately we cannot compare names as the output string table
1577 is empty, so instead we check size, address and type. */
1578 for (j = 1; j < elf_numsections (ibfd); j++)
1579 {
1580 const Elf_Internal_Shdr * iheader = iheaders[j];
1581
1582 if (iheader == NULL)
1583 continue;
1584
1585 /* Try matching fields in the input section's header.
1586 Since --only-keep-debug turns all non-debug sections into
1587 SHT_NOBITS sections, the output SHT_NOBITS type matches any
1588 input type. */
1589 if ((oheader->sh_type == SHT_NOBITS
1590 || iheader->sh_type == oheader->sh_type)
1591 && (iheader->sh_flags & ~ SHF_INFO_LINK)
1592 == (oheader->sh_flags & ~ SHF_INFO_LINK)
1593 && iheader->sh_addralign == oheader->sh_addralign
1594 && iheader->sh_entsize == oheader->sh_entsize
1595 && iheader->sh_size == oheader->sh_size
1596 && iheader->sh_addr == oheader->sh_addr
1597 && (iheader->sh_info != oheader->sh_info
1598 || iheader->sh_link != oheader->sh_link))
1599 {
1600 if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1601 break;
1602 }
1603 }
1604
1605 if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1606 {
1607 /* Final attempt. Call the backend copy function
1608 with a NULL input section. */
1609 if (bed->elf_backend_copy_special_section_fields != NULL)
1610 (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd, NULL, oheader);
1611 }
1612 }
1613
1614 return TRUE;
1615 }
1616
1617 static const char *
1618 get_segment_type (unsigned int p_type)
1619 {
1620 const char *pt;
1621 switch (p_type)
1622 {
1623 case PT_NULL: pt = "NULL"; break;
1624 case PT_LOAD: pt = "LOAD"; break;
1625 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1626 case PT_INTERP: pt = "INTERP"; break;
1627 case PT_NOTE: pt = "NOTE"; break;
1628 case PT_SHLIB: pt = "SHLIB"; break;
1629 case PT_PHDR: pt = "PHDR"; break;
1630 case PT_TLS: pt = "TLS"; break;
1631 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1632 case PT_GNU_STACK: pt = "STACK"; break;
1633 case PT_GNU_RELRO: pt = "RELRO"; break;
1634 default: pt = NULL; break;
1635 }
1636 return pt;
1637 }
1638
1639 /* Print out the program headers. */
1640
1641 bfd_boolean
1642 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1643 {
1644 FILE *f = (FILE *) farg;
1645 Elf_Internal_Phdr *p;
1646 asection *s;
1647 bfd_byte *dynbuf = NULL;
1648
1649 p = elf_tdata (abfd)->phdr;
1650 if (p != NULL)
1651 {
1652 unsigned int i, c;
1653
1654 fprintf (f, _("\nProgram Header:\n"));
1655 c = elf_elfheader (abfd)->e_phnum;
1656 for (i = 0; i < c; i++, p++)
1657 {
1658 const char *pt = get_segment_type (p->p_type);
1659 char buf[20];
1660
1661 if (pt == NULL)
1662 {
1663 sprintf (buf, "0x%lx", p->p_type);
1664 pt = buf;
1665 }
1666 fprintf (f, "%8s off 0x", pt);
1667 bfd_fprintf_vma (abfd, f, p->p_offset);
1668 fprintf (f, " vaddr 0x");
1669 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1670 fprintf (f, " paddr 0x");
1671 bfd_fprintf_vma (abfd, f, p->p_paddr);
1672 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1673 fprintf (f, " filesz 0x");
1674 bfd_fprintf_vma (abfd, f, p->p_filesz);
1675 fprintf (f, " memsz 0x");
1676 bfd_fprintf_vma (abfd, f, p->p_memsz);
1677 fprintf (f, " flags %c%c%c",
1678 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1679 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1680 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1681 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1682 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1683 fprintf (f, "\n");
1684 }
1685 }
1686
1687 s = bfd_get_section_by_name (abfd, ".dynamic");
1688 if (s != NULL)
1689 {
1690 unsigned int elfsec;
1691 unsigned long shlink;
1692 bfd_byte *extdyn, *extdynend;
1693 size_t extdynsize;
1694 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1695
1696 fprintf (f, _("\nDynamic Section:\n"));
1697
1698 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1699 goto error_return;
1700
1701 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1702 if (elfsec == SHN_BAD)
1703 goto error_return;
1704 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1705
1706 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1707 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1708
1709 extdyn = dynbuf;
1710 /* PR 17512: file: 6f427532. */
1711 if (s->size < extdynsize)
1712 goto error_return;
1713 extdynend = extdyn + s->size;
1714 /* PR 17512: file: id:000006,sig:06,src:000000,op:flip4,pos:5664.
1715 Fix range check. */
1716 for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
1717 {
1718 Elf_Internal_Dyn dyn;
1719 const char *name = "";
1720 char ab[20];
1721 bfd_boolean stringp;
1722 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1723
1724 (*swap_dyn_in) (abfd, extdyn, &dyn);
1725
1726 if (dyn.d_tag == DT_NULL)
1727 break;
1728
1729 stringp = FALSE;
1730 switch (dyn.d_tag)
1731 {
1732 default:
1733 if (bed->elf_backend_get_target_dtag)
1734 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1735
1736 if (!strcmp (name, ""))
1737 {
1738 sprintf (ab, "%#" BFD_VMA_FMT "x", dyn.d_tag);
1739 name = ab;
1740 }
1741 break;
1742
1743 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1744 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1745 case DT_PLTGOT: name = "PLTGOT"; break;
1746 case DT_HASH: name = "HASH"; break;
1747 case DT_STRTAB: name = "STRTAB"; break;
1748 case DT_SYMTAB: name = "SYMTAB"; break;
1749 case DT_RELA: name = "RELA"; break;
1750 case DT_RELASZ: name = "RELASZ"; break;
1751 case DT_RELAENT: name = "RELAENT"; break;
1752 case DT_STRSZ: name = "STRSZ"; break;
1753 case DT_SYMENT: name = "SYMENT"; break;
1754 case DT_INIT: name = "INIT"; break;
1755 case DT_FINI: name = "FINI"; break;
1756 case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1757 case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1758 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1759 case DT_REL: name = "REL"; break;
1760 case DT_RELSZ: name = "RELSZ"; break;
1761 case DT_RELENT: name = "RELENT"; break;
1762 case DT_PLTREL: name = "PLTREL"; break;
1763 case DT_DEBUG: name = "DEBUG"; break;
1764 case DT_TEXTREL: name = "TEXTREL"; break;
1765 case DT_JMPREL: name = "JMPREL"; break;
1766 case DT_BIND_NOW: name = "BIND_NOW"; break;
1767 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1768 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1769 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1770 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1771 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1772 case DT_FLAGS: name = "FLAGS"; break;
1773 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1774 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1775 case DT_CHECKSUM: name = "CHECKSUM"; break;
1776 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1777 case DT_MOVEENT: name = "MOVEENT"; break;
1778 case DT_MOVESZ: name = "MOVESZ"; break;
1779 case DT_FEATURE: name = "FEATURE"; break;
1780 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1781 case DT_SYMINSZ: name = "SYMINSZ"; break;
1782 case DT_SYMINENT: name = "SYMINENT"; break;
1783 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1784 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1785 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1786 case DT_PLTPAD: name = "PLTPAD"; break;
1787 case DT_MOVETAB: name = "MOVETAB"; break;
1788 case DT_SYMINFO: name = "SYMINFO"; break;
1789 case DT_RELACOUNT: name = "RELACOUNT"; break;
1790 case DT_RELCOUNT: name = "RELCOUNT"; break;
1791 case DT_FLAGS_1: name = "FLAGS_1"; break;
1792 case DT_VERSYM: name = "VERSYM"; break;
1793 case DT_VERDEF: name = "VERDEF"; break;
1794 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1795 case DT_VERNEED: name = "VERNEED"; break;
1796 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1797 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1798 case DT_USED: name = "USED"; break;
1799 case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1800 case DT_GNU_HASH: name = "GNU_HASH"; break;
1801 }
1802
1803 fprintf (f, " %-20s ", name);
1804 if (! stringp)
1805 {
1806 fprintf (f, "0x");
1807 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1808 }
1809 else
1810 {
1811 const char *string;
1812 unsigned int tagv = dyn.d_un.d_val;
1813
1814 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1815 if (string == NULL)
1816 goto error_return;
1817 fprintf (f, "%s", string);
1818 }
1819 fprintf (f, "\n");
1820 }
1821
1822 free (dynbuf);
1823 dynbuf = NULL;
1824 }
1825
1826 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1827 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1828 {
1829 if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1830 return FALSE;
1831 }
1832
1833 if (elf_dynverdef (abfd) != 0)
1834 {
1835 Elf_Internal_Verdef *t;
1836
1837 fprintf (f, _("\nVersion definitions:\n"));
1838 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1839 {
1840 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1841 t->vd_flags, t->vd_hash,
1842 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1843 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1844 {
1845 Elf_Internal_Verdaux *a;
1846
1847 fprintf (f, "\t");
1848 for (a = t->vd_auxptr->vda_nextptr;
1849 a != NULL;
1850 a = a->vda_nextptr)
1851 fprintf (f, "%s ",
1852 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1853 fprintf (f, "\n");
1854 }
1855 }
1856 }
1857
1858 if (elf_dynverref (abfd) != 0)
1859 {
1860 Elf_Internal_Verneed *t;
1861
1862 fprintf (f, _("\nVersion References:\n"));
1863 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1864 {
1865 Elf_Internal_Vernaux *a;
1866
1867 fprintf (f, _(" required from %s:\n"),
1868 t->vn_filename ? t->vn_filename : "<corrupt>");
1869 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1870 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1871 a->vna_flags, a->vna_other,
1872 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1873 }
1874 }
1875
1876 return TRUE;
1877
1878 error_return:
1879 if (dynbuf != NULL)
1880 free (dynbuf);
1881 return FALSE;
1882 }
1883
1884 /* Get version string. */
1885
1886 const char *
1887 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
1888 bfd_boolean *hidden)
1889 {
1890 const char *version_string = NULL;
1891 if (elf_dynversym (abfd) != 0
1892 && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
1893 {
1894 unsigned int vernum = ((elf_symbol_type *) symbol)->version;
1895
1896 *hidden = (vernum & VERSYM_HIDDEN) != 0;
1897 vernum &= VERSYM_VERSION;
1898
1899 if (vernum == 0)
1900 version_string = "";
1901 else if (vernum == 1
1902 && (vernum > elf_tdata (abfd)->cverdefs
1903 || (elf_tdata (abfd)->verdef[0].vd_flags
1904 == VER_FLG_BASE)))
1905 version_string = "Base";
1906 else if (vernum <= elf_tdata (abfd)->cverdefs)
1907 version_string =
1908 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1909 else
1910 {
1911 Elf_Internal_Verneed *t;
1912
1913 version_string = _("<corrupt>");
1914 for (t = elf_tdata (abfd)->verref;
1915 t != NULL;
1916 t = t->vn_nextref)
1917 {
1918 Elf_Internal_Vernaux *a;
1919
1920 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1921 {
1922 if (a->vna_other == vernum)
1923 {
1924 version_string = a->vna_nodename;
1925 break;
1926 }
1927 }
1928 }
1929 }
1930 }
1931 return version_string;
1932 }
1933
1934 /* Display ELF-specific fields of a symbol. */
1935
1936 void
1937 bfd_elf_print_symbol (bfd *abfd,
1938 void *filep,
1939 asymbol *symbol,
1940 bfd_print_symbol_type how)
1941 {
1942 FILE *file = (FILE *) filep;
1943 switch (how)
1944 {
1945 case bfd_print_symbol_name:
1946 fprintf (file, "%s", symbol->name);
1947 break;
1948 case bfd_print_symbol_more:
1949 fprintf (file, "elf ");
1950 bfd_fprintf_vma (abfd, file, symbol->value);
1951 fprintf (file, " %x", symbol->flags);
1952 break;
1953 case bfd_print_symbol_all:
1954 {
1955 const char *section_name;
1956 const char *name = NULL;
1957 const struct elf_backend_data *bed;
1958 unsigned char st_other;
1959 bfd_vma val;
1960 const char *version_string;
1961 bfd_boolean hidden;
1962
1963 section_name = symbol->section ? symbol->section->name : "(*none*)";
1964
1965 bed = get_elf_backend_data (abfd);
1966 if (bed->elf_backend_print_symbol_all)
1967 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1968
1969 if (name == NULL)
1970 {
1971 name = symbol->name;
1972 bfd_print_symbol_vandf (abfd, file, symbol);
1973 }
1974
1975 fprintf (file, " %s\t", section_name);
1976 /* Print the "other" value for a symbol. For common symbols,
1977 we've already printed the size; now print the alignment.
1978 For other symbols, we have no specified alignment, and
1979 we've printed the address; now print the size. */
1980 if (symbol->section && bfd_is_com_section (symbol->section))
1981 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1982 else
1983 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1984 bfd_fprintf_vma (abfd, file, val);
1985
1986 /* If we have version information, print it. */
1987 version_string = _bfd_elf_get_symbol_version_string (abfd,
1988 symbol,
1989 &hidden);
1990 if (version_string)
1991 {
1992 if (!hidden)
1993 fprintf (file, " %-11s", version_string);
1994 else
1995 {
1996 int i;
1997
1998 fprintf (file, " (%s)", version_string);
1999 for (i = 10 - strlen (version_string); i > 0; --i)
2000 putc (' ', file);
2001 }
2002 }
2003
2004 /* If the st_other field is not zero, print it. */
2005 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2006
2007 switch (st_other)
2008 {
2009 case 0: break;
2010 case STV_INTERNAL: fprintf (file, " .internal"); break;
2011 case STV_HIDDEN: fprintf (file, " .hidden"); break;
2012 case STV_PROTECTED: fprintf (file, " .protected"); break;
2013 default:
2014 /* Some other non-defined flags are also present, so print
2015 everything hex. */
2016 fprintf (file, " 0x%02x", (unsigned int) st_other);
2017 }
2018
2019 fprintf (file, " %s", name);
2020 }
2021 break;
2022 }
2023 }
2024 \f
2025 /* ELF .o/exec file reading */
2026
2027 /* Create a new bfd section from an ELF section header. */
2028
2029 bfd_boolean
2030 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2031 {
2032 Elf_Internal_Shdr *hdr;
2033 Elf_Internal_Ehdr *ehdr;
2034 const struct elf_backend_data *bed;
2035 const char *name;
2036 bfd_boolean ret = TRUE;
2037 static bfd_boolean * sections_being_created = NULL;
2038 static bfd * sections_being_created_abfd = NULL;
2039 static unsigned int nesting = 0;
2040
2041 if (shindex >= elf_numsections (abfd))
2042 return FALSE;
2043
2044 if (++ nesting > 3)
2045 {
2046 /* PR17512: A corrupt ELF binary might contain a recursive group of
2047 sections, with each the string indices pointing to the next in the
2048 loop. Detect this here, by refusing to load a section that we are
2049 already in the process of loading. We only trigger this test if
2050 we have nested at least three sections deep as normal ELF binaries
2051 can expect to recurse at least once.
2052
2053 FIXME: It would be better if this array was attached to the bfd,
2054 rather than being held in a static pointer. */
2055
2056 if (sections_being_created_abfd != abfd)
2057 sections_being_created = NULL;
2058 if (sections_being_created == NULL)
2059 {
2060 size_t amt = elf_numsections (abfd) * sizeof (bfd_boolean);
2061 sections_being_created = (bfd_boolean *) bfd_zalloc (abfd, amt);
2062 if (sections_being_created == NULL)
2063 return FALSE;
2064 sections_being_created_abfd = abfd;
2065 }
2066 if (sections_being_created [shindex])
2067 {
2068 _bfd_error_handler
2069 (_("%pB: warning: loop in section dependencies detected"), abfd);
2070 return FALSE;
2071 }
2072 sections_being_created [shindex] = TRUE;
2073 }
2074
2075 hdr = elf_elfsections (abfd)[shindex];
2076 ehdr = elf_elfheader (abfd);
2077 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2078 hdr->sh_name);
2079 if (name == NULL)
2080 goto fail;
2081
2082 bed = get_elf_backend_data (abfd);
2083 switch (hdr->sh_type)
2084 {
2085 case SHT_NULL:
2086 /* Inactive section. Throw it away. */
2087 goto success;
2088
2089 case SHT_PROGBITS: /* Normal section with contents. */
2090 case SHT_NOBITS: /* .bss section. */
2091 case SHT_HASH: /* .hash section. */
2092 case SHT_NOTE: /* .note section. */
2093 case SHT_INIT_ARRAY: /* .init_array section. */
2094 case SHT_FINI_ARRAY: /* .fini_array section. */
2095 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
2096 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
2097 case SHT_GNU_HASH: /* .gnu.hash section. */
2098 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2099 goto success;
2100
2101 case SHT_DYNAMIC: /* Dynamic linking information. */
2102 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2103 goto fail;
2104
2105 if (hdr->sh_link > elf_numsections (abfd))
2106 {
2107 /* PR 10478: Accept Solaris binaries with a sh_link
2108 field set to SHN_BEFORE or SHN_AFTER. */
2109 switch (bfd_get_arch (abfd))
2110 {
2111 case bfd_arch_i386:
2112 case bfd_arch_sparc:
2113 if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */
2114 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */)
2115 break;
2116 /* Otherwise fall through. */
2117 default:
2118 goto fail;
2119 }
2120 }
2121 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2122 goto fail;
2123 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2124 {
2125 Elf_Internal_Shdr *dynsymhdr;
2126
2127 /* The shared libraries distributed with hpux11 have a bogus
2128 sh_link field for the ".dynamic" section. Find the
2129 string table for the ".dynsym" section instead. */
2130 if (elf_dynsymtab (abfd) != 0)
2131 {
2132 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2133 hdr->sh_link = dynsymhdr->sh_link;
2134 }
2135 else
2136 {
2137 unsigned int i, num_sec;
2138
2139 num_sec = elf_numsections (abfd);
2140 for (i = 1; i < num_sec; i++)
2141 {
2142 dynsymhdr = elf_elfsections (abfd)[i];
2143 if (dynsymhdr->sh_type == SHT_DYNSYM)
2144 {
2145 hdr->sh_link = dynsymhdr->sh_link;
2146 break;
2147 }
2148 }
2149 }
2150 }
2151 goto success;
2152
2153 case SHT_SYMTAB: /* A symbol table. */
2154 if (elf_onesymtab (abfd) == shindex)
2155 goto success;
2156
2157 if (hdr->sh_entsize != bed->s->sizeof_sym)
2158 goto fail;
2159
2160 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2161 {
2162 if (hdr->sh_size != 0)
2163 goto fail;
2164 /* Some assemblers erroneously set sh_info to one with a
2165 zero sh_size. ld sees this as a global symbol count
2166 of (unsigned) -1. Fix it here. */
2167 hdr->sh_info = 0;
2168 goto success;
2169 }
2170
2171 /* PR 18854: A binary might contain more than one symbol table.
2172 Unusual, but possible. Warn, but continue. */
2173 if (elf_onesymtab (abfd) != 0)
2174 {
2175 _bfd_error_handler
2176 /* xgettext:c-format */
2177 (_("%pB: warning: multiple symbol tables detected"
2178 " - ignoring the table in section %u"),
2179 abfd, shindex);
2180 goto success;
2181 }
2182 elf_onesymtab (abfd) = shindex;
2183 elf_symtab_hdr (abfd) = *hdr;
2184 elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2185 abfd->flags |= HAS_SYMS;
2186
2187 /* Sometimes a shared object will map in the symbol table. If
2188 SHF_ALLOC is set, and this is a shared object, then we also
2189 treat this section as a BFD section. We can not base the
2190 decision purely on SHF_ALLOC, because that flag is sometimes
2191 set in a relocatable object file, which would confuse the
2192 linker. */
2193 if ((hdr->sh_flags & SHF_ALLOC) != 0
2194 && (abfd->flags & DYNAMIC) != 0
2195 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2196 shindex))
2197 goto fail;
2198
2199 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2200 can't read symbols without that section loaded as well. It
2201 is most likely specified by the next section header. */
2202 {
2203 elf_section_list * entry;
2204 unsigned int i, num_sec;
2205
2206 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2207 if (entry->hdr.sh_link == shindex)
2208 goto success;
2209
2210 num_sec = elf_numsections (abfd);
2211 for (i = shindex + 1; i < num_sec; i++)
2212 {
2213 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2214
2215 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2216 && hdr2->sh_link == shindex)
2217 break;
2218 }
2219
2220 if (i == num_sec)
2221 for (i = 1; i < shindex; i++)
2222 {
2223 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2224
2225 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2226 && hdr2->sh_link == shindex)
2227 break;
2228 }
2229
2230 if (i != shindex)
2231 ret = bfd_section_from_shdr (abfd, i);
2232 /* else FIXME: we have failed to find the symbol table - should we issue an error ? */
2233 goto success;
2234 }
2235
2236 case SHT_DYNSYM: /* A dynamic symbol table. */
2237 if (elf_dynsymtab (abfd) == shindex)
2238 goto success;
2239
2240 if (hdr->sh_entsize != bed->s->sizeof_sym)
2241 goto fail;
2242
2243 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2244 {
2245 if (hdr->sh_size != 0)
2246 goto fail;
2247
2248 /* Some linkers erroneously set sh_info to one with a
2249 zero sh_size. ld sees this as a global symbol count
2250 of (unsigned) -1. Fix it here. */
2251 hdr->sh_info = 0;
2252 goto success;
2253 }
2254
2255 /* PR 18854: A binary might contain more than one dynamic symbol table.
2256 Unusual, but possible. Warn, but continue. */
2257 if (elf_dynsymtab (abfd) != 0)
2258 {
2259 _bfd_error_handler
2260 /* xgettext:c-format */
2261 (_("%pB: warning: multiple dynamic symbol tables detected"
2262 " - ignoring the table in section %u"),
2263 abfd, shindex);
2264 goto success;
2265 }
2266 elf_dynsymtab (abfd) = shindex;
2267 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2268 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2269 abfd->flags |= HAS_SYMS;
2270
2271 /* Besides being a symbol table, we also treat this as a regular
2272 section, so that objcopy can handle it. */
2273 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2274 goto success;
2275
2276 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections. */
2277 {
2278 elf_section_list * entry;
2279
2280 for (entry = elf_symtab_shndx_list (abfd); entry != NULL; entry = entry->next)
2281 if (entry->ndx == shindex)
2282 goto success;
2283
2284 entry = bfd_alloc (abfd, sizeof (*entry));
2285 if (entry == NULL)
2286 goto fail;
2287 entry->ndx = shindex;
2288 entry->hdr = * hdr;
2289 entry->next = elf_symtab_shndx_list (abfd);
2290 elf_symtab_shndx_list (abfd) = entry;
2291 elf_elfsections (abfd)[shindex] = & entry->hdr;
2292 goto success;
2293 }
2294
2295 case SHT_STRTAB: /* A string table. */
2296 if (hdr->bfd_section != NULL)
2297 goto success;
2298
2299 if (ehdr->e_shstrndx == shindex)
2300 {
2301 elf_tdata (abfd)->shstrtab_hdr = *hdr;
2302 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2303 goto success;
2304 }
2305
2306 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2307 {
2308 symtab_strtab:
2309 elf_tdata (abfd)->strtab_hdr = *hdr;
2310 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2311 goto success;
2312 }
2313
2314 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2315 {
2316 dynsymtab_strtab:
2317 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2318 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2319 elf_elfsections (abfd)[shindex] = hdr;
2320 /* We also treat this as a regular section, so that objcopy
2321 can handle it. */
2322 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2323 shindex);
2324 goto success;
2325 }
2326
2327 /* If the string table isn't one of the above, then treat it as a
2328 regular section. We need to scan all the headers to be sure,
2329 just in case this strtab section appeared before the above. */
2330 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2331 {
2332 unsigned int i, num_sec;
2333
2334 num_sec = elf_numsections (abfd);
2335 for (i = 1; i < num_sec; i++)
2336 {
2337 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2338 if (hdr2->sh_link == shindex)
2339 {
2340 /* Prevent endless recursion on broken objects. */
2341 if (i == shindex)
2342 goto fail;
2343 if (! bfd_section_from_shdr (abfd, i))
2344 goto fail;
2345 if (elf_onesymtab (abfd) == i)
2346 goto symtab_strtab;
2347 if (elf_dynsymtab (abfd) == i)
2348 goto dynsymtab_strtab;
2349 }
2350 }
2351 }
2352 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2353 goto success;
2354
2355 case SHT_REL:
2356 case SHT_RELA:
2357 /* *These* do a lot of work -- but build no sections! */
2358 {
2359 asection *target_sect;
2360 Elf_Internal_Shdr *hdr2, **p_hdr;
2361 unsigned int num_sec = elf_numsections (abfd);
2362 struct bfd_elf_section_data *esdt;
2363
2364 if (hdr->sh_entsize
2365 != (bfd_size_type) (hdr->sh_type == SHT_REL
2366 ? bed->s->sizeof_rel : bed->s->sizeof_rela))
2367 goto fail;
2368
2369 /* Check for a bogus link to avoid crashing. */
2370 if (hdr->sh_link >= num_sec)
2371 {
2372 _bfd_error_handler
2373 /* xgettext:c-format */
2374 (_("%pB: invalid link %u for reloc section %s (index %u)"),
2375 abfd, hdr->sh_link, name, shindex);
2376 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2377 shindex);
2378 goto success;
2379 }
2380
2381 /* For some incomprehensible reason Oracle distributes
2382 libraries for Solaris in which some of the objects have
2383 bogus sh_link fields. It would be nice if we could just
2384 reject them, but, unfortunately, some people need to use
2385 them. We scan through the section headers; if we find only
2386 one suitable symbol table, we clobber the sh_link to point
2387 to it. I hope this doesn't break anything.
2388
2389 Don't do it on executable nor shared library. */
2390 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
2391 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
2392 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
2393 {
2394 unsigned int scan;
2395 int found;
2396
2397 found = 0;
2398 for (scan = 1; scan < num_sec; scan++)
2399 {
2400 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
2401 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
2402 {
2403 if (found != 0)
2404 {
2405 found = 0;
2406 break;
2407 }
2408 found = scan;
2409 }
2410 }
2411 if (found != 0)
2412 hdr->sh_link = found;
2413 }
2414
2415 /* Get the symbol table. */
2416 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2417 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2418 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2419 goto fail;
2420
2421 /* If this is an alloc section in an executable or shared
2422 library, or the reloc section does not use the main symbol
2423 table we don't treat it as a reloc section. BFD can't
2424 adequately represent such a section, so at least for now,
2425 we don't try. We just present it as a normal section. We
2426 also can't use it as a reloc section if it points to the
2427 null section, an invalid section, another reloc section, or
2428 its sh_link points to the null section. */
2429 if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2430 && (hdr->sh_flags & SHF_ALLOC) != 0)
2431 || hdr->sh_link == SHN_UNDEF
2432 || hdr->sh_link != elf_onesymtab (abfd)
2433 || hdr->sh_info == SHN_UNDEF
2434 || hdr->sh_info >= num_sec
2435 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2436 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2437 {
2438 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2439 shindex);
2440 goto success;
2441 }
2442
2443 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2444 goto fail;
2445
2446 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2447 if (target_sect == NULL)
2448 goto fail;
2449
2450 esdt = elf_section_data (target_sect);
2451 if (hdr->sh_type == SHT_RELA)
2452 p_hdr = &esdt->rela.hdr;
2453 else
2454 p_hdr = &esdt->rel.hdr;
2455
2456 /* PR 17512: file: 0b4f81b7.
2457 Also see PR 24456, for a file which deliberately has two reloc
2458 sections. */
2459 if (*p_hdr != NULL)
2460 {
2461 if (bed->init_secondary_reloc_section == NULL
2462 || ! bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2463 {
2464 _bfd_error_handler
2465 /* xgettext:c-format */
2466 (_("%pB: warning: secondary relocation section '%s' for section %pA found - ignoring"),
2467 abfd, name, target_sect);
2468 }
2469 goto success;
2470 }
2471
2472 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2473 if (hdr2 == NULL)
2474 goto fail;
2475 *hdr2 = *hdr;
2476 *p_hdr = hdr2;
2477 elf_elfsections (abfd)[shindex] = hdr2;
2478 target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2479 * bed->s->int_rels_per_ext_rel);
2480 target_sect->flags |= SEC_RELOC;
2481 target_sect->relocation = NULL;
2482 target_sect->rel_filepos = hdr->sh_offset;
2483 /* In the section to which the relocations apply, mark whether
2484 its relocations are of the REL or RELA variety. */
2485 if (hdr->sh_size != 0)
2486 {
2487 if (hdr->sh_type == SHT_RELA)
2488 target_sect->use_rela_p = 1;
2489 }
2490 abfd->flags |= HAS_RELOC;
2491 goto success;
2492 }
2493
2494 case SHT_GNU_verdef:
2495 elf_dynverdef (abfd) = shindex;
2496 elf_tdata (abfd)->dynverdef_hdr = *hdr;
2497 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2498 goto success;
2499
2500 case SHT_GNU_versym:
2501 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
2502 goto fail;
2503
2504 elf_dynversym (abfd) = shindex;
2505 elf_tdata (abfd)->dynversym_hdr = *hdr;
2506 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2507 goto success;
2508
2509 case SHT_GNU_verneed:
2510 elf_dynverref (abfd) = shindex;
2511 elf_tdata (abfd)->dynverref_hdr = *hdr;
2512 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2513 goto success;
2514
2515 case SHT_SHLIB:
2516 goto success;
2517
2518 case SHT_GROUP:
2519 if (! IS_VALID_GROUP_SECTION_HEADER (hdr, GRP_ENTRY_SIZE))
2520 goto fail;
2521
2522 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2523 goto fail;
2524
2525 goto success;
2526
2527 default:
2528 /* Possibly an attributes section. */
2529 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
2530 || hdr->sh_type == bed->obj_attrs_section_type)
2531 {
2532 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2533 goto fail;
2534 _bfd_elf_parse_attributes (abfd, hdr);
2535 goto success;
2536 }
2537
2538 /* Check for any processor-specific section types. */
2539 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
2540 goto success;
2541
2542 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2543 {
2544 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2545 /* FIXME: How to properly handle allocated section reserved
2546 for applications? */
2547 _bfd_error_handler
2548 /* xgettext:c-format */
2549 (_("%pB: unknown type [%#x] section `%s'"),
2550 abfd, hdr->sh_type, name);
2551 else
2552 {
2553 /* Allow sections reserved for applications. */
2554 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2555 shindex);
2556 goto success;
2557 }
2558 }
2559 else if (hdr->sh_type >= SHT_LOPROC
2560 && hdr->sh_type <= SHT_HIPROC)
2561 /* FIXME: We should handle this section. */
2562 _bfd_error_handler
2563 /* xgettext:c-format */
2564 (_("%pB: unknown type [%#x] section `%s'"),
2565 abfd, hdr->sh_type, name);
2566 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
2567 {
2568 /* Unrecognised OS-specific sections. */
2569 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2570 /* SHF_OS_NONCONFORMING indicates that special knowledge is
2571 required to correctly process the section and the file should
2572 be rejected with an error message. */
2573 _bfd_error_handler
2574 /* xgettext:c-format */
2575 (_("%pB: unknown type [%#x] section `%s'"),
2576 abfd, hdr->sh_type, name);
2577 else
2578 {
2579 /* Otherwise it should be processed. */
2580 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2581 goto success;
2582 }
2583 }
2584 else
2585 /* FIXME: We should handle this section. */
2586 _bfd_error_handler
2587 /* xgettext:c-format */
2588 (_("%pB: unknown type [%#x] section `%s'"),
2589 abfd, hdr->sh_type, name);
2590
2591 goto fail;
2592 }
2593
2594 fail:
2595 ret = FALSE;
2596 success:
2597 if (sections_being_created && sections_being_created_abfd == abfd)
2598 sections_being_created [shindex] = FALSE;
2599 if (-- nesting == 0)
2600 {
2601 sections_being_created = NULL;
2602 sections_being_created_abfd = abfd;
2603 }
2604 return ret;
2605 }
2606
2607 /* Return the local symbol specified by ABFD, R_SYMNDX. */
2608
2609 Elf_Internal_Sym *
2610 bfd_sym_from_r_symndx (struct sym_cache *cache,
2611 bfd *abfd,
2612 unsigned long r_symndx)
2613 {
2614 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
2615
2616 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
2617 {
2618 Elf_Internal_Shdr *symtab_hdr;
2619 unsigned char esym[sizeof (Elf64_External_Sym)];
2620 Elf_External_Sym_Shndx eshndx;
2621
2622 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2623 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
2624 &cache->sym[ent], esym, &eshndx) == NULL)
2625 return NULL;
2626
2627 if (cache->abfd != abfd)
2628 {
2629 memset (cache->indx, -1, sizeof (cache->indx));
2630 cache->abfd = abfd;
2631 }
2632 cache->indx[ent] = r_symndx;
2633 }
2634
2635 return &cache->sym[ent];
2636 }
2637
2638 /* Given an ELF section number, retrieve the corresponding BFD
2639 section. */
2640
2641 asection *
2642 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
2643 {
2644 if (sec_index >= elf_numsections (abfd))
2645 return NULL;
2646 return elf_elfsections (abfd)[sec_index]->bfd_section;
2647 }
2648
2649 static const struct bfd_elf_special_section special_sections_b[] =
2650 {
2651 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2652 { NULL, 0, 0, 0, 0 }
2653 };
2654
2655 static const struct bfd_elf_special_section special_sections_c[] =
2656 {
2657 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
2658 { STRING_COMMA_LEN (".ctf"), 0, SHT_PROGBITS, 0 },
2659 { NULL, 0, 0, 0, 0 }
2660 };
2661
2662 static const struct bfd_elf_special_section special_sections_d[] =
2663 {
2664 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2665 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2666 /* There are more DWARF sections than these, but they needn't be added here
2667 unless you have to cope with broken compilers that don't emit section
2668 attributes or you want to help the user writing assembler. */
2669 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
2670 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
2671 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
2672 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
2673 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
2674 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
2675 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
2676 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
2677 { NULL, 0, 0, 0, 0 }
2678 };
2679
2680 static const struct bfd_elf_special_section special_sections_f[] =
2681 {
2682 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2683 { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2684 { NULL, 0 , 0, 0, 0 }
2685 };
2686
2687 static const struct bfd_elf_special_section special_sections_g[] =
2688 {
2689 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2690 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE },
2691 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2692 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
2693 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
2694 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
2695 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2696 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
2697 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
2698 { NULL, 0, 0, 0, 0 }
2699 };
2700
2701 static const struct bfd_elf_special_section special_sections_h[] =
2702 {
2703 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
2704 { NULL, 0, 0, 0, 0 }
2705 };
2706
2707 static const struct bfd_elf_special_section special_sections_i[] =
2708 {
2709 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2710 { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2711 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
2712 { NULL, 0, 0, 0, 0 }
2713 };
2714
2715 static const struct bfd_elf_special_section special_sections_l[] =
2716 {
2717 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2718 { NULL, 0, 0, 0, 0 }
2719 };
2720
2721 static const struct bfd_elf_special_section special_sections_n[] =
2722 {
2723 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2724 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
2725 { NULL, 0, 0, 0, 0 }
2726 };
2727
2728 static const struct bfd_elf_special_section special_sections_p[] =
2729 {
2730 { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2731 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2732 { NULL, 0, 0, 0, 0 }
2733 };
2734
2735 static const struct bfd_elf_special_section special_sections_r[] =
2736 {
2737 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2738 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2739 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
2740 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
2741 { NULL, 0, 0, 0, 0 }
2742 };
2743
2744 static const struct bfd_elf_special_section special_sections_s[] =
2745 {
2746 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2747 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
2748 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
2749 /* See struct bfd_elf_special_section declaration for the semantics of
2750 this special case where .prefix_length != strlen (.prefix). */
2751 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
2752 { NULL, 0, 0, 0, 0 }
2753 };
2754
2755 static const struct bfd_elf_special_section special_sections_t[] =
2756 {
2757 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2758 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2759 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2760 { NULL, 0, 0, 0, 0 }
2761 };
2762
2763 static const struct bfd_elf_special_section special_sections_z[] =
2764 {
2765 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
2766 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
2767 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
2768 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2769 { NULL, 0, 0, 0, 0 }
2770 };
2771
2772 static const struct bfd_elf_special_section * const special_sections[] =
2773 {
2774 special_sections_b, /* 'b' */
2775 special_sections_c, /* 'c' */
2776 special_sections_d, /* 'd' */
2777 NULL, /* 'e' */
2778 special_sections_f, /* 'f' */
2779 special_sections_g, /* 'g' */
2780 special_sections_h, /* 'h' */
2781 special_sections_i, /* 'i' */
2782 NULL, /* 'j' */
2783 NULL, /* 'k' */
2784 special_sections_l, /* 'l' */
2785 NULL, /* 'm' */
2786 special_sections_n, /* 'n' */
2787 NULL, /* 'o' */
2788 special_sections_p, /* 'p' */
2789 NULL, /* 'q' */
2790 special_sections_r, /* 'r' */
2791 special_sections_s, /* 's' */
2792 special_sections_t, /* 't' */
2793 NULL, /* 'u' */
2794 NULL, /* 'v' */
2795 NULL, /* 'w' */
2796 NULL, /* 'x' */
2797 NULL, /* 'y' */
2798 special_sections_z /* 'z' */
2799 };
2800
2801 const struct bfd_elf_special_section *
2802 _bfd_elf_get_special_section (const char *name,
2803 const struct bfd_elf_special_section *spec,
2804 unsigned int rela)
2805 {
2806 int i;
2807 int len;
2808
2809 len = strlen (name);
2810
2811 for (i = 0; spec[i].prefix != NULL; i++)
2812 {
2813 int suffix_len;
2814 int prefix_len = spec[i].prefix_length;
2815
2816 if (len < prefix_len)
2817 continue;
2818 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2819 continue;
2820
2821 suffix_len = spec[i].suffix_length;
2822 if (suffix_len <= 0)
2823 {
2824 if (name[prefix_len] != 0)
2825 {
2826 if (suffix_len == 0)
2827 continue;
2828 if (name[prefix_len] != '.'
2829 && (suffix_len == -2
2830 || (rela && spec[i].type == SHT_REL)))
2831 continue;
2832 }
2833 }
2834 else
2835 {
2836 if (len < prefix_len + suffix_len)
2837 continue;
2838 if (memcmp (name + len - suffix_len,
2839 spec[i].prefix + prefix_len,
2840 suffix_len) != 0)
2841 continue;
2842 }
2843 return &spec[i];
2844 }
2845
2846 return NULL;
2847 }
2848
2849 const struct bfd_elf_special_section *
2850 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2851 {
2852 int i;
2853 const struct bfd_elf_special_section *spec;
2854 const struct elf_backend_data *bed;
2855
2856 /* See if this is one of the special sections. */
2857 if (sec->name == NULL)
2858 return NULL;
2859
2860 bed = get_elf_backend_data (abfd);
2861 spec = bed->special_sections;
2862 if (spec)
2863 {
2864 spec = _bfd_elf_get_special_section (sec->name,
2865 bed->special_sections,
2866 sec->use_rela_p);
2867 if (spec != NULL)
2868 return spec;
2869 }
2870
2871 if (sec->name[0] != '.')
2872 return NULL;
2873
2874 i = sec->name[1] - 'b';
2875 if (i < 0 || i > 'z' - 'b')
2876 return NULL;
2877
2878 spec = special_sections[i];
2879
2880 if (spec == NULL)
2881 return NULL;
2882
2883 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2884 }
2885
2886 bfd_boolean
2887 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2888 {
2889 struct bfd_elf_section_data *sdata;
2890 const struct elf_backend_data *bed;
2891 const struct bfd_elf_special_section *ssect;
2892
2893 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2894 if (sdata == NULL)
2895 {
2896 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
2897 sizeof (*sdata));
2898 if (sdata == NULL)
2899 return FALSE;
2900 sec->used_by_bfd = sdata;
2901 }
2902
2903 /* Indicate whether or not this section should use RELA relocations. */
2904 bed = get_elf_backend_data (abfd);
2905 sec->use_rela_p = bed->default_use_rela_p;
2906
2907 /* Set up ELF section type and flags for newly created sections, if
2908 there is an ABI mandated section. */
2909 ssect = (*bed->get_sec_type_attr) (abfd, sec);
2910 if (ssect != NULL)
2911 {
2912 elf_section_type (sec) = ssect->type;
2913 elf_section_flags (sec) = ssect->attr;
2914 }
2915
2916 return _bfd_generic_new_section_hook (abfd, sec);
2917 }
2918
2919 /* Create a new bfd section from an ELF program header.
2920
2921 Since program segments have no names, we generate a synthetic name
2922 of the form segment<NUM>, where NUM is generally the index in the
2923 program header table. For segments that are split (see below) we
2924 generate the names segment<NUM>a and segment<NUM>b.
2925
2926 Note that some program segments may have a file size that is different than
2927 (less than) the memory size. All this means is that at execution the
2928 system must allocate the amount of memory specified by the memory size,
2929 but only initialize it with the first "file size" bytes read from the
2930 file. This would occur for example, with program segments consisting
2931 of combined data+bss.
2932
2933 To handle the above situation, this routine generates TWO bfd sections
2934 for the single program segment. The first has the length specified by
2935 the file size of the segment, and the second has the length specified
2936 by the difference between the two sizes. In effect, the segment is split
2937 into its initialized and uninitialized parts.
2938
2939 */
2940
2941 bfd_boolean
2942 _bfd_elf_make_section_from_phdr (bfd *abfd,
2943 Elf_Internal_Phdr *hdr,
2944 int hdr_index,
2945 const char *type_name)
2946 {
2947 asection *newsect;
2948 char *name;
2949 char namebuf[64];
2950 size_t len;
2951 int split;
2952
2953 split = ((hdr->p_memsz > 0)
2954 && (hdr->p_filesz > 0)
2955 && (hdr->p_memsz > hdr->p_filesz));
2956
2957 if (hdr->p_filesz > 0)
2958 {
2959 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
2960 len = strlen (namebuf) + 1;
2961 name = (char *) bfd_alloc (abfd, len);
2962 if (!name)
2963 return FALSE;
2964 memcpy (name, namebuf, len);
2965 newsect = bfd_make_section (abfd, name);
2966 if (newsect == NULL)
2967 return FALSE;
2968 newsect->vma = hdr->p_vaddr;
2969 newsect->lma = hdr->p_paddr;
2970 newsect->size = hdr->p_filesz;
2971 newsect->filepos = hdr->p_offset;
2972 newsect->flags |= SEC_HAS_CONTENTS;
2973 newsect->alignment_power = bfd_log2 (hdr->p_align);
2974 if (hdr->p_type == PT_LOAD)
2975 {
2976 newsect->flags |= SEC_ALLOC;
2977 newsect->flags |= SEC_LOAD;
2978 if (hdr->p_flags & PF_X)
2979 {
2980 /* FIXME: all we known is that it has execute PERMISSION,
2981 may be data. */
2982 newsect->flags |= SEC_CODE;
2983 }
2984 }
2985 if (!(hdr->p_flags & PF_W))
2986 {
2987 newsect->flags |= SEC_READONLY;
2988 }
2989 }
2990
2991 if (hdr->p_memsz > hdr->p_filesz)
2992 {
2993 bfd_vma align;
2994
2995 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
2996 len = strlen (namebuf) + 1;
2997 name = (char *) bfd_alloc (abfd, len);
2998 if (!name)
2999 return FALSE;
3000 memcpy (name, namebuf, len);
3001 newsect = bfd_make_section (abfd, name);
3002 if (newsect == NULL)
3003 return FALSE;
3004 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
3005 newsect->lma = hdr->p_paddr + hdr->p_filesz;
3006 newsect->size = hdr->p_memsz - hdr->p_filesz;
3007 newsect->filepos = hdr->p_offset + hdr->p_filesz;
3008 align = newsect->vma & -newsect->vma;
3009 if (align == 0 || align > hdr->p_align)
3010 align = hdr->p_align;
3011 newsect->alignment_power = bfd_log2 (align);
3012 if (hdr->p_type == PT_LOAD)
3013 {
3014 /* Hack for gdb. Segments that have not been modified do
3015 not have their contents written to a core file, on the
3016 assumption that a debugger can find the contents in the
3017 executable. We flag this case by setting the fake
3018 section size to zero. Note that "real" bss sections will
3019 always have their contents dumped to the core file. */
3020 if (bfd_get_format (abfd) == bfd_core)
3021 newsect->size = 0;
3022 newsect->flags |= SEC_ALLOC;
3023 if (hdr->p_flags & PF_X)
3024 newsect->flags |= SEC_CODE;
3025 }
3026 if (!(hdr->p_flags & PF_W))
3027 newsect->flags |= SEC_READONLY;
3028 }
3029
3030 return TRUE;
3031 }
3032
3033 static bfd_boolean
3034 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3035 {
3036 /* The return value is ignored. Build-ids are considered optional. */
3037 if (templ->xvec->flavour == bfd_target_elf_flavour)
3038 return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3039 (templ, offset);
3040 return FALSE;
3041 }
3042
3043 bfd_boolean
3044 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3045 {
3046 const struct elf_backend_data *bed;
3047
3048 switch (hdr->p_type)
3049 {
3050 case PT_NULL:
3051 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3052
3053 case PT_LOAD:
3054 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3055 return FALSE;
3056 if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3057 _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3058 return TRUE;
3059
3060 case PT_DYNAMIC:
3061 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3062
3063 case PT_INTERP:
3064 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3065
3066 case PT_NOTE:
3067 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3068 return FALSE;
3069 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3070 hdr->p_align))
3071 return FALSE;
3072 return TRUE;
3073
3074 case PT_SHLIB:
3075 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3076
3077 case PT_PHDR:
3078 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3079
3080 case PT_GNU_EH_FRAME:
3081 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3082 "eh_frame_hdr");
3083
3084 case PT_GNU_STACK:
3085 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3086
3087 case PT_GNU_RELRO:
3088 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3089
3090 default:
3091 /* Check for any processor-specific program segment types. */
3092 bed = get_elf_backend_data (abfd);
3093 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3094 }
3095 }
3096
3097 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3098 REL or RELA. */
3099
3100 Elf_Internal_Shdr *
3101 _bfd_elf_single_rel_hdr (asection *sec)
3102 {
3103 if (elf_section_data (sec)->rel.hdr)
3104 {
3105 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3106 return elf_section_data (sec)->rel.hdr;
3107 }
3108 else
3109 return elf_section_data (sec)->rela.hdr;
3110 }
3111
3112 static bfd_boolean
3113 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3114 Elf_Internal_Shdr *rel_hdr,
3115 const char *sec_name,
3116 bfd_boolean use_rela_p)
3117 {
3118 char *name = (char *) bfd_alloc (abfd,
3119 sizeof ".rela" + strlen (sec_name));
3120 if (name == NULL)
3121 return FALSE;
3122
3123 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3124 rel_hdr->sh_name =
3125 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3126 FALSE);
3127 if (rel_hdr->sh_name == (unsigned int) -1)
3128 return FALSE;
3129
3130 return TRUE;
3131 }
3132
3133 /* Allocate and initialize a section-header for a new reloc section,
3134 containing relocations against ASECT. It is stored in RELDATA. If
3135 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3136 relocations. */
3137
3138 static bfd_boolean
3139 _bfd_elf_init_reloc_shdr (bfd *abfd,
3140 struct bfd_elf_section_reloc_data *reldata,
3141 const char *sec_name,
3142 bfd_boolean use_rela_p,
3143 bfd_boolean delay_st_name_p)
3144 {
3145 Elf_Internal_Shdr *rel_hdr;
3146 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3147
3148 BFD_ASSERT (reldata->hdr == NULL);
3149 rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3150 reldata->hdr = rel_hdr;
3151
3152 if (delay_st_name_p)
3153 rel_hdr->sh_name = (unsigned int) -1;
3154 else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3155 use_rela_p))
3156 return FALSE;
3157 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3158 rel_hdr->sh_entsize = (use_rela_p
3159 ? bed->s->sizeof_rela
3160 : bed->s->sizeof_rel);
3161 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3162 rel_hdr->sh_flags = 0;
3163 rel_hdr->sh_addr = 0;
3164 rel_hdr->sh_size = 0;
3165 rel_hdr->sh_offset = 0;
3166
3167 return TRUE;
3168 }
3169
3170 /* Return the default section type based on the passed in section flags. */
3171
3172 int
3173 bfd_elf_get_default_section_type (flagword flags)
3174 {
3175 if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3176 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3177 return SHT_NOBITS;
3178 return SHT_PROGBITS;
3179 }
3180
3181 struct fake_section_arg
3182 {
3183 struct bfd_link_info *link_info;
3184 bfd_boolean failed;
3185 };
3186
3187 /* Set up an ELF internal section header for a section. */
3188
3189 static void
3190 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3191 {
3192 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3193 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3194 struct bfd_elf_section_data *esd = elf_section_data (asect);
3195 Elf_Internal_Shdr *this_hdr;
3196 unsigned int sh_type;
3197 const char *name = asect->name;
3198 bfd_boolean delay_st_name_p = FALSE;
3199 bfd_vma mask;
3200
3201 if (arg->failed)
3202 {
3203 /* We already failed; just get out of the bfd_map_over_sections
3204 loop. */
3205 return;
3206 }
3207
3208 this_hdr = &esd->this_hdr;
3209
3210 if (arg->link_info)
3211 {
3212 /* ld: compress DWARF debug sections with names: .debug_*. */
3213 if ((arg->link_info->compress_debug & COMPRESS_DEBUG)
3214 && (asect->flags & SEC_DEBUGGING)
3215 && name[1] == 'd'
3216 && name[6] == '_')
3217 {
3218 /* Set SEC_ELF_COMPRESS to indicate this section should be
3219 compressed. */
3220 asect->flags |= SEC_ELF_COMPRESS;
3221
3222 /* If this section will be compressed, delay adding section
3223 name to section name section after it is compressed in
3224 _bfd_elf_assign_file_positions_for_non_load. */
3225 delay_st_name_p = TRUE;
3226 }
3227 }
3228 else if ((asect->flags & SEC_ELF_RENAME))
3229 {
3230 /* objcopy: rename output DWARF debug section. */
3231 if ((abfd->flags & (BFD_DECOMPRESS | BFD_COMPRESS_GABI)))
3232 {
3233 /* When we decompress or compress with SHF_COMPRESSED,
3234 convert section name from .zdebug_* to .debug_* if
3235 needed. */
3236 if (name[1] == 'z')
3237 {
3238 char *new_name = convert_zdebug_to_debug (abfd, name);
3239 if (new_name == NULL)
3240 {
3241 arg->failed = TRUE;
3242 return;
3243 }
3244 name = new_name;
3245 }
3246 }
3247 else if (asect->compress_status == COMPRESS_SECTION_DONE)
3248 {
3249 /* PR binutils/18087: Compression does not always make a
3250 section smaller. So only rename the section when
3251 compression has actually taken place. If input section
3252 name is .zdebug_*, we should never compress it again. */
3253 char *new_name = convert_debug_to_zdebug (abfd, name);
3254 if (new_name == NULL)
3255 {
3256 arg->failed = TRUE;
3257 return;
3258 }
3259 BFD_ASSERT (name[1] != 'z');
3260 name = new_name;
3261 }
3262 }
3263
3264 if (delay_st_name_p)
3265 this_hdr->sh_name = (unsigned int) -1;
3266 else
3267 {
3268 this_hdr->sh_name
3269 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3270 name, FALSE);
3271 if (this_hdr->sh_name == (unsigned int) -1)
3272 {
3273 arg->failed = TRUE;
3274 return;
3275 }
3276 }
3277
3278 /* Don't clear sh_flags. Assembler may set additional bits. */
3279
3280 if ((asect->flags & SEC_ALLOC) != 0
3281 || asect->user_set_vma)
3282 this_hdr->sh_addr = asect->vma;
3283 else
3284 this_hdr->sh_addr = 0;
3285
3286 this_hdr->sh_offset = 0;
3287 this_hdr->sh_size = asect->size;
3288 this_hdr->sh_link = 0;
3289 /* PR 17512: file: 0eb809fe, 8b0535ee. */
3290 if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3291 {
3292 _bfd_error_handler
3293 /* xgettext:c-format */
3294 (_("%pB: error: alignment power %d of section `%pA' is too big"),
3295 abfd, asect->alignment_power, asect);
3296 arg->failed = TRUE;
3297 return;
3298 }
3299 /* Set sh_addralign to the highest power of two given by alignment
3300 consistent with the section VMA. Linker scripts can force VMA. */
3301 mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3302 this_hdr->sh_addralign = mask & -mask;
3303 /* The sh_entsize and sh_info fields may have been set already by
3304 copy_private_section_data. */
3305
3306 this_hdr->bfd_section = asect;
3307 this_hdr->contents = NULL;
3308
3309 /* If the section type is unspecified, we set it based on
3310 asect->flags. */
3311 if ((asect->flags & SEC_GROUP) != 0)
3312 sh_type = SHT_GROUP;
3313 else
3314 sh_type = bfd_elf_get_default_section_type (asect->flags);
3315
3316 if (this_hdr->sh_type == SHT_NULL)
3317 this_hdr->sh_type = sh_type;
3318 else if (this_hdr->sh_type == SHT_NOBITS
3319 && sh_type == SHT_PROGBITS
3320 && (asect->flags & SEC_ALLOC) != 0)
3321 {
3322 /* Warn if we are changing a NOBITS section to PROGBITS, but
3323 allow the link to proceed. This can happen when users link
3324 non-bss input sections to bss output sections, or emit data
3325 to a bss output section via a linker script. */
3326 _bfd_error_handler
3327 (_("warning: section `%pA' type changed to PROGBITS"), asect);
3328 this_hdr->sh_type = sh_type;
3329 }
3330
3331 switch (this_hdr->sh_type)
3332 {
3333 default:
3334 break;
3335
3336 case SHT_STRTAB:
3337 case SHT_NOTE:
3338 case SHT_NOBITS:
3339 case SHT_PROGBITS:
3340 break;
3341
3342 case SHT_INIT_ARRAY:
3343 case SHT_FINI_ARRAY:
3344 case SHT_PREINIT_ARRAY:
3345 this_hdr->sh_entsize = bed->s->arch_size / 8;
3346 break;
3347
3348 case SHT_HASH:
3349 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3350 break;
3351
3352 case SHT_DYNSYM:
3353 this_hdr->sh_entsize = bed->s->sizeof_sym;
3354 break;
3355
3356 case SHT_DYNAMIC:
3357 this_hdr->sh_entsize = bed->s->sizeof_dyn;
3358 break;
3359
3360 case SHT_RELA:
3361 if (get_elf_backend_data (abfd)->may_use_rela_p)
3362 this_hdr->sh_entsize = bed->s->sizeof_rela;
3363 break;
3364
3365 case SHT_REL:
3366 if (get_elf_backend_data (abfd)->may_use_rel_p)
3367 this_hdr->sh_entsize = bed->s->sizeof_rel;
3368 break;
3369
3370 case SHT_GNU_versym:
3371 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3372 break;
3373
3374 case SHT_GNU_verdef:
3375 this_hdr->sh_entsize = 0;
3376 /* objcopy or strip will copy over sh_info, but may not set
3377 cverdefs. The linker will set cverdefs, but sh_info will be
3378 zero. */
3379 if (this_hdr->sh_info == 0)
3380 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3381 else
3382 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3383 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3384 break;
3385
3386 case SHT_GNU_verneed:
3387 this_hdr->sh_entsize = 0;
3388 /* objcopy or strip will copy over sh_info, but may not set
3389 cverrefs. The linker will set cverrefs, but sh_info will be
3390 zero. */
3391 if (this_hdr->sh_info == 0)
3392 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3393 else
3394 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3395 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3396 break;
3397
3398 case SHT_GROUP:
3399 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3400 break;
3401
3402 case SHT_GNU_HASH:
3403 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3404 break;
3405 }
3406
3407 if ((asect->flags & SEC_ALLOC) != 0)
3408 this_hdr->sh_flags |= SHF_ALLOC;
3409 if ((asect->flags & SEC_READONLY) == 0)
3410 this_hdr->sh_flags |= SHF_WRITE;
3411 if ((asect->flags & SEC_CODE) != 0)
3412 this_hdr->sh_flags |= SHF_EXECINSTR;
3413 if ((asect->flags & SEC_MERGE) != 0)
3414 {
3415 this_hdr->sh_flags |= SHF_MERGE;
3416 this_hdr->sh_entsize = asect->entsize;
3417 }
3418 if ((asect->flags & SEC_STRINGS) != 0)
3419 this_hdr->sh_flags |= SHF_STRINGS;
3420 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3421 this_hdr->sh_flags |= SHF_GROUP;
3422 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3423 {
3424 this_hdr->sh_flags |= SHF_TLS;
3425 if (asect->size == 0
3426 && (asect->flags & SEC_HAS_CONTENTS) == 0)
3427 {
3428 struct bfd_link_order *o = asect->map_tail.link_order;
3429
3430 this_hdr->sh_size = 0;
3431 if (o != NULL)
3432 {
3433 this_hdr->sh_size = o->offset + o->size;
3434 if (this_hdr->sh_size != 0)
3435 this_hdr->sh_type = SHT_NOBITS;
3436 }
3437 }
3438 }
3439 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3440 this_hdr->sh_flags |= SHF_EXCLUDE;
3441
3442 /* If the section has relocs, set up a section header for the
3443 SHT_REL[A] section. If two relocation sections are required for
3444 this section, it is up to the processor-specific back-end to
3445 create the other. */
3446 if ((asect->flags & SEC_RELOC) != 0)
3447 {
3448 /* When doing a relocatable link, create both REL and RELA sections if
3449 needed. */
3450 if (arg->link_info
3451 /* Do the normal setup if we wouldn't create any sections here. */
3452 && esd->rel.count + esd->rela.count > 0
3453 && (bfd_link_relocatable (arg->link_info)
3454 || arg->link_info->emitrelocations))
3455 {
3456 if (esd->rel.count && esd->rel.hdr == NULL
3457 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3458 FALSE, delay_st_name_p))
3459 {
3460 arg->failed = TRUE;
3461 return;
3462 }
3463 if (esd->rela.count && esd->rela.hdr == NULL
3464 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3465 TRUE, delay_st_name_p))
3466 {
3467 arg->failed = TRUE;
3468 return;
3469 }
3470 }
3471 else if (!_bfd_elf_init_reloc_shdr (abfd,
3472 (asect->use_rela_p
3473 ? &esd->rela : &esd->rel),
3474 name,
3475 asect->use_rela_p,
3476 delay_st_name_p))
3477 {
3478 arg->failed = TRUE;
3479 return;
3480 }
3481 }
3482
3483 /* Check for processor-specific section types. */
3484 sh_type = this_hdr->sh_type;
3485 if (bed->elf_backend_fake_sections
3486 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3487 {
3488 arg->failed = TRUE;
3489 return;
3490 }
3491
3492 if (sh_type == SHT_NOBITS && asect->size != 0)
3493 {
3494 /* Don't change the header type from NOBITS if we are being
3495 called for objcopy --only-keep-debug. */
3496 this_hdr->sh_type = sh_type;
3497 }
3498 }
3499
3500 /* Fill in the contents of a SHT_GROUP section. Called from
3501 _bfd_elf_compute_section_file_positions for gas, objcopy, and
3502 when ELF targets use the generic linker, ld. Called for ld -r
3503 from bfd_elf_final_link. */
3504
3505 void
3506 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3507 {
3508 bfd_boolean *failedptr = (bfd_boolean *) failedptrarg;
3509 asection *elt, *first;
3510 unsigned char *loc;
3511 bfd_boolean gas;
3512
3513 /* Ignore linker created group section. See elfNN_ia64_object_p in
3514 elfxx-ia64.c. */
3515 if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3516 || sec->size == 0
3517 || *failedptr)
3518 return;
3519
3520 if (elf_section_data (sec)->this_hdr.sh_info == 0)
3521 {
3522 unsigned long symindx = 0;
3523
3524 /* elf_group_id will have been set up by objcopy and the
3525 generic linker. */
3526 if (elf_group_id (sec) != NULL)
3527 symindx = elf_group_id (sec)->udata.i;
3528
3529 if (symindx == 0)
3530 {
3531 /* If called from the assembler, swap_out_syms will have set up
3532 elf_section_syms. */
3533 BFD_ASSERT (elf_section_syms (abfd) != NULL);
3534 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3535 }
3536 elf_section_data (sec)->this_hdr.sh_info = symindx;
3537 }
3538 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
3539 {
3540 /* The ELF backend linker sets sh_info to -2 when the group
3541 signature symbol is global, and thus the index can't be
3542 set until all local symbols are output. */
3543 asection *igroup;
3544 struct bfd_elf_section_data *sec_data;
3545 unsigned long symndx;
3546 unsigned long extsymoff;
3547 struct elf_link_hash_entry *h;
3548
3549 /* The point of this little dance to the first SHF_GROUP section
3550 then back to the SHT_GROUP section is that this gets us to
3551 the SHT_GROUP in the input object. */
3552 igroup = elf_sec_group (elf_next_in_group (sec));
3553 sec_data = elf_section_data (igroup);
3554 symndx = sec_data->this_hdr.sh_info;
3555 extsymoff = 0;
3556 if (!elf_bad_symtab (igroup->owner))
3557 {
3558 Elf_Internal_Shdr *symtab_hdr;
3559
3560 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3561 extsymoff = symtab_hdr->sh_info;
3562 }
3563 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3564 while (h->root.type == bfd_link_hash_indirect
3565 || h->root.type == bfd_link_hash_warning)
3566 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3567
3568 elf_section_data (sec)->this_hdr.sh_info = h->indx;
3569 }
3570
3571 /* The contents won't be allocated for "ld -r" or objcopy. */
3572 gas = TRUE;
3573 if (sec->contents == NULL)
3574 {
3575 gas = FALSE;
3576 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
3577
3578 /* Arrange for the section to be written out. */
3579 elf_section_data (sec)->this_hdr.contents = sec->contents;
3580 if (sec->contents == NULL)
3581 {
3582 *failedptr = TRUE;
3583 return;
3584 }
3585 }
3586
3587 loc = sec->contents + sec->size;
3588
3589 /* Get the pointer to the first section in the group that gas
3590 squirreled away here. objcopy arranges for this to be set to the
3591 start of the input section group. */
3592 first = elt = elf_next_in_group (sec);
3593
3594 /* First element is a flag word. Rest of section is elf section
3595 indices for all the sections of the group. Write them backwards
3596 just to keep the group in the same order as given in .section
3597 directives, not that it matters. */
3598 while (elt != NULL)
3599 {
3600 asection *s;
3601
3602 s = elt;
3603 if (!gas)
3604 s = s->output_section;
3605 if (s != NULL
3606 && !bfd_is_abs_section (s))
3607 {
3608 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
3609 struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
3610
3611 if (elf_sec->rel.hdr != NULL
3612 && (gas
3613 || (input_elf_sec->rel.hdr != NULL
3614 && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
3615 {
3616 elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
3617 loc -= 4;
3618 H_PUT_32 (abfd, elf_sec->rel.idx, loc);
3619 }
3620 if (elf_sec->rela.hdr != NULL
3621 && (gas
3622 || (input_elf_sec->rela.hdr != NULL
3623 && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
3624 {
3625 elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
3626 loc -= 4;
3627 H_PUT_32 (abfd, elf_sec->rela.idx, loc);
3628 }
3629 loc -= 4;
3630 H_PUT_32 (abfd, elf_sec->this_idx, loc);
3631 }
3632 elt = elf_next_in_group (elt);
3633 if (elt == first)
3634 break;
3635 }
3636
3637 loc -= 4;
3638 BFD_ASSERT (loc == sec->contents);
3639
3640 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
3641 }
3642
3643 /* Given NAME, the name of a relocation section stripped of its
3644 .rel/.rela prefix, return the section in ABFD to which the
3645 relocations apply. */
3646
3647 asection *
3648 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
3649 {
3650 /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
3651 section likely apply to .got.plt or .got section. */
3652 if (get_elf_backend_data (abfd)->want_got_plt
3653 && strcmp (name, ".plt") == 0)
3654 {
3655 asection *sec;
3656
3657 name = ".got.plt";
3658 sec = bfd_get_section_by_name (abfd, name);
3659 if (sec != NULL)
3660 return sec;
3661 name = ".got";
3662 }
3663
3664 return bfd_get_section_by_name (abfd, name);
3665 }
3666
3667 /* Return the section to which RELOC_SEC applies. */
3668
3669 static asection *
3670 elf_get_reloc_section (asection *reloc_sec)
3671 {
3672 const char *name;
3673 unsigned int type;
3674 bfd *abfd;
3675 const struct elf_backend_data *bed;
3676
3677 type = elf_section_data (reloc_sec)->this_hdr.sh_type;
3678 if (type != SHT_REL && type != SHT_RELA)
3679 return NULL;
3680
3681 /* We look up the section the relocs apply to by name. */
3682 name = reloc_sec->name;
3683 if (strncmp (name, ".rel", 4) != 0)
3684 return NULL;
3685 name += 4;
3686 if (type == SHT_RELA && *name++ != 'a')
3687 return NULL;
3688
3689 abfd = reloc_sec->owner;
3690 bed = get_elf_backend_data (abfd);
3691 return bed->get_reloc_section (abfd, name);
3692 }
3693
3694 /* Assign all ELF section numbers. The dummy first section is handled here
3695 too. The link/info pointers for the standard section types are filled
3696 in here too, while we're at it. */
3697
3698 static bfd_boolean
3699 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
3700 {
3701 struct elf_obj_tdata *t = elf_tdata (abfd);
3702 asection *sec;
3703 unsigned int section_number;
3704 Elf_Internal_Shdr **i_shdrp;
3705 struct bfd_elf_section_data *d;
3706 bfd_boolean need_symtab;
3707 size_t amt;
3708
3709 section_number = 1;
3710
3711 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
3712
3713 /* SHT_GROUP sections are in relocatable files only. */
3714 if (link_info == NULL || !link_info->resolve_section_groups)
3715 {
3716 size_t reloc_count = 0;
3717
3718 /* Put SHT_GROUP sections first. */
3719 for (sec = abfd->sections; sec != NULL; sec = sec->next)
3720 {
3721 d = elf_section_data (sec);
3722
3723 if (d->this_hdr.sh_type == SHT_GROUP)
3724 {
3725 if (sec->flags & SEC_LINKER_CREATED)
3726 {
3727 /* Remove the linker created SHT_GROUP sections. */
3728 bfd_section_list_remove (abfd, sec);
3729 abfd->section_count--;
3730 }
3731 else
3732 d->this_idx = section_number++;
3733 }
3734
3735 /* Count relocations. */
3736 reloc_count += sec->reloc_count;
3737 }
3738
3739 /* Clear HAS_RELOC if there are no relocations. */
3740 if (reloc_count == 0)
3741 abfd->flags &= ~HAS_RELOC;
3742 }
3743
3744 for (sec = abfd->sections; sec; sec = sec->next)
3745 {
3746 d = elf_section_data (sec);
3747
3748 if (d->this_hdr.sh_type != SHT_GROUP)
3749 d->this_idx = section_number++;
3750 if (d->this_hdr.sh_name != (unsigned int) -1)
3751 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
3752 if (d->rel.hdr)
3753 {
3754 d->rel.idx = section_number++;
3755 if (d->rel.hdr->sh_name != (unsigned int) -1)
3756 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
3757 }
3758 else
3759 d->rel.idx = 0;
3760
3761 if (d->rela.hdr)
3762 {
3763 d->rela.idx = section_number++;
3764 if (d->rela.hdr->sh_name != (unsigned int) -1)
3765 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
3766 }
3767 else
3768 d->rela.idx = 0;
3769 }
3770
3771 need_symtab = (bfd_get_symcount (abfd) > 0
3772 || (link_info == NULL
3773 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
3774 == HAS_RELOC)));
3775 if (need_symtab)
3776 {
3777 elf_onesymtab (abfd) = section_number++;
3778 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
3779 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
3780 {
3781 elf_section_list *entry;
3782
3783 BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
3784
3785 entry = bfd_zalloc (abfd, sizeof (*entry));
3786 entry->ndx = section_number++;
3787 elf_symtab_shndx_list (abfd) = entry;
3788 entry->hdr.sh_name
3789 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3790 ".symtab_shndx", FALSE);
3791 if (entry->hdr.sh_name == (unsigned int) -1)
3792 return FALSE;
3793 }
3794 elf_strtab_sec (abfd) = section_number++;
3795 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
3796 }
3797
3798 elf_shstrtab_sec (abfd) = section_number++;
3799 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
3800 elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
3801
3802 if (section_number >= SHN_LORESERVE)
3803 {
3804 /* xgettext:c-format */
3805 _bfd_error_handler (_("%pB: too many sections: %u"),
3806 abfd, section_number);
3807 return FALSE;
3808 }
3809
3810 elf_numsections (abfd) = section_number;
3811 elf_elfheader (abfd)->e_shnum = section_number;
3812
3813 /* Set up the list of section header pointers, in agreement with the
3814 indices. */
3815 amt = section_number * sizeof (Elf_Internal_Shdr *);
3816 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
3817 if (i_shdrp == NULL)
3818 return FALSE;
3819
3820 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
3821 sizeof (Elf_Internal_Shdr));
3822 if (i_shdrp[0] == NULL)
3823 {
3824 bfd_release (abfd, i_shdrp);
3825 return FALSE;
3826 }
3827
3828 elf_elfsections (abfd) = i_shdrp;
3829
3830 i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
3831 if (need_symtab)
3832 {
3833 i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
3834 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
3835 {
3836 elf_section_list * entry = elf_symtab_shndx_list (abfd);
3837 BFD_ASSERT (entry != NULL);
3838 i_shdrp[entry->ndx] = & entry->hdr;
3839 entry->hdr.sh_link = elf_onesymtab (abfd);
3840 }
3841 i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
3842 t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
3843 }
3844
3845 for (sec = abfd->sections; sec; sec = sec->next)
3846 {
3847 asection *s;
3848
3849 d = elf_section_data (sec);
3850
3851 i_shdrp[d->this_idx] = &d->this_hdr;
3852 if (d->rel.idx != 0)
3853 i_shdrp[d->rel.idx] = d->rel.hdr;
3854 if (d->rela.idx != 0)
3855 i_shdrp[d->rela.idx] = d->rela.hdr;
3856
3857 /* Fill in the sh_link and sh_info fields while we're at it. */
3858
3859 /* sh_link of a reloc section is the section index of the symbol
3860 table. sh_info is the section index of the section to which
3861 the relocation entries apply. */
3862 if (d->rel.idx != 0)
3863 {
3864 d->rel.hdr->sh_link = elf_onesymtab (abfd);
3865 d->rel.hdr->sh_info = d->this_idx;
3866 d->rel.hdr->sh_flags |= SHF_INFO_LINK;
3867 }
3868 if (d->rela.idx != 0)
3869 {
3870 d->rela.hdr->sh_link = elf_onesymtab (abfd);
3871 d->rela.hdr->sh_info = d->this_idx;
3872 d->rela.hdr->sh_flags |= SHF_INFO_LINK;
3873 }
3874
3875 /* We need to set up sh_link for SHF_LINK_ORDER. */
3876 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
3877 {
3878 s = elf_linked_to_section (sec);
3879 if (s)
3880 {
3881 /* elf_linked_to_section points to the input section. */
3882 if (link_info != NULL)
3883 {
3884 /* Check discarded linkonce section. */
3885 if (discarded_section (s))
3886 {
3887 asection *kept;
3888 _bfd_error_handler
3889 /* xgettext:c-format */
3890 (_("%pB: sh_link of section `%pA' points to"
3891 " discarded section `%pA' of `%pB'"),
3892 abfd, d->this_hdr.bfd_section,
3893 s, s->owner);
3894 /* Point to the kept section if it has the same
3895 size as the discarded one. */
3896 kept = _bfd_elf_check_kept_section (s, link_info);
3897 if (kept == NULL)
3898 {
3899 bfd_set_error (bfd_error_bad_value);
3900 return FALSE;
3901 }
3902 s = kept;
3903 }
3904
3905 s = s->output_section;
3906 BFD_ASSERT (s != NULL);
3907 }
3908 else
3909 {
3910 /* Handle objcopy. */
3911 if (s->output_section == NULL)
3912 {
3913 _bfd_error_handler
3914 /* xgettext:c-format */
3915 (_("%pB: sh_link of section `%pA' points to"
3916 " removed section `%pA' of `%pB'"),
3917 abfd, d->this_hdr.bfd_section, s, s->owner);
3918 bfd_set_error (bfd_error_bad_value);
3919 return FALSE;
3920 }
3921 s = s->output_section;
3922 }
3923 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3924 }
3925 else
3926 {
3927 /* PR 290:
3928 The Intel C compiler generates SHT_IA_64_UNWIND with
3929 SHF_LINK_ORDER. But it doesn't set the sh_link or
3930 sh_info fields. Hence we could get the situation
3931 where s is NULL. */
3932 const struct elf_backend_data *bed
3933 = get_elf_backend_data (abfd);
3934 if (bed->link_order_error_handler)
3935 bed->link_order_error_handler
3936 /* xgettext:c-format */
3937 (_("%pB: warning: sh_link not set for section `%pA'"),
3938 abfd, sec);
3939 }
3940 }
3941
3942 switch (d->this_hdr.sh_type)
3943 {
3944 case SHT_REL:
3945 case SHT_RELA:
3946 /* A reloc section which we are treating as a normal BFD
3947 section. sh_link is the section index of the symbol
3948 table. sh_info is the section index of the section to
3949 which the relocation entries apply. We assume that an
3950 allocated reloc section uses the dynamic symbol table.
3951 FIXME: How can we be sure? */
3952 s = bfd_get_section_by_name (abfd, ".dynsym");
3953 if (s != NULL)
3954 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3955
3956 s = elf_get_reloc_section (sec);
3957 if (s != NULL)
3958 {
3959 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
3960 d->this_hdr.sh_flags |= SHF_INFO_LINK;
3961 }
3962 break;
3963
3964 case SHT_STRTAB:
3965 /* We assume that a section named .stab*str is a stabs
3966 string section. We look for a section with the same name
3967 but without the trailing ``str'', and set its sh_link
3968 field to point to this section. */
3969 if (CONST_STRNEQ (sec->name, ".stab")
3970 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3971 {
3972 size_t len;
3973 char *alc;
3974
3975 len = strlen (sec->name);
3976 alc = (char *) bfd_malloc (len - 2);
3977 if (alc == NULL)
3978 return FALSE;
3979 memcpy (alc, sec->name, len - 3);
3980 alc[len - 3] = '\0';
3981 s = bfd_get_section_by_name (abfd, alc);
3982 free (alc);
3983 if (s != NULL)
3984 {
3985 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3986
3987 /* This is a .stab section. */
3988 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
3989 elf_section_data (s)->this_hdr.sh_entsize
3990 = 4 + 2 * bfd_get_arch_size (abfd) / 8;
3991 }
3992 }
3993 break;
3994
3995 case SHT_DYNAMIC:
3996 case SHT_DYNSYM:
3997 case SHT_GNU_verneed:
3998 case SHT_GNU_verdef:
3999 /* sh_link is the section header index of the string table
4000 used for the dynamic entries, or the symbol table, or the
4001 version strings. */
4002 s = bfd_get_section_by_name (abfd, ".dynstr");
4003 if (s != NULL)
4004 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4005 break;
4006
4007 case SHT_GNU_LIBLIST:
4008 /* sh_link is the section header index of the prelink library
4009 list used for the dynamic entries, or the symbol table, or
4010 the version strings. */
4011 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
4012 ? ".dynstr" : ".gnu.libstr");
4013 if (s != NULL)
4014 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4015 break;
4016
4017 case SHT_HASH:
4018 case SHT_GNU_HASH:
4019 case SHT_GNU_versym:
4020 /* sh_link is the section header index of the symbol table
4021 this hash table or version table is for. */
4022 s = bfd_get_section_by_name (abfd, ".dynsym");
4023 if (s != NULL)
4024 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4025 break;
4026
4027 case SHT_GROUP:
4028 d->this_hdr.sh_link = elf_onesymtab (abfd);
4029 }
4030 }
4031
4032 /* Delay setting sh_name to _bfd_elf_write_object_contents so that
4033 _bfd_elf_assign_file_positions_for_non_load can convert DWARF
4034 debug section name from .debug_* to .zdebug_* if needed. */
4035
4036 return TRUE;
4037 }
4038
4039 static bfd_boolean
4040 sym_is_global (bfd *abfd, asymbol *sym)
4041 {
4042 /* If the backend has a special mapping, use it. */
4043 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4044 if (bed->elf_backend_sym_is_global)
4045 return (*bed->elf_backend_sym_is_global) (abfd, sym);
4046
4047 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
4048 || bfd_is_und_section (bfd_asymbol_section (sym))
4049 || bfd_is_com_section (bfd_asymbol_section (sym)));
4050 }
4051
4052 /* Filter global symbols of ABFD to include in the import library. All
4053 SYMCOUNT symbols of ABFD can be examined from their pointers in
4054 SYMS. Pointers of symbols to keep should be stored contiguously at
4055 the beginning of that array.
4056
4057 Returns the number of symbols to keep. */
4058
4059 unsigned int
4060 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4061 asymbol **syms, long symcount)
4062 {
4063 long src_count, dst_count = 0;
4064
4065 for (src_count = 0; src_count < symcount; src_count++)
4066 {
4067 asymbol *sym = syms[src_count];
4068 char *name = (char *) bfd_asymbol_name (sym);
4069 struct bfd_link_hash_entry *h;
4070
4071 if (!sym_is_global (abfd, sym))
4072 continue;
4073
4074 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, FALSE);
4075 if (h == NULL)
4076 continue;
4077 if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4078 continue;
4079 if (h->linker_def || h->ldscript_def)
4080 continue;
4081
4082 syms[dst_count++] = sym;
4083 }
4084
4085 syms[dst_count] = NULL;
4086
4087 return dst_count;
4088 }
4089
4090 /* Don't output section symbols for sections that are not going to be
4091 output, that are duplicates or there is no BFD section. */
4092
4093 static bfd_boolean
4094 ignore_section_sym (bfd *abfd, asymbol *sym)
4095 {
4096 elf_symbol_type *type_ptr;
4097
4098 if (sym == NULL)
4099 return FALSE;
4100
4101 if ((sym->flags & BSF_SECTION_SYM) == 0)
4102 return FALSE;
4103
4104 if (sym->section == NULL)
4105 return TRUE;
4106
4107 type_ptr = elf_symbol_from (abfd, sym);
4108 return ((type_ptr != NULL
4109 && type_ptr->internal_elf_sym.st_shndx != 0
4110 && bfd_is_abs_section (sym->section))
4111 || !(sym->section->owner == abfd
4112 || (sym->section->output_section != NULL
4113 && sym->section->output_section->owner == abfd
4114 && sym->section->output_offset == 0)
4115 || bfd_is_abs_section (sym->section)));
4116 }
4117
4118 /* Map symbol from it's internal number to the external number, moving
4119 all local symbols to be at the head of the list. */
4120
4121 static bfd_boolean
4122 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4123 {
4124 unsigned int symcount = bfd_get_symcount (abfd);
4125 asymbol **syms = bfd_get_outsymbols (abfd);
4126 asymbol **sect_syms;
4127 unsigned int num_locals = 0;
4128 unsigned int num_globals = 0;
4129 unsigned int num_locals2 = 0;
4130 unsigned int num_globals2 = 0;
4131 unsigned int max_index = 0;
4132 unsigned int idx;
4133 asection *asect;
4134 asymbol **new_syms;
4135 size_t amt;
4136
4137 #ifdef DEBUG
4138 fprintf (stderr, "elf_map_symbols\n");
4139 fflush (stderr);
4140 #endif
4141
4142 for (asect = abfd->sections; asect; asect = asect->next)
4143 {
4144 if (max_index < asect->index)
4145 max_index = asect->index;
4146 }
4147
4148 max_index++;
4149 amt = max_index * sizeof (asymbol *);
4150 sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4151 if (sect_syms == NULL)
4152 return FALSE;
4153 elf_section_syms (abfd) = sect_syms;
4154 elf_num_section_syms (abfd) = max_index;
4155
4156 /* Init sect_syms entries for any section symbols we have already
4157 decided to output. */
4158 for (idx = 0; idx < symcount; idx++)
4159 {
4160 asymbol *sym = syms[idx];
4161
4162 if ((sym->flags & BSF_SECTION_SYM) != 0
4163 && sym->value == 0
4164 && !ignore_section_sym (abfd, sym)
4165 && !bfd_is_abs_section (sym->section))
4166 {
4167 asection *sec = sym->section;
4168
4169 if (sec->owner != abfd)
4170 sec = sec->output_section;
4171
4172 sect_syms[sec->index] = syms[idx];
4173 }
4174 }
4175
4176 /* Classify all of the symbols. */
4177 for (idx = 0; idx < symcount; idx++)
4178 {
4179 if (sym_is_global (abfd, syms[idx]))
4180 num_globals++;
4181 else if (!ignore_section_sym (abfd, syms[idx]))
4182 num_locals++;
4183 }
4184
4185 /* We will be adding a section symbol for each normal BFD section. Most
4186 sections will already have a section symbol in outsymbols, but
4187 eg. SHT_GROUP sections will not, and we need the section symbol mapped
4188 at least in that case. */
4189 for (asect = abfd->sections; asect; asect = asect->next)
4190 {
4191 if (sect_syms[asect->index] == NULL)
4192 {
4193 if (!sym_is_global (abfd, asect->symbol))
4194 num_locals++;
4195 else
4196 num_globals++;
4197 }
4198 }
4199
4200 /* Now sort the symbols so the local symbols are first. */
4201 amt = (num_locals + num_globals) * sizeof (asymbol *);
4202 new_syms = (asymbol **) bfd_alloc (abfd, amt);
4203 if (new_syms == NULL)
4204 return FALSE;
4205
4206 for (idx = 0; idx < symcount; idx++)
4207 {
4208 asymbol *sym = syms[idx];
4209 unsigned int i;
4210
4211 if (sym_is_global (abfd, sym))
4212 i = num_locals + num_globals2++;
4213 else if (!ignore_section_sym (abfd, sym))
4214 i = num_locals2++;
4215 else
4216 continue;
4217 new_syms[i] = sym;
4218 sym->udata.i = i + 1;
4219 }
4220 for (asect = abfd->sections; asect; asect = asect->next)
4221 {
4222 if (sect_syms[asect->index] == NULL)
4223 {
4224 asymbol *sym = asect->symbol;
4225 unsigned int i;
4226
4227 sect_syms[asect->index] = sym;
4228 if (!sym_is_global (abfd, sym))
4229 i = num_locals2++;
4230 else
4231 i = num_locals + num_globals2++;
4232 new_syms[i] = sym;
4233 sym->udata.i = i + 1;
4234 }
4235 }
4236
4237 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4238
4239 *pnum_locals = num_locals;
4240 return TRUE;
4241 }
4242
4243 /* Align to the maximum file alignment that could be required for any
4244 ELF data structure. */
4245
4246 static inline file_ptr
4247 align_file_position (file_ptr off, int align)
4248 {
4249 return (off + align - 1) & ~(align - 1);
4250 }
4251
4252 /* Assign a file position to a section, optionally aligning to the
4253 required section alignment. */
4254
4255 file_ptr
4256 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4257 file_ptr offset,
4258 bfd_boolean align)
4259 {
4260 if (align && i_shdrp->sh_addralign > 1)
4261 offset = BFD_ALIGN (offset, i_shdrp->sh_addralign);
4262 i_shdrp->sh_offset = offset;
4263 if (i_shdrp->bfd_section != NULL)
4264 i_shdrp->bfd_section->filepos = offset;
4265 if (i_shdrp->sh_type != SHT_NOBITS)
4266 offset += i_shdrp->sh_size;
4267 return offset;
4268 }
4269
4270 /* Compute the file positions we are going to put the sections at, and
4271 otherwise prepare to begin writing out the ELF file. If LINK_INFO
4272 is not NULL, this is being called by the ELF backend linker. */
4273
4274 bfd_boolean
4275 _bfd_elf_compute_section_file_positions (bfd *abfd,
4276 struct bfd_link_info *link_info)
4277 {
4278 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4279 struct fake_section_arg fsargs;
4280 bfd_boolean failed;
4281 struct elf_strtab_hash *strtab = NULL;
4282 Elf_Internal_Shdr *shstrtab_hdr;
4283 bfd_boolean need_symtab;
4284
4285 if (abfd->output_has_begun)
4286 return TRUE;
4287
4288 /* Do any elf backend specific processing first. */
4289 if (bed->elf_backend_begin_write_processing)
4290 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4291
4292 if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4293 return FALSE;
4294
4295 fsargs.failed = FALSE;
4296 fsargs.link_info = link_info;
4297 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4298 if (fsargs.failed)
4299 return FALSE;
4300
4301 if (!assign_section_numbers (abfd, link_info))
4302 return FALSE;
4303
4304 /* The backend linker builds symbol table information itself. */
4305 need_symtab = (link_info == NULL
4306 && (bfd_get_symcount (abfd) > 0
4307 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4308 == HAS_RELOC)));
4309 if (need_symtab)
4310 {
4311 /* Non-zero if doing a relocatable link. */
4312 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4313
4314 if (! swap_out_syms (abfd, &strtab, relocatable_p))
4315 return FALSE;
4316 }
4317
4318 failed = FALSE;
4319 if (link_info == NULL)
4320 {
4321 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4322 if (failed)
4323 return FALSE;
4324 }
4325
4326 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4327 /* sh_name was set in init_file_header. */
4328 shstrtab_hdr->sh_type = SHT_STRTAB;
4329 shstrtab_hdr->sh_flags = bed->elf_strtab_flags;
4330 shstrtab_hdr->sh_addr = 0;
4331 /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */
4332 shstrtab_hdr->sh_entsize = 0;
4333 shstrtab_hdr->sh_link = 0;
4334 shstrtab_hdr->sh_info = 0;
4335 /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load. */
4336 shstrtab_hdr->sh_addralign = 1;
4337
4338 if (!assign_file_positions_except_relocs (abfd, link_info))
4339 return FALSE;
4340
4341 if (need_symtab)
4342 {
4343 file_ptr off;
4344 Elf_Internal_Shdr *hdr;
4345
4346 off = elf_next_file_pos (abfd);
4347
4348 hdr = & elf_symtab_hdr (abfd);
4349 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4350
4351 if (elf_symtab_shndx_list (abfd) != NULL)
4352 {
4353 hdr = & elf_symtab_shndx_list (abfd)->hdr;
4354 if (hdr->sh_size != 0)
4355 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4356 /* FIXME: What about other symtab_shndx sections in the list ? */
4357 }
4358
4359 hdr = &elf_tdata (abfd)->strtab_hdr;
4360 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
4361
4362 elf_next_file_pos (abfd) = off;
4363
4364 /* Now that we know where the .strtab section goes, write it
4365 out. */
4366 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4367 || ! _bfd_elf_strtab_emit (abfd, strtab))
4368 return FALSE;
4369 _bfd_elf_strtab_free (strtab);
4370 }
4371
4372 abfd->output_has_begun = TRUE;
4373
4374 return TRUE;
4375 }
4376
4377 /* Make an initial estimate of the size of the program header. If we
4378 get the number wrong here, we'll redo section placement. */
4379
4380 static bfd_size_type
4381 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4382 {
4383 size_t segs;
4384 asection *s;
4385 const struct elf_backend_data *bed;
4386
4387 /* Assume we will need exactly two PT_LOAD segments: one for text
4388 and one for data. */
4389 segs = 2;
4390
4391 s = bfd_get_section_by_name (abfd, ".interp");
4392 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4393 {
4394 /* If we have a loadable interpreter section, we need a
4395 PT_INTERP segment. In this case, assume we also need a
4396 PT_PHDR segment, although that may not be true for all
4397 targets. */
4398 segs += 2;
4399 }
4400
4401 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
4402 {
4403 /* We need a PT_DYNAMIC segment. */
4404 ++segs;
4405 }
4406
4407 if (info != NULL && info->relro)
4408 {
4409 /* We need a PT_GNU_RELRO segment. */
4410 ++segs;
4411 }
4412
4413 if (elf_eh_frame_hdr (abfd))
4414 {
4415 /* We need a PT_GNU_EH_FRAME segment. */
4416 ++segs;
4417 }
4418
4419 if (elf_stack_flags (abfd))
4420 {
4421 /* We need a PT_GNU_STACK segment. */
4422 ++segs;
4423 }
4424
4425 s = bfd_get_section_by_name (abfd,
4426 NOTE_GNU_PROPERTY_SECTION_NAME);
4427 if (s != NULL && s->size != 0)
4428 {
4429 /* We need a PT_GNU_PROPERTY segment. */
4430 ++segs;
4431 }
4432
4433 for (s = abfd->sections; s != NULL; s = s->next)
4434 {
4435 if ((s->flags & SEC_LOAD) != 0
4436 && elf_section_type (s) == SHT_NOTE)
4437 {
4438 unsigned int alignment_power;
4439 /* We need a PT_NOTE segment. */
4440 ++segs;
4441 /* Try to create just one PT_NOTE segment for all adjacent
4442 loadable SHT_NOTE sections. gABI requires that within a
4443 PT_NOTE segment (and also inside of each SHT_NOTE section)
4444 each note should have the same alignment. So we check
4445 whether the sections are correctly aligned. */
4446 alignment_power = s->alignment_power;
4447 while (s->next != NULL
4448 && s->next->alignment_power == alignment_power
4449 && (s->next->flags & SEC_LOAD) != 0
4450 && elf_section_type (s->next) == SHT_NOTE)
4451 s = s->next;
4452 }
4453 }
4454
4455 for (s = abfd->sections; s != NULL; s = s->next)
4456 {
4457 if (s->flags & SEC_THREAD_LOCAL)
4458 {
4459 /* We need a PT_TLS segment. */
4460 ++segs;
4461 break;
4462 }
4463 }
4464
4465 bed = get_elf_backend_data (abfd);
4466
4467 if ((abfd->flags & D_PAGED) != 0
4468 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4469 {
4470 /* Add a PT_GNU_MBIND segment for each mbind section. */
4471 unsigned int page_align_power = bfd_log2 (bed->commonpagesize);
4472 for (s = abfd->sections; s != NULL; s = s->next)
4473 if (elf_section_flags (s) & SHF_GNU_MBIND)
4474 {
4475 if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4476 {
4477 _bfd_error_handler
4478 /* xgettext:c-format */
4479 (_("%pB: GNU_MBIND section `%pA' has invalid "
4480 "sh_info field: %d"),
4481 abfd, s, elf_section_data (s)->this_hdr.sh_info);
4482 continue;
4483 }
4484 /* Align mbind section to page size. */
4485 if (s->alignment_power < page_align_power)
4486 s->alignment_power = page_align_power;
4487 segs ++;
4488 }
4489 }
4490
4491 /* Let the backend count up any program headers it might need. */
4492 if (bed->elf_backend_additional_program_headers)
4493 {
4494 int a;
4495
4496 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4497 if (a == -1)
4498 abort ();
4499 segs += a;
4500 }
4501
4502 return segs * bed->s->sizeof_phdr;
4503 }
4504
4505 /* Find the segment that contains the output_section of section. */
4506
4507 Elf_Internal_Phdr *
4508 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4509 {
4510 struct elf_segment_map *m;
4511 Elf_Internal_Phdr *p;
4512
4513 for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
4514 m != NULL;
4515 m = m->next, p++)
4516 {
4517 int i;
4518
4519 for (i = m->count - 1; i >= 0; i--)
4520 if (m->sections[i] == section)
4521 return p;
4522 }
4523
4524 return NULL;
4525 }
4526
4527 /* Create a mapping from a set of sections to a program segment. */
4528
4529 static struct elf_segment_map *
4530 make_mapping (bfd *abfd,
4531 asection **sections,
4532 unsigned int from,
4533 unsigned int to,
4534 bfd_boolean phdr)
4535 {
4536 struct elf_segment_map *m;
4537 unsigned int i;
4538 asection **hdrpp;
4539 size_t amt;
4540
4541 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4542 amt += (to - from) * sizeof (asection *);
4543 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4544 if (m == NULL)
4545 return NULL;
4546 m->next = NULL;
4547 m->p_type = PT_LOAD;
4548 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
4549 m->sections[i - from] = *hdrpp;
4550 m->count = to - from;
4551
4552 if (from == 0 && phdr)
4553 {
4554 /* Include the headers in the first PT_LOAD segment. */
4555 m->includes_filehdr = 1;
4556 m->includes_phdrs = 1;
4557 }
4558
4559 return m;
4560 }
4561
4562 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
4563 on failure. */
4564
4565 struct elf_segment_map *
4566 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
4567 {
4568 struct elf_segment_map *m;
4569
4570 m = (struct elf_segment_map *) bfd_zalloc (abfd,
4571 sizeof (struct elf_segment_map));
4572 if (m == NULL)
4573 return NULL;
4574 m->next = NULL;
4575 m->p_type = PT_DYNAMIC;
4576 m->count = 1;
4577 m->sections[0] = dynsec;
4578
4579 return m;
4580 }
4581
4582 /* Possibly add or remove segments from the segment map. */
4583
4584 static bfd_boolean
4585 elf_modify_segment_map (bfd *abfd,
4586 struct bfd_link_info *info,
4587 bfd_boolean remove_empty_load)
4588 {
4589 struct elf_segment_map **m;
4590 const struct elf_backend_data *bed;
4591
4592 /* The placement algorithm assumes that non allocated sections are
4593 not in PT_LOAD segments. We ensure this here by removing such
4594 sections from the segment map. We also remove excluded
4595 sections. Finally, any PT_LOAD segment without sections is
4596 removed. */
4597 m = &elf_seg_map (abfd);
4598 while (*m)
4599 {
4600 unsigned int i, new_count;
4601
4602 for (new_count = 0, i = 0; i < (*m)->count; i++)
4603 {
4604 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
4605 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
4606 || (*m)->p_type != PT_LOAD))
4607 {
4608 (*m)->sections[new_count] = (*m)->sections[i];
4609 new_count++;
4610 }
4611 }
4612 (*m)->count = new_count;
4613
4614 if (remove_empty_load
4615 && (*m)->p_type == PT_LOAD
4616 && (*m)->count == 0
4617 && !(*m)->includes_phdrs)
4618 *m = (*m)->next;
4619 else
4620 m = &(*m)->next;
4621 }
4622
4623 bed = get_elf_backend_data (abfd);
4624 if (bed->elf_backend_modify_segment_map != NULL)
4625 {
4626 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
4627 return FALSE;
4628 }
4629
4630 return TRUE;
4631 }
4632
4633 #define IS_TBSS(s) \
4634 ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
4635
4636 /* Set up a mapping from BFD sections to program segments. */
4637
4638 bfd_boolean
4639 _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
4640 {
4641 unsigned int count;
4642 struct elf_segment_map *m;
4643 asection **sections = NULL;
4644 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
4645 bfd_boolean no_user_phdrs;
4646
4647 no_user_phdrs = elf_seg_map (abfd) == NULL;
4648
4649 if (info != NULL)
4650 info->user_phdrs = !no_user_phdrs;
4651
4652 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
4653 {
4654 asection *s;
4655 unsigned int i;
4656 struct elf_segment_map *mfirst;
4657 struct elf_segment_map **pm;
4658 asection *last_hdr;
4659 bfd_vma last_size;
4660 unsigned int hdr_index;
4661 bfd_vma maxpagesize;
4662 asection **hdrpp;
4663 bfd_boolean phdr_in_segment;
4664 bfd_boolean writable;
4665 bfd_boolean executable;
4666 unsigned int tls_count = 0;
4667 asection *first_tls = NULL;
4668 asection *first_mbind = NULL;
4669 asection *dynsec, *eh_frame_hdr;
4670 size_t amt;
4671 bfd_vma addr_mask, wrap_to = 0;
4672 bfd_size_type phdr_size;
4673
4674 /* Select the allocated sections, and sort them. */
4675
4676 amt = bfd_count_sections (abfd) * sizeof (asection *);
4677 sections = (asection **) bfd_malloc (amt);
4678 if (sections == NULL)
4679 goto error_return;
4680
4681 /* Calculate top address, avoiding undefined behaviour of shift
4682 left operator when shift count is equal to size of type
4683 being shifted. */
4684 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
4685 addr_mask = (addr_mask << 1) + 1;
4686
4687 i = 0;
4688 for (s = abfd->sections; s != NULL; s = s->next)
4689 {
4690 if ((s->flags & SEC_ALLOC) != 0)
4691 {
4692 /* target_index is unused until bfd_elf_final_link
4693 starts output of section symbols. Use it to make
4694 qsort stable. */
4695 s->target_index = i;
4696 sections[i] = s;
4697 ++i;
4698 /* A wrapping section potentially clashes with header. */
4699 if (((s->lma + s->size) & addr_mask) < (s->lma & addr_mask))
4700 wrap_to = (s->lma + s->size) & addr_mask;
4701 }
4702 }
4703 BFD_ASSERT (i <= bfd_count_sections (abfd));
4704 count = i;
4705
4706 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
4707
4708 phdr_size = elf_program_header_size (abfd);
4709 if (phdr_size == (bfd_size_type) -1)
4710 phdr_size = get_program_header_size (abfd, info);
4711 phdr_size += bed->s->sizeof_ehdr;
4712 maxpagesize = bed->maxpagesize;
4713 if (maxpagesize == 0)
4714 maxpagesize = 1;
4715 phdr_in_segment = info != NULL && info->load_phdrs;
4716 if (count != 0
4717 && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
4718 >= (phdr_size & (maxpagesize - 1))))
4719 /* For compatibility with old scripts that may not be using
4720 SIZEOF_HEADERS, add headers when it looks like space has
4721 been left for them. */
4722 phdr_in_segment = TRUE;
4723
4724 /* Build the mapping. */
4725 mfirst = NULL;
4726 pm = &mfirst;
4727
4728 /* If we have a .interp section, then create a PT_PHDR segment for
4729 the program headers and a PT_INTERP segment for the .interp
4730 section. */
4731 s = bfd_get_section_by_name (abfd, ".interp");
4732 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4733 {
4734 amt = sizeof (struct elf_segment_map);
4735 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4736 if (m == NULL)
4737 goto error_return;
4738 m->next = NULL;
4739 m->p_type = PT_PHDR;
4740 m->p_flags = PF_R;
4741 m->p_flags_valid = 1;
4742 m->includes_phdrs = 1;
4743 phdr_in_segment = TRUE;
4744 *pm = m;
4745 pm = &m->next;
4746
4747 amt = sizeof (struct elf_segment_map);
4748 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
4749 if (m == NULL)
4750 goto error_return;
4751 m->next = NULL;
4752 m->p_type = PT_INTERP;
4753 m->count = 1;
4754 m->sections[0] = s;
4755
4756 *pm = m;
4757 pm = &m->next;
4758 }
4759
4760 /* Look through the sections. We put sections in the same program
4761 segment when the start of the second section can be placed within
4762 a few bytes of the end of the first section. */
4763 last_hdr = NULL;
4764 last_size = 0;
4765 hdr_index = 0;
4766 writable = FALSE;
4767 executable = FALSE;
4768 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
4769 if (dynsec != NULL
4770 && (dynsec->flags & SEC_LOAD) == 0)
4771 dynsec = NULL;
4772
4773 if ((abfd->flags & D_PAGED) == 0)
4774 phdr_in_segment = FALSE;
4775
4776 /* Deal with -Ttext or something similar such that the first section
4777 is not adjacent to the program headers. This is an
4778 approximation, since at this point we don't know exactly how many
4779 program headers we will need. */
4780 if (phdr_in_segment && count > 0)
4781 {
4782 bfd_vma phdr_lma;
4783 bfd_boolean separate_phdr = FALSE;
4784
4785 phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
4786 if (info != NULL
4787 && info->separate_code
4788 && (sections[0]->flags & SEC_CODE) != 0)
4789 {
4790 /* If data sections should be separate from code and
4791 thus not executable, and the first section is
4792 executable then put the file and program headers in
4793 their own PT_LOAD. */
4794 separate_phdr = TRUE;
4795 if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
4796 == (sections[0]->lma & addr_mask & -maxpagesize)))
4797 {
4798 /* The file and program headers are currently on the
4799 same page as the first section. Put them on the
4800 previous page if we can. */
4801 if (phdr_lma >= maxpagesize)
4802 phdr_lma -= maxpagesize;
4803 else
4804 separate_phdr = FALSE;
4805 }
4806 }
4807 if ((sections[0]->lma & addr_mask) < phdr_lma
4808 || (sections[0]->lma & addr_mask) < phdr_size)
4809 /* If file and program headers would be placed at the end
4810 of memory then it's probably better to omit them. */
4811 phdr_in_segment = FALSE;
4812 else if (phdr_lma < wrap_to)
4813 /* If a section wraps around to where we'll be placing
4814 file and program headers, then the headers will be
4815 overwritten. */
4816 phdr_in_segment = FALSE;
4817 else if (separate_phdr)
4818 {
4819 m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
4820 if (m == NULL)
4821 goto error_return;
4822 m->p_paddr = phdr_lma;
4823 m->p_vaddr_offset
4824 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
4825 m->p_paddr_valid = 1;
4826 *pm = m;
4827 pm = &m->next;
4828 phdr_in_segment = FALSE;
4829 }
4830 }
4831
4832 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
4833 {
4834 asection *hdr;
4835 bfd_boolean new_segment;
4836
4837 hdr = *hdrpp;
4838
4839 /* See if this section and the last one will fit in the same
4840 segment. */
4841
4842 if (last_hdr == NULL)
4843 {
4844 /* If we don't have a segment yet, then we don't need a new
4845 one (we build the last one after this loop). */
4846 new_segment = FALSE;
4847 }
4848 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
4849 {
4850 /* If this section has a different relation between the
4851 virtual address and the load address, then we need a new
4852 segment. */
4853 new_segment = TRUE;
4854 }
4855 else if (hdr->lma < last_hdr->lma + last_size
4856 || last_hdr->lma + last_size < last_hdr->lma)
4857 {
4858 /* If this section has a load address that makes it overlap
4859 the previous section, then we need a new segment. */
4860 new_segment = TRUE;
4861 }
4862 else if ((abfd->flags & D_PAGED) != 0
4863 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
4864 == (hdr->lma & -maxpagesize)))
4865 {
4866 /* If we are demand paged then we can't map two disk
4867 pages onto the same memory page. */
4868 new_segment = FALSE;
4869 }
4870 /* In the next test we have to be careful when last_hdr->lma is close
4871 to the end of the address space. If the aligned address wraps
4872 around to the start of the address space, then there are no more
4873 pages left in memory and it is OK to assume that the current
4874 section can be included in the current segment. */
4875 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4876 + maxpagesize > last_hdr->lma)
4877 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
4878 + maxpagesize <= hdr->lma))
4879 {
4880 /* If putting this section in this segment would force us to
4881 skip a page in the segment, then we need a new segment. */
4882 new_segment = TRUE;
4883 }
4884 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
4885 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
4886 {
4887 /* We don't want to put a loaded section after a
4888 nonloaded (ie. bss style) section in the same segment
4889 as that will force the non-loaded section to be loaded.
4890 Consider .tbss sections as loaded for this purpose. */
4891 new_segment = TRUE;
4892 }
4893 else if ((abfd->flags & D_PAGED) == 0)
4894 {
4895 /* If the file is not demand paged, which means that we
4896 don't require the sections to be correctly aligned in the
4897 file, then there is no other reason for a new segment. */
4898 new_segment = FALSE;
4899 }
4900 else if (info != NULL
4901 && info->separate_code
4902 && executable != ((hdr->flags & SEC_CODE) != 0))
4903 {
4904 new_segment = TRUE;
4905 }
4906 else if (! writable
4907 && (hdr->flags & SEC_READONLY) == 0)
4908 {
4909 /* We don't want to put a writable section in a read only
4910 segment. */
4911 new_segment = TRUE;
4912 }
4913 else
4914 {
4915 /* Otherwise, we can use the same segment. */
4916 new_segment = FALSE;
4917 }
4918
4919 /* Allow interested parties a chance to override our decision. */
4920 if (last_hdr != NULL
4921 && info != NULL
4922 && info->callbacks->override_segment_assignment != NULL)
4923 new_segment
4924 = info->callbacks->override_segment_assignment (info, abfd, hdr,
4925 last_hdr,
4926 new_segment);
4927
4928 if (! new_segment)
4929 {
4930 if ((hdr->flags & SEC_READONLY) == 0)
4931 writable = TRUE;
4932 if ((hdr->flags & SEC_CODE) != 0)
4933 executable = TRUE;
4934 last_hdr = hdr;
4935 /* .tbss sections effectively have zero size. */
4936 last_size = !IS_TBSS (hdr) ? hdr->size : 0;
4937 continue;
4938 }
4939
4940 /* We need a new program segment. We must create a new program
4941 header holding all the sections from hdr_index until hdr. */
4942
4943 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4944 if (m == NULL)
4945 goto error_return;
4946
4947 *pm = m;
4948 pm = &m->next;
4949
4950 if ((hdr->flags & SEC_READONLY) == 0)
4951 writable = TRUE;
4952 else
4953 writable = FALSE;
4954
4955 if ((hdr->flags & SEC_CODE) == 0)
4956 executable = FALSE;
4957 else
4958 executable = TRUE;
4959
4960 last_hdr = hdr;
4961 /* .tbss sections effectively have zero size. */
4962 last_size = !IS_TBSS (hdr) ? hdr->size : 0;
4963 hdr_index = i;
4964 phdr_in_segment = FALSE;
4965 }
4966
4967 /* Create a final PT_LOAD program segment, but not if it's just
4968 for .tbss. */
4969 if (last_hdr != NULL
4970 && (i - hdr_index != 1
4971 || !IS_TBSS (last_hdr)))
4972 {
4973 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
4974 if (m == NULL)
4975 goto error_return;
4976
4977 *pm = m;
4978 pm = &m->next;
4979 }
4980
4981 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
4982 if (dynsec != NULL)
4983 {
4984 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
4985 if (m == NULL)
4986 goto error_return;
4987 *pm = m;
4988 pm = &m->next;
4989 }
4990
4991 /* For each batch of consecutive loadable SHT_NOTE sections,
4992 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
4993 because if we link together nonloadable .note sections and
4994 loadable .note sections, we will generate two .note sections
4995 in the output file. */
4996 for (s = abfd->sections; s != NULL; s = s->next)
4997 {
4998 if ((s->flags & SEC_LOAD) != 0
4999 && elf_section_type (s) == SHT_NOTE)
5000 {
5001 asection *s2;
5002 unsigned int alignment_power = s->alignment_power;
5003
5004 count = 1;
5005 for (s2 = s; s2->next != NULL; s2 = s2->next)
5006 {
5007 if (s2->next->alignment_power == alignment_power
5008 && (s2->next->flags & SEC_LOAD) != 0
5009 && elf_section_type (s2->next) == SHT_NOTE
5010 && align_power (s2->lma + s2->size,
5011 alignment_power)
5012 == s2->next->lma)
5013 count++;
5014 else
5015 break;
5016 }
5017 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5018 amt += count * sizeof (asection *);
5019 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5020 if (m == NULL)
5021 goto error_return;
5022 m->next = NULL;
5023 m->p_type = PT_NOTE;
5024 m->count = count;
5025 while (count > 1)
5026 {
5027 m->sections[m->count - count--] = s;
5028 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5029 s = s->next;
5030 }
5031 m->sections[m->count - 1] = s;
5032 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5033 *pm = m;
5034 pm = &m->next;
5035 }
5036 if (s->flags & SEC_THREAD_LOCAL)
5037 {
5038 if (! tls_count)
5039 first_tls = s;
5040 tls_count++;
5041 }
5042 if (first_mbind == NULL
5043 && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5044 first_mbind = s;
5045 }
5046
5047 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
5048 if (tls_count > 0)
5049 {
5050 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5051 amt += tls_count * sizeof (asection *);
5052 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5053 if (m == NULL)
5054 goto error_return;
5055 m->next = NULL;
5056 m->p_type = PT_TLS;
5057 m->count = tls_count;
5058 /* Mandated PF_R. */
5059 m->p_flags = PF_R;
5060 m->p_flags_valid = 1;
5061 s = first_tls;
5062 for (i = 0; i < tls_count; ++i)
5063 {
5064 if ((s->flags & SEC_THREAD_LOCAL) == 0)
5065 {
5066 _bfd_error_handler
5067 (_("%pB: TLS sections are not adjacent:"), abfd);
5068 s = first_tls;
5069 i = 0;
5070 while (i < tls_count)
5071 {
5072 if ((s->flags & SEC_THREAD_LOCAL) != 0)
5073 {
5074 _bfd_error_handler (_(" TLS: %pA"), s);
5075 i++;
5076 }
5077 else
5078 _bfd_error_handler (_(" non-TLS: %pA"), s);
5079 s = s->next;
5080 }
5081 bfd_set_error (bfd_error_bad_value);
5082 goto error_return;
5083 }
5084 m->sections[i] = s;
5085 s = s->next;
5086 }
5087
5088 *pm = m;
5089 pm = &m->next;
5090 }
5091
5092 if (first_mbind
5093 && (abfd->flags & D_PAGED) != 0
5094 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5095 for (s = first_mbind; s != NULL; s = s->next)
5096 if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5097 && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5098 {
5099 /* Mandated PF_R. */
5100 unsigned long p_flags = PF_R;
5101 if ((s->flags & SEC_READONLY) == 0)
5102 p_flags |= PF_W;
5103 if ((s->flags & SEC_CODE) != 0)
5104 p_flags |= PF_X;
5105
5106 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5107 m = bfd_zalloc (abfd, amt);
5108 if (m == NULL)
5109 goto error_return;
5110 m->next = NULL;
5111 m->p_type = (PT_GNU_MBIND_LO
5112 + elf_section_data (s)->this_hdr.sh_info);
5113 m->count = 1;
5114 m->p_flags_valid = 1;
5115 m->sections[0] = s;
5116 m->p_flags = p_flags;
5117
5118 *pm = m;
5119 pm = &m->next;
5120 }
5121
5122 s = bfd_get_section_by_name (abfd,
5123 NOTE_GNU_PROPERTY_SECTION_NAME);
5124 if (s != NULL && s->size != 0)
5125 {
5126 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5127 m = bfd_zalloc (abfd, amt);
5128 if (m == NULL)
5129 goto error_return;
5130 m->next = NULL;
5131 m->p_type = PT_GNU_PROPERTY;
5132 m->count = 1;
5133 m->p_flags_valid = 1;
5134 m->sections[0] = s;
5135 m->p_flags = PF_R;
5136 *pm = m;
5137 pm = &m->next;
5138 }
5139
5140 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5141 segment. */
5142 eh_frame_hdr = elf_eh_frame_hdr (abfd);
5143 if (eh_frame_hdr != NULL
5144 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5145 {
5146 amt = sizeof (struct elf_segment_map);
5147 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5148 if (m == NULL)
5149 goto error_return;
5150 m->next = NULL;
5151 m->p_type = PT_GNU_EH_FRAME;
5152 m->count = 1;
5153 m->sections[0] = eh_frame_hdr->output_section;
5154
5155 *pm = m;
5156 pm = &m->next;
5157 }
5158
5159 if (elf_stack_flags (abfd))
5160 {
5161 amt = sizeof (struct elf_segment_map);
5162 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5163 if (m == NULL)
5164 goto error_return;
5165 m->next = NULL;
5166 m->p_type = PT_GNU_STACK;
5167 m->p_flags = elf_stack_flags (abfd);
5168 m->p_align = bed->stack_align;
5169 m->p_flags_valid = 1;
5170 m->p_align_valid = m->p_align != 0;
5171 if (info->stacksize > 0)
5172 {
5173 m->p_size = info->stacksize;
5174 m->p_size_valid = 1;
5175 }
5176
5177 *pm = m;
5178 pm = &m->next;
5179 }
5180
5181 if (info != NULL && info->relro)
5182 {
5183 for (m = mfirst; m != NULL; m = m->next)
5184 {
5185 if (m->p_type == PT_LOAD
5186 && m->count != 0
5187 && m->sections[0]->vma >= info->relro_start
5188 && m->sections[0]->vma < info->relro_end)
5189 {
5190 i = m->count;
5191 while (--i != (unsigned) -1)
5192 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS))
5193 == (SEC_LOAD | SEC_HAS_CONTENTS))
5194 break;
5195
5196 if (i != (unsigned) -1)
5197 break;
5198 }
5199 }
5200
5201 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
5202 if (m != NULL)
5203 {
5204 amt = sizeof (struct elf_segment_map);
5205 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5206 if (m == NULL)
5207 goto error_return;
5208 m->next = NULL;
5209 m->p_type = PT_GNU_RELRO;
5210 *pm = m;
5211 pm = &m->next;
5212 }
5213 }
5214
5215 free (sections);
5216 elf_seg_map (abfd) = mfirst;
5217 }
5218
5219 if (!elf_modify_segment_map (abfd, info, no_user_phdrs))
5220 return FALSE;
5221
5222 for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5223 ++count;
5224 elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5225
5226 return TRUE;
5227
5228 error_return:
5229 if (sections != NULL)
5230 free (sections);
5231 return FALSE;
5232 }
5233
5234 /* Sort sections by address. */
5235
5236 static int
5237 elf_sort_sections (const void *arg1, const void *arg2)
5238 {
5239 const asection *sec1 = *(const asection **) arg1;
5240 const asection *sec2 = *(const asection **) arg2;
5241 bfd_size_type size1, size2;
5242
5243 /* Sort by LMA first, since this is the address used to
5244 place the section into a segment. */
5245 if (sec1->lma < sec2->lma)
5246 return -1;
5247 else if (sec1->lma > sec2->lma)
5248 return 1;
5249
5250 /* Then sort by VMA. Normally the LMA and the VMA will be
5251 the same, and this will do nothing. */
5252 if (sec1->vma < sec2->vma)
5253 return -1;
5254 else if (sec1->vma > sec2->vma)
5255 return 1;
5256
5257 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
5258
5259 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0)
5260
5261 if (TOEND (sec1))
5262 {
5263 if (!TOEND (sec2))
5264 return 1;
5265 }
5266 else if (TOEND (sec2))
5267 return -1;
5268
5269 #undef TOEND
5270
5271 /* Sort by size, to put zero sized sections
5272 before others at the same address. */
5273
5274 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5275 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5276
5277 if (size1 < size2)
5278 return -1;
5279 if (size1 > size2)
5280 return 1;
5281
5282 return sec1->target_index - sec2->target_index;
5283 }
5284
5285 /* This qsort comparison functions sorts PT_LOAD segments first and
5286 by p_paddr, for assign_file_positions_for_load_sections. */
5287
5288 static int
5289 elf_sort_segments (const void *arg1, const void *arg2)
5290 {
5291 const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5292 const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5293
5294 if (m1->p_type != m2->p_type)
5295 {
5296 if (m1->p_type == PT_NULL)
5297 return 1;
5298 if (m2->p_type == PT_NULL)
5299 return -1;
5300 return m1->p_type < m2->p_type ? -1 : 1;
5301 }
5302 if (m1->includes_filehdr != m2->includes_filehdr)
5303 return m1->includes_filehdr ? -1 : 1;
5304 if (m1->no_sort_lma != m2->no_sort_lma)
5305 return m1->no_sort_lma ? -1 : 1;
5306 if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5307 {
5308 bfd_vma lma1, lma2;
5309 lma1 = 0;
5310 if (m1->p_paddr_valid)
5311 lma1 = m1->p_paddr;
5312 else if (m1->count != 0)
5313 lma1 = m1->sections[0]->lma + m1->p_vaddr_offset;
5314 lma2 = 0;
5315 if (m2->p_paddr_valid)
5316 lma2 = m2->p_paddr;
5317 else if (m2->count != 0)
5318 lma2 = m2->sections[0]->lma + m2->p_vaddr_offset;
5319 if (lma1 != lma2)
5320 return lma1 < lma2 ? -1 : 1;
5321 }
5322 if (m1->idx != m2->idx)
5323 return m1->idx < m2->idx ? -1 : 1;
5324 return 0;
5325 }
5326
5327 /* Ian Lance Taylor writes:
5328
5329 We shouldn't be using % with a negative signed number. That's just
5330 not good. We have to make sure either that the number is not
5331 negative, or that the number has an unsigned type. When the types
5332 are all the same size they wind up as unsigned. When file_ptr is a
5333 larger signed type, the arithmetic winds up as signed long long,
5334 which is wrong.
5335
5336 What we're trying to say here is something like ``increase OFF by
5337 the least amount that will cause it to be equal to the VMA modulo
5338 the page size.'' */
5339 /* In other words, something like:
5340
5341 vma_offset = m->sections[0]->vma % bed->maxpagesize;
5342 off_offset = off % bed->maxpagesize;
5343 if (vma_offset < off_offset)
5344 adjustment = vma_offset + bed->maxpagesize - off_offset;
5345 else
5346 adjustment = vma_offset - off_offset;
5347
5348 which can be collapsed into the expression below. */
5349
5350 static file_ptr
5351 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5352 {
5353 /* PR binutils/16199: Handle an alignment of zero. */
5354 if (maxpagesize == 0)
5355 maxpagesize = 1;
5356 return ((vma - off) % maxpagesize);
5357 }
5358
5359 static void
5360 print_segment_map (const struct elf_segment_map *m)
5361 {
5362 unsigned int j;
5363 const char *pt = get_segment_type (m->p_type);
5364 char buf[32];
5365
5366 if (pt == NULL)
5367 {
5368 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5369 sprintf (buf, "LOPROC+%7.7x",
5370 (unsigned int) (m->p_type - PT_LOPROC));
5371 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5372 sprintf (buf, "LOOS+%7.7x",
5373 (unsigned int) (m->p_type - PT_LOOS));
5374 else
5375 snprintf (buf, sizeof (buf), "%8.8x",
5376 (unsigned int) m->p_type);
5377 pt = buf;
5378 }
5379 fflush (stdout);
5380 fprintf (stderr, "%s:", pt);
5381 for (j = 0; j < m->count; j++)
5382 fprintf (stderr, " %s", m->sections [j]->name);
5383 putc ('\n',stderr);
5384 fflush (stderr);
5385 }
5386
5387 static bfd_boolean
5388 write_zeros (bfd *abfd, file_ptr pos, bfd_size_type len)
5389 {
5390 void *buf;
5391 bfd_boolean ret;
5392
5393 if (bfd_seek (abfd, pos, SEEK_SET) != 0)
5394 return FALSE;
5395 buf = bfd_zmalloc (len);
5396 if (buf == NULL)
5397 return FALSE;
5398 ret = bfd_bwrite (buf, len, abfd) == len;
5399 free (buf);
5400 return ret;
5401 }
5402
5403 /* Assign file positions to the sections based on the mapping from
5404 sections to segments. This function also sets up some fields in
5405 the file header. */
5406
5407 static bfd_boolean
5408 assign_file_positions_for_load_sections (bfd *abfd,
5409 struct bfd_link_info *link_info)
5410 {
5411 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
5412 struct elf_segment_map *m;
5413 struct elf_segment_map *phdr_load_seg;
5414 Elf_Internal_Phdr *phdrs;
5415 Elf_Internal_Phdr *p;
5416 file_ptr off;
5417 bfd_size_type maxpagesize;
5418 unsigned int alloc, actual;
5419 unsigned int i, j;
5420 struct elf_segment_map **sorted_seg_map;
5421
5422 if (link_info == NULL
5423 && !_bfd_elf_map_sections_to_segments (abfd, link_info))
5424 return FALSE;
5425
5426 alloc = 0;
5427 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5428 m->idx = alloc++;
5429
5430 if (alloc)
5431 {
5432 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5433 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5434 }
5435 else
5436 {
5437 /* PR binutils/12467. */
5438 elf_elfheader (abfd)->e_phoff = 0;
5439 elf_elfheader (abfd)->e_phentsize = 0;
5440 }
5441
5442 elf_elfheader (abfd)->e_phnum = alloc;
5443
5444 if (elf_program_header_size (abfd) == (bfd_size_type) -1)
5445 {
5446 actual = alloc;
5447 elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5448 }
5449 else
5450 {
5451 actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5452 BFD_ASSERT (elf_program_header_size (abfd)
5453 == actual * bed->s->sizeof_phdr);
5454 BFD_ASSERT (actual >= alloc);
5455 }
5456
5457 if (alloc == 0)
5458 {
5459 elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
5460 return TRUE;
5461 }
5462
5463 /* We're writing the size in elf_program_header_size (abfd),
5464 see assign_file_positions_except_relocs, so make sure we have
5465 that amount allocated, with trailing space cleared.
5466 The variable alloc contains the computed need, while
5467 elf_program_header_size (abfd) contains the size used for the
5468 layout.
5469 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5470 where the layout is forced to according to a larger size in the
5471 last iterations for the testcase ld-elf/header. */
5472 phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5473 + alloc * sizeof (*sorted_seg_map)));
5474 sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
5475 elf_tdata (abfd)->phdr = phdrs;
5476 if (phdrs == NULL)
5477 return FALSE;
5478
5479 for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
5480 {
5481 sorted_seg_map[j] = m;
5482 /* If elf_segment_map is not from map_sections_to_segments, the
5483 sections may not be correctly ordered. NOTE: sorting should
5484 not be done to the PT_NOTE section of a corefile, which may
5485 contain several pseudo-sections artificially created by bfd.
5486 Sorting these pseudo-sections breaks things badly. */
5487 if (m->count > 1
5488 && !(elf_elfheader (abfd)->e_type == ET_CORE
5489 && m->p_type == PT_NOTE))
5490 {
5491 for (i = 0; i < m->count; i++)
5492 m->sections[i]->target_index = i;
5493 qsort (m->sections, (size_t) m->count, sizeof (asection *),
5494 elf_sort_sections);
5495 }
5496 }
5497 if (alloc > 1)
5498 qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
5499 elf_sort_segments);
5500
5501 maxpagesize = 1;
5502 if ((abfd->flags & D_PAGED) != 0)
5503 maxpagesize = bed->maxpagesize;
5504
5505 /* Sections must map to file offsets past the ELF file header. */
5506 off = bed->s->sizeof_ehdr;
5507 /* And if one of the PT_LOAD headers doesn't include the program
5508 headers then we'll be mapping program headers in the usual
5509 position after the ELF file header. */
5510 phdr_load_seg = NULL;
5511 for (j = 0; j < alloc; j++)
5512 {
5513 m = sorted_seg_map[j];
5514 if (m->p_type != PT_LOAD)
5515 break;
5516 if (m->includes_phdrs)
5517 {
5518 phdr_load_seg = m;
5519 break;
5520 }
5521 }
5522 if (phdr_load_seg == NULL)
5523 off += actual * bed->s->sizeof_phdr;
5524
5525 for (j = 0; j < alloc; j++)
5526 {
5527 asection **secpp;
5528 bfd_vma off_adjust;
5529 bfd_boolean no_contents;
5530
5531 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
5532 number of sections with contents contributing to both p_filesz
5533 and p_memsz, followed by a number of sections with no contents
5534 that just contribute to p_memsz. In this loop, OFF tracks next
5535 available file offset for PT_LOAD and PT_NOTE segments. */
5536 m = sorted_seg_map[j];
5537 p = phdrs + m->idx;
5538 p->p_type = m->p_type;
5539 p->p_flags = m->p_flags;
5540
5541 if (m->count == 0)
5542 p->p_vaddr = m->p_vaddr_offset;
5543 else
5544 p->p_vaddr = m->sections[0]->vma + m->p_vaddr_offset;
5545
5546 if (m->p_paddr_valid)
5547 p->p_paddr = m->p_paddr;
5548 else if (m->count == 0)
5549 p->p_paddr = 0;
5550 else
5551 p->p_paddr = m->sections[0]->lma + m->p_vaddr_offset;
5552
5553 if (p->p_type == PT_LOAD
5554 && (abfd->flags & D_PAGED) != 0)
5555 {
5556 /* p_align in demand paged PT_LOAD segments effectively stores
5557 the maximum page size. When copying an executable with
5558 objcopy, we set m->p_align from the input file. Use this
5559 value for maxpagesize rather than bed->maxpagesize, which
5560 may be different. Note that we use maxpagesize for PT_TLS
5561 segment alignment later in this function, so we are relying
5562 on at least one PT_LOAD segment appearing before a PT_TLS
5563 segment. */
5564 if (m->p_align_valid)
5565 maxpagesize = m->p_align;
5566
5567 p->p_align = maxpagesize;
5568 }
5569 else if (m->p_align_valid)
5570 p->p_align = m->p_align;
5571 else if (m->count == 0)
5572 p->p_align = 1 << bed->s->log_file_align;
5573
5574 if (m == phdr_load_seg)
5575 {
5576 if (!m->includes_filehdr)
5577 p->p_offset = off;
5578 off += actual * bed->s->sizeof_phdr;
5579 }
5580
5581 no_contents = FALSE;
5582 off_adjust = 0;
5583 if (p->p_type == PT_LOAD
5584 && m->count > 0)
5585 {
5586 bfd_size_type align;
5587 unsigned int align_power = 0;
5588
5589 if (m->p_align_valid)
5590 align = p->p_align;
5591 else
5592 {
5593 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5594 {
5595 unsigned int secalign;
5596
5597 secalign = bfd_section_alignment (*secpp);
5598 if (secalign > align_power)
5599 align_power = secalign;
5600 }
5601 align = (bfd_size_type) 1 << align_power;
5602 if (align < maxpagesize)
5603 align = maxpagesize;
5604 }
5605
5606 for (i = 0; i < m->count; i++)
5607 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
5608 /* If we aren't making room for this section, then
5609 it must be SHT_NOBITS regardless of what we've
5610 set via struct bfd_elf_special_section. */
5611 elf_section_type (m->sections[i]) = SHT_NOBITS;
5612
5613 /* Find out whether this segment contains any loadable
5614 sections. */
5615 no_contents = TRUE;
5616 for (i = 0; i < m->count; i++)
5617 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
5618 {
5619 no_contents = FALSE;
5620 break;
5621 }
5622
5623 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
5624
5625 /* Broken hardware and/or kernel require that files do not
5626 map the same page with different permissions on some hppa
5627 processors. */
5628 if (j != 0
5629 && (abfd->flags & D_PAGED) != 0
5630 && bed->no_page_alias
5631 && (off & (maxpagesize - 1)) != 0
5632 && (off & -maxpagesize) == ((off + off_adjust) & -maxpagesize))
5633 off_adjust += maxpagesize;
5634 off += off_adjust;
5635 if (no_contents)
5636 {
5637 /* We shouldn't need to align the segment on disk since
5638 the segment doesn't need file space, but the gABI
5639 arguably requires the alignment and glibc ld.so
5640 checks it. So to comply with the alignment
5641 requirement but not waste file space, we adjust
5642 p_offset for just this segment. (OFF_ADJUST is
5643 subtracted from OFF later.) This may put p_offset
5644 past the end of file, but that shouldn't matter. */
5645 }
5646 else
5647 off_adjust = 0;
5648 }
5649 /* Make sure the .dynamic section is the first section in the
5650 PT_DYNAMIC segment. */
5651 else if (p->p_type == PT_DYNAMIC
5652 && m->count > 1
5653 && strcmp (m->sections[0]->name, ".dynamic") != 0)
5654 {
5655 _bfd_error_handler
5656 (_("%pB: The first section in the PT_DYNAMIC segment"
5657 " is not the .dynamic section"),
5658 abfd);
5659 bfd_set_error (bfd_error_bad_value);
5660 return FALSE;
5661 }
5662 /* Set the note section type to SHT_NOTE. */
5663 else if (p->p_type == PT_NOTE)
5664 for (i = 0; i < m->count; i++)
5665 elf_section_type (m->sections[i]) = SHT_NOTE;
5666
5667 if (m->includes_filehdr)
5668 {
5669 if (!m->p_flags_valid)
5670 p->p_flags |= PF_R;
5671 p->p_filesz = bed->s->sizeof_ehdr;
5672 p->p_memsz = bed->s->sizeof_ehdr;
5673 if (p->p_type == PT_LOAD)
5674 {
5675 if (m->count > 0)
5676 {
5677 if (p->p_vaddr < (bfd_vma) off
5678 || (!m->p_paddr_valid
5679 && p->p_paddr < (bfd_vma) off))
5680 {
5681 _bfd_error_handler
5682 (_("%pB: not enough room for program headers,"
5683 " try linking with -N"),
5684 abfd);
5685 bfd_set_error (bfd_error_bad_value);
5686 return FALSE;
5687 }
5688 p->p_vaddr -= off;
5689 if (!m->p_paddr_valid)
5690 p->p_paddr -= off;
5691 }
5692 }
5693 else if (sorted_seg_map[0]->includes_filehdr)
5694 {
5695 Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
5696 p->p_vaddr = filehdr->p_vaddr;
5697 if (!m->p_paddr_valid)
5698 p->p_paddr = filehdr->p_paddr;
5699 }
5700 }
5701
5702 if (m->includes_phdrs)
5703 {
5704 if (!m->p_flags_valid)
5705 p->p_flags |= PF_R;
5706 p->p_filesz += actual * bed->s->sizeof_phdr;
5707 p->p_memsz += actual * bed->s->sizeof_phdr;
5708 if (!m->includes_filehdr)
5709 {
5710 if (p->p_type == PT_LOAD)
5711 {
5712 elf_elfheader (abfd)->e_phoff = p->p_offset;
5713 if (m->count > 0)
5714 {
5715 p->p_vaddr -= off - p->p_offset;
5716 if (!m->p_paddr_valid)
5717 p->p_paddr -= off - p->p_offset;
5718 }
5719 }
5720 else if (phdr_load_seg != NULL)
5721 {
5722 Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
5723 bfd_vma phdr_off = 0;
5724 if (phdr_load_seg->includes_filehdr)
5725 phdr_off = bed->s->sizeof_ehdr;
5726 p->p_vaddr = phdr->p_vaddr + phdr_off;
5727 if (!m->p_paddr_valid)
5728 p->p_paddr = phdr->p_paddr + phdr_off;
5729 p->p_offset = phdr->p_offset + phdr_off;
5730 }
5731 else
5732 p->p_offset = bed->s->sizeof_ehdr;
5733 }
5734 }
5735
5736 if (p->p_type == PT_LOAD
5737 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
5738 {
5739 if (!m->includes_filehdr && !m->includes_phdrs)
5740 {
5741 p->p_offset = off;
5742 if (no_contents)
5743 {
5744 /* Put meaningless p_offset for PT_LOAD segments
5745 without file contents somewhere within the first
5746 page, in an attempt to not point past EOF. */
5747 bfd_size_type align = maxpagesize;
5748 if (align < p->p_align)
5749 align = p->p_align;
5750 if (align < 1)
5751 align = 1;
5752 p->p_offset = off % align;
5753 }
5754 }
5755 else
5756 {
5757 file_ptr adjust;
5758
5759 adjust = off - (p->p_offset + p->p_filesz);
5760 if (!no_contents)
5761 p->p_filesz += adjust;
5762 p->p_memsz += adjust;
5763 }
5764 }
5765
5766 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
5767 maps. Set filepos for sections in PT_LOAD segments, and in
5768 core files, for sections in PT_NOTE segments.
5769 assign_file_positions_for_non_load_sections will set filepos
5770 for other sections and update p_filesz for other segments. */
5771 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
5772 {
5773 asection *sec;
5774 bfd_size_type align;
5775 Elf_Internal_Shdr *this_hdr;
5776
5777 sec = *secpp;
5778 this_hdr = &elf_section_data (sec)->this_hdr;
5779 align = (bfd_size_type) 1 << bfd_section_alignment (sec);
5780
5781 if ((p->p_type == PT_LOAD
5782 || p->p_type == PT_TLS)
5783 && (this_hdr->sh_type != SHT_NOBITS
5784 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
5785 && ((this_hdr->sh_flags & SHF_TLS) == 0
5786 || p->p_type == PT_TLS))))
5787 {
5788 bfd_vma p_start = p->p_paddr;
5789 bfd_vma p_end = p_start + p->p_memsz;
5790 bfd_vma s_start = sec->lma;
5791 bfd_vma adjust = s_start - p_end;
5792
5793 if (adjust != 0
5794 && (s_start < p_end
5795 || p_end < p_start))
5796 {
5797 _bfd_error_handler
5798 /* xgettext:c-format */
5799 (_("%pB: section %pA lma %#" PRIx64 " adjusted to %#" PRIx64),
5800 abfd, sec, (uint64_t) s_start, (uint64_t) p_end);
5801 adjust = 0;
5802 sec->lma = p_end;
5803 }
5804 p->p_memsz += adjust;
5805
5806 if (this_hdr->sh_type != SHT_NOBITS)
5807 {
5808 if (p->p_type == PT_LOAD)
5809 {
5810 if (p->p_filesz + adjust < p->p_memsz)
5811 {
5812 /* We have a PROGBITS section following NOBITS ones.
5813 Allocate file space for the NOBITS section(s) and
5814 zero it. */
5815 adjust = p->p_memsz - p->p_filesz;
5816 if (!write_zeros (abfd, off, adjust))
5817 return FALSE;
5818 }
5819 off += adjust;
5820 }
5821 p->p_filesz += adjust;
5822 }
5823 }
5824
5825 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
5826 {
5827 /* The section at i == 0 is the one that actually contains
5828 everything. */
5829 if (i == 0)
5830 {
5831 this_hdr->sh_offset = sec->filepos = off;
5832 off += this_hdr->sh_size;
5833 p->p_filesz = this_hdr->sh_size;
5834 p->p_memsz = 0;
5835 p->p_align = 1;
5836 }
5837 else
5838 {
5839 /* The rest are fake sections that shouldn't be written. */
5840 sec->filepos = 0;
5841 sec->size = 0;
5842 sec->flags = 0;
5843 continue;
5844 }
5845 }
5846 else
5847 {
5848 if (p->p_type == PT_LOAD)
5849 {
5850 this_hdr->sh_offset = sec->filepos = off;
5851 if (this_hdr->sh_type != SHT_NOBITS)
5852 off += this_hdr->sh_size;
5853 }
5854 else if (this_hdr->sh_type == SHT_NOBITS
5855 && (this_hdr->sh_flags & SHF_TLS) != 0
5856 && this_hdr->sh_offset == 0)
5857 {
5858 /* This is a .tbss section that didn't get a PT_LOAD.
5859 (See _bfd_elf_map_sections_to_segments "Create a
5860 final PT_LOAD".) Set sh_offset to the value it
5861 would have if we had created a zero p_filesz and
5862 p_memsz PT_LOAD header for the section. This
5863 also makes the PT_TLS header have the same
5864 p_offset value. */
5865 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
5866 off, align);
5867 this_hdr->sh_offset = sec->filepos = off + adjust;
5868 }
5869
5870 if (this_hdr->sh_type != SHT_NOBITS)
5871 {
5872 p->p_filesz += this_hdr->sh_size;
5873 /* A load section without SHF_ALLOC is something like
5874 a note section in a PT_NOTE segment. These take
5875 file space but are not loaded into memory. */
5876 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5877 p->p_memsz += this_hdr->sh_size;
5878 }
5879 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
5880 {
5881 if (p->p_type == PT_TLS)
5882 p->p_memsz += this_hdr->sh_size;
5883
5884 /* .tbss is special. It doesn't contribute to p_memsz of
5885 normal segments. */
5886 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
5887 p->p_memsz += this_hdr->sh_size;
5888 }
5889
5890 if (align > p->p_align
5891 && !m->p_align_valid
5892 && (p->p_type != PT_LOAD
5893 || (abfd->flags & D_PAGED) == 0))
5894 p->p_align = align;
5895 }
5896
5897 if (!m->p_flags_valid)
5898 {
5899 p->p_flags |= PF_R;
5900 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
5901 p->p_flags |= PF_X;
5902 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
5903 p->p_flags |= PF_W;
5904 }
5905 }
5906
5907 off -= off_adjust;
5908
5909 /* PR ld/20815 - Check that the program header segment, if
5910 present, will be loaded into memory. */
5911 if (p->p_type == PT_PHDR
5912 && phdr_load_seg == NULL
5913 && !(bed->elf_backend_allow_non_load_phdr != NULL
5914 && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
5915 {
5916 /* The fix for this error is usually to edit the linker script being
5917 used and set up the program headers manually. Either that or
5918 leave room for the headers at the start of the SECTIONS. */
5919 _bfd_error_handler (_("%pB: error: PHDR segment not covered"
5920 " by LOAD segment"),
5921 abfd);
5922 if (link_info == NULL)
5923 return FALSE;
5924 /* Arrange for the linker to exit with an error, deleting
5925 the output file unless --noinhibit-exec is given. */
5926 link_info->callbacks->info ("%X");
5927 }
5928
5929 /* Check that all sections are in a PT_LOAD segment.
5930 Don't check funky gdb generated core files. */
5931 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
5932 {
5933 bfd_boolean check_vma = TRUE;
5934
5935 for (i = 1; i < m->count; i++)
5936 if (m->sections[i]->vma == m->sections[i - 1]->vma
5937 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
5938 ->this_hdr), p) != 0
5939 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
5940 ->this_hdr), p) != 0)
5941 {
5942 /* Looks like we have overlays packed into the segment. */
5943 check_vma = FALSE;
5944 break;
5945 }
5946
5947 for (i = 0; i < m->count; i++)
5948 {
5949 Elf_Internal_Shdr *this_hdr;
5950 asection *sec;
5951
5952 sec = m->sections[i];
5953 this_hdr = &(elf_section_data(sec)->this_hdr);
5954 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
5955 && !ELF_TBSS_SPECIAL (this_hdr, p))
5956 {
5957 _bfd_error_handler
5958 /* xgettext:c-format */
5959 (_("%pB: section `%pA' can't be allocated in segment %d"),
5960 abfd, sec, j);
5961 print_segment_map (m);
5962 }
5963 }
5964 }
5965 }
5966
5967 elf_next_file_pos (abfd) = off;
5968
5969 if (link_info != NULL
5970 && phdr_load_seg != NULL
5971 && phdr_load_seg->includes_filehdr)
5972 {
5973 /* There is a segment that contains both the file headers and the
5974 program headers, so provide a symbol __ehdr_start pointing there.
5975 A program can use this to examine itself robustly. */
5976
5977 struct elf_link_hash_entry *hash
5978 = elf_link_hash_lookup (elf_hash_table (link_info), "__ehdr_start",
5979 FALSE, FALSE, TRUE);
5980 /* If the symbol was referenced and not defined, define it. */
5981 if (hash != NULL
5982 && (hash->root.type == bfd_link_hash_new
5983 || hash->root.type == bfd_link_hash_undefined
5984 || hash->root.type == bfd_link_hash_undefweak
5985 || hash->root.type == bfd_link_hash_common))
5986 {
5987 asection *s = NULL;
5988 bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr;
5989
5990 if (phdr_load_seg->count != 0)
5991 /* The segment contains sections, so use the first one. */
5992 s = phdr_load_seg->sections[0];
5993 else
5994 /* Use the first (i.e. lowest-addressed) section in any segment. */
5995 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5996 if (m->p_type == PT_LOAD && m->count != 0)
5997 {
5998 s = m->sections[0];
5999 break;
6000 }
6001
6002 if (s != NULL)
6003 {
6004 hash->root.u.def.value = filehdr_vaddr - s->vma;
6005 hash->root.u.def.section = s;
6006 }
6007 else
6008 {
6009 hash->root.u.def.value = filehdr_vaddr;
6010 hash->root.u.def.section = bfd_abs_section_ptr;
6011 }
6012
6013 hash->root.type = bfd_link_hash_defined;
6014 hash->def_regular = 1;
6015 hash->non_elf = 0;
6016 }
6017 }
6018
6019 return TRUE;
6020 }
6021
6022 /* Determine if a bfd is a debuginfo file. Unfortunately there
6023 is no defined method for detecting such files, so we have to
6024 use heuristics instead. */
6025
6026 bfd_boolean
6027 is_debuginfo_file (bfd *abfd)
6028 {
6029 if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6030 return FALSE;
6031
6032 Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6033 Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6034 Elf_Internal_Shdr **headerp;
6035
6036 for (headerp = start_headers; headerp < end_headers; headerp ++)
6037 {
6038 Elf_Internal_Shdr *header = * headerp;
6039
6040 /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6041 The only allocated sections are SHT_NOBITS or SHT_NOTES. */
6042 if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6043 && header->sh_type != SHT_NOBITS
6044 && header->sh_type != SHT_NOTE)
6045 return FALSE;
6046 }
6047
6048 return TRUE;
6049 }
6050
6051 /* Assign file positions for the other sections, except for compressed debugging
6052 and other sections assigned in _bfd_elf_assign_file_positions_for_non_load(). */
6053
6054 static bfd_boolean
6055 assign_file_positions_for_non_load_sections (bfd *abfd,
6056 struct bfd_link_info *link_info)
6057 {
6058 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6059 Elf_Internal_Shdr **i_shdrpp;
6060 Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6061 Elf_Internal_Phdr *phdrs;
6062 Elf_Internal_Phdr *p;
6063 struct elf_segment_map *m;
6064 file_ptr off;
6065
6066 i_shdrpp = elf_elfsections (abfd);
6067 end_hdrpp = i_shdrpp + elf_numsections (abfd);
6068 off = elf_next_file_pos (abfd);
6069 for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6070 {
6071 Elf_Internal_Shdr *hdr;
6072
6073 hdr = *hdrpp;
6074 if (hdr->bfd_section != NULL
6075 && (hdr->bfd_section->filepos != 0
6076 || (hdr->sh_type == SHT_NOBITS
6077 && hdr->contents == NULL)))
6078 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6079 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6080 {
6081 if (hdr->sh_size != 0
6082 /* PR 24717 - debuginfo files are known to be not strictly
6083 compliant with the ELF standard. In particular they often
6084 have .note.gnu.property sections that are outside of any
6085 loadable segment. This is not a problem for such files,
6086 so do not warn about them. */
6087 && ! is_debuginfo_file (abfd))
6088 _bfd_error_handler
6089 /* xgettext:c-format */
6090 (_("%pB: warning: allocated section `%s' not in segment"),
6091 abfd,
6092 (hdr->bfd_section == NULL
6093 ? "*unknown*"
6094 : hdr->bfd_section->name));
6095 /* We don't need to page align empty sections. */
6096 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6097 off += vma_page_aligned_bias (hdr->sh_addr, off,
6098 bed->maxpagesize);
6099 else
6100 off += vma_page_aligned_bias (hdr->sh_addr, off,
6101 hdr->sh_addralign);
6102 off = _bfd_elf_assign_file_position_for_section (hdr, off,
6103 FALSE);
6104 }
6105 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6106 && hdr->bfd_section == NULL)
6107 /* We don't know the offset of these sections yet: their size has
6108 not been decided. */
6109 || (hdr->bfd_section != NULL
6110 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6111 || (bfd_section_is_ctf (hdr->bfd_section)
6112 && abfd->is_linker_output)))
6113 || hdr == i_shdrpp[elf_onesymtab (abfd)]
6114 || (elf_symtab_shndx_list (abfd) != NULL
6115 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6116 || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6117 || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6118 hdr->sh_offset = -1;
6119 else
6120 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
6121 }
6122 elf_next_file_pos (abfd) = off;
6123
6124 /* Now that we have set the section file positions, we can set up
6125 the file positions for the non PT_LOAD segments. */
6126 phdrs = elf_tdata (abfd)->phdr;
6127 for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6128 {
6129 if (p->p_type == PT_GNU_RELRO)
6130 {
6131 bfd_vma start, end;
6132 bfd_boolean ok;
6133
6134 if (link_info != NULL)
6135 {
6136 /* During linking the range of the RELRO segment is passed
6137 in link_info. Note that there may be padding between
6138 relro_start and the first RELRO section. */
6139 start = link_info->relro_start;
6140 end = link_info->relro_end;
6141 }
6142 else if (m->count != 0)
6143 {
6144 if (!m->p_size_valid)
6145 abort ();
6146 start = m->sections[0]->vma;
6147 end = start + m->p_size;
6148 }
6149 else
6150 {
6151 start = 0;
6152 end = 0;
6153 }
6154
6155 ok = FALSE;
6156 if (start < end)
6157 {
6158 struct elf_segment_map *lm;
6159 const Elf_Internal_Phdr *lp;
6160 unsigned int i;
6161
6162 /* Find a LOAD segment containing a section in the RELRO
6163 segment. */
6164 for (lm = elf_seg_map (abfd), lp = phdrs;
6165 lm != NULL;
6166 lm = lm->next, lp++)
6167 {
6168 if (lp->p_type == PT_LOAD
6169 && lm->count != 0
6170 && (lm->sections[lm->count - 1]->vma
6171 + (!IS_TBSS (lm->sections[lm->count - 1])
6172 ? lm->sections[lm->count - 1]->size
6173 : 0)) > start
6174 && lm->sections[0]->vma < end)
6175 break;
6176 }
6177
6178 if (lm != NULL)
6179 {
6180 /* Find the section starting the RELRO segment. */
6181 for (i = 0; i < lm->count; i++)
6182 {
6183 asection *s = lm->sections[i];
6184 if (s->vma >= start
6185 && s->vma < end
6186 && s->size != 0)
6187 break;
6188 }
6189
6190 if (i < lm->count)
6191 {
6192 p->p_vaddr = lm->sections[i]->vma;
6193 p->p_paddr = lm->sections[i]->lma;
6194 p->p_offset = lm->sections[i]->filepos;
6195 p->p_memsz = end - p->p_vaddr;
6196 p->p_filesz = p->p_memsz;
6197
6198 /* The RELRO segment typically ends a few bytes
6199 into .got.plt but other layouts are possible.
6200 In cases where the end does not match any
6201 loaded section (for instance is in file
6202 padding), trim p_filesz back to correspond to
6203 the end of loaded section contents. */
6204 if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6205 p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6206
6207 /* Preserve the alignment and flags if they are
6208 valid. The gold linker generates RW/4 for
6209 the PT_GNU_RELRO section. It is better for
6210 objcopy/strip to honor these attributes
6211 otherwise gdb will choke when using separate
6212 debug files. */
6213 if (!m->p_align_valid)
6214 p->p_align = 1;
6215 if (!m->p_flags_valid)
6216 p->p_flags = PF_R;
6217 ok = TRUE;
6218 }
6219 }
6220 }
6221 if (link_info != NULL)
6222 BFD_ASSERT (ok);
6223 if (!ok)
6224 memset (p, 0, sizeof *p);
6225 }
6226 else if (p->p_type == PT_GNU_STACK)
6227 {
6228 if (m->p_size_valid)
6229 p->p_memsz = m->p_size;
6230 }
6231 else if (m->count != 0)
6232 {
6233 unsigned int i;
6234
6235 if (p->p_type != PT_LOAD
6236 && (p->p_type != PT_NOTE
6237 || bfd_get_format (abfd) != bfd_core))
6238 {
6239 /* A user specified segment layout may include a PHDR
6240 segment that overlaps with a LOAD segment... */
6241 if (p->p_type == PT_PHDR)
6242 {
6243 m->count = 0;
6244 continue;
6245 }
6246
6247 if (m->includes_filehdr || m->includes_phdrs)
6248 {
6249 /* PR 17512: file: 2195325e. */
6250 _bfd_error_handler
6251 (_("%pB: error: non-load segment %d includes file header "
6252 "and/or program header"),
6253 abfd, (int) (p - phdrs));
6254 return FALSE;
6255 }
6256
6257 p->p_filesz = 0;
6258 p->p_offset = m->sections[0]->filepos;
6259 for (i = m->count; i-- != 0;)
6260 {
6261 asection *sect = m->sections[i];
6262 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6263 if (hdr->sh_type != SHT_NOBITS)
6264 {
6265 p->p_filesz = (sect->filepos - m->sections[0]->filepos
6266 + hdr->sh_size);
6267 break;
6268 }
6269 }
6270 }
6271 }
6272 }
6273
6274 return TRUE;
6275 }
6276
6277 static elf_section_list *
6278 find_section_in_list (unsigned int i, elf_section_list * list)
6279 {
6280 for (;list != NULL; list = list->next)
6281 if (list->ndx == i)
6282 break;
6283 return list;
6284 }
6285
6286 /* Work out the file positions of all the sections. This is called by
6287 _bfd_elf_compute_section_file_positions. All the section sizes and
6288 VMAs must be known before this is called.
6289
6290 Reloc sections come in two flavours: Those processed specially as
6291 "side-channel" data attached to a section to which they apply, and those that
6292 bfd doesn't process as relocations. The latter sort are stored in a normal
6293 bfd section by bfd_section_from_shdr. We don't consider the former sort
6294 here, unless they form part of the loadable image. Reloc sections not
6295 assigned here (and compressed debugging sections and CTF sections which
6296 nothing else in the file can rely upon) will be handled later by
6297 assign_file_positions_for_relocs.
6298
6299 We also don't set the positions of the .symtab and .strtab here. */
6300
6301 static bfd_boolean
6302 assign_file_positions_except_relocs (bfd *abfd,
6303 struct bfd_link_info *link_info)
6304 {
6305 struct elf_obj_tdata *tdata = elf_tdata (abfd);
6306 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6307 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6308 unsigned int alloc;
6309
6310 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6311 && bfd_get_format (abfd) != bfd_core)
6312 {
6313 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6314 unsigned int num_sec = elf_numsections (abfd);
6315 Elf_Internal_Shdr **hdrpp;
6316 unsigned int i;
6317 file_ptr off;
6318
6319 /* Start after the ELF header. */
6320 off = i_ehdrp->e_ehsize;
6321
6322 /* We are not creating an executable, which means that we are
6323 not creating a program header, and that the actual order of
6324 the sections in the file is unimportant. */
6325 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6326 {
6327 Elf_Internal_Shdr *hdr;
6328
6329 hdr = *hdrpp;
6330 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6331 && hdr->bfd_section == NULL)
6332 /* Do not assign offsets for these sections yet: we don't know
6333 their sizes. */
6334 || (hdr->bfd_section != NULL
6335 && (hdr->bfd_section->flags & SEC_ELF_COMPRESS
6336 || (bfd_section_is_ctf (hdr->bfd_section)
6337 && abfd->is_linker_output)))
6338 || i == elf_onesymtab (abfd)
6339 || (elf_symtab_shndx_list (abfd) != NULL
6340 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6341 || i == elf_strtab_sec (abfd)
6342 || i == elf_shstrtab_sec (abfd))
6343 {
6344 hdr->sh_offset = -1;
6345 }
6346 else
6347 off = _bfd_elf_assign_file_position_for_section (hdr, off, TRUE);
6348 }
6349
6350 elf_next_file_pos (abfd) = off;
6351 elf_program_header_size (abfd) = 0;
6352 }
6353 else
6354 {
6355 /* Assign file positions for the loaded sections based on the
6356 assignment of sections to segments. */
6357 if (!assign_file_positions_for_load_sections (abfd, link_info))
6358 return FALSE;
6359
6360 /* And for non-load sections. */
6361 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6362 return FALSE;
6363 }
6364
6365 if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6366 return FALSE;
6367
6368 /* Write out the program headers. */
6369 alloc = i_ehdrp->e_phnum;
6370 if (alloc != 0)
6371 {
6372 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
6373 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
6374 return FALSE;
6375 }
6376
6377 return TRUE;
6378 }
6379
6380 bfd_boolean
6381 _bfd_elf_init_file_header (bfd *abfd,
6382 struct bfd_link_info *info ATTRIBUTE_UNUSED)
6383 {
6384 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
6385 struct elf_strtab_hash *shstrtab;
6386 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6387
6388 i_ehdrp = elf_elfheader (abfd);
6389
6390 shstrtab = _bfd_elf_strtab_init ();
6391 if (shstrtab == NULL)
6392 return FALSE;
6393
6394 elf_shstrtab (abfd) = shstrtab;
6395
6396 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
6397 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
6398 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
6399 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
6400
6401 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
6402 i_ehdrp->e_ident[EI_DATA] =
6403 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
6404 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
6405
6406 if ((abfd->flags & DYNAMIC) != 0)
6407 i_ehdrp->e_type = ET_DYN;
6408 else if ((abfd->flags & EXEC_P) != 0)
6409 i_ehdrp->e_type = ET_EXEC;
6410 else if (bfd_get_format (abfd) == bfd_core)
6411 i_ehdrp->e_type = ET_CORE;
6412 else
6413 i_ehdrp->e_type = ET_REL;
6414
6415 switch (bfd_get_arch (abfd))
6416 {
6417 case bfd_arch_unknown:
6418 i_ehdrp->e_machine = EM_NONE;
6419 break;
6420
6421 /* There used to be a long list of cases here, each one setting
6422 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
6423 in the corresponding bfd definition. To avoid duplication,
6424 the switch was removed. Machines that need special handling
6425 can generally do it in elf_backend_final_write_processing(),
6426 unless they need the information earlier than the final write.
6427 Such need can generally be supplied by replacing the tests for
6428 e_machine with the conditions used to determine it. */
6429 default:
6430 i_ehdrp->e_machine = bed->elf_machine_code;
6431 }
6432
6433 i_ehdrp->e_version = bed->s->ev_current;
6434 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
6435
6436 /* No program header, for now. */
6437 i_ehdrp->e_phoff = 0;
6438 i_ehdrp->e_phentsize = 0;
6439 i_ehdrp->e_phnum = 0;
6440
6441 /* Each bfd section is section header entry. */
6442 i_ehdrp->e_entry = bfd_get_start_address (abfd);
6443 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
6444
6445 elf_tdata (abfd)->symtab_hdr.sh_name =
6446 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE);
6447 elf_tdata (abfd)->strtab_hdr.sh_name =
6448 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", FALSE);
6449 elf_tdata (abfd)->shstrtab_hdr.sh_name =
6450 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", FALSE);
6451 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
6452 || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
6453 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
6454 return FALSE;
6455
6456 return TRUE;
6457 }
6458
6459 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
6460
6461 FIXME: We used to have code here to sort the PT_LOAD segments into
6462 ascending order, as per the ELF spec. But this breaks some programs,
6463 including the Linux kernel. But really either the spec should be
6464 changed or the programs updated. */
6465
6466 bfd_boolean
6467 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
6468 {
6469 if (link_info != NULL && bfd_link_pie (link_info))
6470 {
6471 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
6472 unsigned int num_segments = i_ehdrp->e_phnum;
6473 struct elf_obj_tdata *tdata = elf_tdata (obfd);
6474 Elf_Internal_Phdr *segment = tdata->phdr;
6475 Elf_Internal_Phdr *end_segment = &segment[num_segments];
6476
6477 /* Find the lowest p_vaddr in PT_LOAD segments. */
6478 bfd_vma p_vaddr = (bfd_vma) -1;
6479 for (; segment < end_segment; segment++)
6480 if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
6481 p_vaddr = segment->p_vaddr;
6482
6483 /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
6484 segments is non-zero. */
6485 if (p_vaddr)
6486 i_ehdrp->e_type = ET_EXEC;
6487 }
6488 return TRUE;
6489 }
6490
6491 /* Assign file positions for all the reloc sections which are not part
6492 of the loadable file image, and the file position of section headers. */
6493
6494 static bfd_boolean
6495 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
6496 {
6497 file_ptr off;
6498 Elf_Internal_Shdr **shdrpp, **end_shdrpp;
6499 Elf_Internal_Shdr *shdrp;
6500 Elf_Internal_Ehdr *i_ehdrp;
6501 const struct elf_backend_data *bed;
6502
6503 off = elf_next_file_pos (abfd);
6504
6505 shdrpp = elf_elfsections (abfd);
6506 end_shdrpp = shdrpp + elf_numsections (abfd);
6507 for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
6508 {
6509 shdrp = *shdrpp;
6510 if (shdrp->sh_offset == -1)
6511 {
6512 asection *sec = shdrp->bfd_section;
6513 bfd_boolean is_rel = (shdrp->sh_type == SHT_REL
6514 || shdrp->sh_type == SHT_RELA);
6515 bfd_boolean is_ctf = sec && bfd_section_is_ctf (sec);
6516 if (is_rel
6517 || is_ctf
6518 || (sec != NULL && (sec->flags & SEC_ELF_COMPRESS)))
6519 {
6520 if (!is_rel && !is_ctf)
6521 {
6522 const char *name = sec->name;
6523 struct bfd_elf_section_data *d;
6524
6525 /* Compress DWARF debug sections. */
6526 if (!bfd_compress_section (abfd, sec,
6527 shdrp->contents))
6528 return FALSE;
6529
6530 if (sec->compress_status == COMPRESS_SECTION_DONE
6531 && (abfd->flags & BFD_COMPRESS_GABI) == 0)
6532 {
6533 /* If section is compressed with zlib-gnu, convert
6534 section name from .debug_* to .zdebug_*. */
6535 char *new_name
6536 = convert_debug_to_zdebug (abfd, name);
6537 if (new_name == NULL)
6538 return FALSE;
6539 name = new_name;
6540 }
6541 /* Add section name to section name section. */
6542 if (shdrp->sh_name != (unsigned int) -1)
6543 abort ();
6544 shdrp->sh_name
6545 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
6546 name, FALSE);
6547 d = elf_section_data (sec);
6548
6549 /* Add reloc section name to section name section. */
6550 if (d->rel.hdr
6551 && !_bfd_elf_set_reloc_sh_name (abfd,
6552 d->rel.hdr,
6553 name, FALSE))
6554 return FALSE;
6555 if (d->rela.hdr
6556 && !_bfd_elf_set_reloc_sh_name (abfd,
6557 d->rela.hdr,
6558 name, TRUE))
6559 return FALSE;
6560
6561 /* Update section size and contents. */
6562 shdrp->sh_size = sec->size;
6563 shdrp->contents = sec->contents;
6564 shdrp->bfd_section->contents = NULL;
6565 }
6566 else if (is_ctf)
6567 {
6568 /* Update section size and contents. */
6569 shdrp->sh_size = sec->size;
6570 shdrp->contents = sec->contents;
6571 }
6572
6573 off = _bfd_elf_assign_file_position_for_section (shdrp,
6574 off,
6575 TRUE);
6576 }
6577 }
6578 }
6579
6580 /* Place section name section after DWARF debug sections have been
6581 compressed. */
6582 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
6583 shdrp = &elf_tdata (abfd)->shstrtab_hdr;
6584 shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
6585 off = _bfd_elf_assign_file_position_for_section (shdrp, off, TRUE);
6586
6587 /* Place the section headers. */
6588 i_ehdrp = elf_elfheader (abfd);
6589 bed = get_elf_backend_data (abfd);
6590 off = align_file_position (off, 1 << bed->s->log_file_align);
6591 i_ehdrp->e_shoff = off;
6592 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
6593 elf_next_file_pos (abfd) = off;
6594
6595 return TRUE;
6596 }
6597
6598 bfd_boolean
6599 _bfd_elf_write_object_contents (bfd *abfd)
6600 {
6601 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6602 Elf_Internal_Shdr **i_shdrp;
6603 bfd_boolean failed;
6604 unsigned int count, num_sec;
6605 struct elf_obj_tdata *t;
6606
6607 if (! abfd->output_has_begun
6608 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
6609 return FALSE;
6610 /* Do not rewrite ELF data when the BFD has been opened for update.
6611 abfd->output_has_begun was set to TRUE on opening, so creation of new
6612 sections, and modification of existing section sizes was restricted.
6613 This means the ELF header, program headers and section headers can't have
6614 changed.
6615 If the contents of any sections has been modified, then those changes have
6616 already been written to the BFD. */
6617 else if (abfd->direction == both_direction)
6618 {
6619 BFD_ASSERT (abfd->output_has_begun);
6620 return TRUE;
6621 }
6622
6623 i_shdrp = elf_elfsections (abfd);
6624
6625 failed = FALSE;
6626 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
6627 if (failed)
6628 return FALSE;
6629
6630 if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
6631 return FALSE;
6632
6633 /* After writing the headers, we need to write the sections too... */
6634 num_sec = elf_numsections (abfd);
6635 for (count = 1; count < num_sec; count++)
6636 {
6637 i_shdrp[count]->sh_name
6638 = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
6639 i_shdrp[count]->sh_name);
6640 if (bed->elf_backend_section_processing)
6641 if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
6642 return FALSE;
6643 if (i_shdrp[count]->contents)
6644 {
6645 bfd_size_type amt = i_shdrp[count]->sh_size;
6646
6647 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
6648 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
6649 return FALSE;
6650 }
6651 }
6652
6653 /* Write out the section header names. */
6654 t = elf_tdata (abfd);
6655 if (elf_shstrtab (abfd) != NULL
6656 && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
6657 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
6658 return FALSE;
6659
6660 if (!(*bed->elf_backend_final_write_processing) (abfd))
6661 return FALSE;
6662
6663 if (!bed->s->write_shdrs_and_ehdr (abfd))
6664 return FALSE;
6665
6666 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
6667 if (t->o->build_id.after_write_object_contents != NULL)
6668 return (*t->o->build_id.after_write_object_contents) (abfd);
6669
6670 return TRUE;
6671 }
6672
6673 bfd_boolean
6674 _bfd_elf_write_corefile_contents (bfd *abfd)
6675 {
6676 /* Hopefully this can be done just like an object file. */
6677 return _bfd_elf_write_object_contents (abfd);
6678 }
6679
6680 /* Given a section, search the header to find them. */
6681
6682 unsigned int
6683 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
6684 {
6685 const struct elf_backend_data *bed;
6686 unsigned int sec_index;
6687
6688 if (elf_section_data (asect) != NULL
6689 && elf_section_data (asect)->this_idx != 0)
6690 return elf_section_data (asect)->this_idx;
6691
6692 if (bfd_is_abs_section (asect))
6693 sec_index = SHN_ABS;
6694 else if (bfd_is_com_section (asect))
6695 sec_index = SHN_COMMON;
6696 else if (bfd_is_und_section (asect))
6697 sec_index = SHN_UNDEF;
6698 else
6699 sec_index = SHN_BAD;
6700
6701 bed = get_elf_backend_data (abfd);
6702 if (bed->elf_backend_section_from_bfd_section)
6703 {
6704 int retval = sec_index;
6705
6706 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
6707 return retval;
6708 }
6709
6710 if (sec_index == SHN_BAD)
6711 bfd_set_error (bfd_error_nonrepresentable_section);
6712
6713 return sec_index;
6714 }
6715
6716 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
6717 on error. */
6718
6719 int
6720 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
6721 {
6722 asymbol *asym_ptr = *asym_ptr_ptr;
6723 int idx;
6724 flagword flags = asym_ptr->flags;
6725
6726 /* When gas creates relocations against local labels, it creates its
6727 own symbol for the section, but does put the symbol into the
6728 symbol chain, so udata is 0. When the linker is generating
6729 relocatable output, this section symbol may be for one of the
6730 input sections rather than the output section. */
6731 if (asym_ptr->udata.i == 0
6732 && (flags & BSF_SECTION_SYM)
6733 && asym_ptr->section)
6734 {
6735 asection *sec;
6736 int indx;
6737
6738 sec = asym_ptr->section;
6739 if (sec->owner != abfd && sec->output_section != NULL)
6740 sec = sec->output_section;
6741 if (sec->owner == abfd
6742 && (indx = sec->index) < elf_num_section_syms (abfd)
6743 && elf_section_syms (abfd)[indx] != NULL)
6744 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
6745 }
6746
6747 idx = asym_ptr->udata.i;
6748
6749 if (idx == 0)
6750 {
6751 /* This case can occur when using --strip-symbol on a symbol
6752 which is used in a relocation entry. */
6753 _bfd_error_handler
6754 /* xgettext:c-format */
6755 (_("%pB: symbol `%s' required but not present"),
6756 abfd, bfd_asymbol_name (asym_ptr));
6757 bfd_set_error (bfd_error_no_symbols);
6758 return -1;
6759 }
6760
6761 #if DEBUG & 4
6762 {
6763 fprintf (stderr,
6764 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8x\n",
6765 (long) asym_ptr, asym_ptr->name, idx, flags);
6766 fflush (stderr);
6767 }
6768 #endif
6769
6770 return idx;
6771 }
6772
6773 /* Rewrite program header information. */
6774
6775 static bfd_boolean
6776 rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
6777 {
6778 Elf_Internal_Ehdr *iehdr;
6779 struct elf_segment_map *map;
6780 struct elf_segment_map *map_first;
6781 struct elf_segment_map **pointer_to_map;
6782 Elf_Internal_Phdr *segment;
6783 asection *section;
6784 unsigned int i;
6785 unsigned int num_segments;
6786 bfd_boolean phdr_included = FALSE;
6787 bfd_boolean p_paddr_valid;
6788 bfd_vma maxpagesize;
6789 struct elf_segment_map *phdr_adjust_seg = NULL;
6790 unsigned int phdr_adjust_num = 0;
6791 const struct elf_backend_data *bed;
6792
6793 bed = get_elf_backend_data (ibfd);
6794 iehdr = elf_elfheader (ibfd);
6795
6796 map_first = NULL;
6797 pointer_to_map = &map_first;
6798
6799 num_segments = elf_elfheader (ibfd)->e_phnum;
6800 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
6801
6802 /* Returns the end address of the segment + 1. */
6803 #define SEGMENT_END(segment, start) \
6804 (start + (segment->p_memsz > segment->p_filesz \
6805 ? segment->p_memsz : segment->p_filesz))
6806
6807 #define SECTION_SIZE(section, segment) \
6808 (((section->flags & (SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) \
6809 != SEC_THREAD_LOCAL || segment->p_type == PT_TLS) \
6810 ? section->size : 0)
6811
6812 /* Returns TRUE if the given section is contained within
6813 the given segment. VMA addresses are compared. */
6814 #define IS_CONTAINED_BY_VMA(section, segment) \
6815 (section->vma >= segment->p_vaddr \
6816 && (section->vma + SECTION_SIZE (section, segment) \
6817 <= (SEGMENT_END (segment, segment->p_vaddr))))
6818
6819 /* Returns TRUE if the given section is contained within
6820 the given segment. LMA addresses are compared. */
6821 #define IS_CONTAINED_BY_LMA(section, segment, base) \
6822 (section->lma >= base \
6823 && (section->lma + SECTION_SIZE (section, segment) >= section->lma) \
6824 && (section->lma + SECTION_SIZE (section, segment) \
6825 <= SEGMENT_END (segment, base)))
6826
6827 /* Handle PT_NOTE segment. */
6828 #define IS_NOTE(p, s) \
6829 (p->p_type == PT_NOTE \
6830 && elf_section_type (s) == SHT_NOTE \
6831 && (bfd_vma) s->filepos >= p->p_offset \
6832 && ((bfd_vma) s->filepos + s->size \
6833 <= p->p_offset + p->p_filesz))
6834
6835 /* Special case: corefile "NOTE" section containing regs, prpsinfo
6836 etc. */
6837 #define IS_COREFILE_NOTE(p, s) \
6838 (IS_NOTE (p, s) \
6839 && bfd_get_format (ibfd) == bfd_core \
6840 && s->vma == 0 \
6841 && s->lma == 0)
6842
6843 /* The complicated case when p_vaddr is 0 is to handle the Solaris
6844 linker, which generates a PT_INTERP section with p_vaddr and
6845 p_memsz set to 0. */
6846 #define IS_SOLARIS_PT_INTERP(p, s) \
6847 (p->p_vaddr == 0 \
6848 && p->p_paddr == 0 \
6849 && p->p_memsz == 0 \
6850 && p->p_filesz > 0 \
6851 && (s->flags & SEC_HAS_CONTENTS) != 0 \
6852 && s->size > 0 \
6853 && (bfd_vma) s->filepos >= p->p_offset \
6854 && ((bfd_vma) s->filepos + s->size \
6855 <= p->p_offset + p->p_filesz))
6856
6857 /* Decide if the given section should be included in the given segment.
6858 A section will be included if:
6859 1. It is within the address space of the segment -- we use the LMA
6860 if that is set for the segment and the VMA otherwise,
6861 2. It is an allocated section or a NOTE section in a PT_NOTE
6862 segment.
6863 3. There is an output section associated with it,
6864 4. The section has not already been allocated to a previous segment.
6865 5. PT_GNU_STACK segments do not include any sections.
6866 6. PT_TLS segment includes only SHF_TLS sections.
6867 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
6868 8. PT_DYNAMIC should not contain empty sections at the beginning
6869 (with the possible exception of .dynamic). */
6870 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed) \
6871 ((((segment->p_paddr \
6872 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
6873 : IS_CONTAINED_BY_VMA (section, segment)) \
6874 && (section->flags & SEC_ALLOC) != 0) \
6875 || IS_NOTE (segment, section)) \
6876 && segment->p_type != PT_GNU_STACK \
6877 && (segment->p_type != PT_TLS \
6878 || (section->flags & SEC_THREAD_LOCAL)) \
6879 && (segment->p_type == PT_LOAD \
6880 || segment->p_type == PT_TLS \
6881 || (section->flags & SEC_THREAD_LOCAL) == 0) \
6882 && (segment->p_type != PT_DYNAMIC \
6883 || SECTION_SIZE (section, segment) > 0 \
6884 || (segment->p_paddr \
6885 ? segment->p_paddr != section->lma \
6886 : segment->p_vaddr != section->vma) \
6887 || (strcmp (bfd_section_name (section), ".dynamic") == 0)) \
6888 && (segment->p_type != PT_LOAD || !section->segment_mark))
6889
6890 /* If the output section of a section in the input segment is NULL,
6891 it is removed from the corresponding output segment. */
6892 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
6893 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed) \
6894 && section->output_section != NULL)
6895
6896 /* Returns TRUE iff seg1 starts after the end of seg2. */
6897 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
6898 (seg1->field >= SEGMENT_END (seg2, seg2->field))
6899
6900 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
6901 their VMA address ranges and their LMA address ranges overlap.
6902 It is possible to have overlapping VMA ranges without overlapping LMA
6903 ranges. RedBoot images for example can have both .data and .bss mapped
6904 to the same VMA range, but with the .data section mapped to a different
6905 LMA. */
6906 #define SEGMENT_OVERLAPS(seg1, seg2) \
6907 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
6908 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
6909 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
6910 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
6911
6912 /* Initialise the segment mark field. */
6913 for (section = ibfd->sections; section != NULL; section = section->next)
6914 section->segment_mark = FALSE;
6915
6916 /* The Solaris linker creates program headers in which all the
6917 p_paddr fields are zero. When we try to objcopy or strip such a
6918 file, we get confused. Check for this case, and if we find it
6919 don't set the p_paddr_valid fields. */
6920 p_paddr_valid = FALSE;
6921 for (i = 0, segment = elf_tdata (ibfd)->phdr;
6922 i < num_segments;
6923 i++, segment++)
6924 if (segment->p_paddr != 0)
6925 {
6926 p_paddr_valid = TRUE;
6927 break;
6928 }
6929
6930 /* Scan through the segments specified in the program header
6931 of the input BFD. For this first scan we look for overlaps
6932 in the loadable segments. These can be created by weird
6933 parameters to objcopy. Also, fix some solaris weirdness. */
6934 for (i = 0, segment = elf_tdata (ibfd)->phdr;
6935 i < num_segments;
6936 i++, segment++)
6937 {
6938 unsigned int j;
6939 Elf_Internal_Phdr *segment2;
6940
6941 if (segment->p_type == PT_INTERP)
6942 for (section = ibfd->sections; section; section = section->next)
6943 if (IS_SOLARIS_PT_INTERP (segment, section))
6944 {
6945 /* Mininal change so that the normal section to segment
6946 assignment code will work. */
6947 segment->p_vaddr = section->vma;
6948 break;
6949 }
6950
6951 if (segment->p_type != PT_LOAD)
6952 {
6953 /* Remove PT_GNU_RELRO segment. */
6954 if (segment->p_type == PT_GNU_RELRO)
6955 segment->p_type = PT_NULL;
6956 continue;
6957 }
6958
6959 /* Determine if this segment overlaps any previous segments. */
6960 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
6961 {
6962 bfd_signed_vma extra_length;
6963
6964 if (segment2->p_type != PT_LOAD
6965 || !SEGMENT_OVERLAPS (segment, segment2))
6966 continue;
6967
6968 /* Merge the two segments together. */
6969 if (segment2->p_vaddr < segment->p_vaddr)
6970 {
6971 /* Extend SEGMENT2 to include SEGMENT and then delete
6972 SEGMENT. */
6973 extra_length = (SEGMENT_END (segment, segment->p_vaddr)
6974 - SEGMENT_END (segment2, segment2->p_vaddr));
6975
6976 if (extra_length > 0)
6977 {
6978 segment2->p_memsz += extra_length;
6979 segment2->p_filesz += extra_length;
6980 }
6981
6982 segment->p_type = PT_NULL;
6983
6984 /* Since we have deleted P we must restart the outer loop. */
6985 i = 0;
6986 segment = elf_tdata (ibfd)->phdr;
6987 break;
6988 }
6989 else
6990 {
6991 /* Extend SEGMENT to include SEGMENT2 and then delete
6992 SEGMENT2. */
6993 extra_length = (SEGMENT_END (segment2, segment2->p_vaddr)
6994 - SEGMENT_END (segment, segment->p_vaddr));
6995
6996 if (extra_length > 0)
6997 {
6998 segment->p_memsz += extra_length;
6999 segment->p_filesz += extra_length;
7000 }
7001
7002 segment2->p_type = PT_NULL;
7003 }
7004 }
7005 }
7006
7007 /* The second scan attempts to assign sections to segments. */
7008 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7009 i < num_segments;
7010 i++, segment++)
7011 {
7012 unsigned int section_count;
7013 asection **sections;
7014 asection *output_section;
7015 unsigned int isec;
7016 asection *matching_lma;
7017 asection *suggested_lma;
7018 unsigned int j;
7019 size_t amt;
7020 asection *first_section;
7021
7022 if (segment->p_type == PT_NULL)
7023 continue;
7024
7025 first_section = NULL;
7026 /* Compute how many sections might be placed into this segment. */
7027 for (section = ibfd->sections, section_count = 0;
7028 section != NULL;
7029 section = section->next)
7030 {
7031 /* Find the first section in the input segment, which may be
7032 removed from the corresponding output segment. */
7033 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, bed))
7034 {
7035 if (first_section == NULL)
7036 first_section = section;
7037 if (section->output_section != NULL)
7038 ++section_count;
7039 }
7040 }
7041
7042 /* Allocate a segment map big enough to contain
7043 all of the sections we have selected. */
7044 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7045 amt += section_count * sizeof (asection *);
7046 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7047 if (map == NULL)
7048 return FALSE;
7049
7050 /* Initialise the fields of the segment map. Default to
7051 using the physical address of the segment in the input BFD. */
7052 map->next = NULL;
7053 map->p_type = segment->p_type;
7054 map->p_flags = segment->p_flags;
7055 map->p_flags_valid = 1;
7056
7057 /* If the first section in the input segment is removed, there is
7058 no need to preserve segment physical address in the corresponding
7059 output segment. */
7060 if (!first_section || first_section->output_section != NULL)
7061 {
7062 map->p_paddr = segment->p_paddr;
7063 map->p_paddr_valid = p_paddr_valid;
7064 }
7065
7066 /* Determine if this segment contains the ELF file header
7067 and if it contains the program headers themselves. */
7068 map->includes_filehdr = (segment->p_offset == 0
7069 && segment->p_filesz >= iehdr->e_ehsize);
7070 map->includes_phdrs = 0;
7071
7072 if (!phdr_included || segment->p_type != PT_LOAD)
7073 {
7074 map->includes_phdrs =
7075 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7076 && (segment->p_offset + segment->p_filesz
7077 >= ((bfd_vma) iehdr->e_phoff
7078 + iehdr->e_phnum * iehdr->e_phentsize)));
7079
7080 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7081 phdr_included = TRUE;
7082 }
7083
7084 if (section_count == 0)
7085 {
7086 /* Special segments, such as the PT_PHDR segment, may contain
7087 no sections, but ordinary, loadable segments should contain
7088 something. They are allowed by the ELF spec however, so only
7089 a warning is produced.
7090 There is however the valid use case of embedded systems which
7091 have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7092 flash memory with zeros. No warning is shown for that case. */
7093 if (segment->p_type == PT_LOAD
7094 && (segment->p_filesz > 0 || segment->p_memsz == 0))
7095 /* xgettext:c-format */
7096 _bfd_error_handler
7097 (_("%pB: warning: empty loadable segment detected"
7098 " at vaddr=%#" PRIx64 ", is this intentional?"),
7099 ibfd, (uint64_t) segment->p_vaddr);
7100
7101 map->p_vaddr_offset = segment->p_vaddr;
7102 map->count = 0;
7103 *pointer_to_map = map;
7104 pointer_to_map = &map->next;
7105
7106 continue;
7107 }
7108
7109 /* Now scan the sections in the input BFD again and attempt
7110 to add their corresponding output sections to the segment map.
7111 The problem here is how to handle an output section which has
7112 been moved (ie had its LMA changed). There are four possibilities:
7113
7114 1. None of the sections have been moved.
7115 In this case we can continue to use the segment LMA from the
7116 input BFD.
7117
7118 2. All of the sections have been moved by the same amount.
7119 In this case we can change the segment's LMA to match the LMA
7120 of the first section.
7121
7122 3. Some of the sections have been moved, others have not.
7123 In this case those sections which have not been moved can be
7124 placed in the current segment which will have to have its size,
7125 and possibly its LMA changed, and a new segment or segments will
7126 have to be created to contain the other sections.
7127
7128 4. The sections have been moved, but not by the same amount.
7129 In this case we can change the segment's LMA to match the LMA
7130 of the first section and we will have to create a new segment
7131 or segments to contain the other sections.
7132
7133 In order to save time, we allocate an array to hold the section
7134 pointers that we are interested in. As these sections get assigned
7135 to a segment, they are removed from this array. */
7136
7137 amt = section_count * sizeof (asection *);
7138 sections = (asection **) bfd_malloc (amt);
7139 if (sections == NULL)
7140 return FALSE;
7141
7142 /* Step One: Scan for segment vs section LMA conflicts.
7143 Also add the sections to the section array allocated above.
7144 Also add the sections to the current segment. In the common
7145 case, where the sections have not been moved, this means that
7146 we have completely filled the segment, and there is nothing
7147 more to do. */
7148 isec = 0;
7149 matching_lma = NULL;
7150 suggested_lma = NULL;
7151
7152 for (section = first_section, j = 0;
7153 section != NULL;
7154 section = section->next)
7155 {
7156 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
7157 {
7158 output_section = section->output_section;
7159
7160 sections[j++] = section;
7161
7162 /* The Solaris native linker always sets p_paddr to 0.
7163 We try to catch that case here, and set it to the
7164 correct value. Note - some backends require that
7165 p_paddr be left as zero. */
7166 if (!p_paddr_valid
7167 && segment->p_vaddr != 0
7168 && !bed->want_p_paddr_set_to_zero
7169 && isec == 0
7170 && output_section->lma != 0
7171 && (align_power (segment->p_vaddr
7172 + (map->includes_filehdr
7173 ? iehdr->e_ehsize : 0)
7174 + (map->includes_phdrs
7175 ? iehdr->e_phnum * iehdr->e_phentsize
7176 : 0),
7177 output_section->alignment_power)
7178 == output_section->vma))
7179 map->p_paddr = segment->p_vaddr;
7180
7181 /* Match up the physical address of the segment with the
7182 LMA address of the output section. */
7183 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
7184 || IS_COREFILE_NOTE (segment, section)
7185 || (bed->want_p_paddr_set_to_zero
7186 && IS_CONTAINED_BY_VMA (output_section, segment)))
7187 {
7188 if (matching_lma == NULL
7189 || output_section->lma < matching_lma->lma)
7190 matching_lma = output_section;
7191
7192 /* We assume that if the section fits within the segment
7193 then it does not overlap any other section within that
7194 segment. */
7195 map->sections[isec++] = output_section;
7196 }
7197 else if (suggested_lma == NULL)
7198 suggested_lma = output_section;
7199
7200 if (j == section_count)
7201 break;
7202 }
7203 }
7204
7205 BFD_ASSERT (j == section_count);
7206
7207 /* Step Two: Adjust the physical address of the current segment,
7208 if necessary. */
7209 if (isec == section_count)
7210 {
7211 /* All of the sections fitted within the segment as currently
7212 specified. This is the default case. Add the segment to
7213 the list of built segments and carry on to process the next
7214 program header in the input BFD. */
7215 map->count = section_count;
7216 *pointer_to_map = map;
7217 pointer_to_map = &map->next;
7218
7219 if (p_paddr_valid
7220 && !bed->want_p_paddr_set_to_zero)
7221 {
7222 bfd_vma hdr_size = 0;
7223 if (map->includes_filehdr)
7224 hdr_size = iehdr->e_ehsize;
7225 if (map->includes_phdrs)
7226 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7227
7228 /* Account for padding before the first section in the
7229 segment. */
7230 map->p_vaddr_offset = map->p_paddr + hdr_size - matching_lma->lma;
7231 }
7232
7233 free (sections);
7234 continue;
7235 }
7236 else
7237 {
7238 /* Change the current segment's physical address to match
7239 the LMA of the first section that fitted, or if no
7240 section fitted, the first section. */
7241 if (matching_lma == NULL)
7242 matching_lma = suggested_lma;
7243
7244 map->p_paddr = matching_lma->lma;
7245
7246 /* Offset the segment physical address from the lma
7247 to allow for space taken up by elf headers. */
7248 if (map->includes_phdrs)
7249 {
7250 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7251
7252 /* iehdr->e_phnum is just an estimate of the number
7253 of program headers that we will need. Make a note
7254 here of the number we used and the segment we chose
7255 to hold these headers, so that we can adjust the
7256 offset when we know the correct value. */
7257 phdr_adjust_num = iehdr->e_phnum;
7258 phdr_adjust_seg = map;
7259 }
7260
7261 if (map->includes_filehdr)
7262 {
7263 bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7264 map->p_paddr -= iehdr->e_ehsize;
7265 /* We've subtracted off the size of headers from the
7266 first section lma, but there may have been some
7267 alignment padding before that section too. Try to
7268 account for that by adjusting the segment lma down to
7269 the same alignment. */
7270 if (segment->p_align != 0 && segment->p_align < align)
7271 align = segment->p_align;
7272 map->p_paddr &= -align;
7273 }
7274 }
7275
7276 /* Step Three: Loop over the sections again, this time assigning
7277 those that fit to the current segment and removing them from the
7278 sections array; but making sure not to leave large gaps. Once all
7279 possible sections have been assigned to the current segment it is
7280 added to the list of built segments and if sections still remain
7281 to be assigned, a new segment is constructed before repeating
7282 the loop. */
7283 isec = 0;
7284 do
7285 {
7286 map->count = 0;
7287 suggested_lma = NULL;
7288
7289 /* Fill the current segment with sections that fit. */
7290 for (j = 0; j < section_count; j++)
7291 {
7292 section = sections[j];
7293
7294 if (section == NULL)
7295 continue;
7296
7297 output_section = section->output_section;
7298
7299 BFD_ASSERT (output_section != NULL);
7300
7301 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
7302 || IS_COREFILE_NOTE (segment, section))
7303 {
7304 if (map->count == 0)
7305 {
7306 /* If the first section in a segment does not start at
7307 the beginning of the segment, then something is
7308 wrong. */
7309 if (align_power (map->p_paddr
7310 + (map->includes_filehdr
7311 ? iehdr->e_ehsize : 0)
7312 + (map->includes_phdrs
7313 ? iehdr->e_phnum * iehdr->e_phentsize
7314 : 0),
7315 output_section->alignment_power)
7316 != output_section->lma)
7317 goto sorry;
7318 }
7319 else
7320 {
7321 asection *prev_sec;
7322
7323 prev_sec = map->sections[map->count - 1];
7324
7325 /* If the gap between the end of the previous section
7326 and the start of this section is more than
7327 maxpagesize then we need to start a new segment. */
7328 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
7329 maxpagesize)
7330 < BFD_ALIGN (output_section->lma, maxpagesize))
7331 || (prev_sec->lma + prev_sec->size
7332 > output_section->lma))
7333 {
7334 if (suggested_lma == NULL)
7335 suggested_lma = output_section;
7336
7337 continue;
7338 }
7339 }
7340
7341 map->sections[map->count++] = output_section;
7342 ++isec;
7343 sections[j] = NULL;
7344 if (segment->p_type == PT_LOAD)
7345 section->segment_mark = TRUE;
7346 }
7347 else if (suggested_lma == NULL)
7348 suggested_lma = output_section;
7349 }
7350
7351 /* PR 23932. A corrupt input file may contain sections that cannot
7352 be assigned to any segment - because for example they have a
7353 negative size - or segments that do not contain any sections.
7354 But there are also valid reasons why a segment can be empty.
7355 So allow a count of zero. */
7356
7357 /* Add the current segment to the list of built segments. */
7358 *pointer_to_map = map;
7359 pointer_to_map = &map->next;
7360
7361 if (isec < section_count)
7362 {
7363 /* We still have not allocated all of the sections to
7364 segments. Create a new segment here, initialise it
7365 and carry on looping. */
7366 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7367 amt += section_count * sizeof (asection *);
7368 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7369 if (map == NULL)
7370 {
7371 free (sections);
7372 return FALSE;
7373 }
7374
7375 /* Initialise the fields of the segment map. Set the physical
7376 physical address to the LMA of the first section that has
7377 not yet been assigned. */
7378 map->next = NULL;
7379 map->p_type = segment->p_type;
7380 map->p_flags = segment->p_flags;
7381 map->p_flags_valid = 1;
7382 map->p_paddr = suggested_lma->lma;
7383 map->p_paddr_valid = p_paddr_valid;
7384 map->includes_filehdr = 0;
7385 map->includes_phdrs = 0;
7386 }
7387
7388 continue;
7389 sorry:
7390 bfd_set_error (bfd_error_sorry);
7391 free (sections);
7392 return FALSE;
7393 }
7394 while (isec < section_count);
7395
7396 free (sections);
7397 }
7398
7399 elf_seg_map (obfd) = map_first;
7400
7401 /* If we had to estimate the number of program headers that were
7402 going to be needed, then check our estimate now and adjust
7403 the offset if necessary. */
7404 if (phdr_adjust_seg != NULL)
7405 {
7406 unsigned int count;
7407
7408 for (count = 0, map = map_first; map != NULL; map = map->next)
7409 count++;
7410
7411 if (count > phdr_adjust_num)
7412 phdr_adjust_seg->p_paddr
7413 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
7414
7415 for (map = map_first; map != NULL; map = map->next)
7416 if (map->p_type == PT_PHDR)
7417 {
7418 bfd_vma adjust
7419 = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
7420 map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
7421 break;
7422 }
7423 }
7424
7425 #undef SEGMENT_END
7426 #undef SECTION_SIZE
7427 #undef IS_CONTAINED_BY_VMA
7428 #undef IS_CONTAINED_BY_LMA
7429 #undef IS_NOTE
7430 #undef IS_COREFILE_NOTE
7431 #undef IS_SOLARIS_PT_INTERP
7432 #undef IS_SECTION_IN_INPUT_SEGMENT
7433 #undef INCLUDE_SECTION_IN_SEGMENT
7434 #undef SEGMENT_AFTER_SEGMENT
7435 #undef SEGMENT_OVERLAPS
7436 return TRUE;
7437 }
7438
7439 /* Copy ELF program header information. */
7440
7441 static bfd_boolean
7442 copy_elf_program_header (bfd *ibfd, bfd *obfd)
7443 {
7444 Elf_Internal_Ehdr *iehdr;
7445 struct elf_segment_map *map;
7446 struct elf_segment_map *map_first;
7447 struct elf_segment_map **pointer_to_map;
7448 Elf_Internal_Phdr *segment;
7449 unsigned int i;
7450 unsigned int num_segments;
7451 bfd_boolean phdr_included = FALSE;
7452 bfd_boolean p_paddr_valid;
7453
7454 iehdr = elf_elfheader (ibfd);
7455
7456 map_first = NULL;
7457 pointer_to_map = &map_first;
7458
7459 /* If all the segment p_paddr fields are zero, don't set
7460 map->p_paddr_valid. */
7461 p_paddr_valid = FALSE;
7462 num_segments = elf_elfheader (ibfd)->e_phnum;
7463 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7464 i < num_segments;
7465 i++, segment++)
7466 if (segment->p_paddr != 0)
7467 {
7468 p_paddr_valid = TRUE;
7469 break;
7470 }
7471
7472 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7473 i < num_segments;
7474 i++, segment++)
7475 {
7476 asection *section;
7477 unsigned int section_count;
7478 size_t amt;
7479 Elf_Internal_Shdr *this_hdr;
7480 asection *first_section = NULL;
7481 asection *lowest_section;
7482
7483 /* Compute how many sections are in this segment. */
7484 for (section = ibfd->sections, section_count = 0;
7485 section != NULL;
7486 section = section->next)
7487 {
7488 this_hdr = &(elf_section_data(section)->this_hdr);
7489 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7490 {
7491 if (first_section == NULL)
7492 first_section = section;
7493 section_count++;
7494 }
7495 }
7496
7497 /* Allocate a segment map big enough to contain
7498 all of the sections we have selected. */
7499 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7500 amt += section_count * sizeof (asection *);
7501 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7502 if (map == NULL)
7503 return FALSE;
7504
7505 /* Initialize the fields of the output segment map with the
7506 input segment. */
7507 map->next = NULL;
7508 map->p_type = segment->p_type;
7509 map->p_flags = segment->p_flags;
7510 map->p_flags_valid = 1;
7511 map->p_paddr = segment->p_paddr;
7512 map->p_paddr_valid = p_paddr_valid;
7513 map->p_align = segment->p_align;
7514 map->p_align_valid = 1;
7515 map->p_vaddr_offset = 0;
7516
7517 if (map->p_type == PT_GNU_RELRO
7518 || map->p_type == PT_GNU_STACK)
7519 {
7520 /* The PT_GNU_RELRO segment may contain the first a few
7521 bytes in the .got.plt section even if the whole .got.plt
7522 section isn't in the PT_GNU_RELRO segment. We won't
7523 change the size of the PT_GNU_RELRO segment.
7524 Similarly, PT_GNU_STACK size is significant on uclinux
7525 systems. */
7526 map->p_size = segment->p_memsz;
7527 map->p_size_valid = 1;
7528 }
7529
7530 /* Determine if this segment contains the ELF file header
7531 and if it contains the program headers themselves. */
7532 map->includes_filehdr = (segment->p_offset == 0
7533 && segment->p_filesz >= iehdr->e_ehsize);
7534
7535 map->includes_phdrs = 0;
7536 if (! phdr_included || segment->p_type != PT_LOAD)
7537 {
7538 map->includes_phdrs =
7539 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7540 && (segment->p_offset + segment->p_filesz
7541 >= ((bfd_vma) iehdr->e_phoff
7542 + iehdr->e_phnum * iehdr->e_phentsize)));
7543
7544 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7545 phdr_included = TRUE;
7546 }
7547
7548 lowest_section = NULL;
7549 if (section_count != 0)
7550 {
7551 unsigned int isec = 0;
7552
7553 for (section = first_section;
7554 section != NULL;
7555 section = section->next)
7556 {
7557 this_hdr = &(elf_section_data(section)->this_hdr);
7558 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7559 {
7560 map->sections[isec++] = section->output_section;
7561 if ((section->flags & SEC_ALLOC) != 0)
7562 {
7563 bfd_vma seg_off;
7564
7565 if (lowest_section == NULL
7566 || section->lma < lowest_section->lma)
7567 lowest_section = section;
7568
7569 /* Section lmas are set up from PT_LOAD header
7570 p_paddr in _bfd_elf_make_section_from_shdr.
7571 If this header has a p_paddr that disagrees
7572 with the section lma, flag the p_paddr as
7573 invalid. */
7574 if ((section->flags & SEC_LOAD) != 0)
7575 seg_off = this_hdr->sh_offset - segment->p_offset;
7576 else
7577 seg_off = this_hdr->sh_addr - segment->p_vaddr;
7578 if (section->lma - segment->p_paddr != seg_off)
7579 map->p_paddr_valid = FALSE;
7580 }
7581 if (isec == section_count)
7582 break;
7583 }
7584 }
7585 }
7586
7587 if (section_count == 0)
7588 map->p_vaddr_offset = segment->p_vaddr;
7589 else if (map->p_paddr_valid)
7590 {
7591 /* Account for padding before the first section in the segment. */
7592 bfd_vma hdr_size = 0;
7593 if (map->includes_filehdr)
7594 hdr_size = iehdr->e_ehsize;
7595 if (map->includes_phdrs)
7596 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7597
7598 map->p_vaddr_offset = (map->p_paddr + hdr_size
7599 - (lowest_section ? lowest_section->lma : 0));
7600 }
7601
7602 map->count = section_count;
7603 *pointer_to_map = map;
7604 pointer_to_map = &map->next;
7605 }
7606
7607 elf_seg_map (obfd) = map_first;
7608 return TRUE;
7609 }
7610
7611 /* Copy private BFD data. This copies or rewrites ELF program header
7612 information. */
7613
7614 static bfd_boolean
7615 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
7616 {
7617 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7618 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7619 return TRUE;
7620
7621 if (elf_tdata (ibfd)->phdr == NULL)
7622 return TRUE;
7623
7624 if (ibfd->xvec == obfd->xvec)
7625 {
7626 /* Check to see if any sections in the input BFD
7627 covered by ELF program header have changed. */
7628 Elf_Internal_Phdr *segment;
7629 asection *section, *osec;
7630 unsigned int i, num_segments;
7631 Elf_Internal_Shdr *this_hdr;
7632 const struct elf_backend_data *bed;
7633
7634 bed = get_elf_backend_data (ibfd);
7635
7636 /* Regenerate the segment map if p_paddr is set to 0. */
7637 if (bed->want_p_paddr_set_to_zero)
7638 goto rewrite;
7639
7640 /* Initialize the segment mark field. */
7641 for (section = obfd->sections; section != NULL;
7642 section = section->next)
7643 section->segment_mark = FALSE;
7644
7645 num_segments = elf_elfheader (ibfd)->e_phnum;
7646 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7647 i < num_segments;
7648 i++, segment++)
7649 {
7650 /* PR binutils/3535. The Solaris linker always sets the p_paddr
7651 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
7652 which severly confuses things, so always regenerate the segment
7653 map in this case. */
7654 if (segment->p_paddr == 0
7655 && segment->p_memsz == 0
7656 && (segment->p_type == PT_INTERP || segment->p_type == PT_DYNAMIC))
7657 goto rewrite;
7658
7659 for (section = ibfd->sections;
7660 section != NULL; section = section->next)
7661 {
7662 /* We mark the output section so that we know it comes
7663 from the input BFD. */
7664 osec = section->output_section;
7665 if (osec)
7666 osec->segment_mark = TRUE;
7667
7668 /* Check if this section is covered by the segment. */
7669 this_hdr = &(elf_section_data(section)->this_hdr);
7670 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
7671 {
7672 /* FIXME: Check if its output section is changed or
7673 removed. What else do we need to check? */
7674 if (osec == NULL
7675 || section->flags != osec->flags
7676 || section->lma != osec->lma
7677 || section->vma != osec->vma
7678 || section->size != osec->size
7679 || section->rawsize != osec->rawsize
7680 || section->alignment_power != osec->alignment_power)
7681 goto rewrite;
7682 }
7683 }
7684 }
7685
7686 /* Check to see if any output section do not come from the
7687 input BFD. */
7688 for (section = obfd->sections; section != NULL;
7689 section = section->next)
7690 {
7691 if (!section->segment_mark)
7692 goto rewrite;
7693 else
7694 section->segment_mark = FALSE;
7695 }
7696
7697 return copy_elf_program_header (ibfd, obfd);
7698 }
7699
7700 rewrite:
7701 if (ibfd->xvec == obfd->xvec)
7702 {
7703 /* When rewriting program header, set the output maxpagesize to
7704 the maximum alignment of input PT_LOAD segments. */
7705 Elf_Internal_Phdr *segment;
7706 unsigned int i;
7707 unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
7708 bfd_vma maxpagesize = 0;
7709
7710 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7711 i < num_segments;
7712 i++, segment++)
7713 if (segment->p_type == PT_LOAD
7714 && maxpagesize < segment->p_align)
7715 {
7716 /* PR 17512: file: f17299af. */
7717 if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
7718 /* xgettext:c-format */
7719 _bfd_error_handler (_("%pB: warning: segment alignment of %#"
7720 PRIx64 " is too large"),
7721 ibfd, (uint64_t) segment->p_align);
7722 else
7723 maxpagesize = segment->p_align;
7724 }
7725
7726 if (maxpagesize != get_elf_backend_data (obfd)->maxpagesize)
7727 bfd_emul_set_maxpagesize (bfd_get_target (obfd), maxpagesize);
7728 }
7729
7730 return rewrite_elf_program_header (ibfd, obfd);
7731 }
7732
7733 /* Initialize private output section information from input section. */
7734
7735 bfd_boolean
7736 _bfd_elf_init_private_section_data (bfd *ibfd,
7737 asection *isec,
7738 bfd *obfd,
7739 asection *osec,
7740 struct bfd_link_info *link_info)
7741
7742 {
7743 Elf_Internal_Shdr *ihdr, *ohdr;
7744 bfd_boolean final_link = (link_info != NULL
7745 && !bfd_link_relocatable (link_info));
7746
7747 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7748 || obfd->xvec->flavour != bfd_target_elf_flavour)
7749 return TRUE;
7750
7751 BFD_ASSERT (elf_section_data (osec) != NULL);
7752
7753 /* If this is a known ABI section, ELF section type and flags may
7754 have been set up when OSEC was created. For normal sections we
7755 allow the user to override the type and flags other than
7756 SHF_MASKOS and SHF_MASKPROC. */
7757 if (elf_section_type (osec) == SHT_PROGBITS
7758 || elf_section_type (osec) == SHT_NOTE
7759 || elf_section_type (osec) == SHT_NOBITS)
7760 elf_section_type (osec) = SHT_NULL;
7761 /* For objcopy and relocatable link, copy the ELF section type from
7762 the input file if the BFD section flags are the same. (If they
7763 are different the user may be doing something like
7764 "objcopy --set-section-flags .text=alloc,data".) For a final
7765 link allow some flags that the linker clears to differ. */
7766 if (elf_section_type (osec) == SHT_NULL
7767 && (osec->flags == isec->flags
7768 || (final_link
7769 && ((osec->flags ^ isec->flags)
7770 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
7771 elf_section_type (osec) = elf_section_type (isec);
7772
7773 /* FIXME: Is this correct for all OS/PROC specific flags? */
7774 elf_section_flags (osec) = (elf_section_flags (isec)
7775 & (SHF_MASKOS | SHF_MASKPROC));
7776
7777 /* Copy sh_info from input for mbind section. */
7778 if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
7779 && elf_section_flags (isec) & SHF_GNU_MBIND)
7780 elf_section_data (osec)->this_hdr.sh_info
7781 = elf_section_data (isec)->this_hdr.sh_info;
7782
7783 /* Set things up for objcopy and relocatable link. The output
7784 SHT_GROUP section will have its elf_next_in_group pointing back
7785 to the input group members. Ignore linker created group section.
7786 See elfNN_ia64_object_p in elfxx-ia64.c. */
7787 if ((link_info == NULL
7788 || !link_info->resolve_section_groups)
7789 && (elf_sec_group (isec) == NULL
7790 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
7791 {
7792 if (elf_section_flags (isec) & SHF_GROUP)
7793 elf_section_flags (osec) |= SHF_GROUP;
7794 elf_next_in_group (osec) = elf_next_in_group (isec);
7795 elf_section_data (osec)->group = elf_section_data (isec)->group;
7796 }
7797
7798 /* If not decompress, preserve SHF_COMPRESSED. */
7799 if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
7800 elf_section_flags (osec) |= (elf_section_flags (isec)
7801 & SHF_COMPRESSED);
7802
7803 ihdr = &elf_section_data (isec)->this_hdr;
7804
7805 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
7806 don't use the output section of the linked-to section since it
7807 may be NULL at this point. */
7808 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
7809 {
7810 ohdr = &elf_section_data (osec)->this_hdr;
7811 ohdr->sh_flags |= SHF_LINK_ORDER;
7812 elf_linked_to_section (osec) = elf_linked_to_section (isec);
7813 }
7814
7815 osec->use_rela_p = isec->use_rela_p;
7816
7817 return TRUE;
7818 }
7819
7820 /* Copy private section information. This copies over the entsize
7821 field, and sometimes the info field. */
7822
7823 bfd_boolean
7824 _bfd_elf_copy_private_section_data (bfd *ibfd,
7825 asection *isec,
7826 bfd *obfd,
7827 asection *osec)
7828 {
7829 Elf_Internal_Shdr *ihdr, *ohdr;
7830
7831 if (ibfd->xvec->flavour != bfd_target_elf_flavour
7832 || obfd->xvec->flavour != bfd_target_elf_flavour)
7833 return TRUE;
7834
7835 ihdr = &elf_section_data (isec)->this_hdr;
7836 ohdr = &elf_section_data (osec)->this_hdr;
7837
7838 ohdr->sh_entsize = ihdr->sh_entsize;
7839
7840 if (ihdr->sh_type == SHT_SYMTAB
7841 || ihdr->sh_type == SHT_DYNSYM
7842 || ihdr->sh_type == SHT_GNU_verneed
7843 || ihdr->sh_type == SHT_GNU_verdef)
7844 ohdr->sh_info = ihdr->sh_info;
7845
7846 return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
7847 NULL);
7848 }
7849
7850 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
7851 necessary if we are removing either the SHT_GROUP section or any of
7852 the group member sections. DISCARDED is the value that a section's
7853 output_section has if the section will be discarded, NULL when this
7854 function is called from objcopy, bfd_abs_section_ptr when called
7855 from the linker. */
7856
7857 bfd_boolean
7858 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
7859 {
7860 asection *isec;
7861
7862 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
7863 if (elf_section_type (isec) == SHT_GROUP)
7864 {
7865 asection *first = elf_next_in_group (isec);
7866 asection *s = first;
7867 bfd_size_type removed = 0;
7868
7869 while (s != NULL)
7870 {
7871 /* If this member section is being output but the
7872 SHT_GROUP section is not, then clear the group info
7873 set up by _bfd_elf_copy_private_section_data. */
7874 if (s->output_section != discarded
7875 && isec->output_section == discarded)
7876 {
7877 elf_section_flags (s->output_section) &= ~SHF_GROUP;
7878 elf_group_name (s->output_section) = NULL;
7879 }
7880 /* Conversely, if the member section is not being output
7881 but the SHT_GROUP section is, then adjust its size. */
7882 else if (s->output_section == discarded
7883 && isec->output_section != discarded)
7884 {
7885 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
7886 removed += 4;
7887 if (elf_sec->rel.hdr != NULL
7888 && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
7889 removed += 4;
7890 if (elf_sec->rela.hdr != NULL
7891 && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
7892 removed += 4;
7893 }
7894 s = elf_next_in_group (s);
7895 if (s == first)
7896 break;
7897 }
7898 if (removed != 0)
7899 {
7900 if (discarded != NULL)
7901 {
7902 /* If we've been called for ld -r, then we need to
7903 adjust the input section size. */
7904 if (isec->rawsize == 0)
7905 isec->rawsize = isec->size;
7906 isec->size = isec->rawsize - removed;
7907 if (isec->size <= 4)
7908 {
7909 isec->size = 0;
7910 isec->flags |= SEC_EXCLUDE;
7911 }
7912 }
7913 else
7914 {
7915 /* Adjust the output section size when called from
7916 objcopy. */
7917 isec->output_section->size -= removed;
7918 if (isec->output_section->size <= 4)
7919 {
7920 isec->output_section->size = 0;
7921 isec->output_section->flags |= SEC_EXCLUDE;
7922 }
7923 }
7924 }
7925 }
7926
7927 return TRUE;
7928 }
7929
7930 /* Copy private header information. */
7931
7932 bfd_boolean
7933 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
7934 {
7935 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7936 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7937 return TRUE;
7938
7939 /* Copy over private BFD data if it has not already been copied.
7940 This must be done here, rather than in the copy_private_bfd_data
7941 entry point, because the latter is called after the section
7942 contents have been set, which means that the program headers have
7943 already been worked out. */
7944 if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
7945 {
7946 if (! copy_private_bfd_data (ibfd, obfd))
7947 return FALSE;
7948 }
7949
7950 return _bfd_elf_fixup_group_sections (ibfd, NULL);
7951 }
7952
7953 /* Copy private symbol information. If this symbol is in a section
7954 which we did not map into a BFD section, try to map the section
7955 index correctly. We use special macro definitions for the mapped
7956 section indices; these definitions are interpreted by the
7957 swap_out_syms function. */
7958
7959 #define MAP_ONESYMTAB (SHN_HIOS + 1)
7960 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
7961 #define MAP_STRTAB (SHN_HIOS + 3)
7962 #define MAP_SHSTRTAB (SHN_HIOS + 4)
7963 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
7964
7965 bfd_boolean
7966 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
7967 asymbol *isymarg,
7968 bfd *obfd,
7969 asymbol *osymarg)
7970 {
7971 elf_symbol_type *isym, *osym;
7972
7973 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7974 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
7975 return TRUE;
7976
7977 isym = elf_symbol_from (ibfd, isymarg);
7978 osym = elf_symbol_from (obfd, osymarg);
7979
7980 if (isym != NULL
7981 && isym->internal_elf_sym.st_shndx != 0
7982 && osym != NULL
7983 && bfd_is_abs_section (isym->symbol.section))
7984 {
7985 unsigned int shndx;
7986
7987 shndx = isym->internal_elf_sym.st_shndx;
7988 if (shndx == elf_onesymtab (ibfd))
7989 shndx = MAP_ONESYMTAB;
7990 else if (shndx == elf_dynsymtab (ibfd))
7991 shndx = MAP_DYNSYMTAB;
7992 else if (shndx == elf_strtab_sec (ibfd))
7993 shndx = MAP_STRTAB;
7994 else if (shndx == elf_shstrtab_sec (ibfd))
7995 shndx = MAP_SHSTRTAB;
7996 else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
7997 shndx = MAP_SYM_SHNDX;
7998 osym->internal_elf_sym.st_shndx = shndx;
7999 }
8000
8001 return TRUE;
8002 }
8003
8004 /* Swap out the symbols. */
8005
8006 static bfd_boolean
8007 swap_out_syms (bfd *abfd,
8008 struct elf_strtab_hash **sttp,
8009 int relocatable_p)
8010 {
8011 const struct elf_backend_data *bed;
8012 unsigned int symcount;
8013 asymbol **syms;
8014 struct elf_strtab_hash *stt;
8015 Elf_Internal_Shdr *symtab_hdr;
8016 Elf_Internal_Shdr *symtab_shndx_hdr;
8017 Elf_Internal_Shdr *symstrtab_hdr;
8018 struct elf_sym_strtab *symstrtab;
8019 bfd_byte *outbound_syms;
8020 bfd_byte *outbound_shndx;
8021 unsigned long outbound_syms_index;
8022 unsigned long outbound_shndx_index;
8023 unsigned int idx;
8024 unsigned int num_locals;
8025 size_t amt;
8026 bfd_boolean name_local_sections;
8027
8028 if (!elf_map_symbols (abfd, &num_locals))
8029 return FALSE;
8030
8031 /* Dump out the symtabs. */
8032 stt = _bfd_elf_strtab_init ();
8033 if (stt == NULL)
8034 return FALSE;
8035
8036 bed = get_elf_backend_data (abfd);
8037 symcount = bfd_get_symcount (abfd);
8038 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8039 symtab_hdr->sh_type = SHT_SYMTAB;
8040 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8041 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8042 symtab_hdr->sh_info = num_locals + 1;
8043 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8044
8045 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8046 symstrtab_hdr->sh_type = SHT_STRTAB;
8047
8048 /* Allocate buffer to swap out the .strtab section. */
8049 if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8050 || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8051 {
8052 bfd_set_error (bfd_error_no_memory);
8053 _bfd_elf_strtab_free (stt);
8054 return FALSE;
8055 }
8056
8057 if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8058 || (outbound_syms = (bfd_byte *) bfd_alloc (abfd, amt)) == NULL)
8059 {
8060 error_no_mem:
8061 bfd_set_error (bfd_error_no_memory);
8062 error_return:
8063 free (symstrtab);
8064 _bfd_elf_strtab_free (stt);
8065 return FALSE;
8066 }
8067 symtab_hdr->contents = outbound_syms;
8068 outbound_syms_index = 0;
8069
8070 outbound_shndx = NULL;
8071 outbound_shndx_index = 0;
8072
8073 if (elf_symtab_shndx_list (abfd))
8074 {
8075 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8076 if (symtab_shndx_hdr->sh_name != 0)
8077 {
8078 if (_bfd_mul_overflow (symcount + 1,
8079 sizeof (Elf_External_Sym_Shndx), &amt))
8080 goto error_no_mem;
8081 outbound_shndx = (bfd_byte *) bfd_zalloc (abfd, amt);
8082 if (outbound_shndx == NULL)
8083 goto error_return;
8084
8085 symtab_shndx_hdr->contents = outbound_shndx;
8086 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8087 symtab_shndx_hdr->sh_size = amt;
8088 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8089 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8090 }
8091 /* FIXME: What about any other headers in the list ? */
8092 }
8093
8094 /* Now generate the data (for "contents"). */
8095 {
8096 /* Fill in zeroth symbol and swap it out. */
8097 Elf_Internal_Sym sym;
8098 sym.st_name = 0;
8099 sym.st_value = 0;
8100 sym.st_size = 0;
8101 sym.st_info = 0;
8102 sym.st_other = 0;
8103 sym.st_shndx = SHN_UNDEF;
8104 sym.st_target_internal = 0;
8105 symstrtab[0].sym = sym;
8106 symstrtab[0].dest_index = outbound_syms_index;
8107 symstrtab[0].destshndx_index = outbound_shndx_index;
8108 outbound_syms_index++;
8109 if (outbound_shndx != NULL)
8110 outbound_shndx_index++;
8111 }
8112
8113 name_local_sections
8114 = (bed->elf_backend_name_local_section_symbols
8115 && bed->elf_backend_name_local_section_symbols (abfd));
8116
8117 syms = bfd_get_outsymbols (abfd);
8118 for (idx = 0; idx < symcount;)
8119 {
8120 Elf_Internal_Sym sym;
8121 bfd_vma value = syms[idx]->value;
8122 elf_symbol_type *type_ptr;
8123 flagword flags = syms[idx]->flags;
8124 int type;
8125
8126 if (!name_local_sections
8127 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8128 {
8129 /* Local section symbols have no name. */
8130 sym.st_name = (unsigned long) -1;
8131 }
8132 else
8133 {
8134 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8135 to get the final offset for st_name. */
8136 sym.st_name
8137 = (unsigned long) _bfd_elf_strtab_add (stt, syms[idx]->name,
8138 FALSE);
8139 if (sym.st_name == (unsigned long) -1)
8140 goto error_return;
8141 }
8142
8143 type_ptr = elf_symbol_from (abfd, syms[idx]);
8144
8145 if ((flags & BSF_SECTION_SYM) == 0
8146 && bfd_is_com_section (syms[idx]->section))
8147 {
8148 /* ELF common symbols put the alignment into the `value' field,
8149 and the size into the `size' field. This is backwards from
8150 how BFD handles it, so reverse it here. */
8151 sym.st_size = value;
8152 if (type_ptr == NULL
8153 || type_ptr->internal_elf_sym.st_value == 0)
8154 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8155 else
8156 sym.st_value = type_ptr->internal_elf_sym.st_value;
8157 sym.st_shndx = _bfd_elf_section_from_bfd_section
8158 (abfd, syms[idx]->section);
8159 }
8160 else
8161 {
8162 asection *sec = syms[idx]->section;
8163 unsigned int shndx;
8164
8165 if (sec->output_section)
8166 {
8167 value += sec->output_offset;
8168 sec = sec->output_section;
8169 }
8170
8171 /* Don't add in the section vma for relocatable output. */
8172 if (! relocatable_p)
8173 value += sec->vma;
8174 sym.st_value = value;
8175 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8176
8177 if (bfd_is_abs_section (sec)
8178 && type_ptr != NULL
8179 && type_ptr->internal_elf_sym.st_shndx != 0)
8180 {
8181 /* This symbol is in a real ELF section which we did
8182 not create as a BFD section. Undo the mapping done
8183 by copy_private_symbol_data. */
8184 shndx = type_ptr->internal_elf_sym.st_shndx;
8185 switch (shndx)
8186 {
8187 case MAP_ONESYMTAB:
8188 shndx = elf_onesymtab (abfd);
8189 break;
8190 case MAP_DYNSYMTAB:
8191 shndx = elf_dynsymtab (abfd);
8192 break;
8193 case MAP_STRTAB:
8194 shndx = elf_strtab_sec (abfd);
8195 break;
8196 case MAP_SHSTRTAB:
8197 shndx = elf_shstrtab_sec (abfd);
8198 break;
8199 case MAP_SYM_SHNDX:
8200 if (elf_symtab_shndx_list (abfd))
8201 shndx = elf_symtab_shndx_list (abfd)->ndx;
8202 break;
8203 case SHN_COMMON:
8204 case SHN_ABS:
8205 shndx = SHN_ABS;
8206 break;
8207 default:
8208 if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8209 {
8210 if (bed->symbol_section_index)
8211 shndx = bed->symbol_section_index (abfd, type_ptr);
8212 /* Otherwise just leave the index alone. */
8213 }
8214 else
8215 {
8216 if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
8217 _bfd_error_handler (_("%pB: \
8218 Unable to handle section index %x in ELF symbol. Using ABS instead."),
8219 abfd, shndx);
8220 shndx = SHN_ABS;
8221 }
8222 break;
8223 }
8224 }
8225 else
8226 {
8227 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8228
8229 if (shndx == SHN_BAD)
8230 {
8231 asection *sec2;
8232
8233 /* Writing this would be a hell of a lot easier if
8234 we had some decent documentation on bfd, and
8235 knew what to expect of the library, and what to
8236 demand of applications. For example, it
8237 appears that `objcopy' might not set the
8238 section of a symbol to be a section that is
8239 actually in the output file. */
8240 sec2 = bfd_get_section_by_name (abfd, sec->name);
8241 if (sec2 != NULL)
8242 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8243 if (shndx == SHN_BAD)
8244 {
8245 /* xgettext:c-format */
8246 _bfd_error_handler
8247 (_("unable to find equivalent output section"
8248 " for symbol '%s' from section '%s'"),
8249 syms[idx]->name ? syms[idx]->name : "<Local sym>",
8250 sec->name);
8251 bfd_set_error (bfd_error_invalid_operation);
8252 goto error_return;
8253 }
8254 }
8255 }
8256
8257 sym.st_shndx = shndx;
8258 }
8259
8260 if ((flags & BSF_THREAD_LOCAL) != 0)
8261 type = STT_TLS;
8262 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8263 type = STT_GNU_IFUNC;
8264 else if ((flags & BSF_FUNCTION) != 0)
8265 type = STT_FUNC;
8266 else if ((flags & BSF_OBJECT) != 0)
8267 type = STT_OBJECT;
8268 else if ((flags & BSF_RELC) != 0)
8269 type = STT_RELC;
8270 else if ((flags & BSF_SRELC) != 0)
8271 type = STT_SRELC;
8272 else
8273 type = STT_NOTYPE;
8274
8275 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8276 type = STT_TLS;
8277
8278 /* Processor-specific types. */
8279 if (type_ptr != NULL
8280 && bed->elf_backend_get_symbol_type)
8281 type = ((*bed->elf_backend_get_symbol_type)
8282 (&type_ptr->internal_elf_sym, type));
8283
8284 if (flags & BSF_SECTION_SYM)
8285 {
8286 if (flags & BSF_GLOBAL)
8287 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
8288 else
8289 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
8290 }
8291 else if (bfd_is_com_section (syms[idx]->section))
8292 {
8293 if (type != STT_TLS)
8294 {
8295 if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
8296 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
8297 ? STT_COMMON : STT_OBJECT);
8298 else
8299 type = ((flags & BSF_ELF_COMMON) != 0
8300 ? STT_COMMON : STT_OBJECT);
8301 }
8302 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
8303 }
8304 else if (bfd_is_und_section (syms[idx]->section))
8305 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
8306 ? STB_WEAK
8307 : STB_GLOBAL),
8308 type);
8309 else if (flags & BSF_FILE)
8310 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
8311 else
8312 {
8313 int bind = STB_LOCAL;
8314
8315 if (flags & BSF_LOCAL)
8316 bind = STB_LOCAL;
8317 else if (flags & BSF_GNU_UNIQUE)
8318 bind = STB_GNU_UNIQUE;
8319 else if (flags & BSF_WEAK)
8320 bind = STB_WEAK;
8321 else if (flags & BSF_GLOBAL)
8322 bind = STB_GLOBAL;
8323
8324 sym.st_info = ELF_ST_INFO (bind, type);
8325 }
8326
8327 if (type_ptr != NULL)
8328 {
8329 sym.st_other = type_ptr->internal_elf_sym.st_other;
8330 sym.st_target_internal
8331 = type_ptr->internal_elf_sym.st_target_internal;
8332 }
8333 else
8334 {
8335 sym.st_other = 0;
8336 sym.st_target_internal = 0;
8337 }
8338
8339 idx++;
8340 symstrtab[idx].sym = sym;
8341 symstrtab[idx].dest_index = outbound_syms_index;
8342 symstrtab[idx].destshndx_index = outbound_shndx_index;
8343
8344 outbound_syms_index++;
8345 if (outbound_shndx != NULL)
8346 outbound_shndx_index++;
8347 }
8348
8349 /* Finalize the .strtab section. */
8350 _bfd_elf_strtab_finalize (stt);
8351
8352 /* Swap out the .strtab section. */
8353 for (idx = 0; idx <= symcount; idx++)
8354 {
8355 struct elf_sym_strtab *elfsym = &symstrtab[idx];
8356 if (elfsym->sym.st_name == (unsigned long) -1)
8357 elfsym->sym.st_name = 0;
8358 else
8359 elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
8360 elfsym->sym.st_name);
8361 bed->s->swap_symbol_out (abfd, &elfsym->sym,
8362 (outbound_syms
8363 + (elfsym->dest_index
8364 * bed->s->sizeof_sym)),
8365 (outbound_shndx
8366 + (elfsym->destshndx_index
8367 * sizeof (Elf_External_Sym_Shndx))));
8368 }
8369 free (symstrtab);
8370
8371 *sttp = stt;
8372 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
8373 symstrtab_hdr->sh_type = SHT_STRTAB;
8374 symstrtab_hdr->sh_flags = bed->elf_strtab_flags;
8375 symstrtab_hdr->sh_addr = 0;
8376 symstrtab_hdr->sh_entsize = 0;
8377 symstrtab_hdr->sh_link = 0;
8378 symstrtab_hdr->sh_info = 0;
8379 symstrtab_hdr->sh_addralign = 1;
8380
8381 return TRUE;
8382 }
8383
8384 /* Return the number of bytes required to hold the symtab vector.
8385
8386 Note that we base it on the count plus 1, since we will null terminate
8387 the vector allocated based on this size. However, the ELF symbol table
8388 always has a dummy entry as symbol #0, so it ends up even. */
8389
8390 long
8391 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
8392 {
8393 bfd_size_type symcount;
8394 long symtab_size;
8395 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
8396
8397 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8398 if (symcount >= LONG_MAX / sizeof (asymbol *))
8399 {
8400 bfd_set_error (bfd_error_file_too_big);
8401 return -1;
8402 }
8403 symtab_size = (symcount + 1) * (sizeof (asymbol *));
8404 if (symcount > 0)
8405 symtab_size -= sizeof (asymbol *);
8406
8407 return symtab_size;
8408 }
8409
8410 long
8411 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
8412 {
8413 bfd_size_type symcount;
8414 long symtab_size;
8415 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
8416
8417 if (elf_dynsymtab (abfd) == 0)
8418 {
8419 bfd_set_error (bfd_error_invalid_operation);
8420 return -1;
8421 }
8422
8423 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
8424 if (symcount >= LONG_MAX / sizeof (asymbol *))
8425 {
8426 bfd_set_error (bfd_error_file_too_big);
8427 return -1;
8428 }
8429 symtab_size = (symcount + 1) * (sizeof (asymbol *));
8430 if (symcount > 0)
8431 symtab_size -= sizeof (asymbol *);
8432
8433 return symtab_size;
8434 }
8435
8436 long
8437 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
8438 sec_ptr asect)
8439 {
8440 #if SIZEOF_LONG == SIZEOF_INT
8441 if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
8442 {
8443 bfd_set_error (bfd_error_file_too_big);
8444 return -1;
8445 }
8446 #endif
8447 return (asect->reloc_count + 1) * sizeof (arelent *);
8448 }
8449
8450 /* Canonicalize the relocs. */
8451
8452 long
8453 _bfd_elf_canonicalize_reloc (bfd *abfd,
8454 sec_ptr section,
8455 arelent **relptr,
8456 asymbol **symbols)
8457 {
8458 arelent *tblptr;
8459 unsigned int i;
8460 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8461
8462 if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
8463 return -1;
8464
8465 tblptr = section->relocation;
8466 for (i = 0; i < section->reloc_count; i++)
8467 *relptr++ = tblptr++;
8468
8469 *relptr = NULL;
8470
8471 return section->reloc_count;
8472 }
8473
8474 long
8475 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
8476 {
8477 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8478 long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
8479
8480 if (symcount >= 0)
8481 abfd->symcount = symcount;
8482 return symcount;
8483 }
8484
8485 long
8486 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
8487 asymbol **allocation)
8488 {
8489 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8490 long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
8491
8492 if (symcount >= 0)
8493 abfd->dynsymcount = symcount;
8494 return symcount;
8495 }
8496
8497 /* Return the size required for the dynamic reloc entries. Any loadable
8498 section that was actually installed in the BFD, and has type SHT_REL
8499 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
8500 dynamic reloc section. */
8501
8502 long
8503 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
8504 {
8505 bfd_size_type count;
8506 asection *s;
8507
8508 if (elf_dynsymtab (abfd) == 0)
8509 {
8510 bfd_set_error (bfd_error_invalid_operation);
8511 return -1;
8512 }
8513
8514 count = 1;
8515 for (s = abfd->sections; s != NULL; s = s->next)
8516 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8517 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8518 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8519 {
8520 count += s->size / elf_section_data (s)->this_hdr.sh_entsize;
8521 if (count > LONG_MAX / sizeof (arelent *))
8522 {
8523 bfd_set_error (bfd_error_file_too_big);
8524 return -1;
8525 }
8526 }
8527 return count * sizeof (arelent *);
8528 }
8529
8530 /* Canonicalize the dynamic relocation entries. Note that we return the
8531 dynamic relocations as a single block, although they are actually
8532 associated with particular sections; the interface, which was
8533 designed for SunOS style shared libraries, expects that there is only
8534 one set of dynamic relocs. Any loadable section that was actually
8535 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
8536 dynamic symbol table, is considered to be a dynamic reloc section. */
8537
8538 long
8539 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
8540 arelent **storage,
8541 asymbol **syms)
8542 {
8543 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
8544 asection *s;
8545 long ret;
8546
8547 if (elf_dynsymtab (abfd) == 0)
8548 {
8549 bfd_set_error (bfd_error_invalid_operation);
8550 return -1;
8551 }
8552
8553 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
8554 ret = 0;
8555 for (s = abfd->sections; s != NULL; s = s->next)
8556 {
8557 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
8558 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
8559 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
8560 {
8561 arelent *p;
8562 long count, i;
8563
8564 if (! (*slurp_relocs) (abfd, s, syms, TRUE))
8565 return -1;
8566 count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
8567 p = s->relocation;
8568 for (i = 0; i < count; i++)
8569 *storage++ = p++;
8570 ret += count;
8571 }
8572 }
8573
8574 *storage = NULL;
8575
8576 return ret;
8577 }
8578 \f
8579 /* Read in the version information. */
8580
8581 bfd_boolean
8582 _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
8583 {
8584 bfd_byte *contents = NULL;
8585 unsigned int freeidx = 0;
8586 size_t amt;
8587
8588 if (elf_dynverref (abfd) != 0)
8589 {
8590 Elf_Internal_Shdr *hdr;
8591 Elf_External_Verneed *everneed;
8592 Elf_Internal_Verneed *iverneed;
8593 unsigned int i;
8594 bfd_byte *contents_end;
8595
8596 hdr = &elf_tdata (abfd)->dynverref_hdr;
8597
8598 if (hdr->sh_info == 0
8599 || hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
8600 {
8601 error_return_bad_verref:
8602 _bfd_error_handler
8603 (_("%pB: .gnu.version_r invalid entry"), abfd);
8604 bfd_set_error (bfd_error_bad_value);
8605 error_return_verref:
8606 elf_tdata (abfd)->verref = NULL;
8607 elf_tdata (abfd)->cverrefs = 0;
8608 goto error_return;
8609 }
8610
8611 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8612 goto error_return_verref;
8613 contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8614 if (contents == NULL)
8615 goto error_return_verref;
8616
8617 if (_bfd_mul_overflow (hdr->sh_info, sizeof (Elf_Internal_Verneed), &amt))
8618 {
8619 bfd_set_error (bfd_error_file_too_big);
8620 goto error_return_verref;
8621 }
8622 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_alloc (abfd, amt);
8623 if (elf_tdata (abfd)->verref == NULL)
8624 goto error_return_verref;
8625
8626 BFD_ASSERT (sizeof (Elf_External_Verneed)
8627 == sizeof (Elf_External_Vernaux));
8628 contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
8629 everneed = (Elf_External_Verneed *) contents;
8630 iverneed = elf_tdata (abfd)->verref;
8631 for (i = 0; i < hdr->sh_info; i++, iverneed++)
8632 {
8633 Elf_External_Vernaux *evernaux;
8634 Elf_Internal_Vernaux *ivernaux;
8635 unsigned int j;
8636
8637 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
8638
8639 iverneed->vn_bfd = abfd;
8640
8641 iverneed->vn_filename =
8642 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8643 iverneed->vn_file);
8644 if (iverneed->vn_filename == NULL)
8645 goto error_return_bad_verref;
8646
8647 if (iverneed->vn_cnt == 0)
8648 iverneed->vn_auxptr = NULL;
8649 else
8650 {
8651 if (_bfd_mul_overflow (iverneed->vn_cnt,
8652 sizeof (Elf_Internal_Vernaux), &amt))
8653 {
8654 bfd_set_error (bfd_error_file_too_big);
8655 goto error_return_verref;
8656 }
8657 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
8658 bfd_alloc (abfd, amt);
8659 if (iverneed->vn_auxptr == NULL)
8660 goto error_return_verref;
8661 }
8662
8663 if (iverneed->vn_aux
8664 > (size_t) (contents_end - (bfd_byte *) everneed))
8665 goto error_return_bad_verref;
8666
8667 evernaux = ((Elf_External_Vernaux *)
8668 ((bfd_byte *) everneed + iverneed->vn_aux));
8669 ivernaux = iverneed->vn_auxptr;
8670 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
8671 {
8672 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
8673
8674 ivernaux->vna_nodename =
8675 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8676 ivernaux->vna_name);
8677 if (ivernaux->vna_nodename == NULL)
8678 goto error_return_bad_verref;
8679
8680 if (ivernaux->vna_other > freeidx)
8681 freeidx = ivernaux->vna_other;
8682
8683 ivernaux->vna_nextptr = NULL;
8684 if (ivernaux->vna_next == 0)
8685 {
8686 iverneed->vn_cnt = j + 1;
8687 break;
8688 }
8689 if (j + 1 < iverneed->vn_cnt)
8690 ivernaux->vna_nextptr = ivernaux + 1;
8691
8692 if (ivernaux->vna_next
8693 > (size_t) (contents_end - (bfd_byte *) evernaux))
8694 goto error_return_bad_verref;
8695
8696 evernaux = ((Elf_External_Vernaux *)
8697 ((bfd_byte *) evernaux + ivernaux->vna_next));
8698 }
8699
8700 iverneed->vn_nextref = NULL;
8701 if (iverneed->vn_next == 0)
8702 break;
8703 if (i + 1 < hdr->sh_info)
8704 iverneed->vn_nextref = iverneed + 1;
8705
8706 if (iverneed->vn_next
8707 > (size_t) (contents_end - (bfd_byte *) everneed))
8708 goto error_return_bad_verref;
8709
8710 everneed = ((Elf_External_Verneed *)
8711 ((bfd_byte *) everneed + iverneed->vn_next));
8712 }
8713 elf_tdata (abfd)->cverrefs = i;
8714
8715 free (contents);
8716 contents = NULL;
8717 }
8718
8719 if (elf_dynverdef (abfd) != 0)
8720 {
8721 Elf_Internal_Shdr *hdr;
8722 Elf_External_Verdef *everdef;
8723 Elf_Internal_Verdef *iverdef;
8724 Elf_Internal_Verdef *iverdefarr;
8725 Elf_Internal_Verdef iverdefmem;
8726 unsigned int i;
8727 unsigned int maxidx;
8728 bfd_byte *contents_end_def, *contents_end_aux;
8729
8730 hdr = &elf_tdata (abfd)->dynverdef_hdr;
8731
8732 if (hdr->sh_info == 0 || hdr->sh_size < sizeof (Elf_External_Verdef))
8733 {
8734 error_return_bad_verdef:
8735 _bfd_error_handler
8736 (_("%pB: .gnu.version_d invalid entry"), abfd);
8737 bfd_set_error (bfd_error_bad_value);
8738 error_return_verdef:
8739 elf_tdata (abfd)->verdef = NULL;
8740 elf_tdata (abfd)->cverdefs = 0;
8741 goto error_return;
8742 }
8743
8744 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
8745 goto error_return_verdef;
8746 contents = _bfd_malloc_and_read (abfd, hdr->sh_size, hdr->sh_size);
8747 if (contents == NULL)
8748 goto error_return_verdef;
8749
8750 BFD_ASSERT (sizeof (Elf_External_Verdef)
8751 >= sizeof (Elf_External_Verdaux));
8752 contents_end_def = contents + hdr->sh_size
8753 - sizeof (Elf_External_Verdef);
8754 contents_end_aux = contents + hdr->sh_size
8755 - sizeof (Elf_External_Verdaux);
8756
8757 /* We know the number of entries in the section but not the maximum
8758 index. Therefore we have to run through all entries and find
8759 the maximum. */
8760 everdef = (Elf_External_Verdef *) contents;
8761 maxidx = 0;
8762 for (i = 0; i < hdr->sh_info; ++i)
8763 {
8764 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8765
8766 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
8767 goto error_return_bad_verdef;
8768 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
8769 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
8770
8771 if (iverdefmem.vd_next == 0)
8772 break;
8773
8774 if (iverdefmem.vd_next
8775 > (size_t) (contents_end_def - (bfd_byte *) everdef))
8776 goto error_return_bad_verdef;
8777
8778 everdef = ((Elf_External_Verdef *)
8779 ((bfd_byte *) everdef + iverdefmem.vd_next));
8780 }
8781
8782 if (default_imported_symver)
8783 {
8784 if (freeidx > maxidx)
8785 maxidx = ++freeidx;
8786 else
8787 freeidx = ++maxidx;
8788 }
8789 if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
8790 {
8791 bfd_set_error (bfd_error_file_too_big);
8792 goto error_return_verdef;
8793 }
8794 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
8795 if (elf_tdata (abfd)->verdef == NULL)
8796 goto error_return_verdef;
8797
8798 elf_tdata (abfd)->cverdefs = maxidx;
8799
8800 everdef = (Elf_External_Verdef *) contents;
8801 iverdefarr = elf_tdata (abfd)->verdef;
8802 for (i = 0; i < hdr->sh_info; i++)
8803 {
8804 Elf_External_Verdaux *everdaux;
8805 Elf_Internal_Verdaux *iverdaux;
8806 unsigned int j;
8807
8808 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
8809
8810 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
8811 goto error_return_bad_verdef;
8812
8813 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
8814 memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
8815
8816 iverdef->vd_bfd = abfd;
8817
8818 if (iverdef->vd_cnt == 0)
8819 iverdef->vd_auxptr = NULL;
8820 else
8821 {
8822 if (_bfd_mul_overflow (iverdef->vd_cnt,
8823 sizeof (Elf_Internal_Verdaux), &amt))
8824 {
8825 bfd_set_error (bfd_error_file_too_big);
8826 goto error_return_verdef;
8827 }
8828 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
8829 bfd_alloc (abfd, amt);
8830 if (iverdef->vd_auxptr == NULL)
8831 goto error_return_verdef;
8832 }
8833
8834 if (iverdef->vd_aux
8835 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
8836 goto error_return_bad_verdef;
8837
8838 everdaux = ((Elf_External_Verdaux *)
8839 ((bfd_byte *) everdef + iverdef->vd_aux));
8840 iverdaux = iverdef->vd_auxptr;
8841 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
8842 {
8843 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
8844
8845 iverdaux->vda_nodename =
8846 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
8847 iverdaux->vda_name);
8848 if (iverdaux->vda_nodename == NULL)
8849 goto error_return_bad_verdef;
8850
8851 iverdaux->vda_nextptr = NULL;
8852 if (iverdaux->vda_next == 0)
8853 {
8854 iverdef->vd_cnt = j + 1;
8855 break;
8856 }
8857 if (j + 1 < iverdef->vd_cnt)
8858 iverdaux->vda_nextptr = iverdaux + 1;
8859
8860 if (iverdaux->vda_next
8861 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
8862 goto error_return_bad_verdef;
8863
8864 everdaux = ((Elf_External_Verdaux *)
8865 ((bfd_byte *) everdaux + iverdaux->vda_next));
8866 }
8867
8868 iverdef->vd_nodename = NULL;
8869 if (iverdef->vd_cnt)
8870 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
8871
8872 iverdef->vd_nextdef = NULL;
8873 if (iverdef->vd_next == 0)
8874 break;
8875 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
8876 iverdef->vd_nextdef = iverdef + 1;
8877
8878 everdef = ((Elf_External_Verdef *)
8879 ((bfd_byte *) everdef + iverdef->vd_next));
8880 }
8881
8882 free (contents);
8883 contents = NULL;
8884 }
8885 else if (default_imported_symver)
8886 {
8887 if (freeidx < 3)
8888 freeidx = 3;
8889 else
8890 freeidx++;
8891
8892 if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
8893 {
8894 bfd_set_error (bfd_error_file_too_big);
8895 goto error_return;
8896 }
8897 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
8898 if (elf_tdata (abfd)->verdef == NULL)
8899 goto error_return;
8900
8901 elf_tdata (abfd)->cverdefs = freeidx;
8902 }
8903
8904 /* Create a default version based on the soname. */
8905 if (default_imported_symver)
8906 {
8907 Elf_Internal_Verdef *iverdef;
8908 Elf_Internal_Verdaux *iverdaux;
8909
8910 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
8911
8912 iverdef->vd_version = VER_DEF_CURRENT;
8913 iverdef->vd_flags = 0;
8914 iverdef->vd_ndx = freeidx;
8915 iverdef->vd_cnt = 1;
8916
8917 iverdef->vd_bfd = abfd;
8918
8919 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
8920 if (iverdef->vd_nodename == NULL)
8921 goto error_return_verdef;
8922 iverdef->vd_nextdef = NULL;
8923 iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
8924 bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
8925 if (iverdef->vd_auxptr == NULL)
8926 goto error_return_verdef;
8927
8928 iverdaux = iverdef->vd_auxptr;
8929 iverdaux->vda_nodename = iverdef->vd_nodename;
8930 }
8931
8932 return TRUE;
8933
8934 error_return:
8935 if (contents != NULL)
8936 free (contents);
8937 return FALSE;
8938 }
8939 \f
8940 asymbol *
8941 _bfd_elf_make_empty_symbol (bfd *abfd)
8942 {
8943 elf_symbol_type *newsym;
8944
8945 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
8946 if (!newsym)
8947 return NULL;
8948 newsym->symbol.the_bfd = abfd;
8949 return &newsym->symbol;
8950 }
8951
8952 void
8953 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
8954 asymbol *symbol,
8955 symbol_info *ret)
8956 {
8957 bfd_symbol_info (symbol, ret);
8958 }
8959
8960 /* Return whether a symbol name implies a local symbol. Most targets
8961 use this function for the is_local_label_name entry point, but some
8962 override it. */
8963
8964 bfd_boolean
8965 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
8966 const char *name)
8967 {
8968 /* Normal local symbols start with ``.L''. */
8969 if (name[0] == '.' && name[1] == 'L')
8970 return TRUE;
8971
8972 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
8973 DWARF debugging symbols starting with ``..''. */
8974 if (name[0] == '.' && name[1] == '.')
8975 return TRUE;
8976
8977 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
8978 emitting DWARF debugging output. I suspect this is actually a
8979 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
8980 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
8981 underscore to be emitted on some ELF targets). For ease of use,
8982 we treat such symbols as local. */
8983 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
8984 return TRUE;
8985
8986 /* Treat assembler generated fake symbols, dollar local labels and
8987 forward-backward labels (aka local labels) as locals.
8988 These labels have the form:
8989
8990 L0^A.* (fake symbols)
8991
8992 [.]?L[0123456789]+{^A|^B}[0123456789]* (local labels)
8993
8994 Versions which start with .L will have already been matched above,
8995 so we only need to match the rest. */
8996 if (name[0] == 'L' && ISDIGIT (name[1]))
8997 {
8998 bfd_boolean ret = FALSE;
8999 const char * p;
9000 char c;
9001
9002 for (p = name + 2; (c = *p); p++)
9003 {
9004 if (c == 1 || c == 2)
9005 {
9006 if (c == 1 && p == name + 2)
9007 /* A fake symbol. */
9008 return TRUE;
9009
9010 /* FIXME: We are being paranoid here and treating symbols like
9011 L0^Bfoo as if there were non-local, on the grounds that the
9012 assembler will never generate them. But can any symbol
9013 containing an ASCII value in the range 1-31 ever be anything
9014 other than some kind of local ? */
9015 ret = TRUE;
9016 }
9017
9018 if (! ISDIGIT (c))
9019 {
9020 ret = FALSE;
9021 break;
9022 }
9023 }
9024 return ret;
9025 }
9026
9027 return FALSE;
9028 }
9029
9030 alent *
9031 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9032 asymbol *symbol ATTRIBUTE_UNUSED)
9033 {
9034 abort ();
9035 return NULL;
9036 }
9037
9038 bfd_boolean
9039 _bfd_elf_set_arch_mach (bfd *abfd,
9040 enum bfd_architecture arch,
9041 unsigned long machine)
9042 {
9043 /* If this isn't the right architecture for this backend, and this
9044 isn't the generic backend, fail. */
9045 if (arch != get_elf_backend_data (abfd)->arch
9046 && arch != bfd_arch_unknown
9047 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9048 return FALSE;
9049
9050 return bfd_default_set_arch_mach (abfd, arch, machine);
9051 }
9052
9053 /* Find the nearest line to a particular section and offset,
9054 for error reporting. */
9055
9056 bfd_boolean
9057 _bfd_elf_find_nearest_line (bfd *abfd,
9058 asymbol **symbols,
9059 asection *section,
9060 bfd_vma offset,
9061 const char **filename_ptr,
9062 const char **functionname_ptr,
9063 unsigned int *line_ptr,
9064 unsigned int *discriminator_ptr)
9065 {
9066 bfd_boolean found;
9067
9068 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
9069 filename_ptr, functionname_ptr,
9070 line_ptr, discriminator_ptr,
9071 dwarf_debug_sections,
9072 &elf_tdata (abfd)->dwarf2_find_line_info))
9073 return TRUE;
9074
9075 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9076 filename_ptr, functionname_ptr, line_ptr))
9077 {
9078 if (!*functionname_ptr)
9079 _bfd_elf_find_function (abfd, symbols, section, offset,
9080 *filename_ptr ? NULL : filename_ptr,
9081 functionname_ptr);
9082 return TRUE;
9083 }
9084
9085 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
9086 &found, filename_ptr,
9087 functionname_ptr, line_ptr,
9088 &elf_tdata (abfd)->line_info))
9089 return FALSE;
9090 if (found && (*functionname_ptr || *line_ptr))
9091 return TRUE;
9092
9093 if (symbols == NULL)
9094 return FALSE;
9095
9096 if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9097 filename_ptr, functionname_ptr))
9098 return FALSE;
9099
9100 *line_ptr = 0;
9101 return TRUE;
9102 }
9103
9104 /* Find the line for a symbol. */
9105
9106 bfd_boolean
9107 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9108 const char **filename_ptr, unsigned int *line_ptr)
9109 {
9110 return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9111 filename_ptr, NULL, line_ptr, NULL,
9112 dwarf_debug_sections,
9113 &elf_tdata (abfd)->dwarf2_find_line_info);
9114 }
9115
9116 /* After a call to bfd_find_nearest_line, successive calls to
9117 bfd_find_inliner_info can be used to get source information about
9118 each level of function inlining that terminated at the address
9119 passed to bfd_find_nearest_line. Currently this is only supported
9120 for DWARF2 with appropriate DWARF3 extensions. */
9121
9122 bfd_boolean
9123 _bfd_elf_find_inliner_info (bfd *abfd,
9124 const char **filename_ptr,
9125 const char **functionname_ptr,
9126 unsigned int *line_ptr)
9127 {
9128 bfd_boolean found;
9129 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
9130 functionname_ptr, line_ptr,
9131 & elf_tdata (abfd)->dwarf2_find_line_info);
9132 return found;
9133 }
9134
9135 int
9136 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
9137 {
9138 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9139 int ret = bed->s->sizeof_ehdr;
9140
9141 if (!bfd_link_relocatable (info))
9142 {
9143 bfd_size_type phdr_size = elf_program_header_size (abfd);
9144
9145 if (phdr_size == (bfd_size_type) -1)
9146 {
9147 struct elf_segment_map *m;
9148
9149 phdr_size = 0;
9150 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
9151 phdr_size += bed->s->sizeof_phdr;
9152
9153 if (phdr_size == 0)
9154 phdr_size = get_program_header_size (abfd, info);
9155 }
9156
9157 elf_program_header_size (abfd) = phdr_size;
9158 ret += phdr_size;
9159 }
9160
9161 return ret;
9162 }
9163
9164 bfd_boolean
9165 _bfd_elf_set_section_contents (bfd *abfd,
9166 sec_ptr section,
9167 const void *location,
9168 file_ptr offset,
9169 bfd_size_type count)
9170 {
9171 Elf_Internal_Shdr *hdr;
9172 file_ptr pos;
9173
9174 if (! abfd->output_has_begun
9175 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
9176 return FALSE;
9177
9178 if (!count)
9179 return TRUE;
9180
9181 hdr = &elf_section_data (section)->this_hdr;
9182 if (hdr->sh_offset == (file_ptr) -1)
9183 {
9184 if (bfd_section_is_ctf (section))
9185 /* Nothing to do with this section: the contents are generated
9186 later. */
9187 return TRUE;
9188
9189 /* We must compress this section. Write output to the buffer. */
9190 unsigned char *contents = hdr->contents;
9191 if ((offset + count) > hdr->sh_size
9192 || (section->flags & SEC_ELF_COMPRESS) == 0
9193 || contents == NULL)
9194 abort ();
9195 memcpy (contents + offset, location, count);
9196 return TRUE;
9197 }
9198 pos = hdr->sh_offset + offset;
9199 if (bfd_seek (abfd, pos, SEEK_SET) != 0
9200 || bfd_bwrite (location, count, abfd) != count)
9201 return FALSE;
9202
9203 return TRUE;
9204 }
9205
9206 bfd_boolean
9207 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
9208 arelent *cache_ptr ATTRIBUTE_UNUSED,
9209 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
9210 {
9211 abort ();
9212 return FALSE;
9213 }
9214
9215 /* Try to convert a non-ELF reloc into an ELF one. */
9216
9217 bfd_boolean
9218 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
9219 {
9220 /* Check whether we really have an ELF howto. */
9221
9222 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
9223 {
9224 bfd_reloc_code_real_type code;
9225 reloc_howto_type *howto;
9226
9227 /* Alien reloc: Try to determine its type to replace it with an
9228 equivalent ELF reloc. */
9229
9230 if (areloc->howto->pc_relative)
9231 {
9232 switch (areloc->howto->bitsize)
9233 {
9234 case 8:
9235 code = BFD_RELOC_8_PCREL;
9236 break;
9237 case 12:
9238 code = BFD_RELOC_12_PCREL;
9239 break;
9240 case 16:
9241 code = BFD_RELOC_16_PCREL;
9242 break;
9243 case 24:
9244 code = BFD_RELOC_24_PCREL;
9245 break;
9246 case 32:
9247 code = BFD_RELOC_32_PCREL;
9248 break;
9249 case 64:
9250 code = BFD_RELOC_64_PCREL;
9251 break;
9252 default:
9253 goto fail;
9254 }
9255
9256 howto = bfd_reloc_type_lookup (abfd, code);
9257
9258 if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
9259 {
9260 if (howto->pcrel_offset)
9261 areloc->addend += areloc->address;
9262 else
9263 areloc->addend -= areloc->address; /* addend is unsigned!! */
9264 }
9265 }
9266 else
9267 {
9268 switch (areloc->howto->bitsize)
9269 {
9270 case 8:
9271 code = BFD_RELOC_8;
9272 break;
9273 case 14:
9274 code = BFD_RELOC_14;
9275 break;
9276 case 16:
9277 code = BFD_RELOC_16;
9278 break;
9279 case 26:
9280 code = BFD_RELOC_26;
9281 break;
9282 case 32:
9283 code = BFD_RELOC_32;
9284 break;
9285 case 64:
9286 code = BFD_RELOC_64;
9287 break;
9288 default:
9289 goto fail;
9290 }
9291
9292 howto = bfd_reloc_type_lookup (abfd, code);
9293 }
9294
9295 if (howto)
9296 areloc->howto = howto;
9297 else
9298 goto fail;
9299 }
9300
9301 return TRUE;
9302
9303 fail:
9304 /* xgettext:c-format */
9305 _bfd_error_handler (_("%pB: %s unsupported"),
9306 abfd, areloc->howto->name);
9307 bfd_set_error (bfd_error_sorry);
9308 return FALSE;
9309 }
9310
9311 bfd_boolean
9312 _bfd_elf_close_and_cleanup (bfd *abfd)
9313 {
9314 struct elf_obj_tdata *tdata = elf_tdata (abfd);
9315 if (bfd_get_format (abfd) == bfd_object && tdata != NULL)
9316 {
9317 if (elf_tdata (abfd)->o != NULL && elf_shstrtab (abfd) != NULL)
9318 _bfd_elf_strtab_free (elf_shstrtab (abfd));
9319 _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
9320 }
9321
9322 return _bfd_generic_close_and_cleanup (abfd);
9323 }
9324
9325 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
9326 in the relocation's offset. Thus we cannot allow any sort of sanity
9327 range-checking to interfere. There is nothing else to do in processing
9328 this reloc. */
9329
9330 bfd_reloc_status_type
9331 _bfd_elf_rel_vtable_reloc_fn
9332 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
9333 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
9334 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
9335 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
9336 {
9337 return bfd_reloc_ok;
9338 }
9339 \f
9340 /* Elf core file support. Much of this only works on native
9341 toolchains, since we rely on knowing the
9342 machine-dependent procfs structure in order to pick
9343 out details about the corefile. */
9344
9345 #ifdef HAVE_SYS_PROCFS_H
9346 /* Needed for new procfs interface on sparc-solaris. */
9347 # define _STRUCTURED_PROC 1
9348 # include <sys/procfs.h>
9349 #endif
9350
9351 /* Return a PID that identifies a "thread" for threaded cores, or the
9352 PID of the main process for non-threaded cores. */
9353
9354 static int
9355 elfcore_make_pid (bfd *abfd)
9356 {
9357 int pid;
9358
9359 pid = elf_tdata (abfd)->core->lwpid;
9360 if (pid == 0)
9361 pid = elf_tdata (abfd)->core->pid;
9362
9363 return pid;
9364 }
9365
9366 /* If there isn't a section called NAME, make one, using
9367 data from SECT. Note, this function will generate a
9368 reference to NAME, so you shouldn't deallocate or
9369 overwrite it. */
9370
9371 static bfd_boolean
9372 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
9373 {
9374 asection *sect2;
9375
9376 if (bfd_get_section_by_name (abfd, name) != NULL)
9377 return TRUE;
9378
9379 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
9380 if (sect2 == NULL)
9381 return FALSE;
9382
9383 sect2->size = sect->size;
9384 sect2->filepos = sect->filepos;
9385 sect2->alignment_power = sect->alignment_power;
9386 return TRUE;
9387 }
9388
9389 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
9390 actually creates up to two pseudosections:
9391 - For the single-threaded case, a section named NAME, unless
9392 such a section already exists.
9393 - For the multi-threaded case, a section named "NAME/PID", where
9394 PID is elfcore_make_pid (abfd).
9395 Both pseudosections have identical contents. */
9396 bfd_boolean
9397 _bfd_elfcore_make_pseudosection (bfd *abfd,
9398 char *name,
9399 size_t size,
9400 ufile_ptr filepos)
9401 {
9402 char buf[100];
9403 char *threaded_name;
9404 size_t len;
9405 asection *sect;
9406
9407 /* Build the section name. */
9408
9409 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
9410 len = strlen (buf) + 1;
9411 threaded_name = (char *) bfd_alloc (abfd, len);
9412 if (threaded_name == NULL)
9413 return FALSE;
9414 memcpy (threaded_name, buf, len);
9415
9416 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
9417 SEC_HAS_CONTENTS);
9418 if (sect == NULL)
9419 return FALSE;
9420 sect->size = size;
9421 sect->filepos = filepos;
9422 sect->alignment_power = 2;
9423
9424 return elfcore_maybe_make_sect (abfd, name, sect);
9425 }
9426
9427 static bfd_boolean
9428 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
9429 size_t offs)
9430 {
9431 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
9432 SEC_HAS_CONTENTS);
9433
9434 if (sect == NULL)
9435 return FALSE;
9436
9437 sect->size = note->descsz - offs;
9438 sect->filepos = note->descpos + offs;
9439 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
9440
9441 return TRUE;
9442 }
9443
9444 /* prstatus_t exists on:
9445 solaris 2.5+
9446 linux 2.[01] + glibc
9447 unixware 4.2
9448 */
9449
9450 #if defined (HAVE_PRSTATUS_T)
9451
9452 static bfd_boolean
9453 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
9454 {
9455 size_t size;
9456 int offset;
9457
9458 if (note->descsz == sizeof (prstatus_t))
9459 {
9460 prstatus_t prstat;
9461
9462 size = sizeof (prstat.pr_reg);
9463 offset = offsetof (prstatus_t, pr_reg);
9464 memcpy (&prstat, note->descdata, sizeof (prstat));
9465
9466 /* Do not overwrite the core signal if it
9467 has already been set by another thread. */
9468 if (elf_tdata (abfd)->core->signal == 0)
9469 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9470 if (elf_tdata (abfd)->core->pid == 0)
9471 elf_tdata (abfd)->core->pid = prstat.pr_pid;
9472
9473 /* pr_who exists on:
9474 solaris 2.5+
9475 unixware 4.2
9476 pr_who doesn't exist on:
9477 linux 2.[01]
9478 */
9479 #if defined (HAVE_PRSTATUS_T_PR_WHO)
9480 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9481 #else
9482 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9483 #endif
9484 }
9485 #if defined (HAVE_PRSTATUS32_T)
9486 else if (note->descsz == sizeof (prstatus32_t))
9487 {
9488 /* 64-bit host, 32-bit corefile */
9489 prstatus32_t prstat;
9490
9491 size = sizeof (prstat.pr_reg);
9492 offset = offsetof (prstatus32_t, pr_reg);
9493 memcpy (&prstat, note->descdata, sizeof (prstat));
9494
9495 /* Do not overwrite the core signal if it
9496 has already been set by another thread. */
9497 if (elf_tdata (abfd)->core->signal == 0)
9498 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
9499 if (elf_tdata (abfd)->core->pid == 0)
9500 elf_tdata (abfd)->core->pid = prstat.pr_pid;
9501
9502 /* pr_who exists on:
9503 solaris 2.5+
9504 unixware 4.2
9505 pr_who doesn't exist on:
9506 linux 2.[01]
9507 */
9508 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
9509 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
9510 #else
9511 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
9512 #endif
9513 }
9514 #endif /* HAVE_PRSTATUS32_T */
9515 else
9516 {
9517 /* Fail - we don't know how to handle any other
9518 note size (ie. data object type). */
9519 return TRUE;
9520 }
9521
9522 /* Make a ".reg/999" section and a ".reg" section. */
9523 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
9524 size, note->descpos + offset);
9525 }
9526 #endif /* defined (HAVE_PRSTATUS_T) */
9527
9528 /* Create a pseudosection containing the exact contents of NOTE. */
9529 static bfd_boolean
9530 elfcore_make_note_pseudosection (bfd *abfd,
9531 char *name,
9532 Elf_Internal_Note *note)
9533 {
9534 return _bfd_elfcore_make_pseudosection (abfd, name,
9535 note->descsz, note->descpos);
9536 }
9537
9538 /* There isn't a consistent prfpregset_t across platforms,
9539 but it doesn't matter, because we don't have to pick this
9540 data structure apart. */
9541
9542 static bfd_boolean
9543 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
9544 {
9545 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
9546 }
9547
9548 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
9549 type of NT_PRXFPREG. Just include the whole note's contents
9550 literally. */
9551
9552 static bfd_boolean
9553 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
9554 {
9555 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
9556 }
9557
9558 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
9559 with a note type of NT_X86_XSTATE. Just include the whole note's
9560 contents literally. */
9561
9562 static bfd_boolean
9563 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
9564 {
9565 return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
9566 }
9567
9568 static bfd_boolean
9569 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
9570 {
9571 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
9572 }
9573
9574 static bfd_boolean
9575 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
9576 {
9577 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
9578 }
9579
9580 static bfd_boolean
9581 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
9582 {
9583 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tar", note);
9584 }
9585
9586 static bfd_boolean
9587 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
9588 {
9589 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ppr", note);
9590 }
9591
9592 static bfd_boolean
9593 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
9594 {
9595 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-dscr", note);
9596 }
9597
9598 static bfd_boolean
9599 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
9600 {
9601 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-ebb", note);
9602 }
9603
9604 static bfd_boolean
9605 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
9606 {
9607 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-pmu", note);
9608 }
9609
9610 static bfd_boolean
9611 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
9612 {
9613 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cgpr", note);
9614 }
9615
9616 static bfd_boolean
9617 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
9618 {
9619 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cfpr", note);
9620 }
9621
9622 static bfd_boolean
9623 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
9624 {
9625 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvmx", note);
9626 }
9627
9628 static bfd_boolean
9629 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
9630 {
9631 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cvsx", note);
9632 }
9633
9634 static bfd_boolean
9635 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
9636 {
9637 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-spr", note);
9638 }
9639
9640 static bfd_boolean
9641 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
9642 {
9643 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-ctar", note);
9644 }
9645
9646 static bfd_boolean
9647 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
9648 {
9649 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cppr", note);
9650 }
9651
9652 static bfd_boolean
9653 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
9654 {
9655 return elfcore_make_note_pseudosection (abfd, ".reg-ppc-tm-cdscr", note);
9656 }
9657
9658 static bfd_boolean
9659 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
9660 {
9661 return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
9662 }
9663
9664 static bfd_boolean
9665 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
9666 {
9667 return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
9668 }
9669
9670 static bfd_boolean
9671 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
9672 {
9673 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
9674 }
9675
9676 static bfd_boolean
9677 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
9678 {
9679 return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
9680 }
9681
9682 static bfd_boolean
9683 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
9684 {
9685 return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
9686 }
9687
9688 static bfd_boolean
9689 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
9690 {
9691 return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
9692 }
9693
9694 static bfd_boolean
9695 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
9696 {
9697 return elfcore_make_note_pseudosection (abfd, ".reg-s390-last-break", note);
9698 }
9699
9700 static bfd_boolean
9701 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
9702 {
9703 return elfcore_make_note_pseudosection (abfd, ".reg-s390-system-call", note);
9704 }
9705
9706 static bfd_boolean
9707 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
9708 {
9709 return elfcore_make_note_pseudosection (abfd, ".reg-s390-tdb", note);
9710 }
9711
9712 static bfd_boolean
9713 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
9714 {
9715 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-low", note);
9716 }
9717
9718 static bfd_boolean
9719 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
9720 {
9721 return elfcore_make_note_pseudosection (abfd, ".reg-s390-vxrs-high", note);
9722 }
9723
9724 static bfd_boolean
9725 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
9726 {
9727 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-cb", note);
9728 }
9729
9730 static bfd_boolean
9731 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
9732 {
9733 return elfcore_make_note_pseudosection (abfd, ".reg-s390-gs-bc", note);
9734 }
9735
9736 static bfd_boolean
9737 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
9738 {
9739 return elfcore_make_note_pseudosection (abfd, ".reg-arm-vfp", note);
9740 }
9741
9742 static bfd_boolean
9743 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
9744 {
9745 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-tls", note);
9746 }
9747
9748 static bfd_boolean
9749 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
9750 {
9751 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-break", note);
9752 }
9753
9754 static bfd_boolean
9755 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
9756 {
9757 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-hw-watch", note);
9758 }
9759
9760 static bfd_boolean
9761 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
9762 {
9763 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-sve", note);
9764 }
9765
9766 static bfd_boolean
9767 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
9768 {
9769 return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
9770 }
9771
9772 #if defined (HAVE_PRPSINFO_T)
9773 typedef prpsinfo_t elfcore_psinfo_t;
9774 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
9775 typedef prpsinfo32_t elfcore_psinfo32_t;
9776 #endif
9777 #endif
9778
9779 #if defined (HAVE_PSINFO_T)
9780 typedef psinfo_t elfcore_psinfo_t;
9781 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
9782 typedef psinfo32_t elfcore_psinfo32_t;
9783 #endif
9784 #endif
9785
9786 /* return a malloc'ed copy of a string at START which is at
9787 most MAX bytes long, possibly without a terminating '\0'.
9788 the copy will always have a terminating '\0'. */
9789
9790 char *
9791 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
9792 {
9793 char *dups;
9794 char *end = (char *) memchr (start, '\0', max);
9795 size_t len;
9796
9797 if (end == NULL)
9798 len = max;
9799 else
9800 len = end - start;
9801
9802 dups = (char *) bfd_alloc (abfd, len + 1);
9803 if (dups == NULL)
9804 return NULL;
9805
9806 memcpy (dups, start, len);
9807 dups[len] = '\0';
9808
9809 return dups;
9810 }
9811
9812 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
9813 static bfd_boolean
9814 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
9815 {
9816 if (note->descsz == sizeof (elfcore_psinfo_t))
9817 {
9818 elfcore_psinfo_t psinfo;
9819
9820 memcpy (&psinfo, note->descdata, sizeof (psinfo));
9821
9822 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
9823 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
9824 #endif
9825 elf_tdata (abfd)->core->program
9826 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9827 sizeof (psinfo.pr_fname));
9828
9829 elf_tdata (abfd)->core->command
9830 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9831 sizeof (psinfo.pr_psargs));
9832 }
9833 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
9834 else if (note->descsz == sizeof (elfcore_psinfo32_t))
9835 {
9836 /* 64-bit host, 32-bit corefile */
9837 elfcore_psinfo32_t psinfo;
9838
9839 memcpy (&psinfo, note->descdata, sizeof (psinfo));
9840
9841 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
9842 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
9843 #endif
9844 elf_tdata (abfd)->core->program
9845 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
9846 sizeof (psinfo.pr_fname));
9847
9848 elf_tdata (abfd)->core->command
9849 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
9850 sizeof (psinfo.pr_psargs));
9851 }
9852 #endif
9853
9854 else
9855 {
9856 /* Fail - we don't know how to handle any other
9857 note size (ie. data object type). */
9858 return TRUE;
9859 }
9860
9861 /* Note that for some reason, a spurious space is tacked
9862 onto the end of the args in some (at least one anyway)
9863 implementations, so strip it off if it exists. */
9864
9865 {
9866 char *command = elf_tdata (abfd)->core->command;
9867 int n = strlen (command);
9868
9869 if (0 < n && command[n - 1] == ' ')
9870 command[n - 1] = '\0';
9871 }
9872
9873 return TRUE;
9874 }
9875 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
9876
9877 #if defined (HAVE_PSTATUS_T)
9878 static bfd_boolean
9879 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
9880 {
9881 if (note->descsz == sizeof (pstatus_t)
9882 #if defined (HAVE_PXSTATUS_T)
9883 || note->descsz == sizeof (pxstatus_t)
9884 #endif
9885 )
9886 {
9887 pstatus_t pstat;
9888
9889 memcpy (&pstat, note->descdata, sizeof (pstat));
9890
9891 elf_tdata (abfd)->core->pid = pstat.pr_pid;
9892 }
9893 #if defined (HAVE_PSTATUS32_T)
9894 else if (note->descsz == sizeof (pstatus32_t))
9895 {
9896 /* 64-bit host, 32-bit corefile */
9897 pstatus32_t pstat;
9898
9899 memcpy (&pstat, note->descdata, sizeof (pstat));
9900
9901 elf_tdata (abfd)->core->pid = pstat.pr_pid;
9902 }
9903 #endif
9904 /* Could grab some more details from the "representative"
9905 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
9906 NT_LWPSTATUS note, presumably. */
9907
9908 return TRUE;
9909 }
9910 #endif /* defined (HAVE_PSTATUS_T) */
9911
9912 #if defined (HAVE_LWPSTATUS_T)
9913 static bfd_boolean
9914 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
9915 {
9916 lwpstatus_t lwpstat;
9917 char buf[100];
9918 char *name;
9919 size_t len;
9920 asection *sect;
9921
9922 if (note->descsz != sizeof (lwpstat)
9923 #if defined (HAVE_LWPXSTATUS_T)
9924 && note->descsz != sizeof (lwpxstatus_t)
9925 #endif
9926 )
9927 return TRUE;
9928
9929 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
9930
9931 elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
9932 /* Do not overwrite the core signal if it has already been set by
9933 another thread. */
9934 if (elf_tdata (abfd)->core->signal == 0)
9935 elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
9936
9937 /* Make a ".reg/999" section. */
9938
9939 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
9940 len = strlen (buf) + 1;
9941 name = bfd_alloc (abfd, len);
9942 if (name == NULL)
9943 return FALSE;
9944 memcpy (name, buf, len);
9945
9946 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
9947 if (sect == NULL)
9948 return FALSE;
9949
9950 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
9951 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
9952 sect->filepos = note->descpos
9953 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
9954 #endif
9955
9956 #if defined (HAVE_LWPSTATUS_T_PR_REG)
9957 sect->size = sizeof (lwpstat.pr_reg);
9958 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
9959 #endif
9960
9961 sect->alignment_power = 2;
9962
9963 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
9964 return FALSE;
9965
9966 /* Make a ".reg2/999" section */
9967
9968 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
9969 len = strlen (buf) + 1;
9970 name = bfd_alloc (abfd, len);
9971 if (name == NULL)
9972 return FALSE;
9973 memcpy (name, buf, len);
9974
9975 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
9976 if (sect == NULL)
9977 return FALSE;
9978
9979 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
9980 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
9981 sect->filepos = note->descpos
9982 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
9983 #endif
9984
9985 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
9986 sect->size = sizeof (lwpstat.pr_fpreg);
9987 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
9988 #endif
9989
9990 sect->alignment_power = 2;
9991
9992 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
9993 }
9994 #endif /* defined (HAVE_LWPSTATUS_T) */
9995
9996 static bfd_boolean
9997 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
9998 {
9999 char buf[30];
10000 char *name;
10001 size_t len;
10002 asection *sect;
10003 int type;
10004 int is_active_thread;
10005 bfd_vma base_addr;
10006
10007 if (note->descsz < 728)
10008 return TRUE;
10009
10010 if (! CONST_STRNEQ (note->namedata, "win32"))
10011 return TRUE;
10012
10013 type = bfd_get_32 (abfd, note->descdata);
10014
10015 switch (type)
10016 {
10017 case 1 /* NOTE_INFO_PROCESS */:
10018 /* FIXME: need to add ->core->command. */
10019 /* process_info.pid */
10020 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 8);
10021 /* process_info.signal */
10022 elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 12);
10023 break;
10024
10025 case 2 /* NOTE_INFO_THREAD */:
10026 /* Make a ".reg/999" section. */
10027 /* thread_info.tid */
10028 sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
10029
10030 len = strlen (buf) + 1;
10031 name = (char *) bfd_alloc (abfd, len);
10032 if (name == NULL)
10033 return FALSE;
10034
10035 memcpy (name, buf, len);
10036
10037 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10038 if (sect == NULL)
10039 return FALSE;
10040
10041 /* sizeof (thread_info.thread_context) */
10042 sect->size = 716;
10043 /* offsetof (thread_info.thread_context) */
10044 sect->filepos = note->descpos + 12;
10045 sect->alignment_power = 2;
10046
10047 /* thread_info.is_active_thread */
10048 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
10049
10050 if (is_active_thread)
10051 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
10052 return FALSE;
10053 break;
10054
10055 case 3 /* NOTE_INFO_MODULE */:
10056 /* Make a ".module/xxxxxxxx" section. */
10057 /* module_info.base_address */
10058 base_addr = bfd_get_32 (abfd, note->descdata + 4);
10059 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
10060
10061 len = strlen (buf) + 1;
10062 name = (char *) bfd_alloc (abfd, len);
10063 if (name == NULL)
10064 return FALSE;
10065
10066 memcpy (name, buf, len);
10067
10068 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10069
10070 if (sect == NULL)
10071 return FALSE;
10072
10073 sect->size = note->descsz;
10074 sect->filepos = note->descpos;
10075 sect->alignment_power = 2;
10076 break;
10077
10078 default:
10079 return TRUE;
10080 }
10081
10082 return TRUE;
10083 }
10084
10085 static bfd_boolean
10086 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
10087 {
10088 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10089
10090 switch (note->type)
10091 {
10092 default:
10093 return TRUE;
10094
10095 case NT_PRSTATUS:
10096 if (bed->elf_backend_grok_prstatus)
10097 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
10098 return TRUE;
10099 #if defined (HAVE_PRSTATUS_T)
10100 return elfcore_grok_prstatus (abfd, note);
10101 #else
10102 return TRUE;
10103 #endif
10104
10105 #if defined (HAVE_PSTATUS_T)
10106 case NT_PSTATUS:
10107 return elfcore_grok_pstatus (abfd, note);
10108 #endif
10109
10110 #if defined (HAVE_LWPSTATUS_T)
10111 case NT_LWPSTATUS:
10112 return elfcore_grok_lwpstatus (abfd, note);
10113 #endif
10114
10115 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
10116 return elfcore_grok_prfpreg (abfd, note);
10117
10118 case NT_WIN32PSTATUS:
10119 return elfcore_grok_win32pstatus (abfd, note);
10120
10121 case NT_PRXFPREG: /* Linux SSE extension */
10122 if (note->namesz == 6
10123 && strcmp (note->namedata, "LINUX") == 0)
10124 return elfcore_grok_prxfpreg (abfd, note);
10125 else
10126 return TRUE;
10127
10128 case NT_X86_XSTATE: /* Linux XSAVE extension */
10129 if (note->namesz == 6
10130 && strcmp (note->namedata, "LINUX") == 0)
10131 return elfcore_grok_xstatereg (abfd, note);
10132 else
10133 return TRUE;
10134
10135 case NT_PPC_VMX:
10136 if (note->namesz == 6
10137 && strcmp (note->namedata, "LINUX") == 0)
10138 return elfcore_grok_ppc_vmx (abfd, note);
10139 else
10140 return TRUE;
10141
10142 case NT_PPC_VSX:
10143 if (note->namesz == 6
10144 && strcmp (note->namedata, "LINUX") == 0)
10145 return elfcore_grok_ppc_vsx (abfd, note);
10146 else
10147 return TRUE;
10148
10149 case NT_PPC_TAR:
10150 if (note->namesz == 6
10151 && strcmp (note->namedata, "LINUX") == 0)
10152 return elfcore_grok_ppc_tar (abfd, note);
10153 else
10154 return TRUE;
10155
10156 case NT_PPC_PPR:
10157 if (note->namesz == 6
10158 && strcmp (note->namedata, "LINUX") == 0)
10159 return elfcore_grok_ppc_ppr (abfd, note);
10160 else
10161 return TRUE;
10162
10163 case NT_PPC_DSCR:
10164 if (note->namesz == 6
10165 && strcmp (note->namedata, "LINUX") == 0)
10166 return elfcore_grok_ppc_dscr (abfd, note);
10167 else
10168 return TRUE;
10169
10170 case NT_PPC_EBB:
10171 if (note->namesz == 6
10172 && strcmp (note->namedata, "LINUX") == 0)
10173 return elfcore_grok_ppc_ebb (abfd, note);
10174 else
10175 return TRUE;
10176
10177 case NT_PPC_PMU:
10178 if (note->namesz == 6
10179 && strcmp (note->namedata, "LINUX") == 0)
10180 return elfcore_grok_ppc_pmu (abfd, note);
10181 else
10182 return TRUE;
10183
10184 case NT_PPC_TM_CGPR:
10185 if (note->namesz == 6
10186 && strcmp (note->namedata, "LINUX") == 0)
10187 return elfcore_grok_ppc_tm_cgpr (abfd, note);
10188 else
10189 return TRUE;
10190
10191 case NT_PPC_TM_CFPR:
10192 if (note->namesz == 6
10193 && strcmp (note->namedata, "LINUX") == 0)
10194 return elfcore_grok_ppc_tm_cfpr (abfd, note);
10195 else
10196 return TRUE;
10197
10198 case NT_PPC_TM_CVMX:
10199 if (note->namesz == 6
10200 && strcmp (note->namedata, "LINUX") == 0)
10201 return elfcore_grok_ppc_tm_cvmx (abfd, note);
10202 else
10203 return TRUE;
10204
10205 case NT_PPC_TM_CVSX:
10206 if (note->namesz == 6
10207 && strcmp (note->namedata, "LINUX") == 0)
10208 return elfcore_grok_ppc_tm_cvsx (abfd, note);
10209 else
10210 return TRUE;
10211
10212 case NT_PPC_TM_SPR:
10213 if (note->namesz == 6
10214 && strcmp (note->namedata, "LINUX") == 0)
10215 return elfcore_grok_ppc_tm_spr (abfd, note);
10216 else
10217 return TRUE;
10218
10219 case NT_PPC_TM_CTAR:
10220 if (note->namesz == 6
10221 && strcmp (note->namedata, "LINUX") == 0)
10222 return elfcore_grok_ppc_tm_ctar (abfd, note);
10223 else
10224 return TRUE;
10225
10226 case NT_PPC_TM_CPPR:
10227 if (note->namesz == 6
10228 && strcmp (note->namedata, "LINUX") == 0)
10229 return elfcore_grok_ppc_tm_cppr (abfd, note);
10230 else
10231 return TRUE;
10232
10233 case NT_PPC_TM_CDSCR:
10234 if (note->namesz == 6
10235 && strcmp (note->namedata, "LINUX") == 0)
10236 return elfcore_grok_ppc_tm_cdscr (abfd, note);
10237 else
10238 return TRUE;
10239
10240 case NT_S390_HIGH_GPRS:
10241 if (note->namesz == 6
10242 && strcmp (note->namedata, "LINUX") == 0)
10243 return elfcore_grok_s390_high_gprs (abfd, note);
10244 else
10245 return TRUE;
10246
10247 case NT_S390_TIMER:
10248 if (note->namesz == 6
10249 && strcmp (note->namedata, "LINUX") == 0)
10250 return elfcore_grok_s390_timer (abfd, note);
10251 else
10252 return TRUE;
10253
10254 case NT_S390_TODCMP:
10255 if (note->namesz == 6
10256 && strcmp (note->namedata, "LINUX") == 0)
10257 return elfcore_grok_s390_todcmp (abfd, note);
10258 else
10259 return TRUE;
10260
10261 case NT_S390_TODPREG:
10262 if (note->namesz == 6
10263 && strcmp (note->namedata, "LINUX") == 0)
10264 return elfcore_grok_s390_todpreg (abfd, note);
10265 else
10266 return TRUE;
10267
10268 case NT_S390_CTRS:
10269 if (note->namesz == 6
10270 && strcmp (note->namedata, "LINUX") == 0)
10271 return elfcore_grok_s390_ctrs (abfd, note);
10272 else
10273 return TRUE;
10274
10275 case NT_S390_PREFIX:
10276 if (note->namesz == 6
10277 && strcmp (note->namedata, "LINUX") == 0)
10278 return elfcore_grok_s390_prefix (abfd, note);
10279 else
10280 return TRUE;
10281
10282 case NT_S390_LAST_BREAK:
10283 if (note->namesz == 6
10284 && strcmp (note->namedata, "LINUX") == 0)
10285 return elfcore_grok_s390_last_break (abfd, note);
10286 else
10287 return TRUE;
10288
10289 case NT_S390_SYSTEM_CALL:
10290 if (note->namesz == 6
10291 && strcmp (note->namedata, "LINUX") == 0)
10292 return elfcore_grok_s390_system_call (abfd, note);
10293 else
10294 return TRUE;
10295
10296 case NT_S390_TDB:
10297 if (note->namesz == 6
10298 && strcmp (note->namedata, "LINUX") == 0)
10299 return elfcore_grok_s390_tdb (abfd, note);
10300 else
10301 return TRUE;
10302
10303 case NT_S390_VXRS_LOW:
10304 if (note->namesz == 6
10305 && strcmp (note->namedata, "LINUX") == 0)
10306 return elfcore_grok_s390_vxrs_low (abfd, note);
10307 else
10308 return TRUE;
10309
10310 case NT_S390_VXRS_HIGH:
10311 if (note->namesz == 6
10312 && strcmp (note->namedata, "LINUX") == 0)
10313 return elfcore_grok_s390_vxrs_high (abfd, note);
10314 else
10315 return TRUE;
10316
10317 case NT_S390_GS_CB:
10318 if (note->namesz == 6
10319 && strcmp (note->namedata, "LINUX") == 0)
10320 return elfcore_grok_s390_gs_cb (abfd, note);
10321 else
10322 return TRUE;
10323
10324 case NT_S390_GS_BC:
10325 if (note->namesz == 6
10326 && strcmp (note->namedata, "LINUX") == 0)
10327 return elfcore_grok_s390_gs_bc (abfd, note);
10328 else
10329 return TRUE;
10330
10331 case NT_ARM_VFP:
10332 if (note->namesz == 6
10333 && strcmp (note->namedata, "LINUX") == 0)
10334 return elfcore_grok_arm_vfp (abfd, note);
10335 else
10336 return TRUE;
10337
10338 case NT_ARM_TLS:
10339 if (note->namesz == 6
10340 && strcmp (note->namedata, "LINUX") == 0)
10341 return elfcore_grok_aarch_tls (abfd, note);
10342 else
10343 return TRUE;
10344
10345 case NT_ARM_HW_BREAK:
10346 if (note->namesz == 6
10347 && strcmp (note->namedata, "LINUX") == 0)
10348 return elfcore_grok_aarch_hw_break (abfd, note);
10349 else
10350 return TRUE;
10351
10352 case NT_ARM_HW_WATCH:
10353 if (note->namesz == 6
10354 && strcmp (note->namedata, "LINUX") == 0)
10355 return elfcore_grok_aarch_hw_watch (abfd, note);
10356 else
10357 return TRUE;
10358
10359 case NT_ARM_SVE:
10360 if (note->namesz == 6
10361 && strcmp (note->namedata, "LINUX") == 0)
10362 return elfcore_grok_aarch_sve (abfd, note);
10363 else
10364 return TRUE;
10365
10366 case NT_ARM_PAC_MASK:
10367 if (note->namesz == 6
10368 && strcmp (note->namedata, "LINUX") == 0)
10369 return elfcore_grok_aarch_pauth (abfd, note);
10370 else
10371 return TRUE;
10372
10373 case NT_PRPSINFO:
10374 case NT_PSINFO:
10375 if (bed->elf_backend_grok_psinfo)
10376 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
10377 return TRUE;
10378 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10379 return elfcore_grok_psinfo (abfd, note);
10380 #else
10381 return TRUE;
10382 #endif
10383
10384 case NT_AUXV:
10385 return elfcore_make_auxv_note_section (abfd, note, 0);
10386
10387 case NT_FILE:
10388 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
10389 note);
10390
10391 case NT_SIGINFO:
10392 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
10393 note);
10394
10395 }
10396 }
10397
10398 static bfd_boolean
10399 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
10400 {
10401 struct bfd_build_id* build_id;
10402
10403 if (note->descsz == 0)
10404 return FALSE;
10405
10406 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
10407 if (build_id == NULL)
10408 return FALSE;
10409
10410 build_id->size = note->descsz;
10411 memcpy (build_id->data, note->descdata, note->descsz);
10412 abfd->build_id = build_id;
10413
10414 return TRUE;
10415 }
10416
10417 static bfd_boolean
10418 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
10419 {
10420 switch (note->type)
10421 {
10422 default:
10423 return TRUE;
10424
10425 case NT_GNU_PROPERTY_TYPE_0:
10426 return _bfd_elf_parse_gnu_properties (abfd, note);
10427
10428 case NT_GNU_BUILD_ID:
10429 return elfobj_grok_gnu_build_id (abfd, note);
10430 }
10431 }
10432
10433 static bfd_boolean
10434 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
10435 {
10436 struct sdt_note *cur =
10437 (struct sdt_note *) bfd_alloc (abfd,
10438 sizeof (struct sdt_note) + note->descsz);
10439
10440 cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
10441 cur->size = (bfd_size_type) note->descsz;
10442 memcpy (cur->data, note->descdata, note->descsz);
10443
10444 elf_tdata (abfd)->sdt_note_head = cur;
10445
10446 return TRUE;
10447 }
10448
10449 static bfd_boolean
10450 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
10451 {
10452 switch (note->type)
10453 {
10454 case NT_STAPSDT:
10455 return elfobj_grok_stapsdt_note_1 (abfd, note);
10456
10457 default:
10458 return TRUE;
10459 }
10460 }
10461
10462 static bfd_boolean
10463 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
10464 {
10465 size_t offset;
10466
10467 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10468 {
10469 case ELFCLASS32:
10470 if (note->descsz < 108)
10471 return FALSE;
10472 break;
10473
10474 case ELFCLASS64:
10475 if (note->descsz < 120)
10476 return FALSE;
10477 break;
10478
10479 default:
10480 return FALSE;
10481 }
10482
10483 /* Check for version 1 in pr_version. */
10484 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10485 return FALSE;
10486
10487 offset = 4;
10488
10489 /* Skip over pr_psinfosz. */
10490 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10491 offset += 4;
10492 else
10493 {
10494 offset += 4; /* Padding before pr_psinfosz. */
10495 offset += 8;
10496 }
10497
10498 /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
10499 elf_tdata (abfd)->core->program
10500 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
10501 offset += 17;
10502
10503 /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
10504 elf_tdata (abfd)->core->command
10505 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
10506 offset += 81;
10507
10508 /* Padding before pr_pid. */
10509 offset += 2;
10510
10511 /* The pr_pid field was added in version "1a". */
10512 if (note->descsz < offset + 4)
10513 return TRUE;
10514
10515 elf_tdata (abfd)->core->pid
10516 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10517
10518 return TRUE;
10519 }
10520
10521 static bfd_boolean
10522 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
10523 {
10524 size_t offset;
10525 size_t size;
10526 size_t min_size;
10527
10528 /* Compute offset of pr_getregsz, skipping over pr_statussz.
10529 Also compute minimum size of this note. */
10530 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
10531 {
10532 case ELFCLASS32:
10533 offset = 4 + 4;
10534 min_size = offset + (4 * 2) + 4 + 4 + 4;
10535 break;
10536
10537 case ELFCLASS64:
10538 offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */
10539 min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
10540 break;
10541
10542 default:
10543 return FALSE;
10544 }
10545
10546 if (note->descsz < min_size)
10547 return FALSE;
10548
10549 /* Check for version 1 in pr_version. */
10550 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
10551 return FALSE;
10552
10553 /* Extract size of pr_reg from pr_gregsetsz. */
10554 /* Skip over pr_gregsetsz and pr_fpregsetsz. */
10555 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
10556 {
10557 size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10558 offset += 4 * 2;
10559 }
10560 else
10561 {
10562 size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
10563 offset += 8 * 2;
10564 }
10565
10566 /* Skip over pr_osreldate. */
10567 offset += 4;
10568
10569 /* Read signal from pr_cursig. */
10570 if (elf_tdata (abfd)->core->signal == 0)
10571 elf_tdata (abfd)->core->signal
10572 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10573 offset += 4;
10574
10575 /* Read TID from pr_pid. */
10576 elf_tdata (abfd)->core->lwpid
10577 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
10578 offset += 4;
10579
10580 /* Padding before pr_reg. */
10581 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
10582 offset += 4;
10583
10584 /* Make sure that there is enough data remaining in the note. */
10585 if ((note->descsz - offset) < size)
10586 return FALSE;
10587
10588 /* Make a ".reg/999" section and a ".reg" section. */
10589 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
10590 size, note->descpos + offset);
10591 }
10592
10593 static bfd_boolean
10594 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
10595 {
10596 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
10597
10598 switch (note->type)
10599 {
10600 case NT_PRSTATUS:
10601 if (bed->elf_backend_grok_freebsd_prstatus)
10602 if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
10603 return TRUE;
10604 return elfcore_grok_freebsd_prstatus (abfd, note);
10605
10606 case NT_FPREGSET:
10607 return elfcore_grok_prfpreg (abfd, note);
10608
10609 case NT_PRPSINFO:
10610 return elfcore_grok_freebsd_psinfo (abfd, note);
10611
10612 case NT_FREEBSD_THRMISC:
10613 if (note->namesz == 8)
10614 return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
10615 else
10616 return TRUE;
10617
10618 case NT_FREEBSD_PROCSTAT_PROC:
10619 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
10620 note);
10621
10622 case NT_FREEBSD_PROCSTAT_FILES:
10623 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
10624 note);
10625
10626 case NT_FREEBSD_PROCSTAT_VMMAP:
10627 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
10628 note);
10629
10630 case NT_FREEBSD_PROCSTAT_AUXV:
10631 return elfcore_make_auxv_note_section (abfd, note, 4);
10632
10633 case NT_X86_XSTATE:
10634 if (note->namesz == 8)
10635 return elfcore_grok_xstatereg (abfd, note);
10636 else
10637 return TRUE;
10638
10639 case NT_FREEBSD_PTLWPINFO:
10640 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
10641 note);
10642
10643 case NT_ARM_VFP:
10644 return elfcore_grok_arm_vfp (abfd, note);
10645
10646 default:
10647 return TRUE;
10648 }
10649 }
10650
10651 static bfd_boolean
10652 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
10653 {
10654 char *cp;
10655
10656 cp = strchr (note->namedata, '@');
10657 if (cp != NULL)
10658 {
10659 *lwpidp = atoi(cp + 1);
10660 return TRUE;
10661 }
10662 return FALSE;
10663 }
10664
10665 static bfd_boolean
10666 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
10667 {
10668 if (note->descsz <= 0x7c + 31)
10669 return FALSE;
10670
10671 /* Signal number at offset 0x08. */
10672 elf_tdata (abfd)->core->signal
10673 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10674
10675 /* Process ID at offset 0x50. */
10676 elf_tdata (abfd)->core->pid
10677 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
10678
10679 /* Command name at 0x7c (max 32 bytes, including nul). */
10680 elf_tdata (abfd)->core->command
10681 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
10682
10683 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
10684 note);
10685 }
10686
10687 static bfd_boolean
10688 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
10689 {
10690 int lwp;
10691
10692 if (elfcore_netbsd_get_lwpid (note, &lwp))
10693 elf_tdata (abfd)->core->lwpid = lwp;
10694
10695 switch (note->type)
10696 {
10697 case NT_NETBSDCORE_PROCINFO:
10698 /* NetBSD-specific core "procinfo". Note that we expect to
10699 find this note before any of the others, which is fine,
10700 since the kernel writes this note out first when it
10701 creates a core file. */
10702 return elfcore_grok_netbsd_procinfo (abfd, note);
10703 #ifdef NT_NETBSDCORE_AUXV
10704 case NT_NETBSDCORE_AUXV:
10705 /* NetBSD-specific Elf Auxiliary Vector data. */
10706 return elfcore_make_auxv_note_section (abfd, note, 4);
10707 #endif
10708 default:
10709 break;
10710 }
10711
10712 /* As of March 2017 there are no other machine-independent notes
10713 defined for NetBSD core files. If the note type is less
10714 than the start of the machine-dependent note types, we don't
10715 understand it. */
10716
10717 if (note->type < NT_NETBSDCORE_FIRSTMACH)
10718 return TRUE;
10719
10720
10721 switch (bfd_get_arch (abfd))
10722 {
10723 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
10724 PT_GETFPREGS == mach+2. */
10725
10726 case bfd_arch_alpha:
10727 case bfd_arch_sparc:
10728 switch (note->type)
10729 {
10730 case NT_NETBSDCORE_FIRSTMACH+0:
10731 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10732
10733 case NT_NETBSDCORE_FIRSTMACH+2:
10734 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10735
10736 default:
10737 return TRUE;
10738 }
10739
10740 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
10741 There's also old PT___GETREGS40 == mach + 1 for old reg
10742 structure which lacks GBR. */
10743
10744 case bfd_arch_sh:
10745 switch (note->type)
10746 {
10747 case NT_NETBSDCORE_FIRSTMACH+3:
10748 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10749
10750 case NT_NETBSDCORE_FIRSTMACH+5:
10751 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10752
10753 default:
10754 return TRUE;
10755 }
10756
10757 /* On all other arch's, PT_GETREGS == mach+1 and
10758 PT_GETFPREGS == mach+3. */
10759
10760 default:
10761 switch (note->type)
10762 {
10763 case NT_NETBSDCORE_FIRSTMACH+1:
10764 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10765
10766 case NT_NETBSDCORE_FIRSTMACH+3:
10767 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10768
10769 default:
10770 return TRUE;
10771 }
10772 }
10773 /* NOTREACHED */
10774 }
10775
10776 static bfd_boolean
10777 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
10778 {
10779 if (note->descsz <= 0x48 + 31)
10780 return FALSE;
10781
10782 /* Signal number at offset 0x08. */
10783 elf_tdata (abfd)->core->signal
10784 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
10785
10786 /* Process ID at offset 0x20. */
10787 elf_tdata (abfd)->core->pid
10788 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
10789
10790 /* Command name at 0x48 (max 32 bytes, including nul). */
10791 elf_tdata (abfd)->core->command
10792 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
10793
10794 return TRUE;
10795 }
10796
10797 static bfd_boolean
10798 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
10799 {
10800 if (note->type == NT_OPENBSD_PROCINFO)
10801 return elfcore_grok_openbsd_procinfo (abfd, note);
10802
10803 if (note->type == NT_OPENBSD_REGS)
10804 return elfcore_make_note_pseudosection (abfd, ".reg", note);
10805
10806 if (note->type == NT_OPENBSD_FPREGS)
10807 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
10808
10809 if (note->type == NT_OPENBSD_XFPREGS)
10810 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
10811
10812 if (note->type == NT_OPENBSD_AUXV)
10813 return elfcore_make_auxv_note_section (abfd, note, 0);
10814
10815 if (note->type == NT_OPENBSD_WCOOKIE)
10816 {
10817 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
10818 SEC_HAS_CONTENTS);
10819
10820 if (sect == NULL)
10821 return FALSE;
10822 sect->size = note->descsz;
10823 sect->filepos = note->descpos;
10824 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
10825
10826 return TRUE;
10827 }
10828
10829 return TRUE;
10830 }
10831
10832 static bfd_boolean
10833 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
10834 {
10835 void *ddata = note->descdata;
10836 char buf[100];
10837 char *name;
10838 asection *sect;
10839 short sig;
10840 unsigned flags;
10841
10842 if (note->descsz < 16)
10843 return FALSE;
10844
10845 /* nto_procfs_status 'pid' field is at offset 0. */
10846 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
10847
10848 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
10849 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
10850
10851 /* nto_procfs_status 'flags' field is at offset 8. */
10852 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
10853
10854 /* nto_procfs_status 'what' field is at offset 14. */
10855 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
10856 {
10857 elf_tdata (abfd)->core->signal = sig;
10858 elf_tdata (abfd)->core->lwpid = *tid;
10859 }
10860
10861 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
10862 do not come from signals so we make sure we set the current
10863 thread just in case. */
10864 if (flags & 0x00000080)
10865 elf_tdata (abfd)->core->lwpid = *tid;
10866
10867 /* Make a ".qnx_core_status/%d" section. */
10868 sprintf (buf, ".qnx_core_status/%ld", *tid);
10869
10870 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
10871 if (name == NULL)
10872 return FALSE;
10873 strcpy (name, buf);
10874
10875 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10876 if (sect == NULL)
10877 return FALSE;
10878
10879 sect->size = note->descsz;
10880 sect->filepos = note->descpos;
10881 sect->alignment_power = 2;
10882
10883 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
10884 }
10885
10886 static bfd_boolean
10887 elfcore_grok_nto_regs (bfd *abfd,
10888 Elf_Internal_Note *note,
10889 long tid,
10890 char *base)
10891 {
10892 char buf[100];
10893 char *name;
10894 asection *sect;
10895
10896 /* Make a "(base)/%d" section. */
10897 sprintf (buf, "%s/%ld", base, tid);
10898
10899 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
10900 if (name == NULL)
10901 return FALSE;
10902 strcpy (name, buf);
10903
10904 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10905 if (sect == NULL)
10906 return FALSE;
10907
10908 sect->size = note->descsz;
10909 sect->filepos = note->descpos;
10910 sect->alignment_power = 2;
10911
10912 /* This is the current thread. */
10913 if (elf_tdata (abfd)->core->lwpid == tid)
10914 return elfcore_maybe_make_sect (abfd, base, sect);
10915
10916 return TRUE;
10917 }
10918
10919 #define BFD_QNT_CORE_INFO 7
10920 #define BFD_QNT_CORE_STATUS 8
10921 #define BFD_QNT_CORE_GREG 9
10922 #define BFD_QNT_CORE_FPREG 10
10923
10924 static bfd_boolean
10925 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
10926 {
10927 /* Every GREG section has a STATUS section before it. Store the
10928 tid from the previous call to pass down to the next gregs
10929 function. */
10930 static long tid = 1;
10931
10932 switch (note->type)
10933 {
10934 case BFD_QNT_CORE_INFO:
10935 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
10936 case BFD_QNT_CORE_STATUS:
10937 return elfcore_grok_nto_status (abfd, note, &tid);
10938 case BFD_QNT_CORE_GREG:
10939 return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
10940 case BFD_QNT_CORE_FPREG:
10941 return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
10942 default:
10943 return TRUE;
10944 }
10945 }
10946
10947 static bfd_boolean
10948 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
10949 {
10950 char *name;
10951 asection *sect;
10952 size_t len;
10953
10954 /* Use note name as section name. */
10955 len = note->namesz;
10956 name = (char *) bfd_alloc (abfd, len);
10957 if (name == NULL)
10958 return FALSE;
10959 memcpy (name, note->namedata, len);
10960 name[len - 1] = '\0';
10961
10962 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10963 if (sect == NULL)
10964 return FALSE;
10965
10966 sect->size = note->descsz;
10967 sect->filepos = note->descpos;
10968 sect->alignment_power = 1;
10969
10970 return TRUE;
10971 }
10972
10973 /* Function: elfcore_write_note
10974
10975 Inputs:
10976 buffer to hold note, and current size of buffer
10977 name of note
10978 type of note
10979 data for note
10980 size of data for note
10981
10982 Writes note to end of buffer. ELF64 notes are written exactly as
10983 for ELF32, despite the current (as of 2006) ELF gabi specifying
10984 that they ought to have 8-byte namesz and descsz field, and have
10985 8-byte alignment. Other writers, eg. Linux kernel, do the same.
10986
10987 Return:
10988 Pointer to realloc'd buffer, *BUFSIZ updated. */
10989
10990 char *
10991 elfcore_write_note (bfd *abfd,
10992 char *buf,
10993 int *bufsiz,
10994 const char *name,
10995 int type,
10996 const void *input,
10997 int size)
10998 {
10999 Elf_External_Note *xnp;
11000 size_t namesz;
11001 size_t newspace;
11002 char *dest;
11003
11004 namesz = 0;
11005 if (name != NULL)
11006 namesz = strlen (name) + 1;
11007
11008 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
11009
11010 buf = (char *) realloc (buf, *bufsiz + newspace);
11011 if (buf == NULL)
11012 return buf;
11013 dest = buf + *bufsiz;
11014 *bufsiz += newspace;
11015 xnp = (Elf_External_Note *) dest;
11016 H_PUT_32 (abfd, namesz, xnp->namesz);
11017 H_PUT_32 (abfd, size, xnp->descsz);
11018 H_PUT_32 (abfd, type, xnp->type);
11019 dest = xnp->name;
11020 if (name != NULL)
11021 {
11022 memcpy (dest, name, namesz);
11023 dest += namesz;
11024 while (namesz & 3)
11025 {
11026 *dest++ = '\0';
11027 ++namesz;
11028 }
11029 }
11030 memcpy (dest, input, size);
11031 dest += size;
11032 while (size & 3)
11033 {
11034 *dest++ = '\0';
11035 ++size;
11036 }
11037 return buf;
11038 }
11039
11040 /* gcc-8 warns (*) on all the strncpy calls in this function about
11041 possible string truncation. The "truncation" is not a bug. We
11042 have an external representation of structs with fields that are not
11043 necessarily NULL terminated and corresponding internal
11044 representation fields that are one larger so that they can always
11045 be NULL terminated.
11046 gcc versions between 4.2 and 4.6 do not allow pragma control of
11047 diagnostics inside functions, giving a hard error if you try to use
11048 the finer control available with later versions.
11049 gcc prior to 4.2 warns about diagnostic push and pop.
11050 gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
11051 unless you also add #pragma GCC diagnostic ignored "-Wpragma".
11052 (*) Depending on your system header files! */
11053 #if GCC_VERSION >= 8000
11054 # pragma GCC diagnostic push
11055 # pragma GCC diagnostic ignored "-Wstringop-truncation"
11056 #endif
11057 char *
11058 elfcore_write_prpsinfo (bfd *abfd,
11059 char *buf,
11060 int *bufsiz,
11061 const char *fname,
11062 const char *psargs)
11063 {
11064 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11065
11066 if (bed->elf_backend_write_core_note != NULL)
11067 {
11068 char *ret;
11069 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11070 NT_PRPSINFO, fname, psargs);
11071 if (ret != NULL)
11072 return ret;
11073 }
11074
11075 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11076 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
11077 if (bed->s->elfclass == ELFCLASS32)
11078 {
11079 # if defined (HAVE_PSINFO32_T)
11080 psinfo32_t data;
11081 int note_type = NT_PSINFO;
11082 # else
11083 prpsinfo32_t data;
11084 int note_type = NT_PRPSINFO;
11085 # endif
11086
11087 memset (&data, 0, sizeof (data));
11088 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11089 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11090 return elfcore_write_note (abfd, buf, bufsiz,
11091 "CORE", note_type, &data, sizeof (data));
11092 }
11093 else
11094 # endif
11095 {
11096 # if defined (HAVE_PSINFO_T)
11097 psinfo_t data;
11098 int note_type = NT_PSINFO;
11099 # else
11100 prpsinfo_t data;
11101 int note_type = NT_PRPSINFO;
11102 # endif
11103
11104 memset (&data, 0, sizeof (data));
11105 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
11106 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
11107 return elfcore_write_note (abfd, buf, bufsiz,
11108 "CORE", note_type, &data, sizeof (data));
11109 }
11110 #endif /* PSINFO_T or PRPSINFO_T */
11111
11112 free (buf);
11113 return NULL;
11114 }
11115 #if GCC_VERSION >= 8000
11116 # pragma GCC diagnostic pop
11117 #endif
11118
11119 char *
11120 elfcore_write_linux_prpsinfo32
11121 (bfd *abfd, char *buf, int *bufsiz,
11122 const struct elf_internal_linux_prpsinfo *prpsinfo)
11123 {
11124 if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
11125 {
11126 struct elf_external_linux_prpsinfo32_ugid16 data;
11127
11128 swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
11129 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11130 &data, sizeof (data));
11131 }
11132 else
11133 {
11134 struct elf_external_linux_prpsinfo32_ugid32 data;
11135
11136 swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
11137 return elfcore_write_note (abfd, buf, bufsiz, "CORE", NT_PRPSINFO,
11138 &data, sizeof (data));
11139 }
11140 }
11141
11142 char *
11143 elfcore_write_linux_prpsinfo64
11144 (bfd *abfd, char *buf, int *bufsiz,
11145 const struct elf_internal_linux_prpsinfo *prpsinfo)
11146 {
11147 if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
11148 {
11149 struct elf_external_linux_prpsinfo64_ugid16 data;
11150
11151 swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
11152 return elfcore_write_note (abfd, buf, bufsiz,
11153 "CORE", NT_PRPSINFO, &data, sizeof (data));
11154 }
11155 else
11156 {
11157 struct elf_external_linux_prpsinfo64_ugid32 data;
11158
11159 swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
11160 return elfcore_write_note (abfd, buf, bufsiz,
11161 "CORE", NT_PRPSINFO, &data, sizeof (data));
11162 }
11163 }
11164
11165 char *
11166 elfcore_write_prstatus (bfd *abfd,
11167 char *buf,
11168 int *bufsiz,
11169 long pid,
11170 int cursig,
11171 const void *gregs)
11172 {
11173 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11174
11175 if (bed->elf_backend_write_core_note != NULL)
11176 {
11177 char *ret;
11178 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
11179 NT_PRSTATUS,
11180 pid, cursig, gregs);
11181 if (ret != NULL)
11182 return ret;
11183 }
11184
11185 #if defined (HAVE_PRSTATUS_T)
11186 #if defined (HAVE_PRSTATUS32_T)
11187 if (bed->s->elfclass == ELFCLASS32)
11188 {
11189 prstatus32_t prstat;
11190
11191 memset (&prstat, 0, sizeof (prstat));
11192 prstat.pr_pid = pid;
11193 prstat.pr_cursig = cursig;
11194 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11195 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11196 NT_PRSTATUS, &prstat, sizeof (prstat));
11197 }
11198 else
11199 #endif
11200 {
11201 prstatus_t prstat;
11202
11203 memset (&prstat, 0, sizeof (prstat));
11204 prstat.pr_pid = pid;
11205 prstat.pr_cursig = cursig;
11206 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
11207 return elfcore_write_note (abfd, buf, bufsiz, "CORE",
11208 NT_PRSTATUS, &prstat, sizeof (prstat));
11209 }
11210 #endif /* HAVE_PRSTATUS_T */
11211
11212 free (buf);
11213 return NULL;
11214 }
11215
11216 #if defined (HAVE_LWPSTATUS_T)
11217 char *
11218 elfcore_write_lwpstatus (bfd *abfd,
11219 char *buf,
11220 int *bufsiz,
11221 long pid,
11222 int cursig,
11223 const void *gregs)
11224 {
11225 lwpstatus_t lwpstat;
11226 const char *note_name = "CORE";
11227
11228 memset (&lwpstat, 0, sizeof (lwpstat));
11229 lwpstat.pr_lwpid = pid >> 16;
11230 lwpstat.pr_cursig = cursig;
11231 #if defined (HAVE_LWPSTATUS_T_PR_REG)
11232 memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
11233 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11234 #if !defined(gregs)
11235 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
11236 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
11237 #else
11238 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
11239 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
11240 #endif
11241 #endif
11242 return elfcore_write_note (abfd, buf, bufsiz, note_name,
11243 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
11244 }
11245 #endif /* HAVE_LWPSTATUS_T */
11246
11247 #if defined (HAVE_PSTATUS_T)
11248 char *
11249 elfcore_write_pstatus (bfd *abfd,
11250 char *buf,
11251 int *bufsiz,
11252 long pid,
11253 int cursig ATTRIBUTE_UNUSED,
11254 const void *gregs ATTRIBUTE_UNUSED)
11255 {
11256 const char *note_name = "CORE";
11257 #if defined (HAVE_PSTATUS32_T)
11258 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
11259
11260 if (bed->s->elfclass == ELFCLASS32)
11261 {
11262 pstatus32_t pstat;
11263
11264 memset (&pstat, 0, sizeof (pstat));
11265 pstat.pr_pid = pid & 0xffff;
11266 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11267 NT_PSTATUS, &pstat, sizeof (pstat));
11268 return buf;
11269 }
11270 else
11271 #endif
11272 {
11273 pstatus_t pstat;
11274
11275 memset (&pstat, 0, sizeof (pstat));
11276 pstat.pr_pid = pid & 0xffff;
11277 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
11278 NT_PSTATUS, &pstat, sizeof (pstat));
11279 return buf;
11280 }
11281 }
11282 #endif /* HAVE_PSTATUS_T */
11283
11284 char *
11285 elfcore_write_prfpreg (bfd *abfd,
11286 char *buf,
11287 int *bufsiz,
11288 const void *fpregs,
11289 int size)
11290 {
11291 const char *note_name = "CORE";
11292 return elfcore_write_note (abfd, buf, bufsiz,
11293 note_name, NT_FPREGSET, fpregs, size);
11294 }
11295
11296 char *
11297 elfcore_write_prxfpreg (bfd *abfd,
11298 char *buf,
11299 int *bufsiz,
11300 const void *xfpregs,
11301 int size)
11302 {
11303 char *note_name = "LINUX";
11304 return elfcore_write_note (abfd, buf, bufsiz,
11305 note_name, NT_PRXFPREG, xfpregs, size);
11306 }
11307
11308 char *
11309 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
11310 const void *xfpregs, int size)
11311 {
11312 char *note_name;
11313 if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
11314 note_name = "FreeBSD";
11315 else
11316 note_name = "LINUX";
11317 return elfcore_write_note (abfd, buf, bufsiz,
11318 note_name, NT_X86_XSTATE, xfpregs, size);
11319 }
11320
11321 char *
11322 elfcore_write_ppc_vmx (bfd *abfd,
11323 char *buf,
11324 int *bufsiz,
11325 const void *ppc_vmx,
11326 int size)
11327 {
11328 char *note_name = "LINUX";
11329 return elfcore_write_note (abfd, buf, bufsiz,
11330 note_name, NT_PPC_VMX, ppc_vmx, size);
11331 }
11332
11333 char *
11334 elfcore_write_ppc_vsx (bfd *abfd,
11335 char *buf,
11336 int *bufsiz,
11337 const void *ppc_vsx,
11338 int size)
11339 {
11340 char *note_name = "LINUX";
11341 return elfcore_write_note (abfd, buf, bufsiz,
11342 note_name, NT_PPC_VSX, ppc_vsx, size);
11343 }
11344
11345 char *
11346 elfcore_write_ppc_tar (bfd *abfd,
11347 char *buf,
11348 int *bufsiz,
11349 const void *ppc_tar,
11350 int size)
11351 {
11352 char *note_name = "LINUX";
11353 return elfcore_write_note (abfd, buf, bufsiz,
11354 note_name, NT_PPC_TAR, ppc_tar, size);
11355 }
11356
11357 char *
11358 elfcore_write_ppc_ppr (bfd *abfd,
11359 char *buf,
11360 int *bufsiz,
11361 const void *ppc_ppr,
11362 int size)
11363 {
11364 char *note_name = "LINUX";
11365 return elfcore_write_note (abfd, buf, bufsiz,
11366 note_name, NT_PPC_PPR, ppc_ppr, size);
11367 }
11368
11369 char *
11370 elfcore_write_ppc_dscr (bfd *abfd,
11371 char *buf,
11372 int *bufsiz,
11373 const void *ppc_dscr,
11374 int size)
11375 {
11376 char *note_name = "LINUX";
11377 return elfcore_write_note (abfd, buf, bufsiz,
11378 note_name, NT_PPC_DSCR, ppc_dscr, size);
11379 }
11380
11381 char *
11382 elfcore_write_ppc_ebb (bfd *abfd,
11383 char *buf,
11384 int *bufsiz,
11385 const void *ppc_ebb,
11386 int size)
11387 {
11388 char *note_name = "LINUX";
11389 return elfcore_write_note (abfd, buf, bufsiz,
11390 note_name, NT_PPC_EBB, ppc_ebb, size);
11391 }
11392
11393 char *
11394 elfcore_write_ppc_pmu (bfd *abfd,
11395 char *buf,
11396 int *bufsiz,
11397 const void *ppc_pmu,
11398 int size)
11399 {
11400 char *note_name = "LINUX";
11401 return elfcore_write_note (abfd, buf, bufsiz,
11402 note_name, NT_PPC_PMU, ppc_pmu, size);
11403 }
11404
11405 char *
11406 elfcore_write_ppc_tm_cgpr (bfd *abfd,
11407 char *buf,
11408 int *bufsiz,
11409 const void *ppc_tm_cgpr,
11410 int size)
11411 {
11412 char *note_name = "LINUX";
11413 return elfcore_write_note (abfd, buf, bufsiz,
11414 note_name, NT_PPC_TM_CGPR, ppc_tm_cgpr, size);
11415 }
11416
11417 char *
11418 elfcore_write_ppc_tm_cfpr (bfd *abfd,
11419 char *buf,
11420 int *bufsiz,
11421 const void *ppc_tm_cfpr,
11422 int size)
11423 {
11424 char *note_name = "LINUX";
11425 return elfcore_write_note (abfd, buf, bufsiz,
11426 note_name, NT_PPC_TM_CFPR, ppc_tm_cfpr, size);
11427 }
11428
11429 char *
11430 elfcore_write_ppc_tm_cvmx (bfd *abfd,
11431 char *buf,
11432 int *bufsiz,
11433 const void *ppc_tm_cvmx,
11434 int size)
11435 {
11436 char *note_name = "LINUX";
11437 return elfcore_write_note (abfd, buf, bufsiz,
11438 note_name, NT_PPC_TM_CVMX, ppc_tm_cvmx, size);
11439 }
11440
11441 char *
11442 elfcore_write_ppc_tm_cvsx (bfd *abfd,
11443 char *buf,
11444 int *bufsiz,
11445 const void *ppc_tm_cvsx,
11446 int size)
11447 {
11448 char *note_name = "LINUX";
11449 return elfcore_write_note (abfd, buf, bufsiz,
11450 note_name, NT_PPC_TM_CVSX, ppc_tm_cvsx, size);
11451 }
11452
11453 char *
11454 elfcore_write_ppc_tm_spr (bfd *abfd,
11455 char *buf,
11456 int *bufsiz,
11457 const void *ppc_tm_spr,
11458 int size)
11459 {
11460 char *note_name = "LINUX";
11461 return elfcore_write_note (abfd, buf, bufsiz,
11462 note_name, NT_PPC_TM_SPR, ppc_tm_spr, size);
11463 }
11464
11465 char *
11466 elfcore_write_ppc_tm_ctar (bfd *abfd,
11467 char *buf,
11468 int *bufsiz,
11469 const void *ppc_tm_ctar,
11470 int size)
11471 {
11472 char *note_name = "LINUX";
11473 return elfcore_write_note (abfd, buf, bufsiz,
11474 note_name, NT_PPC_TM_CTAR, ppc_tm_ctar, size);
11475 }
11476
11477 char *
11478 elfcore_write_ppc_tm_cppr (bfd *abfd,
11479 char *buf,
11480 int *bufsiz,
11481 const void *ppc_tm_cppr,
11482 int size)
11483 {
11484 char *note_name = "LINUX";
11485 return elfcore_write_note (abfd, buf, bufsiz,
11486 note_name, NT_PPC_TM_CPPR, ppc_tm_cppr, size);
11487 }
11488
11489 char *
11490 elfcore_write_ppc_tm_cdscr (bfd *abfd,
11491 char *buf,
11492 int *bufsiz,
11493 const void *ppc_tm_cdscr,
11494 int size)
11495 {
11496 char *note_name = "LINUX";
11497 return elfcore_write_note (abfd, buf, bufsiz,
11498 note_name, NT_PPC_TM_CDSCR, ppc_tm_cdscr, size);
11499 }
11500
11501 static char *
11502 elfcore_write_s390_high_gprs (bfd *abfd,
11503 char *buf,
11504 int *bufsiz,
11505 const void *s390_high_gprs,
11506 int size)
11507 {
11508 char *note_name = "LINUX";
11509 return elfcore_write_note (abfd, buf, bufsiz,
11510 note_name, NT_S390_HIGH_GPRS,
11511 s390_high_gprs, size);
11512 }
11513
11514 char *
11515 elfcore_write_s390_timer (bfd *abfd,
11516 char *buf,
11517 int *bufsiz,
11518 const void *s390_timer,
11519 int size)
11520 {
11521 char *note_name = "LINUX";
11522 return elfcore_write_note (abfd, buf, bufsiz,
11523 note_name, NT_S390_TIMER, s390_timer, size);
11524 }
11525
11526 char *
11527 elfcore_write_s390_todcmp (bfd *abfd,
11528 char *buf,
11529 int *bufsiz,
11530 const void *s390_todcmp,
11531 int size)
11532 {
11533 char *note_name = "LINUX";
11534 return elfcore_write_note (abfd, buf, bufsiz,
11535 note_name, NT_S390_TODCMP, s390_todcmp, size);
11536 }
11537
11538 char *
11539 elfcore_write_s390_todpreg (bfd *abfd,
11540 char *buf,
11541 int *bufsiz,
11542 const void *s390_todpreg,
11543 int size)
11544 {
11545 char *note_name = "LINUX";
11546 return elfcore_write_note (abfd, buf, bufsiz,
11547 note_name, NT_S390_TODPREG, s390_todpreg, size);
11548 }
11549
11550 char *
11551 elfcore_write_s390_ctrs (bfd *abfd,
11552 char *buf,
11553 int *bufsiz,
11554 const void *s390_ctrs,
11555 int size)
11556 {
11557 char *note_name = "LINUX";
11558 return elfcore_write_note (abfd, buf, bufsiz,
11559 note_name, NT_S390_CTRS, s390_ctrs, size);
11560 }
11561
11562 char *
11563 elfcore_write_s390_prefix (bfd *abfd,
11564 char *buf,
11565 int *bufsiz,
11566 const void *s390_prefix,
11567 int size)
11568 {
11569 char *note_name = "LINUX";
11570 return elfcore_write_note (abfd, buf, bufsiz,
11571 note_name, NT_S390_PREFIX, s390_prefix, size);
11572 }
11573
11574 char *
11575 elfcore_write_s390_last_break (bfd *abfd,
11576 char *buf,
11577 int *bufsiz,
11578 const void *s390_last_break,
11579 int size)
11580 {
11581 char *note_name = "LINUX";
11582 return elfcore_write_note (abfd, buf, bufsiz,
11583 note_name, NT_S390_LAST_BREAK,
11584 s390_last_break, size);
11585 }
11586
11587 char *
11588 elfcore_write_s390_system_call (bfd *abfd,
11589 char *buf,
11590 int *bufsiz,
11591 const void *s390_system_call,
11592 int size)
11593 {
11594 char *note_name = "LINUX";
11595 return elfcore_write_note (abfd, buf, bufsiz,
11596 note_name, NT_S390_SYSTEM_CALL,
11597 s390_system_call, size);
11598 }
11599
11600 char *
11601 elfcore_write_s390_tdb (bfd *abfd,
11602 char *buf,
11603 int *bufsiz,
11604 const void *s390_tdb,
11605 int size)
11606 {
11607 char *note_name = "LINUX";
11608 return elfcore_write_note (abfd, buf, bufsiz,
11609 note_name, NT_S390_TDB, s390_tdb, size);
11610 }
11611
11612 char *
11613 elfcore_write_s390_vxrs_low (bfd *abfd,
11614 char *buf,
11615 int *bufsiz,
11616 const void *s390_vxrs_low,
11617 int size)
11618 {
11619 char *note_name = "LINUX";
11620 return elfcore_write_note (abfd, buf, bufsiz,
11621 note_name, NT_S390_VXRS_LOW, s390_vxrs_low, size);
11622 }
11623
11624 char *
11625 elfcore_write_s390_vxrs_high (bfd *abfd,
11626 char *buf,
11627 int *bufsiz,
11628 const void *s390_vxrs_high,
11629 int size)
11630 {
11631 char *note_name = "LINUX";
11632 return elfcore_write_note (abfd, buf, bufsiz,
11633 note_name, NT_S390_VXRS_HIGH,
11634 s390_vxrs_high, size);
11635 }
11636
11637 char *
11638 elfcore_write_s390_gs_cb (bfd *abfd,
11639 char *buf,
11640 int *bufsiz,
11641 const void *s390_gs_cb,
11642 int size)
11643 {
11644 char *note_name = "LINUX";
11645 return elfcore_write_note (abfd, buf, bufsiz,
11646 note_name, NT_S390_GS_CB,
11647 s390_gs_cb, size);
11648 }
11649
11650 char *
11651 elfcore_write_s390_gs_bc (bfd *abfd,
11652 char *buf,
11653 int *bufsiz,
11654 const void *s390_gs_bc,
11655 int size)
11656 {
11657 char *note_name = "LINUX";
11658 return elfcore_write_note (abfd, buf, bufsiz,
11659 note_name, NT_S390_GS_BC,
11660 s390_gs_bc, size);
11661 }
11662
11663 char *
11664 elfcore_write_arm_vfp (bfd *abfd,
11665 char *buf,
11666 int *bufsiz,
11667 const void *arm_vfp,
11668 int size)
11669 {
11670 char *note_name = "LINUX";
11671 return elfcore_write_note (abfd, buf, bufsiz,
11672 note_name, NT_ARM_VFP, arm_vfp, size);
11673 }
11674
11675 char *
11676 elfcore_write_aarch_tls (bfd *abfd,
11677 char *buf,
11678 int *bufsiz,
11679 const void *aarch_tls,
11680 int size)
11681 {
11682 char *note_name = "LINUX";
11683 return elfcore_write_note (abfd, buf, bufsiz,
11684 note_name, NT_ARM_TLS, aarch_tls, size);
11685 }
11686
11687 char *
11688 elfcore_write_aarch_hw_break (bfd *abfd,
11689 char *buf,
11690 int *bufsiz,
11691 const void *aarch_hw_break,
11692 int size)
11693 {
11694 char *note_name = "LINUX";
11695 return elfcore_write_note (abfd, buf, bufsiz,
11696 note_name, NT_ARM_HW_BREAK, aarch_hw_break, size);
11697 }
11698
11699 char *
11700 elfcore_write_aarch_hw_watch (bfd *abfd,
11701 char *buf,
11702 int *bufsiz,
11703 const void *aarch_hw_watch,
11704 int size)
11705 {
11706 char *note_name = "LINUX";
11707 return elfcore_write_note (abfd, buf, bufsiz,
11708 note_name, NT_ARM_HW_WATCH, aarch_hw_watch, size);
11709 }
11710
11711 char *
11712 elfcore_write_aarch_sve (bfd *abfd,
11713 char *buf,
11714 int *bufsiz,
11715 const void *aarch_sve,
11716 int size)
11717 {
11718 char *note_name = "LINUX";
11719 return elfcore_write_note (abfd, buf, bufsiz,
11720 note_name, NT_ARM_SVE, aarch_sve, size);
11721 }
11722
11723 char *
11724 elfcore_write_aarch_pauth (bfd *abfd,
11725 char *buf,
11726 int *bufsiz,
11727 const void *aarch_pauth,
11728 int size)
11729 {
11730 char *note_name = "LINUX";
11731 return elfcore_write_note (abfd, buf, bufsiz,
11732 note_name, NT_ARM_PAC_MASK, aarch_pauth, size);
11733 }
11734
11735 char *
11736 elfcore_write_register_note (bfd *abfd,
11737 char *buf,
11738 int *bufsiz,
11739 const char *section,
11740 const void *data,
11741 int size)
11742 {
11743 if (strcmp (section, ".reg2") == 0)
11744 return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
11745 if (strcmp (section, ".reg-xfp") == 0)
11746 return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
11747 if (strcmp (section, ".reg-xstate") == 0)
11748 return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
11749 if (strcmp (section, ".reg-ppc-vmx") == 0)
11750 return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
11751 if (strcmp (section, ".reg-ppc-vsx") == 0)
11752 return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
11753 if (strcmp (section, ".reg-ppc-tar") == 0)
11754 return elfcore_write_ppc_tar (abfd, buf, bufsiz, data, size);
11755 if (strcmp (section, ".reg-ppc-ppr") == 0)
11756 return elfcore_write_ppc_ppr (abfd, buf, bufsiz, data, size);
11757 if (strcmp (section, ".reg-ppc-dscr") == 0)
11758 return elfcore_write_ppc_dscr (abfd, buf, bufsiz, data, size);
11759 if (strcmp (section, ".reg-ppc-ebb") == 0)
11760 return elfcore_write_ppc_ebb (abfd, buf, bufsiz, data, size);
11761 if (strcmp (section, ".reg-ppc-pmu") == 0)
11762 return elfcore_write_ppc_pmu (abfd, buf, bufsiz, data, size);
11763 if (strcmp (section, ".reg-ppc-tm-cgpr") == 0)
11764 return elfcore_write_ppc_tm_cgpr (abfd, buf, bufsiz, data, size);
11765 if (strcmp (section, ".reg-ppc-tm-cfpr") == 0)
11766 return elfcore_write_ppc_tm_cfpr (abfd, buf, bufsiz, data, size);
11767 if (strcmp (section, ".reg-ppc-tm-cvmx") == 0)
11768 return elfcore_write_ppc_tm_cvmx (abfd, buf, bufsiz, data, size);
11769 if (strcmp (section, ".reg-ppc-tm-cvsx") == 0)
11770 return elfcore_write_ppc_tm_cvsx (abfd, buf, bufsiz, data, size);
11771 if (strcmp (section, ".reg-ppc-tm-spr") == 0)
11772 return elfcore_write_ppc_tm_spr (abfd, buf, bufsiz, data, size);
11773 if (strcmp (section, ".reg-ppc-tm-ctar") == 0)
11774 return elfcore_write_ppc_tm_ctar (abfd, buf, bufsiz, data, size);
11775 if (strcmp (section, ".reg-ppc-tm-cppr") == 0)
11776 return elfcore_write_ppc_tm_cppr (abfd, buf, bufsiz, data, size);
11777 if (strcmp (section, ".reg-ppc-tm-cdscr") == 0)
11778 return elfcore_write_ppc_tm_cdscr (abfd, buf, bufsiz, data, size);
11779 if (strcmp (section, ".reg-s390-high-gprs") == 0)
11780 return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
11781 if (strcmp (section, ".reg-s390-timer") == 0)
11782 return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
11783 if (strcmp (section, ".reg-s390-todcmp") == 0)
11784 return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
11785 if (strcmp (section, ".reg-s390-todpreg") == 0)
11786 return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
11787 if (strcmp (section, ".reg-s390-ctrs") == 0)
11788 return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
11789 if (strcmp (section, ".reg-s390-prefix") == 0)
11790 return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
11791 if (strcmp (section, ".reg-s390-last-break") == 0)
11792 return elfcore_write_s390_last_break (abfd, buf, bufsiz, data, size);
11793 if (strcmp (section, ".reg-s390-system-call") == 0)
11794 return elfcore_write_s390_system_call (abfd, buf, bufsiz, data, size);
11795 if (strcmp (section, ".reg-s390-tdb") == 0)
11796 return elfcore_write_s390_tdb (abfd, buf, bufsiz, data, size);
11797 if (strcmp (section, ".reg-s390-vxrs-low") == 0)
11798 return elfcore_write_s390_vxrs_low (abfd, buf, bufsiz, data, size);
11799 if (strcmp (section, ".reg-s390-vxrs-high") == 0)
11800 return elfcore_write_s390_vxrs_high (abfd, buf, bufsiz, data, size);
11801 if (strcmp (section, ".reg-s390-gs-cb") == 0)
11802 return elfcore_write_s390_gs_cb (abfd, buf, bufsiz, data, size);
11803 if (strcmp (section, ".reg-s390-gs-bc") == 0)
11804 return elfcore_write_s390_gs_bc (abfd, buf, bufsiz, data, size);
11805 if (strcmp (section, ".reg-arm-vfp") == 0)
11806 return elfcore_write_arm_vfp (abfd, buf, bufsiz, data, size);
11807 if (strcmp (section, ".reg-aarch-tls") == 0)
11808 return elfcore_write_aarch_tls (abfd, buf, bufsiz, data, size);
11809 if (strcmp (section, ".reg-aarch-hw-break") == 0)
11810 return elfcore_write_aarch_hw_break (abfd, buf, bufsiz, data, size);
11811 if (strcmp (section, ".reg-aarch-hw-watch") == 0)
11812 return elfcore_write_aarch_hw_watch (abfd, buf, bufsiz, data, size);
11813 if (strcmp (section, ".reg-aarch-sve") == 0)
11814 return elfcore_write_aarch_sve (abfd, buf, bufsiz, data, size);
11815 if (strcmp (section, ".reg-aarch-pauth") == 0)
11816 return elfcore_write_aarch_pauth (abfd, buf, bufsiz, data, size);
11817 return NULL;
11818 }
11819
11820 static bfd_boolean
11821 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
11822 size_t align)
11823 {
11824 char *p;
11825
11826 /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
11827 gABI specifies that PT_NOTE alignment should be aligned to 4
11828 bytes for 32-bit objects and to 8 bytes for 64-bit objects. If
11829 align is less than 4, we use 4 byte alignment. */
11830 if (align < 4)
11831 align = 4;
11832 if (align != 4 && align != 8)
11833 return FALSE;
11834
11835 p = buf;
11836 while (p < buf + size)
11837 {
11838 Elf_External_Note *xnp = (Elf_External_Note *) p;
11839 Elf_Internal_Note in;
11840
11841 if (offsetof (Elf_External_Note, name) > buf - p + size)
11842 return FALSE;
11843
11844 in.type = H_GET_32 (abfd, xnp->type);
11845
11846 in.namesz = H_GET_32 (abfd, xnp->namesz);
11847 in.namedata = xnp->name;
11848 if (in.namesz > buf - in.namedata + size)
11849 return FALSE;
11850
11851 in.descsz = H_GET_32 (abfd, xnp->descsz);
11852 in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
11853 in.descpos = offset + (in.descdata - buf);
11854 if (in.descsz != 0
11855 && (in.descdata >= buf + size
11856 || in.descsz > buf - in.descdata + size))
11857 return FALSE;
11858
11859 switch (bfd_get_format (abfd))
11860 {
11861 default:
11862 return TRUE;
11863
11864 case bfd_core:
11865 {
11866 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
11867 struct
11868 {
11869 const char * string;
11870 size_t len;
11871 bfd_boolean (* func)(bfd *, Elf_Internal_Note *);
11872 }
11873 grokers[] =
11874 {
11875 GROKER_ELEMENT ("", elfcore_grok_note),
11876 GROKER_ELEMENT ("FreeBSD", elfcore_grok_freebsd_note),
11877 GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
11878 GROKER_ELEMENT ( "OpenBSD", elfcore_grok_openbsd_note),
11879 GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
11880 GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
11881 GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note)
11882 };
11883 #undef GROKER_ELEMENT
11884 int i;
11885
11886 for (i = ARRAY_SIZE (grokers); i--;)
11887 {
11888 if (in.namesz >= grokers[i].len
11889 && strncmp (in.namedata, grokers[i].string,
11890 grokers[i].len) == 0)
11891 {
11892 if (! grokers[i].func (abfd, & in))
11893 return FALSE;
11894 break;
11895 }
11896 }
11897 break;
11898 }
11899
11900 case bfd_object:
11901 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
11902 {
11903 if (! elfobj_grok_gnu_note (abfd, &in))
11904 return FALSE;
11905 }
11906 else if (in.namesz == sizeof "stapsdt"
11907 && strcmp (in.namedata, "stapsdt") == 0)
11908 {
11909 if (! elfobj_grok_stapsdt_note (abfd, &in))
11910 return FALSE;
11911 }
11912 break;
11913 }
11914
11915 p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
11916 }
11917
11918 return TRUE;
11919 }
11920
11921 bfd_boolean
11922 elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
11923 size_t align)
11924 {
11925 char *buf;
11926
11927 if (size == 0 || (size + 1) == 0)
11928 return TRUE;
11929
11930 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
11931 return FALSE;
11932
11933 buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
11934 if (buf == NULL)
11935 return FALSE;
11936
11937 /* PR 17512: file: ec08f814
11938 0-termintate the buffer so that string searches will not overflow. */
11939 buf[size] = 0;
11940
11941 if (!elf_parse_notes (abfd, buf, size, offset, align))
11942 {
11943 free (buf);
11944 return FALSE;
11945 }
11946
11947 free (buf);
11948 return TRUE;
11949 }
11950 \f
11951 /* Providing external access to the ELF program header table. */
11952
11953 /* Return an upper bound on the number of bytes required to store a
11954 copy of ABFD's program header table entries. Return -1 if an error
11955 occurs; bfd_get_error will return an appropriate code. */
11956
11957 long
11958 bfd_get_elf_phdr_upper_bound (bfd *abfd)
11959 {
11960 if (abfd->xvec->flavour != bfd_target_elf_flavour)
11961 {
11962 bfd_set_error (bfd_error_wrong_format);
11963 return -1;
11964 }
11965
11966 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
11967 }
11968
11969 /* Copy ABFD's program header table entries to *PHDRS. The entries
11970 will be stored as an array of Elf_Internal_Phdr structures, as
11971 defined in include/elf/internal.h. To find out how large the
11972 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
11973
11974 Return the number of program header table entries read, or -1 if an
11975 error occurs; bfd_get_error will return an appropriate code. */
11976
11977 int
11978 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
11979 {
11980 int num_phdrs;
11981
11982 if (abfd->xvec->flavour != bfd_target_elf_flavour)
11983 {
11984 bfd_set_error (bfd_error_wrong_format);
11985 return -1;
11986 }
11987
11988 num_phdrs = elf_elfheader (abfd)->e_phnum;
11989 if (num_phdrs != 0)
11990 memcpy (phdrs, elf_tdata (abfd)->phdr,
11991 num_phdrs * sizeof (Elf_Internal_Phdr));
11992
11993 return num_phdrs;
11994 }
11995
11996 enum elf_reloc_type_class
11997 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
11998 const asection *rel_sec ATTRIBUTE_UNUSED,
11999 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
12000 {
12001 return reloc_class_normal;
12002 }
12003
12004 /* For RELA architectures, return the relocation value for a
12005 relocation against a local symbol. */
12006
12007 bfd_vma
12008 _bfd_elf_rela_local_sym (bfd *abfd,
12009 Elf_Internal_Sym *sym,
12010 asection **psec,
12011 Elf_Internal_Rela *rel)
12012 {
12013 asection *sec = *psec;
12014 bfd_vma relocation;
12015
12016 relocation = (sec->output_section->vma
12017 + sec->output_offset
12018 + sym->st_value);
12019 if ((sec->flags & SEC_MERGE)
12020 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
12021 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
12022 {
12023 rel->r_addend =
12024 _bfd_merged_section_offset (abfd, psec,
12025 elf_section_data (sec)->sec_info,
12026 sym->st_value + rel->r_addend);
12027 if (sec != *psec)
12028 {
12029 /* If we have changed the section, and our original section is
12030 marked with SEC_EXCLUDE, it means that the original
12031 SEC_MERGE section has been completely subsumed in some
12032 other SEC_MERGE section. In this case, we need to leave
12033 some info around for --emit-relocs. */
12034 if ((sec->flags & SEC_EXCLUDE) != 0)
12035 sec->kept_section = *psec;
12036 sec = *psec;
12037 }
12038 rel->r_addend -= relocation;
12039 rel->r_addend += sec->output_section->vma + sec->output_offset;
12040 }
12041 return relocation;
12042 }
12043
12044 bfd_vma
12045 _bfd_elf_rel_local_sym (bfd *abfd,
12046 Elf_Internal_Sym *sym,
12047 asection **psec,
12048 bfd_vma addend)
12049 {
12050 asection *sec = *psec;
12051
12052 if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
12053 return sym->st_value + addend;
12054
12055 return _bfd_merged_section_offset (abfd, psec,
12056 elf_section_data (sec)->sec_info,
12057 sym->st_value + addend);
12058 }
12059
12060 /* Adjust an address within a section. Given OFFSET within SEC, return
12061 the new offset within the section, based upon changes made to the
12062 section. Returns -1 if the offset is now invalid.
12063 The offset (in abnd out) is in target sized bytes, however big a
12064 byte may be. */
12065
12066 bfd_vma
12067 _bfd_elf_section_offset (bfd *abfd,
12068 struct bfd_link_info *info,
12069 asection *sec,
12070 bfd_vma offset)
12071 {
12072 switch (sec->sec_info_type)
12073 {
12074 case SEC_INFO_TYPE_STABS:
12075 return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
12076 offset);
12077 case SEC_INFO_TYPE_EH_FRAME:
12078 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
12079
12080 default:
12081 if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
12082 {
12083 /* Reverse the offset. */
12084 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12085 bfd_size_type address_size = bed->s->arch_size / 8;
12086
12087 /* address_size and sec->size are in octets. Convert
12088 to bytes before subtracting the original offset. */
12089 offset = ((sec->size - address_size)
12090 / bfd_octets_per_byte (abfd, sec) - offset);
12091 }
12092 return offset;
12093 }
12094 }
12095 \f
12096 /* Create a new BFD as if by bfd_openr. Rather than opening a file,
12097 reconstruct an ELF file by reading the segments out of remote memory
12098 based on the ELF file header at EHDR_VMA and the ELF program headers it
12099 points to. If not null, *LOADBASEP is filled in with the difference
12100 between the VMAs from which the segments were read, and the VMAs the
12101 file headers (and hence BFD's idea of each section's VMA) put them at.
12102
12103 The function TARGET_READ_MEMORY is called to copy LEN bytes from the
12104 remote memory at target address VMA into the local buffer at MYADDR; it
12105 should return zero on success or an `errno' code on failure. TEMPL must
12106 be a BFD for an ELF target with the word size and byte order found in
12107 the remote memory. */
12108
12109 bfd *
12110 bfd_elf_bfd_from_remote_memory
12111 (bfd *templ,
12112 bfd_vma ehdr_vma,
12113 bfd_size_type size,
12114 bfd_vma *loadbasep,
12115 int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type))
12116 {
12117 return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
12118 (templ, ehdr_vma, size, loadbasep, target_read_memory);
12119 }
12120 \f
12121 long
12122 _bfd_elf_get_synthetic_symtab (bfd *abfd,
12123 long symcount ATTRIBUTE_UNUSED,
12124 asymbol **syms ATTRIBUTE_UNUSED,
12125 long dynsymcount,
12126 asymbol **dynsyms,
12127 asymbol **ret)
12128 {
12129 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12130 asection *relplt;
12131 asymbol *s;
12132 const char *relplt_name;
12133 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
12134 arelent *p;
12135 long count, i, n;
12136 size_t size;
12137 Elf_Internal_Shdr *hdr;
12138 char *names;
12139 asection *plt;
12140
12141 *ret = NULL;
12142
12143 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
12144 return 0;
12145
12146 if (dynsymcount <= 0)
12147 return 0;
12148
12149 if (!bed->plt_sym_val)
12150 return 0;
12151
12152 relplt_name = bed->relplt_name;
12153 if (relplt_name == NULL)
12154 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
12155 relplt = bfd_get_section_by_name (abfd, relplt_name);
12156 if (relplt == NULL)
12157 return 0;
12158
12159 hdr = &elf_section_data (relplt)->this_hdr;
12160 if (hdr->sh_link != elf_dynsymtab (abfd)
12161 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
12162 return 0;
12163
12164 plt = bfd_get_section_by_name (abfd, ".plt");
12165 if (plt == NULL)
12166 return 0;
12167
12168 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
12169 if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
12170 return -1;
12171
12172 count = relplt->size / hdr->sh_entsize;
12173 size = count * sizeof (asymbol);
12174 p = relplt->relocation;
12175 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12176 {
12177 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
12178 if (p->addend != 0)
12179 {
12180 #ifdef BFD64
12181 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
12182 #else
12183 size += sizeof ("+0x") - 1 + 8;
12184 #endif
12185 }
12186 }
12187
12188 s = *ret = (asymbol *) bfd_malloc (size);
12189 if (s == NULL)
12190 return -1;
12191
12192 names = (char *) (s + count);
12193 p = relplt->relocation;
12194 n = 0;
12195 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
12196 {
12197 size_t len;
12198 bfd_vma addr;
12199
12200 addr = bed->plt_sym_val (i, plt, p);
12201 if (addr == (bfd_vma) -1)
12202 continue;
12203
12204 *s = **p->sym_ptr_ptr;
12205 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
12206 we are defining a symbol, ensure one of them is set. */
12207 if ((s->flags & BSF_LOCAL) == 0)
12208 s->flags |= BSF_GLOBAL;
12209 s->flags |= BSF_SYNTHETIC;
12210 s->section = plt;
12211 s->value = addr - plt->vma;
12212 s->name = names;
12213 s->udata.p = NULL;
12214 len = strlen ((*p->sym_ptr_ptr)->name);
12215 memcpy (names, (*p->sym_ptr_ptr)->name, len);
12216 names += len;
12217 if (p->addend != 0)
12218 {
12219 char buf[30], *a;
12220
12221 memcpy (names, "+0x", sizeof ("+0x") - 1);
12222 names += sizeof ("+0x") - 1;
12223 bfd_sprintf_vma (abfd, buf, p->addend);
12224 for (a = buf; *a == '0'; ++a)
12225 ;
12226 len = strlen (a);
12227 memcpy (names, a, len);
12228 names += len;
12229 }
12230 memcpy (names, "@plt", sizeof ("@plt"));
12231 names += sizeof ("@plt");
12232 ++s, ++n;
12233 }
12234
12235 return n;
12236 }
12237
12238 /* It is only used by x86-64 so far.
12239 ??? This repeats *COM* id of zero. sec->id is supposed to be unique,
12240 but current usage would allow all of _bfd_std_section to be zero. */
12241 static const asymbol lcomm_sym
12242 = GLOBAL_SYM_INIT ("LARGE_COMMON", &_bfd_elf_large_com_section);
12243 asection _bfd_elf_large_com_section
12244 = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym,
12245 "LARGE_COMMON", 0, SEC_IS_COMMON);
12246
12247 bfd_boolean
12248 _bfd_elf_final_write_processing (bfd *abfd)
12249 {
12250 Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */
12251
12252 i_ehdrp = elf_elfheader (abfd);
12253
12254 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12255 i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
12256
12257 /* Set the osabi field to ELFOSABI_GNU if the binary contains
12258 SHF_GNU_MBIND sections or symbols of STT_GNU_IFUNC type or
12259 STB_GNU_UNIQUE binding. */
12260 if (elf_tdata (abfd)->has_gnu_osabi != 0)
12261 {
12262 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
12263 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
12264 else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
12265 && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
12266 {
12267 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
12268 _bfd_error_handler (_("GNU_MBIND section is unsupported"));
12269 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
12270 _bfd_error_handler (_("symbol type STT_GNU_IFUNC is unsupported"));
12271 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
12272 _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is unsupported"));
12273 bfd_set_error (bfd_error_sorry);
12274 return FALSE;
12275 }
12276 }
12277 return TRUE;
12278 }
12279
12280
12281 /* Return TRUE for ELF symbol types that represent functions.
12282 This is the default version of this function, which is sufficient for
12283 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
12284
12285 bfd_boolean
12286 _bfd_elf_is_function_type (unsigned int type)
12287 {
12288 return (type == STT_FUNC
12289 || type == STT_GNU_IFUNC);
12290 }
12291
12292 /* If the ELF symbol SYM might be a function in SEC, return the
12293 function size and set *CODE_OFF to the function's entry point,
12294 otherwise return zero. */
12295
12296 bfd_size_type
12297 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
12298 bfd_vma *code_off)
12299 {
12300 bfd_size_type size;
12301
12302 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
12303 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
12304 || sym->section != sec)
12305 return 0;
12306
12307 *code_off = sym->value;
12308 size = 0;
12309 if (!(sym->flags & BSF_SYNTHETIC))
12310 size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
12311 if (size == 0)
12312 size = 1;
12313 return size;
12314 }
12315
12316 /* Set to non-zero to enable some debug messages. */
12317 #define DEBUG_SECONDARY_RELOCS 0
12318
12319 /* An internal-to-the-bfd-library only section type
12320 used to indicate a cached secondary reloc section. */
12321 #define SHT_SECONDARY_RELOC (SHT_LOOS + SHT_RELA)
12322
12323 /* Create a BFD section to hold a secondary reloc section. */
12324
12325 bfd_boolean
12326 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
12327 Elf_Internal_Shdr *hdr,
12328 const char * name,
12329 unsigned int shindex)
12330 {
12331 /* We only support RELA secondary relocs. */
12332 if (hdr->sh_type != SHT_RELA)
12333 return FALSE;
12334
12335 #if DEBUG_SECONDARY_RELOCS
12336 fprintf (stderr, "secondary reloc section %s encountered\n", name);
12337 #endif
12338 hdr->sh_type = SHT_SECONDARY_RELOC;
12339 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
12340 }
12341
12342 /* Read in any secondary relocs associated with SEC. */
12343
12344 bfd_boolean
12345 _bfd_elf_slurp_secondary_reloc_section (bfd * abfd,
12346 asection * sec,
12347 asymbol ** symbols)
12348 {
12349 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
12350 asection * relsec;
12351 bfd_boolean result = TRUE;
12352 bfd_vma (*r_sym) (bfd_vma);
12353
12354 #if BFD_DEFAULT_TARGET_SIZE > 32
12355 if (bfd_arch_bits_per_address (abfd) != 32)
12356 r_sym = elf64_r_sym;
12357 else
12358 #endif
12359 r_sym = elf32_r_sym;
12360
12361 /* Discover if there are any secondary reloc sections
12362 associated with SEC. */
12363 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
12364 {
12365 Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
12366
12367 if (hdr->sh_type == SHT_SECONDARY_RELOC
12368 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
12369 {
12370 bfd_byte * native_relocs;
12371 bfd_byte * native_reloc;
12372 arelent * internal_relocs;
12373 arelent * internal_reloc;
12374 unsigned int i;
12375 unsigned int entsize;
12376 unsigned int symcount;
12377 unsigned int reloc_count;
12378 size_t amt;
12379
12380 if (ebd->elf_info_to_howto == NULL)
12381 return FALSE;
12382
12383 #if DEBUG_SECONDARY_RELOCS
12384 fprintf (stderr, "read secondary relocs for %s from %s\n",
12385 sec->name, relsec->name);
12386 #endif
12387 entsize = hdr->sh_entsize;
12388
12389 native_relocs = bfd_malloc (hdr->sh_size);
12390 if (native_relocs == NULL)
12391 {
12392 result = FALSE;
12393 continue;
12394 }
12395
12396 reloc_count = NUM_SHDR_ENTRIES (hdr);
12397 if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
12398 {
12399 bfd_set_error (bfd_error_file_too_big);
12400 result = FALSE;
12401 continue;
12402 }
12403
12404 internal_relocs = (arelent *) bfd_alloc (abfd, amt);
12405 if (internal_relocs == NULL)
12406 {
12407 free (native_relocs);
12408 result = FALSE;
12409 continue;
12410 }
12411
12412 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
12413 || (bfd_bread (native_relocs, hdr->sh_size, abfd)
12414 != hdr->sh_size))
12415 {
12416 free (native_relocs);
12417 free (internal_relocs);
12418 result = FALSE;
12419 continue;
12420 }
12421
12422 symcount = bfd_get_symcount (abfd);
12423
12424 for (i = 0, internal_reloc = internal_relocs,
12425 native_reloc = native_relocs;
12426 i < reloc_count;
12427 i++, internal_reloc++, native_reloc += entsize)
12428 {
12429 bfd_boolean res;
12430 Elf_Internal_Rela rela;
12431
12432 ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
12433
12434 /* The address of an ELF reloc is section relative for an object
12435 file, and absolute for an executable file or shared library.
12436 The address of a normal BFD reloc is always section relative,
12437 and the address of a dynamic reloc is absolute.. */
12438 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
12439 internal_reloc->address = rela.r_offset;
12440 else
12441 internal_reloc->address = rela.r_offset - sec->vma;
12442
12443 if (r_sym (rela.r_info) == STN_UNDEF)
12444 {
12445 /* FIXME: This and the error case below mean that we
12446 have a symbol on relocs that is not elf_symbol_type. */
12447 internal_reloc->sym_ptr_ptr =
12448 bfd_abs_section_ptr->symbol_ptr_ptr;
12449 }
12450 else if (r_sym (rela.r_info) > symcount)
12451 {
12452 _bfd_error_handler
12453 /* xgettext:c-format */
12454 (_("%pB(%pA): relocation %d has invalid symbol index %ld"),
12455 abfd, sec, i, (long) r_sym (rela.r_info));
12456 bfd_set_error (bfd_error_bad_value);
12457 internal_reloc->sym_ptr_ptr =
12458 bfd_abs_section_ptr->symbol_ptr_ptr;
12459 result = FALSE;
12460 }
12461 else
12462 {
12463 asymbol **ps;
12464
12465 ps = symbols + r_sym (rela.r_info) - 1;
12466
12467 internal_reloc->sym_ptr_ptr = ps;
12468 /* Make sure that this symbol is not removed by strip. */
12469 (*ps)->flags |= BSF_KEEP;
12470 }
12471
12472 internal_reloc->addend = rela.r_addend;
12473
12474 res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
12475 if (! res || internal_reloc->howto == NULL)
12476 {
12477 #if DEBUG_SECONDARY_RELOCS
12478 fprintf (stderr, "there is no howto associated with reloc %lx\n",
12479 rela.r_info);
12480 #endif
12481 result = FALSE;
12482 }
12483 }
12484
12485 free (native_relocs);
12486 /* Store the internal relocs. */
12487 elf_section_data (relsec)->sec_info = internal_relocs;
12488 }
12489 }
12490
12491 return result;
12492 }
12493
12494 /* Set the ELF section header fields of an output secondary reloc section. */
12495
12496 bfd_boolean
12497 _bfd_elf_copy_special_section_fields (const bfd * ibfd ATTRIBUTE_UNUSED,
12498 bfd * obfd ATTRIBUTE_UNUSED,
12499 const Elf_Internal_Shdr * isection,
12500 Elf_Internal_Shdr * osection)
12501 {
12502 asection * isec;
12503 asection * osec;
12504
12505 if (isection == NULL)
12506 return FALSE;
12507
12508 if (isection->sh_type != SHT_SECONDARY_RELOC)
12509 return TRUE;
12510
12511 isec = isection->bfd_section;
12512 if (isec == NULL)
12513 return FALSE;
12514
12515 osec = osection->bfd_section;
12516 if (osec == NULL)
12517 return FALSE;
12518
12519 BFD_ASSERT (elf_section_data (osec)->sec_info == NULL);
12520 elf_section_data (osec)->sec_info = elf_section_data (isec)->sec_info;
12521 osection->sh_type = SHT_RELA;
12522 osection->sh_link = elf_onesymtab (obfd);
12523 if (osection->sh_link == 0)
12524 {
12525 /* There is no symbol table - we are hosed... */
12526 _bfd_error_handler
12527 /* xgettext:c-format */
12528 (_("%pB(%pA): link section cannot be set because the output file does not have a symbol table"),
12529 obfd, osec);
12530 bfd_set_error (bfd_error_bad_value);
12531 return FALSE;
12532 }
12533
12534 /* Find the output section that corresponds to the isection's sh_info link. */
12535 BFD_ASSERT (isection->sh_info > 0
12536 && isection->sh_info < elf_numsections (ibfd));
12537 isection = elf_elfsections (ibfd)[isection->sh_info];
12538
12539 BFD_ASSERT (isection != NULL);
12540 BFD_ASSERT (isection->bfd_section != NULL);
12541 BFD_ASSERT (isection->bfd_section->output_section != NULL);
12542 osection->sh_info =
12543 elf_section_data (isection->bfd_section->output_section)->this_idx;
12544
12545 #if DEBUG_SECONDARY_RELOCS
12546 fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
12547 osec->name, osection->sh_link, osection->sh_info);
12548 #endif
12549
12550 return TRUE;
12551 }
12552
12553 /* Write out a secondary reloc section. */
12554
12555 bfd_boolean
12556 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
12557 {
12558 const struct elf_backend_data * const ebd = get_elf_backend_data (abfd);
12559 bfd_vma addr_offset;
12560 asection * relsec;
12561 bfd_vma (*r_info) (bfd_vma, bfd_vma);
12562
12563 #if BFD_DEFAULT_TARGET_SIZE > 32
12564 if (bfd_arch_bits_per_address (abfd) != 32)
12565 r_info = elf64_r_info;
12566 else
12567 #endif
12568 r_info = elf32_r_info;
12569
12570 if (sec == NULL)
12571 return FALSE;
12572
12573 /* The address of an ELF reloc is section relative for an object
12574 file, and absolute for an executable file or shared library.
12575 The address of a BFD reloc is always section relative. */
12576 addr_offset = 0;
12577 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
12578 addr_offset = sec->vma;
12579
12580 /* Discover if there are any secondary reloc sections
12581 associated with SEC. */
12582 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
12583 {
12584 const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
12585 Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
12586
12587 if (hdr->sh_type == SHT_RELA
12588 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
12589 {
12590 asymbol * last_sym;
12591 int last_sym_idx;
12592 unsigned int reloc_count;
12593 unsigned int idx;
12594 arelent * src_irel;
12595 bfd_byte * dst_rela;
12596
12597 BFD_ASSERT (hdr->contents == NULL);
12598
12599 reloc_count = hdr->sh_size / hdr->sh_entsize;
12600 BFD_ASSERT (reloc_count > 0);
12601
12602 hdr->contents = bfd_alloc (abfd, hdr->sh_size);
12603 if (hdr->contents == NULL)
12604 continue;
12605
12606 #if DEBUG_SECONDARY_RELOCS
12607 fprintf (stderr, "write %u secondary relocs for %s from %s\n",
12608 reloc_count, sec->name, relsec->name);
12609 #endif
12610 last_sym = NULL;
12611 last_sym_idx = 0;
12612 dst_rela = hdr->contents;
12613 src_irel = (arelent *) esd->sec_info;
12614 BFD_ASSERT (src_irel != NULL);
12615
12616 for (idx = 0; idx < reloc_count; idx++, dst_rela += hdr->sh_entsize)
12617 {
12618 Elf_Internal_Rela src_rela;
12619 arelent *ptr;
12620 asymbol *sym;
12621 int n;
12622
12623 ptr = src_irel + idx;
12624 sym = *ptr->sym_ptr_ptr;
12625
12626 if (sym == last_sym)
12627 n = last_sym_idx;
12628 else
12629 {
12630 last_sym = sym;
12631 n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
12632 if (n < 0)
12633 {
12634 #if DEBUG_SECONDARY_RELOCS
12635 fprintf (stderr, "failed to find symbol %s whilst rewriting relocs\n",
12636 sym->name);
12637 #endif
12638 /* FIXME: Signal failure somehow. */
12639 n = 0;
12640 }
12641 last_sym_idx = n;
12642 }
12643
12644 if ((*ptr->sym_ptr_ptr)->the_bfd != NULL
12645 && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
12646 && ! _bfd_elf_validate_reloc (abfd, ptr))
12647 {
12648 #if DEBUG_SECONDARY_RELOCS
12649 fprintf (stderr, "symbol %s is not in the output bfd\n",
12650 sym->name);
12651 #endif
12652 /* FIXME: Signal failure somehow. */
12653 n = 0;
12654 }
12655
12656 if (ptr->howto == NULL)
12657 {
12658 #if DEBUG_SECONDARY_RELOCS
12659 fprintf (stderr, "reloc for symbol %s does not have a howto associated with it\n",
12660 sym->name);
12661 #endif
12662 /* FIXME: Signal failure somehow. */
12663 n = 0;
12664 }
12665
12666 src_rela.r_offset = ptr->address + addr_offset;
12667 src_rela.r_info = r_info (n, ptr->howto->type);
12668 src_rela.r_addend = ptr->addend;
12669 ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
12670 }
12671 }
12672 }
12673
12674 return TRUE;
12675 }
This page took 0.316642 seconds and 5 git commands to generate.