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