elf.c revision 1.22 1 /* ELF executable support for BFD.
2
3 Copyright (C) 1993-2026 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 /* Utility macro to make testing for string equality easier to read. */
53 #ifndef streq
54 #define streq(A,B) (strcmp ((A), (B)) == 0)
55 #endif
56
57 /* Core note names. */
58 #define NOTE_NAME_CORE "CORE"
59 #define NOTE_NAME_FREEBSD "FreeBSD"
60 #define NOTE_NAME_GDB "GDB"
61 #define NOTE_NAME_LINUX "LINUX"
62
63 /* Names of a pseudo-section which represent core notes. */
64 #define NOTE_PSEUDO_SECTION_AARCH_FPMR ".reg-aarch-fpmr"
65 #define NOTE_PSEUDO_SECTION_AARCH_GCS ".reg-aarch-gcs"
66 #define NOTE_PSEUDO_SECTION_AARCH_HW_BREAK ".reg-aarch-hw-break"
67 #define NOTE_PSEUDO_SECTION_AARCH_HW_WATCH ".reg-aarch-hw-watch"
68 #define NOTE_PSEUDO_SECTION_AARCH_MTE ".reg-aarch-mte"
69 #define NOTE_PSEUDO_SECTION_AARCH_PAUTH ".reg-aarch-pauth"
70 #define NOTE_PSEUDO_SECTION_AARCH_SSVE ".reg-aarch-ssve"
71 #define NOTE_PSEUDO_SECTION_AARCH_SVE ".reg-aarch-sve"
72 #define NOTE_PSEUDO_SECTION_AARCH_TLS ".reg-aarch-tls"
73 #define NOTE_PSEUDO_SECTION_AARCH_ZA ".reg-aarch-za"
74 #define NOTE_PSEUDO_SECTION_AARCH_ZT ".reg-aarch-zt"
75 #define NOTE_PSEUDO_SECTION_ARC_V2 ".reg-arc-v2"
76 #define NOTE_PSEUDO_SECTION_ARM_VFP ".reg-arm-vfp"
77 #define NOTE_PSEUDO_SECTION_I386_TLS ".reg-i386-tls"
78 #define NOTE_PSEUDO_SECTION_LOONGARCH_CPUCFG ".reg-loongarch-cpucfg"
79 #define NOTE_PSEUDO_SECTION_LOONGARCH_LASX ".reg-loongarch-lasx"
80 #define NOTE_PSEUDO_SECTION_LOONGARCH_LBT ".reg-loongarch-lbt"
81 #define NOTE_PSEUDO_SECTION_LOONGARCH_LSX ".reg-loongarch-lsx"
82 #define NOTE_PSEUDO_SECTION_PPC_DSCR ".reg-ppc-dscr"
83 #define NOTE_PSEUDO_SECTION_PPC_EBB ".reg-ppc-ebb"
84 #define NOTE_PSEUDO_SECTION_PPC_PMU ".reg-ppc-pmu"
85 #define NOTE_PSEUDO_SECTION_PPC_PPR ".reg-ppc-ppr"
86 #define NOTE_PSEUDO_SECTION_PPC_TAR ".reg-ppc-tar"
87 #define NOTE_PSEUDO_SECTION_PPC_TM_CDSCR ".reg-ppc-tm-cdscr"
88 #define NOTE_PSEUDO_SECTION_PPC_TM_CFPR ".reg-ppc-tm-cfpr"
89 #define NOTE_PSEUDO_SECTION_PPC_TM_CGPR ".reg-ppc-tm-cgpr"
90 #define NOTE_PSEUDO_SECTION_PPC_TM_CPPR ".reg-ppc-tm-cppr"
91 #define NOTE_PSEUDO_SECTION_PPC_TM_CTAR ".reg-ppc-tm-ctar"
92 #define NOTE_PSEUDO_SECTION_PPC_TM_CVMX ".reg-ppc-tm-cvmx"
93 #define NOTE_PSEUDO_SECTION_PPC_TM_CVSX ".reg-ppc-tm-cvsx"
94 #define NOTE_PSEUDO_SECTION_PPC_TM_SPR ".reg-ppc-tm-spr"
95 #define NOTE_PSEUDO_SECTION_PPC_VSX ".reg-ppc-vsx"
96 #define NOTE_PSEUDO_SECTION_PPC_VMX ".reg-ppc-vmx"
97 #define NOTE_PSEUDO_SECTION_REG ".reg"
98 #define NOTE_PSEUDO_SECTION_REG2 ".reg2"
99 #define NOTE_PSEUDO_SECTION_RISCV_CSR ".reg-riscv-csr"
100 #define NOTE_PSEUDO_SECTION_S390_CTRS ".reg-s390-ctrs"
101 #define NOTE_PSEUDO_SECTION_S390_GS_BC ".reg-s390-gs-bc"
102 #define NOTE_PSEUDO_SECTION_S390_GS_CB ".reg-s390-gs-cb"
103 #define NOTE_PSEUDO_SECTION_S390_HIGH_GPRS ".reg-s390-high-gprs"
104 #define NOTE_PSEUDO_SECTION_S390_LAST_BREAK ".reg-s390-last-break"
105 #define NOTE_PSEUDO_SECTION_S390_PREFIX ".reg-s390-prefix"
106 #define NOTE_PSEUDO_SECTION_S390_SYSTEM_CALL ".reg-s390-system-call"
107 #define NOTE_PSEUDO_SECTION_S390_TDB ".reg-s390-tdb"
108 #define NOTE_PSEUDO_SECTION_S390_TIMER ".reg-s390-timer"
109 #define NOTE_PSEUDO_SECTION_S390_TODCMP ".reg-s390-todcmp"
110 #define NOTE_PSEUDO_SECTION_S390_TODPREG ".reg-s390-todpreg"
111 #define NOTE_PSEUDO_SECTION_S390_VXRS_HIGH ".reg-s390-vxrs-high"
112 #define NOTE_PSEUDO_SECTION_S390_VXRS_LOW ".reg-s390-vxrs-low"
113 #define NOTE_PSEUDO_SECTION_SSP ".reg-ssp"
114 #define NOTE_PSEUDO_SECTION_TDESC ".gdb-tdesc"
115 #define NOTE_PSEUDO_SECTION_X86_SEGBASES ".reg-x86-segbases"
116 #define NOTE_PSEUDO_SECTION_XFP ".reg-xfp"
117 #define NOTE_PSEUDO_SECTION_XSTATE ".reg-xstate"
118 #define NOTE_PSEUDO_SECTION_XSAVE_LAYOUT ".reg-xsave-layout"
119
120 static int elf_sort_sections (const void *, const void *);
121 static bool assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
122 static bool swap_out_syms (bfd *, struct elf_strtab_hash **, int,
123 struct bfd_link_info *);
124 static bool elf_parse_notes (bfd *abfd, char *buf, size_t size,
125 file_ptr offset, size_t align);
126
127 /* Swap version information in and out. The version information is
128 currently size independent. If that ever changes, this code will
129 need to move into elfcode.h. */
130
131 /* Swap in a Verdef structure. */
132
133 void
134 _bfd_elf_swap_verdef_in (bfd *abfd,
135 const Elf_External_Verdef *src,
136 Elf_Internal_Verdef *dst)
137 {
138 dst->vd_version = H_GET_16 (abfd, src->vd_version);
139 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
140 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
141 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
142 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
143 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
144 dst->vd_next = H_GET_32 (abfd, src->vd_next);
145 }
146
147 /* Swap out a Verdef structure. */
148
149 void
150 _bfd_elf_swap_verdef_out (bfd *abfd,
151 const Elf_Internal_Verdef *src,
152 Elf_External_Verdef *dst)
153 {
154 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
155 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
156 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
157 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
158 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
159 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
160 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
161 }
162
163 /* Swap in a Verdaux structure. */
164
165 void
166 _bfd_elf_swap_verdaux_in (bfd *abfd,
167 const Elf_External_Verdaux *src,
168 Elf_Internal_Verdaux *dst)
169 {
170 dst->vda_name = H_GET_32 (abfd, src->vda_name);
171 dst->vda_next = H_GET_32 (abfd, src->vda_next);
172 }
173
174 /* Swap out a Verdaux structure. */
175
176 void
177 _bfd_elf_swap_verdaux_out (bfd *abfd,
178 const Elf_Internal_Verdaux *src,
179 Elf_External_Verdaux *dst)
180 {
181 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
182 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
183 }
184
185 /* Swap in a Verneed structure. */
186
187 void
188 _bfd_elf_swap_verneed_in (bfd *abfd,
189 const Elf_External_Verneed *src,
190 Elf_Internal_Verneed *dst)
191 {
192 dst->vn_version = H_GET_16 (abfd, src->vn_version);
193 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
194 dst->vn_file = H_GET_32 (abfd, src->vn_file);
195 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
196 dst->vn_next = H_GET_32 (abfd, src->vn_next);
197 }
198
199 /* Swap out a Verneed structure. */
200
201 void
202 _bfd_elf_swap_verneed_out (bfd *abfd,
203 const Elf_Internal_Verneed *src,
204 Elf_External_Verneed *dst)
205 {
206 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
207 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
208 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
209 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
210 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
211 }
212
213 /* Swap in a Vernaux structure. */
214
215 void
216 _bfd_elf_swap_vernaux_in (bfd *abfd,
217 const Elf_External_Vernaux *src,
218 Elf_Internal_Vernaux *dst)
219 {
220 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
221 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
222 dst->vna_other = H_GET_16 (abfd, src->vna_other);
223 dst->vna_name = H_GET_32 (abfd, src->vna_name);
224 dst->vna_next = H_GET_32 (abfd, src->vna_next);
225 }
226
227 /* Swap out a Vernaux structure. */
228
229 void
230 _bfd_elf_swap_vernaux_out (bfd *abfd,
231 const Elf_Internal_Vernaux *src,
232 Elf_External_Vernaux *dst)
233 {
234 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
235 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
236 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
237 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
238 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
239 }
240
241 /* Swap in a Versym structure. */
242
243 void
244 _bfd_elf_swap_versym_in (bfd *abfd,
245 const Elf_External_Versym *src,
246 Elf_Internal_Versym *dst)
247 {
248 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
249 }
250
251 /* Swap out a Versym structure. */
252
253 void
254 _bfd_elf_swap_versym_out (bfd *abfd,
255 const Elf_Internal_Versym *src,
256 Elf_External_Versym *dst)
257 {
258 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
259 }
260
261 /* Standard ELF hash function. Do not change this function; you will
262 cause invalid hash tables to be generated. */
263
264 unsigned long
265 bfd_elf_hash (const char *namearg)
266 {
267 uint32_t h = 0;
268
269 for (const unsigned char *name = (const unsigned char *) namearg;
270 *name; name++)
271 {
272 h = (h << 4) + *name;
273 h ^= (h >> 24) & 0xf0;
274 }
275 return h & 0x0fffffff;
276 }
277
278 /* DT_GNU_HASH hash function. Do not change this function; you will
279 cause invalid hash tables to be generated. */
280
281 unsigned long
282 bfd_elf_gnu_hash (const char *namearg)
283 {
284 uint32_t h = 5381;
285
286 for (const unsigned char *name = (const unsigned char *) namearg;
287 *name; name++)
288 h = (h << 5) + h + *name;
289 return h;
290 }
291
292 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
293 the object_id field of an elf_obj_tdata field set. */
294 bool
295 bfd_elf_allocate_object (bfd *abfd,
296 size_t object_size)
297 {
298 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
299 abfd->tdata.any = bfd_zalloc (abfd, object_size);
300 if (abfd->tdata.any == NULL)
301 return false;
302
303 elf_object_id (abfd) = get_elf_backend_data (abfd)->target_id;
304 if (abfd->direction != read_direction)
305 {
306 struct output_elf_obj_tdata *o = bfd_zalloc (abfd, sizeof *o);
307 if (o == NULL)
308 return false;
309 elf_tdata (abfd)->o = o;
310 elf_program_header_size (abfd) = (bfd_size_type) -1;
311 }
312 return true;
313 }
314
315
316 bool
317 bfd_elf_make_object (bfd *abfd)
318 {
319 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata));
320 }
321
322 bool
323 bfd_elf_mkcorefile (bfd *abfd)
324 {
325 /* I think this can be done just like an object file. */
326 if (!abfd->xvec->_bfd_set_format[(int) bfd_object] (abfd))
327 return false;
328 elf_tdata (abfd)->core = bfd_zalloc (abfd, sizeof (*elf_tdata (abfd)->core));
329 return elf_tdata (abfd)->core != NULL;
330 }
331
332 char *
333 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
334 {
335 Elf_Internal_Shdr **i_shdrp;
336 bfd_byte *shstrtab = NULL;
337 file_ptr offset;
338 bfd_size_type shstrtabsize;
339
340 i_shdrp = elf_elfsections (abfd);
341 if (i_shdrp == 0
342 || shindex >= elf_numsections (abfd)
343 || i_shdrp[shindex] == 0)
344 return NULL;
345
346 shstrtab = i_shdrp[shindex]->contents;
347 if (shstrtab == NULL)
348 {
349 /* No cached one, attempt to read, and cache what we read. */
350 offset = i_shdrp[shindex]->sh_offset;
351 shstrtabsize = i_shdrp[shindex]->sh_size;
352
353 if (shstrtabsize == 0
354 || bfd_seek (abfd, offset, SEEK_SET) != 0
355 || (shstrtab = _bfd_mmap_persistent (abfd, shstrtabsize)) == NULL)
356 {
357 /* Once we've failed to read it, make sure we don't keep
358 trying. Otherwise, we'll keep allocating space for
359 the string table over and over. */
360 i_shdrp[shindex]->sh_size = 0;
361 }
362 else if (shstrtab[shstrtabsize - 1] != 0)
363 {
364 /* It is an error if a string table isn't terminated. */
365 _bfd_error_handler
366 /* xgettext:c-format */
367 (_("%pB: string table [%u] is corrupt"), abfd, shindex);
368 shstrtab[shstrtabsize - 1] = 0;
369 }
370 i_shdrp[shindex]->contents = shstrtab;
371 }
372 return (char *) shstrtab;
373 }
374
375 char *
376 bfd_elf_string_from_elf_section (bfd *abfd,
377 unsigned int shindex,
378 unsigned int strindex)
379 {
380 Elf_Internal_Shdr *hdr;
381
382 if (strindex == 0)
383 return "";
384
385 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
386 return NULL;
387
388 hdr = elf_elfsections (abfd)[shindex];
389
390 if (hdr->contents == NULL)
391 {
392 if (hdr->sh_type != SHT_STRTAB && hdr->sh_type < SHT_LOOS)
393 {
394 /* PR 17512: file: f057ec89. */
395 /* xgettext:c-format */
396 _bfd_error_handler (_("%pB: attempt to load strings from"
397 " a non-string section (number %d)"),
398 abfd, shindex);
399 return NULL;
400 }
401
402 if (bfd_elf_get_str_section (abfd, shindex) == NULL)
403 return NULL;
404 }
405 else
406 {
407 /* PR 24273: The string section's contents may have already
408 been loaded elsewhere, eg because a corrupt file has the
409 string section index in the ELF header pointing at a group
410 section. So be paranoid, and test that the last byte of
411 the section is zero. */
412 if (hdr->sh_size == 0 || hdr->contents[hdr->sh_size - 1] != 0)
413 return NULL;
414 }
415
416 if (strindex >= hdr->sh_size)
417 {
418 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
419 _bfd_error_handler
420 /* xgettext:c-format */
421 (_("%pB: invalid string offset %u >= %" PRIu64 " for section `%s'"),
422 abfd, strindex, (uint64_t) hdr->sh_size,
423 (shindex == shstrndx && strindex == hdr->sh_name
424 ? ".shstrtab"
425 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
426 return NULL;
427 }
428
429 return ((char *) hdr->contents) + strindex;
430 }
431
432 /* Read and convert symbols to internal format.
433 SYMCOUNT specifies the number of symbols to read, starting from
434 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
435 are non-NULL, they are used to store the internal symbols, external
436 symbols, and symbol section index extensions, respectively.
437 Returns a pointer to the internal symbol buffer (malloced if necessary)
438 or NULL if there were no symbols or some kind of problem. */
439
440 Elf_Internal_Sym *
441 bfd_elf_get_elf_syms (bfd *ibfd,
442 Elf_Internal_Shdr *symtab_hdr,
443 size_t symcount,
444 size_t symoffset,
445 Elf_Internal_Sym *intsym_buf,
446 void *extsym_buf,
447 Elf_External_Sym_Shndx *extshndx_buf)
448 {
449 Elf_Internal_Shdr *shndx_hdr;
450 void *alloc_ext;
451 const bfd_byte *esym;
452 Elf_External_Sym_Shndx *alloc_extshndx;
453 Elf_External_Sym_Shndx *shndx;
454 Elf_Internal_Sym *alloc_intsym;
455 Elf_Internal_Sym *isym;
456 Elf_Internal_Sym *isymend;
457 elf_backend_data *bed;
458 size_t extsym_size;
459 size_t amt;
460 file_ptr pos;
461
462 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
463 abort ();
464
465 if (symcount == 0)
466 return intsym_buf;
467
468 if (elf_use_dt_symtab_p (ibfd))
469 {
470 /* Use dynamic symbol table. */
471 if (elf_tdata (ibfd)->dt_symtab_count != symcount + symoffset)
472 {
473 bfd_set_error (bfd_error_invalid_operation);
474 return NULL;
475 }
476 return elf_tdata (ibfd)->dt_symtab + symoffset;
477 }
478
479 /* Normal syms might have section extension entries. */
480 shndx_hdr = NULL;
481 if (elf_symtab_shndx_list (ibfd) != NULL)
482 {
483 elf_section_list * entry;
484 Elf_Internal_Shdr **sections = elf_elfsections (ibfd);
485
486 /* Find an index section that is linked to this symtab section. */
487 for (entry = elf_symtab_shndx_list (ibfd); entry != NULL; entry = entry->next)
488 {
489 /* PR 20063. */
490 if (entry->hdr.sh_link >= elf_numsections (ibfd))
491 continue;
492
493 if (sections[entry->hdr.sh_link] == symtab_hdr)
494 {
495 shndx_hdr = & entry->hdr;
496 break;
497 };
498 }
499
500 if (shndx_hdr == NULL)
501 {
502 if (symtab_hdr == &elf_symtab_hdr (ibfd))
503 /* Not really accurate, but this was how the old code used
504 to work. */
505 shndx_hdr = &elf_symtab_shndx_list (ibfd)->hdr;
506 /* Otherwise we do nothing. The assumption is that
507 the index table will not be needed. */
508 }
509 }
510
511 /* Read the symbols. */
512 alloc_ext = NULL;
513 alloc_extshndx = NULL;
514 alloc_intsym = NULL;
515 bed = get_elf_backend_data (ibfd);
516 extsym_size = bed->s->sizeof_sym;
517 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
518 {
519 bfd_set_error (bfd_error_file_too_big);
520 return NULL;
521 }
522 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
523 size_t alloc_ext_size = amt;
524 if (bfd_seek (ibfd, pos, SEEK_SET) != 0
525 || !_bfd_mmap_read_temporary (&extsym_buf, &alloc_ext_size,
526 &alloc_ext, ibfd, false))
527 {
528 intsym_buf = NULL;
529 goto out2;
530 }
531
532 size_t alloc_extshndx_size = 0;
533 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
534 extshndx_buf = NULL;
535 else
536 {
537 if (_bfd_mul_overflow (symcount, sizeof (Elf_External_Sym_Shndx), &amt))
538 {
539 bfd_set_error (bfd_error_file_too_big);
540 intsym_buf = NULL;
541 goto out1;
542 }
543 alloc_extshndx_size = amt;
544 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
545 if (bfd_seek (ibfd, pos, SEEK_SET) != 0
546 || !_bfd_mmap_read_temporary ((void **) &extshndx_buf,
547 &alloc_extshndx_size,
548 (void **) &alloc_extshndx,
549 ibfd, false))
550 {
551 intsym_buf = NULL;
552 goto out1;
553 }
554 }
555
556 if (intsym_buf == NULL)
557 {
558 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
559 {
560 bfd_set_error (bfd_error_file_too_big);
561 goto out1;
562 }
563 alloc_intsym = (Elf_Internal_Sym *) bfd_malloc (amt);
564 intsym_buf = alloc_intsym;
565 if (intsym_buf == NULL)
566 goto out1;
567 }
568
569 /* Convert the symbols to internal form. */
570 isymend = intsym_buf + symcount;
571 for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf,
572 shndx = extshndx_buf;
573 isym < isymend;
574 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
575 {
576 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
577 {
578 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
579 /* xgettext:c-format */
580 _bfd_error_handler (_("%pB symbol number %lu references"
581 " nonexistent SHT_SYMTAB_SHNDX section"),
582 ibfd, (unsigned long) symoffset);
583 free (alloc_intsym);
584 intsym_buf = NULL;
585 goto out1;
586 }
587
588 /* PR 33019: Do not accept unsupported binding values - they will
589 likely cause problems later on. */
590 int bind = ELF_ST_BIND (isym->st_info);
591 if (bind > STB_WEAK && bind < STB_LOOS)
592 {
593 /* xgettext:c-format */
594 _bfd_error_handler (_("%pB symbol number %lu uses unsupported binding of %u"),
595 ibfd, (unsigned long) (isym - intsym_buf), bind);
596 free (alloc_intsym);
597 intsym_buf = NULL;
598 goto out1;
599 }
600
601 /* Paranoia: Also refuse to accept the only undefined symbol type: 7. */
602 int t = ELF_ST_TYPE (isym->st_info);
603 if (t == 7)
604 {
605 /* xgettext:c-format */
606 _bfd_error_handler (_("%pB symbol number %lu uses unsupported type of %u"),
607 ibfd, (unsigned long) (isym - intsym_buf), t);
608 free (alloc_intsym);
609 intsym_buf = NULL;
610 goto out1;
611 }
612 }
613
614 out1:
615 _bfd_munmap_temporary (alloc_extshndx, alloc_extshndx_size);
616 out2:
617 _bfd_munmap_temporary (alloc_ext, alloc_ext_size);
618
619 return intsym_buf;
620 }
621
622 /* Look up a symbol name. */
623 static const char *
624 bfd_elf_sym_name_raw (bfd *abfd,
625 Elf_Internal_Shdr *symtab_hdr,
626 Elf_Internal_Sym *isym)
627 {
628 unsigned int iname = isym->st_name;
629 unsigned int shindex = symtab_hdr->sh_link;
630
631 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
632 /* Check for a bogus st_shndx to avoid crashing. */
633 && isym->st_shndx < elf_numsections (abfd))
634 {
635 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
636 shindex = elf_elfheader (abfd)->e_shstrndx;
637 }
638
639 return bfd_elf_string_from_elf_section (abfd, shindex, iname);
640 }
641
642 const char *
643 bfd_elf_sym_name (bfd *abfd,
644 Elf_Internal_Shdr *symtab_hdr,
645 Elf_Internal_Sym *isym,
646 asection *sym_sec)
647 {
648 const char *name = bfd_elf_sym_name_raw (abfd, symtab_hdr, isym);
649 if (name == NULL)
650 name = bfd_symbol_error_name;
651 else if (sym_sec && *name == '\0')
652 name = bfd_section_name (sym_sec);
653
654 return name;
655 }
656
657 /* Return the name of the group signature symbol. Why isn't the
658 signature just a string? */
659
660 static const char *
661 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
662 {
663 Elf_Internal_Shdr *hdr;
664 unsigned char esym[sizeof (Elf64_External_Sym)];
665 Elf_External_Sym_Shndx eshndx;
666 Elf_Internal_Sym isym;
667
668 /* First we need to ensure the symbol table is available. Make sure
669 that it is a symbol table section. */
670 if (ghdr->sh_link >= elf_numsections (abfd))
671 return NULL;
672 hdr = elf_elfsections (abfd) [ghdr->sh_link];
673 if (hdr->sh_type != SHT_SYMTAB
674 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
675 return NULL;
676
677 /* Go read the symbol. */
678 hdr = &elf_tdata (abfd)->symtab_hdr;
679 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
680 &isym, esym, &eshndx) == NULL)
681 return NULL;
682
683 return bfd_elf_sym_name_raw (abfd, hdr, &isym);
684 }
685
686 static bool
687 is_valid_group_section_header (Elf_Internal_Shdr *shdr, size_t minsize)
688 {
689 return (shdr->sh_size >= minsize
690 && shdr->sh_entsize == GRP_ENTRY_SIZE
691 && shdr->sh_size % GRP_ENTRY_SIZE == 0
692 && shdr->bfd_section != NULL);
693 }
694
695
696 /* Set next_in_group, sec_group list pointers, and group names. */
697
698 static bool
699 process_sht_group_entries (bfd *abfd,
700 Elf_Internal_Shdr *ghdr, unsigned int gidx)
701 {
702 unsigned char *contents;
703
704 /* Read the raw contents. */
705 if (!bfd_malloc_and_get_section (abfd, ghdr->bfd_section, &contents))
706 {
707 _bfd_error_handler
708 /* xgettext:c-format */
709 (_("%pB: could not read contents of group [%u]"), abfd, gidx);
710 return false;
711 }
712
713 asection *last_elt = NULL;
714 const char *gname = NULL;
715 unsigned char *p = contents + ghdr->sh_size;
716 while (1)
717 {
718 unsigned int idx;
719 Elf_Internal_Shdr *shdr;
720 asection *elt;
721
722 p -= 4;
723 idx = H_GET_32 (abfd, p);
724 if (p == contents)
725 {
726 if ((idx & GRP_COMDAT) != 0)
727 ghdr->bfd_section->flags
728 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
729 break;
730 }
731
732 if (idx == 0
733 || idx >= elf_numsections (abfd)
734 || (shdr = elf_elfsections (abfd)[idx])->sh_type == SHT_GROUP
735 || ((elt = shdr->bfd_section) != NULL
736 && elf_sec_group (elt) != NULL
737 && elf_sec_group (elt) != ghdr->bfd_section))
738 {
739 _bfd_error_handler
740 (_("%pB: invalid entry (%#x) in group [%u]"),
741 abfd, idx, gidx);
742 continue;
743 }
744
745 /* PR binutils/23199: According to the ELF gABI all sections in
746 a group must be marked with SHF_GROUP, but some tools
747 generate broken objects. Fix them up here. */
748 shdr->sh_flags |= SHF_GROUP;
749
750 if (elt == NULL)
751 {
752 if (shdr->sh_type != SHT_RELA && shdr->sh_type != SHT_REL)
753 {
754 const char *name = bfd_elf_string_from_elf_section
755 (abfd, elf_elfheader (abfd)->e_shstrndx, shdr->sh_name);
756
757 _bfd_error_handler
758 /* xgettext:c-format */
759 (_("%pB: unexpected type (%#x) section `%s' in group [%u]"),
760 abfd, shdr->sh_type, name, gidx);
761 }
762 continue;
763 }
764
765 /* Don't try to add a section to elf_next_in_group list twice. */
766 if (elf_sec_group (elt) != NULL)
767 continue;
768
769 if (last_elt == NULL)
770 {
771 /* Start a circular list with one element.
772 It will be in reverse order to match what gas does. */
773 elf_next_in_group (elt) = elt;
774 /* Point the group section to it. */
775 elf_next_in_group (ghdr->bfd_section) = elt;
776 gname = group_signature (abfd, ghdr);
777 if (gname == NULL)
778 {
779 free (contents);
780 return false;
781 }
782 }
783 else
784 {
785 elf_next_in_group (elt) = elf_next_in_group (last_elt);
786 elf_next_in_group (last_elt) = elt;
787 }
788 last_elt = elt;
789 elf_group_name (elt) = gname;
790 elf_sec_group (elt) = ghdr->bfd_section;
791 }
792
793 free (contents);
794 return last_elt != NULL;
795 }
796
797 bool
798 _bfd_elf_setup_sections (bfd *abfd)
799 {
800 bool result = true;
801
802 /* Process SHF_LINK_ORDER. */
803 for (asection *s = abfd->sections; s != NULL; s = s->next)
804 {
805 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
806 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
807 {
808 unsigned int elfsec = this_hdr->sh_link;
809 /* An sh_link value of 0 is now allowed. It indicates that linked
810 to section has already been discarded, but that the current
811 section has been retained for some other reason. This linking
812 section is still a candidate for later garbage collection
813 however. */
814 if (elfsec == 0)
815 {
816 elf_linked_to_section (s) = NULL;
817 }
818 else
819 {
820 asection *linksec = NULL;
821
822 if (elfsec < elf_numsections (abfd))
823 {
824 this_hdr = elf_elfsections (abfd)[elfsec];
825 linksec = this_hdr->bfd_section;
826 }
827
828 /* PR 1991, 2008:
829 Some strip/objcopy may leave an incorrect value in
830 sh_link. We don't want to proceed. */
831 if (linksec == NULL)
832 {
833 _bfd_error_handler
834 /* xgettext:c-format */
835 (_("%pB: sh_link [%d] in section `%pA' is incorrect"),
836 s->owner, elfsec, s);
837 result = false;
838 }
839
840 elf_linked_to_section (s) = linksec;
841 }
842 }
843 }
844
845 /* Process section groups. */
846 for (unsigned int i = 1; i < elf_numsections (abfd); i++)
847 {
848 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
849
850 if (shdr && shdr->sh_type == SHT_GROUP)
851 {
852 if (is_valid_group_section_header (shdr, GRP_ENTRY_SIZE))
853 {
854 if (shdr->sh_size >= 2 * GRP_ENTRY_SIZE
855 && !process_sht_group_entries (abfd, shdr, i))
856 result = false;
857 }
858 else
859 {
860 /* PR binutils/18758: Beware of corrupt binaries with
861 invalid group data. */
862 _bfd_error_handler
863 /* xgettext:c-format */
864 (_("%pB: section group entry number %u is corrupt"), abfd, i);
865 result = false;
866 }
867 }
868 }
869
870 return result;
871 }
872
873 bool
874 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
875 {
876 return elf_next_in_group (sec) != NULL;
877 }
878
879 const char *
880 bfd_elf_group_name (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
881 {
882 if (elf_sec_group (sec) != NULL)
883 return elf_group_name (sec);
884 return NULL;
885 }
886
887 /* Make a BFD section from an ELF section. We store a pointer to the
888 BFD section in the bfd_section field of the header. */
889
890 bool
891 _bfd_elf_make_section_from_shdr (bfd *abfd,
892 Elf_Internal_Shdr *hdr,
893 const char *name,
894 int shindex)
895 {
896 asection *newsect;
897 flagword flags;
898 elf_backend_data *bed;
899 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
900
901 if (hdr->bfd_section != NULL)
902 return true;
903
904 newsect = bfd_make_section_anyway (abfd, name);
905 if (newsect == NULL)
906 return false;
907
908 hdr->bfd_section = newsect;
909 elf_section_data (newsect)->this_hdr = *hdr;
910 elf_section_data (newsect)->this_idx = shindex;
911
912 /* Always use the real type/flags. */
913 elf_section_type (newsect) = hdr->sh_type;
914 elf_section_flags (newsect) = hdr->sh_flags;
915
916 newsect->filepos = hdr->sh_offset;
917
918 flags = SEC_NO_FLAGS;
919 if (hdr->sh_type != SHT_NOBITS)
920 flags |= SEC_HAS_CONTENTS;
921 if (hdr->sh_type == SHT_GROUP)
922 flags |= SEC_GROUP;
923 if ((hdr->sh_flags & SHF_ALLOC) != 0)
924 {
925 flags |= SEC_ALLOC;
926 if (hdr->sh_type != SHT_NOBITS)
927 flags |= SEC_LOAD;
928 }
929 if ((hdr->sh_flags & SHF_WRITE) == 0)
930 flags |= SEC_READONLY;
931 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
932 flags |= SEC_CODE;
933 else if ((flags & SEC_LOAD) != 0)
934 flags |= SEC_DATA;
935 if ((hdr->sh_flags & SHF_MERGE) != 0)
936 flags |= SEC_MERGE;
937 if ((hdr->sh_flags & SHF_STRINGS) != 0)
938 flags |= SEC_STRINGS;
939 if ((hdr->sh_flags & SHF_TLS) != 0)
940 flags |= SEC_THREAD_LOCAL;
941 if ((hdr->sh_flags & SHF_EXCLUDE) != 0)
942 flags |= SEC_EXCLUDE;
943
944 newsect->entsize = hdr->sh_entsize;
945
946 switch (elf_elfheader (abfd)->e_ident[EI_OSABI])
947 {
948 /* FIXME: We should not recognize SHF_GNU_MBIND for ELFOSABI_NONE,
949 but binutils as of 2019-07-23 did not set the EI_OSABI header
950 byte. */
951 case ELFOSABI_GNU:
952 case ELFOSABI_FREEBSD:
953 if ((hdr->sh_flags & SHF_GNU_RETAIN) != 0)
954 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_retain;
955 /* Fall through */
956 case ELFOSABI_NONE:
957 if ((hdr->sh_flags & SHF_GNU_MBIND) != 0)
958 elf_tdata (abfd)->has_gnu_osabi |= elf_gnu_osabi_mbind;
959 break;
960 }
961
962 if ((flags & (SEC_ALLOC | SEC_GROUP)) == 0)
963 {
964 /* The debugging sections appear to be recognized only by name,
965 not any sort of flag. Their SEC_ALLOC bits are cleared. */
966 if (name [0] == '.')
967 {
968 if (startswith (name, ".debug")
969 || startswith (name, ".gnu.debuglto_.debug_")
970 || startswith (name, ".gnu.linkonce.wi.")
971 || startswith (name, ".zdebug"))
972 flags |= SEC_DEBUGGING | SEC_ELF_OCTETS;
973 else if (startswith (name, GNU_BUILD_ATTRS_SECTION_NAME)
974 || startswith (name, ".note.gnu"))
975 {
976 flags |= SEC_ELF_OCTETS;
977 opb = 1;
978 }
979 else if (startswith (name, ".line")
980 || startswith (name, ".stab")
981 || streq (name, ".gdb_index"))
982 flags |= SEC_DEBUGGING;
983 }
984 }
985
986 if (!bfd_set_section_vma (newsect, hdr->sh_addr / opb)
987 || !bfd_set_section_size (newsect, hdr->sh_size)
988 || !bfd_set_section_alignment (newsect, bfd_log2 (hdr->sh_addralign
989 & -hdr->sh_addralign)))
990 return false;
991
992 /* As a GNU extension, if the name begins with .gnu.linkonce, we
993 only link a single copy of the section. This is used to support
994 g++. g++ will emit each template expansion in its own section.
995 The symbols will be defined as weak, so that multiple definitions
996 are permitted. The GNU linker extension is to actually discard
997 all but one of the sections. */
998 if (startswith (name, ".gnu.linkonce")
999 && elf_next_in_group (newsect) == NULL)
1000 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1001
1002 if (!bfd_set_section_flags (newsect, flags))
1003 return false;
1004
1005 bed = get_elf_backend_data (abfd);
1006 if (bed->elf_backend_section_flags)
1007 if (!bed->elf_backend_section_flags (hdr))
1008 return false;
1009
1010 /* We do not parse the PT_NOTE segments as we are interested even in the
1011 separate debug info files which may have the segments offsets corrupted.
1012 PT_NOTEs from the core files are currently not parsed using BFD. */
1013 if (hdr->sh_type == SHT_NOTE && hdr->sh_size != 0)
1014 {
1015 bfd_byte *contents;
1016
1017 if (!_bfd_elf_mmap_section_contents (abfd, newsect, &contents))
1018 return false;
1019
1020 elf_parse_notes (abfd, (char *) contents, hdr->sh_size,
1021 hdr->sh_offset, hdr->sh_addralign);
1022 _bfd_elf_munmap_section_contents (newsect, contents);
1023 }
1024
1025 if ((newsect->flags & SEC_ALLOC) != 0)
1026 {
1027 Elf_Internal_Phdr *phdr;
1028 unsigned int i, nload;
1029
1030 /* Some ELF linkers produce binaries with all the program header
1031 p_paddr fields zero. If we have such a binary with more than
1032 one PT_LOAD header, then leave the section lma equal to vma
1033 so that we don't create sections with overlapping lma. */
1034 phdr = elf_tdata (abfd)->phdr;
1035 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1036 if (phdr->p_paddr != 0)
1037 break;
1038 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
1039 ++nload;
1040 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
1041 return true;
1042
1043 phdr = elf_tdata (abfd)->phdr;
1044 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
1045 {
1046 if (((phdr->p_type == PT_LOAD
1047 && (hdr->sh_flags & SHF_TLS) == 0)
1048 || phdr->p_type == PT_TLS)
1049 && ELF_SECTION_IN_SEGMENT (hdr, phdr))
1050 {
1051 if ((newsect->flags & SEC_LOAD) == 0)
1052 newsect->lma = (phdr->p_paddr
1053 + hdr->sh_addr - phdr->p_vaddr) / opb;
1054 else
1055 /* We used to use the same adjustment for SEC_LOAD
1056 sections, but that doesn't work if the segment
1057 is packed with code from multiple VMAs.
1058 Instead we calculate the section LMA based on
1059 the segment LMA. It is assumed that the
1060 segment will contain sections with contiguous
1061 LMAs, even if the VMAs are not. */
1062 newsect->lma = (phdr->p_paddr
1063 + hdr->sh_offset - phdr->p_offset) / opb;
1064
1065 /* With contiguous segments, we can't tell from file
1066 offsets whether a section with zero size should
1067 be placed at the end of one segment or the
1068 beginning of the next. Decide based on vaddr. */
1069 if (hdr->sh_addr >= phdr->p_vaddr
1070 && (hdr->sh_addr + hdr->sh_size
1071 <= phdr->p_vaddr + phdr->p_memsz))
1072 break;
1073 }
1074 }
1075 }
1076
1077 /* Compress/decompress DWARF debug sections with names: .debug_*,
1078 .zdebug_*, .gnu.debuglto_.debug_, after the section flags is set. */
1079 if ((newsect->flags & SEC_DEBUGGING) != 0
1080 && (newsect->flags & SEC_HAS_CONTENTS) != 0
1081 && (newsect->flags & SEC_ELF_OCTETS) != 0)
1082 {
1083 enum { nothing, compress, decompress } action = nothing;
1084 int compression_header_size;
1085 bfd_size_type uncompressed_size;
1086 unsigned int uncompressed_align_power;
1087 enum compression_type ch_type = ch_none;
1088 bool compressed
1089 = bfd_is_section_compressed_info (abfd, newsect,
1090 &compression_header_size,
1091 &uncompressed_size,
1092 &uncompressed_align_power,
1093 &ch_type);
1094
1095 /* Should we decompress? */
1096 if ((abfd->flags & BFD_DECOMPRESS) != 0 && compressed)
1097 action = decompress;
1098
1099 /* Should we compress? Or convert to a different compression? */
1100 else if ((abfd->flags & BFD_COMPRESS) != 0
1101 && newsect->size != 0
1102 && compression_header_size >= 0
1103 && uncompressed_size > 0)
1104 {
1105 if (!compressed)
1106 action = compress;
1107 else
1108 {
1109 enum compression_type new_ch_type = ch_none;
1110 if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
1111 new_ch_type = ((abfd->flags & BFD_COMPRESS_ZSTD) != 0
1112 ? ch_compress_zstd : ch_compress_zlib);
1113 if (new_ch_type != ch_type)
1114 action = compress;
1115 }
1116 }
1117
1118 if (action == compress)
1119 {
1120 if (!bfd_init_section_compress_status (abfd, newsect))
1121 {
1122 _bfd_error_handler
1123 /* xgettext:c-format */
1124 (_("%pB: unable to compress section %s"), abfd, name);
1125 return false;
1126 }
1127 }
1128 else if (action == decompress)
1129 {
1130 if (!bfd_init_section_decompress_status (abfd, newsect))
1131 {
1132 _bfd_error_handler
1133 /* xgettext:c-format */
1134 (_("%pB: unable to decompress section %s"), abfd, name);
1135 return false;
1136 }
1137 #ifndef HAVE_ZSTD
1138 if (newsect->compress_status == DECOMPRESS_SECTION_ZSTD)
1139 {
1140 _bfd_error_handler
1141 /* xgettext:c-format */
1142 (_ ("%pB: section %s is compressed with zstd, but BFD "
1143 "is not built with zstd support"),
1144 abfd, name);
1145 newsect->compress_status = COMPRESS_SECTION_NONE;
1146 return false;
1147 }
1148 #endif
1149 if (abfd->is_linker_input
1150 && name[1] == 'z')
1151 {
1152 /* Rename section from .zdebug_* to .debug_* so that ld
1153 scripts will see this section as a debug section. */
1154 char *new_name = bfd_zdebug_name_to_debug (abfd, name);
1155 if (new_name == NULL)
1156 return false;
1157 bfd_rename_section (newsect, new_name);
1158 }
1159 }
1160 }
1161
1162 return true;
1163 }
1164
1165 const char *const bfd_elf_section_type_names[] =
1166 {
1167 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1168 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1169 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1170 };
1171
1172 /* ELF relocs are against symbols. If we are producing relocatable
1173 output, and the reloc is against an external symbol, and nothing
1174 has given us any additional addend, the resulting reloc will also
1175 be against the same symbol. In such a case, we don't want to
1176 change anything about the way the reloc is handled, since it will
1177 all be done at final link time. Rather than put special case code
1178 into bfd_perform_relocation, all the reloc types use this howto
1179 function, or should call this function for relocatable output. */
1180
1181 bfd_reloc_status_type
1182 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1183 arelent *reloc_entry,
1184 asymbol *symbol,
1185 void *data ATTRIBUTE_UNUSED,
1186 asection *input_section,
1187 bfd *output_bfd,
1188 char **error_message ATTRIBUTE_UNUSED)
1189 {
1190 if (output_bfd != NULL
1191 && (symbol->flags & BSF_SECTION_SYM) == 0
1192 && (! reloc_entry->howto->partial_inplace
1193 || reloc_entry->addend == 0))
1194 {
1195 reloc_entry->address += input_section->output_offset;
1196 return bfd_reloc_ok;
1197 }
1198
1199 /* In some cases the relocation should be treated as output section
1200 relative, as when linking ELF DWARF into PE COFF. Many ELF
1201 targets lack section relative relocations and instead use
1202 ordinary absolute relocations for references between DWARF
1203 sections. That is arguably a bug in those targets but it happens
1204 to work for the usual case of linking to non-loaded ELF debug
1205 sections with VMAs forced to zero. PE COFF on the other hand
1206 doesn't allow a section VMA of zero. */
1207 if (output_bfd == NULL
1208 && !reloc_entry->howto->pc_relative
1209 && (symbol->section->flags & SEC_DEBUGGING) != 0
1210 && (input_section->flags & SEC_DEBUGGING) != 0)
1211 reloc_entry->addend -= symbol->section->output_section->vma;
1212
1213 return bfd_reloc_continue;
1214 }
1215
1216 /* Returns TRUE if section A matches section B.
1218 Names, addresses and links may be different, but everything else
1219 should be the same. */
1220
1221 static bool
1222 section_match (const Elf_Internal_Shdr * a,
1223 const Elf_Internal_Shdr * b)
1224 {
1225 if (a->sh_type != b->sh_type
1226 || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
1227 || a->sh_addralign != b->sh_addralign
1228 || a->sh_entsize != b->sh_entsize)
1229 return false;
1230 if (a->sh_type == SHT_SYMTAB
1231 || a->sh_type == SHT_STRTAB)
1232 return true;
1233 return a->sh_size == b->sh_size;
1234 }
1235
1236 /* Find a section in OBFD that has the same characteristics
1237 as IHEADER. Return the index of this section or SHN_UNDEF if
1238 none can be found. Check's section HINT first, as this is likely
1239 to be the correct section. */
1240
1241 static unsigned int
1242 find_link (const bfd *obfd, const Elf_Internal_Shdr *iheader,
1243 const unsigned int hint)
1244 {
1245 Elf_Internal_Shdr ** oheaders = elf_elfsections (obfd);
1246 unsigned int i;
1247
1248 BFD_ASSERT (iheader != NULL);
1249
1250 /* See PR 20922 for a reproducer of the NULL test. */
1251 if (hint < elf_numsections (obfd)
1252 && oheaders[hint] != NULL
1253 && section_match (oheaders[hint], iheader))
1254 return hint;
1255
1256 for (i = 1; i < elf_numsections (obfd); i++)
1257 {
1258 Elf_Internal_Shdr * oheader = oheaders[i];
1259
1260 if (oheader == NULL)
1261 continue;
1262 if (section_match (oheader, iheader))
1263 /* FIXME: Do we care if there is a potential for
1264 multiple matches ? */
1265 return i;
1266 }
1267
1268 return SHN_UNDEF;
1269 }
1270
1271 /* PR 19938: Attempt to set the ELF section header fields of an OS or
1272 Processor specific section, based upon a matching input section.
1273 Returns TRUE upon success, FALSE otherwise. */
1274
1275 static bool
1276 copy_special_section_fields (const bfd *ibfd,
1277 bfd *obfd,
1278 const Elf_Internal_Shdr *iheader,
1279 Elf_Internal_Shdr *oheader,
1280 const unsigned int secnum)
1281 {
1282 elf_backend_data *bed = get_elf_backend_data (obfd);
1283 const Elf_Internal_Shdr **iheaders
1284 = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1285 bool changed = false;
1286 unsigned int sh_link;
1287
1288 if (oheader->sh_type == SHT_NOBITS)
1289 {
1290 /* This is a feature for objcopy --only-keep-debug:
1291 When a section's type is changed to NOBITS, we preserve
1292 the sh_link and sh_info fields so that they can be
1293 matched up with the original.
1294
1295 Note: Strictly speaking these assignments are wrong.
1296 The sh_link and sh_info fields should point to the
1297 relevent sections in the output BFD, which may not be in
1298 the same location as they were in the input BFD. But
1299 the whole point of this action is to preserve the
1300 original values of the sh_link and sh_info fields, so
1301 that they can be matched up with the section headers in
1302 the original file. So strictly speaking we may be
1303 creating an invalid ELF file, but it is only for a file
1304 that just contains debug info and only for sections
1305 without any contents. */
1306 if (oheader->sh_link == 0)
1307 oheader->sh_link = iheader->sh_link;
1308 if (oheader->sh_info == 0)
1309 oheader->sh_info = iheader->sh_info;
1310 return true;
1311 }
1312
1313 /* Allow the target a chance to decide how these fields should be set. */
1314 if (bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1315 iheader, oheader))
1316 return true;
1317
1318 /* We have an iheader which might match oheader, and which has non-zero
1319 sh_info and/or sh_link fields. Attempt to follow those links and find
1320 the section in the output bfd which corresponds to the linked section
1321 in the input bfd. */
1322 if (iheader->sh_link != SHN_UNDEF)
1323 {
1324 /* See PR 20931 for a reproducer. */
1325 if (iheader->sh_link >= elf_numsections (ibfd))
1326 {
1327 _bfd_error_handler
1328 /* xgettext:c-format */
1329 (_("%pB: invalid sh_link field (%d) in section number %d"),
1330 ibfd, iheader->sh_link, secnum);
1331 return false;
1332 }
1333
1334 sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
1335 if (sh_link != SHN_UNDEF)
1336 {
1337 oheader->sh_link = sh_link;
1338 changed = true;
1339 }
1340 else
1341 /* FIXME: Should we install iheader->sh_link
1342 if we could not find a match ? */
1343 _bfd_error_handler
1344 /* xgettext:c-format */
1345 (_("%pB: failed to find link section for section %d"), obfd, secnum);
1346 }
1347
1348 if (iheader->sh_info)
1349 {
1350 /* The sh_info field can hold arbitrary information, but if the
1351 SHF_LINK_INFO flag is set then it should be interpreted as a
1352 section index. */
1353 if (iheader->sh_flags & SHF_INFO_LINK)
1354 {
1355 sh_link = find_link (obfd, iheaders[iheader->sh_info],
1356 iheader->sh_info);
1357 if (sh_link != SHN_UNDEF)
1358 oheader->sh_flags |= SHF_INFO_LINK;
1359 }
1360 else
1361 /* No idea what it means - just copy it. */
1362 sh_link = iheader->sh_info;
1363
1364 if (sh_link != SHN_UNDEF)
1365 {
1366 oheader->sh_info = sh_link;
1367 changed = true;
1368 }
1369 else
1370 _bfd_error_handler
1371 /* xgettext:c-format */
1372 (_("%pB: failed to find info section for section %d"), obfd, secnum);
1373 }
1374
1375 return changed;
1376 }
1377
1378 /* Copy the program header and other data from one object module to
1379 another. */
1380
1381 bool
1382 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1383 {
1384 const Elf_Internal_Shdr **iheaders;
1385 Elf_Internal_Shdr **oheaders;
1386 elf_backend_data *bed;
1387 unsigned int i;
1388
1389 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
1390 return true;
1391
1392 if (!elf_flags_init (obfd))
1393 {
1394 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1395 elf_flags_init (obfd) = true;
1396 }
1397
1398 elf_gp (obfd) = elf_gp (ibfd);
1399
1400 /* Also copy the EI_OSABI field. */
1401 elf_elfheader (obfd)->e_ident[EI_OSABI] =
1402 elf_elfheader (ibfd)->e_ident[EI_OSABI];
1403
1404 /* If set, copy the EI_ABIVERSION field. */
1405 if (elf_elfheader (ibfd)->e_ident[EI_ABIVERSION])
1406 elf_elfheader (obfd)->e_ident[EI_ABIVERSION]
1407 = elf_elfheader (ibfd)->e_ident[EI_ABIVERSION];
1408
1409 /* Copy object attributes. */
1410 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1411
1412 iheaders = (const Elf_Internal_Shdr **) elf_elfsections (ibfd);
1413 oheaders = elf_elfsections (obfd);
1414 if (iheaders == NULL || oheaders == NULL)
1415 return true;
1416
1417 bed = get_elf_backend_data (obfd);
1418
1419 /* Possibly copy other fields in the section header. */
1420 for (i = 1; i < elf_numsections (obfd); i++)
1421 {
1422 unsigned int j;
1423 Elf_Internal_Shdr * oheader = oheaders[i];
1424
1425 /* Ignore ordinary sections. SHT_NOBITS sections are considered however
1426 because of a special case need for generating separate debug info
1427 files. See below for more details. */
1428 if (oheader == NULL
1429 || (oheader->sh_type != SHT_NOBITS
1430 && oheader->sh_type < SHT_LOOS))
1431 continue;
1432
1433 /* Ignore empty sections, and sections whose
1434 fields have already been initialised. */
1435 if (oheader->sh_size == 0
1436 || (oheader->sh_info != 0 && oheader->sh_link != 0))
1437 continue;
1438
1439 /* Scan for the matching section in the input bfd.
1440 First we try for a direct mapping between the input and
1441 output sections. */
1442 for (j = 1; j < elf_numsections (ibfd); j++)
1443 {
1444 const Elf_Internal_Shdr * iheader = iheaders[j];
1445
1446 if (iheader == NULL)
1447 continue;
1448
1449 if (oheader->bfd_section != NULL
1450 && iheader->bfd_section != NULL
1451 && iheader->bfd_section->output_section != NULL
1452 && iheader->bfd_section->output_section == oheader->bfd_section)
1453 {
1454 /* We have found a connection from the input section to
1455 the output section. Attempt to copy the header fields.
1456 If this fails then do not try any further sections -
1457 there should only be a one-to-one mapping between
1458 input and output. */
1459 if (!copy_special_section_fields (ibfd, obfd,
1460 iheader, oheader, i))
1461 j = elf_numsections (ibfd);
1462 break;
1463 }
1464 }
1465
1466 if (j < elf_numsections (ibfd))
1467 continue;
1468
1469 /* That failed. So try to deduce the corresponding input section.
1470 Unfortunately we cannot compare names as the output string table
1471 is empty, so instead we check size, address and type. */
1472 for (j = 1; j < elf_numsections (ibfd); j++)
1473 {
1474 const Elf_Internal_Shdr * iheader = iheaders[j];
1475
1476 if (iheader == NULL)
1477 continue;
1478
1479 /* Try matching fields in the input section's header.
1480 Since --only-keep-debug turns all non-debug sections into
1481 SHT_NOBITS sections, the output SHT_NOBITS type matches any
1482 input type. */
1483 if ((oheader->sh_type == SHT_NOBITS
1484 || iheader->sh_type == oheader->sh_type)
1485 && (iheader->sh_flags & ~ SHF_INFO_LINK)
1486 == (oheader->sh_flags & ~ SHF_INFO_LINK)
1487 && iheader->sh_addralign == oheader->sh_addralign
1488 && iheader->sh_entsize == oheader->sh_entsize
1489 && iheader->sh_size == oheader->sh_size
1490 && iheader->sh_addr == oheader->sh_addr
1491 && (iheader->sh_info != oheader->sh_info
1492 || iheader->sh_link != oheader->sh_link))
1493 {
1494 if (copy_special_section_fields (ibfd, obfd, iheader, oheader, i))
1495 break;
1496 }
1497 }
1498
1499 if (j == elf_numsections (ibfd) && oheader->sh_type >= SHT_LOOS)
1500 {
1501 /* Final attempt. Call the backend copy function
1502 with a NULL input section. */
1503 (void) bed->elf_backend_copy_special_section_fields (ibfd, obfd,
1504 NULL, oheader);
1505 }
1506 }
1507
1508 return true;
1509 }
1510
1511 static const char *
1512 get_segment_type (unsigned int p_type)
1513 {
1514 const char *pt;
1515 switch (p_type)
1516 {
1517 case PT_NULL: pt = "NULL"; break;
1518 case PT_LOAD: pt = "LOAD"; break;
1519 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1520 case PT_INTERP: pt = "INTERP"; break;
1521 case PT_NOTE: pt = "NOTE"; break;
1522 case PT_SHLIB: pt = "SHLIB"; break;
1523 case PT_PHDR: pt = "PHDR"; break;
1524 case PT_TLS: pt = "TLS"; break;
1525 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1526 case PT_GNU_STACK: pt = "STACK"; break;
1527 case PT_GNU_RELRO: pt = "RELRO"; break;
1528 case PT_GNU_SFRAME: pt = "SFRAME"; break;
1529 default: pt = NULL; break;
1530 }
1531 return pt;
1532 }
1533
1534 /* Print out the program headers. */
1535
1536 bool
1537 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1538 {
1539 FILE *f = (FILE *) farg;
1540 Elf_Internal_Phdr *p;
1541 asection *s;
1542 bfd_byte *dynbuf = NULL;
1543
1544 p = elf_tdata (abfd)->phdr;
1545 if (p != NULL)
1546 {
1547 unsigned int i, c;
1548
1549 fprintf (f, _("\nProgram Header:\n"));
1550 c = elf_elfheader (abfd)->e_phnum;
1551 for (i = 0; i < c; i++, p++)
1552 {
1553 const char *pt = get_segment_type (p->p_type);
1554 char buf[20];
1555
1556 if (pt == NULL)
1557 {
1558 sprintf (buf, "0x%lx", p->p_type);
1559 pt = buf;
1560 }
1561 fprintf (f, "%8s off 0x", pt);
1562 bfd_fprintf_vma (abfd, f, p->p_offset);
1563 fprintf (f, " vaddr 0x");
1564 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1565 fprintf (f, " paddr 0x");
1566 bfd_fprintf_vma (abfd, f, p->p_paddr);
1567 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1568 fprintf (f, " filesz 0x");
1569 bfd_fprintf_vma (abfd, f, p->p_filesz);
1570 fprintf (f, " memsz 0x");
1571 bfd_fprintf_vma (abfd, f, p->p_memsz);
1572 fprintf (f, " flags %c%c%c",
1573 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1574 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1575 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1576 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1577 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1578 fprintf (f, "\n");
1579 }
1580 }
1581
1582 s = bfd_get_section_by_name (abfd, ".dynamic");
1583 if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
1584 {
1585 unsigned int elfsec;
1586 unsigned long shlink;
1587 bfd_byte *extdyn, *extdynend;
1588 size_t extdynsize;
1589 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1590
1591 fprintf (f, _("\nDynamic Section:\n"));
1592
1593 if (!_bfd_elf_mmap_section_contents (abfd, s, &dynbuf))
1594 goto error_return;
1595
1596 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1597 if (elfsec == SHN_BAD)
1598 goto error_return;
1599 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1600
1601 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1602 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1603
1604 for (extdyn = dynbuf, extdynend = dynbuf + s->size;
1605 (size_t) (extdynend - extdyn) >= extdynsize;
1606 extdyn += extdynsize)
1607 {
1608 Elf_Internal_Dyn dyn;
1609 const char *name = "";
1610 char ab[20];
1611 bool stringp;
1612 elf_backend_data *bed = get_elf_backend_data (abfd);
1613
1614 (*swap_dyn_in) (abfd, extdyn, &dyn);
1615
1616 if (dyn.d_tag == DT_NULL)
1617 break;
1618
1619 stringp = false;
1620 switch (dyn.d_tag)
1621 {
1622 default:
1623 if (bed->elf_backend_get_target_dtag)
1624 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1625
1626 if (streq (name, ""))
1627 {
1628 sprintf (ab, "%#" PRIx64, (uint64_t) dyn.d_tag);
1629 name = ab;
1630 }
1631 break;
1632
1633 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
1634 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1635 case DT_PLTGOT: name = "PLTGOT"; break;
1636 case DT_HASH: name = "HASH"; break;
1637 case DT_STRTAB: name = "STRTAB"; break;
1638 case DT_SYMTAB: name = "SYMTAB"; break;
1639 case DT_RELA: name = "RELA"; break;
1640 case DT_RELASZ: name = "RELASZ"; break;
1641 case DT_RELAENT: name = "RELAENT"; break;
1642 case DT_STRSZ: name = "STRSZ"; break;
1643 case DT_SYMENT: name = "SYMENT"; break;
1644 case DT_INIT: name = "INIT"; break;
1645 case DT_FINI: name = "FINI"; break;
1646 case DT_SONAME: name = "SONAME"; stringp = true; break;
1647 case DT_RPATH: name = "RPATH"; stringp = true; break;
1648 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1649 case DT_REL: name = "REL"; break;
1650 case DT_RELSZ: name = "RELSZ"; break;
1651 case DT_RELENT: name = "RELENT"; break;
1652 case DT_RELR: name = "RELR"; break;
1653 case DT_RELRSZ: name = "RELRSZ"; break;
1654 case DT_RELRENT: name = "RELRENT"; break;
1655 case DT_PLTREL: name = "PLTREL"; break;
1656 case DT_DEBUG: name = "DEBUG"; break;
1657 case DT_TEXTREL: name = "TEXTREL"; break;
1658 case DT_JMPREL: name = "JMPREL"; break;
1659 case DT_BIND_NOW: name = "BIND_NOW"; break;
1660 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1661 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1662 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1663 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1664 case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
1665 case DT_FLAGS: name = "FLAGS"; break;
1666 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1667 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1668 case DT_CHECKSUM: name = "CHECKSUM"; break;
1669 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1670 case DT_MOVEENT: name = "MOVEENT"; break;
1671 case DT_MOVESZ: name = "MOVESZ"; break;
1672 case DT_FEATURE: name = "FEATURE"; break;
1673 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1674 case DT_SYMINSZ: name = "SYMINSZ"; break;
1675 case DT_SYMINENT: name = "SYMINENT"; break;
1676 case DT_CONFIG: name = "CONFIG"; stringp = true; break;
1677 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
1678 case DT_AUDIT: name = "AUDIT"; stringp = true; break;
1679 case DT_PLTPAD: name = "PLTPAD"; break;
1680 case DT_MOVETAB: name = "MOVETAB"; break;
1681 case DT_SYMINFO: name = "SYMINFO"; break;
1682 case DT_RELACOUNT: name = "RELACOUNT"; break;
1683 case DT_RELCOUNT: name = "RELCOUNT"; break;
1684 case DT_FLAGS_1: name = "FLAGS_1"; break;
1685 case DT_VERSYM: name = "VERSYM"; break;
1686 case DT_VERDEF: name = "VERDEF"; break;
1687 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1688 case DT_VERNEED: name = "VERNEED"; break;
1689 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1690 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
1691 case DT_USED: name = "USED"; break;
1692 case DT_FILTER: name = "FILTER"; stringp = true; break;
1693 case DT_GNU_HASH: name = "GNU_HASH"; break;
1694 }
1695
1696 fprintf (f, " %-20s ", name);
1697 if (! stringp)
1698 {
1699 fprintf (f, "0x");
1700 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1701 }
1702 else
1703 {
1704 const char *string;
1705 unsigned int tagv = dyn.d_un.d_val;
1706
1707 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1708 if (string == NULL)
1709 goto error_return;
1710 fprintf (f, "%s", string);
1711 }
1712 fprintf (f, "\n");
1713 }
1714
1715 _bfd_elf_munmap_section_contents (s, dynbuf);
1716 dynbuf = NULL;
1717 }
1718
1719 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1720 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1721 {
1722 if (! _bfd_elf_slurp_version_tables (abfd, false))
1723 return false;
1724 }
1725
1726 if (elf_dynverdef (abfd) != 0)
1727 {
1728 Elf_Internal_Verdef *t;
1729
1730 fprintf (f, _("\nVersion definitions:\n"));
1731 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1732 {
1733 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1734 t->vd_flags, t->vd_hash,
1735 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1736 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1737 {
1738 Elf_Internal_Verdaux *a;
1739
1740 fprintf (f, "\t");
1741 for (a = t->vd_auxptr->vda_nextptr;
1742 a != NULL;
1743 a = a->vda_nextptr)
1744 fprintf (f, "%s ",
1745 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1746 fprintf (f, "\n");
1747 }
1748 }
1749 }
1750
1751 if (elf_dynverref (abfd) != 0)
1752 {
1753 Elf_Internal_Verneed *t;
1754
1755 fprintf (f, _("\nVersion References:\n"));
1756 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1757 {
1758 Elf_Internal_Vernaux *a;
1759
1760 fprintf (f, _(" required from %s:\n"),
1761 t->vn_filename ? t->vn_filename : "<corrupt>");
1762 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1763 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1764 a->vna_flags, a->vna_other,
1765 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1766 }
1767 }
1768
1769 return true;
1770
1771 error_return:
1772 _bfd_elf_munmap_section_contents (s, dynbuf);
1773 return false;
1774 }
1775
1776 /* Find the file offset corresponding to VMA by using the program
1777 headers. */
1778
1779 static file_ptr
1780 offset_from_vma (Elf_Internal_Phdr *phdrs, size_t phnum, bfd_vma vma,
1781 size_t size, size_t *max_size_p)
1782 {
1783 Elf_Internal_Phdr *seg;
1784 size_t i;
1785
1786 for (seg = phdrs, i = 0; i < phnum; ++seg, ++i)
1787 if (seg->p_type == PT_LOAD
1788 && vma >= (seg->p_vaddr & -seg->p_align)
1789 && vma + size <= seg->p_vaddr + seg->p_filesz)
1790 {
1791 if (max_size_p)
1792 *max_size_p = seg->p_vaddr + seg->p_filesz - vma;
1793 return vma - seg->p_vaddr + seg->p_offset;
1794 }
1795
1796 if (max_size_p)
1797 *max_size_p = 0;
1798 bfd_set_error (bfd_error_invalid_operation);
1799 return (file_ptr) -1;
1800 }
1801
1802 /* Convert hash table to internal form. */
1803
1804 static bfd_vma *
1805 get_hash_table_data (bfd *abfd, bfd_size_type number,
1806 unsigned int ent_size, bfd_size_type filesize)
1807 {
1808 unsigned char *e_data = NULL;
1809 bfd_vma *i_data = NULL;
1810 bfd_size_type size;
1811 void *e_data_addr;
1812 size_t e_data_size ATTRIBUTE_UNUSED;
1813
1814 if (ent_size != 4 && ent_size != 8)
1815 return NULL;
1816
1817 if ((size_t) number != number)
1818 {
1819 bfd_set_error (bfd_error_file_too_big);
1820 return NULL;
1821 }
1822
1823 size = ent_size * number;
1824 /* Be kind to memory checkers (eg valgrind, address sanitizer) by not
1825 attempting to allocate memory when the read is bound to fail. */
1826 if (size > filesize
1827 || number >= ~(size_t) 0 / ent_size
1828 || number >= ~(size_t) 0 / sizeof (*i_data))
1829 {
1830 bfd_set_error (bfd_error_file_too_big);
1831 return NULL;
1832 }
1833
1834 e_data = _bfd_mmap_temporary (abfd, size, &e_data_addr, &e_data_size);
1835 if (e_data == NULL)
1836 return NULL;
1837
1838 i_data = (bfd_vma *) bfd_malloc (number * sizeof (*i_data));
1839 if (i_data == NULL)
1840 {
1841 _bfd_munmap_temporary (e_data_addr, e_data_size);
1842 return NULL;
1843 }
1844
1845 if (ent_size == 4)
1846 while (number--)
1847 i_data[number] = bfd_get_32 (abfd, e_data + number * ent_size);
1848 else
1849 while (number--)
1850 i_data[number] = bfd_get_64 (abfd, e_data + number * ent_size);
1851
1852 _bfd_munmap_temporary (e_data_addr, e_data_size);
1853 return i_data;
1854 }
1855
1856 /* Address of .MIPS.xhash section. FIXME: What is the best way to
1857 support DT_MIPS_XHASH? */
1858 #define DT_MIPS_XHASH 0x70000036
1859
1860 /* Reconstruct dynamic symbol table from PT_DYNAMIC segment. */
1861
1862 bool
1863 _bfd_elf_get_dynamic_symbols (bfd *abfd, Elf_Internal_Phdr *phdr,
1864 Elf_Internal_Phdr *phdrs, size_t phnum,
1865 bfd_size_type filesize)
1866 {
1867 bfd_byte *extdyn, *extdynend;
1868 size_t extdynsize;
1869 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1870 bool (*swap_symbol_in) (bfd *, const void *, const void *,
1871 Elf_Internal_Sym *);
1872 Elf_Internal_Dyn dyn;
1873 bfd_vma dt_hash = 0;
1874 bfd_vma dt_gnu_hash = 0;
1875 bfd_vma dt_mips_xhash = 0;
1876 bfd_vma dt_strtab = 0;
1877 bfd_vma dt_symtab = 0;
1878 size_t dt_strsz = 0;
1879 bfd_vma dt_versym = 0;
1880 bfd_vma dt_verdef = 0;
1881 bfd_vma dt_verneed = 0;
1882 bfd_byte *dynbuf = NULL;
1883 char *strbuf = NULL;
1884 bfd_vma *gnubuckets = NULL;
1885 bfd_vma *gnuchains = NULL;
1886 bfd_vma *mipsxlat = NULL;
1887 file_ptr saved_filepos, filepos;
1888 bool res = false;
1889 size_t amt;
1890 bfd_byte *esymbuf = NULL, *esym;
1891 bfd_size_type symcount;
1892 Elf_Internal_Sym *isymbuf = NULL;
1893 Elf_Internal_Sym *isym, *isymend;
1894 bfd_byte *versym = NULL;
1895 bfd_byte *verdef = NULL;
1896 bfd_byte *verneed = NULL;
1897 size_t verdef_size = 0;
1898 size_t verneed_size = 0;
1899 size_t extsym_size;
1900 elf_backend_data *bed;
1901 void *dynbuf_addr = NULL;
1902 void *esymbuf_addr = NULL;
1903 size_t dynbuf_size = 0;
1904 size_t esymbuf_size = 0;
1905
1906 /* Return TRUE if symbol table is bad. */
1907 if (elf_bad_symtab (abfd))
1908 return true;
1909
1910 /* Return TRUE if DT_HASH/DT_GNU_HASH have bee processed before. */
1911 if (elf_tdata (abfd)->dt_strtab != NULL)
1912 return true;
1913
1914 bed = get_elf_backend_data (abfd);
1915
1916 /* Save file position for elf_object_p. */
1917 saved_filepos = bfd_tell (abfd);
1918
1919 if (bfd_seek (abfd, phdr->p_offset, SEEK_SET) != 0)
1920 goto error_return;
1921
1922 dynbuf_size = phdr->p_filesz;
1923 dynbuf = _bfd_mmap_temporary (abfd, dynbuf_size, &dynbuf_addr, &dynbuf_size);
1924 if (dynbuf == NULL)
1925 goto error_return;
1926
1927 extsym_size = bed->s->sizeof_sym;
1928 extdynsize = bed->s->sizeof_dyn;
1929 swap_dyn_in = bed->s->swap_dyn_in;
1930
1931 extdyn = dynbuf;
1932 if (phdr->p_filesz < extdynsize)
1933 goto error_return;
1934 extdynend = extdyn + phdr->p_filesz;
1935 for (; extdyn <= (extdynend - extdynsize); extdyn += extdynsize)
1936 {
1937 swap_dyn_in (abfd, extdyn, &dyn);
1938
1939 if (dyn.d_tag == DT_NULL)
1940 break;
1941
1942 switch (dyn.d_tag)
1943 {
1944 case DT_HASH:
1945 dt_hash = dyn.d_un.d_val;
1946 break;
1947 case DT_GNU_HASH:
1948 if (bed->elf_machine_code != EM_MIPS
1949 && bed->elf_machine_code != EM_MIPS_RS3_LE)
1950 dt_gnu_hash = dyn.d_un.d_val;
1951 break;
1952 case DT_STRTAB:
1953 dt_strtab = dyn.d_un.d_val;
1954 break;
1955 case DT_SYMTAB:
1956 dt_symtab = dyn.d_un.d_val;
1957 break;
1958 case DT_STRSZ:
1959 dt_strsz = dyn.d_un.d_val;
1960 break;
1961 case DT_SYMENT:
1962 if (dyn.d_un.d_val != extsym_size)
1963 goto error_return;
1964 break;
1965 case DT_VERSYM:
1966 dt_versym = dyn.d_un.d_val;
1967 break;
1968 case DT_VERDEF:
1969 dt_verdef = dyn.d_un.d_val;
1970 break;
1971 case DT_VERNEED:
1972 dt_verneed = dyn.d_un.d_val;
1973 break;
1974 default:
1975 if (dyn.d_tag == DT_MIPS_XHASH
1976 && (bed->elf_machine_code == EM_MIPS
1977 || bed->elf_machine_code == EM_MIPS_RS3_LE))
1978 {
1979 dt_gnu_hash = dyn.d_un.d_val;
1980 dt_mips_xhash = dyn.d_un.d_val;
1981 }
1982 break;
1983 }
1984 }
1985
1986 /* Check if we can reconstruct dynamic symbol table from PT_DYNAMIC
1987 segment. */
1988 if ((!dt_hash && !dt_gnu_hash)
1989 || !dt_strtab
1990 || !dt_symtab
1991 || !dt_strsz)
1992 goto error_return;
1993
1994 /* Get dynamic string table. */
1995 filepos = offset_from_vma (phdrs, phnum, dt_strtab, dt_strsz, NULL);
1996 if (filepos == (file_ptr) -1
1997 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
1998 goto error_return;
1999
2000 /* Dynamic string table must be valid until ABFD is closed. */
2001 strbuf = (char *) _bfd_mmap_persistent (abfd, dt_strsz);
2002 if (strbuf == NULL)
2003 goto error_return;
2004 if (strbuf[dt_strsz - 1] != 0)
2005 {
2006 /* It is an error if a string table is't terminated. */
2007 _bfd_error_handler
2008 /* xgettext:c-format */
2009 (_("%pB: DT_STRTAB table is corrupt"), abfd);
2010 strbuf[dt_strsz - 1] = 0;
2011 }
2012
2013 /* Get the real symbol count from DT_HASH or DT_GNU_HASH. Prefer
2014 DT_HASH since it is simpler than DT_GNU_HASH. */
2015 if (dt_hash)
2016 {
2017 unsigned char nb[16];
2018 unsigned int hash_ent_size;
2019
2020 switch (bed->elf_machine_code)
2021 {
2022 case EM_ALPHA:
2023 case EM_S390:
2024 case EM_S390_OLD:
2025 if (bed->s->elfclass == ELFCLASS64)
2026 {
2027 hash_ent_size = 8;
2028 break;
2029 }
2030 /* FALLTHROUGH */
2031 default:
2032 hash_ent_size = 4;
2033 break;
2034 }
2035
2036 filepos = offset_from_vma (phdrs, phnum, dt_hash, 2 * hash_ent_size,
2037 NULL);
2038 if (filepos == (file_ptr) -1
2039 || bfd_seek (abfd, filepos, SEEK_SET) != 0
2040 || bfd_read (nb, 2 * hash_ent_size, abfd) != 2 * hash_ent_size)
2041 goto error_return;
2042
2043 /* The number of dynamic symbol table entries equals the number
2044 of chains. */
2045 if (hash_ent_size == 8)
2046 symcount = bfd_get_64 (abfd, nb + hash_ent_size);
2047 else
2048 symcount = bfd_get_32 (abfd, nb + hash_ent_size);
2049 }
2050 else
2051 {
2052 /* For DT_GNU_HASH, only defined symbols with non-STB_LOCAL
2053 bindings are in hash table. Since in dynamic symbol table,
2054 all symbols with STB_LOCAL binding are placed before symbols
2055 with other bindings and all undefined symbols are placed
2056 before defined ones, the highest symbol index in DT_GNU_HASH
2057 is the highest dynamic symbol table index. */
2058 unsigned char nb[16];
2059 bfd_vma ngnubuckets;
2060 bfd_vma gnusymidx;
2061 size_t i, ngnuchains;
2062 bfd_vma maxchain = 0xffffffff, bitmaskwords;
2063 bfd_vma buckets_vma;
2064
2065 filepos = offset_from_vma (phdrs, phnum, dt_gnu_hash,
2066 sizeof (nb), NULL);
2067 if (filepos == (file_ptr) -1
2068 || bfd_seek (abfd, filepos, SEEK_SET) != 0
2069 || bfd_read (nb, sizeof (nb), abfd) != sizeof (nb))
2070 goto error_return;
2071
2072 ngnubuckets = bfd_get_32 (abfd, nb);
2073 gnusymidx = bfd_get_32 (abfd, nb + 4);
2074 bitmaskwords = bfd_get_32 (abfd, nb + 8);
2075 buckets_vma = dt_gnu_hash + 16;
2076 if (bed->s->elfclass == ELFCLASS32)
2077 buckets_vma += bitmaskwords * 4;
2078 else
2079 buckets_vma += bitmaskwords * 8;
2080 filepos = offset_from_vma (phdrs, phnum, buckets_vma, 4, NULL);
2081 if (filepos == (file_ptr) -1
2082 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2083 goto error_return;
2084
2085 gnubuckets = get_hash_table_data (abfd, ngnubuckets, 4, filesize);
2086 if (gnubuckets == NULL)
2087 goto error_return;
2088
2089 for (i = 0; i < ngnubuckets; i++)
2090 if (gnubuckets[i] != 0)
2091 {
2092 if (gnubuckets[i] < gnusymidx)
2093 goto error_return;
2094
2095 if (maxchain == 0xffffffff || gnubuckets[i] > maxchain)
2096 maxchain = gnubuckets[i];
2097 }
2098
2099 if (maxchain == 0xffffffff)
2100 {
2101 symcount = 0;
2102 goto empty_gnu_hash;
2103 }
2104
2105 maxchain -= gnusymidx;
2106 filepos = offset_from_vma (phdrs, phnum,
2107 buckets_vma + 4 * (ngnubuckets + maxchain),
2108 4, NULL);
2109 if (filepos == (file_ptr) -1
2110 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2111 goto error_return;
2112
2113 do
2114 {
2115 if (bfd_read (nb, 4, abfd) != 4)
2116 goto error_return;
2117 ++maxchain;
2118 if (maxchain == 0)
2119 goto error_return;
2120 }
2121 while ((bfd_get_32 (abfd, nb) & 1) == 0);
2122
2123 filepos = offset_from_vma (phdrs, phnum,
2124 buckets_vma + 4 * ngnubuckets,
2125 4, NULL);
2126 if (filepos == (file_ptr) -1
2127 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2128 goto error_return;
2129
2130 gnuchains = get_hash_table_data (abfd, maxchain, 4, filesize);
2131 if (gnuchains == NULL)
2132 goto error_return;
2133 ngnuchains = maxchain;
2134
2135 if (dt_mips_xhash)
2136 {
2137 filepos = offset_from_vma (phdrs, phnum,
2138 buckets_vma + 4 * (ngnubuckets + maxchain),
2139 4, NULL);
2140 if (filepos == (file_ptr) -1
2141 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2142 goto error_return;
2143
2144 mipsxlat = get_hash_table_data (abfd, maxchain, 4, filesize);
2145 if (mipsxlat == NULL)
2146 goto error_return;
2147 }
2148
2149 symcount = 0;
2150 for (i = 0; i < ngnubuckets; ++i)
2151 if (gnubuckets[i] != 0)
2152 {
2153 bfd_vma si = gnubuckets[i];
2154 bfd_vma off = si - gnusymidx;
2155 do
2156 {
2157 if (mipsxlat)
2158 {
2159 if (mipsxlat[off] >= symcount)
2160 symcount = mipsxlat[off] + 1;
2161 }
2162 else
2163 {
2164 if (si >= symcount)
2165 symcount = si + 1;
2166 }
2167 si++;
2168 }
2169 while (off < ngnuchains && (gnuchains[off++] & 1) == 0);
2170 }
2171 }
2172
2173 /* Swap in dynamic symbol table. */
2174 if (_bfd_mul_overflow (symcount, extsym_size, &amt))
2175 {
2176 bfd_set_error (bfd_error_file_too_big);
2177 goto error_return;
2178 }
2179
2180 filepos = offset_from_vma (phdrs, phnum, dt_symtab, amt, NULL);
2181 if (filepos == (file_ptr) -1
2182 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2183 goto error_return;
2184 esymbuf_size = amt;
2185 esymbuf = _bfd_mmap_temporary (abfd, esymbuf_size,
2186 &esymbuf_addr, &esymbuf_size);
2187 if (esymbuf == NULL)
2188 goto error_return;
2189
2190 if (_bfd_mul_overflow (symcount, sizeof (Elf_Internal_Sym), &amt))
2191 {
2192 bfd_set_error (bfd_error_file_too_big);
2193 goto error_return;
2194 }
2195
2196 /* Dynamic symbol table must be valid until ABFD is closed. */
2197 isymbuf = (Elf_Internal_Sym *) bfd_alloc (abfd, amt);
2198 if (isymbuf == NULL)
2199 goto error_return;
2200
2201 swap_symbol_in = bed->s->swap_symbol_in;
2202
2203 /* Convert the symbols to internal form. */
2204 isymend = isymbuf + symcount;
2205 for (esym = esymbuf, isym = isymbuf;
2206 isym < isymend;
2207 esym += extsym_size, isym++)
2208 if (!swap_symbol_in (abfd, esym, NULL, isym)
2209 || isym->st_name >= dt_strsz)
2210 {
2211 bfd_set_error (bfd_error_invalid_operation);
2212 goto error_return;
2213 }
2214
2215 if (dt_versym)
2216 {
2217 /* Swap in DT_VERSYM. */
2218 if (_bfd_mul_overflow (symcount, 2, &amt))
2219 {
2220 bfd_set_error (bfd_error_file_too_big);
2221 goto error_return;
2222 }
2223
2224 filepos = offset_from_vma (phdrs, phnum, dt_versym, amt, NULL);
2225 if (filepos == (file_ptr) -1
2226 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2227 goto error_return;
2228
2229 /* DT_VERSYM info must be valid until ABFD is closed. */
2230 versym = _bfd_mmap_persistent (abfd, amt);
2231
2232 if (dt_verdef)
2233 {
2234 /* Read in DT_VERDEF. */
2235 filepos = offset_from_vma (phdrs, phnum, dt_verdef,
2236 0, &verdef_size);
2237 if (filepos == (file_ptr) -1
2238 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2239 goto error_return;
2240
2241 /* DT_VERDEF info must be valid until ABFD is closed. */
2242 verdef = _bfd_mmap_persistent (abfd, verdef_size);
2243 }
2244
2245 if (dt_verneed)
2246 {
2247 /* Read in DT_VERNEED. */
2248 filepos = offset_from_vma (phdrs, phnum, dt_verneed,
2249 0, &verneed_size);
2250 if (filepos == (file_ptr) -1
2251 || bfd_seek (abfd, filepos, SEEK_SET) != 0)
2252 goto error_return;
2253
2254 /* DT_VERNEED info must be valid until ABFD is closed. */
2255 verneed = _bfd_mmap_persistent (abfd, verneed_size);
2256 }
2257 }
2258
2259 empty_gnu_hash:
2260 elf_tdata (abfd)->dt_strtab = strbuf;
2261 elf_tdata (abfd)->dt_strsz = dt_strsz;
2262 elf_tdata (abfd)->dt_symtab = isymbuf;
2263 elf_tdata (abfd)->dt_symtab_count = symcount;
2264 elf_tdata (abfd)->dt_versym = versym;
2265 elf_tdata (abfd)->dt_verdef = verdef;
2266 elf_tdata (abfd)->dt_verneed = verneed;
2267 elf_tdata (abfd)->dt_verdef_count
2268 = verdef_size / sizeof (Elf_External_Verdef);
2269 elf_tdata (abfd)->dt_verneed_count
2270 = verneed_size / sizeof (Elf_External_Verneed);
2271
2272 res = true;
2273
2274 error_return:
2275 /* Restore file position for elf_object_p. */
2276 if (bfd_seek (abfd, saved_filepos, SEEK_SET) != 0)
2277 res = false;
2278 _bfd_munmap_temporary (dynbuf_addr, dynbuf_size);
2279 _bfd_munmap_temporary (esymbuf_addr, esymbuf_size);
2280 free (gnubuckets);
2281 free (gnuchains);
2282 free (mipsxlat);
2283 return res;
2284 }
2285
2286 /* Reconstruct section from dynamic symbol. */
2287
2288 asection *
2289 _bfd_elf_get_section_from_dynamic_symbol (bfd *abfd,
2290 Elf_Internal_Sym *isym)
2291 {
2292 asection *sec;
2293 flagword flags;
2294
2295 if (!elf_use_dt_symtab_p (abfd))
2296 return NULL;
2297
2298 flags = SEC_ALLOC | SEC_LOAD;
2299 switch (ELF_ST_TYPE (isym->st_info))
2300 {
2301 case STT_FUNC:
2302 case STT_GNU_IFUNC:
2303 sec = bfd_get_section_by_name (abfd, ".text");
2304 if (sec == NULL)
2305 sec = bfd_make_section_with_flags (abfd,
2306 ".text",
2307 flags | SEC_CODE);
2308 break;
2309 case STT_COMMON:
2310 sec = bfd_com_section_ptr;
2311 break;
2312 case STT_OBJECT:
2313 sec = bfd_get_section_by_name (abfd, ".data");
2314 if (sec == NULL)
2315 sec = bfd_make_section_with_flags (abfd,
2316 ".data",
2317 flags | SEC_DATA);
2318 break;
2319 case STT_TLS:
2320 sec = bfd_get_section_by_name (abfd, ".tdata");
2321 if (sec == NULL)
2322 sec = bfd_make_section_with_flags (abfd,
2323 ".tdata",
2324 (flags
2325 | SEC_DATA
2326 | SEC_THREAD_LOCAL));
2327 break;
2328 default:
2329 sec = bfd_abs_section_ptr;
2330 break;
2331 }
2332
2333 return sec;
2334 }
2335
2336 /* Get version name. If BASE_P is TRUE, return "Base" for VER_FLG_BASE
2337 and return symbol version for symbol version itself. */
2338
2339 const char *
2340 _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
2341 bool base_p,
2342 bool *hidden)
2343 {
2344 const char *version_string = NULL;
2345 if ((elf_dynversym (abfd) != 0
2346 && (elf_dynverdef (abfd) != 0 || elf_dynverref (abfd) != 0))
2347 || (elf_tdata (abfd)->dt_versym != NULL
2348 && (elf_tdata (abfd)->dt_verdef != NULL
2349 || elf_tdata (abfd)->dt_verneed != NULL)))
2350 {
2351 unsigned int vernum = ((elf_symbol_type *) symbol)->version;
2352
2353 *hidden = (vernum & VERSYM_HIDDEN) != 0;
2354 vernum &= VERSYM_VERSION;
2355
2356 if (vernum == 0)
2357 version_string = "";
2358 else if (vernum == 1
2359 && (vernum > elf_tdata (abfd)->cverdefs
2360 || (elf_tdata (abfd)->verdef[0].vd_flags
2361 == VER_FLG_BASE)))
2362 version_string = base_p ? "Base" : "";
2363 else if (vernum <= elf_tdata (abfd)->cverdefs)
2364 {
2365 const char *nodename
2366 = elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
2367 version_string = "";
2368 if (base_p
2369 || nodename == NULL
2370 || symbol->name == NULL
2371 || ! streq (symbol->name, nodename))
2372 version_string = nodename;
2373 }
2374 else
2375 {
2376 Elf_Internal_Verneed *t;
2377
2378 version_string = _("<corrupt>");
2379 for (t = elf_tdata (abfd)->verref;
2380 t != NULL;
2381 t = t->vn_nextref)
2382 {
2383 Elf_Internal_Vernaux *a;
2384
2385 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
2386 {
2387 if (a->vna_other == vernum)
2388 {
2389 *hidden = true;
2390 version_string = a->vna_nodename;
2391 break;
2392 }
2393 }
2394 }
2395 }
2396 }
2397 return version_string;
2398 }
2399
2400 /* Display ELF-specific fields of a symbol. */
2401
2402 void
2403 _bfd_elf_print_symbol (bfd *abfd,
2404 void *filep,
2405 asymbol *symbol,
2406 bfd_print_symbol_type how)
2407 {
2408 FILE *file = (FILE *) filep;
2409 const char *symname = (symbol->name != bfd_symbol_error_name
2410 ? symbol->name : _("<corrupt>"));
2411
2412 switch (how)
2413 {
2414 case bfd_print_symbol_name:
2415 fprintf (file, "%s", symname);
2416 break;
2417 case bfd_print_symbol_more:
2418 fprintf (file, "elf ");
2419 bfd_fprintf_vma (abfd, file, symbol->value);
2420 fprintf (file, " %x", symbol->flags);
2421 break;
2422 case bfd_print_symbol_all:
2423 {
2424 const char *section_name;
2425 const char *name = NULL;
2426 elf_backend_data *bed;
2427 unsigned char st_other;
2428 bfd_vma val;
2429 const char *version_string;
2430 bool hidden;
2431
2432 section_name = symbol->section ? symbol->section->name : "(*none*)";
2433
2434 bed = get_elf_backend_data (abfd);
2435 if (bed->elf_backend_print_symbol_all)
2436 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
2437
2438 if (name != NULL)
2439 symname = name;
2440 else
2441 bfd_print_symbol_vandf (abfd, file, symbol);
2442
2443 fprintf (file, " %s\t", section_name);
2444 /* Print the "other" value for a symbol. For common symbols,
2445 we've already printed the size; now print the alignment.
2446 For other symbols, we have no specified alignment, and
2447 we've printed the address; now print the size. */
2448 if (symbol->section && bfd_is_com_section (symbol->section))
2449 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
2450 else
2451 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
2452 bfd_fprintf_vma (abfd, file, val);
2453
2454 /* If we have version information, print it. */
2455 version_string = _bfd_elf_get_symbol_version_string (abfd,
2456 symbol,
2457 true,
2458 &hidden);
2459 if (version_string)
2460 {
2461 if (!hidden)
2462 fprintf (file, " %-11s", version_string);
2463 else
2464 {
2465 int i;
2466
2467 fprintf (file, " (%s)", version_string);
2468 for (i = 10 - strlen (version_string); i > 0; --i)
2469 putc (' ', file);
2470 }
2471 }
2472
2473 /* If the st_other field is not zero, print it. */
2474 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
2475
2476 switch (st_other)
2477 {
2478 case 0: break;
2479 case STV_INTERNAL: fprintf (file, " .internal"); break;
2480 case STV_HIDDEN: fprintf (file, " .hidden"); break;
2481 case STV_PROTECTED: fprintf (file, " .protected"); break;
2482 default:
2483 /* Some other non-defined flags are also present, so print
2484 everything hex. */
2485 fprintf (file, " 0x%02x", (unsigned int) st_other);
2486 }
2487
2488 fprintf (file, " %s", symname);
2489 }
2490 break;
2491 }
2492 }
2493
2494 /* ELF .o/exec file reading */
2496
2497 /* Create a new bfd section from an ELF section header. */
2498
2499 bool
2500 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
2501 {
2502 Elf_Internal_Shdr *hdr;
2503 Elf_Internal_Ehdr *ehdr;
2504 elf_backend_data *bed;
2505 const char *name;
2506 bool ret = true;
2507
2508 if (shindex >= elf_numsections (abfd))
2509 return false;
2510
2511 /* PR17512: A corrupt ELF binary might contain a loop of sections via
2512 sh_link or sh_info. Detect this here, by refusing to load a
2513 section that we are already in the process of loading. */
2514 if (elf_tdata (abfd)->being_created[shindex])
2515 {
2516 _bfd_error_handler
2517 (_("%pB: warning: loop in section dependencies detected"), abfd);
2518 return false;
2519 }
2520 elf_tdata (abfd)->being_created[shindex] = true;
2521
2522 hdr = elf_elfsections (abfd)[shindex];
2523 ehdr = elf_elfheader (abfd);
2524 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
2525 hdr->sh_name);
2526 if (name == NULL)
2527 goto fail;
2528
2529 bed = get_elf_backend_data (abfd);
2530 switch (hdr->sh_type)
2531 {
2532 case SHT_NULL:
2533 /* Inactive section. Throw it away. */
2534 goto success;
2535
2536 case SHT_PROGBITS: /* Normal section with contents. */
2537 case SHT_NOBITS: /* .bss section. */
2538 case SHT_HASH: /* .hash section. */
2539 case SHT_NOTE: /* .note section. */
2540 case SHT_INIT_ARRAY: /* .init_array section. */
2541 case SHT_FINI_ARRAY: /* .fini_array section. */
2542 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
2543 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
2544 case SHT_GNU_HASH: /* .gnu.hash section. */
2545 case SHT_GNU_SFRAME: /* .sframe section. */
2546 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2547 goto success;
2548
2549 case SHT_DYNAMIC: /* Dynamic linking information. */
2550 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2551 goto fail;
2552
2553 if (hdr->sh_link > elf_numsections (abfd))
2554 {
2555 /* PR 10478: Accept Solaris binaries with a sh_link field
2556 set to SHN_BEFORE (LORESERVE) or SHN_AFTER (LORESERVE+1). */
2557 switch (bfd_get_arch (abfd))
2558 {
2559 case bfd_arch_i386:
2560 case bfd_arch_sparc:
2561 if (hdr->sh_link == (SHN_LORESERVE & 0xffff)
2562 || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff))
2563 break;
2564 /* Otherwise fall through. */
2565 default:
2566 goto fail;
2567 }
2568 }
2569 else if (elf_elfsections (abfd)[hdr->sh_link] == NULL)
2570 goto fail;
2571 else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
2572 {
2573 Elf_Internal_Shdr *dynsymhdr;
2574
2575 /* The shared libraries distributed with hpux11 have a bogus
2576 sh_link field for the ".dynamic" section. Find the
2577 string table for the ".dynsym" section instead. */
2578 if (elf_dynsymtab (abfd) != 0)
2579 {
2580 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
2581 hdr->sh_link = dynsymhdr->sh_link;
2582 }
2583 else
2584 {
2585 unsigned int i, num_sec;
2586
2587 num_sec = elf_numsections (abfd);
2588 for (i = 1; i < num_sec; i++)
2589 {
2590 dynsymhdr = elf_elfsections (abfd)[i];
2591 if (dynsymhdr->sh_type == SHT_DYNSYM)
2592 {
2593 hdr->sh_link = dynsymhdr->sh_link;
2594 break;
2595 }
2596 }
2597 }
2598 }
2599 goto success;
2600
2601 case SHT_SYMTAB: /* A symbol table. */
2602 if (elf_onesymtab (abfd) == shindex)
2603 goto success;
2604
2605 if (hdr->sh_entsize != bed->s->sizeof_sym)
2606 goto fail;
2607
2608 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2609 {
2610 if (hdr->sh_size != 0)
2611 goto fail;
2612 /* Some assemblers erroneously set sh_info to one with a
2613 zero sh_size. ld sees this as a global symbol count
2614 of (unsigned) -1. Fix it here. */
2615 hdr->sh_info = 0;
2616 goto success;
2617 }
2618
2619 /* PR 18854: A binary might contain more than one symbol table.
2620 Unusual, but possible. Warn, but continue. */
2621 if (elf_onesymtab (abfd) != 0)
2622 {
2623 _bfd_error_handler
2624 /* xgettext:c-format */
2625 (_("%pB: warning: multiple symbol tables detected"
2626 " - ignoring the table in section %u"),
2627 abfd, shindex);
2628 goto success;
2629 }
2630 elf_onesymtab (abfd) = shindex;
2631 elf_symtab_hdr (abfd) = *hdr;
2632 elf_elfsections (abfd)[shindex] = hdr = & elf_symtab_hdr (abfd);
2633 abfd->flags |= HAS_SYMS;
2634
2635 /* Sometimes a shared object will map in the symbol table. If
2636 SHF_ALLOC is set, and this is a shared object, then we also
2637 treat this section as a BFD section. We can not base the
2638 decision purely on SHF_ALLOC, because that flag is sometimes
2639 set in a relocatable object file, which would confuse the
2640 linker. */
2641 if ((hdr->sh_flags & SHF_ALLOC) != 0
2642 && (abfd->flags & DYNAMIC) != 0
2643 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2644 shindex))
2645 goto fail;
2646
2647 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
2648 can't read symbols without that section loaded as well. It
2649 is most likely specified by the next section header. */
2650 {
2651 elf_section_list * entry;
2652 unsigned int i, num_sec;
2653
2654 for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2655 if (entry->hdr.sh_link == shindex)
2656 goto success;
2657
2658 num_sec = elf_numsections (abfd);
2659 for (i = shindex + 1; i < num_sec; i++)
2660 {
2661 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2662
2663 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2664 && hdr2->sh_link == shindex)
2665 break;
2666 }
2667
2668 if (i == num_sec)
2669 for (i = 1; i < shindex; i++)
2670 {
2671 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2672
2673 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
2674 && hdr2->sh_link == shindex)
2675 break;
2676 }
2677
2678 if (i != shindex)
2679 ret = bfd_section_from_shdr (abfd, i);
2680 /* else FIXME: we have failed to find the symbol table.
2681 Should we issue an error? */
2682 goto success;
2683 }
2684
2685 case SHT_DYNSYM: /* A dynamic symbol table. */
2686 if (elf_dynsymtab (abfd) == shindex)
2687 goto success;
2688
2689 if (hdr->sh_entsize != bed->s->sizeof_sym)
2690 goto fail;
2691
2692 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
2693 {
2694 if (hdr->sh_size != 0)
2695 goto fail;
2696
2697 /* Some linkers erroneously set sh_info to one with a
2698 zero sh_size. ld sees this as a global symbol count
2699 of (unsigned) -1. Fix it here. */
2700 hdr->sh_info = 0;
2701 goto success;
2702 }
2703
2704 /* PR 18854: A binary might contain more than one dynamic symbol table.
2705 Unusual, but possible. Warn, but continue. */
2706 if (elf_dynsymtab (abfd) != 0)
2707 {
2708 _bfd_error_handler
2709 /* xgettext:c-format */
2710 (_("%pB: warning: multiple dynamic symbol tables detected"
2711 " - ignoring the table in section %u"),
2712 abfd, shindex);
2713 goto success;
2714 }
2715 elf_dynsymtab (abfd) = shindex;
2716 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
2717 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2718 abfd->flags |= HAS_SYMS;
2719
2720 /* Besides being a symbol table, we also treat this as a regular
2721 section, so that objcopy can handle it. */
2722 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2723 goto success;
2724
2725 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections. */
2726 {
2727 elf_section_list * entry;
2728
2729 for (entry = elf_symtab_shndx_list (abfd); entry; entry = entry->next)
2730 if (entry->ndx == shindex)
2731 goto success;
2732
2733 entry = bfd_alloc (abfd, sizeof (*entry));
2734 if (entry == NULL)
2735 goto fail;
2736 entry->ndx = shindex;
2737 entry->hdr = * hdr;
2738 entry->next = elf_symtab_shndx_list (abfd);
2739 elf_symtab_shndx_list (abfd) = entry;
2740 elf_elfsections (abfd)[shindex] = & entry->hdr;
2741 goto success;
2742 }
2743
2744 case SHT_STRTAB: /* A string table. */
2745 if (hdr->bfd_section != NULL)
2746 goto success;
2747
2748 if (ehdr->e_shstrndx == shindex)
2749 {
2750 elf_tdata (abfd)->shstrtab_hdr = *hdr;
2751 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
2752 goto success;
2753 }
2754
2755 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
2756 {
2757 symtab_strtab:
2758 elf_tdata (abfd)->strtab_hdr = *hdr;
2759 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
2760 goto success;
2761 }
2762
2763 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
2764 {
2765 dynsymtab_strtab:
2766 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
2767 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
2768 elf_elfsections (abfd)[shindex] = hdr;
2769 /* We also treat this as a regular section, so that objcopy
2770 can handle it. */
2771 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name,
2772 shindex);
2773 goto success;
2774 }
2775
2776 /* If the string table isn't one of the above, then treat it as a
2777 regular section. We need to scan all the headers to be sure,
2778 just in case this strtab section appeared before the above. */
2779 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
2780 {
2781 unsigned int i, num_sec;
2782
2783 num_sec = elf_numsections (abfd);
2784 for (i = 1; i < num_sec; i++)
2785 {
2786 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
2787 if (hdr2->sh_link == shindex)
2788 {
2789 /* Prevent endless recursion on broken objects. */
2790 if (i == shindex)
2791 goto fail;
2792 if (! bfd_section_from_shdr (abfd, i))
2793 goto fail;
2794 if (elf_onesymtab (abfd) == i)
2795 goto symtab_strtab;
2796 if (elf_dynsymtab (abfd) == i)
2797 goto dynsymtab_strtab;
2798 }
2799 }
2800 }
2801 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2802 goto success;
2803
2804 case SHT_REL:
2805 case SHT_RELA:
2806 case SHT_RELR:
2807 /* *These* do a lot of work -- but build no sections! */
2808 {
2809 asection *target_sect;
2810 Elf_Internal_Shdr *hdr2, **p_hdr;
2811 unsigned int num_sec = elf_numsections (abfd);
2812 struct bfd_elf_section_data *esdt;
2813 bfd_size_type size;
2814
2815 if (hdr->sh_type == SHT_REL)
2816 size = bed->s->sizeof_rel;
2817 else if (hdr->sh_type == SHT_RELA)
2818 size = bed->s->sizeof_rela;
2819 else
2820 size = bed->s->arch_size / 8;
2821 if (hdr->sh_entsize != size)
2822 goto fail;
2823
2824 /* Check for a bogus link to avoid crashing. */
2825 if (hdr->sh_link >= num_sec)
2826 {
2827 _bfd_error_handler
2828 /* xgettext:c-format */
2829 (_("%pB: invalid link %u for reloc section %s (index %u)"),
2830 abfd, hdr->sh_link, name, shindex);
2831 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2832 goto success;
2833 }
2834
2835 /* Get the symbol table. */
2836 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
2837 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
2838 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
2839 goto fail;
2840
2841 /* If this is an alloc section in an executable or shared
2842 library, or the reloc section does not use the main symbol
2843 table we don't treat it as a reloc section. BFD can't
2844 adequately represent such a section, so at least for now,
2845 we don't try. We just present it as a normal section. We
2846 also can't use it as a reloc section if it points to the
2847 null section, an invalid section, another reloc section, or
2848 its sh_link points to the null section. */
2849 if (((abfd->flags & (DYNAMIC | EXEC_P)) != 0
2850 && (hdr->sh_flags & SHF_ALLOC) != 0)
2851 || (hdr->sh_flags & SHF_COMPRESSED) != 0
2852 || hdr->sh_type == SHT_RELR
2853 || hdr->sh_link == SHN_UNDEF
2854 || hdr->sh_link != elf_onesymtab (abfd)
2855 || hdr->sh_info == SHN_UNDEF
2856 || hdr->sh_info >= num_sec
2857 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
2858 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
2859 {
2860 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2861 goto success;
2862 }
2863
2864 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
2865 goto fail;
2866
2867 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
2868 if (target_sect == NULL)
2869 goto fail;
2870
2871 esdt = elf_section_data (target_sect);
2872 if (hdr->sh_type == SHT_RELA)
2873 p_hdr = &esdt->rela.hdr;
2874 else
2875 p_hdr = &esdt->rel.hdr;
2876
2877 /* PR 17512: file: 0b4f81b7.
2878 Also see PR 24456, for a file which deliberately has two reloc
2879 sections. */
2880 if (*p_hdr != NULL)
2881 {
2882 if (!bed->init_secondary_reloc_section (abfd, hdr, name, shindex))
2883 {
2884 _bfd_error_handler
2885 /* xgettext:c-format */
2886 (_("%pB: warning: secondary relocation section '%s' "
2887 "for section %pA found - ignoring"),
2888 abfd, name, target_sect);
2889 }
2890 else
2891 esdt->has_secondary_relocs = true;
2892 goto success;
2893 }
2894
2895 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
2896 if (hdr2 == NULL)
2897 goto fail;
2898 *hdr2 = *hdr;
2899 *p_hdr = hdr2;
2900 elf_elfsections (abfd)[shindex] = hdr2;
2901 target_sect->reloc_count += (NUM_SHDR_ENTRIES (hdr)
2902 * bed->s->int_rels_per_ext_rel);
2903 target_sect->flags |= SEC_RELOC;
2904 target_sect->relocation = NULL;
2905 target_sect->rel_filepos = hdr->sh_offset;
2906 /* In the section to which the relocations apply, mark whether
2907 its relocations are of the REL or RELA variety. */
2908 if (hdr->sh_size != 0)
2909 {
2910 if (hdr->sh_type == SHT_RELA)
2911 target_sect->use_rela_p = 1;
2912 }
2913 abfd->flags |= HAS_RELOC;
2914 goto success;
2915 }
2916
2917 case SHT_GNU_verdef:
2918 if (hdr->sh_info != 0)
2919 elf_dynverdef (abfd) = shindex;
2920 elf_tdata (abfd)->dynverdef_hdr = *hdr;
2921 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2922 goto success;
2923
2924 case SHT_GNU_versym:
2925 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
2926 goto fail;
2927
2928 elf_dynversym (abfd) = shindex;
2929 elf_tdata (abfd)->dynversym_hdr = *hdr;
2930 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2931 goto success;
2932
2933 case SHT_GNU_verneed:
2934 if (hdr->sh_info != 0)
2935 elf_dynverref (abfd) = shindex;
2936 elf_tdata (abfd)->dynverref_hdr = *hdr;
2937 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2938 goto success;
2939
2940 case SHT_SHLIB:
2941 goto success;
2942
2943 case SHT_GROUP:
2944 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2945 goto fail;
2946
2947 goto success;
2948
2949 default:
2950 /* Possibly an attributes section. */
2951 if (get_elf_backend_data (abfd)->target_os != is_solaris
2952 /* PR 33153: Solaris defines SHT_SUNW_cap which collides with SHT_GNU_ATTRIBUTES. */
2953 && (hdr->sh_type == SHT_GNU_ATTRIBUTES
2954 || hdr->sh_type == bed->obj_attrs_section_type))
2955 {
2956 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
2957 goto fail;
2958 _bfd_elf_parse_attributes (abfd, hdr);
2959 goto success;
2960 }
2961
2962 /* Check for any processor-specific section types. */
2963 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
2964 goto success;
2965
2966 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
2967 {
2968 if ((hdr->sh_flags & SHF_ALLOC) != 0)
2969 /* FIXME: How to properly handle allocated section reserved
2970 for applications? */
2971 _bfd_error_handler
2972 /* xgettext:c-format */
2973 (_("%pB: unknown type [%#x] section `%s'"),
2974 abfd, hdr->sh_type, name);
2975 else
2976 {
2977 /* Allow sections reserved for applications. */
2978 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
2979 goto success;
2980 }
2981 }
2982 else if (hdr->sh_type >= SHT_LOPROC
2983 && hdr->sh_type <= SHT_HIPROC)
2984 /* FIXME: We should handle this section. */
2985 _bfd_error_handler
2986 /* xgettext:c-format */
2987 (_("%pB: unknown type [%#x] section `%s'"),
2988 abfd, hdr->sh_type, name);
2989 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
2990 {
2991 /* Unrecognised OS-specific sections. */
2992 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
2993 /* SHF_OS_NONCONFORMING indicates that special knowledge is
2994 required to correctly process the section and the file should
2995 be rejected with an error message. */
2996 _bfd_error_handler
2997 /* xgettext:c-format */
2998 (_("%pB: unknown type [%#x] section `%s'"),
2999 abfd, hdr->sh_type, name);
3000 else
3001 {
3002 /* Otherwise it should be processed. */
3003 ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
3004 goto success;
3005 }
3006 }
3007 else
3008 /* FIXME: We should handle this section. */
3009 _bfd_error_handler
3010 /* xgettext:c-format */
3011 (_("%pB: unknown type [%#x] section `%s'"),
3012 abfd, hdr->sh_type, name);
3013
3014 goto fail;
3015 }
3016
3017 fail:
3018 ret = false;
3019 success:
3020 elf_tdata (abfd)->being_created[shindex] = false;
3021 return ret;
3022 }
3023
3024 /* Return the local symbol specified by ABFD, R_SYMNDX. */
3025
3026 Elf_Internal_Sym *
3027 bfd_sym_from_r_symndx (struct sym_cache *cache,
3028 bfd *abfd,
3029 unsigned long r_symndx)
3030 {
3031 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
3032
3033 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
3034 {
3035 Elf_Internal_Shdr *symtab_hdr;
3036 unsigned char esym[sizeof (Elf64_External_Sym)];
3037 Elf_External_Sym_Shndx eshndx;
3038
3039 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3040 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
3041 &cache->sym[ent], esym, &eshndx) == NULL)
3042 return NULL;
3043
3044 if (cache->abfd != abfd)
3045 {
3046 memset (cache->indx, -1, sizeof (cache->indx));
3047 cache->abfd = abfd;
3048 }
3049 cache->indx[ent] = r_symndx;
3050 }
3051
3052 return &cache->sym[ent];
3053 }
3054
3055 /* Given an ELF section number, retrieve the corresponding BFD
3056 section. */
3057
3058 asection *
3059 bfd_section_from_elf_index (bfd *abfd, unsigned int sec_index)
3060 {
3061 if (sec_index >= elf_numsections (abfd))
3062 return NULL;
3063 return elf_elfsections (abfd)[sec_index]->bfd_section;
3064 }
3065
3066 static const struct bfd_elf_special_section special_sections_b[] =
3067 {
3068 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3069 { NULL, 0, 0, 0, 0 }
3070 };
3071
3072 static const struct bfd_elf_special_section special_sections_c[] =
3073 {
3074 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
3075 { STRING_COMMA_LEN (".ctf"), 0, SHT_PROGBITS, 0 },
3076 { NULL, 0, 0, 0, 0 }
3077 };
3078
3079 static const struct bfd_elf_special_section special_sections_d[] =
3080 {
3081 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3082 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3083 /* There are more DWARF sections than these, but they needn't be added here
3084 unless you have to cope with broken compilers that don't emit section
3085 attributes or you want to help the user writing assembler. */
3086 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
3087 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
3088 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
3089 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
3090 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
3091 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
3092 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
3093 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
3094 { NULL, 0, 0, 0, 0 }
3095 };
3096
3097 static const struct bfd_elf_special_section special_sections_f[] =
3098 {
3099 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3100 { STRING_COMMA_LEN (".fini_array"), -2, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
3101 { NULL, 0 , 0, 0, 0 }
3102 };
3103
3104 static const struct bfd_elf_special_section special_sections_g[] =
3105 {
3106 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3107 { STRING_COMMA_LEN (".gnu.linkonce.n"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3108 { STRING_COMMA_LEN (".gnu.linkonce.p"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3109 { STRING_COMMA_LEN (".gnu.lto_"), -1, SHT_PROGBITS, SHF_EXCLUDE },
3110 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3111 { STRING_COMMA_LEN (".gnu_object_only"), 0, SHT_GNU_OBJECT_ONLY, SHF_EXCLUDE },
3112 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
3113 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
3114 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
3115 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
3116 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
3117 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
3118 { NULL, 0, 0, 0, 0 }
3119 };
3120
3121 static const struct bfd_elf_special_section special_sections_h[] =
3122 {
3123 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
3124 { NULL, 0, 0, 0, 0 }
3125 };
3126
3127 static const struct bfd_elf_special_section special_sections_i[] =
3128 {
3129 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3130 { STRING_COMMA_LEN (".init_array"), -2, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
3131 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
3132 { NULL, 0, 0, 0, 0 }
3133 };
3134
3135 static const struct bfd_elf_special_section special_sections_l[] =
3136 {
3137 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
3138 { NULL, 0, 0, 0, 0 }
3139 };
3140
3141 static const struct bfd_elf_special_section special_sections_n[] =
3142 {
3143 { STRING_COMMA_LEN (".noinit"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3144 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
3145 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
3146 { NULL, 0, 0, 0, 0 }
3147 };
3148
3149 static const struct bfd_elf_special_section special_sections_p[] =
3150 {
3151 { STRING_COMMA_LEN (".persistent.bss"), 0, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
3152 { STRING_COMMA_LEN (".persistent"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
3153 { STRING_COMMA_LEN (".preinit_array"), -2, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
3154 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3155 { NULL, 0, 0, 0, 0 }
3156 };
3157
3158 static const struct bfd_elf_special_section special_sections_r[] =
3159 {
3160 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
3161 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
3162 { STRING_COMMA_LEN (".relr.dyn"), 0, SHT_RELR, SHF_ALLOC },
3163 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
3164 /* .relro_padding is generated by lld. It should not be confused with a
3165 reloc containing section, because otherwise elf_fake_sections() will
3166 set the entsize to 8, which may not be an actual multiple of the
3167 section's size.
3168 Note - this entry must appear before the ".rel" entry below. */
3169 { STRING_COMMA_LEN (".relro_padding"), 0, SHT_NOBITS, SHF_ALLOC | SHF_WRITE },
3170 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
3171 { NULL, 0, 0, 0, 0 }
3172 };
3173
3174 static const struct bfd_elf_special_section special_sections_s[] =
3175 {
3176 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
3177 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
3178 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
3179 /* See struct bfd_elf_special_section declaration for the semantics of
3180 this special case where .prefix_length != strlen (.prefix). */
3181 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
3182 { NULL, 0, 0, 0, 0 }
3183 };
3184
3185 static const struct bfd_elf_special_section special_sections_t[] =
3186 {
3187 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
3188 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
3189 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
3190 { NULL, 0, 0, 0, 0 }
3191 };
3192
3193 static const struct bfd_elf_special_section special_sections_z[] =
3194 {
3195 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
3196 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
3197 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
3198 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
3199 { NULL, 0, 0, 0, 0 }
3200 };
3201
3202 static const struct bfd_elf_special_section * const special_sections[] =
3203 {
3204 special_sections_b, /* 'b' */
3205 special_sections_c, /* 'c' */
3206 special_sections_d, /* 'd' */
3207 NULL, /* 'e' */
3208 special_sections_f, /* 'f' */
3209 special_sections_g, /* 'g' */
3210 special_sections_h, /* 'h' */
3211 special_sections_i, /* 'i' */
3212 NULL, /* 'j' */
3213 NULL, /* 'k' */
3214 special_sections_l, /* 'l' */
3215 NULL, /* 'm' */
3216 special_sections_n, /* 'n' */
3217 NULL, /* 'o' */
3218 special_sections_p, /* 'p' */
3219 NULL, /* 'q' */
3220 special_sections_r, /* 'r' */
3221 special_sections_s, /* 's' */
3222 special_sections_t, /* 't' */
3223 NULL, /* 'u' */
3224 NULL, /* 'v' */
3225 NULL, /* 'w' */
3226 NULL, /* 'x' */
3227 NULL, /* 'y' */
3228 special_sections_z /* 'z' */
3229 };
3230
3231 const struct bfd_elf_special_section *
3232 _bfd_elf_get_special_section (const char *name,
3233 const struct bfd_elf_special_section *spec,
3234 unsigned int rela)
3235 {
3236 int i;
3237 int len;
3238
3239 len = strlen (name);
3240
3241 for (i = 0; spec[i].prefix != NULL; i++)
3242 {
3243 int suffix_len;
3244 int prefix_len = spec[i].prefix_length;
3245
3246 if (len < prefix_len)
3247 continue;
3248 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
3249 continue;
3250
3251 suffix_len = spec[i].suffix_length;
3252 if (suffix_len <= 0)
3253 {
3254 if (name[prefix_len] != 0)
3255 {
3256 if (suffix_len == 0)
3257 continue;
3258 if (name[prefix_len] != '.'
3259 && (suffix_len == -2
3260 || (rela && spec[i].type == SHT_REL)))
3261 continue;
3262 }
3263 }
3264 else
3265 {
3266 if (len < prefix_len + suffix_len)
3267 continue;
3268 if (memcmp (name + len - suffix_len,
3269 spec[i].prefix + prefix_len,
3270 suffix_len) != 0)
3271 continue;
3272 }
3273 return &spec[i];
3274 }
3275
3276 return NULL;
3277 }
3278
3279 const struct bfd_elf_special_section *
3280 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
3281 {
3282 int i;
3283 const struct bfd_elf_special_section *spec;
3284 elf_backend_data *bed;
3285
3286 /* See if this is one of the special sections. */
3287 if (sec->name == NULL)
3288 return NULL;
3289
3290 bed = get_elf_backend_data (abfd);
3291 spec = bed->special_sections;
3292 if (spec)
3293 {
3294 spec = _bfd_elf_get_special_section (sec->name,
3295 bed->special_sections,
3296 sec->use_rela_p);
3297 if (spec != NULL)
3298 return spec;
3299 }
3300
3301 if (sec->name[0] != '.')
3302 return NULL;
3303
3304 i = sec->name[1] - 'b';
3305 if (i < 0 || i > 'z' - 'b')
3306 return NULL;
3307
3308 spec = special_sections[i];
3309
3310 if (spec == NULL)
3311 return NULL;
3312
3313 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
3314 }
3315
3316 bool
3317 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
3318 {
3319 struct bfd_elf_section_data *sdata;
3320 elf_backend_data *bed;
3321 const struct bfd_elf_special_section *ssect;
3322
3323 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
3324 if (sdata == NULL)
3325 {
3326 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd,
3327 sizeof (*sdata));
3328 if (sdata == NULL)
3329 return false;
3330 sec->used_by_bfd = sdata;
3331 }
3332
3333 /* Indicate whether or not this section should use RELA relocations. */
3334 bed = get_elf_backend_data (abfd);
3335 sec->use_rela_p = bed->default_use_rela_p;
3336
3337 /* Set up ELF section type and flags for newly created sections, if
3338 there is an ABI mandated section. */
3339 ssect = (*bed->get_sec_type_attr) (abfd, sec);
3340 if (ssect != NULL)
3341 {
3342 elf_section_type (sec) = ssect->type;
3343 elf_section_flags (sec) = ssect->attr;
3344 }
3345
3346 return _bfd_generic_new_section_hook (abfd, sec);
3347 }
3348
3349 /* Create a new bfd section from an ELF program header.
3350
3351 Since program segments have no names, we generate a synthetic name
3352 of the form segment<NUM>, where NUM is generally the index in the
3353 program header table. For segments that are split (see below) we
3354 generate the names segment<NUM>a and segment<NUM>b.
3355
3356 Note that some program segments may have a file size that is different than
3357 (less than) the memory size. All this means is that at execution the
3358 system must allocate the amount of memory specified by the memory size,
3359 but only initialize it with the first "file size" bytes read from the
3360 file. This would occur for example, with program segments consisting
3361 of combined data+bss.
3362
3363 To handle the above situation, this routine generates TWO bfd sections
3364 for the single program segment. The first has the length specified by
3365 the file size of the segment, and the second has the length specified
3366 by the difference between the two sizes. In effect, the segment is split
3367 into its initialized and uninitialized parts. */
3368
3369 bool
3370 _bfd_elf_make_section_from_phdr (bfd *abfd,
3371 Elf_Internal_Phdr *hdr,
3372 int hdr_index,
3373 const char *type_name)
3374 {
3375 asection *newsect;
3376 char *name;
3377 char namebuf[64];
3378 size_t len;
3379 int split;
3380 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
3381
3382 split = ((hdr->p_memsz > 0)
3383 && (hdr->p_filesz > 0)
3384 && (hdr->p_memsz > hdr->p_filesz));
3385
3386 if (hdr->p_filesz > 0)
3387 {
3388 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "a" : "");
3389 len = strlen (namebuf) + 1;
3390 name = (char *) bfd_alloc (abfd, len);
3391 if (!name)
3392 return false;
3393 memcpy (name, namebuf, len);
3394 newsect = bfd_make_section (abfd, name);
3395 if (newsect == NULL)
3396 return false;
3397 newsect->vma = hdr->p_vaddr / opb;
3398 newsect->lma = hdr->p_paddr / opb;
3399 newsect->size = hdr->p_filesz;
3400 newsect->filepos = hdr->p_offset;
3401 newsect->flags |= SEC_HAS_CONTENTS;
3402 newsect->alignment_power = bfd_log2 (hdr->p_align);
3403 if (hdr->p_type == PT_LOAD)
3404 {
3405 newsect->flags |= SEC_ALLOC;
3406 newsect->flags |= SEC_LOAD;
3407 if (hdr->p_flags & PF_X)
3408 {
3409 /* FIXME: all we known is that it has execute PERMISSION,
3410 may be data. */
3411 newsect->flags |= SEC_CODE;
3412 }
3413 }
3414 if (!(hdr->p_flags & PF_W))
3415 {
3416 newsect->flags |= SEC_READONLY;
3417 }
3418 }
3419
3420 if (hdr->p_memsz > hdr->p_filesz)
3421 {
3422 bfd_vma align;
3423
3424 sprintf (namebuf, "%s%d%s", type_name, hdr_index, split ? "b" : "");
3425 len = strlen (namebuf) + 1;
3426 name = (char *) bfd_alloc (abfd, len);
3427 if (!name)
3428 return false;
3429 memcpy (name, namebuf, len);
3430 newsect = bfd_make_section (abfd, name);
3431 if (newsect == NULL)
3432 return false;
3433 newsect->vma = (hdr->p_vaddr + hdr->p_filesz) / opb;
3434 newsect->lma = (hdr->p_paddr + hdr->p_filesz) / opb;
3435 newsect->size = hdr->p_memsz - hdr->p_filesz;
3436 newsect->filepos = hdr->p_offset + hdr->p_filesz;
3437 align = newsect->vma & -newsect->vma;
3438 if (align == 0 || align > hdr->p_align)
3439 align = hdr->p_align;
3440 newsect->alignment_power = bfd_log2 (align);
3441 if (hdr->p_type == PT_LOAD)
3442 {
3443 newsect->flags |= SEC_ALLOC;
3444 if (hdr->p_flags & PF_X)
3445 newsect->flags |= SEC_CODE;
3446 }
3447 if (!(hdr->p_flags & PF_W))
3448 newsect->flags |= SEC_READONLY;
3449 }
3450
3451 return true;
3452 }
3453
3454 static bool
3455 _bfd_elf_core_find_build_id (bfd *templ, bfd_vma offset)
3456 {
3457 /* The return value is ignored. Build-ids are considered optional. */
3458 if (templ->xvec->flavour == bfd_target_elf_flavour)
3459 return (*get_elf_backend_data (templ)->elf_backend_core_find_build_id)
3460 (templ, offset);
3461 return false;
3462 }
3463
3464 bool
3465 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
3466 {
3467 elf_backend_data *bed;
3468
3469 switch (hdr->p_type)
3470 {
3471 case PT_NULL:
3472 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "null");
3473
3474 case PT_LOAD:
3475 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "load"))
3476 return false;
3477 if (bfd_get_format (abfd) == bfd_core && abfd->build_id == NULL)
3478 _bfd_elf_core_find_build_id (abfd, hdr->p_offset);
3479 return true;
3480
3481 case PT_DYNAMIC:
3482 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "dynamic");
3483
3484 case PT_INTERP:
3485 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "interp");
3486
3487 case PT_NOTE:
3488 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "note"))
3489 return false;
3490 if (! _bfd_elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz,
3491 hdr->p_align))
3492 return false;
3493 return true;
3494
3495 case PT_SHLIB:
3496 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "shlib");
3497
3498 case PT_PHDR:
3499 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "phdr");
3500
3501 case PT_GNU_EH_FRAME:
3502 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3503 "eh_frame_hdr");
3504
3505 case PT_GNU_STACK:
3506 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "stack");
3507
3508 case PT_GNU_RELRO:
3509 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
3510
3511 case PT_GNU_SFRAME:
3512 return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index,
3513 "sframe");
3514
3515 default:
3516 /* Check for any processor-specific program segment types. */
3517 bed = get_elf_backend_data (abfd);
3518 return bed->elf_backend_section_from_phdr (abfd, hdr, hdr_index, "proc");
3519 }
3520 }
3521
3522 /* Return the REL_HDR for SEC, assuming there is only a single one, either
3523 REL or RELA. */
3524
3525 Elf_Internal_Shdr *
3526 _bfd_elf_single_rel_hdr (asection *sec)
3527 {
3528 if (elf_section_data (sec)->rel.hdr)
3529 {
3530 BFD_ASSERT (elf_section_data (sec)->rela.hdr == NULL);
3531 return elf_section_data (sec)->rel.hdr;
3532 }
3533 else
3534 return elf_section_data (sec)->rela.hdr;
3535 }
3536
3537 static bool
3538 _bfd_elf_set_reloc_sh_name (bfd *abfd,
3539 Elf_Internal_Shdr *rel_hdr,
3540 const char *sec_name,
3541 bool use_rela_p)
3542 {
3543 char *name = (char *) bfd_alloc (abfd,
3544 sizeof ".rela" + strlen (sec_name));
3545 if (name == NULL)
3546 return false;
3547
3548 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", sec_name);
3549 rel_hdr->sh_name =
3550 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
3551 false);
3552 if (rel_hdr->sh_name == (unsigned int) -1)
3553 return false;
3554
3555 return true;
3556 }
3557
3558 /* Allocate and initialize a section-header for a new reloc section,
3559 containing relocations against ASECT. It is stored in RELDATA. If
3560 USE_RELA_P is TRUE, we use RELA relocations; otherwise, we use REL
3561 relocations. */
3562
3563 static bool
3564 _bfd_elf_init_reloc_shdr (bfd *abfd,
3565 struct bfd_elf_section_reloc_data *reldata,
3566 const char *sec_name,
3567 bool use_rela_p,
3568 bool delay_sh_name_p)
3569 {
3570 Elf_Internal_Shdr *rel_hdr;
3571 elf_backend_data *bed = get_elf_backend_data (abfd);
3572
3573 BFD_ASSERT (reldata->hdr == NULL);
3574 rel_hdr = bfd_zalloc (abfd, sizeof (*rel_hdr));
3575 if (rel_hdr == NULL)
3576 return false;
3577 reldata->hdr = rel_hdr;
3578
3579 if (delay_sh_name_p)
3580 rel_hdr->sh_name = (unsigned int) -1;
3581 else if (!_bfd_elf_set_reloc_sh_name (abfd, rel_hdr, sec_name,
3582 use_rela_p))
3583 return false;
3584 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
3585 rel_hdr->sh_entsize = (use_rela_p
3586 ? bed->s->sizeof_rela
3587 : bed->s->sizeof_rel);
3588 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
3589 rel_hdr->sh_flags = 0;
3590 rel_hdr->sh_addr = 0;
3591 rel_hdr->sh_size = 0;
3592 rel_hdr->sh_offset = 0;
3593
3594 return true;
3595 }
3596
3597 /* Return the default section type based on the passed in section flags. */
3598
3599 int
3600 bfd_elf_get_default_section_type (flagword flags)
3601 {
3602 if ((flags & (SEC_ALLOC | SEC_IS_COMMON)) != 0
3603 && (flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
3604 return SHT_NOBITS;
3605 return SHT_PROGBITS;
3606 }
3607
3608 struct fake_section_arg
3609 {
3610 struct bfd_link_info *link_info;
3611 bool failed;
3612 };
3613
3614 /* Set up an ELF internal section header for a section. */
3615
3616 static void
3617 elf_fake_sections (bfd *abfd, asection *asect, void *fsarg)
3618 {
3619 struct fake_section_arg *arg = (struct fake_section_arg *)fsarg;
3620 elf_backend_data *bed = get_elf_backend_data (abfd);
3621 struct bfd_elf_section_data *esd = elf_section_data (asect);
3622 Elf_Internal_Shdr *this_hdr;
3623 unsigned int sh_type;
3624 const char *name = asect->name;
3625 bool delay_sh_name_p = false;
3626 bfd_vma mask;
3627
3628 if (arg->failed)
3629 {
3630 /* We already failed; just get out of the bfd_map_over_sections
3631 loop. */
3632 return;
3633 }
3634
3635 this_hdr = &esd->this_hdr;
3636
3637 /* ld: compress DWARF debug sections with names: .debug_*. */
3638 if (arg->link_info
3639 && (abfd->flags & BFD_COMPRESS) != 0
3640 && (asect->flags & SEC_DEBUGGING) != 0
3641 && (asect->flags & SEC_ALLOC) == 0
3642 && (asect->flags & SEC_HAS_CONTENTS) != 0
3643 && name[1] == 'd'
3644 && name[6] == '_')
3645 {
3646 /* If this section will be compressed, delay adding section
3647 name to section name section after it is compressed in
3648 _bfd_elf_assign_file_positions_for_non_load. */
3649 delay_sh_name_p = true;
3650 }
3651
3652 if (delay_sh_name_p)
3653 this_hdr->sh_name = (unsigned int) -1;
3654 else
3655 {
3656 this_hdr->sh_name
3657 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
3658 name, false);
3659 if (this_hdr->sh_name == (unsigned int) -1)
3660 {
3661 arg->failed = true;
3662 return;
3663 }
3664 }
3665
3666 /* Don't clear sh_flags. Assembler may set additional bits. */
3667
3668 if ((asect->flags & SEC_ALLOC) != 0
3669 || asect->user_set_vma)
3670 this_hdr->sh_addr = asect->vma * bfd_octets_per_byte (abfd, asect);
3671 else
3672 this_hdr->sh_addr = 0;
3673
3674 this_hdr->sh_offset = 0;
3675 this_hdr->sh_size = asect->size;
3676 this_hdr->sh_link = 0;
3677 /* PR 17512: file: 0eb809fe, 8b0535ee. */
3678 if (asect->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
3679 {
3680 _bfd_error_handler
3681 /* xgettext:c-format */
3682 (_("%pB: error: alignment power %d of section `%pA' is too big"),
3683 abfd, asect->alignment_power, asect);
3684 arg->failed = true;
3685 return;
3686 }
3687 /* Set sh_addralign to the highest power of two given by alignment
3688 consistent with the section VMA. Linker scripts can force VMA. */
3689 mask = ((bfd_vma) 1 << asect->alignment_power) | this_hdr->sh_addr;
3690 this_hdr->sh_addralign = mask & -mask;
3691 /* The sh_entsize and sh_info fields may have been set already by
3692 copy_private_section_data. */
3693
3694 this_hdr->bfd_section = asect;
3695 this_hdr->contents = NULL;
3696
3697 /* If the section type is unspecified, we set it based on
3698 asect->flags. */
3699 if (asect->type != 0)
3700 sh_type = asect->type;
3701 else if ((asect->flags & SEC_GROUP) != 0)
3702 sh_type = SHT_GROUP;
3703 else
3704 sh_type = bfd_elf_get_default_section_type (asect->flags);
3705
3706 if (this_hdr->sh_type == SHT_NULL)
3707 this_hdr->sh_type = sh_type;
3708 else if (this_hdr->sh_type == SHT_NOBITS
3709 && sh_type == SHT_PROGBITS
3710 && (asect->flags & SEC_ALLOC) != 0)
3711 {
3712 /* Warn if we are changing a NOBITS section to PROGBITS, but
3713 allow the link to proceed. This can happen when users link
3714 non-bss input sections to bss output sections, or emit data
3715 to a bss output section via a linker script. */
3716 _bfd_error_handler
3717 (_("warning: section `%pA' type changed to PROGBITS"), asect);
3718 this_hdr->sh_type = sh_type;
3719 }
3720
3721 switch (this_hdr->sh_type)
3722 {
3723 default:
3724 break;
3725
3726 case SHT_STRTAB:
3727 case SHT_NOTE:
3728 case SHT_NOBITS:
3729 case SHT_PROGBITS:
3730 break;
3731
3732 case SHT_INIT_ARRAY:
3733 case SHT_FINI_ARRAY:
3734 case SHT_PREINIT_ARRAY:
3735 this_hdr->sh_entsize = bed->s->arch_size / 8;
3736 break;
3737
3738 case SHT_HASH:
3739 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
3740 break;
3741
3742 case SHT_DYNSYM:
3743 this_hdr->sh_entsize = bed->s->sizeof_sym;
3744 break;
3745
3746 case SHT_DYNAMIC:
3747 this_hdr->sh_entsize = bed->s->sizeof_dyn;
3748 break;
3749
3750 case SHT_RELA:
3751 if (get_elf_backend_data (abfd)->may_use_rela_p)
3752 this_hdr->sh_entsize = bed->s->sizeof_rela;
3753 break;
3754
3755 case SHT_REL:
3756 if (get_elf_backend_data (abfd)->may_use_rel_p)
3757 this_hdr->sh_entsize = bed->s->sizeof_rel;
3758 break;
3759
3760 case SHT_GNU_versym:
3761 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
3762 break;
3763
3764 case SHT_GNU_verdef:
3765 this_hdr->sh_entsize = 0;
3766 /* objcopy or strip will copy over sh_info, but may not set
3767 cverdefs. The linker will set cverdefs, but sh_info will be
3768 zero. */
3769 if (this_hdr->sh_info == 0)
3770 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
3771 else
3772 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
3773 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
3774 break;
3775
3776 case SHT_GNU_verneed:
3777 this_hdr->sh_entsize = 0;
3778 /* objcopy or strip will copy over sh_info, but may not set
3779 cverrefs. The linker will set cverrefs, but sh_info will be
3780 zero. */
3781 if (this_hdr->sh_info == 0)
3782 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
3783 else
3784 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
3785 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
3786 break;
3787
3788 case SHT_GROUP:
3789 this_hdr->sh_entsize = GRP_ENTRY_SIZE;
3790 break;
3791
3792 case SHT_GNU_HASH:
3793 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
3794 break;
3795 }
3796
3797 if ((asect->flags & SEC_ALLOC) != 0)
3798 this_hdr->sh_flags |= SHF_ALLOC;
3799 if ((asect->flags & SEC_READONLY) == 0)
3800 this_hdr->sh_flags |= SHF_WRITE;
3801 if ((asect->flags & SEC_CODE) != 0)
3802 this_hdr->sh_flags |= SHF_EXECINSTR;
3803 if ((asect->flags & SEC_MERGE) != 0)
3804 {
3805 this_hdr->sh_flags |= SHF_MERGE;
3806 this_hdr->sh_entsize = asect->entsize;
3807 }
3808 if ((asect->flags & SEC_STRINGS) != 0)
3809 {
3810 this_hdr->sh_flags |= SHF_STRINGS;
3811 this_hdr->sh_entsize = asect->entsize;
3812 }
3813 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
3814 this_hdr->sh_flags |= SHF_GROUP;
3815 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
3816 {
3817 this_hdr->sh_flags |= SHF_TLS;
3818 if (asect->size == 0
3819 && (asect->flags & SEC_HAS_CONTENTS) == 0)
3820 {
3821 struct bfd_link_order *o = asect->map_tail.link_order;
3822
3823 this_hdr->sh_size = 0;
3824 if (o != NULL)
3825 {
3826 this_hdr->sh_size = o->offset + o->size;
3827 if (this_hdr->sh_size != 0)
3828 this_hdr->sh_type = SHT_NOBITS;
3829 }
3830 }
3831 }
3832 if ((asect->flags & (SEC_GROUP | SEC_EXCLUDE)) == SEC_EXCLUDE)
3833 this_hdr->sh_flags |= SHF_EXCLUDE;
3834
3835 if (this_hdr->sh_entsize == 0)
3836 this_hdr->sh_entsize = asect->entsize;
3837
3838 /* If the section has relocs, set up a section header for the
3839 SHT_REL[A] section. If two relocation sections are required for
3840 this section, it is up to the processor-specific back-end to
3841 create the other. */
3842 if ((asect->flags & SEC_RELOC) != 0)
3843 {
3844 /* When doing a relocatable link, create both REL and RELA sections if
3845 needed. */
3846 if (arg->link_info
3847 /* Do the normal setup if we wouldn't create any sections here. */
3848 && esd->rel.count + esd->rela.count > 0
3849 && (bfd_link_relocatable (arg->link_info)
3850 || arg->link_info->emitrelocations))
3851 {
3852 if (esd->rel.count && esd->rel.hdr == NULL
3853 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rel, name,
3854 false, delay_sh_name_p))
3855 {
3856 arg->failed = true;
3857 return;
3858 }
3859 if (esd->rela.count && esd->rela.hdr == NULL
3860 && !_bfd_elf_init_reloc_shdr (abfd, &esd->rela, name,
3861 true, delay_sh_name_p))
3862 {
3863 arg->failed = true;
3864 return;
3865 }
3866 }
3867 else if (!_bfd_elf_init_reloc_shdr (abfd,
3868 (asect->use_rela_p
3869 ? &esd->rela : &esd->rel),
3870 name,
3871 asect->use_rela_p,
3872 delay_sh_name_p))
3873 {
3874 arg->failed = true;
3875 return;
3876 }
3877 }
3878
3879 /* Check for processor-specific section types. */
3880 sh_type = this_hdr->sh_type;
3881 if (bed->elf_backend_fake_sections
3882 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
3883 {
3884 arg->failed = true;
3885 return;
3886 }
3887
3888 if (sh_type == SHT_NOBITS && asect->size != 0)
3889 {
3890 /* Don't change the header type from NOBITS if we are being
3891 called for objcopy --only-keep-debug. */
3892 this_hdr->sh_type = sh_type;
3893 }
3894 }
3895
3896 /* Fill in the contents of a SHT_GROUP section. Called from
3897 _bfd_elf_compute_section_file_positions for gas, objcopy, and
3898 when ELF targets use the generic linker, ld. Called for ld -r
3899 from bfd_elf_final_link. */
3900
3901 void
3902 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
3903 {
3904 bool *failedptr = (bool *) failedptrarg;
3905 asection *elt, *first;
3906 unsigned char *loc;
3907 bool gas;
3908
3909 /* Ignore linker created group section. See elfNN_ia64_object_p in
3910 elfxx-ia64.c. */
3911 if ((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP
3912 || sec->size == 0
3913 || *failedptr)
3914 return;
3915
3916 if (elf_section_data (sec)->this_hdr.sh_info == 0)
3917 {
3918 unsigned long symindx = 0;
3919
3920 /* elf_group_id will have been set up by objcopy and the
3921 generic linker. */
3922 if (elf_group_id (sec) != NULL)
3923 symindx = elf_group_id (sec)->udata.i;
3924
3925 if (symindx == 0)
3926 {
3927 /* If called from the assembler, swap_out_syms will have set up
3928 elf_section_syms.
3929 PR 25699: A corrupt input file could contain bogus group info. */
3930 if (sec->index >= elf_num_section_syms (abfd)
3931 || elf_section_syms (abfd)[sec->index] == NULL)
3932 {
3933 *failedptr = true;
3934 return;
3935 }
3936 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
3937 }
3938 elf_section_data (sec)->this_hdr.sh_info = symindx;
3939 }
3940 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
3941 {
3942 /* The ELF backend linker sets sh_info to -2 when the group
3943 signature symbol is global, and thus the index can't be
3944 set until all local symbols are output. */
3945 asection *igroup;
3946 struct bfd_elf_section_data *sec_data;
3947 unsigned long symndx;
3948 unsigned long extsymoff;
3949 struct elf_link_hash_entry *h;
3950
3951 /* The point of this little dance to the first SHF_GROUP section
3952 then back to the SHT_GROUP section is that this gets us to
3953 the SHT_GROUP in the input object. */
3954 igroup = elf_sec_group (elf_next_in_group (sec));
3955 sec_data = elf_section_data (igroup);
3956 symndx = sec_data->this_hdr.sh_info;
3957 extsymoff = 0;
3958 if (!elf_bad_symtab (igroup->owner))
3959 {
3960 Elf_Internal_Shdr *symtab_hdr;
3961
3962 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
3963 extsymoff = symtab_hdr->sh_info;
3964 }
3965 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
3966 while (h->root.type == bfd_link_hash_indirect
3967 || h->root.type == bfd_link_hash_warning)
3968 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3969
3970 elf_section_data (sec)->this_hdr.sh_info = h->indx;
3971 }
3972
3973 /* The contents won't be allocated for "ld -r" or objcopy. */
3974 gas = true;
3975 if (sec->contents == NULL)
3976 {
3977 gas = false;
3978 sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size);
3979
3980 /* Arrange for the section to be written out. */
3981 elf_section_data (sec)->this_hdr.contents = sec->contents;
3982 if (sec->contents == NULL)
3983 {
3984 *failedptr = true;
3985 return;
3986 }
3987 sec->alloced = 1;
3988 }
3989
3990 loc = sec->contents + sec->size;
3991
3992 /* Get the pointer to the first section in the group that gas
3993 squirreled away here. objcopy arranges for this to be set to the
3994 start of the input section group. */
3995 first = elt = elf_next_in_group (sec);
3996
3997 /* First element is a flag word. Rest of section is elf section
3998 indices for all the sections of the group. Write them backwards
3999 just to keep the group in the same order as given in .section
4000 directives, not that it matters. */
4001 while (elt != NULL)
4002 {
4003 asection *s;
4004
4005 s = elt;
4006 if (!gas)
4007 s = s->output_section;
4008 if (s != NULL
4009 && !bfd_is_abs_section (s))
4010 {
4011 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
4012 struct bfd_elf_section_data *input_elf_sec = elf_section_data (elt);
4013
4014 if (elf_sec->rel.hdr != NULL
4015 && (gas
4016 || (input_elf_sec->rel.hdr != NULL
4017 && input_elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0))
4018 {
4019 elf_sec->rel.hdr->sh_flags |= SHF_GROUP;
4020 loc -= 4;
4021 if (loc == sec->contents)
4022 break;
4023 H_PUT_32 (abfd, elf_sec->rel.idx, loc);
4024 }
4025 if (elf_sec->rela.hdr != NULL
4026 && (gas
4027 || (input_elf_sec->rela.hdr != NULL
4028 && input_elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0))
4029 {
4030 elf_sec->rela.hdr->sh_flags |= SHF_GROUP;
4031 loc -= 4;
4032 if (loc == sec->contents)
4033 break;
4034 H_PUT_32 (abfd, elf_sec->rela.idx, loc);
4035 }
4036 loc -= 4;
4037 if (loc == sec->contents)
4038 break;
4039 H_PUT_32 (abfd, elf_sec->this_idx, loc);
4040 }
4041 elt = elf_next_in_group (elt);
4042 if (elt == first)
4043 break;
4044 }
4045
4046 /* We should always get here with loc == sec->contents + 4. Return
4047 an error for bogus SHT_GROUP sections. */
4048 loc -= 4;
4049 if (loc != sec->contents)
4050 {
4051 /* xgettext:c-format */
4052 _bfd_error_handler (_("%pB: corrupted group section: `%pA'"),
4053 abfd, sec);
4054 bfd_set_error (bfd_error_bad_value);
4055 *failedptr = true;
4056 return;
4057 }
4058
4059 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
4060 }
4061
4062 /* Given NAME, the name of a relocation section stripped of its
4063 .rel/.rela prefix, return the section in ABFD to which the
4064 relocations apply. */
4065
4066 asection *
4067 _bfd_elf_plt_get_reloc_section (bfd *abfd, const char *name)
4068 {
4069 /* If a target needs .got.plt section, relocations in rela.plt/rel.plt
4070 section likely apply to .got.plt or .got section. */
4071 if (get_elf_backend_data (abfd)->want_got_plt
4072 && streq (name, ".plt"))
4073 {
4074 asection *sec;
4075
4076 name = ".got.plt";
4077 sec = bfd_get_section_by_name (abfd, name);
4078 if (sec != NULL)
4079 return sec;
4080 name = ".got";
4081 }
4082
4083 return bfd_get_section_by_name (abfd, name);
4084 }
4085
4086 /* Return the section to which RELOC_SEC applies. */
4087
4088 static asection *
4089 elf_get_reloc_section (asection *reloc_sec)
4090 {
4091 const char *name;
4092 unsigned int type;
4093 bfd *abfd;
4094 elf_backend_data *bed;
4095
4096 type = elf_section_data (reloc_sec)->this_hdr.sh_type;
4097 if (type != SHT_REL && type != SHT_RELA)
4098 return NULL;
4099
4100 /* We look up the section the relocs apply to by name. */
4101 name = reloc_sec->name;
4102 if (!startswith (name, ".rel"))
4103 return NULL;
4104 name += 4;
4105 if (type == SHT_RELA && *name++ != 'a')
4106 return NULL;
4107
4108 abfd = reloc_sec->owner;
4109 bed = get_elf_backend_data (abfd);
4110 return bed->get_reloc_section (abfd, name);
4111 }
4112
4113 /* Assign all ELF section numbers. The dummy first section is handled here
4114 too. The link/info pointers for the standard section types are filled
4115 in here too, while we're at it. LINK_INFO will be 0 when arriving
4116 here for gas, objcopy, and when using the generic ELF linker. */
4117
4118 static bool
4119 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
4120 {
4121 struct elf_obj_tdata *t = elf_tdata (abfd);
4122 asection *sec;
4123 unsigned int section_number;
4124 Elf_Internal_Shdr **i_shdrp;
4125 struct bfd_elf_section_data *d;
4126 bool need_symtab;
4127 size_t amt;
4128
4129 section_number = 1;
4130
4131 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
4132
4133 /* SHT_GROUP sections are in relocatable files only. */
4134 if (link_info == NULL || !link_info->resolve_section_groups)
4135 {
4136 size_t reloc_count = 0;
4137
4138 /* Put SHT_GROUP sections first. */
4139 for (sec = abfd->sections; sec != NULL; sec = sec->next)
4140 {
4141 d = elf_section_data (sec);
4142
4143 if (d->this_hdr.sh_type == SHT_GROUP)
4144 {
4145 if (sec->flags & SEC_LINKER_CREATED)
4146 {
4147 /* Remove the linker created SHT_GROUP sections. */
4148 bfd_section_list_remove (abfd, sec);
4149 abfd->section_count--;
4150 }
4151 else
4152 d->this_idx = section_number++;
4153 }
4154
4155 /* Count relocations. */
4156 reloc_count += sec->reloc_count;
4157 }
4158
4159 /* Set/clear HAS_RELOC depending on whether there are relocations. */
4160 if (reloc_count == 0)
4161 abfd->flags &= ~HAS_RELOC;
4162 else
4163 abfd->flags |= HAS_RELOC;
4164 }
4165
4166 for (sec = abfd->sections; sec; sec = sec->next)
4167 {
4168 d = elf_section_data (sec);
4169
4170 if (d->this_hdr.sh_type != SHT_GROUP)
4171 d->this_idx = section_number++;
4172 if (d->this_hdr.sh_name != (unsigned int) -1)
4173 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
4174 if (d->rel.hdr)
4175 {
4176 d->rel.idx = section_number++;
4177 if (d->rel.hdr->sh_name != (unsigned int) -1)
4178 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel.hdr->sh_name);
4179 }
4180 else
4181 d->rel.idx = 0;
4182
4183 if (d->rela.hdr)
4184 {
4185 d->rela.idx = section_number++;
4186 if (d->rela.hdr->sh_name != (unsigned int) -1)
4187 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rela.hdr->sh_name);
4188 }
4189 else
4190 d->rela.idx = 0;
4191 }
4192
4193 need_symtab = (bfd_get_symcount (abfd) > 0
4194 || (link_info == NULL
4195 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4196 == HAS_RELOC)));
4197 if (need_symtab)
4198 {
4199 elf_onesymtab (abfd) = section_number++;
4200 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
4201 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
4202 {
4203 elf_section_list *entry;
4204
4205 BFD_ASSERT (elf_symtab_shndx_list (abfd) == NULL);
4206
4207 entry = bfd_zalloc (abfd, sizeof (*entry));
4208 entry->ndx = section_number++;
4209 elf_symtab_shndx_list (abfd) = entry;
4210 entry->hdr.sh_name
4211 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
4212 ".symtab_shndx", false);
4213 if (entry->hdr.sh_name == (unsigned int) -1)
4214 return false;
4215 }
4216 elf_strtab_sec (abfd) = section_number++;
4217 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
4218 }
4219
4220 elf_shstrtab_sec (abfd) = section_number++;
4221 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
4222 elf_elfheader (abfd)->e_shstrndx = elf_shstrtab_sec (abfd);
4223
4224 if (section_number >= SHN_LORESERVE)
4225 {
4226 /* xgettext:c-format */
4227 _bfd_error_handler (_("%pB: too many sections: %u"),
4228 abfd, section_number);
4229 return false;
4230 }
4231
4232 elf_numsections (abfd) = section_number;
4233 elf_elfheader (abfd)->e_shnum = section_number;
4234
4235 /* Set up the list of section header pointers, in agreement with the
4236 indices. */
4237 amt = section_number * sizeof (Elf_Internal_Shdr *);
4238 i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc (abfd, amt);
4239 if (i_shdrp == NULL)
4240 return false;
4241
4242 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd,
4243 sizeof (Elf_Internal_Shdr));
4244 if (i_shdrp[0] == NULL)
4245 {
4246 bfd_release (abfd, i_shdrp);
4247 return false;
4248 }
4249
4250 elf_elfsections (abfd) = i_shdrp;
4251
4252 i_shdrp[elf_shstrtab_sec (abfd)] = &t->shstrtab_hdr;
4253 if (need_symtab)
4254 {
4255 i_shdrp[elf_onesymtab (abfd)] = &t->symtab_hdr;
4256 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
4257 {
4258 elf_section_list * entry = elf_symtab_shndx_list (abfd);
4259 BFD_ASSERT (entry != NULL);
4260 i_shdrp[entry->ndx] = & entry->hdr;
4261 entry->hdr.sh_link = elf_onesymtab (abfd);
4262 }
4263 i_shdrp[elf_strtab_sec (abfd)] = &t->strtab_hdr;
4264 t->symtab_hdr.sh_link = elf_strtab_sec (abfd);
4265 }
4266
4267 for (sec = abfd->sections; sec; sec = sec->next)
4268 {
4269 asection *s;
4270
4271 d = elf_section_data (sec);
4272
4273 i_shdrp[d->this_idx] = &d->this_hdr;
4274 if (d->rel.idx != 0)
4275 i_shdrp[d->rel.idx] = d->rel.hdr;
4276 if (d->rela.idx != 0)
4277 i_shdrp[d->rela.idx] = d->rela.hdr;
4278
4279 /* Fill in the sh_link and sh_info fields while we're at it. */
4280
4281 /* sh_link of a reloc section is the section index of the symbol
4282 table. sh_info is the section index of the section to which
4283 the relocation entries apply. */
4284 if (d->rel.idx != 0)
4285 {
4286 d->rel.hdr->sh_link = elf_onesymtab (abfd);
4287 d->rel.hdr->sh_info = d->this_idx;
4288 d->rel.hdr->sh_flags |= SHF_INFO_LINK;
4289 }
4290 if (d->rela.idx != 0)
4291 {
4292 d->rela.hdr->sh_link = elf_onesymtab (abfd);
4293 d->rela.hdr->sh_info = d->this_idx;
4294 d->rela.hdr->sh_flags |= SHF_INFO_LINK;
4295 }
4296
4297 /* We need to set up sh_link for SHF_LINK_ORDER. */
4298 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
4299 {
4300 s = elf_linked_to_section (sec);
4301 /* We can now have a NULL linked section pointer.
4302 This happens when the sh_link field is 0, which is done
4303 when a linked to section is discarded but the linking
4304 section has been retained for some reason. */
4305 if (s)
4306 {
4307 /* Check discarded linkonce section. */
4308 if (discarded_section (s))
4309 {
4310 asection *kept;
4311 _bfd_error_handler
4312 /* xgettext:c-format */
4313 (_("%pB: sh_link of section `%pA' points to"
4314 " discarded section `%pA' of `%pB'"),
4315 abfd, d->this_hdr.bfd_section, s, s->owner);
4316 /* Point to the kept section if it has the same
4317 size as the discarded one. */
4318 kept = _bfd_elf_check_kept_section (s, link_info);
4319 if (kept == NULL)
4320 {
4321 bfd_set_error (bfd_error_bad_value);
4322 return false;
4323 }
4324 s = kept;
4325 }
4326 /* Handle objcopy. */
4327 else if (s->output_section == NULL)
4328 {
4329 _bfd_error_handler
4330 /* xgettext:c-format */
4331 (_("%pB: sh_link of section `%pA' points to"
4332 " removed section `%pA' of `%pB'"),
4333 abfd, d->this_hdr.bfd_section, s, s->owner);
4334 bfd_set_error (bfd_error_bad_value);
4335 return false;
4336 }
4337 s = s->output_section;
4338 d->this_hdr.sh_link
4339 = _bfd_elf_section_from_bfd_section (abfd, s);
4340 }
4341 }
4342
4343 switch (d->this_hdr.sh_type)
4344 {
4345 case SHT_REL:
4346 case SHT_RELA:
4347 /* sh_link is the section index of the symbol table.
4348 sh_info is the section index of the section to which the
4349 relocation entries apply. */
4350 if (d->this_hdr.sh_link == 0)
4351 {
4352 /* FIXME maybe: If this is a reloc section which we are
4353 treating as a normal section then we likely should
4354 not be assuming its sh_link is .dynsym or .symtab. */
4355 if ((sec->flags & SEC_ALLOC) != 0)
4356 {
4357 s = bfd_get_section_by_name (abfd, ".dynsym");
4358 if (s != NULL)
4359 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4360 }
4361 else
4362 d->this_hdr.sh_link = elf_onesymtab (abfd);
4363 }
4364
4365 s = elf_get_reloc_section (sec);
4366 if (s != NULL)
4367 {
4368 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
4369 d->this_hdr.sh_flags |= SHF_INFO_LINK;
4370 }
4371 break;
4372
4373 case SHT_STRTAB:
4374 /* We assume that a section named .stab*str is a stabs
4375 string section. We look for a section with the same name
4376 but without the trailing ``str'', and set its sh_link
4377 field to point to this section. */
4378 if (startswith (sec->name, ".stab")
4379 && streq (sec->name + strlen (sec->name) - 3, "str"))
4380 {
4381 size_t len;
4382 char *alc;
4383
4384 len = strlen (sec->name);
4385 alc = (char *) bfd_malloc (len - 2);
4386 if (alc == NULL)
4387 return false;
4388 memcpy (alc, sec->name, len - 3);
4389 alc[len - 3] = '\0';
4390 s = bfd_get_section_by_name (abfd, alc);
4391 free (alc);
4392 if (s != NULL)
4393 {
4394 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
4395
4396 /* This is a .stab section. */
4397 elf_section_data (s)->this_hdr.sh_entsize = 12;
4398 }
4399 }
4400 break;
4401
4402 case SHT_DYNAMIC:
4403 case SHT_DYNSYM:
4404 case SHT_GNU_verneed:
4405 case SHT_GNU_verdef:
4406 /* sh_link is the section header index of the string table
4407 used for the dynamic entries, or the symbol table, or the
4408 version strings. */
4409 s = bfd_get_section_by_name (abfd, ".dynstr");
4410 if (s != NULL)
4411 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4412 break;
4413
4414 case SHT_GNU_LIBLIST:
4415 /* sh_link is the section header index of the prelink library
4416 list used for the dynamic entries, or the symbol table, or
4417 the version strings. */
4418 s = bfd_get_section_by_name (abfd, ((sec->flags & SEC_ALLOC)
4419 ? ".dynstr" : ".gnu.libstr"));
4420 if (s != NULL)
4421 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4422 break;
4423
4424 case SHT_HASH:
4425 case SHT_GNU_HASH:
4426 case SHT_GNU_versym:
4427 /* sh_link is the section header index of the symbol table
4428 this hash table or version table is for. */
4429 s = bfd_get_section_by_name (abfd, ".dynsym");
4430 if (s != NULL)
4431 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
4432 break;
4433
4434 case SHT_GROUP:
4435 d->this_hdr.sh_link = elf_onesymtab (abfd);
4436 }
4437 }
4438
4439 /* Delay setting sh_name to _bfd_elf_write_object_contents so that
4440 _bfd_elf_assign_file_positions_for_non_load can convert DWARF
4441 debug section name from .debug_* to .zdebug_* if needed. */
4442
4443 return true;
4444 }
4445
4446 static bool
4447 sym_is_global (bfd *abfd, asymbol *sym)
4448 {
4449 /* If the backend has a special mapping, use it. */
4450 elf_backend_data *bed = get_elf_backend_data (abfd);
4451 if (bed->elf_backend_sym_is_global)
4452 return (*bed->elf_backend_sym_is_global) (abfd, sym);
4453
4454 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0
4455 || bfd_is_und_section (bfd_asymbol_section (sym))
4456 || bfd_is_com_section (bfd_asymbol_section (sym)));
4457 }
4458
4459 /* Filter global symbols of ABFD to include in the import library. All
4460 SYMCOUNT symbols of ABFD can be examined from their pointers in
4461 SYMS. Pointers of symbols to keep should be stored contiguously at
4462 the beginning of that array.
4463
4464 Returns the number of symbols to keep. */
4465
4466 unsigned int
4467 _bfd_elf_filter_global_symbols (bfd *abfd, struct bfd_link_info *info,
4468 asymbol **syms, long symcount)
4469 {
4470 long src_count, dst_count = 0;
4471
4472 for (src_count = 0; src_count < symcount; src_count++)
4473 {
4474 asymbol *sym = syms[src_count];
4475 char *name = (char *) bfd_asymbol_name (sym);
4476 struct bfd_link_hash_entry *h;
4477
4478 if (!sym_is_global (abfd, sym))
4479 continue;
4480
4481 h = bfd_link_hash_lookup (info->hash, name, false, false, false);
4482 if (h == NULL)
4483 continue;
4484 if (h->type != bfd_link_hash_defined && h->type != bfd_link_hash_defweak)
4485 continue;
4486 if (h->linker_def || h->ldscript_def)
4487 continue;
4488
4489 syms[dst_count++] = sym;
4490 }
4491
4492 syms[dst_count] = NULL;
4493
4494 return dst_count;
4495 }
4496
4497 /* Don't output symbols for sections that are not going to be output,
4498 that are duplicates or there is no BFD section. */
4499
4500 static bool
4501 ignore_sym (asymbol *sym)
4502 {
4503 if (sym == NULL)
4504 return false;
4505
4506 if (sym->section == NULL)
4507 return true;
4508
4509 if ((sym->flags & BSF_SECTION_SYM) != 0)
4510 {
4511 if ((sym->flags & BSF_SECTION_SYM_USED) == 0)
4512 return true;
4513 /* With ld -r on generic elf targets it is possible to have
4514 multiple section symbols in the output for a given section.
4515 We'd like to get rid of all but the first one. This drops
4516 them if the first input section is non-zero size, but fails
4517 to do so if the first input section is zero sized. */
4518 if (sym->section->output_offset != 0)
4519 return true;
4520 }
4521
4522 return discarded_section (sym->section);
4523 }
4524
4525 /* Map symbol from it's internal number to the external number, moving
4526 all local symbols to be at the head of the list. */
4527
4528 static bool
4529 elf_map_symbols (bfd *abfd, unsigned int *pnum_locals)
4530 {
4531 unsigned int symcount = bfd_get_symcount (abfd);
4532 asymbol **syms = bfd_get_outsymbols (abfd);
4533 asymbol **sect_syms;
4534 unsigned int num_locals = 0;
4535 unsigned int num_globals = 0;
4536 unsigned int max_index = 0;
4537 unsigned int idx;
4538 asection *asect;
4539 asymbol **new_syms;
4540 size_t amt;
4541
4542 #ifdef DEBUG
4543 fprintf (stderr, "elf_map_symbols\n");
4544 fflush (stderr);
4545 #endif
4546
4547 for (asect = abfd->sections; asect; asect = asect->next)
4548 {
4549 if (max_index < asect->index)
4550 max_index = asect->index;
4551 }
4552
4553 max_index++;
4554 amt = max_index * sizeof (asymbol *);
4555 sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
4556 if (sect_syms == NULL)
4557 return false;
4558 elf_section_syms (abfd) = sect_syms;
4559 elf_num_section_syms (abfd) = max_index;
4560
4561 /* Init sect_syms entries for any section symbols we have already
4562 decided to output. */
4563 for (idx = 0; idx < symcount; idx++)
4564 {
4565 asymbol *sym = syms[idx];
4566
4567 if ((sym->flags & BSF_SECTION_SYM) != 0
4568 && sym->value == 0
4569 && !ignore_sym (sym)
4570 && !bfd_is_abs_section (sym->section))
4571 {
4572 asection *sec = sym->section;
4573
4574 if (sec->owner != abfd)
4575 {
4576 sec = sec->output_section;
4577 if (sec == NULL)
4578 return false;
4579 }
4580
4581 sect_syms[sec->index] = syms[idx];
4582 }
4583 }
4584
4585 /* Classify all of the symbols. */
4586 for (idx = 0; idx < symcount; idx++)
4587 {
4588 if (ignore_sym (syms[idx]))
4589 continue;
4590 if (sym_is_global (abfd, syms[idx]))
4591 num_globals++;
4592 else
4593 num_locals++;
4594 }
4595
4596 /* We will be adding a section symbol for each normal BFD section. Most
4597 sections will already have a section symbol in outsymbols, but
4598 eg. SHT_GROUP sections will not, and we need the section symbol mapped
4599 at least in that case. */
4600 for (asect = abfd->sections; asect; asect = asect->next)
4601 {
4602 asymbol *sym = asect->symbol;
4603 /* Don't include ignored section symbols. */
4604 if (!ignore_sym (sym)
4605 && sect_syms[asect->index] == NULL)
4606 {
4607 if (sym_is_global (abfd, asect->symbol))
4608 num_globals++;
4609 else
4610 num_locals++;
4611 }
4612 }
4613
4614 /* Now sort the symbols so the local symbols are first. */
4615 amt = (num_locals + num_globals) * sizeof (asymbol *);
4616 new_syms = (asymbol **) bfd_alloc (abfd, amt);
4617 if (new_syms == NULL)
4618 return false;
4619
4620 unsigned int num_globals2 = 0;
4621 unsigned int num_locals2 = 0;
4622 for (idx = 0; idx < symcount; idx++)
4623 {
4624 asymbol *sym = syms[idx];
4625 unsigned int i;
4626
4627 if (ignore_sym (sym))
4628 continue;
4629
4630 if (sym_is_global (abfd, sym))
4631 i = num_locals + num_globals2++;
4632 else
4633 i = num_locals2++;
4634 new_syms[i] = sym;
4635 sym->udata.i = i + 1;
4636 }
4637 for (asect = abfd->sections; asect; asect = asect->next)
4638 {
4639 asymbol *sym = asect->symbol;
4640 if (!ignore_sym (sym)
4641 && sect_syms[asect->index] == NULL)
4642 {
4643 unsigned int i;
4644
4645 sect_syms[asect->index] = sym;
4646 if (sym_is_global (abfd, sym))
4647 i = num_locals + num_globals2++;
4648 else
4649 i = num_locals2++;
4650 new_syms[i] = sym;
4651 sym->udata.i = i + 1;
4652 }
4653 }
4654
4655 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
4656
4657 *pnum_locals = num_locals;
4658 return true;
4659 }
4660
4661 /* Assign a file position to a section, optionally aligning to the
4662 required section alignment. */
4663
4664 file_ptr
4665 _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp,
4666 file_ptr offset,
4667 bool align,
4668 unsigned char log_file_align)
4669 {
4670 if (i_shdrp->sh_addralign > 1)
4671 {
4672 file_ptr salign = i_shdrp->sh_addralign & -i_shdrp->sh_addralign;
4673
4674 if (align)
4675 offset = BFD_ALIGN (offset, salign);
4676 else if (log_file_align)
4677 {
4678 /* Heuristic: Cap alignment at log_file_align. */
4679 file_ptr falign = 1u << log_file_align;
4680
4681 offset = BFD_ALIGN (offset, salign < falign ? salign : falign);
4682 }
4683 }
4684 i_shdrp->sh_offset = offset;
4685 if (i_shdrp->bfd_section != NULL)
4686 i_shdrp->bfd_section->filepos = offset;
4687 if (i_shdrp->sh_type != SHT_NOBITS)
4688 offset += i_shdrp->sh_size;
4689 return offset;
4690 }
4691
4692 /* Compute the file positions we are going to put the sections at, and
4693 otherwise prepare to begin writing out the ELF file. If LINK_INFO
4694 is not NULL, this is being called by the ELF backend linker. */
4695
4696 bool
4697 _bfd_elf_compute_section_file_positions (bfd *abfd,
4698 struct bfd_link_info *link_info)
4699 {
4700 elf_backend_data *bed = get_elf_backend_data (abfd);
4701 struct fake_section_arg fsargs;
4702 bool failed;
4703 struct elf_strtab_hash *strtab = NULL;
4704 Elf_Internal_Shdr *shstrtab_hdr;
4705 bool need_symtab;
4706
4707 if (abfd->output_has_begun)
4708 return true;
4709
4710 /* Do any elf backend specific processing first. */
4711 if (bed->elf_backend_begin_write_processing)
4712 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
4713
4714 if (!(*bed->elf_backend_init_file_header) (abfd, link_info))
4715 return false;
4716
4717 fsargs.failed = false;
4718 fsargs.link_info = link_info;
4719 bfd_map_over_sections (abfd, elf_fake_sections, &fsargs);
4720 if (fsargs.failed)
4721 return false;
4722
4723 if (!assign_section_numbers (abfd, link_info))
4724 return false;
4725
4726 /* The backend linker builds symbol table information itself. */
4727 need_symtab = (link_info == NULL
4728 && (bfd_get_symcount (abfd) > 0
4729 || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
4730 == HAS_RELOC)));
4731 if (need_symtab)
4732 {
4733 /* Non-zero if doing a relocatable link. */
4734 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
4735
4736 if (! swap_out_syms (abfd, &strtab, relocatable_p, link_info))
4737 return false;
4738 }
4739
4740 failed = false;
4741 if (link_info == NULL)
4742 {
4743 bfd_map_over_sections (abfd, bfd_elf_set_group_contents, &failed);
4744 if (failed)
4745 goto err_free_strtab;
4746 }
4747
4748 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
4749 /* sh_name was set in init_file_header. */
4750 shstrtab_hdr->sh_type = SHT_STRTAB;
4751 /* sh_flags, sh_addr, sh_entsize, sh_link, sh_info are all zeroed
4752 when tdata is allocated. */
4753 /* sh_size is set in _bfd_elf_assign_file_positions_for_non_load. */
4754 /* sh_offset is set in _bfd_elf_assign_file_positions_for_non_load. */
4755 shstrtab_hdr->sh_addralign = 1;
4756
4757 if (!assign_file_positions_except_relocs (abfd, link_info))
4758 goto err_free_strtab;
4759
4760 if (strtab != NULL)
4761 {
4762 file_ptr off;
4763 Elf_Internal_Shdr *hdr;
4764
4765 off = elf_next_file_pos (abfd);
4766
4767 hdr = & elf_symtab_hdr (abfd);
4768 off = _bfd_elf_assign_file_position_for_section (hdr, off, true, 0);
4769
4770 if (elf_symtab_shndx_list (abfd) != NULL)
4771 {
4772 hdr = & elf_symtab_shndx_list (abfd)->hdr;
4773 if (hdr->sh_size != 0)
4774 off = _bfd_elf_assign_file_position_for_section (hdr, off, true, 0);
4775 /* FIXME: What about other symtab_shndx sections in the list ? */
4776 }
4777
4778 hdr = &elf_tdata (abfd)->strtab_hdr;
4779 off = _bfd_elf_assign_file_position_for_section (hdr, off, true, 0);
4780
4781 elf_next_file_pos (abfd) = off;
4782
4783 /* Now that we know where the .strtab section goes, write it
4784 out. */
4785 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4786 || ! _bfd_elf_strtab_emit (abfd, strtab))
4787 goto err_free_strtab;
4788 _bfd_elf_strtab_free (strtab);
4789 }
4790
4791 abfd->output_has_begun = true;
4792 return true;
4793
4794 err_free_strtab:
4795 if (strtab != NULL)
4796 _bfd_elf_strtab_free (strtab);
4797 return false;
4798 }
4799
4800 /* Retrieve .eh_frame_hdr. Prior to size_dynamic_sections the
4801 function effectively returns whether --eh-frame-hdr is given on the
4802 command line. After size_dynamic_sections the result reflects
4803 whether .eh_frame_hdr will actually be output (sizing isn't done
4804 until ldemul_after_allocation). */
4805
4806 static asection *
4807 elf_eh_frame_hdr (const struct bfd_link_info *info)
4808 {
4809 if (info != NULL && is_elf_hash_table (info->hash))
4810 return elf_hash_table (info)->eh_info.hdr_sec;
4811 return NULL;
4812 }
4813
4814 /* Make an initial estimate of the size of the program header. If we
4815 get the number wrong here, we'll redo section placement. */
4816
4817 static bfd_size_type
4818 get_program_header_size (bfd *abfd, struct bfd_link_info *info)
4819 {
4820 size_t segs;
4821 asection *s, *s2;
4822 elf_backend_data *bed;
4823
4824 /* Assume we will need exactly two PT_LOAD segments: one for text
4825 and one for data. */
4826 segs = 2;
4827
4828 s = bfd_get_section_by_name (abfd, ".interp");
4829 s2 = bfd_get_section_by_name (abfd, ".dynamic");
4830 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
4831 {
4832 ++segs;
4833 }
4834
4835 if (s2 != NULL && (s2->flags & SEC_LOAD) != 0)
4836 {
4837 /* We need a PT_DYNAMIC segment. */
4838 ++segs;
4839 }
4840
4841 if ((s != NULL && (s->flags & SEC_LOAD) != 0) ||
4842 (s2 != NULL && (s2->flags & SEC_LOAD) != 0))
4843 {
4844 /*
4845 * If either a PT_INTERP or PT_DYNAMIC segment is created,
4846 * also create a PT_PHDR segment.
4847 */
4848 ++segs;
4849 }
4850
4851 if (info != NULL && info->relro)
4852 {
4853 /* We need a PT_GNU_RELRO segment. */
4854 ++segs;
4855 }
4856
4857 if (elf_eh_frame_hdr (info))
4858 {
4859 /* We need a PT_GNU_EH_FRAME segment. */
4860 ++segs;
4861 }
4862
4863 if (elf_stack_flags (abfd))
4864 {
4865 /* We need a PT_GNU_STACK segment. */
4866 ++segs;
4867 }
4868
4869 if (elf_sframe (abfd))
4870 {
4871 /* We need a PT_GNU_SFRAME segment. */
4872 ++segs;
4873 }
4874
4875 s = bfd_get_section_by_name (abfd,
4876 NOTE_GNU_PROPERTY_SECTION_NAME);
4877 if (s != NULL && s->size != 0)
4878 {
4879 /* We need a PT_GNU_PROPERTY segment. */
4880 ++segs;
4881 }
4882
4883 for (s = abfd->sections; s != NULL; s = s->next)
4884 {
4885 if ((s->flags & SEC_LOAD) != 0
4886 && elf_section_type (s) == SHT_NOTE)
4887 {
4888 unsigned int alignment_power;
4889 /* We need a PT_NOTE segment. */
4890 ++segs;
4891 /* Try to create just one PT_NOTE segment for all adjacent
4892 loadable SHT_NOTE sections. gABI requires that within a
4893 PT_NOTE segment (and also inside of each SHT_NOTE section)
4894 each note should have the same alignment. So we check
4895 whether the sections are correctly aligned. */
4896 alignment_power = s->alignment_power;
4897 while (s->next != NULL
4898 && s->next->alignment_power == alignment_power
4899 && (s->next->flags & SEC_LOAD) != 0
4900 && elf_section_type (s->next) == SHT_NOTE)
4901 s = s->next;
4902 }
4903 }
4904
4905 for (s = abfd->sections; s != NULL; s = s->next)
4906 {
4907 if (s->flags & SEC_THREAD_LOCAL)
4908 {
4909 /* We need a PT_TLS segment. */
4910 ++segs;
4911 break;
4912 }
4913 }
4914
4915 bed = get_elf_backend_data (abfd);
4916
4917 if ((abfd->flags & D_PAGED) != 0
4918 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
4919 {
4920 /* Add a PT_GNU_MBIND segment for each mbind section. */
4921 bfd_vma commonpagesize;
4922 unsigned int page_align_power;
4923
4924 if (info != NULL)
4925 commonpagesize = info->commonpagesize;
4926 else
4927 commonpagesize = bed->commonpagesize;
4928 page_align_power = bfd_log2 (commonpagesize);
4929 for (s = abfd->sections; s != NULL; s = s->next)
4930 if (elf_section_flags (s) & SHF_GNU_MBIND)
4931 {
4932 if (elf_section_data (s)->this_hdr.sh_info > PT_GNU_MBIND_NUM)
4933 {
4934 _bfd_error_handler
4935 /* xgettext:c-format */
4936 (_("%pB: GNU_MBIND section `%pA' has invalid "
4937 "sh_info field: %d"),
4938 abfd, s, elf_section_data (s)->this_hdr.sh_info);
4939 continue;
4940 }
4941 /* Align mbind section to page size. */
4942 if (s->alignment_power < page_align_power)
4943 s->alignment_power = page_align_power;
4944 segs ++;
4945 }
4946 }
4947
4948 /* Let the backend count up any program headers it might need. */
4949 if (bed->elf_backend_additional_program_headers)
4950 {
4951 int a;
4952
4953 a = (*bed->elf_backend_additional_program_headers) (abfd, info);
4954 if (a == -1)
4955 abort ();
4956 segs += a;
4957 }
4958
4959 return segs * bed->s->sizeof_phdr;
4960 }
4961
4962 /* Find the segment that contains the output_section of section. */
4963
4964 Elf_Internal_Phdr *
4965 _bfd_elf_find_segment_containing_section (bfd * abfd, asection * section)
4966 {
4967 struct elf_segment_map *m;
4968 Elf_Internal_Phdr *p;
4969
4970 for (m = elf_seg_map (abfd), p = elf_tdata (abfd)->phdr;
4971 m != NULL;
4972 m = m->next, p++)
4973 {
4974 int i;
4975
4976 for (i = m->count - 1; i >= 0; i--)
4977 if (m->sections[i] == section)
4978 return p;
4979 }
4980
4981 return NULL;
4982 }
4983
4984 /* Create a mapping from a set of sections to a program segment. */
4985
4986 static struct elf_segment_map *
4987 make_mapping (bfd *abfd,
4988 asection **sections,
4989 unsigned int from,
4990 unsigned int to,
4991 bool phdr)
4992 {
4993 struct elf_segment_map *m;
4994 unsigned int i;
4995 asection **hdrpp;
4996 size_t amt;
4997
4998 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
4999 amt += (to - from) * sizeof (asection *);
5000 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5001 if (m == NULL)
5002 return NULL;
5003 m->next = NULL;
5004 m->p_type = PT_LOAD;
5005 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
5006 m->sections[i - from] = *hdrpp;
5007 m->count = to - from;
5008
5009 if (from == 0 && phdr)
5010 {
5011 /* Include the headers in the first PT_LOAD segment. */
5012 m->includes_filehdr = 1;
5013 m->includes_phdrs = 1;
5014 }
5015
5016 return m;
5017 }
5018
5019 /* Create the PT_DYNAMIC segment, which includes DYNSEC. Returns NULL
5020 on failure. */
5021
5022 struct elf_segment_map *
5023 _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec)
5024 {
5025 struct elf_segment_map *m;
5026
5027 m = (struct elf_segment_map *) bfd_zalloc (abfd,
5028 sizeof (struct elf_segment_map));
5029 if (m == NULL)
5030 return NULL;
5031 m->next = NULL;
5032 m->p_type = PT_DYNAMIC;
5033 m->count = 1;
5034 m->sections[0] = dynsec;
5035
5036 return m;
5037 }
5038
5039 /* Possibly add or remove segments from the segment map. */
5040
5041 static bool
5042 elf_modify_segment_map (bfd *abfd,
5043 struct bfd_link_info *info,
5044 bool remove_empty_load)
5045 {
5046 struct elf_segment_map **m;
5047 elf_backend_data *bed;
5048
5049 /* The placement algorithm assumes that non allocated sections are
5050 not in PT_LOAD segments. We ensure this here by removing such
5051 sections from the segment map. We also remove excluded
5052 sections. Finally, any PT_LOAD segment without sections is
5053 removed. */
5054 m = &elf_seg_map (abfd);
5055 while (*m)
5056 {
5057 unsigned int i, new_count;
5058
5059 for (new_count = 0, i = 0; i < (*m)->count; i++)
5060 {
5061 if (((*m)->sections[i]->flags & SEC_EXCLUDE) == 0
5062 && (((*m)->sections[i]->flags & SEC_ALLOC) != 0
5063 || (*m)->p_type != PT_LOAD))
5064 {
5065 (*m)->sections[new_count] = (*m)->sections[i];
5066 new_count++;
5067 }
5068 }
5069 (*m)->count = new_count;
5070
5071 if (remove_empty_load
5072 && (*m)->p_type == PT_LOAD
5073 && (*m)->count == 0
5074 && !(*m)->includes_phdrs)
5075 *m = (*m)->next;
5076 else
5077 m = &(*m)->next;
5078 }
5079
5080 bed = get_elf_backend_data (abfd);
5081 if (bed->elf_backend_modify_segment_map != NULL)
5082 {
5083 if (!(*bed->elf_backend_modify_segment_map) (abfd, info))
5084 return false;
5085 }
5086
5087 return true;
5088 }
5089
5090 #define IS_TBSS(s) \
5091 ((s->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) == SEC_THREAD_LOCAL)
5092
5093 /* Set up a mapping from BFD sections to program segments. Update
5094 NEED_LAYOUT if the section layout is changed. */
5095
5096 bool
5097 bfd_elf_map_sections_to_segments (bfd *abfd,
5098 struct bfd_link_info *info,
5099 bool *need_layout)
5100 {
5101 unsigned int count;
5102 struct elf_segment_map *m;
5103 asection **sections = NULL;
5104 elf_backend_data *bed = get_elf_backend_data (abfd);
5105 bool no_user_phdrs;
5106
5107 no_user_phdrs = elf_seg_map (abfd) == NULL;
5108
5109 if (info != NULL)
5110 {
5111 info->user_phdrs = !no_user_phdrs;
5112
5113 /* Size the relative relocations if DT_RELR is enabled. */
5114 if (info->enable_dt_relr
5115 && need_layout != NULL
5116 && bed->size_relative_relocs
5117 && !bed->size_relative_relocs (info, need_layout))
5118 info->callbacks->fatal
5119 (_("%P: failed to size relative relocations\n"));
5120 }
5121
5122 if (no_user_phdrs && bfd_count_sections (abfd) != 0)
5123 {
5124 asection *s;
5125 unsigned int i;
5126 struct elf_segment_map *mfirst;
5127 struct elf_segment_map **pm;
5128 asection *last_hdr;
5129 bfd_vma last_size;
5130 unsigned int hdr_index;
5131 bfd_vma maxpagesize;
5132 asection **hdrpp;
5133 bool phdr_in_segment;
5134 bool writable;
5135 bool executable;
5136 unsigned int tls_count = 0;
5137 asection *first_tls = NULL;
5138 asection *first_mbind = NULL;
5139 asection *dynsec, *eh_frame_hdr;
5140 asection *sframe;
5141 size_t amt;
5142 bfd_vma addr_mask, wrap_to = 0; /* Bytes. */
5143 bfd_size_type phdr_size; /* Octets/bytes. */
5144 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5145
5146 /* Select the allocated sections, and sort them. */
5147
5148 amt = bfd_count_sections (abfd) * sizeof (asection *);
5149 sections = (asection **) bfd_malloc (amt);
5150 if (sections == NULL)
5151 goto error_return;
5152
5153 /* Calculate top address, avoiding undefined behaviour of shift
5154 left operator when shift count is equal to size of type
5155 being shifted. */
5156 addr_mask = ((bfd_vma) 1 << (bfd_arch_bits_per_address (abfd) - 1)) - 1;
5157 addr_mask = (addr_mask << 1) + 1;
5158
5159 i = 0;
5160 for (s = abfd->sections; s != NULL; s = s->next)
5161 {
5162 if ((s->flags & SEC_ALLOC) != 0)
5163 {
5164 /* target_index is unused until bfd_elf_final_link
5165 starts output of section symbols. Use it to make
5166 qsort stable. */
5167 s->target_index = i;
5168 sections[i] = s;
5169 ++i;
5170 /* A wrapping section potentially clashes with header. */
5171 if (((s->lma + s->size / opb) & addr_mask) < (s->lma & addr_mask))
5172 wrap_to = (s->lma + s->size / opb) & addr_mask;
5173 }
5174 }
5175 BFD_ASSERT (i <= bfd_count_sections (abfd));
5176 count = i;
5177
5178 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
5179
5180 phdr_size = elf_program_header_size (abfd);
5181 if (phdr_size == (bfd_size_type) -1)
5182 phdr_size = get_program_header_size (abfd, info);
5183 phdr_size += bed->s->sizeof_ehdr;
5184 /* phdr_size is compared to LMA values which are in bytes. */
5185 phdr_size /= opb;
5186 if (info != NULL)
5187 maxpagesize = info->maxpagesize;
5188 else
5189 maxpagesize = bed->maxpagesize;
5190 if (maxpagesize == 0)
5191 maxpagesize = 1;
5192 phdr_in_segment = info != NULL && info->load_phdrs;
5193 if (count != 0
5194 && (((sections[0]->lma & addr_mask) & (maxpagesize - 1))
5195 >= (phdr_size & (maxpagesize - 1))))
5196 /* For compatibility with old scripts that may not be using
5197 SIZEOF_HEADERS, add headers when it looks like space has
5198 been left for them. */
5199 phdr_in_segment = true;
5200
5201 /* Build the mapping. */
5202 mfirst = NULL;
5203 pm = &mfirst;
5204
5205 /* If we have a .interp section, then create a PT_PHDR segment for
5206 the program headers and a PT_INTERP segment for the .interp
5207 section. */
5208 s = bfd_get_section_by_name (abfd, ".interp");
5209 if (s != NULL && (s->flags & SEC_LOAD) == 0)
5210 if (s != NULL && (s->flags & SEC_LOAD) != 0 && s->size != 0)
5211 s = NULL;
5212 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
5213 if (dynsec != NULL && (dynsec->flags & SEC_LOAD) == 0)
5214 dynsec = NULL;
5215
5216 if (s != NULL || dynsec != NULL)
5217 {
5218 amt = sizeof (struct elf_segment_map);
5219 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5220 if (m == NULL)
5221 goto error_return;
5222 m->next = NULL;
5223 m->p_type = PT_PHDR;
5224 m->p_flags = PF_R;
5225 m->p_flags_valid = 1;
5226 m->includes_phdrs = 1;
5227 phdr_in_segment = true;
5228 *pm = m;
5229 pm = &m->next;
5230 }
5231
5232 if (s != NULL)
5233 {
5234 amt = sizeof (struct elf_segment_map);
5235 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5236 if (m == NULL)
5237 goto error_return;
5238 m->next = NULL;
5239 m->p_type = PT_INTERP;
5240 m->count = 1;
5241 m->sections[0] = s;
5242
5243 *pm = m;
5244 pm = &m->next;
5245 }
5246
5247 /* Look through the sections. We put sections in the same program
5248 segment when the start of the second section can be placed within
5249 a few bytes of the end of the first section. */
5250 last_hdr = NULL;
5251 last_size = 0;
5252 hdr_index = 0;
5253 writable = false;
5254 executable = false;
5255
5256 if ((abfd->flags & D_PAGED) == 0)
5257 phdr_in_segment = false;
5258
5259 /* Deal with -Ttext or something similar such that the first section
5260 is not adjacent to the program headers. This is an
5261 approximation, since at this point we don't know exactly how many
5262 program headers we will need. */
5263 if (phdr_in_segment && count > 0)
5264 {
5265 bfd_vma phdr_lma; /* Bytes. */
5266 bool separate_phdr = false;
5267
5268 phdr_lma = (sections[0]->lma - phdr_size) & addr_mask & -maxpagesize;
5269 if (info != NULL
5270 && info->separate_code
5271 && (sections[0]->flags & SEC_CODE) != 0)
5272 {
5273 /* If data sections should be separate from code and
5274 thus not executable, and the first section is
5275 executable then put the file and program headers in
5276 their own PT_LOAD. */
5277 if (!info->one_rosegment)
5278 separate_phdr = true;
5279
5280 if ((((phdr_lma + phdr_size - 1) & addr_mask & -maxpagesize)
5281 == (sections[0]->lma & addr_mask & -maxpagesize)))
5282 {
5283 /* The file and program headers are currently on the
5284 same page as the first section. Put them on the
5285 previous page if we can. */
5286 if (phdr_lma >= maxpagesize)
5287 phdr_lma -= maxpagesize;
5288 else
5289 separate_phdr = false;
5290 }
5291 }
5292 if ((sections[0]->lma & addr_mask) < phdr_lma
5293 || (sections[0]->lma & addr_mask) < phdr_size)
5294 /* If file and program headers would be placed at the end
5295 of memory then it's probably better to omit them. */
5296 phdr_in_segment = false;
5297 else if (phdr_lma < wrap_to)
5298 /* If a section wraps around to where we'll be placing
5299 file and program headers, then the headers will be
5300 overwritten. */
5301 phdr_in_segment = false;
5302 else if (separate_phdr)
5303 {
5304 m = make_mapping (abfd, sections, 0, 0, phdr_in_segment);
5305 if (m == NULL)
5306 goto error_return;
5307 m->p_paddr = phdr_lma * opb;
5308 m->p_vaddr_offset
5309 = (sections[0]->vma - phdr_size) & addr_mask & -maxpagesize;
5310 m->p_paddr_valid = 1;
5311 *pm = m;
5312 pm = &m->next;
5313 phdr_in_segment = false;
5314 }
5315 }
5316
5317 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
5318 {
5319 asection *hdr;
5320 bool new_segment;
5321
5322 hdr = *hdrpp;
5323
5324 /* See if this section and the last one will fit in the same
5325 segment. */
5326
5327 if (last_hdr == NULL)
5328 {
5329 /* If we don't have a segment yet, then we don't need a new
5330 one (we build the last one after this loop). */
5331 new_segment = false;
5332 }
5333 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
5334 {
5335 /* If this section has a different relation between the
5336 virtual address and the load address, then we need a new
5337 segment. */
5338 new_segment = true;
5339 }
5340 else if (hdr->lma < last_hdr->lma + last_size
5341 || last_hdr->lma + last_size < last_hdr->lma)
5342 {
5343 /* If this section has a load address that makes it overlap
5344 the previous section, then we need a new segment. */
5345 new_segment = true;
5346 }
5347 else if ((abfd->flags & D_PAGED) != 0
5348 && (((last_hdr->lma + last_size - 1) & -maxpagesize)
5349 == (hdr->lma & -maxpagesize)))
5350 {
5351 /* If we are demand paged then we can't map two disk
5352 pages onto the same memory page. */
5353 new_segment = false;
5354 }
5355 /* In the next test we have to be careful when last_hdr->lma is close
5356 to the end of the address space. If the aligned address wraps
5357 around to the start of the address space, then there are no more
5358 pages left in memory and it is OK to assume that the current
5359 section can be included in the current segment. */
5360 else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
5361 + maxpagesize > last_hdr->lma)
5362 && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize)
5363 + maxpagesize <= hdr->lma))
5364 {
5365 /* If putting this section in this segment would force us to
5366 skip a page in the segment, then we need a new segment. */
5367 new_segment = true;
5368 }
5369 else if ((last_hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0
5370 && (hdr->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) != 0)
5371 {
5372 /* We don't want to put a loaded section after a
5373 nonloaded (ie. bss style) section in the same segment
5374 as that will force the non-loaded section to be loaded.
5375 Consider .tbss sections as loaded for this purpose. */
5376 new_segment = true;
5377 }
5378 else if ((abfd->flags & D_PAGED) == 0)
5379 {
5380 /* If the file is not demand paged, which means that we
5381 don't require the sections to be correctly aligned in the
5382 file, then there is no other reason for a new segment. */
5383 new_segment = false;
5384 }
5385 else if (info != NULL
5386 && info->separate_code
5387 && executable != ((hdr->flags & SEC_CODE) != 0))
5388 {
5389 new_segment = true;
5390 }
5391 else if (! writable
5392 && (hdr->flags & SEC_READONLY) == 0)
5393 {
5394 /* We don't want to put a writable section in a read only
5395 segment. */
5396 new_segment = true;
5397 }
5398 else
5399 {
5400 /* Otherwise, we can use the same segment. */
5401 new_segment = false;
5402 }
5403
5404 /* Allow interested parties a chance to override our decision. */
5405 if (last_hdr != NULL
5406 && info != NULL
5407 && info->callbacks->override_segment_assignment != NULL)
5408 new_segment
5409 = info->callbacks->override_segment_assignment (info, abfd, hdr,
5410 last_hdr,
5411 new_segment);
5412
5413 if (! new_segment)
5414 {
5415 if ((hdr->flags & SEC_READONLY) == 0)
5416 writable = true;
5417 if ((hdr->flags & SEC_CODE) != 0)
5418 executable = true;
5419 last_hdr = hdr;
5420 /* .tbss sections effectively have zero size. */
5421 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
5422 continue;
5423 }
5424
5425 /* We need a new program segment. We must create a new program
5426 header holding all the sections from hdr_index until hdr. */
5427
5428 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
5429 if (m == NULL)
5430 goto error_return;
5431
5432 *pm = m;
5433 pm = &m->next;
5434
5435 if ((hdr->flags & SEC_READONLY) == 0)
5436 writable = true;
5437 else
5438 writable = false;
5439
5440 if ((hdr->flags & SEC_CODE) == 0)
5441 executable = false;
5442 else
5443 executable = true;
5444
5445 last_hdr = hdr;
5446 /* .tbss sections effectively have zero size. */
5447 last_size = (!IS_TBSS (hdr) ? hdr->size : 0) / opb;
5448 hdr_index = i;
5449 phdr_in_segment = false;
5450 }
5451
5452 /* Create a final PT_LOAD program segment, but not if it's just
5453 for .tbss. */
5454 if (last_hdr != NULL
5455 && (i - hdr_index != 1
5456 || !IS_TBSS (last_hdr)))
5457 {
5458 m = make_mapping (abfd, sections, hdr_index, i, phdr_in_segment);
5459 if (m == NULL)
5460 goto error_return;
5461
5462 *pm = m;
5463 pm = &m->next;
5464 }
5465
5466 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
5467 if (dynsec != NULL)
5468 {
5469 m = _bfd_elf_make_dynamic_segment (abfd, dynsec);
5470 if (m == NULL)
5471 goto error_return;
5472 *pm = m;
5473 pm = &m->next;
5474 }
5475
5476 /* For each batch of consecutive loadable SHT_NOTE sections,
5477 add a PT_NOTE segment. We don't use bfd_get_section_by_name,
5478 because if we link together nonloadable .note sections and
5479 loadable .note sections, we will generate two .note sections
5480 in the output file. */
5481 for (s = abfd->sections; s != NULL; s = s->next)
5482 {
5483 if ((s->flags & SEC_LOAD) != 0
5484 && elf_section_type (s) == SHT_NOTE)
5485 {
5486 asection *s2;
5487 unsigned int alignment_power = s->alignment_power;
5488
5489 count = 1;
5490 for (s2 = s; s2->next != NULL; s2 = s2->next)
5491 {
5492 if (s2->next->alignment_power == alignment_power
5493 && (s2->next->flags & SEC_LOAD) != 0
5494 && elf_section_type (s2->next) == SHT_NOTE
5495 && align_power (s2->lma + s2->size / opb,
5496 alignment_power)
5497 == s2->next->lma)
5498 count++;
5499 else
5500 break;
5501 }
5502 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5503 amt += count * sizeof (asection *);
5504 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5505 if (m == NULL)
5506 goto error_return;
5507 m->next = NULL;
5508 m->p_type = PT_NOTE;
5509 m->count = count;
5510 while (count > 1)
5511 {
5512 m->sections[m->count - count--] = s;
5513 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5514 s = s->next;
5515 }
5516 m->sections[m->count - 1] = s;
5517 BFD_ASSERT ((s->flags & SEC_THREAD_LOCAL) == 0);
5518 *pm = m;
5519 pm = &m->next;
5520 }
5521 if (s->flags & SEC_THREAD_LOCAL)
5522 {
5523 if (! tls_count)
5524 first_tls = s;
5525 tls_count++;
5526 }
5527 if (first_mbind == NULL
5528 && (elf_section_flags (s) & SHF_GNU_MBIND) != 0)
5529 first_mbind = s;
5530 }
5531
5532 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
5533 if (tls_count > 0)
5534 {
5535 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
5536 amt += tls_count * sizeof (asection *);
5537 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5538 if (m == NULL)
5539 goto error_return;
5540 m->next = NULL;
5541 m->p_type = PT_TLS;
5542 m->count = tls_count;
5543 /* Mandated PF_R. */
5544 m->p_flags = PF_R;
5545 m->p_flags_valid = 1;
5546 s = first_tls;
5547 for (i = 0; i < tls_count; ++i)
5548 {
5549 if ((s->flags & SEC_THREAD_LOCAL) == 0)
5550 {
5551 _bfd_error_handler
5552 (_("%pB: TLS sections are not adjacent:"), abfd);
5553 s = first_tls;
5554 i = 0;
5555 while (i < tls_count)
5556 {
5557 if ((s->flags & SEC_THREAD_LOCAL) != 0)
5558 {
5559 _bfd_error_handler (_(" TLS: %pA"), s);
5560 i++;
5561 }
5562 else
5563 _bfd_error_handler (_(" non-TLS: %pA"), s);
5564 s = s->next;
5565 }
5566 bfd_set_error (bfd_error_bad_value);
5567 goto error_return;
5568 }
5569 m->sections[i] = s;
5570 s = s->next;
5571 }
5572
5573 *pm = m;
5574 pm = &m->next;
5575 }
5576
5577 if (first_mbind
5578 && (abfd->flags & D_PAGED) != 0
5579 && (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0)
5580 for (s = first_mbind; s != NULL; s = s->next)
5581 if ((elf_section_flags (s) & SHF_GNU_MBIND) != 0
5582 && elf_section_data (s)->this_hdr.sh_info <= PT_GNU_MBIND_NUM)
5583 {
5584 /* Mandated PF_R. */
5585 unsigned long p_flags = PF_R;
5586 if ((s->flags & SEC_READONLY) == 0)
5587 p_flags |= PF_W;
5588 if ((s->flags & SEC_CODE) != 0)
5589 p_flags |= PF_X;
5590
5591 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5592 m = bfd_zalloc (abfd, amt);
5593 if (m == NULL)
5594 goto error_return;
5595 m->next = NULL;
5596 m->p_type = (PT_GNU_MBIND_LO
5597 + elf_section_data (s)->this_hdr.sh_info);
5598 m->count = 1;
5599 m->p_flags_valid = 1;
5600 m->sections[0] = s;
5601 m->p_flags = p_flags;
5602
5603 *pm = m;
5604 pm = &m->next;
5605 }
5606
5607 s = bfd_get_section_by_name (abfd,
5608 NOTE_GNU_PROPERTY_SECTION_NAME);
5609 if (s != NULL && s->size != 0)
5610 {
5611 amt = sizeof (struct elf_segment_map) + sizeof (asection *);
5612 m = bfd_zalloc (abfd, amt);
5613 if (m == NULL)
5614 goto error_return;
5615 m->next = NULL;
5616 m->p_type = PT_GNU_PROPERTY;
5617 m->count = 1;
5618 m->p_flags_valid = 1;
5619 m->sections[0] = s;
5620 m->p_flags = PF_R;
5621 *pm = m;
5622 pm = &m->next;
5623 }
5624
5625 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
5626 segment. */
5627 eh_frame_hdr = elf_eh_frame_hdr (info);
5628 if (eh_frame_hdr != NULL
5629 && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0)
5630 {
5631 amt = sizeof (struct elf_segment_map);
5632 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5633 if (m == NULL)
5634 goto error_return;
5635 m->next = NULL;
5636 m->p_type = PT_GNU_EH_FRAME;
5637 m->count = 1;
5638 m->sections[0] = eh_frame_hdr->output_section;
5639
5640 *pm = m;
5641 pm = &m->next;
5642 }
5643
5644 /* If there is a .sframe section, throw in a PT_GNU_SFRAME
5645 segment. */
5646 sframe = elf_sframe (abfd);
5647 if (sframe != NULL
5648 && (sframe->output_section->flags & SEC_LOAD) != 0
5649 && sframe->size != 0)
5650 {
5651 amt = sizeof (struct elf_segment_map);
5652 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5653 if (m == NULL)
5654 goto error_return;
5655 m->next = NULL;
5656 m->p_type = PT_GNU_SFRAME;
5657 m->count = 1;
5658 m->sections[0] = sframe->output_section;
5659
5660 *pm = m;
5661 pm = &m->next;
5662 }
5663
5664 if (elf_stack_flags (abfd))
5665 {
5666 amt = sizeof (struct elf_segment_map);
5667 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5668 if (m == NULL)
5669 goto error_return;
5670 m->next = NULL;
5671 m->p_type = PT_GNU_STACK;
5672 m->p_flags = elf_stack_flags (abfd);
5673 m->p_align = bed->stack_align;
5674 m->p_flags_valid = 1;
5675 m->p_align_valid = m->p_align != 0;
5676 if (info->stacksize > 0)
5677 {
5678 m->p_size = info->stacksize;
5679 m->p_size_valid = 1;
5680 }
5681
5682 *pm = m;
5683 pm = &m->next;
5684 }
5685
5686 if (info != NULL && info->relro)
5687 {
5688 for (m = mfirst; m != NULL; m = m->next)
5689 {
5690 if (m->p_type == PT_LOAD
5691 && m->count != 0
5692 && m->sections[0]->vma >= info->relro_start
5693 && m->sections[0]->vma < info->relro_end)
5694 {
5695 i = m->count;
5696 while (--i != (unsigned) -1)
5697 {
5698 if (m->sections[i]->size > 0
5699 && (m->sections[i]->flags & SEC_LOAD) != 0
5700 && (m->sections[i]->flags & SEC_HAS_CONTENTS) != 0)
5701 break;
5702 }
5703
5704 if (i != (unsigned) -1)
5705 break;
5706 }
5707 }
5708
5709 /* Make a PT_GNU_RELRO segment only when it isn't empty. */
5710 if (m != NULL)
5711 {
5712 amt = sizeof (struct elf_segment_map);
5713 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
5714 if (m == NULL)
5715 goto error_return;
5716 m->next = NULL;
5717 m->p_type = PT_GNU_RELRO;
5718 *pm = m;
5719 pm = &m->next;
5720 }
5721 }
5722
5723 free (sections);
5724 elf_seg_map (abfd) = mfirst;
5725 }
5726
5727 if (!elf_modify_segment_map (abfd, info, no_user_phdrs || info == NULL))
5728 return false;
5729
5730 for (count = 0, m = elf_seg_map (abfd); m != NULL; m = m->next)
5731 ++count;
5732 elf_program_header_size (abfd) = count * bed->s->sizeof_phdr;
5733
5734 return true;
5735
5736 error_return:
5737 free (sections);
5738 return false;
5739 }
5740
5741 /* Sort sections by address. */
5742
5743 static int
5744 elf_sort_sections (const void *arg1, const void *arg2)
5745 {
5746 const asection *sec1 = *(const asection **) arg1;
5747 const asection *sec2 = *(const asection **) arg2;
5748 bfd_size_type size1, size2;
5749
5750 /* Sort by LMA first, since this is the address used to
5751 place the section into a segment. */
5752 if (sec1->lma < sec2->lma)
5753 return -1;
5754 else if (sec1->lma > sec2->lma)
5755 return 1;
5756
5757 /* Then sort by VMA. Normally the LMA and the VMA will be
5758 the same, and this will do nothing. */
5759 if (sec1->vma < sec2->vma)
5760 return -1;
5761 else if (sec1->vma > sec2->vma)
5762 return 1;
5763
5764 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
5765
5766 #define TOEND(x) (((x)->flags & (SEC_LOAD | SEC_THREAD_LOCAL)) == 0 \
5767 && (x)->size != 0)
5768
5769 if (TOEND (sec1))
5770 {
5771 if (!TOEND (sec2))
5772 return 1;
5773 }
5774 else if (TOEND (sec2))
5775 return -1;
5776
5777 #undef TOEND
5778
5779 /* Sort by size, to put zero sized sections
5780 before others at the same address. */
5781
5782 size1 = (sec1->flags & SEC_LOAD) ? sec1->size : 0;
5783 size2 = (sec2->flags & SEC_LOAD) ? sec2->size : 0;
5784
5785 if (size1 < size2)
5786 return -1;
5787 if (size1 > size2)
5788 return 1;
5789
5790 return sec1->target_index - sec2->target_index;
5791 }
5792
5793 /* This qsort comparison functions sorts PT_LOAD segments first and
5794 by p_paddr, for assign_file_positions_for_load_sections. */
5795
5796 static int
5797 elf_sort_segments (const void *arg1, const void *arg2)
5798 {
5799 const struct elf_segment_map *m1 = *(const struct elf_segment_map **) arg1;
5800 const struct elf_segment_map *m2 = *(const struct elf_segment_map **) arg2;
5801
5802 if (m1->p_type != m2->p_type)
5803 {
5804 if (m1->p_type == PT_NULL)
5805 return 1;
5806 if (m2->p_type == PT_NULL)
5807 return -1;
5808 return m1->p_type < m2->p_type ? -1 : 1;
5809 }
5810 if (m1->includes_filehdr != m2->includes_filehdr)
5811 return m1->includes_filehdr ? -1 : 1;
5812 if (m1->no_sort_lma != m2->no_sort_lma)
5813 return m1->no_sort_lma ? -1 : 1;
5814 if (m1->p_type == PT_LOAD && !m1->no_sort_lma)
5815 {
5816 bfd_vma lma1, lma2; /* Octets. */
5817 lma1 = 0;
5818 if (m1->p_paddr_valid)
5819 lma1 = m1->p_paddr;
5820 else if (m1->count != 0)
5821 {
5822 unsigned int opb = bfd_octets_per_byte (m1->sections[0]->owner,
5823 m1->sections[0]);
5824 lma1 = (m1->sections[0]->lma + m1->p_vaddr_offset) * opb;
5825 }
5826 lma2 = 0;
5827 if (m2->p_paddr_valid)
5828 lma2 = m2->p_paddr;
5829 else if (m2->count != 0)
5830 {
5831 unsigned int opb = bfd_octets_per_byte (m2->sections[0]->owner,
5832 m2->sections[0]);
5833 lma2 = (m2->sections[0]->lma + m2->p_vaddr_offset) * opb;
5834 }
5835 if (lma1 != lma2)
5836 return lma1 < lma2 ? -1 : 1;
5837 }
5838 if (m1->idx != m2->idx)
5839 return m1->idx < m2->idx ? -1 : 1;
5840 return 0;
5841 }
5842
5843 /* Ian Lance Taylor writes:
5844
5845 We shouldn't be using % with a negative signed number. That's just
5846 not good. We have to make sure either that the number is not
5847 negative, or that the number has an unsigned type. When the types
5848 are all the same size they wind up as unsigned. When file_ptr is a
5849 larger signed type, the arithmetic winds up as signed long long,
5850 which is wrong.
5851
5852 What we're trying to say here is something like ``increase OFF by
5853 the least amount that will cause it to be equal to the VMA modulo
5854 the page size.'' */
5855 /* In other words, something like:
5856
5857 vma_offset = m->sections[0]->vma % bed->maxpagesize;
5858 off_offset = off % bed->maxpagesize;
5859 if (vma_offset < off_offset)
5860 adjustment = vma_offset + bed->maxpagesize - off_offset;
5861 else
5862 adjustment = vma_offset - off_offset;
5863
5864 which can be collapsed into the expression below. */
5865
5866 static file_ptr
5867 vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
5868 {
5869 /* PR binutils/16199: Handle an alignment of zero. */
5870 if (maxpagesize == 0)
5871 maxpagesize = 1;
5872 return ((vma - off) % maxpagesize);
5873 }
5874
5875 static void
5876 print_segment_map (const struct elf_segment_map *m)
5877 {
5878 unsigned int j;
5879 const char *pt = get_segment_type (m->p_type);
5880 char buf[32];
5881
5882 if (pt == NULL)
5883 {
5884 if (m->p_type >= PT_LOPROC && m->p_type <= PT_HIPROC)
5885 sprintf (buf, "LOPROC+%7.7x",
5886 (unsigned int) (m->p_type - PT_LOPROC));
5887 else if (m->p_type >= PT_LOOS && m->p_type <= PT_HIOS)
5888 sprintf (buf, "LOOS+%7.7x",
5889 (unsigned int) (m->p_type - PT_LOOS));
5890 else
5891 snprintf (buf, sizeof (buf), "%8.8x",
5892 (unsigned int) m->p_type);
5893 pt = buf;
5894 }
5895 fflush (stdout);
5896 fprintf (stderr, "%s:", pt);
5897 for (j = 0; j < m->count; j++)
5898 fprintf (stderr, " %s", m->sections [j]->name);
5899 putc ('\n',stderr);
5900 fflush (stderr);
5901 }
5902
5903 /* Assign file positions to the sections based on the mapping from
5904 sections to segments. This function also sets up some fields in
5905 the file header. */
5906
5907 static bool
5908 assign_file_positions_for_load_sections (bfd *abfd,
5909 struct bfd_link_info *link_info)
5910 {
5911 elf_backend_data *bed = get_elf_backend_data (abfd);
5912 struct elf_segment_map *m;
5913 struct elf_segment_map *phdr_load_seg;
5914 Elf_Internal_Phdr *phdrs;
5915 Elf_Internal_Phdr *p;
5916 file_ptr off; /* Octets. */
5917 bfd_size_type maxpagesize;
5918 unsigned int alloc, actual;
5919 unsigned int i, j;
5920 struct elf_segment_map **sorted_seg_map;
5921 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
5922
5923 if (link_info == NULL
5924 && !bfd_elf_map_sections_to_segments (abfd, link_info, NULL))
5925 return false;
5926
5927 alloc = 0;
5928 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
5929 m->idx = alloc++;
5930
5931 if (alloc)
5932 {
5933 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
5934 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
5935 }
5936 else
5937 {
5938 /* PR binutils/12467. */
5939 elf_elfheader (abfd)->e_phoff = 0;
5940 elf_elfheader (abfd)->e_phentsize = 0;
5941 }
5942
5943 elf_elfheader (abfd)->e_phnum = alloc;
5944
5945 if (elf_program_header_size (abfd) == (bfd_size_type) -1)
5946 {
5947 actual = alloc;
5948 elf_program_header_size (abfd) = alloc * bed->s->sizeof_phdr;
5949 }
5950 else
5951 {
5952 actual = elf_program_header_size (abfd) / bed->s->sizeof_phdr;
5953 BFD_ASSERT (elf_program_header_size (abfd)
5954 == actual * bed->s->sizeof_phdr);
5955 BFD_ASSERT (actual >= alloc);
5956 }
5957
5958 if (alloc == 0)
5959 {
5960 elf_next_file_pos (abfd) = bed->s->sizeof_ehdr;
5961 return true;
5962 }
5963
5964 /* We're writing the size in elf_program_header_size (abfd),
5965 see assign_file_positions_except_relocs, so make sure we have
5966 that amount allocated, with trailing space cleared.
5967 The variable alloc contains the computed need, while
5968 elf_program_header_size (abfd) contains the size used for the
5969 layout.
5970 See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments
5971 where the layout is forced to according to a larger size in the
5972 last iterations for the testcase ld-elf/header. */
5973 phdrs = bfd_zalloc (abfd, (actual * sizeof (*phdrs)
5974 + alloc * sizeof (*sorted_seg_map)));
5975 sorted_seg_map = (struct elf_segment_map **) (phdrs + actual);
5976 elf_tdata (abfd)->phdr = phdrs;
5977 if (phdrs == NULL)
5978 return false;
5979
5980 for (m = elf_seg_map (abfd), j = 0; m != NULL; m = m->next, j++)
5981 {
5982 sorted_seg_map[j] = m;
5983 /* If elf_segment_map is not from map_sections_to_segments, the
5984 sections may not be correctly ordered. NOTE: sorting should
5985 not be done to the PT_NOTE section of a corefile, which may
5986 contain several pseudo-sections artificially created by bfd.
5987 Sorting these pseudo-sections breaks things badly. */
5988 if (m->count > 1
5989 && !(elf_elfheader (abfd)->e_type == ET_CORE
5990 && m->p_type == PT_NOTE))
5991 {
5992 for (i = 0; i < m->count; i++)
5993 m->sections[i]->target_index = i;
5994 qsort (m->sections, (size_t) m->count, sizeof (asection *),
5995 elf_sort_sections);
5996 }
5997 }
5998 if (alloc > 1)
5999 qsort (sorted_seg_map, alloc, sizeof (*sorted_seg_map),
6000 elf_sort_segments);
6001
6002 maxpagesize = 1;
6003 if ((abfd->flags & D_PAGED) != 0)
6004 {
6005 if (link_info != NULL)
6006 maxpagesize = link_info->maxpagesize;
6007 else
6008 maxpagesize = bed->maxpagesize;
6009 }
6010
6011 /* Sections must map to file offsets past the ELF file header. */
6012 off = bed->s->sizeof_ehdr;
6013 /* And if one of the PT_LOAD headers doesn't include the program
6014 headers then we'll be mapping program headers in the usual
6015 position after the ELF file header. */
6016 phdr_load_seg = NULL;
6017 for (j = 0; j < alloc; j++)
6018 {
6019 m = sorted_seg_map[j];
6020 if (m->p_type != PT_LOAD)
6021 break;
6022 if (m->includes_phdrs)
6023 {
6024 phdr_load_seg = m;
6025 break;
6026 }
6027 }
6028 if (phdr_load_seg == NULL)
6029 off += actual * bed->s->sizeof_phdr;
6030
6031 for (j = 0; j < alloc; j++)
6032 {
6033 asection **secpp;
6034 bfd_vma off_adjust; /* Octets. */
6035 bool no_contents;
6036 bfd_size_type align_pagesize;
6037
6038 /* An ELF segment (described by Elf_Internal_Phdr) may contain a
6039 number of sections with contents contributing to both p_filesz
6040 and p_memsz, followed by a number of sections with no contents
6041 that just contribute to p_memsz. In this loop, OFF tracks next
6042 available file offset for PT_LOAD and PT_NOTE segments. */
6043 m = sorted_seg_map[j];
6044 p = phdrs + m->idx;
6045 p->p_type = m->p_type;
6046 p->p_flags = m->p_flags;
6047
6048 if (m->count == 0)
6049 p->p_vaddr = m->p_vaddr_offset * opb;
6050 else
6051 p->p_vaddr = (m->sections[0]->vma + m->p_vaddr_offset) * opb;
6052
6053 if (m->p_paddr_valid)
6054 p->p_paddr = m->p_paddr;
6055 else if (m->count == 0)
6056 p->p_paddr = 0;
6057 else
6058 p->p_paddr = (m->sections[0]->lma + m->p_vaddr_offset) * opb;
6059
6060 align_pagesize = 0;
6061 if (p->p_type == PT_LOAD
6062 && (abfd->flags & D_PAGED) != 0)
6063 {
6064 /* p_align in demand paged PT_LOAD segments effectively stores
6065 the maximum page size. When copying an executable with
6066 objcopy, we set m->p_align from the input file. Use this
6067 value for maxpagesize rather than bed->maxpagesize, which
6068 may be different. Note that we use maxpagesize for PT_TLS
6069 segment alignment later in this function, so we are relying
6070 on at least one PT_LOAD segment appearing before a PT_TLS
6071 segment. */
6072 if (m->p_align_valid)
6073 maxpagesize = m->p_align;
6074 else if (bed->p_align != 0
6075 && (link_info == NULL
6076 || !link_info->maxpagesize_is_set))
6077 /* We will lay out this binary using maxpagesize but set
6078 p->p_align later to the possibly smaller bed->p_align.
6079 The run-time loader will then be able to load this
6080 binary when the system page size is maxpagesize, but if
6081 the system page size is smaller can use p->p_align.
6082 In either case p->p_align will be increased if
6083 necessary to match section alignment. */
6084 align_pagesize = bed->p_align;
6085
6086 p->p_align = maxpagesize;
6087 }
6088 else if (m->p_align_valid)
6089 p->p_align = m->p_align;
6090 else if (m->count == 0)
6091 p->p_align = 1 << bed->s->log_file_align;
6092
6093 if (m == phdr_load_seg)
6094 off += actual * bed->s->sizeof_phdr;
6095
6096 no_contents = false;
6097 off_adjust = 0;
6098 if (p->p_type == PT_LOAD
6099 && m->count > 0)
6100 {
6101 bfd_size_type align; /* Bytes. */
6102 unsigned int align_power = 0;
6103
6104 if (m->p_align_valid)
6105 align = p->p_align;
6106 else
6107 {
6108 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
6109 {
6110 unsigned int secalign;
6111
6112 secalign = bfd_section_alignment (*secpp);
6113 if (secalign > align_power)
6114 align_power = secalign;
6115 }
6116 align = (bfd_size_type) 1 << align_power;
6117 /* If a section requires alignment higher than the
6118 minimum p_align value, don't reduce a maxpagesize
6119 p->p_align set earlier in this function. */
6120 if (align > bed->p_align)
6121 align_pagesize = 0;
6122 if (align < maxpagesize)
6123 align = maxpagesize;
6124 else
6125 {
6126 /* If a section requires alignment higher than the
6127 maximum page size, set p_align to the section
6128 alignment. */
6129 if ((abfd->flags & D_PAGED) != 0)
6130 p->p_align = align;
6131 }
6132 }
6133
6134 for (i = 0; i < m->count; i++)
6135 if ((m->sections[i]->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
6136 /* If we aren't making room for this section, then
6137 it must be SHT_NOBITS regardless of what we've
6138 set via struct bfd_elf_special_section. */
6139 elf_section_type (m->sections[i]) = SHT_NOBITS;
6140
6141 /* Find out whether this segment contains any loadable
6142 sections. */
6143 no_contents = true;
6144 for (i = 0; i < m->count; i++)
6145 if (elf_section_type (m->sections[i]) != SHT_NOBITS)
6146 {
6147 no_contents = false;
6148 break;
6149 }
6150
6151 off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align * opb);
6152
6153 /* Broken hardware and/or kernel require that files do not
6154 map the same page with different permissions on some hppa
6155 processors. */
6156 if (j != 0
6157 && (abfd->flags & D_PAGED) != 0
6158 && bed->no_page_alias
6159 && (off & (maxpagesize - 1)) != 0
6160 && ((off & -maxpagesize)
6161 == ((off + off_adjust) & -maxpagesize)))
6162 off_adjust += maxpagesize;
6163 off += off_adjust;
6164 if (no_contents)
6165 {
6166 /* We shouldn't need to align the segment on disk since
6167 the segment doesn't need file space, but the gABI
6168 arguably requires the alignment and glibc ld.so
6169 checks it. So to comply with the alignment
6170 requirement but not waste file space, we adjust
6171 p_offset for just this segment. (OFF_ADJUST is
6172 subtracted from OFF later.) This may put p_offset
6173 past the end of file, but that shouldn't matter. */
6174 }
6175 else
6176 off_adjust = 0;
6177 }
6178 /* Make sure the .dynamic section is the first section in the
6179 PT_DYNAMIC segment. */
6180 else if (p->p_type == PT_DYNAMIC
6181 && m->count > 1
6182 && ! streq (m->sections[0]->name, ".dynamic"))
6183 {
6184 _bfd_error_handler
6185 (_("%pB: The first section in the PT_DYNAMIC segment"
6186 " is not the .dynamic section"),
6187 abfd);
6188 bfd_set_error (bfd_error_bad_value);
6189 return false;
6190 }
6191 /* Set the note section type to SHT_NOTE. */
6192 else if (p->p_type == PT_NOTE)
6193 for (i = 0; i < m->count; i++)
6194 elf_section_type (m->sections[i]) = SHT_NOTE;
6195
6196 if (m->includes_filehdr)
6197 {
6198 if (!m->p_flags_valid)
6199 p->p_flags |= PF_R;
6200 p->p_filesz = bed->s->sizeof_ehdr;
6201 p->p_memsz = bed->s->sizeof_ehdr;
6202 if (p->p_type == PT_LOAD)
6203 {
6204 if (m->count > 0)
6205 {
6206 if (p->p_vaddr < (bfd_vma) off
6207 || (!m->p_paddr_valid
6208 && p->p_paddr < (bfd_vma) off))
6209 {
6210 _bfd_error_handler
6211 (_("%pB: not enough room for program headers,"
6212 " try linking with -N"),
6213 abfd);
6214 bfd_set_error (bfd_error_bad_value);
6215 return false;
6216 }
6217 p->p_vaddr -= off;
6218 if (!m->p_paddr_valid)
6219 p->p_paddr -= off;
6220 }
6221 }
6222 else if (sorted_seg_map[0]->includes_filehdr)
6223 {
6224 Elf_Internal_Phdr *filehdr = phdrs + sorted_seg_map[0]->idx;
6225 p->p_vaddr = filehdr->p_vaddr;
6226 if (!m->p_paddr_valid)
6227 p->p_paddr = filehdr->p_paddr;
6228 }
6229 }
6230
6231 if (m->includes_phdrs)
6232 {
6233 if (!m->p_flags_valid)
6234 p->p_flags |= PF_R;
6235 p->p_filesz += actual * bed->s->sizeof_phdr;
6236 p->p_memsz += actual * bed->s->sizeof_phdr;
6237 if (!m->includes_filehdr)
6238 {
6239 if (p->p_type == PT_LOAD)
6240 {
6241 p->p_offset = off - actual * bed->s->sizeof_phdr;
6242 elf_elfheader (abfd)->e_phoff = p->p_offset;
6243 if (m->count > 0)
6244 {
6245 p->p_vaddr -= off - p->p_offset;
6246 if (!m->p_paddr_valid)
6247 p->p_paddr -= off - p->p_offset;
6248 }
6249 }
6250 else if (phdr_load_seg != NULL)
6251 {
6252 /* Also set PT_PHDR to match phdr_load_seg. We've
6253 sorted segments so that phdr_load_seg will
6254 already be set by the code immediately above. */
6255 Elf_Internal_Phdr *phdr = phdrs + phdr_load_seg->idx;
6256 bfd_vma phdr_off = 0; /* Octets. */
6257 if (phdr_load_seg->includes_filehdr)
6258 phdr_off = bed->s->sizeof_ehdr;
6259 p->p_vaddr = phdr->p_vaddr + phdr_off;
6260 if (!m->p_paddr_valid)
6261 p->p_paddr = phdr->p_paddr + phdr_off;
6262 p->p_offset = phdr->p_offset + phdr_off;
6263 }
6264 else
6265 p->p_offset = bed->s->sizeof_ehdr;
6266 }
6267 }
6268
6269 if (p->p_type == PT_LOAD
6270 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
6271 {
6272 if (!m->includes_filehdr && !m->includes_phdrs)
6273 {
6274 p->p_offset = off;
6275 if (no_contents)
6276 {
6277 /* Put meaningless p_offset for PT_LOAD segments
6278 without file contents somewhere within the first
6279 page, in an attempt to not point past EOF. */
6280 bfd_size_type align = maxpagesize;
6281 if (align < p->p_align)
6282 align = p->p_align;
6283 if (align < 1)
6284 align = 1;
6285 /* Avoid p_offset of zero, which might be wrongly
6286 interpreted as the segment being the first one,
6287 containing the file header. PR32763. */
6288 p->p_offset = (off + align - 1) % align + 1;
6289 }
6290 }
6291 else
6292 {
6293 file_ptr adjust; /* Octets. */
6294
6295 adjust = off - (p->p_offset + p->p_filesz);
6296 if (!no_contents)
6297 p->p_filesz += adjust;
6298 p->p_memsz += adjust;
6299 }
6300 }
6301
6302 if (align_pagesize)
6303 p->p_align = align_pagesize;
6304
6305 /* Set up p_filesz, p_memsz, p_align and p_flags from the section
6306 maps. Set filepos for sections in PT_LOAD segments, and in
6307 core files, for sections in PT_NOTE segments.
6308 assign_file_positions_for_non_load_sections will set filepos
6309 for other sections and update p_filesz for other segments. */
6310 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
6311 {
6312 asection *sec;
6313 bfd_size_type align;
6314 Elf_Internal_Shdr *this_hdr;
6315
6316 sec = *secpp;
6317 this_hdr = &elf_section_data (sec)->this_hdr;
6318 align = (bfd_size_type) 1 << bfd_section_alignment (sec);
6319
6320 if ((p->p_type == PT_LOAD
6321 || p->p_type == PT_TLS)
6322 && (this_hdr->sh_type != SHT_NOBITS
6323 || ((this_hdr->sh_flags & SHF_ALLOC) != 0
6324 && ((this_hdr->sh_flags & SHF_TLS) == 0
6325 || p->p_type == PT_TLS))))
6326 {
6327 bfd_vma p_start = p->p_paddr; /* Octets. */
6328 bfd_vma p_end = p_start + p->p_memsz; /* Octets. */
6329 bfd_vma s_start = sec->lma * opb; /* Octets. */
6330 bfd_vma adjust = s_start - p_end; /* Octets. */
6331
6332 if (adjust != 0
6333 && (s_start < p_end
6334 || p_end < p_start))
6335 {
6336 _bfd_error_handler
6337 /* xgettext:c-format */
6338 (_("%pB: section %pA lma %#" PRIx64
6339 " adjusted to %#" PRIx64),
6340 abfd, sec, (uint64_t) s_start / opb,
6341 (uint64_t) p_end / opb);
6342 adjust = 0;
6343 sec->lma = p_end / opb;
6344 }
6345 p->p_memsz += adjust;
6346
6347 if (p->p_type == PT_LOAD)
6348 {
6349 if (this_hdr->sh_type != SHT_NOBITS)
6350 {
6351 off_adjust = 0;
6352 if (p->p_filesz + adjust < p->p_memsz)
6353 {
6354 /* We have a PROGBITS section following NOBITS ones.
6355 Allocate file space for the NOBITS section(s).
6356 We don't need to write out the zeros, posix
6357 fseek past the end of data already written
6358 followed by a write at that location is
6359 guaranteed to result in zeros being read
6360 from the gap. */
6361 adjust = p->p_memsz - p->p_filesz;
6362 }
6363 }
6364 /* We only adjust sh_offset in SHT_NOBITS sections
6365 as would seem proper for their address when the
6366 section is first in the segment. sh_offset
6367 doesn't really have any significance for
6368 SHT_NOBITS anyway, apart from a notional position
6369 relative to other sections. Historically we
6370 didn't bother with adjusting sh_offset and some
6371 programs depend on it not being adjusted. See
6372 pr12921 and pr25662. */
6373 if (this_hdr->sh_type != SHT_NOBITS || i == 0)
6374 {
6375 off += adjust;
6376 if (this_hdr->sh_type == SHT_NOBITS)
6377 off_adjust += adjust;
6378 }
6379 }
6380 if (this_hdr->sh_type != SHT_NOBITS)
6381 p->p_filesz += adjust;
6382 }
6383
6384 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
6385 {
6386 /* The section at i == 0 is the one that actually contains
6387 everything. */
6388 if (i == 0)
6389 {
6390 this_hdr->sh_offset = sec->filepos = off;
6391 off += this_hdr->sh_size;
6392 p->p_filesz = this_hdr->sh_size;
6393 p->p_memsz = 0;
6394 p->p_align = 1;
6395 }
6396 else
6397 {
6398 /* The rest are fake sections that shouldn't be written. */
6399 sec->filepos = 0;
6400 sec->size = 0;
6401 sec->flags = 0;
6402 continue;
6403 }
6404 }
6405 else
6406 {
6407 if (this_hdr->sh_type == SHT_NOBITS
6408 && (this_hdr->sh_flags & SHF_TLS) != 0
6409 && this_hdr->sh_offset == 0)
6410 {
6411 /* Set sh_offset for .tbss sections to their nominal
6412 offset after aligning. They are not loaded from
6413 disk so the value doesn't really matter, except
6414 when the .tbss section is the first one in a
6415 PT_TLS segment. In that case it sets the
6416 p_offset for the PT_TLS segment, which according
6417 to the ELF gABI ought to satisfy
6418 p_offset % p_align == p_vaddr % p_align. */
6419 bfd_vma adjust = vma_page_aligned_bias (this_hdr->sh_addr,
6420 off, align);
6421 this_hdr->sh_offset = sec->filepos = off + adjust;
6422 }
6423 else if (p->p_type == PT_LOAD)
6424 {
6425 this_hdr->sh_offset = sec->filepos = off;
6426 if (this_hdr->sh_type != SHT_NOBITS)
6427 off += this_hdr->sh_size;
6428 }
6429
6430 if (this_hdr->sh_type != SHT_NOBITS)
6431 {
6432 p->p_filesz += this_hdr->sh_size;
6433 /* A load section without SHF_ALLOC is something like
6434 a note section in a PT_NOTE segment. These take
6435 file space but are not loaded into memory. */
6436 if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
6437 p->p_memsz += this_hdr->sh_size;
6438 }
6439 else if ((this_hdr->sh_flags & SHF_ALLOC) != 0)
6440 {
6441 if (p->p_type == PT_TLS)
6442 p->p_memsz += this_hdr->sh_size;
6443
6444 /* .tbss is special. It doesn't contribute to p_memsz of
6445 normal segments. */
6446 else if ((this_hdr->sh_flags & SHF_TLS) == 0)
6447 p->p_memsz += this_hdr->sh_size;
6448 }
6449
6450 if (align > p->p_align
6451 && !m->p_align_valid
6452 && (p->p_type != PT_LOAD
6453 || (abfd->flags & D_PAGED) == 0))
6454 p->p_align = align;
6455 }
6456
6457 if (!m->p_flags_valid)
6458 {
6459 p->p_flags |= PF_R;
6460 if ((this_hdr->sh_flags & SHF_EXECINSTR) != 0)
6461 p->p_flags |= PF_X;
6462 if ((this_hdr->sh_flags & SHF_WRITE) != 0)
6463 p->p_flags |= PF_W;
6464 }
6465 }
6466
6467 off -= off_adjust;
6468
6469 /* PR ld/20815 - Check that the program header segment, if
6470 present, will be loaded into memory. */
6471 if (p->p_type == PT_PHDR
6472 && phdr_load_seg == NULL
6473 && !(bed->elf_backend_allow_non_load_phdr != NULL
6474 && bed->elf_backend_allow_non_load_phdr (abfd, phdrs, alloc)))
6475 {
6476 /* The fix for this error is usually to edit the linker script being
6477 used and set up the program headers manually. Either that or
6478 leave room for the headers at the start of the SECTIONS. */
6479 _bfd_error_handler (_("%pB: error: PHDR segment not covered"
6480 " by LOAD segment"),
6481 abfd);
6482 if (link_info == NULL)
6483 return false;
6484 /* Arrange for the linker to exit with an error, deleting
6485 the output file unless --noinhibit-exec is given. */
6486 link_info->callbacks->info ("%X");
6487 }
6488
6489 /* Check that all sections are in a PT_LOAD segment.
6490 Don't check funky gdb generated core files. */
6491 if (p->p_type == PT_LOAD && bfd_get_format (abfd) != bfd_core)
6492 {
6493 bool check_vma = true;
6494
6495 for (i = 1; i < m->count; i++)
6496 if (m->sections[i]->vma == m->sections[i - 1]->vma
6497 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i])
6498 ->this_hdr), p) != 0
6499 && ELF_SECTION_SIZE (&(elf_section_data (m->sections[i - 1])
6500 ->this_hdr), p) != 0)
6501 {
6502 /* Looks like we have overlays packed into the segment. */
6503 check_vma = false;
6504 break;
6505 }
6506
6507 for (i = 0; i < m->count; i++)
6508 {
6509 Elf_Internal_Shdr *this_hdr;
6510 asection *sec;
6511
6512 sec = m->sections[i];
6513 this_hdr = &(elf_section_data(sec)->this_hdr);
6514 if (!ELF_SECTION_IN_SEGMENT_1 (this_hdr, p, check_vma, 0)
6515 && !ELF_TBSS_SPECIAL (this_hdr, p))
6516 {
6517 _bfd_error_handler
6518 /* xgettext:c-format */
6519 (_("%pB: section `%pA' can't be allocated in segment %u"),
6520 abfd, sec, m->idx);
6521 print_segment_map (m);
6522 }
6523 }
6524 }
6525 }
6526
6527 elf_next_file_pos (abfd) = off;
6528
6529 if (link_info != NULL
6530 && phdr_load_seg != NULL
6531 && phdr_load_seg->includes_filehdr)
6532 {
6533 /* There is a segment that contains both the file headers and the
6534 program headers, so provide a symbol __ehdr_start pointing there.
6535 A program can use this to examine itself robustly. */
6536
6537 struct elf_link_hash_table *htab = elf_hash_table (link_info);
6538 struct elf_link_hash_entry *hash = htab->hehdr_start;
6539
6540 /* If the symbol was referenced and not defined, define it. */
6541 if (hash != NULL
6542 && (hash->root.type == bfd_link_hash_new
6543 || hash->root.type == bfd_link_hash_undefined
6544 || hash->root.type == bfd_link_hash_undefweak
6545 || hash->root.type == bfd_link_hash_common))
6546 {
6547 asection *s = NULL;
6548 bfd_vma filehdr_vaddr = phdrs[phdr_load_seg->idx].p_vaddr / opb;
6549
6550 if (phdr_load_seg->count != 0)
6551 /* The segment contains sections, so use the first one. */
6552 s = phdr_load_seg->sections[0];
6553 else
6554 /* Use the first (i.e. lowest-addressed) section in any segment. */
6555 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
6556 if (m->p_type == PT_LOAD && m->count != 0)
6557 {
6558 s = m->sections[0];
6559 break;
6560 }
6561
6562 if (s != NULL)
6563 {
6564 hash->root.u.def.value = filehdr_vaddr - s->vma;
6565 hash->root.u.def.section = s;
6566 }
6567 else
6568 {
6569 hash->root.u.def.value = filehdr_vaddr;
6570 hash->root.u.def.section = bfd_abs_section_ptr;
6571 }
6572
6573 hash->root.type = bfd_link_hash_defined;
6574 hash->def_regular = 1;
6575 hash->non_elf = 0;
6576 }
6577 }
6578
6579 return true;
6580 }
6581
6582 /* Determine if a bfd is a debuginfo file. Unfortunately there
6583 is no defined method for detecting such files, so we have to
6584 use heuristics instead. */
6585
6586 bool
6587 is_debuginfo_file (bfd *abfd)
6588 {
6589 if (abfd == NULL || bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6590 return false;
6591
6592 Elf_Internal_Shdr **start_headers = elf_elfsections (abfd);
6593 Elf_Internal_Shdr **end_headers = start_headers + elf_numsections (abfd);
6594 Elf_Internal_Shdr **headerp;
6595
6596 for (headerp = start_headers; headerp < end_headers; headerp ++)
6597 {
6598 Elf_Internal_Shdr *header = * headerp;
6599
6600 /* Debuginfo files do not have any allocated SHT_PROGBITS sections.
6601 The only allocated sections are SHT_NOBITS or SHT_NOTES. */
6602 if ((header->sh_flags & SHF_ALLOC) == SHF_ALLOC
6603 && header->sh_type != SHT_NOBITS
6604 && header->sh_type != SHT_NOTE)
6605 return false;
6606 }
6607
6608 return true;
6609 }
6610
6611 /* Assign file positions for other sections, except for compressed debug
6612 and sections assigned in _bfd_elf_assign_file_positions_for_non_load. */
6613
6614 static bool
6615 assign_file_positions_for_non_load_sections (bfd *abfd,
6616 struct bfd_link_info *link_info)
6617 {
6618 elf_backend_data *bed = get_elf_backend_data (abfd);
6619 Elf_Internal_Shdr **i_shdrpp;
6620 Elf_Internal_Shdr **hdrpp, **end_hdrpp;
6621 Elf_Internal_Phdr *phdrs;
6622 Elf_Internal_Phdr *p;
6623 struct elf_segment_map *m;
6624 file_ptr off;
6625 unsigned int opb = bfd_octets_per_byte (abfd, NULL);
6626 bfd_vma maxpagesize;
6627
6628 if (link_info != NULL)
6629 maxpagesize = link_info->maxpagesize;
6630 else
6631 maxpagesize = bed->maxpagesize;
6632 i_shdrpp = elf_elfsections (abfd);
6633 end_hdrpp = i_shdrpp + elf_numsections (abfd);
6634 off = elf_next_file_pos (abfd);
6635 for (hdrpp = i_shdrpp + 1; hdrpp < end_hdrpp; hdrpp++)
6636 {
6637 Elf_Internal_Shdr *hdr;
6638 bfd_vma align;
6639
6640 hdr = *hdrpp;
6641 if (hdr->bfd_section != NULL
6642 && (hdr->bfd_section->filepos != 0
6643 || (hdr->sh_type == SHT_NOBITS
6644 && hdr->contents == NULL)))
6645 BFD_ASSERT (hdr->sh_offset == hdr->bfd_section->filepos);
6646 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
6647 {
6648 if (hdr->sh_size != 0
6649 /* PR 24717 - debuginfo files are known to be not strictly
6650 compliant with the ELF standard. In particular they often
6651 have .note.gnu.property sections that are outside of any
6652 loadable segment. This is not a problem for such files,
6653 so do not warn about them. */
6654 && ! is_debuginfo_file (abfd))
6655 _bfd_error_handler
6656 /* xgettext:c-format */
6657 (_("%pB: warning: allocated section `%s' not in segment"),
6658 abfd,
6659 (hdr->bfd_section == NULL
6660 ? "*unknown*"
6661 : hdr->bfd_section->name));
6662 /* We don't need to page align empty sections. */
6663 if ((abfd->flags & D_PAGED) != 0 && hdr->sh_size != 0)
6664 align = maxpagesize;
6665 else
6666 align = hdr->sh_addralign & -hdr->sh_addralign;
6667 off += vma_page_aligned_bias (hdr->sh_addr, off, align);
6668 off = _bfd_elf_assign_file_position_for_section (hdr, off, false,
6669 bed->s->log_file_align);
6670 }
6671 else if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6672 && hdr->bfd_section == NULL)
6673 /* We don't know the offset of these sections yet:
6674 their size has not been decided. */
6675 || (abfd->is_linker_output
6676 && hdr->bfd_section != NULL
6677 && (hdr->sh_name == -1u
6678 || bfd_section_is_ctf (hdr->bfd_section)))
6679 || hdr == i_shdrpp[elf_onesymtab (abfd)]
6680 || (elf_symtab_shndx_list (abfd) != NULL
6681 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6682 || hdr == i_shdrpp[elf_strtab_sec (abfd)]
6683 || hdr == i_shdrpp[elf_shstrtab_sec (abfd)])
6684 hdr->sh_offset = -1;
6685 else
6686 off = _bfd_elf_assign_file_position_for_section (hdr, off, true, 0);
6687 }
6688 elf_next_file_pos (abfd) = off;
6689
6690 /* Now that we have set the section file positions, we can set up
6691 the file positions for the non PT_LOAD segments. */
6692 phdrs = elf_tdata (abfd)->phdr;
6693 for (m = elf_seg_map (abfd), p = phdrs; m != NULL; m = m->next, p++)
6694 {
6695 if (p->p_type == PT_GNU_RELRO)
6696 {
6697 bfd_vma start, end; /* Bytes. */
6698 bool ok;
6699
6700 if (link_info != NULL)
6701 {
6702 /* During linking the range of the RELRO segment is passed
6703 in link_info. Note that there may be padding between
6704 relro_start and the first RELRO section. */
6705 start = link_info->relro_start;
6706 end = link_info->relro_end;
6707 }
6708 else if (m->count != 0)
6709 {
6710 if (!m->p_size_valid)
6711 abort ();
6712 start = m->sections[0]->vma;
6713 end = start + m->p_size / opb;
6714 }
6715 else
6716 {
6717 start = 0;
6718 end = 0;
6719 }
6720
6721 ok = false;
6722 if (start < end)
6723 {
6724 struct elf_segment_map *lm;
6725 const Elf_Internal_Phdr *lp;
6726 unsigned int i;
6727
6728 /* Find a LOAD segment containing a section in the RELRO
6729 segment. */
6730 for (lm = elf_seg_map (abfd), lp = phdrs;
6731 lm != NULL;
6732 lm = lm->next, lp++)
6733 {
6734 if (lp->p_type == PT_LOAD
6735 && lm->count != 0
6736 && (lm->sections[lm->count - 1]->vma
6737 + (!IS_TBSS (lm->sections[lm->count - 1])
6738 ? lm->sections[lm->count - 1]->size / opb
6739 : 0)) > start
6740 && lm->sections[0]->vma < end)
6741 break;
6742 }
6743
6744 if (lm != NULL)
6745 {
6746 /* Find the section starting the RELRO segment. */
6747 for (i = 0; i < lm->count; i++)
6748 {
6749 asection *s = lm->sections[i];
6750 if (s->vma >= start
6751 && s->vma < end
6752 && s->size != 0)
6753 break;
6754 }
6755
6756 if (i < lm->count)
6757 {
6758 p->p_vaddr = lm->sections[i]->vma * opb;
6759 p->p_paddr = lm->sections[i]->lma * opb;
6760 p->p_offset = lm->sections[i]->filepos;
6761 p->p_memsz = end * opb - p->p_vaddr;
6762 p->p_filesz = p->p_memsz;
6763
6764 /* The RELRO segment typically ends a few bytes
6765 into .got.plt but other layouts are possible.
6766 In cases where the end does not match any
6767 loaded section (for instance is in file
6768 padding), trim p_filesz back to correspond to
6769 the end of loaded section contents. */
6770 if (p->p_filesz > lp->p_vaddr + lp->p_filesz - p->p_vaddr)
6771 p->p_filesz = lp->p_vaddr + lp->p_filesz - p->p_vaddr;
6772
6773 /* Preserve the alignment and flags if they are
6774 valid. The gold linker generates RW/4 for
6775 the PT_GNU_RELRO section. It is better for
6776 objcopy/strip to honor these attributes
6777 otherwise gdb will choke when using separate
6778 debug files. */
6779 if (!m->p_align_valid)
6780 p->p_align = 1;
6781 if (!m->p_flags_valid)
6782 p->p_flags = PF_R;
6783 ok = true;
6784 }
6785 }
6786 }
6787
6788 if (!ok)
6789 {
6790 if (link_info != NULL)
6791 _bfd_error_handler
6792 (_("%pB: warning: unable to allocate any sections"
6793 " to PT_GNU_RELRO segment"),
6794 abfd);
6795 memset (p, 0, sizeof *p);
6796 }
6797 }
6798 else if (p->p_type == PT_GNU_STACK)
6799 {
6800 if (m->p_size_valid)
6801 p->p_memsz = m->p_size;
6802 }
6803 else if (m->count != 0)
6804 {
6805 unsigned int i;
6806
6807 if (p->p_type != PT_LOAD
6808 && (p->p_type != PT_NOTE
6809 || bfd_get_format (abfd) != bfd_core))
6810 {
6811 /* A user specified segment layout may include a PHDR
6812 segment that overlaps with a LOAD segment... */
6813 if (p->p_type == PT_PHDR)
6814 {
6815 m->count = 0;
6816 continue;
6817 }
6818
6819 if (m->includes_filehdr || m->includes_phdrs)
6820 {
6821 /* PR 17512: file: 2195325e. */
6822 _bfd_error_handler
6823 (_("%pB: error: non-load segment %d includes file header "
6824 "and/or program header"),
6825 abfd, (int) (p - phdrs));
6826 return false;
6827 }
6828
6829 p->p_filesz = 0;
6830 p->p_offset = m->sections[0]->filepos;
6831 for (i = m->count; i-- != 0;)
6832 {
6833 asection *sect = m->sections[i];
6834 Elf_Internal_Shdr *hdr = &elf_section_data (sect)->this_hdr;
6835 if (hdr->sh_type != SHT_NOBITS)
6836 {
6837 p->p_filesz = sect->filepos - p->p_offset + hdr->sh_size;
6838 /* NB: p_memsz of the loadable PT_NOTE segment
6839 should be the same as p_filesz. */
6840 if (p->p_type == PT_NOTE
6841 && (hdr->sh_flags & SHF_ALLOC) != 0)
6842 p->p_memsz = p->p_filesz;
6843 break;
6844 }
6845 }
6846 }
6847 }
6848 }
6849
6850 return true;
6851 }
6852
6853 static elf_section_list *
6854 find_section_in_list (unsigned int i, elf_section_list * list)
6855 {
6856 for (;list != NULL; list = list->next)
6857 if (list->ndx == i)
6858 break;
6859 return list;
6860 }
6861
6862 /* Work out the file positions of all the sections. This is called by
6863 _bfd_elf_compute_section_file_positions. All the section sizes and
6864 VMAs must be known before this is called.
6865
6866 Reloc sections come in two flavours: Those processed specially as
6867 "side-channel" data attached to a section to which they apply, and
6868 those that bfd doesn't process as relocations. The latter sort are
6869 stored in a normal bfd section by bfd_section_from_shdr. We don't
6870 consider the former sort here, unless they form part of the loadable
6871 image. Reloc sections not assigned here (and compressed debugging
6872 sections and CTF sections which nothing else in the file can rely
6873 upon) will be handled later by assign_file_positions_for_relocs.
6874
6875 We also don't set the positions of the .symtab and .strtab here. */
6876
6877 static bool
6878 assign_file_positions_except_relocs (bfd *abfd,
6879 struct bfd_link_info *link_info)
6880 {
6881 struct elf_obj_tdata *tdata = elf_tdata (abfd);
6882 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
6883 elf_backend_data *bed = get_elf_backend_data (abfd);
6884 unsigned int alloc;
6885
6886 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
6887 && bfd_get_format (abfd) != bfd_core)
6888 {
6889 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
6890 unsigned int num_sec = elf_numsections (abfd);
6891 Elf_Internal_Shdr **hdrpp;
6892 unsigned int i;
6893 file_ptr off;
6894
6895 /* Start after the ELF header. */
6896 off = i_ehdrp->e_ehsize;
6897
6898 /* We are not creating an executable, which means that we are
6899 not creating a program header, and that the actual order of
6900 the sections in the file is unimportant. */
6901 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
6902 {
6903 Elf_Internal_Shdr *hdr;
6904
6905 hdr = *hdrpp;
6906 if (((hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
6907 && hdr->bfd_section == NULL)
6908 /* Do not assign offsets for these sections yet: we don't know
6909 their sizes. */
6910 || (abfd->is_linker_output
6911 && hdr->bfd_section != NULL
6912 && (hdr->sh_name == -1u
6913 || bfd_section_is_ctf (hdr->bfd_section)))
6914 || i == elf_onesymtab (abfd)
6915 || (elf_symtab_shndx_list (abfd) != NULL
6916 && hdr == i_shdrpp[elf_symtab_shndx_list (abfd)->ndx])
6917 || i == elf_strtab_sec (abfd)
6918 || i == elf_shstrtab_sec (abfd))
6919 {
6920 hdr->sh_offset = -1;
6921 }
6922 else
6923 /* There shouldn't be a need to effect "capped" file alignment here,
6924 yet at least the Linux kernel's modpost utility was found to be
6925 unhappy without. While the issue was addressed there, let's be
6926 kind for at least the foreseeable future ... */
6927 off = _bfd_elf_assign_file_position_for_section (hdr, off, false,
6928 bed->s->log_file_align);
6929 }
6930
6931 elf_next_file_pos (abfd) = off;
6932 elf_program_header_size (abfd) = 0;
6933 }
6934 else
6935 {
6936 /* Assign file positions for the loaded sections based on the
6937 assignment of sections to segments. */
6938 if (!assign_file_positions_for_load_sections (abfd, link_info))
6939 return false;
6940
6941 /* And for non-load sections. */
6942 if (!assign_file_positions_for_non_load_sections (abfd, link_info))
6943 return false;
6944 }
6945
6946 if (!(*bed->elf_backend_modify_headers) (abfd, link_info))
6947 return false;
6948
6949 /* Write out the program headers. */
6950 alloc = i_ehdrp->e_phnum;
6951 if (alloc != 0)
6952 {
6953 if (link_info != NULL && ! link_info->no_warn_rwx_segments)
6954 {
6955 bool warned_tls = false;
6956 bool warned_rwx = false;
6957
6958 /* Memory resident segments with non-zero size and RWX
6959 permissions are a security risk, so we generate a warning
6960 here if we are creating any. */
6961 unsigned int i;
6962
6963 for (i = 0; i < alloc; i++)
6964 {
6965 const Elf_Internal_Phdr * phdr = tdata->phdr + i;
6966
6967 if (phdr->p_memsz == 0)
6968 continue;
6969
6970 if (! warned_tls
6971 && phdr->p_type == PT_TLS
6972 && (phdr->p_flags & PF_X))
6973 {
6974 if (link_info->warn_is_error_for_rwx_segments)
6975 {
6976 _bfd_error_handler (_("\
6977 error: %pB has a TLS segment with execute permission"),
6978 abfd);
6979 return false;
6980 }
6981
6982 _bfd_error_handler (_("\
6983 warning: %pB has a TLS segment with execute permission"),
6984 abfd);
6985 if (warned_rwx)
6986 break;
6987
6988 warned_tls = true;
6989 }
6990 else if (! warned_rwx
6991 && phdr->p_type == PT_LOAD
6992 && ((phdr->p_flags & (PF_R | PF_W | PF_X))
6993 == (PF_R | PF_W | PF_X)))
6994 {
6995 if (link_info->warn_is_error_for_rwx_segments)
6996 {
6997 _bfd_error_handler (_("\
6998 error: %pB has a LOAD segment with RWX permissions"),
6999 abfd);
7000 return false;
7001 }
7002
7003 _bfd_error_handler (_("\
7004 warning: %pB has a LOAD segment with RWX permissions"),
7005 abfd);
7006 if (warned_tls)
7007 break;
7008
7009 warned_rwx = true;
7010 }
7011 }
7012 }
7013
7014 if (bfd_seek (abfd, i_ehdrp->e_phoff, SEEK_SET) != 0
7015 || bed->s->write_out_phdrs (abfd, tdata->phdr, alloc) != 0)
7016 return false;
7017 }
7018
7019 return true;
7020 }
7021
7022 bool
7023 _bfd_elf_init_file_header (bfd *abfd,
7024 struct bfd_link_info *info ATTRIBUTE_UNUSED)
7025 {
7026 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */
7027 struct elf_strtab_hash *shstrtab;
7028 elf_backend_data *bed = get_elf_backend_data (abfd);
7029
7030 i_ehdrp = elf_elfheader (abfd);
7031
7032 shstrtab = _bfd_elf_strtab_init ();
7033 if (shstrtab == NULL)
7034 return false;
7035
7036 elf_shstrtab (abfd) = shstrtab;
7037
7038 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
7039 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
7040 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
7041 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
7042
7043 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
7044 i_ehdrp->e_ident[EI_DATA] =
7045 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
7046 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
7047
7048 if ((abfd->flags & DYNAMIC) != 0)
7049 i_ehdrp->e_type = ET_DYN;
7050 else if ((abfd->flags & EXEC_P) != 0)
7051 i_ehdrp->e_type = ET_EXEC;
7052 else if (bfd_get_format (abfd) == bfd_core)
7053 i_ehdrp->e_type = ET_CORE;
7054 else
7055 i_ehdrp->e_type = ET_REL;
7056
7057 switch (bfd_get_arch (abfd))
7058 {
7059 case bfd_arch_unknown:
7060 i_ehdrp->e_machine = EM_NONE;
7061 break;
7062
7063 /* There used to be a long list of cases here, each one setting
7064 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
7065 in the corresponding bfd definition. To avoid duplication,
7066 the switch was removed. Machines that need special handling
7067 can generally do it in elf_backend_final_write_processing(),
7068 unless they need the information earlier than the final write.
7069 Such need can generally be supplied by replacing the tests for
7070 e_machine with the conditions used to determine it. */
7071 default:
7072 i_ehdrp->e_machine = bed->elf_machine_code;
7073 }
7074
7075 i_ehdrp->e_version = bed->s->ev_current;
7076 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
7077
7078 /* No program header, for now. */
7079 i_ehdrp->e_phoff = 0;
7080 i_ehdrp->e_phentsize = 0;
7081 i_ehdrp->e_phnum = 0;
7082
7083 /* Each bfd section is section header entry. */
7084 i_ehdrp->e_entry = bfd_get_start_address (abfd);
7085 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
7086
7087 elf_tdata (abfd)->symtab_hdr.sh_name =
7088 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
7089 elf_tdata (abfd)->strtab_hdr.sh_name =
7090 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
7091 elf_tdata (abfd)->shstrtab_hdr.sh_name =
7092 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
7093 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
7094 || elf_tdata (abfd)->strtab_hdr.sh_name == (unsigned int) -1
7095 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
7096 return false;
7097
7098 return true;
7099 }
7100
7101 /* Set e_type in ELF header to ET_EXEC for -pie -Ttext-segment=.
7102
7103 FIXME: We used to have code here to sort the PT_LOAD segments into
7104 ascending order, as per the ELF spec. But this breaks some programs,
7105 including the Linux kernel. But really either the spec should be
7106 changed or the programs updated. */
7107
7108 bool
7109 _bfd_elf_modify_headers (bfd *obfd, struct bfd_link_info *link_info)
7110 {
7111 if (link_info != NULL && bfd_link_pie (link_info))
7112 {
7113 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (obfd);
7114 unsigned int num_segments = i_ehdrp->e_phnum;
7115 struct elf_obj_tdata *tdata = elf_tdata (obfd);
7116 Elf_Internal_Phdr *segment = tdata->phdr;
7117 Elf_Internal_Phdr *end_segment = &segment[num_segments];
7118
7119 /* Find the lowest p_vaddr in PT_LOAD segments. */
7120 bfd_vma p_vaddr = (bfd_vma) -1;
7121 for (; segment < end_segment; segment++)
7122 if (segment->p_type == PT_LOAD && p_vaddr > segment->p_vaddr)
7123 p_vaddr = segment->p_vaddr;
7124
7125 /* Set e_type to ET_EXEC if the lowest p_vaddr in PT_LOAD
7126 segments is non-zero. */
7127 if (p_vaddr)
7128 i_ehdrp->e_type = ET_EXEC;
7129 }
7130 return true;
7131 }
7132
7133 /* Assign file positions for all the reloc sections which are not part
7134 of the loadable file image, and the file position of section headers. */
7135
7136 static bool
7137 _bfd_elf_assign_file_positions_for_non_load (bfd *abfd)
7138 {
7139 file_ptr off;
7140 Elf_Internal_Shdr **shdrpp, **end_shdrpp;
7141 Elf_Internal_Shdr *shdrp;
7142 Elf_Internal_Ehdr *i_ehdrp;
7143 elf_backend_data *bed = get_elf_backend_data (abfd);
7144
7145 /* Skip non-load sections without section header. */
7146 if ((abfd->flags & BFD_NO_SECTION_HEADER) != 0)
7147 return true;
7148
7149 off = elf_next_file_pos (abfd);
7150
7151 shdrpp = elf_elfsections (abfd);
7152 end_shdrpp = shdrpp + elf_numsections (abfd);
7153 for (shdrpp++; shdrpp < end_shdrpp; shdrpp++)
7154 {
7155 shdrp = *shdrpp;
7156 if (shdrp->sh_offset == -1)
7157 {
7158 asection *sec = shdrp->bfd_section;
7159 if (sec == NULL
7160 || shdrp->sh_type == SHT_REL
7161 || shdrp->sh_type == SHT_RELA)
7162 ;
7163 else if (bfd_section_is_ctf (sec))
7164 {
7165 /* Update section size and contents. */
7166 shdrp->sh_size = sec->size;
7167 shdrp->contents = sec->contents;
7168 }
7169 else if (shdrp->sh_name == -1u)
7170 {
7171 const char *name = sec->name;
7172 struct bfd_elf_section_data *d;
7173
7174 /* Compress DWARF debug sections. */
7175 if (!bfd_compress_section (abfd, sec, shdrp->contents))
7176 return false;
7177
7178 if (sec->compress_status == COMPRESS_SECTION_DONE
7179 && (abfd->flags & BFD_COMPRESS_GABI) == 0
7180 && name[1] == 'd')
7181 {
7182 /* If section is compressed with zlib-gnu, convert
7183 section name from .debug_* to .zdebug_*. */
7184 char *new_name = bfd_debug_name_to_zdebug (abfd, name);
7185 if (new_name == NULL)
7186 return false;
7187 name = new_name;
7188 }
7189 /* Add section name to section name section. */
7190 shdrp->sh_name
7191 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
7192 name, false);
7193 d = elf_section_data (sec);
7194
7195 /* Add reloc section name to section name section. */
7196 if (d->rel.hdr
7197 && !_bfd_elf_set_reloc_sh_name (abfd, d->rel.hdr,
7198 name, false))
7199 return false;
7200 if (d->rela.hdr
7201 && !_bfd_elf_set_reloc_sh_name (abfd, d->rela.hdr,
7202 name, true))
7203 return false;
7204
7205 /* Update section size and contents. */
7206 shdrp->sh_size = sec->size;
7207 shdrp->contents = sec->contents;
7208 sec->contents = NULL;
7209 }
7210
7211 off = _bfd_elf_assign_file_position_for_section (shdrp, off,
7212 (abfd->flags & (EXEC_P | DYNAMIC))
7213 || bfd_get_format (abfd) == bfd_core,
7214 bed->s->log_file_align);
7215 }
7216 }
7217
7218 /* Place section name section after DWARF debug sections have been
7219 compressed. */
7220 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
7221 shdrp = &elf_tdata (abfd)->shstrtab_hdr;
7222 shdrp->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
7223 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true, 0);
7224
7225 /* Place the section headers. */
7226 i_ehdrp = elf_elfheader (abfd);
7227 off = BFD_ALIGN (off, 1u << bed->s->log_file_align);
7228 i_ehdrp->e_shoff = off;
7229 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
7230 elf_next_file_pos (abfd) = off;
7231
7232 return true;
7233 }
7234
7235 bool
7236 _bfd_elf_write_object_contents (bfd *abfd)
7237 {
7238 elf_backend_data *bed = get_elf_backend_data (abfd);
7239 Elf_Internal_Shdr **i_shdrp;
7240 bool failed;
7241 unsigned int count, num_sec;
7242 struct elf_obj_tdata *t;
7243
7244 if (! abfd->output_has_begun
7245 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7246 return false;
7247 /* Do not rewrite ELF data when the BFD has been opened for update.
7248 abfd->output_has_begun was set to TRUE on opening, so creation of
7249 new sections, and modification of existing section sizes was
7250 restricted. This means the ELF header, program headers and
7251 section headers can't have changed. If the contents of any
7252 sections has been modified, then those changes have already been
7253 written to the BFD. */
7254 else if (abfd->direction == both_direction)
7255 {
7256 BFD_ASSERT (abfd->output_has_begun);
7257 return true;
7258 }
7259
7260 i_shdrp = elf_elfsections (abfd);
7261
7262 failed = false;
7263 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
7264 if (failed)
7265 return false;
7266
7267 if (!_bfd_elf_assign_file_positions_for_non_load (abfd))
7268 return false;
7269
7270 /* After writing the headers, we need to write the sections too... */
7271 num_sec = elf_numsections (abfd);
7272 for (count = 1; count < num_sec; count++)
7273 {
7274 /* Don't set the sh_name field without section header. */
7275 if ((abfd->flags & BFD_NO_SECTION_HEADER) == 0)
7276 i_shdrp[count]->sh_name
7277 = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
7278 i_shdrp[count]->sh_name);
7279 if (bed->elf_backend_section_processing)
7280 if (!(*bed->elf_backend_section_processing) (abfd, i_shdrp[count]))
7281 return false;
7282 if (i_shdrp[count]->contents)
7283 {
7284 bfd_size_type amt = i_shdrp[count]->sh_size;
7285
7286 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
7287 || bfd_write (i_shdrp[count]->contents, amt, abfd) != amt)
7288 return false;
7289 }
7290 }
7291
7292 /* Write out the section header names. */
7293 t = elf_tdata (abfd);
7294 if (elf_shstrtab (abfd) != NULL
7295 && t->shstrtab_hdr.sh_offset != -1
7296 && (bfd_seek (abfd, t->shstrtab_hdr.sh_offset, SEEK_SET) != 0
7297 || !_bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd))))
7298 return false;
7299
7300 if (!(*bed->elf_backend_final_write_processing) (abfd))
7301 return false;
7302
7303 if (!bed->s->write_shdrs_and_ehdr (abfd))
7304 return false;
7305
7306 /* This is last since write_shdrs_and_ehdr can touch i_shdrp[0]. */
7307 if (t->o->build_id.after_write_object_contents != NULL
7308 && !(*t->o->build_id.after_write_object_contents) (abfd))
7309 return false;
7310 if (t->o->package_metadata.after_write_object_contents != NULL
7311 && !(*t->o->package_metadata.after_write_object_contents) (abfd))
7312 return false;
7313
7314 return true;
7315 }
7316
7317 bool
7318 _bfd_elf_write_corefile_contents (bfd *abfd)
7319 {
7320 /* Hopefully this can be done just like an object file. */
7321 return _bfd_elf_write_object_contents (abfd);
7322 }
7323
7324 /* Given a section, search the header to find them. */
7325
7326 unsigned int
7327 _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect)
7328 {
7329 elf_backend_data *bed;
7330 unsigned int sec_index;
7331
7332 if (elf_section_data (asect) != NULL
7333 && elf_section_data (asect)->this_idx != 0)
7334 return elf_section_data (asect)->this_idx;
7335
7336 if (bfd_is_abs_section (asect))
7337 sec_index = SHN_ABS;
7338 else if (bfd_is_com_section (asect))
7339 sec_index = SHN_COMMON;
7340 else if (bfd_is_und_section (asect))
7341 sec_index = SHN_UNDEF;
7342 else
7343 sec_index = SHN_BAD;
7344
7345 bed = get_elf_backend_data (abfd);
7346 if (bed->elf_backend_section_from_bfd_section)
7347 {
7348 int retval = sec_index;
7349
7350 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
7351 return retval;
7352 }
7353
7354 if (sec_index == SHN_BAD)
7355 bfd_set_error (bfd_error_nonrepresentable_section);
7356
7357 return sec_index;
7358 }
7359
7360 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
7361 on error. */
7362
7363 int
7364 _bfd_elf_symbol_from_bfd_symbol (bfd *abfd, asymbol **asym_ptr_ptr)
7365 {
7366 asymbol *asym_ptr = *asym_ptr_ptr;
7367 int idx;
7368 flagword flags = asym_ptr->flags;
7369
7370 /* When gas creates relocations against local labels, it creates its
7371 own symbol for the section, but does put the symbol into the
7372 symbol chain, so udata is 0. When the linker is generating
7373 relocatable output, this section symbol may be for one of the
7374 input sections rather than the output section. */
7375 if (asym_ptr->udata.i == 0
7376 && (flags & BSF_SECTION_SYM)
7377 && asym_ptr->section)
7378 {
7379 asection *sec;
7380
7381 sec = asym_ptr->section;
7382 if (sec->owner != abfd && sec->output_section != NULL)
7383 sec = sec->output_section;
7384 if (sec->owner == abfd
7385 && sec->index < elf_num_section_syms (abfd)
7386 && elf_section_syms (abfd)[sec->index] != NULL)
7387 asym_ptr->udata.i = elf_section_syms (abfd)[sec->index]->udata.i;
7388 }
7389
7390 idx = asym_ptr->udata.i;
7391
7392 if (idx == 0)
7393 {
7394 /* This case can occur when using --strip-symbol on a symbol
7395 which is used in a relocation entry. */
7396 _bfd_error_handler
7397 /* xgettext:c-format */
7398 (_("%pB: symbol `%s' required but not present"),
7399 abfd, bfd_asymbol_name (asym_ptr));
7400 bfd_set_error (bfd_error_no_symbols);
7401 return -1;
7402 }
7403
7404 #if DEBUG & 4
7405 {
7406 fprintf (stderr,
7407 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d,"
7408 " flags = 0x%.8x\n",
7409 (long) asym_ptr, asym_ptr->name, idx, flags);
7410 fflush (stderr);
7411 }
7412 #endif
7413
7414 return idx;
7415 }
7416
7417 static inline bfd_vma
7418 segment_size (Elf_Internal_Phdr *segment)
7419 {
7420 return (segment->p_memsz > segment->p_filesz
7421 ? segment->p_memsz : segment->p_filesz);
7422 }
7423
7424
7425 /* Returns the end address of the segment + 1. */
7426 static inline bfd_vma
7427 segment_end (Elf_Internal_Phdr *segment, bfd_vma start)
7428 {
7429 return start + segment_size (segment);
7430 }
7431
7432 static inline bfd_size_type
7433 section_size (asection *section, Elf_Internal_Phdr *segment)
7434 {
7435 if ((section->flags & SEC_HAS_CONTENTS) != 0
7436 || (section->flags & SEC_THREAD_LOCAL) == 0
7437 || segment->p_type == PT_TLS)
7438 return section->size;
7439 return 0;
7440 }
7441
7442 /* Returns TRUE if the given section is contained within the given
7443 segment. LMA addresses are compared against PADDR when
7444 USE_VADDR is false, VMA against VADDR when true. */
7445 static bool
7446 is_contained_by (asection *section, Elf_Internal_Phdr *segment,
7447 bfd_vma paddr, bfd_vma vaddr, unsigned int opb,
7448 bool use_vaddr)
7449 {
7450 bfd_vma seg_addr = !use_vaddr ? paddr : vaddr;
7451 bfd_vma addr = !use_vaddr ? section->lma : section->vma;
7452 bfd_vma octet;
7453 if (_bfd_mul_overflow (addr, opb, &octet))
7454 return false;
7455 /* The third and fourth lines below are testing that the section end
7456 address is within the segment. It's written this way to avoid
7457 overflow. Add seg_addr + section_size to both sides of the
7458 inequality to make it obvious. */
7459 return (octet >= seg_addr
7460 && segment_size (segment) >= section_size (section, segment)
7461 && (octet - seg_addr
7462 <= segment_size (segment) - section_size (section, segment)));
7463 }
7464
7465 /* Handle PT_NOTE segment. */
7466 static bool
7467 is_note (asection *s, Elf_Internal_Phdr *p)
7468 {
7469 return (p->p_type == PT_NOTE
7470 && elf_section_type (s) == SHT_NOTE
7471 && (ufile_ptr) s->filepos >= p->p_offset
7472 && p->p_filesz >= s->size
7473 && (ufile_ptr) s->filepos - p->p_offset <= p->p_filesz - s->size);
7474 }
7475
7476 /* Rewrite program header information. */
7477
7478 static bool
7479 rewrite_elf_program_header (bfd *ibfd, bfd *obfd, bfd_vma maxpagesize)
7480 {
7481 Elf_Internal_Ehdr *iehdr;
7482 struct elf_segment_map *map;
7483 struct elf_segment_map *map_first;
7484 struct elf_segment_map **pointer_to_map;
7485 Elf_Internal_Phdr *segment;
7486 asection *section;
7487 unsigned int i;
7488 unsigned int num_segments;
7489 bool phdr_included = false;
7490 bool p_paddr_valid;
7491 struct elf_segment_map *phdr_adjust_seg = NULL;
7492 unsigned int phdr_adjust_num = 0;
7493 elf_backend_data *bed;
7494 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
7495
7496 bed = get_elf_backend_data (ibfd);
7497 iehdr = elf_elfheader (ibfd);
7498
7499 map_first = NULL;
7500 pointer_to_map = &map_first;
7501
7502 num_segments = elf_elfheader (ibfd)->e_phnum;
7503
7504 /* The complicated case when p_vaddr is 0 is to handle the Solaris
7505 linker, which generates a PT_INTERP section with p_vaddr and
7506 p_memsz set to 0. */
7507 #define IS_SOLARIS_PT_INTERP(p, s) \
7508 (p->p_vaddr == 0 \
7509 && p->p_paddr == 0 \
7510 && p->p_memsz == 0 \
7511 && p->p_filesz > 0 \
7512 && (s->flags & SEC_HAS_CONTENTS) != 0 \
7513 && s->size > 0 \
7514 && (bfd_vma) s->filepos >= p->p_offset \
7515 && ((bfd_vma) s->filepos + s->size \
7516 <= p->p_offset + p->p_filesz))
7517
7518 /* Decide if the given section should be included in the given segment.
7519 A section will be included if:
7520 1. It is within the address space of the segment -- we use the LMA
7521 if that is set for the segment and the VMA otherwise,
7522 2. It is an allocated section or a NOTE section in a PT_NOTE
7523 segment.
7524 3. There is an output section associated with it,
7525 4. The section has not already been allocated to a previous segment.
7526 5. PT_GNU_STACK segments do not include any sections.
7527 6. PT_TLS segment includes only SHF_TLS sections.
7528 7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
7529 8. PT_DYNAMIC should not contain empty sections at the beginning
7530 (with the possible exception of .dynamic). */
7531 #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, opb, paddr_valid) \
7532 (((is_contained_by (section, segment, segment->p_paddr, \
7533 segment->p_vaddr, opb, !paddr_valid) \
7534 && (section->flags & SEC_ALLOC) != 0) \
7535 || is_note (section, segment)) \
7536 && segment->p_type != PT_GNU_STACK \
7537 && (segment->p_type != PT_TLS \
7538 || (section->flags & SEC_THREAD_LOCAL)) \
7539 && (segment->p_type == PT_LOAD \
7540 || segment->p_type == PT_TLS \
7541 || (section->flags & SEC_THREAD_LOCAL) == 0) \
7542 && (segment->p_type != PT_DYNAMIC \
7543 || section_size (section, segment) > 0 \
7544 || (segment->p_paddr \
7545 ? segment->p_paddr != section->lma * (opb) \
7546 : segment->p_vaddr != section->vma * (opb)) \
7547 || (streq (bfd_section_name (section), ".dynamic"))) \
7548 && (segment->p_type != PT_LOAD || !section->segment_mark))
7549
7550 /* If the output section of a section in the input segment is NULL,
7551 it is removed from the corresponding output segment. */
7552 #define INCLUDE_SECTION_IN_SEGMENT(section, segment, opb, paddr_valid) \
7553 (IS_SECTION_IN_INPUT_SEGMENT (section, segment, opb, paddr_valid) \
7554 && section->output_section != NULL)
7555
7556 /* Returns TRUE iff seg1 starts after the end of seg2. */
7557 #define SEGMENT_AFTER_SEGMENT(seg1, seg2, field) \
7558 (seg1->field >= segment_end (seg2, seg2->field))
7559
7560 /* Returns TRUE iff seg1 and seg2 overlap. Segments overlap iff both
7561 their VMA address ranges and their LMA address ranges overlap.
7562 It is possible to have overlapping VMA ranges without overlapping LMA
7563 ranges. RedBoot images for example can have both .data and .bss mapped
7564 to the same VMA range, but with the .data section mapped to a different
7565 LMA. */
7566 #define SEGMENT_OVERLAPS(seg1, seg2) \
7567 ( !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_vaddr) \
7568 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_vaddr)) \
7569 && !(SEGMENT_AFTER_SEGMENT (seg1, seg2, p_paddr) \
7570 || SEGMENT_AFTER_SEGMENT (seg2, seg1, p_paddr)))
7571
7572 /* Initialise the segment mark field, and discard stupid alignment. */
7573 for (section = ibfd->sections; section != NULL; section = section->next)
7574 {
7575 asection *o = section->output_section;
7576 if (o != NULL && o->alignment_power >= (sizeof (bfd_vma) * 8) - 1)
7577 o->alignment_power = 0;
7578 section->segment_mark = false;
7579 }
7580
7581 /* The Solaris linker creates program headers in which all the
7582 p_paddr fields are zero. When we try to objcopy or strip such a
7583 file, we get confused. Check for this case, and if we find it
7584 don't set the p_paddr_valid fields. */
7585 p_paddr_valid = false;
7586 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7587 i < num_segments;
7588 i++, segment++)
7589 if (segment->p_paddr != 0)
7590 {
7591 p_paddr_valid = true;
7592 break;
7593 }
7594
7595 /* Scan through the segments specified in the program header
7596 of the input BFD. For this first scan we look for overlaps
7597 in the loadable segments. These can be created by weird
7598 parameters to objcopy. Also, fix some solaris weirdness. */
7599 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7600 i < num_segments;
7601 i++, segment++)
7602 {
7603 unsigned int j;
7604 Elf_Internal_Phdr *segment2;
7605
7606 if (segment->p_type == PT_INTERP)
7607 for (section = ibfd->sections; section; section = section->next)
7608 if (IS_SOLARIS_PT_INTERP (segment, section))
7609 {
7610 /* Mininal change so that the normal section to segment
7611 assignment code will work. */
7612 segment->p_vaddr = section->vma * opb;
7613 break;
7614 }
7615
7616 if (segment->p_type != PT_LOAD)
7617 {
7618 /* Remove PT_GNU_RELRO segment. */
7619 if (segment->p_type == PT_GNU_RELRO)
7620 segment->p_type = PT_NULL;
7621 continue;
7622 }
7623
7624 /* Determine if this segment overlaps any previous segments. */
7625 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++)
7626 {
7627 bfd_signed_vma extra_length;
7628
7629 if (segment2->p_type != PT_LOAD
7630 || !SEGMENT_OVERLAPS (segment, segment2))
7631 continue;
7632
7633 /* Merge the two segments together. */
7634 if (segment2->p_vaddr < segment->p_vaddr)
7635 {
7636 /* Extend SEGMENT2 to include SEGMENT and then delete
7637 SEGMENT. */
7638 extra_length = (segment_end (segment, segment->p_vaddr)
7639 - segment_end (segment2, segment2->p_vaddr));
7640
7641 if (extra_length > 0)
7642 {
7643 segment2->p_memsz += extra_length;
7644 segment2->p_filesz += extra_length;
7645 }
7646
7647 segment->p_type = PT_NULL;
7648
7649 /* Since we have deleted P we must restart the outer loop. */
7650 i = 0;
7651 segment = elf_tdata (ibfd)->phdr;
7652 break;
7653 }
7654 else
7655 {
7656 /* Extend SEGMENT to include SEGMENT2 and then delete
7657 SEGMENT2. */
7658 extra_length = (segment_end (segment2, segment2->p_vaddr)
7659 - segment_end (segment, segment->p_vaddr));
7660
7661 if (extra_length > 0)
7662 {
7663 segment->p_memsz += extra_length;
7664 segment->p_filesz += extra_length;
7665 }
7666
7667 segment2->p_type = PT_NULL;
7668 }
7669 }
7670 }
7671
7672 /* The second scan attempts to assign sections to segments. */
7673 for (i = 0, segment = elf_tdata (ibfd)->phdr;
7674 i < num_segments;
7675 i++, segment++)
7676 {
7677 unsigned int section_count;
7678 asection **sections;
7679 asection *output_section;
7680 unsigned int isec;
7681 asection *matching_lma;
7682 asection *suggested_lma;
7683 unsigned int j;
7684 size_t amt;
7685 asection *first_section;
7686
7687 if (segment->p_type == PT_NULL)
7688 continue;
7689
7690 first_section = NULL;
7691 /* Compute how many sections might be placed into this segment. */
7692 for (section = ibfd->sections, section_count = 0;
7693 section != NULL;
7694 section = section->next)
7695 {
7696 /* Find the first section in the input segment, which may be
7697 removed from the corresponding output segment. */
7698 if (IS_SECTION_IN_INPUT_SEGMENT (section, segment, opb, p_paddr_valid))
7699 {
7700 if (first_section == NULL)
7701 first_section = section;
7702 if (section->output_section != NULL)
7703 ++section_count;
7704 }
7705 }
7706
7707 /* Allocate a segment map big enough to contain
7708 all of the sections we have selected. */
7709 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
7710 amt += section_count * sizeof (asection *);
7711 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
7712 if (map == NULL)
7713 return false;
7714
7715 /* Initialise the fields of the segment map. Default to
7716 using the physical address of the segment in the input BFD. */
7717 map->next = NULL;
7718 map->p_type = segment->p_type;
7719 map->p_flags = segment->p_flags;
7720 map->p_flags_valid = 1;
7721
7722 if (map->p_type == PT_LOAD
7723 && (ibfd->flags & D_PAGED) != 0
7724 && maxpagesize > 1
7725 && segment->p_align > 1)
7726 {
7727 map->p_align = segment->p_align;
7728 if (segment->p_align > maxpagesize)
7729 map->p_align = maxpagesize;
7730 map->p_align_valid = 1;
7731 }
7732
7733 /* If the first section in the input segment is removed, there is
7734 no need to preserve segment physical address in the corresponding
7735 output segment. */
7736 if (!first_section || first_section->output_section != NULL)
7737 {
7738 map->p_paddr = segment->p_paddr;
7739 map->p_paddr_valid = p_paddr_valid;
7740 }
7741
7742 /* Determine if this segment contains the ELF file header
7743 and if it contains the program headers themselves. */
7744 map->includes_filehdr = (segment->p_offset == 0
7745 && segment->p_filesz >= iehdr->e_ehsize);
7746 map->includes_phdrs = 0;
7747
7748 if (!phdr_included || segment->p_type != PT_LOAD)
7749 {
7750 map->includes_phdrs =
7751 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
7752 && (segment->p_offset + segment->p_filesz
7753 >= ((bfd_vma) iehdr->e_phoff
7754 + iehdr->e_phnum * iehdr->e_phentsize)));
7755
7756 if (segment->p_type == PT_LOAD && map->includes_phdrs)
7757 phdr_included = true;
7758 }
7759
7760 if (section_count == 0)
7761 {
7762 /* Special segments, such as the PT_PHDR segment, may contain
7763 no sections, but ordinary, loadable segments should contain
7764 something. They are allowed by the ELF spec however, so only
7765 a warning is produced.
7766 Don't warn if an empty PT_LOAD contains the program headers.
7767 There is however the valid use case of embedded systems which
7768 have segments with p_filesz of 0 and a p_memsz > 0 to initialize
7769 flash memory with zeros. No warning is shown for that case. */
7770 if (segment->p_type == PT_LOAD
7771 && !map->includes_phdrs
7772 && (segment->p_filesz > 0 || segment->p_memsz == 0))
7773 /* xgettext:c-format */
7774 _bfd_error_handler
7775 (_("%pB: warning: empty loadable segment detected"
7776 " at vaddr=%#" PRIx64 ", is this intentional?"),
7777 ibfd, (uint64_t) segment->p_vaddr);
7778
7779 map->p_vaddr_offset = segment->p_vaddr / opb;
7780 map->count = 0;
7781 *pointer_to_map = map;
7782 pointer_to_map = &map->next;
7783
7784 continue;
7785 }
7786
7787 /* Now scan the sections in the input BFD again and attempt
7788 to add their corresponding output sections to the segment map.
7789 The problem here is how to handle an output section which has
7790 been moved (ie had its LMA changed). There are four possibilities:
7791
7792 1. None of the sections have been moved.
7793 In this case we can continue to use the segment LMA from the
7794 input BFD.
7795
7796 2. All of the sections have been moved by the same amount.
7797 In this case we can change the segment's LMA to match the LMA
7798 of the first section.
7799
7800 3. Some of the sections have been moved, others have not.
7801 In this case those sections which have not been moved can be
7802 placed in the current segment which will have to have its size,
7803 and possibly its LMA changed, and a new segment or segments will
7804 have to be created to contain the other sections.
7805
7806 4. The sections have been moved, but not by the same amount.
7807 In this case we can change the segment's LMA to match the LMA
7808 of the first section and we will have to create a new segment
7809 or segments to contain the other sections.
7810
7811 In order to save time, we allocate an array to hold the section
7812 pointers that we are interested in. As these sections get assigned
7813 to a segment, they are removed from this array. */
7814
7815 amt = section_count * sizeof (asection *);
7816 sections = (asection **) bfd_malloc (amt);
7817 if (sections == NULL)
7818 return false;
7819
7820 /* Step One: Scan for segment vs section LMA conflicts.
7821 Also add the sections to the section array allocated above.
7822 Also add the sections to the current segment. In the common
7823 case, where the sections have not been moved, this means that
7824 we have completely filled the segment, and there is nothing
7825 more to do. */
7826 isec = 0;
7827 matching_lma = NULL;
7828 suggested_lma = NULL;
7829
7830 for (section = first_section, j = 0;
7831 section != NULL;
7832 section = section->next)
7833 {
7834 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, opb, p_paddr_valid))
7835 {
7836 output_section = section->output_section;
7837
7838 sections[j++] = section;
7839
7840 /* The Solaris native linker always sets p_paddr to 0.
7841 We try to catch that case here, and set it to the
7842 correct value. Note - some backends require that
7843 p_paddr be left as zero. */
7844 if (!p_paddr_valid
7845 && segment->p_vaddr != 0
7846 && !bed->want_p_paddr_set_to_zero
7847 && isec == 0
7848 && output_section->lma != 0
7849 && (align_power (segment->p_vaddr
7850 + (map->includes_filehdr
7851 ? iehdr->e_ehsize : 0)
7852 + (map->includes_phdrs
7853 ? iehdr->e_phnum * iehdr->e_phentsize
7854 : 0),
7855 output_section->alignment_power * opb)
7856 == (output_section->vma * opb)))
7857 map->p_paddr = segment->p_vaddr;
7858
7859 /* Match up the physical address of the segment with the
7860 LMA address of the output section. */
7861 if (is_contained_by (output_section, segment, map->p_paddr,
7862 0, opb, false)
7863 || is_note (section, segment))
7864 {
7865 if (matching_lma == NULL
7866 || output_section->lma < matching_lma->lma)
7867 matching_lma = output_section;
7868
7869 /* We assume that if the section fits within the segment
7870 then it does not overlap any other section within that
7871 segment. */
7872 map->sections[isec++] = output_section;
7873 }
7874 else if (suggested_lma == NULL)
7875 suggested_lma = output_section;
7876
7877 if (j == section_count)
7878 break;
7879 }
7880 }
7881
7882 BFD_ASSERT (j == section_count);
7883
7884 /* Step Two: Adjust the physical address of the current segment,
7885 if necessary. */
7886 if (isec == section_count)
7887 {
7888 /* All of the sections fitted within the segment as currently
7889 specified. This is the default case. Add the segment to
7890 the list of built segments and carry on to process the next
7891 program header in the input BFD. */
7892 map->count = section_count;
7893 *pointer_to_map = map;
7894 pointer_to_map = &map->next;
7895
7896 if (p_paddr_valid
7897 && !bed->want_p_paddr_set_to_zero)
7898 {
7899 bfd_vma hdr_size = 0;
7900 if (map->includes_filehdr)
7901 hdr_size = iehdr->e_ehsize;
7902 if (map->includes_phdrs)
7903 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
7904
7905 /* Account for padding before the first section in the
7906 segment. */
7907 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
7908 - matching_lma->lma);
7909 }
7910
7911 free (sections);
7912 continue;
7913 }
7914 else
7915 {
7916 /* Change the current segment's physical address to match
7917 the LMA of the first section that fitted, or if no
7918 section fitted, the first section. */
7919 if (matching_lma == NULL)
7920 matching_lma = suggested_lma;
7921
7922 map->p_paddr = matching_lma->lma * opb;
7923
7924 /* Offset the segment physical address from the lma
7925 to allow for space taken up by elf headers. */
7926 if (map->includes_phdrs)
7927 {
7928 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
7929
7930 /* iehdr->e_phnum is just an estimate of the number
7931 of program headers that we will need. Make a note
7932 here of the number we used and the segment we chose
7933 to hold these headers, so that we can adjust the
7934 offset when we know the correct value. */
7935 phdr_adjust_num = iehdr->e_phnum;
7936 phdr_adjust_seg = map;
7937 }
7938
7939 if (map->includes_filehdr)
7940 {
7941 bfd_vma align = (bfd_vma) 1 << matching_lma->alignment_power;
7942 map->p_paddr -= iehdr->e_ehsize;
7943 /* We've subtracted off the size of headers from the
7944 first section lma, but there may have been some
7945 alignment padding before that section too. Try to
7946 account for that by adjusting the segment lma down to
7947 the same alignment. */
7948 if (segment->p_align != 0 && segment->p_align < align)
7949 align = segment->p_align;
7950 map->p_paddr &= -(align * opb);
7951 }
7952 }
7953
7954 /* Step Three: Loop over the sections again, this time assigning
7955 those that fit to the current segment and removing them from the
7956 sections array; but making sure not to leave large gaps. Once all
7957 possible sections have been assigned to the current segment it is
7958 added to the list of built segments and if sections still remain
7959 to be assigned, a new segment is constructed before repeating
7960 the loop. */
7961 isec = 0;
7962 do
7963 {
7964 map->count = 0;
7965 suggested_lma = NULL;
7966
7967 /* Fill the current segment with sections that fit. */
7968 for (j = 0; j < section_count; j++)
7969 {
7970 section = sections[j];
7971
7972 if (section == NULL)
7973 continue;
7974
7975 output_section = section->output_section;
7976
7977 BFD_ASSERT (output_section != NULL);
7978
7979 if (is_contained_by (output_section, segment, map->p_paddr,
7980 0, opb, false)
7981 || is_note (section, segment))
7982 {
7983 if (map->count == 0)
7984 {
7985 /* If the first section in a segment does not start at
7986 the beginning of the segment, then something is
7987 wrong. */
7988 if (align_power (map->p_paddr
7989 + (map->includes_filehdr
7990 ? iehdr->e_ehsize : 0)
7991 + (map->includes_phdrs
7992 ? iehdr->e_phnum * iehdr->e_phentsize
7993 : 0),
7994 output_section->alignment_power * opb)
7995 != output_section->lma * opb)
7996 goto sorry;
7997 }
7998 else
7999 {
8000 asection *prev_sec;
8001
8002 prev_sec = map->sections[map->count - 1];
8003
8004 /* If the gap between the end of the previous section
8005 and the start of this section is more than
8006 maxpagesize then we need to start a new segment. */
8007 if ((BFD_ALIGN (prev_sec->lma + prev_sec->size,
8008 maxpagesize)
8009 < BFD_ALIGN (output_section->lma, maxpagesize))
8010 || (prev_sec->lma + prev_sec->size
8011 > output_section->lma))
8012 {
8013 if (suggested_lma == NULL)
8014 suggested_lma = output_section;
8015
8016 continue;
8017 }
8018 }
8019
8020 map->sections[map->count++] = output_section;
8021 ++isec;
8022 sections[j] = NULL;
8023 if (segment->p_type == PT_LOAD)
8024 section->segment_mark = true;
8025 }
8026 else if (suggested_lma == NULL)
8027 suggested_lma = output_section;
8028 }
8029
8030 /* PR 23932. A corrupt input file may contain sections that cannot
8031 be assigned to any segment - because for example they have a
8032 negative size - or segments that do not contain any sections.
8033 But there are also valid reasons why a segment can be empty.
8034 So allow a count of zero. */
8035
8036 /* Add the current segment to the list of built segments. */
8037 *pointer_to_map = map;
8038 pointer_to_map = &map->next;
8039
8040 if (isec < section_count)
8041 {
8042 /* We still have not allocated all of the sections to
8043 segments. Create a new segment here, initialise it
8044 and carry on looping. */
8045 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
8046 amt += section_count * sizeof (asection *);
8047 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
8048 if (map == NULL)
8049 {
8050 free (sections);
8051 return false;
8052 }
8053
8054 /* Initialise the fields of the segment map. Set the physical
8055 physical address to the LMA of the first section that has
8056 not yet been assigned. */
8057 map->next = NULL;
8058 map->p_type = segment->p_type;
8059 map->p_flags = segment->p_flags;
8060 map->p_flags_valid = 1;
8061 map->p_paddr = suggested_lma->lma * opb;
8062 map->p_paddr_valid = p_paddr_valid;
8063 map->includes_filehdr = 0;
8064 map->includes_phdrs = 0;
8065 }
8066
8067 continue;
8068 sorry:
8069 bfd_set_error (bfd_error_sorry);
8070 free (sections);
8071 return false;
8072 }
8073 while (isec < section_count);
8074
8075 free (sections);
8076 }
8077
8078 elf_seg_map (obfd) = map_first;
8079
8080 /* If we had to estimate the number of program headers that were
8081 going to be needed, then check our estimate now and adjust
8082 the offset if necessary. */
8083 if (phdr_adjust_seg != NULL)
8084 {
8085 unsigned int count;
8086
8087 for (count = 0, map = map_first; map != NULL; map = map->next)
8088 count++;
8089
8090 if (count > phdr_adjust_num)
8091 phdr_adjust_seg->p_paddr
8092 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
8093
8094 for (map = map_first; map != NULL; map = map->next)
8095 if (map->p_type == PT_PHDR)
8096 {
8097 bfd_vma adjust
8098 = phdr_adjust_seg->includes_filehdr ? iehdr->e_ehsize : 0;
8099 map->p_paddr = phdr_adjust_seg->p_paddr + adjust;
8100 break;
8101 }
8102 }
8103
8104 #undef IS_SOLARIS_PT_INTERP
8105 #undef IS_SECTION_IN_INPUT_SEGMENT
8106 #undef INCLUDE_SECTION_IN_SEGMENT
8107 #undef SEGMENT_AFTER_SEGMENT
8108 #undef SEGMENT_OVERLAPS
8109 return true;
8110 }
8111
8112 /* Return true if p_align in the ELF program header in ABFD is valid. */
8113
8114 static bool
8115 elf_is_p_align_valid (bfd *abfd)
8116 {
8117 unsigned int i;
8118 Elf_Internal_Phdr *segment;
8119 unsigned int num_segments;
8120 elf_backend_data *bed = get_elf_backend_data (abfd);
8121 bfd_size_type maxpagesize = bed->maxpagesize;
8122 bfd_size_type p_align = bed->p_align;
8123
8124 /* Return true if the default p_align value isn't set or the maximum
8125 page size is the same as the minimum page size. */
8126 if (p_align == 0 || maxpagesize == bed->minpagesize)
8127 return true;
8128
8129 /* When the default p_align value is set, p_align may be set to the
8130 default p_align value while segments are aligned to the maximum
8131 page size. In this case, the input p_align will be ignored and
8132 the maximum page size will be used to align the output segments. */
8133 segment = elf_tdata (abfd)->phdr;
8134 num_segments = elf_elfheader (abfd)->e_phnum;
8135 for (i = 0; i < num_segments; i++, segment++)
8136 if (segment->p_type == PT_LOAD
8137 && (segment->p_align != p_align
8138 || vma_page_aligned_bias (segment->p_vaddr,
8139 segment->p_offset,
8140 maxpagesize) != 0))
8141 return true;
8142
8143 return false;
8144 }
8145
8146 /* Copy ELF program header information. */
8147
8148 static bool
8149 copy_elf_program_header (bfd *ibfd, bfd *obfd)
8150 {
8151 Elf_Internal_Ehdr *iehdr;
8152 struct elf_segment_map *map;
8153 struct elf_segment_map *map_first;
8154 struct elf_segment_map **pointer_to_map;
8155 Elf_Internal_Phdr *segment;
8156 unsigned int i;
8157 unsigned int num_segments;
8158 bool phdr_included = false;
8159 bool p_paddr_valid;
8160 bool p_palign_valid;
8161 unsigned int opb = bfd_octets_per_byte (ibfd, NULL);
8162
8163 iehdr = elf_elfheader (ibfd);
8164
8165 map_first = NULL;
8166 pointer_to_map = &map_first;
8167
8168 /* If all the segment p_paddr fields are zero, don't set
8169 map->p_paddr_valid. */
8170 p_paddr_valid = false;
8171 num_segments = elf_elfheader (ibfd)->e_phnum;
8172 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8173 i < num_segments;
8174 i++, segment++)
8175 if (segment->p_paddr != 0)
8176 {
8177 p_paddr_valid = true;
8178 break;
8179 }
8180
8181 p_palign_valid = elf_is_p_align_valid (ibfd);
8182
8183 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8184 i < num_segments;
8185 i++, segment++)
8186 {
8187 asection *section;
8188 unsigned int section_count;
8189 size_t amt;
8190 Elf_Internal_Shdr *this_hdr;
8191 asection *first_section = NULL;
8192 asection *lowest_section;
8193
8194 /* Compute how many sections are in this segment. */
8195 for (section = ibfd->sections, section_count = 0;
8196 section != NULL;
8197 section = section->next)
8198 {
8199 this_hdr = &(elf_section_data(section)->this_hdr);
8200 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8201 {
8202 if (first_section == NULL)
8203 first_section = section;
8204 section_count++;
8205 }
8206 }
8207
8208 /* Allocate a segment map big enough to contain
8209 all of the sections we have selected. */
8210 amt = sizeof (struct elf_segment_map) - sizeof (asection *);
8211 amt += section_count * sizeof (asection *);
8212 map = (struct elf_segment_map *) bfd_zalloc (obfd, amt);
8213 if (map == NULL)
8214 return false;
8215
8216 /* Initialize the fields of the output segment map with the
8217 input segment. */
8218 map->next = NULL;
8219 map->p_type = segment->p_type;
8220 map->p_flags = segment->p_flags;
8221 map->p_flags_valid = 1;
8222 map->p_paddr = segment->p_paddr;
8223 map->p_paddr_valid = p_paddr_valid;
8224 map->p_align = segment->p_align;
8225 /* Keep p_align of PT_GNU_STACK for stack alignment. */
8226 map->p_align_valid = (map->p_type == PT_GNU_STACK
8227 || p_palign_valid);
8228 map->p_vaddr_offset = 0;
8229
8230 if (map->p_type == PT_GNU_RELRO
8231 || map->p_type == PT_GNU_STACK)
8232 {
8233 /* The PT_GNU_RELRO segment may contain the first a few
8234 bytes in the .got.plt section even if the whole .got.plt
8235 section isn't in the PT_GNU_RELRO segment. We won't
8236 change the size of the PT_GNU_RELRO segment.
8237 Similarly, PT_GNU_STACK size is significant on uclinux
8238 systems. */
8239 map->p_size = segment->p_memsz;
8240 map->p_size_valid = 1;
8241 }
8242
8243 /* Determine if this segment contains the ELF file header
8244 and if it contains the program headers themselves. */
8245 map->includes_filehdr = (segment->p_offset == 0
8246 && segment->p_filesz >= iehdr->e_ehsize);
8247
8248 map->includes_phdrs = 0;
8249 if (! phdr_included || segment->p_type != PT_LOAD)
8250 {
8251 map->includes_phdrs =
8252 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
8253 && (segment->p_offset + segment->p_filesz
8254 >= ((bfd_vma) iehdr->e_phoff
8255 + iehdr->e_phnum * iehdr->e_phentsize)));
8256
8257 if (segment->p_type == PT_LOAD && map->includes_phdrs)
8258 phdr_included = true;
8259 }
8260
8261 lowest_section = NULL;
8262 if (section_count != 0)
8263 {
8264 unsigned int isec = 0;
8265
8266 for (section = first_section;
8267 section != NULL;
8268 section = section->next)
8269 {
8270 this_hdr = &(elf_section_data(section)->this_hdr);
8271 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8272 {
8273 map->sections[isec++] = section->output_section;
8274 if ((section->flags & SEC_ALLOC) != 0)
8275 {
8276 bfd_vma seg_off;
8277
8278 if (lowest_section == NULL
8279 || section->lma < lowest_section->lma)
8280 lowest_section = section;
8281
8282 /* Section lmas are set up from PT_LOAD header
8283 p_paddr in _bfd_elf_make_section_from_shdr.
8284 If this header has a p_paddr that disagrees
8285 with the section lma, flag the p_paddr as
8286 invalid. */
8287 if ((section->flags & SEC_LOAD) != 0)
8288 seg_off = this_hdr->sh_offset - segment->p_offset;
8289 else
8290 seg_off = this_hdr->sh_addr - segment->p_vaddr;
8291 if (section->lma * opb - segment->p_paddr != seg_off)
8292 map->p_paddr_valid = false;
8293 }
8294 if (isec == section_count)
8295 break;
8296 }
8297 }
8298 }
8299
8300 if (section_count == 0)
8301 map->p_vaddr_offset = segment->p_vaddr / opb;
8302 else if (map->p_paddr_valid)
8303 {
8304 /* Account for padding before the first section in the segment. */
8305 bfd_vma hdr_size = 0;
8306 if (map->includes_filehdr)
8307 hdr_size = iehdr->e_ehsize;
8308 if (map->includes_phdrs)
8309 hdr_size += iehdr->e_phnum * iehdr->e_phentsize;
8310
8311 map->p_vaddr_offset = ((map->p_paddr + hdr_size) / opb
8312 - (lowest_section ? lowest_section->lma : 0));
8313 }
8314
8315 map->count = section_count;
8316 *pointer_to_map = map;
8317 pointer_to_map = &map->next;
8318 }
8319
8320 elf_seg_map (obfd) = map_first;
8321 return true;
8322 }
8323
8324 /* Copy private BFD data. This copies or rewrites ELF program header
8325 information. */
8326
8327 static bool
8328 copy_private_bfd_data (bfd *ibfd, bfd *obfd)
8329 {
8330 bfd_vma maxpagesize;
8331
8332 if (elf_tdata (ibfd)->phdr == NULL)
8333 return true;
8334
8335 if (ibfd->xvec == obfd->xvec)
8336 {
8337 /* Check to see if any sections in the input BFD
8338 covered by ELF program header have changed. */
8339 Elf_Internal_Phdr *segment;
8340 asection * section;
8341 asection * osec;
8342 asection * prev;
8343 unsigned int i, num_segments;
8344 Elf_Internal_Shdr *this_hdr;
8345 elf_backend_data *bed;
8346
8347 bed = get_elf_backend_data (ibfd);
8348
8349 /* Regenerate the segment map if p_paddr is set to 0. */
8350 if (bed->want_p_paddr_set_to_zero)
8351 goto rewrite;
8352
8353 /* Initialize the segment mark field. */
8354 for (section = obfd->sections; section != NULL;
8355 section = section->next)
8356 section->segment_mark = false;
8357
8358 num_segments = elf_elfheader (ibfd)->e_phnum;
8359 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8360 i < num_segments;
8361 i++, segment++)
8362 {
8363 /* PR binutils/3535. The Solaris linker always sets the p_paddr
8364 and p_memsz fields of special segments (DYNAMIC, INTERP) to 0
8365 which severly confuses things, so always regenerate the segment
8366 map in this case. */
8367 if (segment->p_paddr == 0
8368 && segment->p_memsz == 0
8369 && (segment->p_type == PT_INTERP
8370 || segment->p_type == PT_DYNAMIC))
8371 goto rewrite;
8372
8373 for (section = ibfd->sections, prev = NULL;
8374 section != NULL; section = section->next)
8375 {
8376 /* We mark the output section so that we know it comes
8377 from the input BFD. */
8378 osec = section->output_section;
8379 if (osec)
8380 osec->segment_mark = true;
8381
8382 /* Check if this section is covered by the segment. */
8383 this_hdr = &(elf_section_data(section)->this_hdr);
8384 if (ELF_SECTION_IN_SEGMENT (this_hdr, segment))
8385 {
8386 /* FIXME: Check if its output section is changed or
8387 removed. What else do we need to check? */
8388 if (osec == NULL
8389 || section->flags != osec->flags
8390 || section->lma != osec->lma
8391 || section->vma != osec->vma
8392 || section->size != osec->size
8393 || section->rawsize != osec->rawsize
8394 || section->alignment_power != osec->alignment_power)
8395 goto rewrite;
8396
8397 /* PR 31450: If this is an allocated section then make sure
8398 that this section's vma to lma relationship is the same
8399 as previous (allocated) section's. */
8400 if (prev != NULL
8401 && section->flags & SEC_ALLOC
8402 && section->lma - section->vma != prev->lma - prev->vma)
8403 goto rewrite;
8404
8405 if (section->flags & SEC_ALLOC)
8406 prev = section;
8407 }
8408 }
8409 }
8410
8411 /* Check to see if any output section do not come from the
8412 input BFD. */
8413 for (section = obfd->sections; section != NULL;
8414 section = section->next)
8415 {
8416 if (!section->segment_mark)
8417 goto rewrite;
8418 else
8419 section->segment_mark = false;
8420 }
8421
8422 return copy_elf_program_header (ibfd, obfd);
8423 }
8424
8425 rewrite:
8426 maxpagesize = 0;
8427 if (ibfd->xvec == obfd->xvec)
8428 {
8429 /* When rewriting program header, set the output maxpagesize to
8430 the maximum alignment of input PT_LOAD segments. */
8431 Elf_Internal_Phdr *segment;
8432 unsigned int i;
8433 unsigned int num_segments = elf_elfheader (ibfd)->e_phnum;
8434
8435 for (i = 0, segment = elf_tdata (ibfd)->phdr;
8436 i < num_segments;
8437 i++, segment++)
8438 if (segment->p_type == PT_LOAD
8439 && maxpagesize < segment->p_align)
8440 {
8441 /* PR 17512: file: f17299af. */
8442 if (segment->p_align > (bfd_vma) 1 << ((sizeof (bfd_vma) * 8) - 2))
8443 /* xgettext:c-format */
8444 _bfd_error_handler (_("%pB: warning: segment alignment of %#"
8445 PRIx64 " is too large"),
8446 ibfd, (uint64_t) segment->p_align);
8447 else
8448 maxpagesize = segment->p_align;
8449 }
8450 }
8451 if (maxpagesize == 0)
8452 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
8453
8454 return rewrite_elf_program_header (ibfd, obfd, maxpagesize);
8455 }
8456
8457 /* Copy private section information from input to output. This function
8458 is called both by objcopy where LINK_INFO is NULL, and ld where
8459 LINK_INFO is non-NULL in the usual case but NULL for a special case
8460 when dealing with LTO IR or cloning output sections. */
8461
8462 bool
8463 _bfd_elf_copy_private_section_data (bfd *ibfd,
8464 asection *isec,
8465 bfd *obfd ATTRIBUTE_UNUSED,
8466 asection *osec,
8467 struct bfd_link_info *link_info)
8468 {
8469 if (ibfd->xvec->flavour != bfd_target_elf_flavour)
8470 return true;
8471
8472 Elf_Internal_Shdr *ihdr = &elf_section_data (isec)->this_hdr;
8473 Elf_Internal_Shdr *ohdr = &elf_section_data (osec)->this_hdr;
8474 if (link_info == NULL)
8475 {
8476 ohdr->sh_entsize = ihdr->sh_entsize;
8477
8478 if (ihdr->sh_type == SHT_SYMTAB
8479 || ihdr->sh_type == SHT_DYNSYM
8480 || ihdr->sh_type == SHT_GNU_verneed
8481 || ihdr->sh_type == SHT_GNU_verdef)
8482 ohdr->sh_info = ihdr->sh_info;
8483 }
8484
8485 /* If this is a known ABI section, ELF section type and flags may
8486 have been set up when OSEC was created. For normal sections we
8487 allow the user to override the type and flags other than
8488 SHF_MASKOS and SHF_MASKPROC. */
8489 if (elf_section_type (osec) == SHT_PROGBITS
8490 || elf_section_type (osec) == SHT_NOTE
8491 || elf_section_type (osec) == SHT_NOBITS)
8492 elf_section_type (osec) = SHT_NULL;
8493
8494 /* For objcopy and relocatable link, copy the ELF section type from
8495 the input file if the BFD section flags are the same. (If they
8496 are different the user may be doing something like
8497 "objcopy --set-section-flags .text=alloc,data".) For a final
8498 link allow some flags that the linker clears to differ. */
8499 bool final_link = (link_info != NULL
8500 && !bfd_link_relocatable (link_info));
8501 if (elf_section_type (osec) == SHT_NULL
8502 && (osec->flags == isec->flags
8503 || (final_link
8504 && ((osec->flags ^ isec->flags)
8505 & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
8506 elf_section_type (osec) = elf_section_type (isec);
8507
8508 elf_section_flags (osec) = elf_section_flags (isec);
8509 /* Like for type, retain flags for objcopy (yet unlike for type, don't do so
8510 for relocatable link). Same heuristic as there: If the BFD section flags
8511 are different, assume --set-section-flags is in use for the section.
8512
8513 FIXME: Is this correct for all OS/PROC specific flags? */
8514 if (link_info != NULL || osec->flags != isec->flags)
8515 elf_section_flags (osec) &= (SHF_MASKOS | SHF_MASKPROC);
8516 else
8517 {
8518 /* Clear only flags which are set below or elsewhere. */
8519 elf_section_flags (osec) &= ~(SHF_WRITE | SHF_ALLOC | SHF_EXECINSTR
8520 | SHF_MERGE | SHF_STRINGS | SHF_LINK_ORDER
8521 | SHF_INFO_LINK | SHF_GROUP | SHF_TLS
8522 | SHF_COMPRESSED);
8523 if (elf_section_flags (osec) & ~(SHF_MASKOS | SHF_MASKPROC))
8524 _bfd_error_handler
8525 (_("%pB:%pA: warning: retaining unknown section flag(s) %#" PRIx64),
8526 ibfd, isec,
8527 (uint64_t) (elf_section_flags (osec)
8528 & ~(SHF_MASKOS | SHF_MASKPROC)));
8529 }
8530
8531 /* Copy sh_info from input for mbind section. */
8532 if ((elf_tdata (ibfd)->has_gnu_osabi & elf_gnu_osabi_mbind) != 0
8533 && elf_section_flags (isec) & SHF_GNU_MBIND)
8534 elf_section_data (osec)->this_hdr.sh_info
8535 = elf_section_data (isec)->this_hdr.sh_info;
8536
8537 /* Set things up for objcopy and relocatable link. The output
8538 SHT_GROUP section will have its elf_next_in_group pointing back
8539 to the input group members. Ignore linker created group section.
8540 See elfNN_ia64_object_p in elfxx-ia64.c. */
8541 if ((link_info == NULL
8542 || !link_info->resolve_section_groups)
8543 && (elf_sec_group (isec) == NULL
8544 || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0))
8545 {
8546 if (elf_section_flags (isec) & SHF_GROUP)
8547 elf_section_flags (osec) |= SHF_GROUP;
8548 elf_next_in_group (osec) = elf_next_in_group (isec);
8549 elf_section_data (osec)->group = elf_section_data (isec)->group;
8550 }
8551
8552 /* If not decompress, preserve SHF_COMPRESSED. */
8553 if (!final_link && (ibfd->flags & BFD_DECOMPRESS) == 0)
8554 elf_section_flags (osec) |= (elf_section_flags (isec)
8555 & SHF_COMPRESSED);
8556
8557 /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
8558 don't use the output section of the linked-to section since it
8559 may be NULL at this point. */
8560 if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
8561 {
8562 ohdr->sh_flags |= SHF_LINK_ORDER;
8563 elf_linked_to_section (osec) = elf_linked_to_section (isec);
8564 }
8565
8566 osec->use_rela_p = isec->use_rela_p;
8567
8568 return true;
8569 }
8570
8571 /* Look at all the SHT_GROUP sections in IBFD, making any adjustments
8572 necessary if we are removing either the SHT_GROUP section or any of
8573 the group member sections. DISCARDED is the value that a section's
8574 output_section has if the section will be discarded, NULL when this
8575 function is called from objcopy, bfd_abs_section_ptr when called
8576 from the linker. */
8577
8578 bool
8579 _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
8580 {
8581 asection *isec;
8582
8583 for (isec = ibfd->sections; isec != NULL; isec = isec->next)
8584 if (elf_section_type (isec) == SHT_GROUP)
8585 {
8586 asection *first = elf_next_in_group (isec);
8587 asection *s = first;
8588 bfd_size_type removed = 0;
8589
8590 while (s != NULL)
8591 {
8592 /* If this member section is being output but the
8593 SHT_GROUP section is not, then clear the group info
8594 set up by _bfd_elf_copy_private_section_data. */
8595 if (s->output_section != discarded
8596 && isec->output_section == discarded)
8597 {
8598 elf_section_flags (s->output_section) &= ~SHF_GROUP;
8599 elf_group_name (s->output_section) = NULL;
8600 }
8601 else
8602 {
8603 struct bfd_elf_section_data *elf_sec = elf_section_data (s);
8604 if (s->output_section == discarded
8605 && isec->output_section != discarded)
8606 {
8607 /* Conversely, if the member section is not being
8608 output but the SHT_GROUP section is, then adjust
8609 its size. */
8610 removed += 4;
8611 if (elf_sec->rel.hdr != NULL
8612 && (elf_sec->rel.hdr->sh_flags & SHF_GROUP) != 0)
8613 removed += 4;
8614 if (elf_sec->rela.hdr != NULL
8615 && (elf_sec->rela.hdr->sh_flags & SHF_GROUP) != 0)
8616 removed += 4;
8617 }
8618 else
8619 {
8620 /* Also adjust for zero-sized relocation member
8621 section. */
8622 if (elf_sec->rel.hdr != NULL
8623 && elf_sec->rel.hdr->sh_size == 0)
8624 removed += 4;
8625 if (elf_sec->rela.hdr != NULL
8626 && elf_sec->rela.hdr->sh_size == 0)
8627 removed += 4;
8628 }
8629 }
8630 s = elf_next_in_group (s);
8631 if (s == first)
8632 break;
8633 }
8634 if (removed != 0)
8635 {
8636 if (discarded != NULL)
8637 {
8638 /* If we've been called for ld -r, then we need to
8639 adjust the input section size. */
8640 if (isec->rawsize == 0)
8641 isec->rawsize = isec->size;
8642 isec->size = isec->rawsize - removed;
8643 if (isec->size <= 4)
8644 {
8645 isec->size = 0;
8646 isec->flags |= SEC_EXCLUDE;
8647 }
8648 }
8649 else if (isec->output_section != NULL)
8650 {
8651 /* Adjust the output section size when called from
8652 objcopy. */
8653 isec->output_section->size -= removed;
8654 if (isec->output_section->size <= 4)
8655 {
8656 isec->output_section->size = 0;
8657 isec->output_section->flags |= SEC_EXCLUDE;
8658 }
8659 }
8660 }
8661 }
8662
8663 return true;
8664 }
8665
8666 /* Copy private header information. */
8667
8668 bool
8669 _bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
8670 {
8671 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
8672 return true;
8673
8674 /* Copy over private BFD data if it has not already been copied.
8675 This must be done here, rather than in the copy_private_bfd_data
8676 entry point, because the latter is called after the section
8677 contents have been set, which means that the program headers have
8678 already been worked out. */
8679 if (elf_seg_map (obfd) == NULL && elf_tdata (ibfd)->phdr != NULL)
8680 {
8681 if (! copy_private_bfd_data (ibfd, obfd))
8682 return false;
8683 }
8684
8685 return _bfd_elf_fixup_group_sections (ibfd, NULL);
8686 }
8687
8688 /* Copy private symbol information. If this symbol is in a section
8689 which we did not map into a BFD section, try to map the section
8690 index correctly. We use special macro definitions for the mapped
8691 section indices; these definitions are interpreted by the
8692 swap_out_syms function. */
8693
8694 #define MAP_ONESYMTAB (SHN_HIOS + 1)
8695 #define MAP_DYNSYMTAB (SHN_HIOS + 2)
8696 #define MAP_STRTAB (SHN_HIOS + 3)
8697 #define MAP_SHSTRTAB (SHN_HIOS + 4)
8698 #define MAP_SYM_SHNDX (SHN_HIOS + 5)
8699
8700 bool
8701 _bfd_elf_copy_private_symbol_data (bfd *ibfd,
8702 asymbol **isymarg,
8703 bfd *obfd ATTRIBUTE_UNUSED,
8704 asymbol **osymarg)
8705 {
8706 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
8707 return true;
8708
8709 elf_symbol_type *isym = elf_symbol_from (*isymarg);
8710 elf_symbol_type *osym = elf_symbol_from (*osymarg);
8711 if (isym != NULL
8712 && isym->internal_elf_sym.st_shndx != 0
8713 && osym != NULL
8714 && bfd_is_abs_section (isym->symbol.section))
8715 {
8716 unsigned int shndx;
8717
8718 shndx = isym->internal_elf_sym.st_shndx;
8719 if (shndx == elf_onesymtab (ibfd))
8720 shndx = MAP_ONESYMTAB;
8721 else if (shndx == elf_dynsymtab (ibfd))
8722 shndx = MAP_DYNSYMTAB;
8723 else if (shndx == elf_elfsections (ibfd)[elf_onesymtab (ibfd)]->sh_link)
8724 shndx = MAP_STRTAB;
8725 else if (shndx == elf_elfheader (ibfd)->e_shstrndx)
8726 shndx = MAP_SHSTRTAB;
8727 else if (find_section_in_list (shndx, elf_symtab_shndx_list (ibfd)))
8728 shndx = MAP_SYM_SHNDX;
8729 osym->internal_elf_sym.st_shndx = shndx;
8730 }
8731
8732 return true;
8733 }
8734
8735 /* Swap out the symbols. */
8736
8737 static bool
8738 swap_out_syms (bfd *abfd,
8739 struct elf_strtab_hash **sttp,
8740 int relocatable_p,
8741 struct bfd_link_info *info)
8742 {
8743 elf_backend_data *bed;
8744 unsigned int symcount;
8745 asymbol **syms;
8746 struct elf_strtab_hash *stt;
8747 Elf_Internal_Shdr *symtab_hdr;
8748 Elf_Internal_Shdr *symtab_shndx_hdr;
8749 Elf_Internal_Shdr *symstrtab_hdr;
8750 struct elf_sym_strtab *symstrtab;
8751 bfd_byte *outbound_syms;
8752 bfd_byte *outbound_shndx;
8753 unsigned long outbound_syms_index;
8754 unsigned int idx;
8755 unsigned int num_locals;
8756 size_t amt;
8757 bool name_local_sections;
8758
8759 if (!elf_map_symbols (abfd, &num_locals))
8760 return false;
8761
8762 /* Dump out the symtabs. */
8763 stt = _bfd_elf_strtab_init ();
8764 if (stt == NULL)
8765 return false;
8766
8767 bed = get_elf_backend_data (abfd);
8768 symcount = bfd_get_symcount (abfd);
8769 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8770 symtab_hdr->sh_type = SHT_SYMTAB;
8771 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
8772 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
8773 symtab_hdr->sh_info = num_locals + 1;
8774 symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
8775
8776 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
8777 symstrtab_hdr->sh_type = SHT_STRTAB;
8778
8779 /* Allocate buffer to swap out the .strtab section. */
8780 if (_bfd_mul_overflow (symcount + 1, sizeof (*symstrtab), &amt)
8781 || (symstrtab = (struct elf_sym_strtab *) bfd_malloc (amt)) == NULL)
8782 {
8783 bfd_set_error (bfd_error_no_memory);
8784 _bfd_elf_strtab_free (stt);
8785 return false;
8786 }
8787
8788 if (_bfd_mul_overflow (symcount + 1, bed->s->sizeof_sym, &amt)
8789 || (outbound_syms = bfd_malloc (amt)) == NULL)
8790 {
8791 error_no_mem:
8792 bfd_set_error (bfd_error_no_memory);
8793 error_return:
8794 free (symstrtab);
8795 _bfd_elf_strtab_free (stt);
8796 return false;
8797 }
8798 symtab_hdr->contents = outbound_syms;
8799 outbound_syms_index = 0;
8800
8801 outbound_shndx = NULL;
8802
8803 if (elf_symtab_shndx_list (abfd))
8804 {
8805 symtab_shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
8806 if (symtab_shndx_hdr->sh_name != 0)
8807 {
8808 if (_bfd_mul_overflow (symcount + 1,
8809 sizeof (Elf_External_Sym_Shndx), &amt))
8810 goto error_no_mem;
8811 outbound_shndx = (bfd_byte *) bfd_zalloc (abfd, amt);
8812 if (outbound_shndx == NULL)
8813 goto error_return;
8814
8815 symtab_shndx_hdr->contents = outbound_shndx;
8816 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
8817 symtab_shndx_hdr->sh_size = amt;
8818 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
8819 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
8820 }
8821 /* FIXME: What about any other headers in the list ? */
8822 }
8823
8824 /* Now generate the data (for "contents"). */
8825 {
8826 /* Fill in zeroth symbol and swap it out. */
8827 Elf_Internal_Sym sym;
8828 sym.st_name = 0;
8829 sym.st_value = 0;
8830 sym.st_size = 0;
8831 sym.st_info = 0;
8832 sym.st_other = 0;
8833 sym.st_shndx = SHN_UNDEF;
8834 sym.st_target_internal = 0;
8835 symstrtab[outbound_syms_index].sym = sym;
8836 symstrtab[outbound_syms_index].dest_index = outbound_syms_index;
8837 outbound_syms_index++;
8838 }
8839
8840 name_local_sections
8841 = (bed->elf_backend_name_local_section_symbols
8842 && bed->elf_backend_name_local_section_symbols (abfd));
8843
8844 syms = bfd_get_outsymbols (abfd);
8845 for (idx = 0; idx < symcount; idx++)
8846 {
8847 Elf_Internal_Sym sym;
8848
8849 flagword flags = syms[idx]->flags;
8850 if (!name_local_sections
8851 && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
8852 {
8853 /* Local section symbols have no name. */
8854 sym.st_name = 0;
8855 }
8856 else
8857 {
8858 /* Call _bfd_elf_strtab_offset after _bfd_elf_strtab_finalize
8859 to get the final offset for st_name. */
8860 size_t stridx = _bfd_elf_strtab_add (stt, syms[idx]->name, false);
8861 if (stridx == (size_t) -1)
8862 goto error_return;
8863 sym.st_name = stridx;
8864 }
8865
8866 bfd_vma value = syms[idx]->value;
8867 elf_symbol_type *type_ptr = elf_symbol_from (syms[idx]);
8868 asection *sec = syms[idx]->section;
8869
8870 if ((flags & BSF_SECTION_SYM) == 0 && bfd_is_com_section (sec))
8871 {
8872 /* ELF common symbols put the alignment into the `value' field,
8873 and the size into the `size' field. This is backwards from
8874 how BFD handles it, so reverse it here. */
8875 sym.st_size = value;
8876 if (type_ptr == NULL
8877 || type_ptr->internal_elf_sym.st_value == 0)
8878 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
8879 else
8880 sym.st_value = type_ptr->internal_elf_sym.st_value;
8881 sym.st_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8882 }
8883 else
8884 {
8885 unsigned int shndx;
8886
8887 if (sec->output_section)
8888 {
8889 value += sec->output_offset;
8890 sec = sec->output_section;
8891 }
8892
8893 /* Don't add in the section vma for relocatable output. */
8894 if (! relocatable_p)
8895 value += sec->vma;
8896 sym.st_value = value;
8897 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
8898
8899 if (bfd_is_abs_section (sec)
8900 && type_ptr != NULL
8901 && type_ptr->internal_elf_sym.st_shndx != 0)
8902 {
8903 /* This symbol is in a real ELF section which we did
8904 not create as a BFD section. Undo the mapping done
8905 by copy_private_symbol_data. */
8906 shndx = type_ptr->internal_elf_sym.st_shndx;
8907 switch (shndx)
8908 {
8909 case MAP_ONESYMTAB:
8910 shndx = elf_onesymtab (abfd);
8911 break;
8912 case MAP_DYNSYMTAB:
8913 shndx = elf_dynsymtab (abfd);
8914 break;
8915 case MAP_STRTAB:
8916 shndx = elf_strtab_sec (abfd);
8917 break;
8918 case MAP_SHSTRTAB:
8919 shndx = elf_shstrtab_sec (abfd);
8920 break;
8921 case MAP_SYM_SHNDX:
8922 if (elf_symtab_shndx_list (abfd))
8923 shndx = elf_symtab_shndx_list (abfd)->ndx;
8924 break;
8925 case SHN_COMMON:
8926 case SHN_ABS:
8927 shndx = SHN_ABS;
8928 break;
8929 default:
8930 if (shndx >= SHN_LOPROC && shndx <= SHN_HIOS)
8931 {
8932 if (bed->symbol_section_index)
8933 shndx = bed->symbol_section_index (abfd, type_ptr);
8934 /* Otherwise just leave the index alone. */
8935 }
8936 else
8937 {
8938 if (shndx > SHN_HIOS && shndx < SHN_HIRESERVE)
8939 _bfd_error_handler (_("%pB: \
8940 Unable to handle section index %x in ELF symbol. Using ABS instead."),
8941 abfd, shndx);
8942 shndx = SHN_ABS;
8943 }
8944 break;
8945 }
8946 }
8947 else
8948 {
8949 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
8950
8951 if (shndx == SHN_BAD)
8952 {
8953 asection *sec2;
8954
8955 /* Writing this would be a hell of a lot easier if
8956 we had some decent documentation on bfd, and
8957 knew what to expect of the library, and what to
8958 demand of applications. For example, it
8959 appears that `objcopy' might not set the
8960 section of a symbol to be a section that is
8961 actually in the output file. */
8962 sec2 = bfd_get_section_by_name (abfd, sec->name);
8963 if (sec2 != NULL)
8964 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
8965 if (shndx == SHN_BAD)
8966 {
8967 /* xgettext:c-format */
8968 _bfd_error_handler
8969 (_("unable to find equivalent output section"
8970 " for symbol '%s' from section '%s'"),
8971 syms[idx]->name ? syms[idx]->name : "<Local sym>",
8972 sec->name);
8973 bfd_set_error (bfd_error_invalid_operation);
8974 goto error_return;
8975 }
8976 }
8977 }
8978
8979 sym.st_shndx = shndx;
8980 }
8981
8982 int type;
8983 if ((flags & BSF_THREAD_LOCAL) != 0)
8984 type = STT_TLS;
8985 else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
8986 type = STT_GNU_IFUNC;
8987 else if ((flags & BSF_FUNCTION) != 0)
8988 type = STT_FUNC;
8989 else if ((flags & BSF_OBJECT) != 0)
8990 type = STT_OBJECT;
8991 else if ((flags & BSF_RELC) != 0)
8992 type = STT_RELC;
8993 else if ((flags & BSF_SRELC) != 0)
8994 type = STT_SRELC;
8995 else
8996 type = STT_NOTYPE;
8997
8998 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
8999 type = STT_TLS;
9000
9001 /* Processor-specific types. */
9002 if (type_ptr != NULL
9003 && bed->elf_backend_get_symbol_type)
9004 type = ((*bed->elf_backend_get_symbol_type)
9005 (&type_ptr->internal_elf_sym, type));
9006
9007 if (flags & BSF_SECTION_SYM)
9008 {
9009 if (flags & BSF_GLOBAL)
9010 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9011 else
9012 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
9013 }
9014 else if (bfd_is_com_section (syms[idx]->section))
9015 {
9016 if (type != STT_TLS)
9017 {
9018 if ((abfd->flags & BFD_CONVERT_ELF_COMMON))
9019 type = ((abfd->flags & BFD_USE_ELF_STT_COMMON)
9020 ? STT_COMMON : STT_OBJECT);
9021 else
9022 type = ((flags & BSF_ELF_COMMON) != 0
9023 ? STT_COMMON : STT_OBJECT);
9024 }
9025 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
9026 }
9027 else if (bfd_is_und_section (syms[idx]->section))
9028 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
9029 ? STB_WEAK
9030 : STB_GLOBAL),
9031 type);
9032 else if (flags & BSF_FILE)
9033 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
9034 else
9035 {
9036 int bind = STB_LOCAL;
9037
9038 if (flags & BSF_LOCAL)
9039 bind = STB_LOCAL;
9040 else if (flags & BSF_GNU_UNIQUE)
9041 bind = STB_GNU_UNIQUE;
9042 else if (flags & BSF_WEAK)
9043 bind = STB_WEAK;
9044 else if (flags & BSF_GLOBAL)
9045 bind = STB_GLOBAL;
9046
9047 sym.st_info = ELF_ST_INFO (bind, type);
9048 }
9049
9050 if (type_ptr != NULL)
9051 {
9052 sym.st_other = type_ptr->internal_elf_sym.st_other;
9053 sym.st_target_internal
9054 = type_ptr->internal_elf_sym.st_target_internal;
9055 }
9056 else
9057 {
9058 sym.st_other = 0;
9059 sym.st_target_internal = 0;
9060 }
9061
9062 symstrtab[outbound_syms_index].sym = sym;
9063 symstrtab[outbound_syms_index].dest_index = outbound_syms_index;
9064 outbound_syms_index++;
9065 }
9066
9067 /* Finalize the .strtab section. */
9068 _bfd_elf_strtab_finalize (stt);
9069
9070 /* Swap out the .strtab section. */
9071 for (idx = 0; idx < outbound_syms_index; idx++)
9072 {
9073 struct elf_sym_strtab *elfsym = &symstrtab[idx];
9074 if (elfsym->sym.st_name != 0)
9075 elfsym->sym.st_name = _bfd_elf_strtab_offset (stt,
9076 elfsym->sym.st_name);
9077 if (info && info->callbacks->ctf_new_symbol)
9078 info->callbacks->ctf_new_symbol (elfsym->dest_index,
9079 &elfsym->sym);
9080
9081 /* Inform the linker of the addition of this symbol. */
9082
9083 bed->s->swap_symbol_out (abfd, &elfsym->sym,
9084 (outbound_syms
9085 + (elfsym->dest_index
9086 * bed->s->sizeof_sym)),
9087 NPTR_ADD (outbound_shndx,
9088 (elfsym->dest_index
9089 * sizeof (Elf_External_Sym_Shndx))));
9090 }
9091 free (symstrtab);
9092
9093 *sttp = stt;
9094 symstrtab_hdr->sh_size = _bfd_elf_strtab_size (stt);
9095 symstrtab_hdr->sh_type = SHT_STRTAB;
9096 symstrtab_hdr->sh_addralign = 1;
9097
9098 return true;
9099 }
9100
9101 /* Return the number of bytes required to hold the symtab vector.
9102
9103 Note that we base it on the count plus 1, since we will null terminate
9104 the vector allocated based on this size. However, the ELF symbol table
9105 always has a dummy entry as symbol #0, so it ends up even. */
9106
9107 long
9108 _bfd_elf_get_symtab_upper_bound (bfd *abfd)
9109 {
9110 bfd_size_type symcount;
9111 long symtab_size;
9112 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
9113
9114 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
9115 if (symcount > LONG_MAX / sizeof (asymbol *))
9116 {
9117 bfd_set_error (bfd_error_file_too_big);
9118 return -1;
9119 }
9120 symtab_size = symcount * (sizeof (asymbol *));
9121 if (symcount == 0)
9122 symtab_size = sizeof (asymbol *);
9123 else if (!bfd_write_p (abfd))
9124 {
9125 ufile_ptr filesize = bfd_get_file_size (abfd);
9126
9127 if (filesize != 0 && (unsigned long) symtab_size > filesize)
9128 {
9129 bfd_set_error (bfd_error_file_truncated);
9130 return -1;
9131 }
9132 }
9133
9134 return symtab_size;
9135 }
9136
9137 long
9138 _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
9139 {
9140 bfd_size_type symcount;
9141 long symtab_size;
9142 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
9143
9144 if (elf_dynsymtab (abfd) == 0)
9145 {
9146 /* Check if there is dynamic symbol table. */
9147 symcount = elf_tdata (abfd)->dt_symtab_count;
9148 if (symcount)
9149 goto compute_symtab_size;
9150
9151 bfd_set_error (bfd_error_invalid_operation);
9152 return -1;
9153 }
9154
9155 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
9156 if (symcount > LONG_MAX / sizeof (asymbol *))
9157 {
9158 bfd_set_error (bfd_error_file_too_big);
9159 return -1;
9160 }
9161
9162 compute_symtab_size:
9163 symtab_size = symcount * (sizeof (asymbol *));
9164 if (symcount == 0)
9165 symtab_size = sizeof (asymbol *);
9166 else if (!bfd_write_p (abfd))
9167 {
9168 ufile_ptr filesize = bfd_get_file_size (abfd);
9169
9170 if (filesize != 0 && (unsigned long) symtab_size > filesize)
9171 {
9172 bfd_set_error (bfd_error_file_truncated);
9173 return -1;
9174 }
9175 }
9176
9177 return symtab_size;
9178 }
9179
9180 long
9181 _bfd_elf_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
9182 {
9183 if (asect->reloc_count != 0 && !bfd_write_p (abfd))
9184 {
9185 /* Sanity check reloc section size. */
9186 ufile_ptr filesize = bfd_get_file_size (abfd);
9187
9188 if (filesize != 0)
9189 {
9190 struct bfd_elf_section_data *d = elf_section_data (asect);
9191 bfd_size_type rel_size = d->rel.hdr ? d->rel.hdr->sh_size : 0;
9192 bfd_size_type rela_size = d->rela.hdr ? d->rela.hdr->sh_size : 0;
9193
9194 if (rel_size + rela_size > filesize
9195 || rel_size + rela_size < rel_size)
9196 {
9197 bfd_set_error (bfd_error_file_truncated);
9198 return -1;
9199 }
9200 }
9201 }
9202
9203 #if SIZEOF_LONG == SIZEOF_INT
9204 if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
9205 {
9206 bfd_set_error (bfd_error_file_too_big);
9207 return -1;
9208 }
9209 #endif
9210 return (asect->reloc_count + 1L) * sizeof (arelent *);
9211 }
9212
9213 /* Canonicalize the relocs. */
9214
9215 long
9216 _bfd_elf_canonicalize_reloc (bfd *abfd,
9217 sec_ptr section,
9218 arelent **relptr,
9219 asymbol **symbols)
9220 {
9221 arelent *tblptr;
9222 unsigned int i;
9223 elf_backend_data *bed = get_elf_backend_data (abfd);
9224
9225 if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
9226 return -1;
9227
9228 tblptr = section->relocation;
9229 for (i = 0; i < section->reloc_count; i++)
9230 *relptr++ = tblptr++;
9231
9232 *relptr = NULL;
9233
9234 return section->reloc_count;
9235 }
9236
9237 long
9238 _bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
9239 {
9240 elf_backend_data *bed = get_elf_backend_data (abfd);
9241 long symcount = bed->s->slurp_symbol_table (abfd, allocation, false);
9242
9243 if (symcount >= 0)
9244 abfd->symcount = symcount;
9245 return symcount;
9246 }
9247
9248 long
9249 _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
9250 asymbol **allocation)
9251 {
9252 elf_backend_data *bed = get_elf_backend_data (abfd);
9253 long symcount = bed->s->slurp_symbol_table (abfd, allocation, true);
9254
9255 if (symcount >= 0)
9256 abfd->dynsymcount = symcount;
9257 return symcount;
9258 }
9259
9260 /* Return the size required for the dynamic reloc entries. Any loadable
9261 section that was actually installed in the BFD, and has type SHT_REL
9262 or SHT_RELA, and uses the dynamic symbol table, is considered to be a
9263 dynamic reloc section. */
9264
9265 long
9266 _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
9267 {
9268 bfd_size_type count, ext_rel_size;
9269 asection *s;
9270
9271 if (elf_dynsymtab (abfd) == 0)
9272 {
9273 bfd_set_error (bfd_error_invalid_operation);
9274 return -1;
9275 }
9276
9277 count = 1;
9278 ext_rel_size = 0;
9279 for (s = abfd->sections; s != NULL; s = s->next)
9280 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
9281 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
9282 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
9283 && (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
9284 {
9285 ext_rel_size += elf_section_data (s)->this_hdr.sh_size;
9286 if (ext_rel_size < elf_section_data (s)->this_hdr.sh_size)
9287 {
9288 bfd_set_error (bfd_error_file_truncated);
9289 return -1;
9290 }
9291 count += NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
9292 if (count > LONG_MAX / sizeof (arelent *))
9293 {
9294 bfd_set_error (bfd_error_file_too_big);
9295 return -1;
9296 }
9297 }
9298 if (count > 1 && !bfd_write_p (abfd))
9299 {
9300 /* Sanity check reloc section sizes. */
9301 ufile_ptr filesize = bfd_get_file_size (abfd);
9302 if (filesize != 0 && ext_rel_size > filesize)
9303 {
9304 bfd_set_error (bfd_error_file_truncated);
9305 return -1;
9306 }
9307 }
9308 return count * sizeof (arelent *);
9309 }
9310
9311 /* Canonicalize the dynamic relocation entries. Note that we return the
9312 dynamic relocations as a single block, although they are actually
9313 associated with particular sections; the interface, which was
9314 designed for SunOS style shared libraries, expects that there is only
9315 one set of dynamic relocs. Any loadable section that was actually
9316 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
9317 dynamic symbol table, is considered to be a dynamic reloc section. */
9318
9319 long
9320 _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
9321 arelent **storage,
9322 asymbol **syms)
9323 {
9324 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
9325 asection *s;
9326 long ret;
9327
9328 if (elf_dynsymtab (abfd) == 0)
9329 {
9330 bfd_set_error (bfd_error_invalid_operation);
9331 return -1;
9332 }
9333
9334 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9335 ret = 0;
9336 for (s = abfd->sections; s != NULL; s = s->next)
9337 {
9338 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
9339 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
9340 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)
9341 && (elf_section_data (s)->this_hdr.sh_flags & SHF_COMPRESSED) == 0)
9342 {
9343 arelent *p;
9344 long count, i;
9345
9346 if (! (*slurp_relocs) (abfd, s, syms, true))
9347 return -1;
9348 count = NUM_SHDR_ENTRIES (&elf_section_data (s)->this_hdr);
9349 p = s->relocation;
9350 for (i = 0; i < count; i++)
9351 *storage++ = p++;
9352 ret += count;
9353 }
9354 }
9355
9356 *storage = NULL;
9357
9358 return ret;
9359 }
9360
9361 /* Read in the version information. */
9363
9364 bool
9365 _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
9366 {
9367 bfd_byte *contents = NULL;
9368 unsigned int freeidx = 0;
9369 size_t amt;
9370 void *contents_addr = NULL;
9371 size_t contents_size = 0;
9372
9373 if (elf_dynverref (abfd) != 0 || elf_tdata (abfd)->dt_verneed != NULL)
9374 {
9375 Elf_Internal_Shdr *hdr;
9376 Elf_External_Verneed *everneed;
9377 Elf_Internal_Verneed *iverneed;
9378 unsigned int i;
9379 bfd_byte *contents_end;
9380 size_t verneed_count;
9381 size_t verneed_size;
9382
9383 if (elf_tdata (abfd)->dt_verneed != NULL)
9384 {
9385 hdr = NULL;
9386 contents = elf_tdata (abfd)->dt_verneed;
9387 verneed_count = elf_tdata (abfd)->dt_verneed_count;
9388 verneed_size = verneed_count * sizeof (Elf_External_Verneed);
9389 }
9390 else
9391 {
9392 hdr = &elf_tdata (abfd)->dynverref_hdr;
9393
9394 if (hdr->sh_info > hdr->sh_size / sizeof (Elf_External_Verneed))
9395 {
9396 error_return_bad_verref:
9397 _bfd_error_handler
9398 (_("%pB: .gnu.version_r invalid entry"), abfd);
9399 bfd_set_error (bfd_error_bad_value);
9400 error_return_verref:
9401 elf_tdata (abfd)->verref = NULL;
9402 elf_tdata (abfd)->cverrefs = 0;
9403 goto error_return;
9404 }
9405
9406 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
9407 goto error_return_verref;
9408 contents_size = hdr->sh_size;
9409 contents = _bfd_mmap_temporary (abfd, contents_size,
9410 &contents_addr, &contents_size);
9411 if (contents == NULL)
9412 goto error_return_verref;
9413
9414 verneed_size = hdr->sh_size;
9415 verneed_count = hdr->sh_info;
9416 }
9417
9418 if (_bfd_mul_overflow (verneed_count,
9419 sizeof (Elf_Internal_Verneed), &amt))
9420 {
9421 bfd_set_error (bfd_error_file_too_big);
9422 goto error_return_verref;
9423 }
9424 if (amt == 0)
9425 goto error_return_verref;
9426 elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) bfd_zalloc (abfd, amt);
9427 if (elf_tdata (abfd)->verref == NULL)
9428 goto error_return_verref;
9429
9430 BFD_ASSERT (sizeof (Elf_External_Verneed)
9431 == sizeof (Elf_External_Vernaux));
9432 contents_end = (contents + verneed_size
9433 - sizeof (Elf_External_Verneed));
9434 everneed = (Elf_External_Verneed *) contents;
9435 iverneed = elf_tdata (abfd)->verref;
9436 for (i = 0; i < verneed_count; i++, iverneed++)
9437 {
9438 Elf_External_Vernaux *evernaux;
9439 Elf_Internal_Vernaux *ivernaux;
9440 unsigned int j;
9441
9442 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
9443
9444 iverneed->vn_bfd = abfd;
9445
9446 if (elf_use_dt_symtab_p (abfd))
9447 {
9448 if (iverneed->vn_file < elf_tdata (abfd)->dt_strsz)
9449 iverneed->vn_filename
9450 = elf_tdata (abfd)->dt_strtab + iverneed->vn_file;
9451 else
9452 iverneed->vn_filename = NULL;
9453 }
9454 else if (hdr == NULL)
9455 goto error_return_bad_verref;
9456 else
9457 iverneed->vn_filename
9458 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9459 iverneed->vn_file);
9460 if (iverneed->vn_filename == NULL)
9461 goto error_return_bad_verref;
9462
9463 if (iverneed->vn_cnt == 0)
9464 iverneed->vn_auxptr = NULL;
9465 else
9466 {
9467 if (_bfd_mul_overflow (iverneed->vn_cnt,
9468 sizeof (Elf_Internal_Vernaux), &amt))
9469 {
9470 bfd_set_error (bfd_error_file_too_big);
9471 goto error_return_verref;
9472 }
9473 iverneed->vn_auxptr = (struct elf_internal_vernaux *)
9474 bfd_alloc (abfd, amt);
9475 if (iverneed->vn_auxptr == NULL)
9476 goto error_return_verref;
9477 }
9478
9479 if (iverneed->vn_aux
9480 > (size_t) (contents_end - (bfd_byte *) everneed))
9481 goto error_return_bad_verref;
9482
9483 evernaux = ((Elf_External_Vernaux *)
9484 ((bfd_byte *) everneed + iverneed->vn_aux));
9485 ivernaux = iverneed->vn_auxptr;
9486 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
9487 {
9488 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
9489
9490 if (elf_use_dt_symtab_p (abfd))
9491 {
9492 if (ivernaux->vna_name < elf_tdata (abfd)->dt_strsz)
9493 ivernaux->vna_nodename
9494 = elf_tdata (abfd)->dt_strtab + ivernaux->vna_name;
9495 else
9496 ivernaux->vna_nodename = NULL;
9497 }
9498 else if (hdr == NULL)
9499 goto error_return_bad_verref;
9500 else
9501 ivernaux->vna_nodename
9502 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9503 ivernaux->vna_name);
9504 if (ivernaux->vna_nodename == NULL)
9505 goto error_return_bad_verref;
9506
9507 if (ivernaux->vna_other > freeidx)
9508 freeidx = ivernaux->vna_other;
9509
9510 ivernaux->vna_nextptr = NULL;
9511 if (ivernaux->vna_next == 0)
9512 {
9513 iverneed->vn_cnt = j + 1;
9514 break;
9515 }
9516 if (j + 1 < iverneed->vn_cnt)
9517 ivernaux->vna_nextptr = ivernaux + 1;
9518
9519 if (ivernaux->vna_next
9520 > (size_t) (contents_end - (bfd_byte *) evernaux))
9521 goto error_return_bad_verref;
9522
9523 evernaux = ((Elf_External_Vernaux *)
9524 ((bfd_byte *) evernaux + ivernaux->vna_next));
9525 }
9526
9527 iverneed->vn_nextref = NULL;
9528 if (iverneed->vn_next == 0)
9529 break;
9530 if (hdr != NULL && (i + 1 < hdr->sh_info))
9531 iverneed->vn_nextref = iverneed + 1;
9532
9533 if (iverneed->vn_next
9534 > (size_t) (contents_end - (bfd_byte *) everneed))
9535 goto error_return_bad_verref;
9536
9537 everneed = ((Elf_External_Verneed *)
9538 ((bfd_byte *) everneed + iverneed->vn_next));
9539 }
9540 elf_tdata (abfd)->cverrefs = i;
9541
9542 if (contents != elf_tdata (abfd)->dt_verneed)
9543 _bfd_munmap_temporary (contents_addr, contents_size);
9544 contents = NULL;
9545 contents_addr = NULL;
9546 }
9547
9548 if (elf_dynverdef (abfd) != 0 || elf_tdata (abfd)->dt_verdef != NULL)
9549 {
9550 Elf_Internal_Shdr *hdr;
9551 Elf_External_Verdef *everdef;
9552 Elf_Internal_Verdef *iverdef;
9553 Elf_Internal_Verdef *iverdefarr;
9554 Elf_Internal_Verdef iverdefmem;
9555 unsigned int i;
9556 unsigned int maxidx;
9557 bfd_byte *contents_end_def, *contents_end_aux;
9558 size_t verdef_count;
9559 size_t verdef_size;
9560
9561 if (elf_tdata (abfd)->dt_verdef != NULL)
9562 {
9563 hdr = NULL;
9564 contents = elf_tdata (abfd)->dt_verdef;
9565 verdef_count = elf_tdata (abfd)->dt_verdef_count;
9566 verdef_size = verdef_count * sizeof (Elf_External_Verdef);
9567 }
9568 else
9569 {
9570 hdr = &elf_tdata (abfd)->dynverdef_hdr;
9571
9572 if (hdr->sh_size < sizeof (Elf_External_Verdef))
9573 {
9574 error_return_bad_verdef:
9575 _bfd_error_handler
9576 (_("%pB: .gnu.version_d invalid entry"), abfd);
9577 bfd_set_error (bfd_error_bad_value);
9578 error_return_verdef:
9579 elf_tdata (abfd)->verdef = NULL;
9580 elf_tdata (abfd)->cverdefs = 0;
9581 goto error_return;
9582 }
9583
9584 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0)
9585 goto error_return_verdef;
9586 contents_size = hdr->sh_size;
9587 contents = _bfd_mmap_temporary (abfd, contents_size,
9588 &contents_addr, &contents_size);
9589 if (contents == NULL)
9590 goto error_return_verdef;
9591
9592 BFD_ASSERT (sizeof (Elf_External_Verdef)
9593 >= sizeof (Elf_External_Verdaux));
9594
9595 verdef_count = hdr->sh_info;
9596 verdef_size = hdr->sh_size;
9597 }
9598
9599 contents_end_def = (contents + verdef_size
9600 - sizeof (Elf_External_Verdef));
9601 contents_end_aux = (contents + verdef_size
9602 - sizeof (Elf_External_Verdaux));
9603
9604 /* We know the number of entries in the section but not the maximum
9605 index. Therefore we have to run through all entries and find
9606 the maximum. */
9607 everdef = (Elf_External_Verdef *) contents;
9608 maxidx = 0;
9609 for (i = 0; i < verdef_count; ++i)
9610 {
9611 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9612
9613 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) == 0)
9614 goto error_return_bad_verdef;
9615 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
9616 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
9617
9618 if (iverdefmem.vd_next == 0)
9619 break;
9620
9621 if (iverdefmem.vd_next
9622 > (size_t) (contents_end_def - (bfd_byte *) everdef))
9623 goto error_return_bad_verdef;
9624
9625 everdef = ((Elf_External_Verdef *)
9626 ((bfd_byte *) everdef + iverdefmem.vd_next));
9627 }
9628
9629 if (default_imported_symver)
9630 {
9631 if (freeidx > maxidx)
9632 maxidx = ++freeidx;
9633 else
9634 freeidx = ++maxidx;
9635 }
9636 if (_bfd_mul_overflow (maxidx, sizeof (Elf_Internal_Verdef), &amt))
9637 {
9638 bfd_set_error (bfd_error_file_too_big);
9639 goto error_return_verdef;
9640 }
9641
9642 if (amt == 0)
9643 goto error_return_verdef;
9644 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9645 if (elf_tdata (abfd)->verdef == NULL)
9646 goto error_return_verdef;
9647
9648 elf_tdata (abfd)->cverdefs = maxidx;
9649
9650 everdef = (Elf_External_Verdef *) contents;
9651 iverdefarr = elf_tdata (abfd)->verdef;
9652 for (i = 0; i < verdef_count; ++i)
9653 {
9654 Elf_External_Verdaux *everdaux;
9655 Elf_Internal_Verdaux *iverdaux;
9656 unsigned int j;
9657
9658 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
9659
9660 if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
9661 goto error_return_bad_verdef;
9662
9663 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
9664 memcpy (iverdef, &iverdefmem, offsetof (Elf_Internal_Verdef, vd_bfd));
9665
9666 iverdef->vd_bfd = abfd;
9667
9668 if (iverdef->vd_cnt == 0)
9669 iverdef->vd_auxptr = NULL;
9670 else
9671 {
9672 if (_bfd_mul_overflow (iverdef->vd_cnt,
9673 sizeof (Elf_Internal_Verdaux), &amt))
9674 {
9675 bfd_set_error (bfd_error_file_too_big);
9676 goto error_return_verdef;
9677 }
9678 iverdef->vd_auxptr = (struct elf_internal_verdaux *)
9679 bfd_alloc (abfd, amt);
9680 if (iverdef->vd_auxptr == NULL)
9681 goto error_return_verdef;
9682 }
9683
9684 if (iverdef->vd_aux
9685 > (size_t) (contents_end_aux - (bfd_byte *) everdef))
9686 goto error_return_bad_verdef;
9687
9688 everdaux = ((Elf_External_Verdaux *)
9689 ((bfd_byte *) everdef + iverdef->vd_aux));
9690 iverdaux = iverdef->vd_auxptr;
9691 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
9692 {
9693 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
9694
9695 if (elf_use_dt_symtab_p (abfd))
9696 {
9697 if (iverdaux->vda_name < elf_tdata (abfd)->dt_strsz)
9698 iverdaux->vda_nodename
9699 = elf_tdata (abfd)->dt_strtab + iverdaux->vda_name;
9700 else
9701 iverdaux->vda_nodename = NULL;
9702 }
9703 else
9704 iverdaux->vda_nodename
9705 = bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
9706 iverdaux->vda_name);
9707 if (iverdaux->vda_nodename == NULL)
9708 goto error_return_bad_verdef;
9709
9710 iverdaux->vda_nextptr = NULL;
9711 if (iverdaux->vda_next == 0)
9712 {
9713 iverdef->vd_cnt = j + 1;
9714 break;
9715 }
9716 if (j + 1 < iverdef->vd_cnt)
9717 iverdaux->vda_nextptr = iverdaux + 1;
9718
9719 if (iverdaux->vda_next
9720 > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
9721 goto error_return_bad_verdef;
9722
9723 everdaux = ((Elf_External_Verdaux *)
9724 ((bfd_byte *) everdaux + iverdaux->vda_next));
9725 }
9726
9727 iverdef->vd_nodename = NULL;
9728 if (iverdef->vd_cnt)
9729 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
9730
9731 iverdef->vd_nextdef = NULL;
9732 if (iverdef->vd_next == 0)
9733 break;
9734 if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
9735 iverdef->vd_nextdef = iverdef + 1;
9736
9737 everdef = ((Elf_External_Verdef *)
9738 ((bfd_byte *) everdef + iverdef->vd_next));
9739 }
9740
9741 if (contents != elf_tdata (abfd)->dt_verdef)
9742 _bfd_munmap_temporary (contents_addr, contents_size);
9743 contents = NULL;
9744 contents_addr = NULL;
9745 }
9746 else if (default_imported_symver)
9747 {
9748 if (freeidx < 3)
9749 freeidx = 3;
9750 else
9751 freeidx++;
9752
9753 if (_bfd_mul_overflow (freeidx, sizeof (Elf_Internal_Verdef), &amt))
9754 {
9755 bfd_set_error (bfd_error_file_too_big);
9756 goto error_return;
9757 }
9758 if (amt == 0)
9759 goto error_return;
9760 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
9761 if (elf_tdata (abfd)->verdef == NULL)
9762 goto error_return;
9763
9764 elf_tdata (abfd)->cverdefs = freeidx;
9765 }
9766
9767 /* Create a default version based on the soname. */
9768 if (default_imported_symver)
9769 {
9770 Elf_Internal_Verdef *iverdef;
9771 Elf_Internal_Verdaux *iverdaux;
9772
9773 iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];
9774
9775 iverdef->vd_version = VER_DEF_CURRENT;
9776 iverdef->vd_flags = 0;
9777 iverdef->vd_ndx = freeidx;
9778 iverdef->vd_cnt = 1;
9779
9780 iverdef->vd_bfd = abfd;
9781
9782 iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
9783 if (iverdef->vd_nodename == NULL)
9784 goto error_return_verdef;
9785 iverdef->vd_nextdef = NULL;
9786 iverdef->vd_auxptr = ((struct elf_internal_verdaux *)
9787 bfd_zalloc (abfd, sizeof (Elf_Internal_Verdaux)));
9788 if (iverdef->vd_auxptr == NULL)
9789 goto error_return_verdef;
9790
9791 iverdaux = iverdef->vd_auxptr;
9792 iverdaux->vda_nodename = iverdef->vd_nodename;
9793 }
9794
9795 return true;
9796
9797 error_return:
9798 if (contents != elf_tdata (abfd)->dt_verneed
9799 && contents != elf_tdata (abfd)->dt_verdef)
9800 _bfd_munmap_temporary (contents_addr, contents_size);
9801 return false;
9802 }
9803
9804 asymbol *
9806 _bfd_elf_make_empty_symbol (bfd *abfd)
9807 {
9808 elf_symbol_type *newsym;
9809
9810 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (*newsym));
9811 if (!newsym)
9812 return NULL;
9813 newsym->symbol.the_bfd = abfd;
9814 return &newsym->symbol;
9815 }
9816
9817 void
9818 _bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
9819 asymbol *symbol,
9820 symbol_info *ret)
9821 {
9822 bfd_symbol_info (symbol, ret);
9823 }
9824
9825 /* Return whether a symbol name implies a local symbol. Most targets
9826 use this function for the is_local_label_name entry point, but some
9827 override it. */
9828
9829 bool
9830 _bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
9831 const char *name)
9832 {
9833 /* Normal local symbols start with ``.L''. */
9834 if (name[0] == '.' && name[1] == 'L')
9835 return true;
9836
9837 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
9838 DWARF debugging symbols starting with ``..''. */
9839 if (name[0] == '.' && name[1] == '.')
9840 return true;
9841
9842 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
9843 emitting DWARF debugging output. I suspect this is actually a
9844 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
9845 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
9846 underscore to be emitted on some ELF targets). For ease of use,
9847 we treat such symbols as local. */
9848 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
9849 return true;
9850
9851 /* Treat assembler generated fake symbols, dollar local labels and
9852 forward-backward labels (aka local labels) as locals.
9853 These labels have the form:
9854
9855 L0^A.* (fake symbols)
9856
9857 [.]?L[0123456789]+{^A|^B}[0123456789]* (local labels)
9858
9859 Versions which start with .L will have already been matched above,
9860 so we only need to match the rest. */
9861 if (name[0] == 'L' && ISDIGIT (name[1]))
9862 {
9863 bool ret = false;
9864 const char * p;
9865 char c;
9866
9867 for (p = name + 2; (c = *p); p++)
9868 {
9869 if (c == 1 || c == 2)
9870 {
9871 if (c == 1 && p == name + 2)
9872 /* A fake symbol. */
9873 return true;
9874
9875 /* FIXME: We are being paranoid here and treating symbols like
9876 L0^Bfoo as if there were non-local, on the grounds that the
9877 assembler will never generate them. But can any symbol
9878 containing an ASCII value in the range 1-31 ever be anything
9879 other than some kind of local ? */
9880 ret = true;
9881 }
9882
9883 if (! ISDIGIT (c))
9884 {
9885 ret = false;
9886 break;
9887 }
9888 }
9889 return ret;
9890 }
9891
9892 return false;
9893 }
9894
9895 alent *
9896 _bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
9897 asymbol *symbol ATTRIBUTE_UNUSED)
9898 {
9899 abort ();
9900 return NULL;
9901 }
9902
9903 bool
9904 _bfd_elf_set_arch_mach (bfd *abfd,
9905 enum bfd_architecture arch,
9906 unsigned long machine)
9907 {
9908 /* If this isn't the right architecture for this backend, and this
9909 isn't the generic backend, fail. */
9910 if (arch != get_elf_backend_data (abfd)->arch
9911 && arch != bfd_arch_unknown
9912 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
9913 return false;
9914
9915 return bfd_default_set_arch_mach (abfd, arch, machine);
9916 }
9917
9918 /* Find the nearest line to a particular section and offset,
9919 for error reporting. */
9920
9921 bool
9922 _bfd_elf_find_nearest_line (bfd *abfd,
9923 asymbol **symbols,
9924 asection *section,
9925 bfd_vma offset,
9926 const char **filename_ptr,
9927 const char **functionname_ptr,
9928 unsigned int *line_ptr,
9929 unsigned int *discriminator_ptr)
9930 {
9931 return _bfd_elf_find_nearest_line_with_alt (abfd, NULL, symbols, section,
9932 offset, filename_ptr,
9933 functionname_ptr, line_ptr,
9934 discriminator_ptr);
9935 }
9936
9937 /* Find the nearest line to a particular section and offset,
9938 for error reporting. ALT_BFD representing a .gnu_debugaltlink file
9939 can be optionally specified. */
9940
9941 bool
9942 _bfd_elf_find_nearest_line_with_alt (bfd *abfd,
9943 const char *alt_filename,
9944 asymbol **symbols,
9945 asection *section,
9946 bfd_vma offset,
9947 const char **filename_ptr,
9948 const char **functionname_ptr,
9949 unsigned int *line_ptr,
9950 unsigned int *discriminator_ptr)
9951 {
9952 bool found;
9953
9954 if (_bfd_dwarf2_find_nearest_line_with_alt (abfd, alt_filename, symbols, NULL,
9955 section, offset, filename_ptr,
9956 functionname_ptr, line_ptr,
9957 discriminator_ptr,
9958 dwarf_debug_sections,
9959 &elf_tdata (abfd)->dwarf2_find_line_info))
9960 return true;
9961
9962 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
9963 filename_ptr, functionname_ptr, line_ptr))
9964 {
9965 if (!*functionname_ptr)
9966 _bfd_elf_find_function (abfd, symbols, section, offset,
9967 *filename_ptr ? NULL : filename_ptr,
9968 functionname_ptr);
9969 return true;
9970 }
9971
9972 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
9973 &found, filename_ptr,
9974 functionname_ptr, line_ptr,
9975 &elf_tdata (abfd)->line_info))
9976 return false;
9977 if (found && (*functionname_ptr || *line_ptr))
9978 return true;
9979
9980 if (symbols == NULL)
9981 return false;
9982
9983 if (! _bfd_elf_find_function (abfd, symbols, section, offset,
9984 filename_ptr, functionname_ptr))
9985 return false;
9986
9987 *line_ptr = 0;
9988 return true;
9989 }
9990
9991 /* Find the line for a symbol. */
9992
9993 bool
9994 _bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
9995 const char **filename_ptr, unsigned int *line_ptr)
9996 {
9997 struct elf_obj_tdata *tdata = elf_tdata (abfd);
9998 return _bfd_dwarf2_find_nearest_line (abfd, symbols, symbol, NULL, 0,
9999 filename_ptr, NULL, line_ptr, NULL,
10000 dwarf_debug_sections,
10001 &tdata->dwarf2_find_line_info);
10002 }
10003
10004 /* After a call to bfd_find_nearest_line, successive calls to
10005 bfd_find_inliner_info can be used to get source information about
10006 each level of function inlining that terminated at the address
10007 passed to bfd_find_nearest_line. Currently this is only supported
10008 for DWARF2 with appropriate DWARF3 extensions. */
10009
10010 bool
10011 _bfd_elf_find_inliner_info (bfd *abfd,
10012 const char **filename_ptr,
10013 const char **functionname_ptr,
10014 unsigned int *line_ptr)
10015 {
10016 struct elf_obj_tdata *tdata = elf_tdata (abfd);
10017 return _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
10018 functionname_ptr, line_ptr,
10019 &tdata->dwarf2_find_line_info);
10020 }
10021
10022 int
10023 _bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
10024 {
10025 elf_backend_data *bed = get_elf_backend_data (abfd);
10026 int ret = bed->s->sizeof_ehdr;
10027
10028 if (!bfd_link_relocatable (info))
10029 {
10030 bfd_size_type phdr_size = elf_program_header_size (abfd);
10031
10032 if (phdr_size == (bfd_size_type) -1)
10033 {
10034 struct elf_segment_map *m;
10035
10036 phdr_size = 0;
10037 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
10038 phdr_size += bed->s->sizeof_phdr;
10039
10040 if (phdr_size == 0)
10041 phdr_size = get_program_header_size (abfd, info);
10042 }
10043
10044 elf_program_header_size (abfd) = phdr_size;
10045 ret += phdr_size;
10046 }
10047
10048 return ret;
10049 }
10050
10051 bool
10052 _bfd_elf_set_section_contents (bfd *abfd,
10053 sec_ptr section,
10054 const void *location,
10055 file_ptr offset,
10056 bfd_size_type count)
10057 {
10058 Elf_Internal_Shdr *hdr;
10059
10060 if (! abfd->output_has_begun
10061 && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
10062 return false;
10063
10064 if (!count)
10065 return true;
10066
10067 hdr = &elf_section_data (section)->this_hdr;
10068 if (hdr->sh_offset == (file_ptr) -1)
10069 {
10070 unsigned char *contents;
10071
10072 if (bfd_section_is_ctf (section))
10073 /* Nothing to do with this section: the contents are generated
10074 later. */
10075 return true;
10076
10077 if ((offset + count) > hdr->sh_size)
10078 {
10079 _bfd_error_handler
10080 (_("%pB:%pA: error: attempting to write"
10081 " over the end of the section"),
10082 abfd, section);
10083
10084 bfd_set_error (bfd_error_invalid_operation);
10085 return false;
10086 }
10087
10088 contents = hdr->contents;
10089 if (contents == NULL)
10090 {
10091 _bfd_error_handler
10092 (_("%pB:%pA: error: attempting to write"
10093 " section into an empty buffer"),
10094 abfd, section);
10095
10096 bfd_set_error (bfd_error_invalid_operation);
10097 return false;
10098 }
10099
10100 memcpy (contents + offset, location, count);
10101 return true;
10102 }
10103
10104 return _bfd_generic_set_section_contents (abfd, section,
10105 location, offset, count);
10106 }
10107
10108 bool
10109 _bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
10110 arelent *cache_ptr ATTRIBUTE_UNUSED,
10111 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
10112 {
10113 abort ();
10114 return false;
10115 }
10116
10117 /* Try to convert a non-ELF reloc into an ELF one. */
10118
10119 bool
10120 _bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
10121 {
10122 /* Check whether we really have an ELF howto. */
10123
10124 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
10125 {
10126 bfd_reloc_code_real_type code;
10127 reloc_howto_type *howto;
10128
10129 /* Alien reloc: Try to determine its type to replace it with an
10130 equivalent ELF reloc. */
10131
10132 if (areloc->howto->pc_relative)
10133 {
10134 switch (areloc->howto->bitsize)
10135 {
10136 case 8:
10137 code = BFD_RELOC_8_PCREL;
10138 break;
10139 case 12:
10140 code = BFD_RELOC_12_PCREL;
10141 break;
10142 case 16:
10143 code = BFD_RELOC_16_PCREL;
10144 break;
10145 case 24:
10146 code = BFD_RELOC_24_PCREL;
10147 break;
10148 case 32:
10149 code = BFD_RELOC_32_PCREL;
10150 break;
10151 case 64:
10152 code = BFD_RELOC_64_PCREL;
10153 break;
10154 default:
10155 goto fail;
10156 }
10157
10158 howto = bfd_reloc_type_lookup (abfd, code);
10159
10160 if (howto && areloc->howto->pcrel_offset != howto->pcrel_offset)
10161 {
10162 if (howto->pcrel_offset)
10163 areloc->addend += areloc->address;
10164 else
10165 areloc->addend -= areloc->address; /* addend is unsigned!! */
10166 }
10167 }
10168 else
10169 {
10170 switch (areloc->howto->bitsize)
10171 {
10172 case 8:
10173 code = BFD_RELOC_8;
10174 break;
10175 case 14:
10176 code = BFD_RELOC_14;
10177 break;
10178 case 16:
10179 code = BFD_RELOC_16;
10180 break;
10181 case 26:
10182 code = BFD_RELOC_26;
10183 break;
10184 case 32:
10185 code = BFD_RELOC_32;
10186 break;
10187 case 64:
10188 code = BFD_RELOC_64;
10189 break;
10190 default:
10191 goto fail;
10192 }
10193
10194 howto = bfd_reloc_type_lookup (abfd, code);
10195 }
10196
10197 if (howto)
10198 areloc->howto = howto;
10199 else
10200 goto fail;
10201 }
10202
10203 return true;
10204
10205 fail:
10206 /* xgettext:c-format */
10207 _bfd_error_handler (_("%pB: %s unsupported"),
10208 abfd, areloc->howto->name);
10209 bfd_set_error (bfd_error_sorry);
10210 return false;
10211 }
10212
10213 bool
10214 _bfd_elf_free_cached_info (bfd *abfd)
10215 {
10216 struct elf_obj_tdata *tdata;
10217
10218 if ((bfd_get_format (abfd) == bfd_object
10219 || bfd_get_format (abfd) == bfd_core)
10220 && (tdata = elf_tdata (abfd)) != NULL)
10221 {
10222 if (tdata->o != NULL && elf_shstrtab (abfd) != NULL)
10223 _bfd_elf_strtab_free (elf_shstrtab (abfd));
10224 _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
10225 _bfd_dwarf1_cleanup_debug_info (abfd, &tdata->dwarf1_find_line_info);
10226 _bfd_stab_cleanup (abfd, &tdata->line_info);
10227 for (asection *sec = abfd->sections; sec != NULL; sec = sec->next)
10228 {
10229 _bfd_elf_munmap_section_contents (sec, sec->contents);
10230 if (!sec->alloced)
10231 {
10232 free (elf_section_data (sec)->this_hdr.contents);
10233 elf_section_data (sec)->this_hdr.contents = NULL;
10234 }
10235 free (elf_section_data (sec)->relocs);
10236 elf_section_data (sec)->relocs = NULL;
10237 if (sec->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
10238 {
10239 struct eh_frame_sec_info *sec_info = sec->sec_info;
10240 free (sec_info->cies);
10241 }
10242 }
10243 free (tdata->symtab_hdr.contents);
10244 tdata->symtab_hdr.contents = NULL;
10245 }
10246
10247 return _bfd_generic_bfd_free_cached_info (abfd);
10248 }
10249
10250 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
10251 in the relocation's offset. Thus we cannot allow any sort of sanity
10252 range-checking to interfere. There is nothing else to do in processing
10253 this reloc. */
10254
10255 bfd_reloc_status_type
10256 _bfd_elf_rel_vtable_reloc_fn
10257 (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
10258 struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
10259 void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
10260 bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
10261 {
10262 return bfd_reloc_ok;
10263 }
10264
10265 /* Elf core file support. Much of this only works on native
10267 toolchains, since we rely on knowing the
10268 machine-dependent procfs structure in order to pick
10269 out details about the corefile. */
10270
10271 #ifdef HAVE_SYS_PROCFS_H
10272 # include <sys/procfs.h>
10273 #endif
10274
10275 /* Return a PID that identifies a "thread" for threaded cores, or the
10276 PID of the main process for non-threaded cores. */
10277
10278 static int
10279 elfcore_make_pid (bfd *abfd)
10280 {
10281 int pid;
10282
10283 pid = elf_tdata (abfd)->core->lwpid;
10284 if (pid == 0)
10285 pid = elf_tdata (abfd)->core->pid;
10286
10287 return pid;
10288 }
10289
10290 /* If there isn't a section called NAME, make one, using data from
10291 SECT. Note, this function will generate a reference to NAME, so
10292 you shouldn't deallocate or overwrite it. */
10293
10294 static bool
10295 elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
10296 {
10297 asection *sect2;
10298
10299 if (bfd_get_section_by_name (abfd, name) != NULL)
10300 return true;
10301
10302 sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
10303 if (sect2 == NULL)
10304 return false;
10305
10306 sect2->size = sect->size;
10307 sect2->filepos = sect->filepos;
10308 sect2->alignment_power = sect->alignment_power;
10309 return true;
10310 }
10311
10312 /* Create a pseudosection containing SIZE bytes at FILEPOS. This
10313 actually creates up to two pseudosections:
10314 - For the single-threaded case, a section named NAME, unless
10315 such a section already exists.
10316 - For the multi-threaded case, a section named "NAME/PID", where
10317 PID is elfcore_make_pid (abfd).
10318 Both pseudosections have identical contents. */
10319 bool
10320 _bfd_elfcore_make_pseudosection (bfd *abfd,
10321 char *name,
10322 size_t size,
10323 ufile_ptr filepos)
10324 {
10325 char buf[100];
10326 char *threaded_name;
10327 size_t len;
10328 asection *sect;
10329
10330 /* Build the section name. */
10331
10332 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
10333 len = strlen (buf) + 1;
10334 threaded_name = (char *) bfd_alloc (abfd, len);
10335 if (threaded_name == NULL)
10336 return false;
10337 memcpy (threaded_name, buf, len);
10338
10339 sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
10340 SEC_HAS_CONTENTS);
10341 if (sect == NULL)
10342 return false;
10343 sect->size = size;
10344 sect->filepos = filepos;
10345 sect->alignment_power = 2;
10346
10347 return elfcore_maybe_make_sect (abfd, name, sect);
10348 }
10349
10350 static bool
10351 elfcore_make_auxv_note_section (bfd *abfd, Elf_Internal_Note *note,
10352 size_t offs)
10353 {
10354 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
10355 SEC_HAS_CONTENTS);
10356
10357 if (sect == NULL)
10358 return false;
10359
10360 sect->size = note->descsz - offs;
10361 sect->filepos = note->descpos + offs;
10362 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
10363
10364 return true;
10365 }
10366
10367 /* prstatus_t exists on:
10368 solaris 2.5+
10369 linux 2.[01] + glibc
10370 unixware 4.2
10371 */
10372
10373 #if defined (HAVE_PRSTATUS_T)
10374
10375 static bool
10376 elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
10377 {
10378 size_t size;
10379 int offset;
10380
10381 if (note->descsz == sizeof (prstatus_t))
10382 {
10383 prstatus_t prstat;
10384
10385 size = sizeof (prstat.pr_reg);
10386 offset = offsetof (prstatus_t, pr_reg);
10387 memcpy (&prstat, note->descdata, sizeof (prstat));
10388
10389 /* Do not overwrite the core signal if it
10390 has already been set by another thread. */
10391 if (elf_tdata (abfd)->core->signal == 0)
10392 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
10393 if (elf_tdata (abfd)->core->pid == 0)
10394 elf_tdata (abfd)->core->pid = prstat.pr_pid;
10395
10396 /* pr_who exists on:
10397 solaris 2.5+
10398 unixware 4.2
10399 pr_who doesn't exist on:
10400 linux 2.[01]
10401 */
10402 #if defined (HAVE_PRSTATUS_T_PR_WHO)
10403 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
10404 #else
10405 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
10406 #endif
10407 }
10408 #if defined (HAVE_PRSTATUS32_T)
10409 else if (note->descsz == sizeof (prstatus32_t))
10410 {
10411 /* 64-bit host, 32-bit corefile */
10412 prstatus32_t prstat;
10413
10414 size = sizeof (prstat.pr_reg);
10415 offset = offsetof (prstatus32_t, pr_reg);
10416 memcpy (&prstat, note->descdata, sizeof (prstat));
10417
10418 /* Do not overwrite the core signal if it
10419 has already been set by another thread. */
10420 if (elf_tdata (abfd)->core->signal == 0)
10421 elf_tdata (abfd)->core->signal = prstat.pr_cursig;
10422 if (elf_tdata (abfd)->core->pid == 0)
10423 elf_tdata (abfd)->core->pid = prstat.pr_pid;
10424
10425 /* pr_who exists on:
10426 solaris 2.5+
10427 unixware 4.2
10428 pr_who doesn't exist on:
10429 linux 2.[01]
10430 */
10431 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
10432 elf_tdata (abfd)->core->lwpid = prstat.pr_who;
10433 #else
10434 elf_tdata (abfd)->core->lwpid = prstat.pr_pid;
10435 #endif
10436 }
10437 #endif /* HAVE_PRSTATUS32_T */
10438 else
10439 {
10440 /* Fail - we don't know how to handle any other
10441 note size (ie. data object type). */
10442 return true;
10443 }
10444
10445 /* Make a ".reg/999" section and a ".reg" section. */
10446 return _bfd_elfcore_make_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG,
10447 size, note->descpos + offset);
10448 }
10449 #endif /* defined (HAVE_PRSTATUS_T) */
10450
10451 /* Create a pseudosection containing the exact contents of NOTE. */
10452 static bool
10453 elfcore_make_note_pseudosection (bfd *abfd,
10454 char *name,
10455 Elf_Internal_Note *note)
10456 {
10457 return _bfd_elfcore_make_pseudosection (abfd, name,
10458 note->descsz, note->descpos);
10459 }
10460
10461 /* There isn't a consistent prfpregset_t across platforms,
10462 but it doesn't matter, because we don't have to pick this
10463 data structure apart. */
10464
10465 static bool
10466 elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
10467 {
10468 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, note);
10469 }
10470
10471 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
10472 type of NT_PRXFPREG. Just include the whole note's contents
10473 literally. */
10474
10475 static bool
10476 elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
10477 {
10478 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_XFP, note);
10479 }
10480
10481 /* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
10482 with a note type of NT_X86_XSTATE. Just include the whole note's
10483 contents literally. */
10484
10485 static bool
10486 elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
10487 {
10488 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_XSTATE, note);
10489 }
10490
10491 static bool
10492 elfcore_grok_sspreg (bfd *abfd, Elf_Internal_Note *note)
10493 {
10494 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_SSP, note);
10495 }
10496
10497 /* Linux dumps the XSAVE Layout description in a note named "LINUX"
10498 with a note type of NT_X86_XSAVE_LAYOUT. */
10499 static bool
10500 elfcore_grok_xsave_layout_desc (bfd *abfd, Elf_Internal_Note *note)
10501 {
10502 return elfcore_make_note_pseudosection (abfd,
10503 NOTE_PSEUDO_SECTION_XSAVE_LAYOUT,
10504 note);
10505 }
10506
10507 static bool
10508 elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
10509 {
10510 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_VMX, note);
10511 }
10512
10513 static bool
10514 elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
10515 {
10516 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_VSX, note);
10517 }
10518
10519 static bool
10520 elfcore_grok_ppc_tar (bfd *abfd, Elf_Internal_Note *note)
10521 {
10522 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TAR, note);
10523 }
10524
10525 static bool
10526 elfcore_grok_ppc_ppr (bfd *abfd, Elf_Internal_Note *note)
10527 {
10528 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_PPR, note);
10529 }
10530
10531 static bool
10532 elfcore_grok_ppc_dscr (bfd *abfd, Elf_Internal_Note *note)
10533 {
10534 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_DSCR, note);
10535 }
10536
10537 static bool
10538 elfcore_grok_ppc_ebb (bfd *abfd, Elf_Internal_Note *note)
10539 {
10540 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_EBB, note);
10541 }
10542
10543 static bool
10544 elfcore_grok_ppc_pmu (bfd *abfd, Elf_Internal_Note *note)
10545 {
10546 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_PMU, note);
10547 }
10548
10549 static bool
10550 elfcore_grok_ppc_tm_cgpr (bfd *abfd, Elf_Internal_Note *note)
10551 {
10552 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CGPR, note);
10553 }
10554
10555 static bool
10556 elfcore_grok_ppc_tm_cfpr (bfd *abfd, Elf_Internal_Note *note)
10557 {
10558 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CFPR, note);
10559 }
10560
10561 static bool
10562 elfcore_grok_ppc_tm_cvmx (bfd *abfd, Elf_Internal_Note *note)
10563 {
10564 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CVMX, note);
10565 }
10566
10567 static bool
10568 elfcore_grok_ppc_tm_cvsx (bfd *abfd, Elf_Internal_Note *note)
10569 {
10570 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CVSX, note);
10571 }
10572
10573 static bool
10574 elfcore_grok_ppc_tm_spr (bfd *abfd, Elf_Internal_Note *note)
10575 {
10576 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_SPR, note);
10577 }
10578
10579 static bool
10580 elfcore_grok_ppc_tm_ctar (bfd *abfd, Elf_Internal_Note *note)
10581 {
10582 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CTAR, note);
10583 }
10584
10585 static bool
10586 elfcore_grok_ppc_tm_cppr (bfd *abfd, Elf_Internal_Note *note)
10587 {
10588 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CPPR, note);
10589 }
10590
10591 static bool
10592 elfcore_grok_ppc_tm_cdscr (bfd *abfd, Elf_Internal_Note *note)
10593 {
10594 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_PPC_TM_CDSCR, note);
10595 }
10596
10597 static bool
10598 elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
10599 {
10600 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_HIGH_GPRS, note);
10601 }
10602
10603 static bool
10604 elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
10605 {
10606 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_TIMER, note);
10607 }
10608
10609 static bool
10610 elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
10611 {
10612 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_TODCMP, note);
10613 }
10614
10615 static bool
10616 elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
10617 {
10618 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_TODPREG, note);
10619 }
10620
10621 static bool
10622 elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
10623 {
10624 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_CTRS, note);
10625 }
10626
10627 static bool
10628 elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
10629 {
10630 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_PREFIX, note);
10631 }
10632
10633 static bool
10634 elfcore_grok_s390_last_break (bfd *abfd, Elf_Internal_Note *note)
10635 {
10636 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_LAST_BREAK, note);
10637 }
10638
10639 static bool
10640 elfcore_grok_s390_system_call (bfd *abfd, Elf_Internal_Note *note)
10641 {
10642 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_SYSTEM_CALL, note);
10643 }
10644
10645 static bool
10646 elfcore_grok_s390_tdb (bfd *abfd, Elf_Internal_Note *note)
10647 {
10648 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_TDB, note);
10649 }
10650
10651 static bool
10652 elfcore_grok_s390_vxrs_low (bfd *abfd, Elf_Internal_Note *note)
10653 {
10654 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_VXRS_LOW, note);
10655 }
10656
10657 static bool
10658 elfcore_grok_s390_vxrs_high (bfd *abfd, Elf_Internal_Note *note)
10659 {
10660 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_VXRS_HIGH, note);
10661 }
10662
10663 static bool
10664 elfcore_grok_s390_gs_cb (bfd *abfd, Elf_Internal_Note *note)
10665 {
10666 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_GS_CB, note);
10667 }
10668
10669 static bool
10670 elfcore_grok_s390_gs_bc (bfd *abfd, Elf_Internal_Note *note)
10671 {
10672 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_S390_GS_BC, note);
10673 }
10674
10675 static bool
10676 elfcore_grok_arm_vfp (bfd *abfd, Elf_Internal_Note *note)
10677 {
10678 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_ARM_VFP, note);
10679 }
10680
10681 static bool
10682 elfcore_grok_aarch_tls (bfd *abfd, Elf_Internal_Note *note)
10683 {
10684 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_TLS, note);
10685 }
10686
10687 static bool
10688 elfcore_grok_aarch_hw_break (bfd *abfd, Elf_Internal_Note *note)
10689 {
10690 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_HW_BREAK, note);
10691 }
10692
10693 static bool
10694 elfcore_grok_aarch_hw_watch (bfd *abfd, Elf_Internal_Note *note)
10695 {
10696 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_HW_WATCH, note);
10697 }
10698
10699 static bool
10700 elfcore_grok_aarch_sve (bfd *abfd, Elf_Internal_Note *note)
10701 {
10702 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_SVE, note);
10703 }
10704
10705 static bool
10706 elfcore_grok_aarch_pauth (bfd *abfd, Elf_Internal_Note *note)
10707 {
10708 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_PAUTH, note);
10709 }
10710
10711 static bool
10712 elfcore_grok_aarch_mte (bfd *abfd, Elf_Internal_Note *note)
10713 {
10714 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_MTE, note);
10715 }
10716
10717 static bool
10718 elfcore_grok_aarch_ssve (bfd *abfd, Elf_Internal_Note *note)
10719 {
10720 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_SSVE, note);
10721 }
10722
10723 static bool
10724 elfcore_grok_aarch_za (bfd *abfd, Elf_Internal_Note *note)
10725 {
10726 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_ZA, note);
10727 }
10728
10729 /* Convert NOTE into a bfd_section called ".reg-aarch-zt". Return TRUE if
10730 successful, otherwise return FALSE. */
10731
10732 static bool
10733 elfcore_grok_aarch_zt (bfd *abfd, Elf_Internal_Note *note)
10734 {
10735 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_ZT, note);
10736 }
10737
10738 /* Convert NOTE into a bfd_section called ".reg-aarch-gcs". Return TRUE if
10739 successful, otherwise return FALSE. */
10740
10741 static bool
10742 elfcore_grok_aarch_gcs (bfd *abfd, Elf_Internal_Note *note)
10743 {
10744 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_GCS, note);
10745 }
10746
10747 /* Convert NOTE into the appropriate note pseudo-section for the AArch64 FPMR.
10748 * Return TRUE if successful, otherwise return FALSE. */
10749
10750 static bool
10751 elfcore_grok_aarch_fpmr (bfd *abfd, Elf_Internal_Note *note)
10752 {
10753 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_AARCH_FPMR, note);
10754 }
10755
10756 static bool
10757 elfcore_grok_arc_v2 (bfd *abfd, Elf_Internal_Note *note)
10758 {
10759 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_ARC_V2, note);
10760 }
10761
10762 /* Convert NOTE into a bfd_section called ".reg-riscv-csr". Return TRUE if
10763 successful otherwise, return FALSE. */
10764
10765 static bool
10766 elfcore_grok_riscv_csr (bfd *abfd, Elf_Internal_Note *note)
10767 {
10768 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_RISCV_CSR, note);
10769 }
10770
10771 /* Convert NOTE into a bfd_section called ".gdb-tdesc". Return TRUE if
10772 successful otherwise, return FALSE. */
10773
10774 static bool
10775 elfcore_grok_gdb_tdesc (bfd *abfd, Elf_Internal_Note *note)
10776 {
10777 return elfcore_make_note_pseudosection (abfd, ".gdb-tdesc", note);
10778 }
10779
10780 static bool
10781 elfcore_grok_i386_tls (bfd *abfd, Elf_Internal_Note *note)
10782 {
10783 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_I386_TLS,
10784 note);
10785 }
10786
10787 static bool
10788 elfcore_grok_loongarch_cpucfg (bfd *abfd, Elf_Internal_Note *note)
10789 {
10790 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_LOONGARCH_CPUCFG, note);
10791 }
10792
10793 static bool
10794 elfcore_grok_loongarch_lbt (bfd *abfd, Elf_Internal_Note *note)
10795 {
10796 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_LOONGARCH_LBT, note);
10797 }
10798
10799 static bool
10800 elfcore_grok_loongarch_lsx (bfd *abfd, Elf_Internal_Note *note)
10801 {
10802 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_LOONGARCH_LSX, note);
10803 }
10804
10805 static bool
10806 elfcore_grok_loongarch_lasx (bfd *abfd, Elf_Internal_Note *note)
10807 {
10808 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_LOONGARCH_LASX, note);
10809 }
10810
10811 #if defined (HAVE_PRPSINFO_T)
10812 typedef prpsinfo_t elfcore_psinfo_t;
10813 #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
10814 typedef prpsinfo32_t elfcore_psinfo32_t;
10815 #endif
10816 #endif
10817
10818 #if defined (HAVE_PSINFO_T)
10819 typedef psinfo_t elfcore_psinfo_t;
10820 #if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
10821 typedef psinfo32_t elfcore_psinfo32_t;
10822 #endif
10823 #endif
10824
10825 /* return a malloc'ed copy of a string at START which is at
10826 most MAX bytes long, possibly without a terminating '\0'.
10827 the copy will always have a terminating '\0'. */
10828
10829 char *
10830 _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
10831 {
10832 char *dups;
10833 char *end = (char *) memchr (start, '\0', max);
10834 size_t len;
10835
10836 if (end == NULL)
10837 len = max;
10838 else
10839 len = end - start;
10840
10841 dups = (char *) bfd_alloc (abfd, len + 1);
10842 if (dups == NULL)
10843 return NULL;
10844
10845 memcpy (dups, start, len);
10846 dups[len] = '\0';
10847
10848 return dups;
10849 }
10850
10851 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
10852 static bool
10853 elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
10854 {
10855 if (note->descsz == sizeof (elfcore_psinfo_t))
10856 {
10857 elfcore_psinfo_t psinfo;
10858
10859 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10860
10861 #if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
10862 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10863 #endif
10864 elf_tdata (abfd)->core->program
10865 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10866 sizeof (psinfo.pr_fname));
10867
10868 elf_tdata (abfd)->core->command
10869 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10870 sizeof (psinfo.pr_psargs));
10871 }
10872 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
10873 else if (note->descsz == sizeof (elfcore_psinfo32_t))
10874 {
10875 /* 64-bit host, 32-bit corefile */
10876 elfcore_psinfo32_t psinfo;
10877
10878 memcpy (&psinfo, note->descdata, sizeof (psinfo));
10879
10880 #if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
10881 elf_tdata (abfd)->core->pid = psinfo.pr_pid;
10882 #endif
10883 elf_tdata (abfd)->core->program
10884 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
10885 sizeof (psinfo.pr_fname));
10886
10887 elf_tdata (abfd)->core->command
10888 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
10889 sizeof (psinfo.pr_psargs));
10890 }
10891 #endif
10892
10893 else
10894 {
10895 /* Fail - we don't know how to handle any other
10896 note size (ie. data object type). */
10897 return true;
10898 }
10899
10900 /* Note that for some reason, a spurious space is tacked
10901 onto the end of the args in some (at least one anyway)
10902 implementations, so strip it off if it exists. */
10903
10904 {
10905 char *command = elf_tdata (abfd)->core->command;
10906 int n = strlen (command);
10907
10908 if (0 < n && command[n - 1] == ' ')
10909 command[n - 1] = '\0';
10910 }
10911
10912 return true;
10913 }
10914 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
10915
10916 #if defined (HAVE_PSTATUS_T)
10917 static bool
10918 elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
10919 {
10920 if (note->descsz == sizeof (pstatus_t)
10921 #if defined (HAVE_PXSTATUS_T)
10922 || note->descsz == sizeof (pxstatus_t)
10923 #endif
10924 )
10925 {
10926 pstatus_t pstat;
10927
10928 memcpy (&pstat, note->descdata, sizeof (pstat));
10929
10930 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10931 }
10932 #if defined (HAVE_PSTATUS32_T)
10933 else if (note->descsz == sizeof (pstatus32_t))
10934 {
10935 /* 64-bit host, 32-bit corefile */
10936 pstatus32_t pstat;
10937
10938 memcpy (&pstat, note->descdata, sizeof (pstat));
10939
10940 elf_tdata (abfd)->core->pid = pstat.pr_pid;
10941 }
10942 #endif
10943 /* Could grab some more details from the "representative"
10944 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
10945 NT_LWPSTATUS note, presumably. */
10946
10947 return true;
10948 }
10949 #endif /* defined (HAVE_PSTATUS_T) */
10950
10951 #if defined (HAVE_LWPSTATUS_T)
10952 static bool
10953 elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
10954 {
10955 lwpstatus_t lwpstat;
10956 char buf[100];
10957 char *name;
10958 size_t len;
10959 asection *sect;
10960
10961 if (note->descsz != sizeof (lwpstat)
10962 #if defined (HAVE_LWPXSTATUS_T)
10963 && note->descsz != sizeof (lwpxstatus_t)
10964 #endif
10965 )
10966 return true;
10967
10968 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
10969
10970 elf_tdata (abfd)->core->lwpid = lwpstat.pr_lwpid;
10971 /* Do not overwrite the core signal if it has already been set by
10972 another thread. */
10973 if (elf_tdata (abfd)->core->signal == 0)
10974 elf_tdata (abfd)->core->signal = lwpstat.pr_cursig;
10975
10976 /* Make a ".reg/999" section. */
10977
10978 sprintf (buf, NOTE_PSEUDO_SECTION_REG "/%d", elfcore_make_pid (abfd));
10979 len = strlen (buf) + 1;
10980 name = bfd_alloc (abfd, len);
10981 if (name == NULL)
10982 return false;
10983 memcpy (name, buf, len);
10984
10985 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
10986 if (sect == NULL)
10987 return false;
10988
10989 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
10990 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
10991 sect->filepos = note->descpos
10992 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
10993 #endif
10994
10995 #if defined (HAVE_LWPSTATUS_T_PR_REG)
10996 sect->size = sizeof (lwpstat.pr_reg);
10997 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
10998 #endif
10999
11000 sect->alignment_power = 2;
11001
11002 if (!elfcore_maybe_make_sect (abfd, NOTE_PSEUDO_SECTION_REG, sect))
11003 return false;
11004
11005 /* Make a ".reg2/999" section */
11006
11007 sprintf (buf, NOTE_PSEUDO_SECTION_REG2 "/%d", elfcore_make_pid (abfd));
11008 len = strlen (buf) + 1;
11009 name = bfd_alloc (abfd, len);
11010 if (name == NULL)
11011 return false;
11012 memcpy (name, buf, len);
11013
11014 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11015 if (sect == NULL)
11016 return false;
11017
11018 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
11019 sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
11020 sect->filepos = note->descpos
11021 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
11022 #endif
11023
11024 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
11025 sect->size = sizeof (lwpstat.pr_fpreg);
11026 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
11027 #endif
11028
11029 sect->alignment_power = 2;
11030
11031 return elfcore_maybe_make_sect (abfd, NOTE_PSEUDO_SECTION_REG2, sect);
11032 }
11033 #endif /* defined (HAVE_LWPSTATUS_T) */
11034
11035 /* These constants, and the structure offsets used below, are defined by
11036 Cygwin's core_dump.h */
11037 #define NOTE_INFO_PROCESS 1
11038 #define NOTE_INFO_THREAD 2
11039 #define NOTE_INFO_MODULE 3
11040 #define NOTE_INFO_MODULE64 4
11041
11042 static bool
11043 elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
11044 {
11045 char buf[30];
11046 char *name;
11047 size_t len;
11048 unsigned int name_size;
11049 asection *sect;
11050 unsigned int type;
11051 int is_active_thread;
11052 bfd_vma base_addr;
11053
11054 if (note->descsz < 4)
11055 return true;
11056
11057 if (! startswith (note->namedata, "win32"))
11058 return true;
11059
11060 type = bfd_get_32 (abfd, note->descdata);
11061
11062 static const struct
11063 {
11064 const char *type_name;
11065 unsigned long min_size;
11066 } size_check[] =
11067 {
11068 { "NOTE_INFO_PROCESS", 12 },
11069 { "NOTE_INFO_THREAD", 12 },
11070 { "NOTE_INFO_MODULE", 12 },
11071 { "NOTE_INFO_MODULE64", 16 },
11072 };
11073
11074 if (type == 0 || type > (sizeof(size_check)/sizeof(size_check[0])))
11075 return true;
11076
11077 if (note->descsz < size_check[type - 1].min_size)
11078 {
11079 _bfd_error_handler (_("%pB: warning: win32pstatus %s of size %lu bytes"
11080 " is too small"),
11081 abfd, size_check[type - 1].type_name, note->descsz);
11082 return true;
11083 }
11084
11085 switch (type)
11086 {
11087 case NOTE_INFO_PROCESS:
11088 /* FIXME: need to add ->core->command. */
11089 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 4);
11090 elf_tdata (abfd)->core->signal = bfd_get_32 (abfd, note->descdata + 8);
11091 break;
11092
11093 case NOTE_INFO_THREAD:
11094 /* Make a ".reg/<tid>" section containing the Win32 API thread CONTEXT
11095 structure. */
11096 /* thread_info.tid */
11097 sprintf (buf, NOTE_PSEUDO_SECTION_REG "/%ld", (long) bfd_get_32 (abfd, note->descdata + 4));
11098
11099 len = strlen (buf) + 1;
11100 name = (char *) bfd_alloc (abfd, len);
11101 if (name == NULL)
11102 return false;
11103
11104 memcpy (name, buf, len);
11105
11106 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11107 if (sect == NULL)
11108 return false;
11109
11110 /* sizeof (thread_info.thread_context) */
11111 sect->size = note->descsz - 12;
11112 /* offsetof (thread_info.thread_context) */
11113 sect->filepos = note->descpos + 12;
11114 sect->alignment_power = 2;
11115
11116 /* thread_info.is_active_thread */
11117 is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
11118
11119 if (is_active_thread)
11120 if (! elfcore_maybe_make_sect (abfd, NOTE_PSEUDO_SECTION_REG, sect))
11121 return false;
11122 break;
11123
11124 case NOTE_INFO_MODULE:
11125 case NOTE_INFO_MODULE64:
11126 /* Make a ".module/xxxxxxxx" section. */
11127 if (type == NOTE_INFO_MODULE)
11128 {
11129 /* module_info.base_address */
11130 base_addr = bfd_get_32 (abfd, note->descdata + 4);
11131 sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
11132 /* module_info.module_name_size */
11133 name_size = bfd_get_32 (abfd, note->descdata + 8);
11134 }
11135 else /* NOTE_INFO_MODULE64 */
11136 {
11137 /* module_info.base_address */
11138 base_addr = bfd_get_64 (abfd, note->descdata + 4);
11139 sprintf (buf, ".module/%016lx", (unsigned long) base_addr);
11140 /* module_info.module_name_size */
11141 name_size = bfd_get_32 (abfd, note->descdata + 12);
11142 }
11143
11144 len = strlen (buf) + 1;
11145 name = (char *) bfd_alloc (abfd, len);
11146 if (name == NULL)
11147 return false;
11148
11149 memcpy (name, buf, len);
11150
11151 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11152
11153 if (sect == NULL)
11154 return false;
11155
11156 if (note->descsz < 12 + name_size)
11157 {
11158 _bfd_error_handler (_("%pB: win32pstatus NOTE_INFO_MODULE of size %lu"
11159 " is too small to contain a name of size %u"),
11160 abfd, note->descsz, name_size);
11161 return true;
11162 }
11163
11164 sect->size = note->descsz;
11165 sect->filepos = note->descpos;
11166 sect->alignment_power = 2;
11167 break;
11168
11169 default:
11170 return true;
11171 }
11172
11173 return true;
11174 }
11175
11176 static bool
11177 elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
11178 {
11179 elf_backend_data *bed = get_elf_backend_data (abfd);
11180
11181 /* Short cut for LINUX notes. */
11182 if (note->namesz == 6 /* strlen (NOTE_NAME_LINUX) + 1 */
11183 && streq (note->namedata, NOTE_NAME_LINUX))
11184 {
11185 switch (note->type)
11186 {
11187 case NT_386_TLS: return elfcore_grok_i386_tls (abfd, note);
11188 case NT_ARC_V2: return elfcore_grok_arc_v2 (abfd, note);
11189 case NT_ARM_FPMR: return elfcore_grok_aarch_fpmr (abfd, note);
11190 case NT_ARM_GCS: return elfcore_grok_aarch_gcs (abfd, note);
11191 case NT_ARM_HW_BREAK: return elfcore_grok_aarch_hw_break (abfd, note);
11192 case NT_ARM_HW_WATCH: return elfcore_grok_aarch_hw_watch (abfd, note);
11193 case NT_ARM_PAC_MASK: return elfcore_grok_aarch_pauth (abfd, note);
11194 case NT_ARM_SSVE: return elfcore_grok_aarch_ssve (abfd, note);
11195 case NT_ARM_SVE: return elfcore_grok_aarch_sve (abfd, note);
11196 case NT_ARM_TAGGED_ADDR_CTRL: return elfcore_grok_aarch_mte (abfd, note);
11197 case NT_ARM_TLS: return elfcore_grok_aarch_tls (abfd, note);
11198 case NT_ARM_VFP: return elfcore_grok_arm_vfp (abfd, note);
11199 case NT_ARM_ZA: return elfcore_grok_aarch_za (abfd, note);
11200 case NT_ARM_ZT: return elfcore_grok_aarch_zt (abfd, note);
11201 case NT_LARCH_CPUCFG: return elfcore_grok_loongarch_cpucfg (abfd, note);
11202 case NT_LARCH_LASX: return elfcore_grok_loongarch_lasx (abfd, note);
11203 case NT_LARCH_LBT: return elfcore_grok_loongarch_lbt (abfd, note);
11204 case NT_LARCH_LSX: return elfcore_grok_loongarch_lsx (abfd, note);
11205 case NT_PPC_DSCR: return elfcore_grok_ppc_dscr (abfd, note);
11206 case NT_PPC_EBB: return elfcore_grok_ppc_ebb (abfd, note);
11207 case NT_PPC_PMU: return elfcore_grok_ppc_pmu (abfd, note);
11208 case NT_PPC_PPR: return elfcore_grok_ppc_ppr (abfd, note);
11209 case NT_PPC_TAR: return elfcore_grok_ppc_tar (abfd, note);
11210 case NT_PPC_TM_CDSCR: return elfcore_grok_ppc_tm_cdscr (abfd, note);
11211 case NT_PPC_TM_CFPR: return elfcore_grok_ppc_tm_cfpr (abfd, note);
11212 case NT_PPC_TM_CGPR: return elfcore_grok_ppc_tm_cgpr (abfd, note);
11213 case NT_PPC_TM_CPPR: return elfcore_grok_ppc_tm_cppr (abfd, note);
11214 case NT_PPC_TM_CTAR: return elfcore_grok_ppc_tm_ctar (abfd, note);
11215 case NT_PPC_TM_CVMX: return elfcore_grok_ppc_tm_cvmx (abfd, note);
11216 case NT_PPC_TM_CVSX: return elfcore_grok_ppc_tm_cvsx (abfd, note);
11217 case NT_PPC_TM_SPR: return elfcore_grok_ppc_tm_spr (abfd, note);
11218 case NT_PPC_VMX: return elfcore_grok_ppc_vmx (abfd, note);
11219 case NT_PPC_VSX: return elfcore_grok_ppc_vsx (abfd, note);
11220 case NT_PRXFPREG: return elfcore_grok_prxfpreg (abfd, note);
11221 case NT_S390_CTRS: return elfcore_grok_s390_ctrs (abfd, note);
11222 case NT_S390_GS_BC: return elfcore_grok_s390_gs_bc (abfd, note);
11223 case NT_S390_GS_CB: return elfcore_grok_s390_gs_cb (abfd, note);
11224 case NT_S390_HIGH_GPRS: return elfcore_grok_s390_high_gprs (abfd, note);
11225 case NT_S390_LAST_BREAK: return elfcore_grok_s390_last_break (abfd, note);
11226 case NT_S390_PREFIX: return elfcore_grok_s390_prefix (abfd, note);
11227 case NT_S390_SYSTEM_CALL: return elfcore_grok_s390_system_call (abfd, note);
11228 case NT_S390_TDB: return elfcore_grok_s390_tdb (abfd, note);
11229 case NT_S390_TIMER: return elfcore_grok_s390_timer (abfd, note);
11230 case NT_S390_TODCMP: return elfcore_grok_s390_todcmp (abfd, note);
11231 case NT_S390_TODPREG: return elfcore_grok_s390_todpreg (abfd, note);
11232 case NT_S390_VXRS_HIGH: return elfcore_grok_s390_vxrs_high (abfd, note);
11233 case NT_S390_VXRS_LOW: return elfcore_grok_s390_vxrs_low (abfd, note);
11234 case NT_X86_SHSTK: return elfcore_grok_sspreg (abfd, note);
11235 case NT_X86_XSTATE: return elfcore_grok_xstatereg (abfd, note);
11236 case NT_X86_XSAVE_LAYOUT: return elfcore_grok_xsave_layout_desc (abfd, note);
11237 default: break;
11238 }
11239 }
11240
11241 switch (note->type)
11242 {
11243 default:
11244 return true;
11245
11246 case NT_PRSTATUS:
11247 if (bed->elf_backend_grok_prstatus)
11248 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
11249 return true;
11250 #if defined (HAVE_PRSTATUS_T)
11251 return elfcore_grok_prstatus (abfd, note);
11252 #else
11253 return true;
11254 #endif
11255
11256 #if defined (HAVE_PSTATUS_T)
11257 case NT_PSTATUS:
11258 return elfcore_grok_pstatus (abfd, note);
11259 #endif
11260
11261 #if defined (HAVE_LWPSTATUS_T)
11262 case NT_LWPSTATUS:
11263 return elfcore_grok_lwpstatus (abfd, note);
11264 #endif
11265
11266 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG. */
11267 return elfcore_grok_prfpreg (abfd, note);
11268
11269 case NT_WIN32PSTATUS:
11270 return elfcore_grok_win32pstatus (abfd, note);
11271
11272 case NT_GDB_TDESC:
11273 if (note->namesz == 4 && streq (note->namedata, NOTE_NAME_GDB))
11274 return elfcore_grok_gdb_tdesc (abfd, note);
11275 else
11276 return true;
11277
11278 case NT_RISCV_CSR:
11279 if (note->namesz == 4 && streq (note->namedata, NOTE_NAME_GDB))
11280 return elfcore_grok_riscv_csr (abfd, note);
11281 else
11282 return true;
11283
11284 case NT_PRPSINFO:
11285 case NT_PSINFO:
11286 if (bed->elf_backend_grok_psinfo)
11287 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
11288 return true;
11289 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
11290 return elfcore_grok_psinfo (abfd, note);
11291 #else
11292 return true;
11293 #endif
11294
11295 case NT_AUXV:
11296 return elfcore_make_auxv_note_section (abfd, note, 0);
11297
11298 case NT_FILE:
11299 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.file",
11300 note);
11301
11302 case NT_SIGINFO:
11303 return elfcore_make_note_pseudosection (abfd, ".note.linuxcore.siginfo",
11304 note);
11305 }
11306 }
11307
11308 static bool
11309 elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
11310 {
11311 struct bfd_build_id* build_id;
11312
11313 if (note->descsz == 0)
11314 return false;
11315
11316 build_id = bfd_alloc (abfd, sizeof (struct bfd_build_id) - 1 + note->descsz);
11317 if (build_id == NULL)
11318 return false;
11319
11320 build_id->size = note->descsz;
11321 memcpy (build_id->data, note->descdata, note->descsz);
11322 abfd->build_id = build_id;
11323
11324 return true;
11325 }
11326
11327 static bool
11328 elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
11329 {
11330 switch (note->type)
11331 {
11332 default:
11333 return true;
11334
11335 case NT_GNU_PROPERTY_TYPE_0:
11336 return _bfd_elf_parse_gnu_properties (abfd, note);
11337
11338 case NT_GNU_BUILD_ID:
11339 return elfobj_grok_gnu_build_id (abfd, note);
11340 }
11341 }
11342
11343 static bool
11344 elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
11345 {
11346 struct sdt_note *cur =
11347 (struct sdt_note *) bfd_alloc (abfd,
11348 sizeof (struct sdt_note) + note->descsz);
11349
11350 cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
11351 cur->size = (bfd_size_type) note->descsz;
11352 memcpy (cur->data, note->descdata, note->descsz);
11353
11354 elf_tdata (abfd)->sdt_note_head = cur;
11355
11356 return true;
11357 }
11358
11359 static bool
11360 elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
11361 {
11362 switch (note->type)
11363 {
11364 case NT_STAPSDT:
11365 return elfobj_grok_stapsdt_note_1 (abfd, note);
11366
11367 default:
11368 return true;
11369 }
11370 }
11371
11372 static bool
11373 elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
11374 {
11375 size_t offset;
11376
11377 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
11378 {
11379 case ELFCLASS32:
11380 if (note->descsz < 108)
11381 return false;
11382 break;
11383
11384 case ELFCLASS64:
11385 if (note->descsz < 120)
11386 return false;
11387 break;
11388
11389 default:
11390 return false;
11391 }
11392
11393 /* Check for version 1 in pr_version. */
11394 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
11395 return false;
11396
11397 offset = 4;
11398
11399 /* Skip over pr_psinfosz. */
11400 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
11401 offset += 4;
11402 else
11403 {
11404 offset += 4; /* Padding before pr_psinfosz. */
11405 offset += 8;
11406 }
11407
11408 /* pr_fname is PRFNAMESZ (16) + 1 bytes in size. */
11409 elf_tdata (abfd)->core->program
11410 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 17);
11411 offset += 17;
11412
11413 /* pr_psargs is PRARGSZ (80) + 1 bytes in size. */
11414 elf_tdata (abfd)->core->command
11415 = _bfd_elfcore_strndup (abfd, note->descdata + offset, 81);
11416 offset += 81;
11417
11418 /* Padding before pr_pid. */
11419 offset += 2;
11420
11421 /* The pr_pid field was added in version "1a". */
11422 if (note->descsz < offset + 4)
11423 return true;
11424
11425 elf_tdata (abfd)->core->pid
11426 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11427
11428 return true;
11429 }
11430
11431 static bool
11432 elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
11433 {
11434 size_t offset;
11435 size_t size;
11436 size_t min_size;
11437
11438 /* Compute offset of pr_getregsz, skipping over pr_statussz.
11439 Also compute minimum size of this note. */
11440 switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
11441 {
11442 case ELFCLASS32:
11443 offset = 4 + 4;
11444 min_size = offset + (4 * 2) + 4 + 4 + 4;
11445 break;
11446
11447 case ELFCLASS64:
11448 offset = 4 + 4 + 8; /* Includes padding before pr_statussz. */
11449 min_size = offset + (8 * 2) + 4 + 4 + 4 + 4;
11450 break;
11451
11452 default:
11453 return false;
11454 }
11455
11456 if (note->descsz < min_size)
11457 return false;
11458
11459 /* Check for version 1 in pr_version. */
11460 if (bfd_h_get_32 (abfd, (bfd_byte *) note->descdata) != 1)
11461 return false;
11462
11463 /* Extract size of pr_reg from pr_gregsetsz. */
11464 /* Skip over pr_gregsetsz and pr_fpregsetsz. */
11465 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
11466 {
11467 size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11468 offset += 4 * 2;
11469 }
11470 else
11471 {
11472 size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
11473 offset += 8 * 2;
11474 }
11475
11476 /* Skip over pr_osreldate. */
11477 offset += 4;
11478
11479 /* Read signal from pr_cursig. */
11480 if (elf_tdata (abfd)->core->signal == 0)
11481 elf_tdata (abfd)->core->signal
11482 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11483 offset += 4;
11484
11485 /* Read TID from pr_pid. */
11486 elf_tdata (abfd)->core->lwpid
11487 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
11488 offset += 4;
11489
11490 /* Padding before pr_reg. */
11491 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
11492 offset += 4;
11493
11494 /* Make sure that there is enough data remaining in the note. */
11495 if ((note->descsz - offset) < size)
11496 return false;
11497
11498 /* Make a ".reg/999" section and a ".reg" section. */
11499 return _bfd_elfcore_make_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG,
11500 size, note->descpos + offset);
11501 }
11502
11503 static bool
11504 elfcore_grok_freebsd_note (bfd *abfd, Elf_Internal_Note *note)
11505 {
11506 elf_backend_data *bed = get_elf_backend_data (abfd);
11507
11508 switch (note->type)
11509 {
11510 case NT_PRSTATUS:
11511 if (bed->elf_backend_grok_freebsd_prstatus)
11512 if ((*bed->elf_backend_grok_freebsd_prstatus) (abfd, note))
11513 return true;
11514 return elfcore_grok_freebsd_prstatus (abfd, note);
11515
11516 case NT_FPREGSET:
11517 return elfcore_grok_prfpreg (abfd, note);
11518
11519 case NT_PRPSINFO:
11520 return elfcore_grok_freebsd_psinfo (abfd, note);
11521
11522 case NT_FREEBSD_THRMISC:
11523 return elfcore_make_note_pseudosection (abfd, ".thrmisc", note);
11524
11525 case NT_FREEBSD_PROCSTAT_PROC:
11526 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.proc",
11527 note);
11528
11529 case NT_FREEBSD_PROCSTAT_FILES:
11530 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.files",
11531 note);
11532
11533 case NT_FREEBSD_PROCSTAT_VMMAP:
11534 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.vmmap",
11535 note);
11536
11537 case NT_FREEBSD_PROCSTAT_AUXV:
11538 return elfcore_make_auxv_note_section (abfd, note, 4);
11539
11540 case NT_FREEBSD_X86_SEGBASES:
11541 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_X86_SEGBASES, note);
11542
11543 case NT_X86_XSTATE:
11544 return elfcore_grok_xstatereg (abfd, note);
11545
11546 case NT_FREEBSD_PTLWPINFO:
11547 return elfcore_make_note_pseudosection (abfd, ".note.freebsdcore.lwpinfo",
11548 note);
11549
11550 case NT_ARM_TLS:
11551 return elfcore_grok_aarch_tls (abfd, note);
11552
11553 case NT_ARM_VFP:
11554 return elfcore_grok_arm_vfp (abfd, note);
11555
11556 default:
11557 return true;
11558 }
11559 }
11560
11561 static bool
11562 elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
11563 {
11564 char *cp;
11565
11566 cp = strchr (note->namedata, '@');
11567 if (cp != NULL)
11568 {
11569 *lwpidp = atoi(cp + 1);
11570 return true;
11571 }
11572 return false;
11573 }
11574
11575 static bool
11576 elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11577 {
11578 if (note->descsz <= 0x7c + 31)
11579 return false;
11580
11581 /* Signal number at offset 0x08. */
11582 elf_tdata (abfd)->core->signal
11583 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11584
11585 /* Process ID at offset 0x50. */
11586 elf_tdata (abfd)->core->pid
11587 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
11588
11589 /* Command name at 0x7c (max 32 bytes, including nul). */
11590 elf_tdata (abfd)->core->command
11591 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
11592
11593 return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
11594 note);
11595 }
11596
11597 static bool
11598 elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
11599 {
11600 int lwp;
11601
11602 if (elfcore_netbsd_get_lwpid (note, &lwp))
11603 elf_tdata (abfd)->core->lwpid = lwp;
11604
11605 switch (note->type)
11606 {
11607 case NT_NETBSDCORE_PROCINFO:
11608 /* NetBSD-specific core "procinfo". Note that we expect to
11609 find this note before any of the others, which is fine,
11610 since the kernel writes this note out first when it
11611 creates a core file. */
11612 return elfcore_grok_netbsd_procinfo (abfd, note);
11613 case NT_NETBSDCORE_AUXV:
11614 /* NetBSD-specific Elf Auxiliary Vector data. */
11615 return elfcore_make_auxv_note_section (abfd, note, 0);
11616 case NT_NETBSDCORE_LWPSTATUS:
11617 return elfcore_make_note_pseudosection (abfd,
11618 ".note.netbsdcore.lwpstatus",
11619 note);
11620 default:
11621 break;
11622 }
11623
11624 /* As of March 2020 there are no other machine-independent notes
11625 defined for NetBSD core files. If the note type is less
11626 than the start of the machine-dependent note types, we don't
11627 understand it. */
11628
11629 if (note->type < NT_NETBSDCORE_FIRSTMACH)
11630 return true;
11631
11632
11633 switch (bfd_get_arch (abfd))
11634 {
11635 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
11636 PT_GETFPREGS == mach+2. */
11637
11638 case bfd_arch_aarch64:
11639 case bfd_arch_alpha:
11640 case bfd_arch_sparc:
11641 switch (note->type)
11642 {
11643 case NT_NETBSDCORE_FIRSTMACH+0:
11644 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, note);
11645
11646 case NT_NETBSDCORE_FIRSTMACH+2:
11647 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, note);
11648
11649 default:
11650 return true;
11651 }
11652
11653 /* On SuperH, PT_GETREGS == mach+3 and PT_GETFPREGS == mach+5.
11654 There's also old PT___GETREGS40 == mach + 1 for old reg
11655 structure which lacks GBR. */
11656
11657 case bfd_arch_sh:
11658 switch (note->type)
11659 {
11660 case NT_NETBSDCORE_FIRSTMACH+3:
11661 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, note);
11662
11663 case NT_NETBSDCORE_FIRSTMACH+5:
11664 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, note);
11665
11666 default:
11667 return true;
11668 }
11669
11670 /* On all other arch's, PT_GETREGS == mach+1 and
11671 PT_GETFPREGS == mach+3. */
11672
11673 default:
11674 switch (note->type)
11675 {
11676 case NT_NETBSDCORE_FIRSTMACH+1:
11677 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, note);
11678
11679 case NT_NETBSDCORE_FIRSTMACH+3:
11680 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, note);
11681
11682 default:
11683 return true;
11684 }
11685 }
11686 /* NOTREACHED */
11687 }
11688
11689 static bool
11690 elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
11691 {
11692 if (note->descsz <= 0x48 + 31)
11693 return false;
11694
11695 /* Signal number at offset 0x08. */
11696 elf_tdata (abfd)->core->signal
11697 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
11698
11699 /* Process ID at offset 0x20. */
11700 elf_tdata (abfd)->core->pid
11701 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
11702
11703 /* Command name at 0x48 (max 32 bytes, including nul). */
11704 elf_tdata (abfd)->core->command
11705 = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
11706
11707 return true;
11708 }
11709
11710 /* Processes Solaris's process status note.
11711 sig_off ~ offsetof(prstatus_t, pr_cursig)
11712 pid_off ~ offsetof(prstatus_t, pr_pid)
11713 lwpid_off ~ offsetof(prstatus_t, pr_who)
11714 gregset_size ~ sizeof(gregset_t)
11715 gregset_offset ~ offsetof(prstatus_t, pr_reg) */
11716
11717 static bool
11718 elfcore_grok_solaris_prstatus (bfd *abfd, Elf_Internal_Note* note, int sig_off,
11719 int pid_off, int lwpid_off, size_t gregset_size,
11720 size_t gregset_offset)
11721 {
11722 asection *sect = NULL;
11723 elf_tdata (abfd)->core->signal
11724 = bfd_get_16 (abfd, note->descdata + sig_off);
11725 elf_tdata (abfd)->core->pid
11726 = bfd_get_32 (abfd, note->descdata + pid_off);
11727 elf_tdata (abfd)->core->lwpid
11728 = bfd_get_32 (abfd, note->descdata + lwpid_off);
11729
11730 sect = bfd_get_section_by_name (abfd, NOTE_PSEUDO_SECTION_REG);
11731 if (sect != NULL)
11732 sect->size = gregset_size;
11733
11734 return _bfd_elfcore_make_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, gregset_size,
11735 note->descpos + gregset_offset);
11736 }
11737
11738 /* Gets program and arguments from a core.
11739 prog_off ~ offsetof(prpsinfo | psinfo_t, pr_fname)
11740 comm_off ~ offsetof(prpsinfo | psinfo_t, pr_psargs) */
11741
11742 static bool
11743 elfcore_grok_solaris_info(bfd *abfd, Elf_Internal_Note* note,
11744 int prog_off, int comm_off)
11745 {
11746 elf_tdata (abfd)->core->program
11747 = _bfd_elfcore_strndup (abfd, note->descdata + prog_off, 16);
11748 elf_tdata (abfd)->core->command
11749 = _bfd_elfcore_strndup (abfd, note->descdata + comm_off, 80);
11750
11751 return true;
11752 }
11753
11754 /* Processes Solaris's LWP status note.
11755 gregset_size ~ sizeof(gregset_t)
11756 gregset_off ~ offsetof(lwpstatus_t, pr_reg)
11757 fpregset_size ~ sizeof(fpregset_t)
11758 fpregset_off ~ offsetof(lwpstatus_t, pr_fpreg) */
11759
11760 static bool
11761 elfcore_grok_solaris_lwpstatus (bfd *abfd, Elf_Internal_Note* note,
11762 size_t gregset_size, int gregset_off,
11763 size_t fpregset_size, int fpregset_off)
11764 {
11765 asection *sect = NULL;
11766 char reg2_section_name[16] = { 0 };
11767
11768 (void) snprintf (reg2_section_name, 16, "%s/%i", NOTE_PSEUDO_SECTION_REG2,
11769 elf_tdata (abfd)->core->lwpid);
11770
11771 /* offsetof(lwpstatus_t, pr_lwpid) */
11772 elf_tdata (abfd)->core->lwpid
11773 = bfd_get_32 (abfd, note->descdata + 4);
11774 /* offsetof(lwpstatus_t, pr_cursig) */
11775 elf_tdata (abfd)->core->signal
11776 = bfd_get_16 (abfd, note->descdata + 12);
11777
11778 sect = bfd_get_section_by_name (abfd, NOTE_PSEUDO_SECTION_REG);
11779 if (sect != NULL)
11780 sect->size = gregset_size;
11781 else if (!_bfd_elfcore_make_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, gregset_size,
11782 note->descpos + gregset_off))
11783 return false;
11784
11785 sect = bfd_get_section_by_name (abfd, reg2_section_name);
11786 if (sect != NULL)
11787 {
11788 sect->size = fpregset_size;
11789 sect->filepos = note->descpos + fpregset_off;
11790 sect->alignment_power = 2;
11791 }
11792 else if (!_bfd_elfcore_make_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, fpregset_size,
11793 note->descpos + fpregset_off))
11794 return false;
11795
11796 return true;
11797 }
11798
11799 static bool
11800 elfcore_grok_solaris_note_impl (bfd *abfd, Elf_Internal_Note *note)
11801 {
11802 if (note == NULL)
11803 return false;
11804
11805 /* core files are identified as 32- or 64-bit, SPARC or x86,
11806 by the size of the descsz which matches the sizeof()
11807 the type appropriate for that note type (e.g., prstatus_t for
11808 SOLARIS_NT_PRSTATUS) for the corresponding architecture
11809 on Solaris. The core file bitness may differ from the bitness of
11810 gdb itself, so fixed values are used instead of sizeof().
11811 Appropriate fixed offsets are also used to obtain data from
11812 the note. */
11813
11814 switch ((int) note->type)
11815 {
11816 case SOLARIS_NT_PRSTATUS:
11817 switch (note->descsz)
11818 {
11819 case 508: /* sizeof(prstatus_t) SPARC 32-bit */
11820 return elfcore_grok_solaris_prstatus(abfd, note,
11821 136, 216, 308, 152, 356);
11822 case 904: /* sizeof(prstatus_t) SPARC 64-bit */
11823 return elfcore_grok_solaris_prstatus(abfd, note,
11824 264, 360, 520, 304, 600);
11825 case 432: /* sizeof(prstatus_t) Intel 32-bit */
11826 return elfcore_grok_solaris_prstatus(abfd, note,
11827 136, 216, 308, 76, 356);
11828 case 824: /* sizeof(prstatus_t) Intel 64-bit */
11829 return elfcore_grok_solaris_prstatus(abfd, note,
11830 264, 360, 520, 224, 600);
11831 default:
11832 return true;
11833 }
11834
11835 case SOLARIS_NT_PSINFO:
11836 case SOLARIS_NT_PRPSINFO:
11837 switch (note->descsz)
11838 {
11839 case 260: /* sizeof(prpsinfo_t) SPARC and Intel 32-bit */
11840 return elfcore_grok_solaris_info(abfd, note, 84, 100);
11841 case 328: /* sizeof(prpsinfo_t) SPARC and Intel 64-bit */
11842 return elfcore_grok_solaris_info(abfd, note, 120, 136);
11843 case 360: /* sizeof(psinfo_t) SPARC and Intel 32-bit */
11844 return elfcore_grok_solaris_info(abfd, note, 88, 104);
11845 case 440: /* sizeof(psinfo_t) SPARC and Intel 64-bit */
11846 return elfcore_grok_solaris_info(abfd, note, 136, 152);
11847 default:
11848 return true;
11849 }
11850
11851 case SOLARIS_NT_LWPSTATUS:
11852 switch (note->descsz)
11853 {
11854 case 896: /* sizeof(lwpstatus_t) SPARC 32-bit */
11855 return elfcore_grok_solaris_lwpstatus(abfd, note,
11856 152, 344, 400, 496);
11857 case 1392: /* sizeof(lwpstatus_t) SPARC 64-bit */
11858 return elfcore_grok_solaris_lwpstatus(abfd, note,
11859 304, 544, 544, 848);
11860 case 800: /* sizeof(lwpstatus_t) Intel 32-bit */
11861 return elfcore_grok_solaris_lwpstatus(abfd, note,
11862 76, 344, 380, 420);
11863 case 1296: /* sizeof(lwpstatus_t) Intel 64-bit */
11864 return elfcore_grok_solaris_lwpstatus(abfd, note,
11865 224, 544, 528, 768);
11866 default:
11867 return true;
11868 }
11869
11870 case SOLARIS_NT_LWPSINFO:
11871 /* sizeof(lwpsinfo_t) on 32- and 64-bit, respectively */
11872 if (note->descsz == 128 || note->descsz == 152)
11873 elf_tdata (abfd)->core->lwpid =
11874 bfd_get_32 (abfd, note->descdata + 4);
11875 break;
11876
11877 default:
11878 break;
11879 }
11880
11881 return true;
11882 }
11883
11884 /* For name starting with "CORE" this may be either a Solaris
11885 core file or a gdb-generated core file. Do Solaris-specific
11886 processing on selected note types first with
11887 elfcore_grok_solaris_note(), then process the note
11888 in elfcore_grok_note(). */
11889
11890 static bool
11891 elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Note *note)
11892 {
11893 if (!elfcore_grok_solaris_note_impl (abfd, note))
11894 return false;
11895
11896 return elfcore_grok_note (abfd, note);
11897 }
11898
11899 static bool
11900 elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
11901 {
11902 if (note->type == NT_OPENBSD_PROCINFO)
11903 return elfcore_grok_openbsd_procinfo (abfd, note);
11904
11905 if (note->type == NT_OPENBSD_REGS)
11906 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG, note);
11907
11908 if (note->type == NT_OPENBSD_FPREGS)
11909 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_REG2, note);
11910
11911 if (note->type == NT_OPENBSD_XFPREGS)
11912 return elfcore_make_note_pseudosection (abfd, NOTE_PSEUDO_SECTION_XFP, note);
11913
11914 if (note->type == NT_OPENBSD_AUXV)
11915 return elfcore_make_auxv_note_section (abfd, note, 0);
11916
11917 if (note->type == NT_OPENBSD_WCOOKIE)
11918 {
11919 asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
11920 SEC_HAS_CONTENTS);
11921
11922 if (sect == NULL)
11923 return false;
11924 sect->size = note->descsz;
11925 sect->filepos = note->descpos;
11926 sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
11927
11928 return true;
11929 }
11930
11931 return true;
11932 }
11933
11934 static bool
11935 elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
11936 {
11937 void *ddata = note->descdata;
11938 char buf[100];
11939 char *name;
11940 asection *sect;
11941 short sig;
11942 unsigned flags;
11943
11944 if (note->descsz < 16)
11945 return false;
11946
11947 /* nto_procfs_status 'pid' field is at offset 0. */
11948 elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
11949
11950 /* nto_procfs_status 'tid' field is at offset 4. Pass it back. */
11951 *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
11952
11953 /* nto_procfs_status 'flags' field is at offset 8. */
11954 flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
11955
11956 /* nto_procfs_status 'what' field is at offset 14. */
11957 if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
11958 {
11959 elf_tdata (abfd)->core->signal = sig;
11960 elf_tdata (abfd)->core->lwpid = *tid;
11961 }
11962
11963 /* _DEBUG_FLAG_CURTID (current thread) is 0x80. Some cores
11964 do not come from signals so we make sure we set the current
11965 thread just in case. */
11966 if (flags & 0x00000080)
11967 elf_tdata (abfd)->core->lwpid = *tid;
11968
11969 /* Make a ".qnx_core_status/%d" section. */
11970 sprintf (buf, ".qnx_core_status/%ld", *tid);
11971
11972 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
11973 if (name == NULL)
11974 return false;
11975 strcpy (name, buf);
11976
11977 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
11978 if (sect == NULL)
11979 return false;
11980
11981 sect->size = note->descsz;
11982 sect->filepos = note->descpos;
11983 sect->alignment_power = 2;
11984
11985 return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
11986 }
11987
11988 static bool
11989 elfcore_grok_nto_regs (bfd *abfd,
11990 Elf_Internal_Note *note,
11991 long tid,
11992 char *base)
11993 {
11994 char buf[100];
11995 char *name;
11996 asection *sect;
11997
11998 /* Make a "(base)/%d" section. */
11999 sprintf (buf, "%s/%ld", base, tid);
12000
12001 name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
12002 if (name == NULL)
12003 return false;
12004 strcpy (name, buf);
12005
12006 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
12007 if (sect == NULL)
12008 return false;
12009
12010 sect->size = note->descsz;
12011 sect->filepos = note->descpos;
12012 sect->alignment_power = 2;
12013
12014 /* This is the current thread. */
12015 if (elf_tdata (abfd)->core->lwpid == tid)
12016 return elfcore_maybe_make_sect (abfd, base, sect);
12017
12018 return true;
12019 }
12020
12021 static bool
12022 elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
12023 {
12024 /* Every GREG section has a STATUS section before it. Store the
12025 tid from the previous call to pass down to the next gregs
12026 function. */
12027 static long tid = 1;
12028
12029 switch (note->type)
12030 {
12031 case QNT_CORE_INFO:
12032 return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
12033 case QNT_CORE_STATUS:
12034 return elfcore_grok_nto_status (abfd, note, &tid);
12035 case QNT_CORE_GREG:
12036 return elfcore_grok_nto_regs (abfd, note, tid, NOTE_PSEUDO_SECTION_REG);
12037 case QNT_CORE_FPREG:
12038 return elfcore_grok_nto_regs (abfd, note, tid, NOTE_PSEUDO_SECTION_REG2);
12039 default:
12040 return true;
12041 }
12042 }
12043
12044 static bool
12045 elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
12046 {
12047 char *name;
12048 asection *sect;
12049 size_t len;
12050
12051 /* Use note name as section name. */
12052 len = note->namesz;
12053 name = (char *) bfd_alloc (abfd, len);
12054 if (name == NULL)
12055 return false;
12056 memcpy (name, note->namedata, len);
12057 name[len - 1] = '\0';
12058
12059 sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
12060 if (sect == NULL)
12061 return false;
12062
12063 sect->size = note->descsz;
12064 sect->filepos = note->descpos;
12065 sect->alignment_power = 1;
12066
12067 return true;
12068 }
12069
12070 /* Function: elfcore_write_note
12071
12072 Inputs:
12073 buffer to hold note, and current size of buffer
12074 name of note
12075 type of note
12076 data for note
12077 size of data for note
12078
12079 Writes note to end of buffer. ELF64 notes are written exactly as
12080 for ELF32, despite the current (as of 2006) ELF gabi specifying
12081 that they ought to have 8-byte namesz and descsz field, and have
12082 8-byte alignment. Other writers, eg. Linux kernel, do the same.
12083
12084 Return:
12085 Pointer to realloc'd buffer, *BUFSIZ updated. */
12086
12087 char *
12088 elfcore_write_note (bfd *abfd,
12089 char *buf,
12090 int *bufsiz,
12091 const char *name,
12092 int type,
12093 const void *input,
12094 int size)
12095 {
12096 Elf_External_Note *xnp;
12097 size_t namesz;
12098 size_t newspace;
12099 char *dest;
12100
12101 namesz = 0;
12102 if (name != NULL)
12103 namesz = strlen (name) + 1;
12104
12105 newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
12106
12107 buf = (char *) realloc (buf, *bufsiz + newspace);
12108 if (buf == NULL)
12109 return buf;
12110 dest = buf + *bufsiz;
12111 *bufsiz += newspace;
12112 xnp = (Elf_External_Note *) dest;
12113 H_PUT_32 (abfd, namesz, xnp->namesz);
12114 H_PUT_32 (abfd, size, xnp->descsz);
12115 H_PUT_32 (abfd, type, xnp->type);
12116 dest = xnp->name;
12117 if (name != NULL)
12118 {
12119 memcpy (dest, name, namesz);
12120 dest += namesz;
12121 while (namesz & 3)
12122 {
12123 *dest++ = '\0';
12124 ++namesz;
12125 }
12126 }
12127 memcpy (dest, input, size);
12128 dest += size;
12129 while (size & 3)
12130 {
12131 *dest++ = '\0';
12132 ++size;
12133 }
12134 return buf;
12135 }
12136
12137 /* gcc-8 warns (*) on all the strncpy calls in this function about
12138 possible string truncation. The "truncation" is not a bug. We
12139 have an external representation of structs with fields that are not
12140 necessarily NULL terminated and corresponding internal
12141 representation fields that are one larger so that they can always
12142 be NULL terminated.
12143 gcc versions between 4.2 and 4.6 do not allow pragma control of
12144 diagnostics inside functions, giving a hard error if you try to use
12145 the finer control available with later versions.
12146 gcc prior to 4.2 warns about diagnostic push and pop.
12147 gcc-5, gcc-6 and gcc-7 warn that -Wstringop-truncation is unknown,
12148 unless you also add #pragma GCC diagnostic ignored "-Wpragma".
12149 (*) Depending on your system header files! */
12150 #if GCC_VERSION >= 8000
12151 # pragma GCC diagnostic push
12152 # pragma GCC diagnostic ignored "-Wstringop-truncation"
12153 #endif
12154 char *
12155 elfcore_write_prpsinfo (bfd *abfd,
12156 char *buf,
12157 int *bufsiz,
12158 const char *fname,
12159 const char *psargs)
12160 {
12161 elf_backend_data *bed = get_elf_backend_data (abfd);
12162
12163 if (bed->elf_backend_write_core_note != NULL)
12164 {
12165 char *ret;
12166 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
12167 NT_PRPSINFO, fname, psargs);
12168 if (ret != NULL)
12169 return ret;
12170 }
12171
12172 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
12173 # if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
12174 if (bed->s->elfclass == ELFCLASS32)
12175 {
12176 # if defined (HAVE_PSINFO32_T)
12177 psinfo32_t data;
12178 int note_type = NT_PSINFO;
12179 # else
12180 prpsinfo32_t data;
12181 int note_type = NT_PRPSINFO;
12182 # endif
12183
12184 memset (&data, 0, sizeof (data));
12185 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
12186 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
12187 return elfcore_write_note (abfd, buf, bufsiz,
12188 NOTE_NAME_CORE, note_type, &data, sizeof (data));
12189 }
12190 else
12191 # endif
12192 {
12193 # if defined (HAVE_PSINFO_T)
12194 psinfo_t data;
12195 int note_type = NT_PSINFO;
12196 # else
12197 prpsinfo_t data;
12198 int note_type = NT_PRPSINFO;
12199 # endif
12200
12201 memset (&data, 0, sizeof (data));
12202 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
12203 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
12204 return elfcore_write_note (abfd, buf, bufsiz,
12205 NOTE_NAME_CORE, note_type, &data, sizeof (data));
12206 }
12207 #endif /* PSINFO_T or PRPSINFO_T */
12208
12209 free (buf);
12210 return NULL;
12211 }
12212 #if GCC_VERSION >= 8000
12213 # pragma GCC diagnostic pop
12214 #endif
12215
12216 char *
12217 elfcore_write_linux_prpsinfo32
12218 (bfd *abfd, char *buf, int *bufsiz,
12219 const struct elf_internal_linux_prpsinfo *prpsinfo)
12220 {
12221 if (get_elf_backend_data (abfd)->linux_prpsinfo32_ugid16)
12222 {
12223 struct elf_external_linux_prpsinfo32_ugid16 data;
12224
12225 swap_linux_prpsinfo32_ugid16_out (abfd, prpsinfo, &data);
12226 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE, NT_PRPSINFO,
12227 &data, sizeof (data));
12228 }
12229 else
12230 {
12231 struct elf_external_linux_prpsinfo32_ugid32 data;
12232
12233 swap_linux_prpsinfo32_ugid32_out (abfd, prpsinfo, &data);
12234 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE, NT_PRPSINFO,
12235 &data, sizeof (data));
12236 }
12237 }
12238
12239 char *
12240 elfcore_write_linux_prpsinfo64
12241 (bfd *abfd, char *buf, int *bufsiz,
12242 const struct elf_internal_linux_prpsinfo *prpsinfo)
12243 {
12244 if (get_elf_backend_data (abfd)->linux_prpsinfo64_ugid16)
12245 {
12246 struct elf_external_linux_prpsinfo64_ugid16 data;
12247
12248 swap_linux_prpsinfo64_ugid16_out (abfd, prpsinfo, &data);
12249 return elfcore_write_note (abfd, buf, bufsiz,
12250 NOTE_NAME_CORE, NT_PRPSINFO, &data, sizeof (data));
12251 }
12252 else
12253 {
12254 struct elf_external_linux_prpsinfo64_ugid32 data;
12255
12256 swap_linux_prpsinfo64_ugid32_out (abfd, prpsinfo, &data);
12257 return elfcore_write_note (abfd, buf, bufsiz,
12258 NOTE_NAME_CORE, NT_PRPSINFO, &data, sizeof (data));
12259 }
12260 }
12261
12262 char *
12263 elfcore_write_prstatus (bfd *abfd,
12264 char *buf,
12265 int *bufsiz,
12266 long pid,
12267 int cursig,
12268 const void *gregs)
12269 {
12270 elf_backend_data *bed = get_elf_backend_data (abfd);
12271
12272 if (bed->elf_backend_write_core_note != NULL)
12273 {
12274 char *ret;
12275 ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
12276 NT_PRSTATUS,
12277 pid, cursig, gregs);
12278 if (ret != NULL)
12279 return ret;
12280 }
12281
12282 #if defined (HAVE_PRSTATUS_T)
12283 #if defined (HAVE_PRSTATUS32_T)
12284 if (bed->s->elfclass == ELFCLASS32)
12285 {
12286 prstatus32_t prstat;
12287
12288 memset (&prstat, 0, sizeof (prstat));
12289 prstat.pr_pid = pid;
12290 prstat.pr_cursig = cursig;
12291 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
12292 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE,
12293 NT_PRSTATUS, &prstat, sizeof (prstat));
12294 }
12295 else
12296 #endif
12297 {
12298 prstatus_t prstat;
12299
12300 memset (&prstat, 0, sizeof (prstat));
12301 prstat.pr_pid = pid;
12302 prstat.pr_cursig = cursig;
12303 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
12304 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE,
12305 NT_PRSTATUS, &prstat, sizeof (prstat));
12306 }
12307 #endif /* HAVE_PRSTATUS_T */
12308
12309 free (buf);
12310 return NULL;
12311 }
12312
12313 #if defined (HAVE_LWPSTATUS_T)
12314 char *
12315 elfcore_write_lwpstatus (bfd *abfd,
12316 char *buf,
12317 int *bufsiz,
12318 long pid,
12319 int cursig,
12320 const void *gregs)
12321 {
12322 lwpstatus_t lwpstat;
12323
12324 memset (&lwpstat, 0, sizeof (lwpstat));
12325 lwpstat.pr_lwpid = pid >> 16;
12326 lwpstat.pr_cursig = cursig;
12327 #if defined (HAVE_LWPSTATUS_T_PR_REG)
12328 memcpy (&lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
12329 #elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
12330 #if !defined(gregs)
12331 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
12332 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
12333 #else
12334 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
12335 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
12336 #endif
12337 #endif
12338 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE,
12339 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
12340 }
12341 #endif /* HAVE_LWPSTATUS_T */
12342
12343 #if defined (HAVE_PSTATUS_T)
12344 char *
12345 elfcore_write_pstatus (bfd *abfd,
12346 char *buf,
12347 int *bufsiz,
12348 long pid,
12349 int cursig ATTRIBUTE_UNUSED,
12350 const void *gregs ATTRIBUTE_UNUSED)
12351 {
12352 #if defined (HAVE_PSTATUS32_T)
12353 elf_backend_data *bed = get_elf_backend_data (abfd);
12354
12355 if (bed->s->elfclass == ELFCLASS32)
12356 {
12357 pstatus32_t pstat;
12358
12359 memset (&pstat, 0, sizeof (pstat));
12360 pstat.pr_pid = pid & 0xffff;
12361 buf = elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE,
12362 NT_PSTATUS, &pstat, sizeof (pstat));
12363 return buf;
12364 }
12365 else
12366 #endif
12367 {
12368 pstatus_t pstat;
12369
12370 memset (&pstat, 0, sizeof (pstat));
12371 pstat.pr_pid = pid & 0xffff;
12372 buf = elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_CORE,
12373 NT_PSTATUS, &pstat, sizeof (pstat));
12374 return buf;
12375 }
12376 }
12377 #endif /* HAVE_PSTATUS_T */
12378
12379 char *
12380 elfcore_write_prfpreg (bfd *abfd,
12381 char *buf,
12382 int *bufsiz,
12383 const void *fpregs,
12384 int size)
12385 {
12386 return elfcore_write_note (abfd, buf, bufsiz,
12387 NOTE_NAME_CORE, NT_FPREGSET, fpregs, size);
12388 }
12389
12390 char *
12391 elfcore_write_prxfpreg (bfd *abfd,
12392 char *buf,
12393 int *bufsiz,
12394 const void *xfpregs,
12395 int size)
12396 {
12397 return elfcore_write_note (abfd, buf, bufsiz,
12398 NOTE_NAME_LINUX, NT_PRXFPREG, xfpregs, size);
12399 }
12400
12401 char *
12402 elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
12403 const void *xfpregs, int size)
12404 {
12405 char *note_name;
12406
12407 if (get_elf_backend_data (abfd)->elf_osabi == ELFOSABI_FREEBSD)
12408 note_name = NOTE_NAME_FREEBSD;
12409 else
12410 note_name = NOTE_NAME_LINUX;
12411
12412 return elfcore_write_note (abfd, buf, bufsiz,
12413 note_name, NT_X86_XSTATE, xfpregs, size);
12414 }
12415
12416 char *
12417 elfcore_write_xsave_layout (bfd *abfd, char *buf, int *bufsiz,
12418 const void *xsave_layout, int size)
12419 {
12420 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_LINUX,
12421 NT_X86_XSAVE_LAYOUT, xsave_layout, size);
12422 }
12423
12424 static char *
12425 elfcore_write_sspreg (bfd *abfd, char *buf, int *bufsiz,
12426 const void *ssp, int size)
12427 {
12428 return elfcore_write_note (abfd, buf, bufsiz,
12429 NOTE_NAME_LINUX, NT_X86_SHSTK, ssp, size);
12430 }
12431
12432 char *
12433 elfcore_write_x86_segbases (bfd *abfd, char *buf, int *bufsiz,
12434 const void *regs, int size)
12435 {
12436 return elfcore_write_note (abfd, buf, bufsiz,
12437 NOTE_NAME_FREEBSD, NT_FREEBSD_X86_SEGBASES,
12438 regs, size);
12439 }
12440
12441 char *
12442 elfcore_write_i386_tls (bfd *abfd, char *buf, int *bufsiz,
12443 const void *regs, int size)
12444 {
12445 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_LINUX, NT_386_TLS,
12446 regs, size);
12447 }
12448
12449 char *
12450 elfcore_write_ppc_vmx (bfd *abfd,
12451 char *buf,
12452 int *bufsiz,
12453 const void *ppc_vmx,
12454 int size)
12455 {
12456 return elfcore_write_note (abfd, buf, bufsiz,
12457 NOTE_NAME_LINUX, NT_PPC_VMX, ppc_vmx, size);
12458 }
12459
12460 char *
12461 elfcore_write_ppc_vsx (bfd *abfd,
12462 char *buf,
12463 int *bufsiz,
12464 const void *ppc_vsx,
12465 int size)
12466 {
12467 return elfcore_write_note (abfd, buf, bufsiz,
12468 NOTE_NAME_LINUX, NT_PPC_VSX, ppc_vsx, size);
12469 }
12470
12471 char *
12472 elfcore_write_ppc_tar (bfd *abfd,
12473 char *buf,
12474 int *bufsiz,
12475 const void *ppc_tar,
12476 int size)
12477 {
12478 return elfcore_write_note (abfd, buf, bufsiz,
12479 NOTE_NAME_LINUX, NT_PPC_TAR, ppc_tar, size);
12480 }
12481
12482 char *
12483 elfcore_write_ppc_ppr (bfd *abfd,
12484 char *buf,
12485 int *bufsiz,
12486 const void *ppc_ppr,
12487 int size)
12488 {
12489 return elfcore_write_note (abfd, buf, bufsiz,
12490 NOTE_NAME_LINUX, NT_PPC_PPR, ppc_ppr, size);
12491 }
12492
12493 char *
12494 elfcore_write_ppc_dscr (bfd *abfd,
12495 char *buf,
12496 int *bufsiz,
12497 const void *ppc_dscr,
12498 int size)
12499 {
12500 return elfcore_write_note (abfd, buf, bufsiz,
12501 NOTE_NAME_LINUX, NT_PPC_DSCR, ppc_dscr, size);
12502 }
12503
12504 char *
12505 elfcore_write_ppc_ebb (bfd *abfd,
12506 char *buf,
12507 int *bufsiz,
12508 const void *ppc_ebb,
12509 int size)
12510 {
12511 return elfcore_write_note (abfd, buf, bufsiz,
12512 NOTE_NAME_LINUX, NT_PPC_EBB, ppc_ebb, size);
12513 }
12514
12515 char *
12516 elfcore_write_ppc_pmu (bfd *abfd,
12517 char *buf,
12518 int *bufsiz,
12519 const void *ppc_pmu,
12520 int size)
12521 {
12522 return elfcore_write_note (abfd, buf, bufsiz,
12523 NOTE_NAME_LINUX, NT_PPC_PMU, ppc_pmu, size);
12524 }
12525
12526 char *
12527 elfcore_write_ppc_tm_cgpr (bfd *abfd,
12528 char *buf,
12529 int *bufsiz,
12530 const void *ppc_tm_cgpr,
12531 int size)
12532 {
12533 return elfcore_write_note (abfd, buf, bufsiz,
12534 NOTE_NAME_LINUX, NT_PPC_TM_CGPR,
12535 ppc_tm_cgpr, size);
12536 }
12537
12538 char *
12539 elfcore_write_ppc_tm_cfpr (bfd *abfd,
12540 char *buf,
12541 int *bufsiz,
12542 const void *ppc_tm_cfpr,
12543 int size)
12544 {
12545 return elfcore_write_note (abfd, buf, bufsiz,
12546 NOTE_NAME_LINUX, NT_PPC_TM_CFPR,
12547 ppc_tm_cfpr, size);
12548 }
12549
12550 char *
12551 elfcore_write_ppc_tm_cvmx (bfd *abfd,
12552 char *buf,
12553 int *bufsiz,
12554 const void *ppc_tm_cvmx,
12555 int size)
12556 {
12557 return elfcore_write_note (abfd, buf, bufsiz,
12558 NOTE_NAME_LINUX, NT_PPC_TM_CVMX,
12559 ppc_tm_cvmx, size);
12560 }
12561
12562 char *
12563 elfcore_write_ppc_tm_cvsx (bfd *abfd,
12564 char *buf,
12565 int *bufsiz,
12566 const void *ppc_tm_cvsx,
12567 int size)
12568 {
12569 return elfcore_write_note (abfd, buf, bufsiz,
12570 NOTE_NAME_LINUX, NT_PPC_TM_CVSX,
12571 ppc_tm_cvsx, size);
12572 }
12573
12574 char *
12575 elfcore_write_ppc_tm_spr (bfd *abfd,
12576 char *buf,
12577 int *bufsiz,
12578 const void *ppc_tm_spr,
12579 int size)
12580 {
12581 return elfcore_write_note (abfd, buf, bufsiz,
12582 NOTE_NAME_LINUX, NT_PPC_TM_SPR,
12583 ppc_tm_spr, size);
12584 }
12585
12586 char *
12587 elfcore_write_ppc_tm_ctar (bfd *abfd,
12588 char *buf,
12589 int *bufsiz,
12590 const void *ppc_tm_ctar,
12591 int size)
12592 {
12593 return elfcore_write_note (abfd, buf, bufsiz,
12594 NOTE_NAME_LINUX, NT_PPC_TM_CTAR,
12595 ppc_tm_ctar, size);
12596 }
12597
12598 char *
12599 elfcore_write_ppc_tm_cppr (bfd *abfd,
12600 char *buf,
12601 int *bufsiz,
12602 const void *ppc_tm_cppr,
12603 int size)
12604 {
12605 return elfcore_write_note (abfd, buf, bufsiz,
12606 NOTE_NAME_LINUX, NT_PPC_TM_CPPR,
12607 ppc_tm_cppr, size);
12608 }
12609
12610 char *
12611 elfcore_write_ppc_tm_cdscr (bfd *abfd,
12612 char *buf,
12613 int *bufsiz,
12614 const void *ppc_tm_cdscr,
12615 int size)
12616 {
12617 return elfcore_write_note (abfd, buf, bufsiz,
12618 NOTE_NAME_LINUX, NT_PPC_TM_CDSCR,
12619 ppc_tm_cdscr, size);
12620 }
12621
12622 static char *
12623 elfcore_write_s390_high_gprs (bfd *abfd,
12624 char *buf,
12625 int *bufsiz,
12626 const void *s390_high_gprs,
12627 int size)
12628 {
12629 return elfcore_write_note (abfd, buf, bufsiz,
12630 NOTE_NAME_LINUX, NT_S390_HIGH_GPRS,
12631 s390_high_gprs, size);
12632 }
12633
12634 char *
12635 elfcore_write_s390_timer (bfd *abfd,
12636 char *buf,
12637 int *bufsiz,
12638 const void *s390_timer,
12639 int size)
12640 {
12641 return elfcore_write_note (abfd, buf, bufsiz,
12642 NOTE_NAME_LINUX, NT_S390_TIMER,
12643 s390_timer, size);
12644 }
12645
12646 char *
12647 elfcore_write_s390_todcmp (bfd *abfd,
12648 char *buf,
12649 int *bufsiz,
12650 const void *s390_todcmp,
12651 int size)
12652 {
12653 return elfcore_write_note (abfd, buf, bufsiz,
12654 NOTE_NAME_LINUX, NT_S390_TODCMP,
12655 s390_todcmp, size);
12656 }
12657
12658 char *
12659 elfcore_write_s390_todpreg (bfd *abfd,
12660 char *buf,
12661 int *bufsiz,
12662 const void *s390_todpreg,
12663 int size)
12664 {
12665 return elfcore_write_note (abfd, buf, bufsiz,
12666 NOTE_NAME_LINUX, NT_S390_TODPREG,
12667 s390_todpreg, size);
12668 }
12669
12670 char *
12671 elfcore_write_s390_ctrs (bfd *abfd,
12672 char *buf,
12673 int *bufsiz,
12674 const void *s390_ctrs,
12675 int size)
12676 {
12677 return elfcore_write_note (abfd, buf, bufsiz,
12678 NOTE_NAME_LINUX, NT_S390_CTRS, s390_ctrs, size);
12679 }
12680
12681 char *
12682 elfcore_write_s390_prefix (bfd *abfd,
12683 char *buf,
12684 int *bufsiz,
12685 const void *s390_prefix,
12686 int size)
12687 {
12688 return elfcore_write_note (abfd, buf, bufsiz,
12689 NOTE_NAME_LINUX, NT_S390_PREFIX,
12690 s390_prefix, size);
12691 }
12692
12693 char *
12694 elfcore_write_s390_last_break (bfd *abfd,
12695 char *buf,
12696 int *bufsiz,
12697 const void *s390_last_break,
12698 int size)
12699 {
12700 return elfcore_write_note (abfd, buf, bufsiz,
12701 NOTE_NAME_LINUX, NT_S390_LAST_BREAK,
12702 s390_last_break, size);
12703 }
12704
12705 char *
12706 elfcore_write_s390_system_call (bfd *abfd,
12707 char *buf,
12708 int *bufsiz,
12709 const void *s390_system_call,
12710 int size)
12711 {
12712 return elfcore_write_note (abfd, buf, bufsiz,
12713 NOTE_NAME_LINUX, NT_S390_SYSTEM_CALL,
12714 s390_system_call, size);
12715 }
12716
12717 char *
12718 elfcore_write_s390_tdb (bfd *abfd,
12719 char *buf,
12720 int *bufsiz,
12721 const void *s390_tdb,
12722 int size)
12723 {
12724 return elfcore_write_note (abfd, buf, bufsiz,
12725 NOTE_NAME_LINUX, NT_S390_TDB, s390_tdb, size);
12726 }
12727
12728 char *
12729 elfcore_write_s390_vxrs_low (bfd *abfd,
12730 char *buf,
12731 int *bufsiz,
12732 const void *s390_vxrs_low,
12733 int size)
12734 {
12735 return elfcore_write_note (abfd, buf, bufsiz,
12736 NOTE_NAME_LINUX, NT_S390_VXRS_LOW,
12737 s390_vxrs_low, size);
12738 }
12739
12740 char *
12741 elfcore_write_s390_vxrs_high (bfd *abfd,
12742 char *buf,
12743 int *bufsiz,
12744 const void *s390_vxrs_high,
12745 int size)
12746 {
12747 return elfcore_write_note (abfd, buf, bufsiz,
12748 NOTE_NAME_LINUX, NT_S390_VXRS_HIGH,
12749 s390_vxrs_high, size);
12750 }
12751
12752 char *
12753 elfcore_write_s390_gs_cb (bfd *abfd,
12754 char *buf,
12755 int *bufsiz,
12756 const void *s390_gs_cb,
12757 int size)
12758 {
12759 return elfcore_write_note (abfd, buf, bufsiz,
12760 NOTE_NAME_LINUX, NT_S390_GS_CB,
12761 s390_gs_cb, size);
12762 }
12763
12764 char *
12765 elfcore_write_s390_gs_bc (bfd *abfd,
12766 char *buf,
12767 int *bufsiz,
12768 const void *s390_gs_bc,
12769 int size)
12770 {
12771 return elfcore_write_note (abfd, buf, bufsiz,
12772 NOTE_NAME_LINUX, NT_S390_GS_BC,
12773 s390_gs_bc, size);
12774 }
12775
12776 char *
12777 elfcore_write_arm_vfp (bfd *abfd,
12778 char *buf,
12779 int *bufsiz,
12780 const void *arm_vfp,
12781 int size)
12782 {
12783 return elfcore_write_note (abfd, buf, bufsiz,
12784 NOTE_NAME_LINUX, NT_ARM_VFP,
12785 arm_vfp, size);
12786 }
12787
12788 char *
12789 elfcore_write_aarch_tls (bfd *abfd,
12790 char *buf,
12791 int *bufsiz,
12792 const void *aarch_tls,
12793 int size)
12794 {
12795 return elfcore_write_note (abfd, buf, bufsiz,
12796 NOTE_NAME_LINUX, NT_ARM_TLS, aarch_tls, size);
12797 }
12798
12799 char *
12800 elfcore_write_aarch_hw_break (bfd *abfd,
12801 char *buf,
12802 int *bufsiz,
12803 const void *aarch_hw_break,
12804 int size)
12805 {
12806 return elfcore_write_note (abfd, buf, bufsiz,
12807 NOTE_NAME_LINUX, NT_ARM_HW_BREAK,
12808 aarch_hw_break, size);
12809 }
12810
12811 char *
12812 elfcore_write_aarch_hw_watch (bfd *abfd,
12813 char *buf,
12814 int *bufsiz,
12815 const void *aarch_hw_watch,
12816 int size)
12817 {
12818 return elfcore_write_note (abfd, buf, bufsiz,
12819 NOTE_NAME_LINUX, NT_ARM_HW_WATCH,
12820 aarch_hw_watch, size);
12821 }
12822
12823 char *
12824 elfcore_write_aarch_sve (bfd *abfd,
12825 char *buf,
12826 int *bufsiz,
12827 const void *aarch_sve,
12828 int size)
12829 {
12830 return elfcore_write_note (abfd, buf, bufsiz,
12831 NOTE_NAME_LINUX, NT_ARM_SVE, aarch_sve, size);
12832 }
12833
12834 char *
12835 elfcore_write_aarch_pauth (bfd *abfd,
12836 char *buf,
12837 int *bufsiz,
12838 const void *aarch_pauth,
12839 int size)
12840 {
12841 return elfcore_write_note (abfd, buf, bufsiz,
12842 NOTE_NAME_LINUX, NT_ARM_PAC_MASK,
12843 aarch_pauth, size);
12844 }
12845
12846 char *
12847 elfcore_write_aarch_mte (bfd *abfd,
12848 char *buf,
12849 int *bufsiz,
12850 const void *aarch_mte,
12851 int size)
12852 {
12853 return elfcore_write_note (abfd, buf, bufsiz,
12854 NOTE_NAME_LINUX, NT_ARM_TAGGED_ADDR_CTRL,
12855 aarch_mte, size);
12856 }
12857
12858 char *
12859 elfcore_write_aarch_ssve (bfd *abfd,
12860 char *buf,
12861 int *bufsiz,
12862 const void *aarch_ssve,
12863 int size)
12864 {
12865 return elfcore_write_note (abfd, buf, bufsiz,
12866 NOTE_NAME_LINUX, NT_ARM_SSVE,
12867 aarch_ssve, size);
12868 }
12869
12870 char *
12871 elfcore_write_aarch_za (bfd *abfd,
12872 char *buf,
12873 int *bufsiz,
12874 const void *aarch_za,
12875 int size)
12876 {
12877 return elfcore_write_note (abfd, buf, bufsiz,
12878 NOTE_NAME_LINUX, NT_ARM_ZA,
12879 aarch_za, size);
12880 }
12881
12882 /* Write the buffer of zt register values in aarch_zt (length SIZE) into
12883 the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
12884 written into. Return a pointer to the new start of the note buffer, to
12885 replace BUF which may no longer be valid. */
12886
12887 char *
12888 elfcore_write_aarch_zt (bfd *abfd,
12889 char *buf,
12890 int *bufsiz,
12891 const void *aarch_zt,
12892 int size)
12893 {
12894 return elfcore_write_note (abfd, buf, bufsiz,
12895 NOTE_NAME_LINUX, NT_ARM_ZT,
12896 aarch_zt, size);
12897 }
12898
12899 /* Write the buffer of GCS register values in AARCH_GCS (length SIZE) into
12900 the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
12901 written into. Return a pointer to the new start of the note buffer, to
12902 replace BUF which may no longer be valid. */
12903
12904 static char *
12905 elfcore_write_aarch_gcs (bfd *abfd, char *buf, int *bufsiz,
12906 const void *aarch_gcs, int size)
12907 {
12908 return elfcore_write_note (abfd, buf, bufsiz, NOTE_NAME_LINUX, NT_ARM_GCS,
12909 aarch_gcs, size);
12910 }
12911
12912 /* Write the buffer of FPMR value in AARCH_FPMR (length SIZE) into
12913 the note buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
12914 written into. Return a pointer to the new start of the note buffer, to
12915 replace BUF which may no longer be valid. */
12916
12917 char *
12918 elfcore_write_aarch_fpmr (bfd *abfd,
12919 char *buf,
12920 int *bufsiz,
12921 const void *aarch_fpmr,
12922 int size)
12923 {
12924 return elfcore_write_note (abfd, buf, bufsiz,
12925 NOTE_NAME_LINUX, NT_ARM_FPMR, aarch_fpmr, size);
12926 }
12927
12928 char *
12929 elfcore_write_arc_v2 (bfd *abfd,
12930 char *buf,
12931 int *bufsiz,
12932 const void *arc_v2,
12933 int size)
12934 {
12935 return elfcore_write_note (abfd, buf, bufsiz,
12936 NOTE_NAME_LINUX, NT_ARC_V2, arc_v2, size);
12937 }
12938
12939 char *
12940 elfcore_write_loongarch_cpucfg (bfd *abfd,
12941 char *buf,
12942 int *bufsiz,
12943 const void *loongarch_cpucfg,
12944 int size)
12945 {
12946 return elfcore_write_note (abfd, buf, bufsiz,
12947 NOTE_NAME_LINUX, NT_LARCH_CPUCFG,
12948 loongarch_cpucfg, size);
12949 }
12950
12951 char *
12952 elfcore_write_loongarch_lbt (bfd *abfd,
12953 char *buf,
12954 int *bufsiz,
12955 const void *loongarch_lbt,
12956 int size)
12957 {
12958 return elfcore_write_note (abfd, buf, bufsiz,
12959 NOTE_NAME_LINUX, NT_LARCH_LBT,
12960 loongarch_lbt, size);
12961 }
12962
12963 char *
12964 elfcore_write_loongarch_lsx (bfd *abfd,
12965 char *buf,
12966 int *bufsiz,
12967 const void *loongarch_lsx,
12968 int size)
12969 {
12970 return elfcore_write_note (abfd, buf, bufsiz,
12971 NOTE_NAME_LINUX, NT_LARCH_LSX,
12972 loongarch_lsx, size);
12973 }
12974
12975 char *
12976 elfcore_write_loongarch_lasx (bfd *abfd,
12977 char *buf,
12978 int *bufsiz,
12979 const void *loongarch_lasx,
12980 int size)
12981 {
12982 return elfcore_write_note (abfd, buf, bufsiz,
12983 NOTE_NAME_LINUX, NT_LARCH_LASX,
12984 loongarch_lasx, size);
12985 }
12986
12987 /* Write the buffer of csr values in CSRS (length SIZE) into the note
12988 buffer BUF and update *BUFSIZ. ABFD is the bfd the note is being
12989 written into. Return a pointer to the new start of the note buffer, to
12990 replace BUF which may no longer be valid. */
12991
12992 char *
12993 elfcore_write_riscv_csr (bfd *abfd,
12994 char *buf,
12995 int *bufsiz,
12996 const void *csrs,
12997 int size)
12998 {
12999 return elfcore_write_note (abfd, buf, bufsiz,
13000 NOTE_NAME_GDB, NT_RISCV_CSR, csrs, size);
13001 }
13002
13003 /* Write the target description (a string) pointed to by TDESC, length
13004 SIZE, into the note buffer BUF, and update *BUFSIZ. ABFD is the bfd the
13005 note is being written into. Return a pointer to the new start of the
13006 note buffer, to replace BUF which may no longer be valid. */
13007
13008 char *
13009 elfcore_write_gdb_tdesc (bfd *abfd,
13010 char *buf,
13011 int *bufsiz,
13012 const void *tdesc,
13013 int size)
13014 {
13015 return elfcore_write_note (abfd, buf, bufsiz,
13016 NOTE_NAME_GDB, NT_GDB_TDESC, tdesc, size);
13017 }
13018
13019 char *
13020 elfcore_write_register_note (bfd *abfd,
13021 char *buf,
13022 int *bufsiz,
13023 const char *section,
13024 const void *data,
13025 int size)
13026 {
13027 static const struct
13028 {
13029 const char * section_name;
13030 char * (*writer) (bfd *, char *, int *, const void *, int);
13031 }
13032 note_writers [] =
13033 {
13034 { NOTE_PSEUDO_SECTION_AARCH_FPMR, elfcore_write_aarch_fpmr},
13035 { NOTE_PSEUDO_SECTION_AARCH_GCS, elfcore_write_aarch_gcs},
13036 { NOTE_PSEUDO_SECTION_AARCH_HW_BREAK, elfcore_write_aarch_hw_break},
13037 { NOTE_PSEUDO_SECTION_AARCH_HW_WATCH, elfcore_write_aarch_hw_watch},
13038 { NOTE_PSEUDO_SECTION_AARCH_MTE, elfcore_write_aarch_mte},
13039 { NOTE_PSEUDO_SECTION_AARCH_PAUTH, elfcore_write_aarch_pauth},
13040 { NOTE_PSEUDO_SECTION_AARCH_SSVE, elfcore_write_aarch_ssve},
13041 { NOTE_PSEUDO_SECTION_AARCH_SVE, elfcore_write_aarch_sve},
13042 { NOTE_PSEUDO_SECTION_AARCH_TLS, elfcore_write_aarch_tls},
13043 { NOTE_PSEUDO_SECTION_AARCH_ZA, elfcore_write_aarch_za},
13044 { NOTE_PSEUDO_SECTION_AARCH_ZT, elfcore_write_aarch_zt},
13045 { NOTE_PSEUDO_SECTION_ARC_V2, elfcore_write_arc_v2},
13046 { NOTE_PSEUDO_SECTION_ARM_VFP, elfcore_write_arm_vfp},
13047 { NOTE_PSEUDO_SECTION_I386_TLS, elfcore_write_i386_tls},
13048 { NOTE_PSEUDO_SECTION_LOONGARCH_CPUCFG, elfcore_write_loongarch_cpucfg},
13049 { NOTE_PSEUDO_SECTION_LOONGARCH_LASX, elfcore_write_loongarch_lasx},
13050 { NOTE_PSEUDO_SECTION_LOONGARCH_LBT, elfcore_write_loongarch_lbt},
13051 { NOTE_PSEUDO_SECTION_LOONGARCH_LSX, elfcore_write_loongarch_lsx},
13052 { NOTE_PSEUDO_SECTION_PPC_DSCR, elfcore_write_ppc_dscr},
13053 { NOTE_PSEUDO_SECTION_PPC_EBB, elfcore_write_ppc_ebb},
13054 { NOTE_PSEUDO_SECTION_PPC_PMU, elfcore_write_ppc_pmu},
13055 { NOTE_PSEUDO_SECTION_PPC_PPR, elfcore_write_ppc_ppr},
13056 { NOTE_PSEUDO_SECTION_PPC_TAR, elfcore_write_ppc_tar},
13057 { NOTE_PSEUDO_SECTION_PPC_TM_CDSCR, elfcore_write_ppc_tm_cdscr},
13058 { NOTE_PSEUDO_SECTION_PPC_TM_CFPR, elfcore_write_ppc_tm_cfpr},
13059 { NOTE_PSEUDO_SECTION_PPC_TM_CGPR, elfcore_write_ppc_tm_cgpr},
13060 { NOTE_PSEUDO_SECTION_PPC_TM_CPPR, elfcore_write_ppc_tm_cppr},
13061 { NOTE_PSEUDO_SECTION_PPC_TM_CTAR, elfcore_write_ppc_tm_ctar},
13062 { NOTE_PSEUDO_SECTION_PPC_TM_CVMX, elfcore_write_ppc_tm_cvmx},
13063 { NOTE_PSEUDO_SECTION_PPC_TM_CVSX, elfcore_write_ppc_tm_cvsx},
13064 { NOTE_PSEUDO_SECTION_PPC_TM_SPR, elfcore_write_ppc_tm_spr},
13065 { NOTE_PSEUDO_SECTION_PPC_VMX, elfcore_write_ppc_vmx},
13066 { NOTE_PSEUDO_SECTION_PPC_VSX, elfcore_write_ppc_vsx},
13067 { NOTE_PSEUDO_SECTION_REG2, elfcore_write_prfpreg},
13068 { NOTE_PSEUDO_SECTION_RISCV_CSR, elfcore_write_riscv_csr},
13069 { NOTE_PSEUDO_SECTION_S390_CTRS, elfcore_write_s390_ctrs},
13070 { NOTE_PSEUDO_SECTION_S390_GS_BC, elfcore_write_s390_gs_bc},
13071 { NOTE_PSEUDO_SECTION_S390_GS_CB, elfcore_write_s390_gs_cb},
13072 { NOTE_PSEUDO_SECTION_S390_HIGH_GPRS, elfcore_write_s390_high_gprs},
13073 { NOTE_PSEUDO_SECTION_S390_LAST_BREAK, elfcore_write_s390_last_break},
13074 { NOTE_PSEUDO_SECTION_S390_PREFIX, elfcore_write_s390_prefix},
13075 { NOTE_PSEUDO_SECTION_S390_SYSTEM_CALL, elfcore_write_s390_system_call},
13076 { NOTE_PSEUDO_SECTION_S390_TDB, elfcore_write_s390_tdb},
13077 { NOTE_PSEUDO_SECTION_S390_TIMER, elfcore_write_s390_timer},
13078 { NOTE_PSEUDO_SECTION_S390_TODCMP, elfcore_write_s390_todcmp},
13079 { NOTE_PSEUDO_SECTION_S390_TODPREG, elfcore_write_s390_todpreg},
13080 { NOTE_PSEUDO_SECTION_S390_VXRS_HIGH, elfcore_write_s390_vxrs_high},
13081 { NOTE_PSEUDO_SECTION_S390_VXRS_LOW, elfcore_write_s390_vxrs_low},
13082 { NOTE_PSEUDO_SECTION_SSP, elfcore_write_sspreg},
13083 { NOTE_PSEUDO_SECTION_TDESC, elfcore_write_gdb_tdesc},
13084 { NOTE_PSEUDO_SECTION_X86_SEGBASES, elfcore_write_x86_segbases},
13085 { NOTE_PSEUDO_SECTION_XFP, elfcore_write_prxfpreg},
13086 { NOTE_PSEUDO_SECTION_XSTATE, elfcore_write_xstatereg},
13087 { NOTE_PSEUDO_SECTION_XSAVE_LAYOUT, elfcore_write_xsave_layout} /* NB/ No comma. */
13088 };
13089
13090 int i;
13091
13092 for (i = ARRAY_SIZE (note_writers); i--;)
13093 if (streq (section, note_writers[i].section_name))
13094 return note_writers[i].writer (abfd, buf, bufsiz, data, size);
13095
13096 return NULL;
13097 }
13098
13099 char *
13100 elfcore_write_file_note (bfd *obfd, char *note_data, int *note_size,
13101 const void *buf, int bufsiz)
13102 {
13103 return elfcore_write_note (obfd, note_data, note_size,
13104 NOTE_NAME_CORE, NT_FILE, buf, bufsiz);
13105 }
13106
13107 static bool
13108 elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset,
13109 size_t align)
13110 {
13111 char *p;
13112
13113 /* NB: CORE PT_NOTE segments may have p_align values of 0 or 1.
13114 gABI specifies that PT_NOTE alignment should be aligned to 4
13115 bytes for 32-bit objects and to 8 bytes for 64-bit objects. If
13116 align is less than 4, we use 4 byte alignment. */
13117 if (align < 4)
13118 align = 4;
13119 if (align != 4 && align != 8)
13120 return false;
13121
13122 p = buf;
13123 while (p < buf + size)
13124 {
13125 Elf_External_Note *xnp = (Elf_External_Note *) p;
13126 Elf_Internal_Note in;
13127
13128 if (offsetof (Elf_External_Note, name) > buf - p + size)
13129 return false;
13130
13131 in.type = H_GET_32 (abfd, xnp->type);
13132
13133 in.namesz = H_GET_32 (abfd, xnp->namesz);
13134 in.namedata = xnp->name;
13135 if (in.namesz > buf - in.namedata + size)
13136 return false;
13137
13138 in.descsz = H_GET_32 (abfd, xnp->descsz);
13139 in.descdata = p + ELF_NOTE_DESC_OFFSET (in.namesz, align);
13140 in.descpos = offset + (in.descdata - buf);
13141 if (in.descsz != 0
13142 && (in.descdata >= buf + size
13143 || in.descsz > buf - in.descdata + size))
13144 return false;
13145
13146 switch (bfd_get_format (abfd))
13147 {
13148 default:
13149 return true;
13150
13151 case bfd_core:
13152 {
13153 #define GROKER_ELEMENT(S,F) {S, sizeof (S) - 1, F}
13154 static const struct
13155 {
13156 const char * string;
13157 size_t len;
13158 bool (*func) (bfd *, Elf_Internal_Note *);
13159 }
13160 grokers[] =
13161 {
13162 GROKER_ELEMENT ("", elfcore_grok_note),
13163 GROKER_ELEMENT (NOTE_NAME_FREEBSD, elfcore_grok_freebsd_note),
13164 GROKER_ELEMENT ("NetBSD-CORE", elfcore_grok_netbsd_note),
13165 GROKER_ELEMENT ("OpenBSD", elfcore_grok_openbsd_note),
13166 GROKER_ELEMENT ("QNX", elfcore_grok_nto_note),
13167 GROKER_ELEMENT ("SPU/", elfcore_grok_spu_note),
13168 GROKER_ELEMENT ("GNU", elfobj_grok_gnu_note),
13169 GROKER_ELEMENT (NOTE_NAME_CORE, elfcore_grok_solaris_note)
13170 };
13171 #undef GROKER_ELEMENT
13172 int i;
13173
13174 for (i = ARRAY_SIZE (grokers); i--;)
13175 {
13176 if (in.namesz >= grokers[i].len
13177 && strncmp (in.namedata, grokers[i].string,
13178 grokers[i].len) == 0)
13179 {
13180 if (! grokers[i].func (abfd, & in))
13181 return false;
13182 break;
13183 }
13184 }
13185 break;
13186 }
13187
13188 case bfd_object:
13189 if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
13190 {
13191 if (! elfobj_grok_gnu_note (abfd, &in))
13192 return false;
13193 }
13194 else if (in.namesz == sizeof "stapsdt"
13195 && strcmp (in.namedata, "stapsdt") == 0)
13196 {
13197 if (! elfobj_grok_stapsdt_note (abfd, &in))
13198 return false;
13199 }
13200 break;
13201 }
13202
13203 p += ELF_NOTE_NEXT_OFFSET (in.namesz, in.descsz, align);
13204 }
13205
13206 return true;
13207 }
13208
13209 bool
13210 _bfd_elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size,
13211 size_t align)
13212 {
13213 char *buf;
13214
13215 if (size == 0 || (size + 1) == 0)
13216 return true;
13217
13218 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
13219 return false;
13220
13221 buf = (char *) _bfd_malloc_and_read (abfd, size + 1, size);
13222 if (buf == NULL)
13223 return false;
13224
13225 /* PR 17512: file: ec08f814
13226 0-termintate the buffer so that string searches will not overflow. */
13227 buf[size] = 0;
13228
13229 if (!elf_parse_notes (abfd, buf, size, offset, align))
13230 {
13231 free (buf);
13232 return false;
13233 }
13234
13235 free (buf);
13236 return true;
13237 }
13238
13239 /* Providing external access to the ELF program header table. */
13241
13242 /* Return an upper bound on the number of bytes required to store a
13243 copy of ABFD's program header table entries. Return -1 if an error
13244 occurs; bfd_get_error will return an appropriate code. */
13245
13246 long
13247 bfd_get_elf_phdr_upper_bound (bfd *abfd)
13248 {
13249 if (abfd->xvec->flavour != bfd_target_elf_flavour)
13250 {
13251 bfd_set_error (bfd_error_wrong_format);
13252 return -1;
13253 }
13254
13255 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
13256 }
13257
13258 /* Copy ABFD's program header table entries to *PHDRS. The entries
13259 will be stored as an array of Elf_Internal_Phdr structures, as
13260 defined in include/elf/internal.h. To find out how large the
13261 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
13262
13263 Return the number of program header table entries read, or -1 if an
13264 error occurs; bfd_get_error will return an appropriate code. */
13265
13266 int
13267 bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
13268 {
13269 int num_phdrs;
13270
13271 if (abfd->xvec->flavour != bfd_target_elf_flavour)
13272 {
13273 bfd_set_error (bfd_error_wrong_format);
13274 return -1;
13275 }
13276
13277 num_phdrs = elf_elfheader (abfd)->e_phnum;
13278 if (num_phdrs != 0)
13279 memcpy (phdrs, elf_tdata (abfd)->phdr,
13280 num_phdrs * sizeof (Elf_Internal_Phdr));
13281
13282 return num_phdrs;
13283 }
13284
13285 enum elf_reloc_type_class
13286 _bfd_elf_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
13287 const asection *rel_sec ATTRIBUTE_UNUSED,
13288 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
13289 {
13290 return reloc_class_normal;
13291 }
13292
13293 /* For RELA architectures, return the relocation value for a
13294 relocation against a local symbol. */
13295
13296 bfd_vma
13297 _bfd_elf_rela_local_sym (bfd *abfd,
13298 Elf_Internal_Sym *sym,
13299 asection **psec,
13300 Elf_Internal_Rela *rel)
13301 {
13302 asection *sec = *psec;
13303 bfd_vma relocation;
13304
13305 relocation = (sec->output_section->vma
13306 + sec->output_offset
13307 + sym->st_value);
13308 if ((sec->flags & SEC_MERGE)
13309 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
13310 && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
13311 {
13312 rel->r_addend =
13313 _bfd_merged_section_offset (abfd, psec,
13314 sym->st_value + rel->r_addend);
13315 if (sec != *psec)
13316 {
13317 /* If we have changed the section, and our original section is
13318 marked with SEC_EXCLUDE, it means that the original
13319 SEC_MERGE section has been completely subsumed in some
13320 other SEC_MERGE section. In this case, we need to leave
13321 some info around for --emit-relocs. */
13322 if ((sec->flags & SEC_EXCLUDE) != 0)
13323 sec->kept_section = *psec;
13324 sec = *psec;
13325 }
13326 rel->r_addend -= relocation;
13327 rel->r_addend += sec->output_section->vma + sec->output_offset;
13328 }
13329 return relocation;
13330 }
13331
13332 bfd_vma
13333 _bfd_elf_rel_local_sym (bfd *abfd,
13334 Elf_Internal_Sym *sym,
13335 asection **psec,
13336 bfd_vma addend)
13337 {
13338 asection *sec = *psec;
13339
13340 if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
13341 return sym->st_value + addend;
13342
13343 return _bfd_merged_section_offset (abfd, psec,
13344 sym->st_value + addend);
13345 }
13346
13347 /* Adjust an address within a section. Given OFFSET within SEC, return
13348 the new offset within the section, based upon changes made to the
13349 section. Returns -1 if the offset is now invalid.
13350 The offset (in abnd out) is in target sized bytes, however big a
13351 byte may be. */
13352
13353 bfd_vma
13354 _bfd_elf_section_offset (bfd *abfd,
13355 struct bfd_link_info *info,
13356 asection *sec,
13357 bfd_vma offset)
13358 {
13359 switch (sec->sec_info_type)
13360 {
13361 case SEC_INFO_TYPE_STABS:
13362 return _bfd_stab_section_offset (sec, offset);
13363
13364 case SEC_INFO_TYPE_EH_FRAME:
13365 return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
13366
13367 case SEC_INFO_TYPE_SFRAME:
13368 return _bfd_elf_sframe_section_offset (abfd, info, sec, offset);
13369
13370 default:
13371 if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
13372 {
13373 /* Reverse the offset. */
13374 elf_backend_data *bed = get_elf_backend_data (abfd);
13375 bfd_size_type address_size = bed->s->arch_size / 8;
13376
13377 /* address_size and sec->size are in octets. Convert
13378 to bytes before subtracting the original offset. */
13379 offset = ((sec->size - address_size)
13380 / bfd_octets_per_byte (abfd, sec) - offset);
13381 }
13382 return offset;
13383 }
13384 }
13385
13386 long
13388 _bfd_elf_get_synthetic_symtab (bfd *abfd,
13389 long symcount ATTRIBUTE_UNUSED,
13390 asymbol **syms ATTRIBUTE_UNUSED,
13391 long dynsymcount,
13392 asymbol **dynsyms,
13393 asymbol **ret)
13394 {
13395 elf_backend_data *bed = get_elf_backend_data (abfd);
13396 asection *relplt;
13397 asymbol *s;
13398 const char *relplt_name;
13399 bool (*slurp_relocs) (bfd *, asection *, asymbol **, bool);
13400 arelent *p;
13401 long count, i, n;
13402 size_t size;
13403 Elf_Internal_Shdr *hdr;
13404 char *names;
13405 asection *plt;
13406
13407 *ret = NULL;
13408
13409 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
13410 return 0;
13411
13412 if (dynsymcount <= 0)
13413 return 0;
13414
13415 if (!bed->plt_sym_val)
13416 return 0;
13417
13418 relplt_name = bed->relplt_name;
13419 if (relplt_name == NULL)
13420 relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
13421 relplt = bfd_get_section_by_name (abfd, relplt_name);
13422 if (relplt == NULL)
13423 return 0;
13424
13425 hdr = &elf_section_data (relplt)->this_hdr;
13426 if (hdr->sh_link != elf_dynsymtab (abfd)
13427 || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
13428 return 0;
13429
13430 plt = bfd_get_section_by_name (abfd, ".plt");
13431 if (plt == NULL)
13432 return 0;
13433
13434 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
13435 if (! (*slurp_relocs) (abfd, relplt, dynsyms, true))
13436 return -1;
13437
13438 count = NUM_SHDR_ENTRIES (hdr);
13439 size = count * sizeof (asymbol);
13440 p = relplt->relocation;
13441 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
13442 {
13443 size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
13444 if (p->addend != 0)
13445 {
13446 #ifdef BFD64
13447 size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
13448 #else
13449 size += sizeof ("+0x") - 1 + 8;
13450 #endif
13451 }
13452 }
13453
13454 s = *ret = (asymbol *) bfd_malloc (size);
13455 if (s == NULL)
13456 return -1;
13457
13458 names = (char *) (s + count);
13459 p = relplt->relocation;
13460 n = 0;
13461 for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
13462 {
13463 size_t len;
13464 bfd_vma addr;
13465
13466 addr = bed->plt_sym_val (i, plt, p);
13467 if (addr == (bfd_vma) -1)
13468 continue;
13469
13470 *s = **p->sym_ptr_ptr;
13471 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
13472 we are defining a symbol, ensure one of them is set. */
13473 if ((s->flags & BSF_LOCAL) == 0)
13474 s->flags |= BSF_GLOBAL;
13475 s->flags |= BSF_SYNTHETIC;
13476 s->section = plt;
13477 s->value = addr - plt->vma;
13478 s->name = names;
13479 s->udata.p = NULL;
13480 len = strlen ((*p->sym_ptr_ptr)->name);
13481 memcpy (names, (*p->sym_ptr_ptr)->name, len);
13482 names += len;
13483 if (p->addend != 0)
13484 {
13485 char buf[30], *a;
13486
13487 memcpy (names, "+0x", sizeof ("+0x") - 1);
13488 names += sizeof ("+0x") - 1;
13489 bfd_sprintf_vma (abfd, buf, p->addend);
13490 for (a = buf; *a == '0'; ++a)
13491 ;
13492 len = strlen (a);
13493 memcpy (names, a, len);
13494 names += len;
13495 }
13496 memcpy (names, "@plt", sizeof ("@plt"));
13497 names += sizeof ("@plt");
13498 ++s, ++n;
13499 }
13500
13501 return n;
13502 }
13503
13504 bool
13505 _bfd_elf_final_write_processing (bfd *abfd)
13506 {
13507 Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd);
13508 elf_backend_data *bed = get_elf_backend_data (abfd);
13509
13510 if (bed->osabi_exact && i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13511 i_ehdrp->e_ident[EI_OSABI] = bed->elf_osabi;
13512
13513 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_SOLARIS
13514 || bed->target_os == is_solaris)
13515 {
13516 elf_tdata (abfd)->strtab_hdr.sh_flags = SHF_STRINGS;
13517 elf_tdata (abfd)->shstrtab_hdr.sh_flags = SHF_STRINGS;
13518 }
13519
13520 /* Set the osabi field to ELFOSABI_GNU if the binary contains
13521 SHF_GNU_MBIND or SHF_GNU_RETAIN sections or symbols of STT_GNU_IFUNC type
13522 or STB_GNU_UNIQUE binding. */
13523 if (elf_tdata (abfd)->has_gnu_osabi != 0)
13524 {
13525 if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE)
13526 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_GNU;
13527 else if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU
13528 && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
13529 {
13530 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_mbind)
13531 _bfd_error_handler (_("GNU_MBIND section is supported only by GNU "
13532 "and FreeBSD targets"));
13533 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_ifunc)
13534 _bfd_error_handler (_("symbol type STT_GNU_IFUNC is supported "
13535 "only by GNU and FreeBSD targets"));
13536 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_unique)
13537 _bfd_error_handler (_("symbol binding STB_GNU_UNIQUE is supported "
13538 "only by GNU and FreeBSD targets"));
13539 if (elf_tdata (abfd)->has_gnu_osabi & elf_gnu_osabi_retain)
13540 _bfd_error_handler (_("GNU_RETAIN section is supported "
13541 "only by GNU and FreeBSD targets"));
13542 bfd_set_error (bfd_error_sorry);
13543 return false;
13544 }
13545 }
13546 return true;
13547 }
13548
13549
13550 /* Return TRUE for ELF symbol types that represent functions.
13551 This is the default version of this function, which is sufficient for
13552 most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */
13553
13554 bool
13555 _bfd_elf_is_function_type (unsigned int type)
13556 {
13557 return (type == STT_FUNC
13558 || type == STT_GNU_IFUNC);
13559 }
13560
13561 /* If the ELF symbol SYM might be a function in SEC, return the
13562 function size and set *CODE_OFF to the function's entry point,
13563 otherwise return zero. */
13564
13565 bfd_size_type
13566 _bfd_elf_maybe_function_sym (const asymbol *sym, asection *sec,
13567 bfd_vma *code_off)
13568 {
13569 bfd_size_type size;
13570 elf_symbol_type * elf_sym = (elf_symbol_type *) sym;
13571
13572 if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
13573 | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0
13574 || sym->section != sec)
13575 return 0;
13576
13577 size = (sym->flags & BSF_SYNTHETIC) ? 0 : elf_sym->internal_elf_sym.st_size;
13578
13579 /* In theory we should check that the symbol's type satisfies
13580 _bfd_elf_is_function_type(), but there are some function-like
13581 symbols which would fail this test. (eg _start). Instead
13582 we check for hidden, local, notype symbols with zero size.
13583 This type of symbol is generated by the annobin plugin for gcc
13584 and clang, and should not be considered to be a function symbol. */
13585 if (size == 0
13586 && ((sym->flags & (BSF_SYNTHETIC | BSF_LOCAL)) == BSF_LOCAL)
13587 && ELF_ST_TYPE (elf_sym->internal_elf_sym.st_info) == STT_NOTYPE
13588 && ELF_ST_VISIBILITY (elf_sym->internal_elf_sym.st_other) == STV_HIDDEN)
13589 return 0;
13590
13591 *code_off = sym->value;
13592 /* Do not return 0 for the function's size. */
13593 return size ? size : 1;
13594 }
13595
13596 /* Set to non-zero to enable some debug messages. */
13597 #define DEBUG_SECONDARY_RELOCS 0
13598
13599 /* An internal-to-the-bfd-library only section type
13600 used to indicate a cached secondary reloc section. */
13601 #define SHT_SECONDARY_RELOC (SHT_LOOS + SHT_RELA)
13602
13603 /* Create a BFD section to hold a secondary reloc section. */
13604
13605 bool
13606 _bfd_elf_init_secondary_reloc_section (bfd * abfd,
13607 Elf_Internal_Shdr *hdr,
13608 const char * name,
13609 unsigned int shindex)
13610 {
13611 /* We only support RELA secondary relocs. */
13612 if (hdr->sh_type != SHT_RELA)
13613 return false;
13614
13615 #if DEBUG_SECONDARY_RELOCS
13616 fprintf (stderr, "secondary reloc section %s encountered\n", name);
13617 #endif
13618 hdr->sh_type = SHT_SECONDARY_RELOC;
13619 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
13620 }
13621
13622 /* Read in any secondary relocs associated with SEC. */
13623
13624 bool
13625 _bfd_elf_slurp_secondary_reloc_section (bfd * abfd,
13626 asection * sec,
13627 asymbol ** symbols,
13628 bool dynamic)
13629 {
13630 elf_backend_data *ebd = get_elf_backend_data (abfd);
13631 asection * relsec;
13632 bool result = true;
13633 bfd_vma (*r_sym) (bfd_vma);
13634 ufile_ptr filesize;
13635
13636 #if BFD_DEFAULT_TARGET_SIZE > 32
13637 if (bfd_arch_bits_per_address (abfd) != 32)
13638 r_sym = elf64_r_sym;
13639 else
13640 #endif
13641 r_sym = elf32_r_sym;
13642
13643 if (!elf_section_data (sec)->has_secondary_relocs)
13644 return true;
13645
13646 /* Discover if there are any secondary reloc sections
13647 associated with SEC. */
13648 filesize = bfd_get_file_size (abfd);
13649 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13650 {
13651 Elf_Internal_Shdr * hdr = & elf_section_data (relsec)->this_hdr;
13652
13653 if (hdr->sh_type == SHT_SECONDARY_RELOC
13654 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx
13655 && (hdr->sh_entsize == ebd->s->sizeof_rel
13656 || hdr->sh_entsize == ebd->s->sizeof_rela))
13657 {
13658 bfd_byte * native_relocs;
13659 bfd_byte * native_reloc;
13660 arelent * internal_relocs;
13661 arelent * internal_reloc;
13662 size_t i;
13663 unsigned int entsize;
13664 unsigned int symcount;
13665 bfd_size_type reloc_count;
13666 size_t amt;
13667
13668 if (ebd->elf_info_to_howto == NULL)
13669 return false;
13670
13671 #if DEBUG_SECONDARY_RELOCS
13672 fprintf (stderr, "read secondary relocs for %s from %s\n",
13673 sec->name, relsec->name);
13674 #endif
13675 entsize = hdr->sh_entsize;
13676
13677 if (filesize != 0
13678 && ((ufile_ptr) hdr->sh_offset > filesize
13679 || hdr->sh_size > filesize - hdr->sh_offset))
13680 {
13681 bfd_set_error (bfd_error_file_truncated);
13682 result = false;
13683 continue;
13684 }
13685
13686 native_relocs = bfd_malloc (hdr->sh_size);
13687 if (native_relocs == NULL)
13688 {
13689 result = false;
13690 continue;
13691 }
13692
13693 reloc_count = NUM_SHDR_ENTRIES (hdr);
13694 if (_bfd_mul_overflow (reloc_count, sizeof (arelent), & amt))
13695 {
13696 free (native_relocs);
13697 bfd_set_error (bfd_error_file_too_big);
13698 result = false;
13699 continue;
13700 }
13701
13702 internal_relocs = (arelent *) bfd_alloc (abfd, amt);
13703 if (internal_relocs == NULL)
13704 {
13705 free (native_relocs);
13706 result = false;
13707 continue;
13708 }
13709
13710 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
13711 || bfd_read (native_relocs, hdr->sh_size, abfd) != hdr->sh_size)
13712 {
13713 free (native_relocs);
13714 /* The internal_relocs will be freed when
13715 the memory for the bfd is released. */
13716 result = false;
13717 continue;
13718 }
13719
13720 if (dynamic)
13721 symcount = bfd_get_dynamic_symcount (abfd);
13722 else
13723 symcount = bfd_get_symcount (abfd);
13724
13725 for (i = 0, internal_reloc = internal_relocs,
13726 native_reloc = native_relocs;
13727 i < reloc_count;
13728 i++, internal_reloc++, native_reloc += entsize)
13729 {
13730 bool res;
13731 Elf_Internal_Rela rela;
13732
13733 if (entsize == ebd->s->sizeof_rel)
13734 ebd->s->swap_reloc_in (abfd, native_reloc, & rela);
13735 else /* entsize == ebd->s->sizeof_rela */
13736 ebd->s->swap_reloca_in (abfd, native_reloc, & rela);
13737
13738 /* The address of an ELF reloc is section relative for an object
13739 file, and absolute for an executable file or shared library.
13740 The address of a normal BFD reloc is always section relative,
13741 and the address of a dynamic reloc is absolute.. */
13742 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
13743 internal_reloc->address = rela.r_offset;
13744 else
13745 internal_reloc->address = rela.r_offset - sec->vma;
13746
13747 if (r_sym (rela.r_info) == STN_UNDEF)
13748 {
13749 /* FIXME: This and the error case below mean that we
13750 have a symbol on relocs that is not elf_symbol_type. */
13751 internal_reloc->sym_ptr_ptr = &bfd_abs_section_ptr->symbol;
13752 }
13753 else if (r_sym (rela.r_info) > symcount)
13754 {
13755 _bfd_error_handler
13756 /* xgettext:c-format */
13757 (_("%pB(%pA): relocation %zu has invalid symbol index %lu"),
13758 abfd, sec, i, (long) r_sym (rela.r_info));
13759 bfd_set_error (bfd_error_bad_value);
13760 internal_reloc->sym_ptr_ptr = &bfd_abs_section_ptr->symbol;
13761 result = false;
13762 }
13763 else
13764 {
13765 asymbol **ps;
13766
13767 ps = symbols + r_sym (rela.r_info) - 1;
13768 internal_reloc->sym_ptr_ptr = ps;
13769 /* Make sure that this symbol is not removed by strip. */
13770 (*ps)->flags |= BSF_KEEP;
13771 }
13772
13773 internal_reloc->addend = rela.r_addend;
13774
13775 res = ebd->elf_info_to_howto (abfd, internal_reloc, & rela);
13776 if (! res || internal_reloc->howto == NULL)
13777 {
13778 #if DEBUG_SECONDARY_RELOCS
13779 fprintf (stderr,
13780 "there is no howto associated with reloc %lx\n",
13781 rela.r_info);
13782 #endif
13783 result = false;
13784 }
13785 }
13786
13787 free (native_relocs);
13788 /* Store the internal relocs. */
13789 relsec->sec_info = internal_relocs;
13790 }
13791 }
13792
13793 return result;
13794 }
13795
13796 /* Set the ELF section header fields of an output secondary reloc section. */
13797
13798 bool
13799 _bfd_elf_copy_special_section_fields (const bfd *ibfd ATTRIBUTE_UNUSED,
13800 bfd *obfd ATTRIBUTE_UNUSED,
13801 const Elf_Internal_Shdr *isection,
13802 Elf_Internal_Shdr *osection)
13803 {
13804 asection * isec;
13805 asection * osec;
13806 struct bfd_elf_section_data * esd;
13807
13808 if (isection == NULL)
13809 return false;
13810
13811 if (isection->sh_type != SHT_SECONDARY_RELOC)
13812 return true;
13813
13814 isec = isection->bfd_section;
13815 if (isec == NULL)
13816 return false;
13817
13818 osec = osection->bfd_section;
13819 if (osec == NULL)
13820 return false;
13821
13822 BFD_ASSERT (osec->sec_info == NULL);
13823 osec->sec_info = isec->sec_info;
13824 osection->sh_type = SHT_RELA;
13825 osection->sh_link = elf_onesymtab (obfd);
13826 if (osection->sh_link == 0)
13827 {
13828 /* There is no symbol table - we are hosed... */
13829 _bfd_error_handler
13830 /* xgettext:c-format */
13831 (_("%pB(%pA): link section cannot be set"
13832 " because the output file does not have a symbol table"),
13833 obfd, osec);
13834 bfd_set_error (bfd_error_bad_value);
13835 return false;
13836 }
13837
13838 /* Find the output section that corresponds to the isection's
13839 sh_info link. */
13840 if (isection->sh_info == 0
13841 || isection->sh_info >= elf_numsections (ibfd))
13842 {
13843 _bfd_error_handler
13844 /* xgettext:c-format */
13845 (_("%pB(%pA): info section index is invalid"),
13846 obfd, osec);
13847 bfd_set_error (bfd_error_bad_value);
13848 return false;
13849 }
13850
13851 isection = elf_elfsections (ibfd)[isection->sh_info];
13852
13853 if (isection == NULL
13854 || isection->bfd_section == NULL
13855 || isection->bfd_section->output_section == NULL)
13856 {
13857 _bfd_error_handler
13858 /* xgettext:c-format */
13859 (_("%pB(%pA): info section index cannot be set"
13860 " because the section is not in the output"),
13861 obfd, osec);
13862 bfd_set_error (bfd_error_bad_value);
13863 return false;
13864 }
13865
13866 esd = elf_section_data (isection->bfd_section->output_section);
13867 BFD_ASSERT (esd != NULL);
13868 osection->sh_info = esd->this_idx;
13869 esd->has_secondary_relocs = true;
13870 #if DEBUG_SECONDARY_RELOCS
13871 fprintf (stderr, "update header of %s, sh_link = %u, sh_info = %u\n",
13872 osec->name, osection->sh_link, osection->sh_info);
13873 fprintf (stderr, "mark section %s as having secondary relocs\n",
13874 bfd_section_name (isection->bfd_section->output_section));
13875 #endif
13876
13877 return true;
13878 }
13879
13880 /* Write out a secondary reloc section.
13881
13882 FIXME: Currently this function can result in a serious performance penalty
13883 for files with secondary relocs and lots of sections. The proper way to
13884 fix this is for _bfd_elf_copy_special_section_fields() to chain secondary
13885 relocs together and then to have this function just walk that chain. */
13886
13887 bool
13888 _bfd_elf_write_secondary_reloc_section (bfd *abfd, asection *sec)
13889 {
13890 elf_backend_data *ebd = get_elf_backend_data (abfd);
13891 bfd_vma addr_offset;
13892 asection * relsec;
13893 bfd_vma (*r_info) (bfd_vma, bfd_vma);
13894 bool result = true;
13895
13896 if (sec == NULL)
13897 return false;
13898
13899 #if BFD_DEFAULT_TARGET_SIZE > 32
13900 if (bfd_arch_bits_per_address (abfd) != 32)
13901 r_info = elf64_r_info;
13902 else
13903 #endif
13904 r_info = elf32_r_info;
13905
13906 /* The address of an ELF reloc is section relative for an object
13907 file, and absolute for an executable file or shared library.
13908 The address of a BFD reloc is always section relative. */
13909 addr_offset = 0;
13910 if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0)
13911 addr_offset = sec->vma;
13912
13913 /* Discover if there are any secondary reloc sections
13914 associated with SEC. */
13915 for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
13916 {
13917 const struct bfd_elf_section_data * const esd = elf_section_data (relsec);
13918 Elf_Internal_Shdr * const hdr = (Elf_Internal_Shdr *) & esd->this_hdr;
13919
13920 if (hdr->sh_type == SHT_RELA
13921 && hdr->sh_info == (unsigned) elf_section_data (sec)->this_idx)
13922 {
13923 asymbol * last_sym;
13924 int last_sym_idx;
13925 size_t reloc_count;
13926 size_t idx;
13927 bfd_size_type entsize;
13928 arelent * src_irel;
13929 bfd_byte * dst_rela;
13930
13931 if (hdr->contents != NULL)
13932 {
13933 _bfd_error_handler
13934 /* xgettext:c-format */
13935 (_("%pB(%pA): error: secondary reloc section processed twice"),
13936 abfd, relsec);
13937 bfd_set_error (bfd_error_bad_value);
13938 result = false;
13939 continue;
13940 }
13941
13942 entsize = hdr->sh_entsize;
13943 if (entsize == 0)
13944 {
13945 _bfd_error_handler
13946 /* xgettext:c-format */
13947 (_("%pB(%pA): error: secondary reloc section"
13948 " has zero sized entries"),
13949 abfd, relsec);
13950 bfd_set_error (bfd_error_bad_value);
13951 result = false;
13952 continue;
13953 }
13954 else if (entsize != ebd->s->sizeof_rel
13955 && entsize != ebd->s->sizeof_rela)
13956 {
13957 _bfd_error_handler
13958 /* xgettext:c-format */
13959 (_("%pB(%pA): error: secondary reloc section"
13960 " has non-standard sized entries"),
13961 abfd, relsec);
13962 bfd_set_error (bfd_error_bad_value);
13963 result = false;
13964 continue;
13965 }
13966
13967 reloc_count = hdr->sh_size / entsize;
13968 hdr->sh_size = entsize * reloc_count;
13969 if (reloc_count == 0)
13970 {
13971 _bfd_error_handler
13972 /* xgettext:c-format */
13973 (_("%pB(%pA): error: secondary reloc section is empty!"),
13974 abfd, relsec);
13975 bfd_set_error (bfd_error_bad_value);
13976 result = false;
13977 continue;
13978 }
13979
13980 hdr->contents = bfd_alloc (abfd, hdr->sh_size);
13981 if (hdr->contents == NULL)
13982 continue;
13983 relsec->alloced = 1;
13984
13985 #if DEBUG_SECONDARY_RELOCS
13986 fprintf (stderr, "write %u secondary relocs for %s from %s\n",
13987 reloc_count, sec->name, relsec->name);
13988 #endif
13989 last_sym = NULL;
13990 last_sym_idx = 0;
13991 dst_rela = hdr->contents;
13992 src_irel = sec->sec_info;
13993 if (src_irel == NULL)
13994 {
13995 _bfd_error_handler
13996 /* xgettext:c-format */
13997 (_("%pB(%pA): error: internal relocs missing"
13998 " for secondary reloc section"),
13999 abfd, relsec);
14000 bfd_set_error (bfd_error_bad_value);
14001 result = false;
14002 continue;
14003 }
14004
14005 for (idx = 0; idx < reloc_count; idx++, dst_rela += entsize)
14006 {
14007 Elf_Internal_Rela src_rela;
14008 arelent *ptr;
14009 asymbol *sym;
14010 int n;
14011
14012 ptr = src_irel + idx;
14013 if (ptr == NULL)
14014 {
14015 _bfd_error_handler
14016 /* xgettext:c-format */
14017 (_("%pB(%pA): error: reloc table entry %zu is empty"),
14018 abfd, relsec, idx);
14019 bfd_set_error (bfd_error_bad_value);
14020 result = false;
14021 break;
14022 }
14023
14024 if (ptr->sym_ptr_ptr == NULL)
14025 {
14026 /* FIXME: Is this an error ? */
14027 n = 0;
14028 }
14029 else
14030 {
14031 sym = *ptr->sym_ptr_ptr;
14032
14033 if (sym == last_sym)
14034 n = last_sym_idx;
14035 else
14036 {
14037 n = _bfd_elf_symbol_from_bfd_symbol (abfd, & sym);
14038 if (n < 0)
14039 {
14040 _bfd_error_handler
14041 /* xgettext:c-format */
14042 (_("%pB(%pA): error: secondary reloc %zu"
14043 " references a missing symbol"),
14044 abfd, relsec, idx);
14045 bfd_set_error (bfd_error_bad_value);
14046 result = false;
14047 n = 0;
14048 }
14049
14050 last_sym = sym;
14051 last_sym_idx = n;
14052 }
14053
14054 if (sym->the_bfd != NULL
14055 && sym->the_bfd->xvec != abfd->xvec
14056 && ! _bfd_elf_validate_reloc (abfd, ptr))
14057 {
14058 _bfd_error_handler
14059 /* xgettext:c-format */
14060 (_("%pB(%pA): error: secondary reloc %zu"
14061 " references a deleted symbol"),
14062 abfd, relsec, idx);
14063 bfd_set_error (bfd_error_bad_value);
14064 result = false;
14065 n = 0;
14066 }
14067 }
14068
14069 src_rela.r_offset = ptr->address + addr_offset;
14070 if (ptr->howto == NULL)
14071 {
14072 _bfd_error_handler
14073 /* xgettext:c-format */
14074 (_("%pB(%pA): error: secondary reloc %zu"
14075 " is of an unknown type"),
14076 abfd, relsec, idx);
14077 bfd_set_error (bfd_error_bad_value);
14078 result = false;
14079 src_rela.r_info = r_info (0, 0);
14080 }
14081 else
14082 src_rela.r_info = r_info (n, ptr->howto->type);
14083 src_rela.r_addend = ptr->addend;
14084
14085 if (entsize == ebd->s->sizeof_rel)
14086 ebd->s->swap_reloc_out (abfd, &src_rela, dst_rela);
14087 else /* entsize == ebd->s->sizeof_rela */
14088 ebd->s->swap_reloca_out (abfd, &src_rela, dst_rela);
14089 }
14090 }
14091 }
14092
14093 return result;
14094 }
14095
14096 /* Mmap in section contents. */
14097
14098 static bool
14099 elf_mmap_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **buf)
14100 {
14101 #ifdef USE_MMAP
14102 elf_backend_data *bed = get_elf_backend_data (abfd);
14103 if (bed->use_mmap
14104 && sec->compress_status == COMPRESS_SECTION_NONE
14105 && (sec->flags & SEC_LINKER_CREATED) == 0)
14106 {
14107 /* Use mmap only if section size >= the minimum mmap section
14108 size. */
14109 size_t readsz = bfd_get_section_limit_octets (abfd, sec);
14110 size_t allocsz = bfd_get_section_alloc_size (abfd, sec);
14111 if (readsz == allocsz && readsz >= _bfd_minimum_mmap_size)
14112 {
14113 if (sec->contents != NULL)
14114 {
14115 if (!sec->mmapped_p)
14116 abort ();
14117 *buf = sec->contents;
14118 return true;
14119 }
14120 if (sec->mmapped_p)
14121 abort ();
14122 sec->mmapped_p = 1;
14123
14124 /* We can't use the final link preallocated buffer for mmap. */
14125 *buf = NULL;
14126 }
14127 }
14128 #endif
14129 /* FIXME: We should not get here if sec->alloced is set. */
14130 bool ret = bfd_get_full_section_contents (abfd, sec, buf);
14131 if (ret && sec->mmapped_p)
14132 *buf = sec->contents;
14133 return ret;
14134 }
14135
14136 /* Mmap in section contents. */
14137
14138 bool
14139 _bfd_elf_mmap_section_contents (bfd *abfd, sec_ptr sec, bfd_byte **buf)
14140 {
14141 *buf = NULL;
14142 return elf_mmap_section_contents (abfd, sec, buf);
14143 }
14144
14145 /* Mmap in the full section contents for the final link. */
14146
14147 bool
14148 _bfd_elf_link_mmap_section_contents (bfd *abfd, sec_ptr sec,
14149 bfd_byte **buf)
14150 {
14151 return elf_mmap_section_contents (abfd, sec, buf);
14152 }
14153
14154 /* Munmap section contents. */
14155
14156 void
14157 _bfd_elf_munmap_section_contents (asection *sec, void *contents)
14158 {
14159 /* NB: Since _bfd_elf_munmap_section_contents is called like free,
14160 CONTENTS may be NULL. */
14161 if (contents == NULL)
14162 return;
14163
14164 if (sec->alloced
14165 /* What a tangled web we weave with section contents.
14166 FIXME: We shouldn't need to test anything but sec->alloced
14167 here, but there are cases where a buffer is allocated for a
14168 section but then another buffer is malloc'd anyway. eg.
14169 trace through ld-elf/eh4 testcase on x86_64. */
14170 && (sec->contents == contents
14171 || elf_section_data (sec)->this_hdr.contents == contents))
14172 return;
14173
14174 /* Don't leave pointers to data we are about to munmap or free. */
14175 if (sec->contents == contents)
14176 sec->contents = NULL;
14177 if (elf_section_data (sec)->this_hdr.contents == contents)
14178 elf_section_data (sec)->this_hdr.contents = NULL;
14179
14180 #ifdef USE_MMAP
14181 if (sec->mmapped_p)
14182 {
14183 /* When _bfd_elf_mmap_section_contents returns CONTENTS as
14184 malloced, CONTENTS_ADDR is set to NULL. */
14185 if (elf_section_data (sec)->contents_addr != NULL)
14186 {
14187 /* NB: CONTENTS_ADDR and CONTENTS_SIZE must be valid. */
14188 if (munmap (elf_section_data (sec)->contents_addr,
14189 elf_section_data (sec)->contents_size) != 0)
14190 abort ();
14191 sec->mmapped_p = 0;
14192 elf_section_data (sec)->contents_addr = NULL;
14193 elf_section_data (sec)->contents_size = 0;
14194 return;
14195 }
14196 }
14197 #endif
14198
14199 free (contents);
14200 }
14201
14202 /* Munmap the full section contents for the final link. */
14203
14204 void
14205 _bfd_elf_link_munmap_section_contents (asection *sec ATTRIBUTE_UNUSED)
14206 {
14207 #ifdef USE_MMAP
14208 if (sec->mmapped_p && elf_section_data (sec)->contents_addr != NULL)
14209 {
14210 /* When _bfd_elf_link_mmap_section_contents returns CONTENTS as
14211 malloced, CONTENTS_ADDR is set to NULL. */
14212 /* NB: CONTENTS_ADDR and CONTENTS_SIZE must be valid. */
14213 if (munmap (elf_section_data (sec)->contents_addr,
14214 elf_section_data (sec)->contents_size) != 0)
14215 abort ();
14216 sec->mmapped_p = 0;
14217 sec->contents = NULL;
14218 elf_section_data (sec)->this_hdr.contents = NULL;
14219 elf_section_data (sec)->contents_addr = NULL;
14220 elf_section_data (sec)->contents_size = 0;
14221 }
14222 #endif
14223 }
14224