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