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