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