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