Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/bfd/elf.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 21 - (show annotations) (download) (as text)
Mon Jul 27 20:34:36 2009 UTC (14 years, 10 months ago) by monamour
File MIME type: text/x-csrc
File size: 257671 byte(s)
Update to HEAD.
1 /* ELF executable support for BFD.
2
3 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
5 Free Software Foundation, Inc.
6
7 This file is part of BFD, the Binary File Descriptor library.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
23
24
25 /*
26 SECTION
27 ELF backends
28
29 BFD support for ELF formats is being worked on.
30 Currently, the best supported back ends are for sparc and i386
31 (running svr4 or Solaris 2).
32
33 Documentation of the internals of the support code still needs
34 to be written. The code is changing quickly enough that we
35 haven't bothered yet. */
36
37 /* For sparc64-cross-sparc32. */
38 #define _SYSCALL32
39 #include "sysdep.h"
40 #include "bfd.h"
41 #include "bfdlink.h"
42 #include "libbfd.h"
43 #define ARCH_SIZE 0
44 #include "elf-bfd.h"
45 #include "libiberty.h"
46 #include "safe-ctype.h"
47
48 static int elf_sort_sections (const void *, const void *);
49 static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *);
50 static bfd_boolean prep_headers (bfd *);
51 static bfd_boolean swap_out_syms (bfd *, struct bfd_strtab_hash **, int) ;
52 static bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type) ;
53 static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size,
54 file_ptr offset);
55
56 /* Swap version information in and out. The version information is
57 currently size independent. If that ever changes, this code will
58 need to move into elfcode.h. */
59
60 /* Swap in a Verdef structure. */
61
62 void
63 _bfd_elf_swap_verdef_in (bfd *abfd,
64 const Elf_External_Verdef *src,
65 Elf_Internal_Verdef *dst)
66 {
67 dst->vd_version = H_GET_16 (abfd, src->vd_version);
68 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
69 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
70 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
71 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
72 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
73 dst->vd_next = H_GET_32 (abfd, src->vd_next);
74 }
75
76 /* Swap out a Verdef structure. */
77
78 void
79 _bfd_elf_swap_verdef_out (bfd *abfd,
80 const Elf_Internal_Verdef *src,
81 Elf_External_Verdef *dst)
82 {
83 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
84 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
85 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
86 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
87 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
88 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
89 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
90 }
91
92 /* Swap in a Verdaux structure. */
93
94 void
95 _bfd_elf_swap_verdaux_in (bfd *abfd,
96 const Elf_External_Verdaux *src,
97 Elf_Internal_Verdaux *dst)
98 {
99 dst->vda_name = H_GET_32 (abfd, src->vda_name);
100 dst->vda_next = H_GET_32 (abfd, src->vda_next);
101 }
102
103 /* Swap out a Verdaux structure. */
104
105 void
106 _bfd_elf_swap_verdaux_out (bfd *abfd,
107 const Elf_Internal_Verdaux *src,
108 Elf_External_Verdaux *dst)
109 {
110 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
111 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
112 }
113
114 /* Swap in a Verneed structure. */
115
116 void
117 _bfd_elf_swap_verneed_in (bfd *abfd,
118 const Elf_External_Verneed *src,
119 Elf_Internal_Verneed *dst)
120 {
121 dst->vn_version = H_GET_16 (abfd, src->vn_version);
122 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
123 dst->vn_file = H_GET_32 (abfd, src->vn_file);
124 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
125 dst->vn_next = H_GET_32 (abfd, src->vn_next);
126 }
127
128 /* Swap out a Verneed structure. */
129
130 void
131 _bfd_elf_swap_verneed_out (bfd *abfd,
132 const Elf_Internal_Verneed *src,
133 Elf_External_Verneed *dst)
134 {
135 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
136 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
137 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
138 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
139 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
140 }
141
142 /* Swap in a Vernaux structure. */
143
144 void
145 _bfd_elf_swap_vernaux_in (bfd *abfd,
146 const Elf_External_Vernaux *src,
147 Elf_Internal_Vernaux *dst)
148 {
149 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
150 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
151 dst->vna_other = H_GET_16 (abfd, src->vna_other);
152 dst->vna_name = H_GET_32 (abfd, src->vna_name);
153 dst->vna_next = H_GET_32 (abfd, src->vna_next);
154 }
155
156 /* Swap out a Vernaux structure. */
157
158 void
159 _bfd_elf_swap_vernaux_out (bfd *abfd,
160 const Elf_Internal_Vernaux *src,
161 Elf_External_Vernaux *dst)
162 {
163 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
164 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
165 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
166 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
167 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
168 }
169
170 /* Swap in a Versym structure. */
171
172 void
173 _bfd_elf_swap_versym_in (bfd *abfd,
174 const Elf_External_Versym *src,
175 Elf_Internal_Versym *dst)
176 {
177 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
178 }
179
180 /* Swap out a Versym structure. */
181
182 void
183 _bfd_elf_swap_versym_out (bfd *abfd,
184 const Elf_Internal_Versym *src,
185 Elf_External_Versym *dst)
186 {
187 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
188 }
189
190 /* Standard ELF hash function. Do not change this function; you will
191 cause invalid hash tables to be generated. */
192
193 unsigned long
194 bfd_elf_hash (const char *namearg)
195 {
196 const unsigned char *name = (const unsigned char *) namearg;
197 unsigned long h = 0;
198 unsigned long g;
199 int ch;
200
201 while ((ch = *name++) != '\0')
202 {
203 h = (h << 4) + ch;
204 if ((g = (h & 0xf0000000)) != 0)
205 {
206 h ^= g >> 24;
207 /* The ELF ABI says `h &= ~g', but this is equivalent in
208 this case and on some machines one insn instead of two. */
209 h ^= g;
210 }
211 }
212 return h & 0xffffffff;
213 }
214
215 /* DT_GNU_HASH hash function. Do not change this function; you will
216 cause invalid hash tables to be generated. */
217
218 unsigned long
219 bfd_elf_gnu_hash (const char *namearg)
220 {
221 const unsigned char *name = (const unsigned char *) namearg;
222 unsigned long h = 5381;
223 unsigned char ch;
224
225 while ((ch = *name++) != '\0')
226 h = (h << 5) + h + ch;
227 return h & 0xffffffff;
228 }
229
230 /* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with
231 the object_id field of an elf_obj_tdata field set to OBJECT_ID. */
232 bfd_boolean
233 bfd_elf_allocate_object (bfd *abfd,
234 size_t object_size,
235 enum elf_object_id object_id)
236 {
237 BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata));
238 abfd->tdata.any = bfd_zalloc (abfd, object_size);
239 if (abfd->tdata.any == NULL)
240 return FALSE;
241
242 elf_object_id (abfd) = object_id;
243 elf_program_header_size (abfd) = (bfd_size_type) -1;
244 return TRUE;
245 }
246
247
248 bfd_boolean
249 bfd_elf_make_generic_object (bfd *abfd)
250 {
251 return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
252 GENERIC_ELF_TDATA);
253 }
254
255 bfd_boolean
256 bfd_elf_mkcorefile (bfd *abfd)
257 {
258 /* I think this can be done just like an object file. */
259 return bfd_elf_make_generic_object (abfd);
260 }
261
262 static char *
263 bfd_elf_get_str_section (bfd *abfd, unsigned int shindex)
264 {
265 Elf_Internal_Shdr **i_shdrp;
266 bfd_byte *shstrtab = NULL;
267 file_ptr offset;
268 bfd_size_type shstrtabsize;
269
270 i_shdrp = elf_elfsections (abfd);
271 if (i_shdrp == 0
272 || shindex >= elf_numsections (abfd)
273 || i_shdrp[shindex] == 0)
274 return NULL;
275
276 shstrtab = i_shdrp[shindex]->contents;
277 if (shstrtab == NULL)
278 {
279 /* No cached one, attempt to read, and cache what we read. */
280 offset = i_shdrp[shindex]->sh_offset;
281 shstrtabsize = i_shdrp[shindex]->sh_size;
282
283 /* Allocate and clear an extra byte at the end, to prevent crashes
284 in case the string table is not terminated. */
285 if (shstrtabsize + 1 <= 1
286 || (shstrtab = bfd_alloc (abfd, shstrtabsize + 1)) == NULL
287 || bfd_seek (abfd, offset, SEEK_SET) != 0)
288 shstrtab = NULL;
289 else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize)
290 {
291 if (bfd_get_error () != bfd_error_system_call)
292 bfd_set_error (bfd_error_file_truncated);
293 shstrtab = NULL;
294 /* Once we've failed to read it, make sure we don't keep
295 trying. Otherwise, we'll keep allocating space for
296 the string table over and over. */
297 i_shdrp[shindex]->sh_size = 0;
298 }
299 else
300 shstrtab[shstrtabsize] = '\0';
301 i_shdrp[shindex]->contents = shstrtab;
302 }
303 return (char *) shstrtab;
304 }
305
306 char *
307 bfd_elf_string_from_elf_section (bfd *abfd,
308 unsigned int shindex,
309 unsigned int strindex)
310 {
311 Elf_Internal_Shdr *hdr;
312
313 if (strindex == 0)
314 return "";
315
316 if (elf_elfsections (abfd) == NULL || shindex >= elf_numsections (abfd))
317 return NULL;
318
319 hdr = elf_elfsections (abfd)[shindex];
320
321 if (hdr->contents == NULL
322 && bfd_elf_get_str_section (abfd, shindex) == NULL)
323 return NULL;
324
325 if (strindex >= hdr->sh_size)
326 {
327 unsigned int shstrndx = elf_elfheader(abfd)->e_shstrndx;
328 (*_bfd_error_handler)
329 (_("%B: invalid string offset %u >= %lu for section `%s'"),
330 abfd, strindex, (unsigned long) hdr->sh_size,
331 (shindex == shstrndx && strindex == hdr->sh_name
332 ? ".shstrtab"
333 : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name)));
334 return "";
335 }
336
337 return ((char *) hdr->contents) + strindex;
338 }
339
340 /* Read and convert symbols to internal format.
341 SYMCOUNT specifies the number of symbols to read, starting from
342 symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF
343 are non-NULL, they are used to store the internal symbols, external
344 symbols, and symbol section index extensions, respectively.
345 Returns a pointer to the internal symbol buffer (malloced if necessary)
346 or NULL if there were no symbols or some kind of problem. */
347
348 Elf_Internal_Sym *
349 bfd_elf_get_elf_syms (bfd *ibfd,
350 Elf_Internal_Shdr *symtab_hdr,
351 size_t symcount,
352 size_t symoffset,
353 Elf_Internal_Sym *intsym_buf,
354 void *extsym_buf,
355 Elf_External_Sym_Shndx *extshndx_buf)
356 {
357 Elf_Internal_Shdr *shndx_hdr;
358 void *alloc_ext;
359 const bfd_byte *esym;
360 Elf_External_Sym_Shndx *alloc_extshndx;
361 Elf_External_Sym_Shndx *shndx;
362 Elf_Internal_Sym *alloc_intsym;
363 Elf_Internal_Sym *isym;
364 Elf_Internal_Sym *isymend;
365 const struct elf_backend_data *bed;
366 size_t extsym_size;
367 bfd_size_type amt;
368 file_ptr pos;
369
370 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
371 abort ();
372
373 if (symcount == 0)
374 return intsym_buf;
375
376 /* Normal syms might have section extension entries. */
377 shndx_hdr = NULL;
378 if (symtab_hdr == &elf_tdata (ibfd)->symtab_hdr)
379 shndx_hdr = &elf_tdata (ibfd)->symtab_shndx_hdr;
380
381 /* Read the symbols. */
382 alloc_ext = NULL;
383 alloc_extshndx = NULL;
384 alloc_intsym = NULL;
385 bed = get_elf_backend_data (ibfd);
386 extsym_size = bed->s->sizeof_sym;
387 amt = symcount * extsym_size;
388 pos = symtab_hdr->sh_offset + symoffset * extsym_size;
389 if (extsym_buf == NULL)
390 {
391 alloc_ext = bfd_malloc2 (symcount, extsym_size);
392 extsym_buf = alloc_ext;
393 }
394 if (extsym_buf == NULL
395 || bfd_seek (ibfd, pos, SEEK_SET) != 0
396 || bfd_bread (extsym_buf, amt, ibfd) != amt)
397 {
398 intsym_buf = NULL;
399 goto out;
400 }
401
402 if (shndx_hdr == NULL || shndx_hdr->sh_size == 0)
403 extshndx_buf = NULL;
404 else
405 {
406 amt = symcount * sizeof (Elf_External_Sym_Shndx);
407 pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx);
408 if (extshndx_buf == NULL)
409 {
410 alloc_extshndx = bfd_malloc2 (symcount,
411 sizeof (Elf_External_Sym_Shndx));
412 extshndx_buf = alloc_extshndx;
413 }
414 if (extshndx_buf == NULL
415 || bfd_seek (ibfd, pos, SEEK_SET) != 0
416 || bfd_bread (extshndx_buf, amt, ibfd) != amt)
417 {
418 intsym_buf = NULL;
419 goto out;
420 }
421 }
422
423 if (intsym_buf == NULL)
424 {
425 alloc_intsym = bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym));
426 intsym_buf = alloc_intsym;
427 if (intsym_buf == NULL)
428 goto out;
429 }
430
431 /* Convert the symbols to internal form. */
432 isymend = intsym_buf + symcount;
433 for (esym = extsym_buf, isym = intsym_buf, shndx = extshndx_buf;
434 isym < isymend;
435 esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL)
436 if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym))
437 {
438 symoffset += (esym - (bfd_byte *) extsym_buf) / extsym_size;
439 (*_bfd_error_handler) (_("%B symbol number %lu references "
440 "nonexistent SHT_SYMTAB_SHNDX section"),
441 ibfd, (unsigned long) symoffset);
442 if (alloc_intsym != NULL)
443 free (alloc_intsym);
444 intsym_buf = NULL;
445 goto out;
446 }
447
448 out:
449 if (alloc_ext != NULL)
450 free (alloc_ext);
451 if (alloc_extshndx != NULL)
452 free (alloc_extshndx);
453
454 return intsym_buf;
455 }
456
457 /* Look up a symbol name. */
458 const char *
459 bfd_elf_sym_name (bfd *abfd,
460 Elf_Internal_Shdr *symtab_hdr,
461 Elf_Internal_Sym *isym,
462 asection *sym_sec)
463 {
464 const char *name;
465 unsigned int iname = isym->st_name;
466 unsigned int shindex = symtab_hdr->sh_link;
467
468 if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION
469 /* Check for a bogus st_shndx to avoid crashing. */
470 && isym->st_shndx < elf_numsections (abfd))
471 {
472 iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name;
473 shindex = elf_elfheader (abfd)->e_shstrndx;
474 }
475
476 name = bfd_elf_string_from_elf_section (abfd, shindex, iname);
477 if (name == NULL)
478 name = "(null)";
479 else if (sym_sec && *name == '\0')
480 name = bfd_section_name (abfd, sym_sec);
481
482 return name;
483 }
484
485 /* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
486 sections. The first element is the flags, the rest are section
487 pointers. */
488
489 typedef union elf_internal_group {
490 Elf_Internal_Shdr *shdr;
491 unsigned int flags;
492 } Elf_Internal_Group;
493
494 /* Return the name of the group signature symbol. Why isn't the
495 signature just a string? */
496
497 static const char *
498 group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr)
499 {
500 Elf_Internal_Shdr *hdr;
501 unsigned char esym[sizeof (Elf64_External_Sym)];
502 Elf_External_Sym_Shndx eshndx;
503 Elf_Internal_Sym isym;
504
505 /* First we need to ensure the symbol table is available. Make sure
506 that it is a symbol table section. */
507 if (ghdr->sh_link >= elf_numsections (abfd))
508 return NULL;
509 hdr = elf_elfsections (abfd) [ghdr->sh_link];
510 if (hdr->sh_type != SHT_SYMTAB
511 || ! bfd_section_from_shdr (abfd, ghdr->sh_link))
512 return NULL;
513
514 /* Go read the symbol. */
515 hdr = &elf_tdata (abfd)->symtab_hdr;
516 if (bfd_elf_get_elf_syms (abfd, hdr, 1, ghdr->sh_info,
517 &isym, esym, &eshndx) == NULL)
518 return NULL;
519
520 return bfd_elf_sym_name (abfd, hdr, &isym, NULL);
521 }
522
523 /* Set next_in_group list pointer, and group name for NEWSECT. */
524
525 static bfd_boolean
526 setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect)
527 {
528 unsigned int num_group = elf_tdata (abfd)->num_group;
529
530 /* If num_group is zero, read in all SHT_GROUP sections. The count
531 is set to -1 if there are no SHT_GROUP sections. */
532 if (num_group == 0)
533 {
534 unsigned int i, shnum;
535
536 /* First count the number of groups. If we have a SHT_GROUP
537 section with just a flag word (ie. sh_size is 4), ignore it. */
538 shnum = elf_numsections (abfd);
539 num_group = 0;
540
541 #define IS_VALID_GROUP_SECTION_HEADER(shdr) \
542 ( (shdr)->sh_type == SHT_GROUP \
543 && (shdr)->sh_size >= (2 * GRP_ENTRY_SIZE) \
544 && (shdr)->sh_entsize == GRP_ENTRY_SIZE \
545 && ((shdr)->sh_size % GRP_ENTRY_SIZE) == 0)
546
547 for (i = 0; i < shnum; i++)
548 {
549 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
550
551 if (IS_VALID_GROUP_SECTION_HEADER (shdr))
552 num_group += 1;
553 }
554
555 if (num_group == 0)
556 {
557 num_group = (unsigned) -1;
558 elf_tdata (abfd)->num_group = num_group;
559 }
560 else
561 {
562 /* We keep a list of elf section headers for group sections,
563 so we can find them quickly. */
564 bfd_size_type amt;
565
566 elf_tdata (abfd)->num_group = num_group;
567 elf_tdata (abfd)->group_sect_ptr
568 = bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *));
569 if (elf_tdata (abfd)->group_sect_ptr == NULL)
570 return FALSE;
571
572 num_group = 0;
573 for (i = 0; i < shnum; i++)
574 {
575 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
576
577 if (IS_VALID_GROUP_SECTION_HEADER (shdr))
578 {
579 unsigned char *src;
580 Elf_Internal_Group *dest;
581
582 /* Add to list of sections. */
583 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
584 num_group += 1;
585
586 /* Read the raw contents. */
587 BFD_ASSERT (sizeof (*dest) >= 4);
588 amt = shdr->sh_size * sizeof (*dest) / 4;
589 shdr->contents = bfd_alloc2 (abfd, shdr->sh_size,
590 sizeof (*dest) / 4);
591 /* PR binutils/4110: Handle corrupt group headers. */
592 if (shdr->contents == NULL)
593 {
594 _bfd_error_handler
595 (_("%B: Corrupt size field in group section header: 0x%lx"), abfd, shdr->sh_size);
596 bfd_set_error (bfd_error_bad_value);
597 return FALSE;
598 }
599
600 memset (shdr->contents, 0, amt);
601
602 if (bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
603 || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
604 != shdr->sh_size))
605 return FALSE;
606
607 /* Translate raw contents, a flag word followed by an
608 array of elf section indices all in target byte order,
609 to the flag word followed by an array of elf section
610 pointers. */
611 src = shdr->contents + shdr->sh_size;
612 dest = (Elf_Internal_Group *) (shdr->contents + amt);
613 while (1)
614 {
615 unsigned int idx;
616
617 src -= 4;
618 --dest;
619 idx = H_GET_32 (abfd, src);
620 if (src == shdr->contents)
621 {
622 dest->flags = idx;
623 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
624 shdr->bfd_section->flags
625 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
626 break;
627 }
628 if (idx >= shnum)
629 {
630 ((*_bfd_error_handler)
631 (_("%B: invalid SHT_GROUP entry"), abfd));
632 idx = 0;
633 }
634 dest->shdr = elf_elfsections (abfd)[idx];
635 }
636 }
637 }
638 }
639 }
640
641 if (num_group != (unsigned) -1)
642 {
643 unsigned int i;
644
645 for (i = 0; i < num_group; i++)
646 {
647 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
648 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
649 unsigned int n_elt = shdr->sh_size / 4;
650
651 /* Look through this group's sections to see if current
652 section is a member. */
653 while (--n_elt != 0)
654 if ((++idx)->shdr == hdr)
655 {
656 asection *s = NULL;
657
658 /* We are a member of this group. Go looking through
659 other members to see if any others are linked via
660 next_in_group. */
661 idx = (Elf_Internal_Group *) shdr->contents;
662 n_elt = shdr->sh_size / 4;
663 while (--n_elt != 0)
664 if ((s = (++idx)->shdr->bfd_section) != NULL
665 && elf_next_in_group (s) != NULL)
666 break;
667 if (n_elt != 0)
668 {
669 /* Snarf the group name from other member, and
670 insert current section in circular list. */
671 elf_group_name (newsect) = elf_group_name (s);
672 elf_next_in_group (newsect) = elf_next_in_group (s);
673 elf_next_in_group (s) = newsect;
674 }
675 else
676 {
677 const char *gname;
678
679 gname = group_signature (abfd, shdr);
680 if (gname == NULL)
681 return FALSE;
682 elf_group_name (newsect) = gname;
683
684 /* Start a circular list with one element. */
685 elf_next_in_group (newsect) = newsect;
686 }
687
688 /* If the group section has been created, point to the
689 new member. */
690 if (shdr->bfd_section != NULL)
691 elf_next_in_group (shdr->bfd_section) = newsect;
692
693 i = num_group - 1;
694 break;
695 }
696 }
697 }
698
699 if (elf_group_name (newsect) == NULL)
700 {
701 (*_bfd_error_handler) (_("%B: no group info for section %A"),
702 abfd, newsect);
703 }
704 return TRUE;
705 }
706
707 bfd_boolean
708 _bfd_elf_setup_sections (bfd *abfd)
709 {
710 unsigned int i;
711 unsigned int num_group = elf_tdata (abfd)->num_group;
712 bfd_boolean result = TRUE;
713 asection *s;
714
715 /* Process SHF_LINK_ORDER. */
716 for (s = abfd->sections; s != NULL; s = s->next)
717 {
718 Elf_Internal_Shdr *this_hdr = &elf_section_data (s)->this_hdr;
719 if ((this_hdr->sh_flags & SHF_LINK_ORDER) != 0)
720 {
721 unsigned int elfsec = this_hdr->sh_link;
722 /* FIXME: The old Intel compiler and old strip/objcopy may
723 not set the sh_link or sh_info fields. Hence we could
724 get the situation where elfsec is 0. */
725 if (elfsec == 0)
726 {
727 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
728 if (bed->link_order_error_handler)
729 bed->link_order_error_handler
730 (_("%B: warning: sh_link not set for section `%A'"),
731 abfd, s);
732 }
733 else
734 {
735 asection *link = NULL;
736
737 if (elfsec < elf_numsections (abfd))
738 {
739 this_hdr = elf_elfsections (abfd)[elfsec];
740 link = this_hdr->bfd_section;
741 }
742
743 /* PR 1991, 2008:
744 Some strip/objcopy may leave an incorrect value in
745 sh_link. We don't want to proceed. */
746 if (link == NULL)
747 {
748 (*_bfd_error_handler)
749 (_("%B: sh_link [%d] in section `%A' is incorrect"),
750 s->owner, s, elfsec);
751 result = FALSE;
752 }
753
754 elf_linked_to_section (s) = link;
755 }
756 }
757 }
758
759 /* Process section groups. */
760 if (num_group == (unsigned) -1)
761 return result;
762
763 for (i = 0; i < num_group; i++)
764 {
765 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
766 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
767 unsigned int n_elt = shdr->sh_size / 4;
768
769 while (--n_elt != 0)
770 if ((++idx)->shdr->bfd_section)
771 elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
772 else if (idx->shdr->sh_type == SHT_RELA
773 || idx->shdr->sh_type == SHT_REL)
774 /* We won't include relocation sections in section groups in
775 output object files. We adjust the group section size here
776 so that relocatable link will work correctly when
777 relocation sections are in section group in input object
778 files. */
779 shdr->bfd_section->size -= 4;
780 else
781 {
782 /* There are some unknown sections in the group. */
783 (*_bfd_error_handler)
784 (_("%B: unknown [%d] section `%s' in group [%s]"),
785 abfd,
786 (unsigned int) idx->shdr->sh_type,
787 bfd_elf_string_from_elf_section (abfd,
788 (elf_elfheader (abfd)
789 ->e_shstrndx),
790 idx->shdr->sh_name),
791 shdr->bfd_section->name);
792 result = FALSE;
793 }
794 }
795 return result;
796 }
797
798 bfd_boolean
799 bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec)
800 {
801 return elf_next_in_group (sec) != NULL;
802 }
803
804 /* Make a BFD section from an ELF section. We store a pointer to the
805 BFD section in the bfd_section field of the header. */
806
807 bfd_boolean
808 _bfd_elf_make_section_from_shdr (bfd *abfd,
809 Elf_Internal_Shdr *hdr,
810 const char *name,
811 int shindex)
812 {
813 asection *newsect;
814 flagword flags;
815 const struct elf_backend_data *bed;
816
817 if (hdr->bfd_section != NULL)
818 {
819 BFD_ASSERT (strcmp (name,
820 bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
821 return TRUE;
822 }
823
824 newsect = bfd_make_section_anyway (abfd, name);
825 if (newsect == NULL)
826 return FALSE;
827
828 hdr->bfd_section = newsect;
829 elf_section_data (newsect)->this_hdr = *hdr;
830 elf_section_data (newsect)->this_idx = shindex;
831
832 /* Always use the real type/flags. */
833 elf_section_type (newsect) = hdr->sh_type;
834 elf_section_flags (newsect) = hdr->sh_flags;
835
836 newsect->filepos = hdr->sh_offset;
837
838 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
839 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
840 || ! bfd_set_section_alignment (abfd, newsect,
841 bfd_log2 (hdr->sh_addralign)))
842 return FALSE;
843
844 flags = SEC_NO_FLAGS;
845 if (hdr->sh_type != SHT_NOBITS)
846 flags |= SEC_HAS_CONTENTS;
847 if (hdr->sh_type == SHT_GROUP)
848 flags |= SEC_GROUP | SEC_EXCLUDE;
849 if ((hdr->sh_flags & SHF_ALLOC) != 0)
850 {
851 flags |= SEC_ALLOC;
852 if (hdr->sh_type != SHT_NOBITS)
853 flags |= SEC_LOAD;
854 }
855 if ((hdr->sh_flags & SHF_WRITE) == 0)
856 flags |= SEC_READONLY;
857 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
858 flags |= SEC_CODE;
859 else if ((flags & SEC_LOAD) != 0)
860 flags |= SEC_DATA;
861 if ((hdr->sh_flags & SHF_MERGE) != 0)
862 {
863 flags |= SEC_MERGE;
864 newsect->entsize = hdr->sh_entsize;
865 if ((hdr->sh_flags & SHF_STRINGS) != 0)
866 flags |= SEC_STRINGS;
867 }
868 if (hdr->sh_flags & SHF_GROUP)
869 if (!setup_group (abfd, hdr, newsect))
870 return FALSE;
871 if ((hdr->sh_flags & SHF_TLS) != 0)
872 flags |= SEC_THREAD_LOCAL;
873
874 if ((flags & SEC_ALLOC) == 0)
875 {
876 /* The debugging sections appear to be recognized only by name,
877 not any sort of flag. Their SEC_ALLOC bits are cleared. */
878 static const struct
879 {
880 const char *name;
881 int len;
882 } debug_sections [] =
883 {
884 { STRING_COMMA_LEN ("debug") }, /* 'd' */
885 { NULL, 0 }, /* 'e' */
886 { NULL, 0 }, /* 'f' */
887 { STRING_COMMA_LEN ("gnu.linkonce.wi.") }, /* 'g' */
888 { NULL, 0 }, /* 'h' */
889 { NULL, 0 }, /* 'i' */
890 { NULL, 0 }, /* 'j' */
891 { NULL, 0 }, /* 'k' */
892 { STRING_COMMA_LEN ("line") }, /* 'l' */
893 { NULL, 0 }, /* 'm' */
894 { NULL, 0 }, /* 'n' */
895 { NULL, 0 }, /* 'o' */
896 { NULL, 0 }, /* 'p' */
897 { NULL, 0 }, /* 'q' */
898 { NULL, 0 }, /* 'r' */
899 { STRING_COMMA_LEN ("stab") }, /* 's' */
900 { NULL, 0 }, /* 't' */
901 { NULL, 0 }, /* 'u' */
902 { NULL, 0 }, /* 'v' */
903 { NULL, 0 }, /* 'w' */
904 { NULL, 0 }, /* 'x' */
905 { NULL, 0 }, /* 'y' */
906 { STRING_COMMA_LEN ("zdebug") } /* 'z' */
907 };
908
909 if (name [0] == '.')
910 {
911 int i = name [1] - 'd';
912 if (i >= 0
913 && i < (int) ARRAY_SIZE (debug_sections)
914 && debug_sections [i].name != NULL
915 && strncmp (&name [1], debug_sections [i].name,
916 debug_sections [i].len) == 0)
917 flags |= SEC_DEBUGGING;
918 }
919 }
920
921 /* As a GNU extension, if the name begins with .gnu.linkonce, we
922 only link a single copy of the section. This is used to support
923 g++. g++ will emit each template expansion in its own section.
924 The symbols will be defined as weak, so that multiple definitions
925 are permitted. The GNU linker extension is to actually discard
926 all but one of the sections. */
927 if (CONST_STRNEQ (name, ".gnu.linkonce")
928 && elf_next_in_group (newsect) == NULL)
929 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
930
931 bed = get_elf_backend_data (abfd);
932 if (bed->elf_backend_section_flags)
933 if (! bed->elf_backend_section_flags (&flags, hdr))
934 return FALSE;
935
936 if (! bfd_set_section_flags (abfd, newsect, flags))
937 return FALSE;
938
939 /* We do not parse the PT_NOTE segments as we are interested even in the
940 separate debug info files which may have the segments offsets corrupted.
941 PT_NOTEs from the core files are currently not parsed using BFD. */
942 if (hdr->sh_type == SHT_NOTE)
943 {
944 bfd_byte *contents;
945
946 if (!bfd_malloc_and_get_section (abfd, newsect, &contents))
947 return FALSE;
948
949 elf_parse_notes (abfd, (char *) contents, hdr->sh_size, -1);
950 free (contents);
951 }
952
953 if ((flags & SEC_ALLOC) != 0)
954 {
955 Elf_Internal_Phdr *phdr;
956 unsigned int i, nload;
957
958 /* Some ELF linkers produce binaries with all the program header
959 p_paddr fields zero. If we have such a binary with more than
960 one PT_LOAD header, then leave the section lma equal to vma
961 so that we don't create sections with overlapping lma. */
962 phdr = elf_tdata (abfd)->phdr;
963 for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
964 if (phdr->p_paddr != 0)
965 break;
966 else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0)
967 ++nload;
968 if (i >= elf_elfheader (abfd)->e_phnum && nload > 1)
969 return TRUE;
970
971 phdr = elf_tdata (abfd)->phdr;
972 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
973 {
974 /* This section is part of this segment if its file
975 offset plus size lies within the segment's memory
976 span and, if the section is loaded, the extent of the
977 loaded data lies within the extent of the segment.
978
979 Note - we used to check the p_paddr field as well, and
980 refuse to set the LMA if it was 0. This is wrong
981 though, as a perfectly valid initialised segment can
982 have a p_paddr of zero. Some architectures, eg ARM,
983 place special significance on the address 0 and
984 executables need to be able to have a segment which
985 covers this address. */
986 if (phdr->p_type == PT_LOAD
987 && (bfd_vma) hdr->sh_offset >= phdr->p_offset
988 && (hdr->sh_offset + hdr->sh_size
989 <= phdr->p_offset + phdr->p_memsz)
990 && ((flags & SEC_LOAD) == 0
991 || (hdr->sh_offset + hdr->sh_size
992 <= phdr->p_offset + phdr->p_filesz)))
993 {
994 if ((flags & SEC_LOAD) == 0)
995 newsect->lma = (phdr->p_paddr
996 + hdr->sh_addr - phdr->p_vaddr);
997 else
998 /* We used to use the same adjustment for SEC_LOAD
999 sections, but that doesn't work if the segment
1000 is packed with code from multiple VMAs.
1001 Instead we calculate the section LMA based on
1002 the segment LMA. It is assumed that the
1003 segment will contain sections with contiguous
1004 LMAs, even if the VMAs are not. */
1005 newsect->lma = (phdr->p_paddr
1006 + hdr->sh_offset - phdr->p_offset);
1007
1008 /* With contiguous segments, we can't tell from file
1009 offsets whether a section with zero size should
1010 be placed at the end of one segment or the
1011 beginning of the next. Decide based on vaddr. */
1012 if (hdr->sh_addr >= phdr->p_vaddr
1013 && (hdr->sh_addr + hdr->sh_size
1014 <= phdr->p_vaddr + phdr->p_memsz))
1015 break;
1016 }
1017 }
1018 }
1019
1020 return TRUE;
1021 }
1022
1023 const char *const bfd_elf_section_type_names[] = {
1024 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
1025 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
1026 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
1027 };
1028
1029 /* ELF relocs are against symbols. If we are producing relocatable
1030 output, and the reloc is against an external symbol, and nothing
1031 has given us any additional addend, the resulting reloc will also
1032 be against the same symbol. In such a case, we don't want to
1033 change anything about the way the reloc is handled, since it will
1034 all be done at final link time. Rather than put special case code
1035 into bfd_perform_relocation, all the reloc types use this howto
1036 function. It just short circuits the reloc if producing
1037 relocatable output against an external symbol. */
1038
1039 bfd_reloc_status_type
1040 bfd_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED,
1041 arelent *reloc_entry,
1042 asymbol *symbol,
1043 void *data ATTRIBUTE_UNUSED,
1044 asection *input_section,
1045 bfd *output_bfd,
1046 char **error_message ATTRIBUTE_UNUSED)
1047 {
1048 if (output_bfd != NULL
1049 && (symbol->flags & BSF_SECTION_SYM) == 0
1050 && (! reloc_entry->howto->partial_inplace
1051 || reloc_entry->addend == 0))
1052 {
1053 reloc_entry->address += input_section->output_offset;
1054 return bfd_reloc_ok;
1055 }
1056
1057 return bfd_reloc_continue;
1058 }
1059
1060 /* Copy the program header and other data from one object module to
1061 another. */
1062
1063 bfd_boolean
1064 _bfd_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
1065 {
1066 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
1067 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
1068 return TRUE;
1069
1070 BFD_ASSERT (!elf_flags_init (obfd)
1071 || (elf_elfheader (obfd)->e_flags
1072 == elf_elfheader (ibfd)->e_flags));
1073
1074 elf_gp (obfd) = elf_gp (ibfd);
1075 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
1076 elf_flags_init (obfd) = TRUE;
1077
1078 /* Copy object attributes. */
1079 _bfd_elf_copy_obj_attributes (ibfd, obfd);
1080
1081 return TRUE;
1082 }
1083
1084 static const char *
1085 get_segment_type (unsigned int p_type)
1086 {
1087 const char *pt;
1088 switch (p_type)
1089 {
1090 case PT_NULL: pt = "NULL"; break;
1091 case PT_LOAD: pt = "LOAD"; break;
1092 case PT_DYNAMIC: pt = "DYNAMIC"; break;
1093 case PT_INTERP: pt = "INTERP"; break;
1094 case PT_NOTE: pt = "NOTE"; break;
1095 case PT_SHLIB: pt = "SHLIB"; break;
1096 case PT_PHDR: pt = "PHDR"; break;
1097 case PT_TLS: pt = "TLS"; break;
1098 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
1099 case PT_GNU_STACK: pt = "STACK"; break;
1100 case PT_GNU_RELRO: pt = "RELRO"; break;
1101 default: pt = NULL; break;
1102 }
1103 return pt;
1104 }
1105
1106 /* Print out the program headers. */
1107
1108 bfd_boolean
1109 _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
1110 {
1111 FILE *f = farg;
1112 Elf_Internal_Phdr *p;
1113 asection *s;
1114 bfd_byte *dynbuf = NULL;
1115
1116 p = elf_tdata (abfd)->phdr;
1117 if (p != NULL)
1118 {
1119 unsigned int i, c;
1120
1121 fprintf (f, _("\nProgram Header:\n"));
1122 c = elf_elfheader (abfd)->e_phnum;
1123 for (i = 0; i < c; i++, p++)
1124 {
1125 const char *pt = get_segment_type (p->p_type);
1126 char buf[20];
1127
1128 if (pt == NULL)
1129 {
1130 sprintf (buf, "0x%lx", p->p_type);
1131 pt = buf;
1132 }
1133 fprintf (f, "%8s off 0x", pt);
1134 bfd_fprintf_vma (abfd, f, p->p_offset);
1135 fprintf (f, " vaddr 0x");
1136 bfd_fprintf_vma (abfd, f, p->p_vaddr);
1137 fprintf (f, " paddr 0x");
1138 bfd_fprintf_vma (abfd, f, p->p_paddr);
1139 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
1140 fprintf (f, " filesz 0x");
1141 bfd_fprintf_vma (abfd, f, p->p_filesz);
1142 fprintf (f, " memsz 0x");
1143 bfd_fprintf_vma (abfd, f, p->p_memsz);
1144 fprintf (f, " flags %c%c%c",
1145 (p->p_flags & PF_R) != 0 ? 'r' : '-',
1146 (p->p_flags & PF_W) != 0 ? 'w' : '-',
1147 (p->p_flags & PF_X) != 0 ? 'x' : '-');
1148 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
1149 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
1150 fprintf (f, "\n");
1151 }
1152 }
1153
1154 s = bfd_get_section_by_name (abfd, ".dynamic");
1155 if (s != NULL)
1156 {
1157 unsigned int elfsec;
1158 unsigned long shlink;
1159 bfd_byte *extdyn, *extdynend;
1160 size_t extdynsize;
1161 void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
1162
1163 fprintf (f, _("\nDynamic Section:\n"));
1164
1165 if (!bfd_malloc_and_get_section (abfd, s, &dynbuf))
1166 goto error_return;
1167
1168 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1169 if (elfsec == SHN_BAD)
1170 goto error_return;
1171 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
1172
1173 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1174 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1175
1176 extdyn = dynbuf;
1177 extdynend = extdyn + s->size;
1178 for (; extdyn < extdynend; extdyn += extdynsize)
1179 {
1180 Elf_Internal_Dyn dyn;
1181 const char *name = "";
1182 char ab[20];
1183 bfd_boolean stringp;
1184 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1185
1186 (*swap_dyn_in) (abfd, extdyn, &dyn);
1187
1188 if (dyn.d_tag == DT_NULL)
1189 break;
1190
1191 stringp = FALSE;
1192 switch (dyn.d_tag)
1193 {
1194 default:
1195 if (bed->elf_backend_get_target_dtag)
1196 name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
1197
1198 if (!strcmp (name, ""))
1199 {
1200 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
1201 name = ab;
1202 }
1203 break;
1204
1205 case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
1206 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1207 case DT_PLTGOT: name = "PLTGOT"; break;
1208 case DT_HASH: name = "HASH"; break;
1209 case DT_STRTAB: name = "STRTAB"; break;
1210 case DT_SYMTAB: name = "SYMTAB"; break;
1211 case DT_RELA: name = "RELA"; break;
1212 case DT_RELASZ: name = "RELASZ"; break;
1213 case DT_RELAENT: name = "RELAENT"; break;
1214 case DT_STRSZ: name = "STRSZ"; break;
1215 case DT_SYMENT: name = "SYMENT"; break;
1216 case DT_INIT: name = "INIT"; break;
1217 case DT_FINI: name = "FINI"; break;
1218 case DT_SONAME: name = "SONAME"; stringp = TRUE; break;
1219 case DT_RPATH: name = "RPATH"; stringp = TRUE; break;
1220 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1221 case DT_REL: name = "REL"; break;
1222 case DT_RELSZ: name = "RELSZ"; break;
1223 case DT_RELENT: name = "RELENT"; break;
1224 case DT_PLTREL: name = "PLTREL"; break;
1225 case DT_DEBUG: name = "DEBUG"; break;
1226 case DT_TEXTREL: name = "TEXTREL"; break;
1227 case DT_JMPREL: name = "JMPREL"; break;
1228 case DT_BIND_NOW: name = "BIND_NOW"; break;
1229 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1230 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1231 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1232 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1233 case DT_RUNPATH: name = "RUNPATH"; stringp = TRUE; break;
1234 case DT_FLAGS: name = "FLAGS"; break;
1235 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1236 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
1237 case DT_CHECKSUM: name = "CHECKSUM"; break;
1238 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1239 case DT_MOVEENT: name = "MOVEENT"; break;
1240 case DT_MOVESZ: name = "MOVESZ"; break;
1241 case DT_FEATURE: name = "FEATURE"; break;
1242 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1243 case DT_SYMINSZ: name = "SYMINSZ"; break;
1244 case DT_SYMINENT: name = "SYMINENT"; break;
1245 case DT_CONFIG: name = "CONFIG"; stringp = TRUE; break;
1246 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = TRUE; break;
1247 case DT_AUDIT: name = "AUDIT"; stringp = TRUE; break;
1248 case DT_PLTPAD: name = "PLTPAD"; break;
1249 case DT_MOVETAB: name = "MOVETAB"; break;
1250 case DT_SYMINFO: name = "SYMINFO"; break;
1251 case DT_RELACOUNT: name = "RELACOUNT"; break;
1252 case DT_RELCOUNT: name = "RELCOUNT"; break;
1253 case DT_FLAGS_1: name = "FLAGS_1"; break;
1254 case DT_VERSYM: name = "VERSYM"; break;
1255 case DT_VERDEF: name = "VERDEF"; break;
1256 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1257 case DT_VERNEED: name = "VERNEED"; break;
1258 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
1259 case DT_AUXILIARY: name = "AUXILIARY"; stringp = TRUE; break;
1260 case DT_USED: name = "USED"; break;
1261 case DT_FILTER: name = "FILTER"; stringp = TRUE; break;
1262 case DT_GNU_HASH: name = "GNU_HASH"; break;
1263 }
1264
1265 fprintf (f, " %-20s ", name);
1266 if (! stringp)
1267 {
1268 fprintf (f, "0x");
1269 bfd_fprintf_vma (abfd, f, dyn.d_un.d_val);
1270 }
1271 else
1272 {
1273 const char *string;
1274 unsigned int tagv = dyn.d_un.d_val;
1275
1276 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
1277 if (string == NULL)
1278 goto error_return;
1279 fprintf (f, "%s", string);
1280 }
1281 fprintf (f, "\n");
1282 }
1283
1284 free (dynbuf);
1285 dynbuf = NULL;
1286 }
1287
1288 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1289 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1290 {
1291 if (! _bfd_elf_slurp_version_tables (abfd, FALSE))
1292 return FALSE;
1293 }
1294
1295 if (elf_dynverdef (abfd) != 0)
1296 {
1297 Elf_Internal_Verdef *t;
1298
1299 fprintf (f, _("\nVersion definitions:\n"));
1300 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1301 {
1302 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1303 t->vd_flags, t->vd_hash,
1304 t->vd_nodename ? t->vd_nodename : "<corrupt>");
1305 if (t->vd_auxptr != NULL && t->vd_auxptr->vda_nextptr != NULL)
1306 {
1307 Elf_Internal_Verdaux *a;
1308
1309 fprintf (f, "\t");
1310 for (a = t->vd_auxptr->vda_nextptr;
1311 a != NULL;
1312 a = a->vda_nextptr)
1313 fprintf (f, "%s ",
1314 a->vda_nodename ? a->vda_nodename : "<corrupt>");
1315 fprintf (f, "\n");
1316 }
1317 }
1318 }
1319
1320 if (elf_dynverref (abfd) != 0)
1321 {
1322 Elf_Internal_Verneed *t;
1323
1324 fprintf (f, _("\nVersion References:\n"));
1325 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1326 {
1327 Elf_Internal_Vernaux *a;
1328
1329 fprintf (f, _(" required from %s:\n"),
1330 t->vn_filename ? t->vn_filename : "<corrupt>");
1331 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1332 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1333 a->vna_flags, a->vna_other,
1334 a->vna_nodename ? a->vna_nodename : "<corrupt>");
1335 }
1336 }
1337
1338 return TRUE;
1339
1340 error_return:
1341 if (dynbuf != NULL)
1342 free (dynbuf);
1343 return FALSE;
1344 }
1345
1346 /* Display ELF-specific fields of a symbol. */
1347
1348 void
1349 bfd_elf_print_symbol (bfd *abfd,
1350 void *filep,
1351 asymbol *symbol,
1352 bfd_print_symbol_type how)
1353 {
1354 FILE *file = filep;
1355 switch (how)
1356 {
1357 case bfd_print_symbol_name:
1358 fprintf (file, "%s", symbol->name);
1359 break;
1360 case bfd_print_symbol_more:
1361 fprintf (file, "elf ");
1362 bfd_fprintf_vma (abfd, file, symbol->value);
1363 fprintf (file, " %lx", (unsigned long) symbol->flags);
1364 break;
1365 case bfd_print_symbol_all:
1366 {
1367 const char *section_name;
1368 const char *name = NULL;
1369 const struct elf_backend_data *bed;
1370 unsigned char st_other;
1371 bfd_vma val;
1372
1373 section_name = symbol->section ? symbol->section->name : "(*none*)";
1374
1375 bed = get_elf_backend_data (abfd);
1376 if (bed->elf_backend_print_symbol_all)
1377 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
1378
1379 if (name == NULL)
1380 {
1381 name = symbol->name;
1382 bfd_print_symbol_vandf (abfd, file, symbol);
1383 }
1384
1385 fprintf (file, " %s\t", section_name);
1386 /* Print the "other" value for a symbol. For common symbols,
1387 we've already printed the size; now print the alignment.
1388 For other symbols, we have no specified alignment, and
1389 we've printed the address; now print the size. */
1390 if (symbol->section && bfd_is_com_section (symbol->section))
1391 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1392 else
1393 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1394 bfd_fprintf_vma (abfd, file, val);
1395
1396 /* If we have version information, print it. */
1397 if (elf_tdata (abfd)->dynversym_section != 0
1398 && (elf_tdata (abfd)->dynverdef_section != 0
1399 || elf_tdata (abfd)->dynverref_section != 0))
1400 {
1401 unsigned int vernum;
1402 const char *version_string;
1403
1404 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
1405
1406 if (vernum == 0)
1407 version_string = "";
1408 else if (vernum == 1)
1409 version_string = "Base";
1410 else if (vernum <= elf_tdata (abfd)->cverdefs)
1411 version_string =
1412 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1413 else
1414 {
1415 Elf_Internal_Verneed *t;
1416
1417 version_string = "";
1418 for (t = elf_tdata (abfd)->verref;
1419 t != NULL;
1420 t = t->vn_nextref)
1421 {
1422 Elf_Internal_Vernaux *a;
1423
1424 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1425 {
1426 if (a->vna_other == vernum)
1427 {
1428 version_string = a->vna_nodename;
1429 break;
1430 }
1431 }
1432 }
1433 }
1434
1435 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
1436 fprintf (file, " %-11s", version_string);
1437 else
1438 {
1439 int i;
1440
1441 fprintf (file, " (%s)", version_string);
1442 for (i = 10 - strlen (version_string); i > 0; --i)
1443 putc (' ', file);
1444 }
1445 }
1446
1447 /* If the st_other field is not zero, print it. */
1448 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
1449
1450 switch (st_other)
1451 {
1452 case 0: break;
1453 case STV_INTERNAL: fprintf (file, " .internal"); break;
1454 case STV_HIDDEN: fprintf (file, " .hidden"); break;
1455 case STV_PROTECTED: fprintf (file, " .protected"); break;
1456 default:
1457 /* Some other non-defined flags are also present, so print
1458 everything hex. */
1459 fprintf (file, " 0x%02x", (unsigned int) st_other);
1460 }
1461
1462 fprintf (file, " %s", name);
1463 }
1464 break;
1465 }
1466 }
1467
1468 /* Allocate an ELF string table--force the first byte to be zero. */
1469
1470 struct bfd_strtab_hash *
1471 _bfd_elf_stringtab_init (void)
1472 {
1473 struct bfd_strtab_hash *ret;
1474
1475 ret = _bfd_stringtab_init ();
1476 if (ret != NULL)
1477 {
1478 bfd_size_type loc;
1479
1480 loc = _bfd_stringtab_add (ret, "", TRUE, FALSE);
1481 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1482 if (loc == (bfd_size_type) -1)
1483 {
1484 _bfd_stringtab_free (ret);
1485 ret = NULL;
1486 }
1487 }
1488 return ret;
1489 }
1490
1491 /* ELF .o/exec file reading */
1492
1493 /* Create a new bfd section from an ELF section header. */
1494
1495 bfd_boolean
1496 bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
1497 {
1498 Elf_Internal_Shdr *hdr;
1499 Elf_Internal_Ehdr *ehdr;
1500 const struct elf_backend_data *bed;
1501 const char *name;
1502
1503 if (shindex >= elf_numsections (abfd))
1504 return FALSE;
1505
1506 hdr = elf_elfsections (abfd)[shindex];
1507 ehdr = elf_elfheader (abfd);
1508 name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx,
1509 hdr->sh_name);
1510 if (name == NULL)
1511 return FALSE;
1512
1513 bed = get_elf_backend_data (abfd);
1514 switch (hdr->sh_type)
1515 {
1516 case SHT_NULL:
1517 /* Inactive section. Throw it away. */
1518 return TRUE;
1519
1520 case SHT_PROGBITS: /* Normal section with contents. */
1521 case SHT_NOBITS: /* .bss section. */
1522 case SHT_HASH: /* .hash section. */
1523 case SHT_NOTE: /* .note section. */
1524 case SHT_INIT_ARRAY: /* .init_array section. */
1525 case SHT_FINI_ARRAY: /* .fini_array section. */
1526 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
1527 case SHT_GNU_LIBLIST: /* .gnu.liblist section. */
1528 case SHT_GNU_HASH: /* .gnu.hash section. */
1529 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1530
1531 case SHT_DYNAMIC: /* Dynamic linking information. */
1532 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1533 return FALSE;
1534 if (hdr->sh_link > elf_numsections (abfd)
1535 || elf_elfsections (abfd)[hdr->sh_link] == NULL)
1536 return FALSE;
1537 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB)
1538 {
1539 Elf_Internal_Shdr *dynsymhdr;
1540
1541 /* The shared libraries distributed with hpux11 have a bogus
1542 sh_link field for the ".dynamic" section. Find the
1543 string table for the ".dynsym" section instead. */
1544 if (elf_dynsymtab (abfd) != 0)
1545 {
1546 dynsymhdr = elf_elfsections (abfd)[elf_dynsymtab (abfd)];
1547 hdr->sh_link = dynsymhdr->sh_link;
1548 }
1549 else
1550 {
1551 unsigned int i, num_sec;
1552
1553 num_sec = elf_numsections (abfd);
1554 for (i = 1; i < num_sec; i++)
1555 {
1556 dynsymhdr = elf_elfsections (abfd)[i];
1557 if (dynsymhdr->sh_type == SHT_DYNSYM)
1558 {
1559 hdr->sh_link = dynsymhdr->sh_link;
1560 break;
1561 }
1562 }
1563 }
1564 }
1565 break;
1566
1567 case SHT_SYMTAB: /* A symbol table */
1568 if (elf_onesymtab (abfd) == shindex)
1569 return TRUE;
1570
1571 if (hdr->sh_entsize != bed->s->sizeof_sym)
1572 return FALSE;
1573 if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size)
1574 return FALSE;
1575 BFD_ASSERT (elf_onesymtab (abfd) == 0);
1576 elf_onesymtab (abfd) = shindex;
1577 elf_tdata (abfd)->symtab_hdr = *hdr;
1578 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1579 abfd->flags |= HAS_SYMS;
1580
1581 /* Sometimes a shared object will map in the symbol table. If
1582 SHF_ALLOC is set, and this is a shared object, then we also
1583 treat this section as a BFD section. We can not base the
1584 decision purely on SHF_ALLOC, because that flag is sometimes
1585 set in a relocatable object file, which would confuse the
1586 linker. */
1587 if ((hdr->sh_flags & SHF_ALLOC) != 0
1588 && (abfd->flags & DYNAMIC) != 0
1589 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1590 shindex))
1591 return FALSE;
1592
1593 /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we
1594 can't read symbols without that section loaded as well. It
1595 is most likely specified by the next section header. */
1596 if (elf_elfsections (abfd)[elf_symtab_shndx (abfd)]->sh_link != shindex)
1597 {
1598 unsigned int i, num_sec;
1599
1600 num_sec = elf_numsections (abfd);
1601 for (i = shindex + 1; i < num_sec; i++)
1602 {
1603 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1604 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1605 && hdr2->sh_link == shindex)
1606 break;
1607 }
1608 if (i == num_sec)
1609 for (i = 1; i < shindex; i++)
1610 {
1611 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1612 if (hdr2->sh_type == SHT_SYMTAB_SHNDX
1613 && hdr2->sh_link == shindex)
1614 break;
1615 }
1616 if (i != shindex)
1617 return bfd_section_from_shdr (abfd, i);
1618 }
1619 return TRUE;
1620
1621 case SHT_DYNSYM: /* A dynamic symbol table */
1622 if (elf_dynsymtab (abfd) == shindex)
1623 return TRUE;
1624
1625 if (hdr->sh_entsize != bed->s->sizeof_sym)
1626 return FALSE;
1627 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1628 elf_dynsymtab (abfd) = shindex;
1629 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1630 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1631 abfd->flags |= HAS_SYMS;
1632
1633 /* Besides being a symbol table, we also treat this as a regular
1634 section, so that objcopy can handle it. */
1635 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1636
1637 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */
1638 if (elf_symtab_shndx (abfd) == shindex)
1639 return TRUE;
1640
1641 BFD_ASSERT (elf_symtab_shndx (abfd) == 0);
1642 elf_symtab_shndx (abfd) = shindex;
1643 elf_tdata (abfd)->symtab_shndx_hdr = *hdr;
1644 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_shndx_hdr;
1645 return TRUE;
1646
1647 case SHT_STRTAB: /* A string table */
1648 if (hdr->bfd_section != NULL)
1649 return TRUE;
1650 if (ehdr->e_shstrndx == shindex)
1651 {
1652 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1653 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1654 return TRUE;
1655 }
1656 if (elf_elfsections (abfd)[elf_onesymtab (abfd)]->sh_link == shindex)
1657 {
1658 symtab_strtab:
1659 elf_tdata (abfd)->strtab_hdr = *hdr;
1660 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->strtab_hdr;
1661 return TRUE;
1662 }
1663 if (elf_elfsections (abfd)[elf_dynsymtab (abfd)]->sh_link == shindex)
1664 {
1665 dynsymtab_strtab:
1666 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1667 hdr = &elf_tdata (abfd)->dynstrtab_hdr;
1668 elf_elfsections (abfd)[shindex] = hdr;
1669 /* We also treat this as a regular section, so that objcopy
1670 can handle it. */
1671 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1672 shindex);
1673 }
1674
1675 /* If the string table isn't one of the above, then treat it as a
1676 regular section. We need to scan all the headers to be sure,
1677 just in case this strtab section appeared before the above. */
1678 if (elf_onesymtab (abfd) == 0 || elf_dynsymtab (abfd) == 0)
1679 {
1680 unsigned int i, num_sec;
1681
1682 num_sec = elf_numsections (abfd);
1683 for (i = 1; i < num_sec; i++)
1684 {
1685 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1686 if (hdr2->sh_link == shindex)
1687 {
1688 /* Prevent endless recursion on broken objects. */
1689 if (i == shindex)
1690 return FALSE;
1691 if (! bfd_section_from_shdr (abfd, i))
1692 return FALSE;
1693 if (elf_onesymtab (abfd) == i)
1694 goto symtab_strtab;
1695 if (elf_dynsymtab (abfd) == i)
1696 goto dynsymtab_strtab;
1697 }
1698 }
1699 }
1700 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1701
1702 case SHT_REL:
1703 case SHT_RELA:
1704 /* *These* do a lot of work -- but build no sections! */
1705 {
1706 asection *target_sect;
1707 Elf_Internal_Shdr *hdr2;
1708 unsigned int num_sec = elf_numsections (abfd);
1709
1710 if (hdr->sh_entsize
1711 != (bfd_size_type) (hdr->sh_type == SHT_REL
1712 ? bed->s->sizeof_rel : bed->s->sizeof_rela))
1713 return FALSE;
1714
1715 /* Check for a bogus link to avoid crashing. */
1716 if (hdr->sh_link >= num_sec)
1717 {
1718 ((*_bfd_error_handler)
1719 (_("%B: invalid link %lu for reloc section %s (index %u)"),
1720 abfd, hdr->sh_link, name, shindex));
1721 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1722 shindex);
1723 }
1724
1725 /* For some incomprehensible reason Oracle distributes
1726 libraries for Solaris in which some of the objects have
1727 bogus sh_link fields. It would be nice if we could just
1728 reject them, but, unfortunately, some people need to use
1729 them. We scan through the section headers; if we find only
1730 one suitable symbol table, we clobber the sh_link to point
1731 to it. I hope this doesn't break anything.
1732
1733 Don't do it on executable nor shared library. */
1734 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0
1735 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1736 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1737 {
1738 unsigned int scan;
1739 int found;
1740
1741 found = 0;
1742 for (scan = 1; scan < num_sec; scan++)
1743 {
1744 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1745 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1746 {
1747 if (found != 0)
1748 {
1749 found = 0;
1750 break;
1751 }
1752 found = scan;
1753 }
1754 }
1755 if (found != 0)
1756 hdr->sh_link = found;
1757 }
1758
1759 /* Get the symbol table. */
1760 if ((elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1761 || elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_DYNSYM)
1762 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1763 return FALSE;
1764
1765 /* If this reloc section does not use the main symbol table we
1766 don't treat it as a reloc section. BFD can't adequately
1767 represent such a section, so at least for now, we don't
1768 try. We just present it as a normal section. We also
1769 can't use it as a reloc section if it points to the null
1770 section, an invalid section, another reloc section, or its
1771 sh_link points to the null section. */
1772 if (hdr->sh_link != elf_onesymtab (abfd)
1773 || hdr->sh_link == SHN_UNDEF
1774 || hdr->sh_info == SHN_UNDEF
1775 || hdr->sh_info >= num_sec
1776 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL
1777 || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA)
1778 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1779 shindex);
1780
1781 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1782 return FALSE;
1783 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1784 if (target_sect == NULL)
1785 return FALSE;
1786
1787 if ((target_sect->flags & SEC_RELOC) == 0
1788 || target_sect->reloc_count == 0)
1789 hdr2 = &elf_section_data (target_sect)->rel_hdr;
1790 else
1791 {
1792 bfd_size_type amt;
1793 BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1794 amt = sizeof (*hdr2);
1795 hdr2 = bfd_alloc (abfd, amt);
1796 if (hdr2 == NULL)
1797 return FALSE;
1798 elf_section_data (target_sect)->rel_hdr2 = hdr2;
1799 }
1800 *hdr2 = *hdr;
1801 elf_elfsections (abfd)[shindex] = hdr2;
1802 target_sect->reloc_count += NUM_SHDR_ENTRIES (hdr);
1803 target_sect->flags |= SEC_RELOC;
1804 target_sect->relocation = NULL;
1805 target_sect->rel_filepos = hdr->sh_offset;
1806 /* In the section to which the relocations apply, mark whether
1807 its relocations are of the REL or RELA variety. */
1808 if (hdr->sh_size != 0)
1809 target_sect->use_rela_p = hdr->sh_type == SHT_RELA;
1810 abfd->flags |= HAS_RELOC;
1811 return TRUE;
1812 }
1813
1814 case SHT_GNU_verdef:
1815 elf_dynverdef (abfd) = shindex;
1816 elf_tdata (abfd)->dynverdef_hdr = *hdr;
1817 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1818
1819 case SHT_GNU_versym:
1820 if (hdr->sh_entsize != sizeof (Elf_External_Versym))
1821 return FALSE;
1822 elf_dynversym (abfd) = shindex;
1823 elf_tdata (abfd)->dynversym_hdr = *hdr;
1824 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1825
1826 case SHT_GNU_verneed:
1827 elf_dynverref (abfd) = shindex;
1828 elf_tdata (abfd)->dynverref_hdr = *hdr;
1829 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1830
1831 case SHT_SHLIB:
1832 return TRUE;
1833
1834 case SHT_GROUP:
1835 if (! IS_VALID_GROUP_SECTION_HEADER (hdr))
1836 return FALSE;
1837 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1838 return FALSE;
1839 if (hdr->contents != NULL)
1840 {
1841 Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents;
1842 unsigned int n_elt = hdr->sh_size / GRP_ENTRY_SIZE;
1843 asection *s;
1844
1845 if (idx->flags & GRP_COMDAT)
1846 hdr->bfd_section->flags
1847 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1848
1849 /* We try to keep the same section order as it comes in. */
1850 idx += n_elt;
1851 while (--n_elt != 0)
1852 {
1853 --idx;
1854
1855 if (idx->shdr != NULL
1856 && (s = idx->shdr->bfd_section) != NULL
1857 && elf_next_in_group (s) != NULL)
1858 {
1859 elf_next_in_group (hdr->bfd_section) = s;
1860 break;
1861 }
1862 }
1863 }
1864 break;
1865
1866 default:
1867 /* Possibly an attributes section. */
1868 if (hdr->sh_type == SHT_GNU_ATTRIBUTES
1869 || hdr->sh_type == bed->obj_attrs_section_type)
1870 {
1871 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
1872 return FALSE;
1873 _bfd_elf_parse_attributes (abfd, hdr);
1874 return TRUE;
1875 }
1876
1877 /* Check for any processor-specific section types. */
1878 if (bed->elf_backend_section_from_shdr (abfd, hdr, name, shindex))
1879 return TRUE;
1880
1881 if (hdr->sh_type >= SHT_LOUSER && hdr->sh_type <= SHT_HIUSER)
1882 {
1883 if ((hdr->sh_flags & SHF_ALLOC) != 0)
1884 /* FIXME: How to properly handle allocated section reserved
1885 for applications? */
1886 (*_bfd_error_handler)
1887 (_("%B: don't know how to handle allocated, application "
1888 "specific section `%s' [0x%8x]"),
1889 abfd, name, hdr->sh_type);
1890 else
1891 /* Allow sections reserved for applications. */
1892 return _bfd_elf_make_section_from_shdr (abfd, hdr, name,
1893 shindex);
1894 }
1895 else if (hdr->sh_type >= SHT_LOPROC
1896 && hdr->sh_type <= SHT_HIPROC)
1897 /* FIXME: We should handle this section. */
1898 (*_bfd_error_handler)
1899 (_("%B: don't know how to handle processor specific section "
1900 "`%s' [0x%8x]"),
1901 abfd, name, hdr->sh_type);
1902 else if (hdr->sh_type >= SHT_LOOS && hdr->sh_type <= SHT_HIOS)
1903 {
1904 /* Unrecognised OS-specific sections. */
1905 if ((hdr->sh_flags & SHF_OS_NONCONFORMING) != 0)
1906 /* SHF_OS_NONCONFORMING indicates that special knowledge is
1907 required to correctly process the section and the file should
1908 be rejected with an error message. */
1909 (*_bfd_error_handler)
1910 (_("%B: don't know how to handle OS specific section "
1911 "`%s' [0x%8x]"),
1912 abfd, name, hdr->sh_type);
1913 else
1914 /* Otherwise it should be processed. */
1915 return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
1916 }
1917 else
1918 /* FIXME: We should handle this section. */
1919 (*_bfd_error_handler)
1920 (_("%B: don't know how to handle section `%s' [0x%8x]"),
1921 abfd, name, hdr->sh_type);
1922
1923 return FALSE;
1924 }
1925
1926 return TRUE;
1927 }
1928
1929 /* Return the local symbol specified by ABFD, R_SYMNDX. */
1930
1931 Elf_Internal_Sym *
1932 bfd_sym_from_r_symndx (struct sym_cache *cache,
1933 bfd *abfd,
1934 unsigned long r_symndx)
1935 {
1936 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
1937
1938 if (cache->abfd != abfd || cache->indx[ent] != r_symndx)
1939 {
1940 Elf_Internal_Shdr *symtab_hdr;
1941 unsigned char esym[sizeof (Elf64_External_Sym)];
1942 Elf_External_Sym_Shndx eshndx;
1943
1944 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1945 if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx,
1946 &cache->sym[ent], esym, &eshndx) == NULL)
1947 return NULL;
1948
1949 if (cache->abfd != abfd)
1950 {
1951 memset (cache->indx, -1, sizeof (cache->indx));
1952 cache->abfd = abfd;
1953 }
1954 cache->indx[ent] = r_symndx;
1955 }
1956
1957 return &cache->sym[ent];
1958 }
1959
1960 /* Given an ELF section number, retrieve the corresponding BFD
1961 section. */
1962
1963 asection *
1964 bfd_section_from_elf_index (bfd *abfd, unsigned int index)
1965 {
1966 if (index >= elf_numsections (abfd))
1967 return NULL;
1968 return elf_elfsections (abfd)[index]->bfd_section;
1969 }
1970
1971 static const struct bfd_elf_special_section special_sections_b[] =
1972 {
1973 { STRING_COMMA_LEN (".bss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
1974 { NULL, 0, 0, 0, 0 }
1975 };
1976
1977 static const struct bfd_elf_special_section special_sections_c[] =
1978 {
1979 { STRING_COMMA_LEN (".comment"), 0, SHT_PROGBITS, 0 },
1980 { NULL, 0, 0, 0, 0 }
1981 };
1982
1983 static const struct bfd_elf_special_section special_sections_d[] =
1984 {
1985 { STRING_COMMA_LEN (".data"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1986 { STRING_COMMA_LEN (".data1"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
1987 { STRING_COMMA_LEN (".debug"), 0, SHT_PROGBITS, 0 },
1988 { STRING_COMMA_LEN (".debug_line"), 0, SHT_PROGBITS, 0 },
1989 { STRING_COMMA_LEN (".debug_info"), 0, SHT_PROGBITS, 0 },
1990 { STRING_COMMA_LEN (".debug_abbrev"), 0, SHT_PROGBITS, 0 },
1991 { STRING_COMMA_LEN (".debug_aranges"), 0, SHT_PROGBITS, 0 },
1992 { STRING_COMMA_LEN (".dynamic"), 0, SHT_DYNAMIC, SHF_ALLOC },
1993 { STRING_COMMA_LEN (".dynstr"), 0, SHT_STRTAB, SHF_ALLOC },
1994 { STRING_COMMA_LEN (".dynsym"), 0, SHT_DYNSYM, SHF_ALLOC },
1995 { NULL, 0, 0, 0, 0 }
1996 };
1997
1998 static const struct bfd_elf_special_section special_sections_f[] =
1999 {
2000 { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2001 { STRING_COMMA_LEN (".fini_array"), 0, SHT_FINI_ARRAY, SHF_ALLOC + SHF_WRITE },
2002 { NULL, 0, 0, 0, 0 }
2003 };
2004
2005 static const struct bfd_elf_special_section special_sections_g[] =
2006 {
2007 { STRING_COMMA_LEN (".gnu.linkonce.b"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
2008 { STRING_COMMA_LEN (".got"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
2009 { STRING_COMMA_LEN (".gnu.version"), 0, SHT_GNU_versym, 0 },
2010 { STRING_COMMA_LEN (".gnu.version_d"), 0, SHT_GNU_verdef, 0 },
2011 { STRING_COMMA_LEN (".gnu.version_r"), 0, SHT_GNU_verneed, 0 },
2012 { STRING_COMMA_LEN (".gnu.liblist"), 0, SHT_GNU_LIBLIST, SHF_ALLOC },
2013 { STRING_COMMA_LEN (".gnu.conflict"), 0, SHT_RELA, SHF_ALLOC },
2014 { STRING_COMMA_LEN (".gnu.hash"), 0, SHT_GNU_HASH, SHF_ALLOC },
2015 { NULL, 0, 0, 0, 0 }
2016 };
2017
2018 static const struct bfd_elf_special_section special_sections_h[] =
2019 {
2020 { STRING_COMMA_LEN (".hash"), 0, SHT_HASH, SHF_ALLOC },
2021 { NULL, 0, 0, 0, 0 }
2022 };
2023
2024 static const struct bfd_elf_special_section special_sections_i[] =
2025 {
2026 { STRING_COMMA_LEN (".init"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2027 { STRING_COMMA_LEN (".init_array"), 0, SHT_INIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2028 { STRING_COMMA_LEN (".interp"), 0, SHT_PROGBITS, 0 },
2029 { NULL, 0, 0, 0, 0 }
2030 };
2031
2032 static const struct bfd_elf_special_section special_sections_l[] =
2033 {
2034 { STRING_COMMA_LEN (".line"), 0, SHT_PROGBITS, 0 },
2035 { NULL, 0, 0, 0, 0 }
2036 };
2037
2038 static const struct bfd_elf_special_section special_sections_n[] =
2039 {
2040 { STRING_COMMA_LEN (".note.GNU-stack"), 0, SHT_PROGBITS, 0 },
2041 { STRING_COMMA_LEN (".note"), -1, SHT_NOTE, 0 },
2042 { NULL, 0, 0, 0, 0 }
2043 };
2044
2045 static const struct bfd_elf_special_section special_sections_p[] =
2046 {
2047 { STRING_COMMA_LEN (".preinit_array"), 0, SHT_PREINIT_ARRAY, SHF_ALLOC + SHF_WRITE },
2048 { STRING_COMMA_LEN (".plt"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2049 { NULL, 0, 0, 0, 0 }
2050 };
2051
2052 static const struct bfd_elf_special_section special_sections_r[] =
2053 {
2054 { STRING_COMMA_LEN (".rodata"), -2, SHT_PROGBITS, SHF_ALLOC },
2055 { STRING_COMMA_LEN (".rodata1"), 0, SHT_PROGBITS, SHF_ALLOC },
2056 { STRING_COMMA_LEN (".rela"), -1, SHT_RELA, 0 },
2057 { STRING_COMMA_LEN (".rel"), -1, SHT_REL, 0 },
2058 { NULL, 0, 0, 0, 0 }
2059 };
2060
2061 static const struct bfd_elf_special_section special_sections_s[] =
2062 {
2063 { STRING_COMMA_LEN (".shstrtab"), 0, SHT_STRTAB, 0 },
2064 { STRING_COMMA_LEN (".strtab"), 0, SHT_STRTAB, 0 },
2065 { STRING_COMMA_LEN (".symtab"), 0, SHT_SYMTAB, 0 },
2066 /* See struct bfd_elf_special_section declaration for the semantics of
2067 this special case where .prefix_length != strlen (.prefix). */
2068 { ".stabstr", 5, 3, SHT_STRTAB, 0 },
2069 { NULL, 0, 0, 0, 0 }
2070 };
2071
2072 static const struct bfd_elf_special_section special_sections_t[] =
2073 {
2074 { STRING_COMMA_LEN (".text"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR },
2075 { STRING_COMMA_LEN (".tbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2076 { STRING_COMMA_LEN (".tdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_TLS },
2077 { NULL, 0, 0, 0, 0 }
2078 };
2079
2080 static const struct bfd_elf_special_section special_sections_z[] =
2081 {
2082 { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 },
2083 { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 },
2084 { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 },
2085 { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 },
2086 { NULL, 0, 0, 0, 0 }
2087 };
2088
2089 static const struct bfd_elf_special_section *special_sections[] =
2090 {
2091 special_sections_b, /* 'b' */
2092 special_sections_c, /* 'c' */
2093 special_sections_d, /* 'd' */
2094 NULL, /* 'e' */
2095 special_sections_f, /* 'f' */
2096 special_sections_g, /* 'g' */
2097 special_sections_h, /* 'h' */
2098 special_sections_i, /* 'i' */
2099 NULL, /* 'j' */
2100 NULL, /* 'k' */
2101 special_sections_l, /* 'l' */
2102 NULL, /* 'm' */
2103 special_sections_n, /* 'n' */
2104 NULL, /* 'o' */
2105 special_sections_p, /* 'p' */
2106 NULL, /* 'q' */
2107 special_sections_r, /* 'r' */
2108 special_sections_s, /* 's' */
2109 special_sections_t, /* 't' */
2110 NULL, /* 'u' */
2111 NULL, /* 'v' */
2112 NULL, /* 'w' */
2113 NULL, /* 'x' */
2114 NULL, /* 'y' */
2115 special_sections_z /* 'z' */
2116 };
2117
2118 const struct bfd_elf_special_section *
2119 _bfd_elf_get_special_section (const char *name,
2120 const struct bfd_elf_special_section *spec,
2121 unsigned int rela)
2122 {
2123 int i;
2124 int len;
2125
2126 len = strlen (name);
2127
2128 for (i = 0; spec[i].prefix != NULL; i++)
2129 {
2130 int suffix_len;
2131 int prefix_len = spec[i].prefix_length;
2132
2133 if (len < prefix_len)
2134 continue;
2135 if (memcmp (name, spec[i].prefix, prefix_len) != 0)
2136 continue;
2137
2138 suffix_len = spec[i].suffix_length;
2139 if (suffix_len <= 0)
2140 {
2141 if (name[prefix_len] != 0)
2142 {
2143 if (suffix_len == 0)
2144 continue;
2145 if (name[prefix_len] != '.'
2146 && (suffix_len == -2
2147 || (rela && spec[i].type == SHT_REL)))
2148 continue;
2149 }
2150 }
2151 else
2152 {
2153 if (len < prefix_len + suffix_len)
2154 continue;
2155 if (memcmp (name + len - suffix_len,
2156 spec[i].prefix + prefix_len,
2157 suffix_len) != 0)
2158 continue;
2159 }
2160 return &spec[i];
2161 }
2162
2163 return NULL;
2164 }
2165
2166 const struct bfd_elf_special_section *
2167 _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec)
2168 {
2169 int i;
2170 const struct bfd_elf_special_section *spec;
2171 const struct elf_backend_data *bed;
2172
2173 /* See if this is one of the special sections. */
2174 if (sec->name == NULL)
2175 return NULL;
2176
2177 bed = get_elf_backend_data (abfd);
2178 spec = bed->special_sections;
2179 if (spec)
2180 {
2181 spec = _bfd_elf_get_special_section (sec->name,
2182 bed->special_sections,
2183 sec->use_rela_p);
2184 if (spec != NULL)
2185 return spec;
2186 }
2187
2188 if (sec->name[0] != '.')
2189 return NULL;
2190
2191 i = sec->name[1] - 'b';
2192 if (i < 0 || i > 'z' - 'b')
2193 return NULL;
2194
2195 spec = special_sections[i];
2196
2197 if (spec == NULL)
2198 return NULL;
2199
2200 return _bfd_elf_get_special_section (sec->name, spec, sec->use_rela_p);
2201 }
2202
2203 bfd_boolean
2204 _bfd_elf_new_section_hook (bfd *abfd, asection *sec)
2205 {
2206 struct bfd_elf_section_data *sdata;
2207 const struct elf_backend_data *bed;
2208 const struct bfd_elf_special_section *ssect;
2209
2210 sdata = (struct bfd_elf_section_data *) sec->used_by_bfd;
2211 if (sdata == NULL)
2212 {
2213 sdata = bfd_zalloc (abfd, sizeof (*sdata));
2214 if (sdata == NULL)
2215 return FALSE;
2216 sec->used_by_bfd = sdata;
2217 }
2218
2219 /* Indicate whether or not this section should use RELA relocations. */
2220 bed = get_elf_backend_data (abfd);
2221 sec->use_rela_p = bed->default_use_rela_p;
2222
2223 /* When we read a file, we don't need to set ELF section type and
2224 flags. They will be overridden in _bfd_elf_make_section_from_shdr
2225 anyway. We will set ELF section type and flags for all linker
2226 created sections. If user specifies BFD section flags, we will
2227 set ELF section type and flags based on BFD section flags in
2228 elf_fake_sections. */
2229 if ((!sec->flags && abfd->direction != read_direction)
2230 || (sec->flags & SEC_LINKER_CREATED) != 0)
2231 {
2232 ssect = (*bed->get_sec_type_attr) (abfd, sec);
2233 if (ssect != NULL)
2234 {
2235 elf_section_type (sec) = ssect->type;
2236 elf_section_flags (sec) = ssect->attr;
2237 }
2238 }
2239
2240 return _bfd_generic_new_section_hook (abfd, sec);
2241 }
2242
2243 /* Create a new bfd section from an ELF program header.
2244
2245 Since program segments have no names, we generate a synthetic name
2246 of the form segment<NUM>, where NUM is generally the index in the
2247 program header table. For segments that are split (see below) we
2248 generate the names segment<NUM>a and segment<NUM>b.
2249
2250 Note that some program segments may have a file size that is different than
2251 (less than) the memory size. All this means is that at execution the
2252 system must allocate the amount of memory specified by the memory size,
2253 but only initialize it with the first "file size" bytes read from the
2254 file. This would occur for example, with program segments consisting
2255 of combined data+bss.
2256
2257 To handle the above situation, this routine generates TWO bfd sections
2258 for the single program segment. The first has the length specified by
2259 the file size of the segment, and the second has the length specified
2260 by the difference between the two sizes. In effect, the segment is split
2261 into its initialized and uninitialized parts.
2262
2263 */
2264
2265 bfd_boolean
2266 _bfd_elf_make_section_from_phdr (bfd *abfd,
2267 Elf_Internal_Phdr *hdr,
2268 int index,
2269 const char *typename)
2270 {
2271 asection *newsect;
2272 char *name;
2273 char namebuf[64];
2274 size_t len;
2275 int split;
2276
2277 split = ((hdr->p_memsz > 0)
2278 && (hdr->p_filesz > 0)
2279 && (hdr->p_memsz > hdr->p_filesz));
2280
2281 if (hdr->p_filesz > 0)
2282 {
2283 sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
2284 len = strlen (namebuf) + 1;
2285 name = bfd_alloc (abfd, len);
2286 if (!name)
2287 return FALSE;
2288 memcpy (name, namebuf, len);
2289 newsect = bfd_make_section (abfd, name);
2290 if (newsect == NULL)
2291 return FALSE;
2292 newsect->vma = hdr->p_vaddr;
2293 newsect->lma = hdr->p_paddr;
2294 newsect->size = hdr->p_filesz;
2295 newsect->filepos = hdr->p_offset;
2296 newsect->flags |= SEC_HAS_CONTENTS;
2297 newsect->alignment_power = bfd_log2 (hdr->p_align);
2298 if (hdr->p_type == PT_LOAD)
2299 {
2300 newsect->flags |= SEC_ALLOC;
2301 newsect->flags |= SEC_LOAD;
2302 if (hdr->p_flags & PF_X)
2303 {
2304 /* FIXME: all we known is that it has execute PERMISSION,
2305 may be data. */
2306 newsect->flags |= SEC_CODE;
2307 }
2308 }
2309 if (!(hdr->p_flags & PF_W))
2310 {
2311 newsect->flags |= SEC_READONLY;
2312 }
2313 }
2314
2315 if (hdr->p_memsz > hdr->p_filesz)
2316 {
2317 bfd_vma align;
2318
2319 sprintf (namebuf, "%s%d%s", typename, index, split ? "b" : "");
2320 len = strlen (namebuf) + 1;
2321 name = bfd_alloc (abfd, len);
2322 if (!name)
2323 return FALSE;
2324 memcpy (name, namebuf, len);
2325 newsect = bfd_make_section (abfd, name);
2326 if (newsect == NULL)
2327 return FALSE;
2328 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
2329 newsect->lma = hdr->p_paddr + hdr->p_filesz;
2330 newsect->size = hdr->p_memsz - hdr->p_filesz;
2331 newsect->filepos = hdr->p_offset + hdr->p_filesz;
2332 align = newsect->vma & -newsect->vma;
2333 if (align == 0 || align > hdr->p_align)
2334 align = hdr->p_align;
2335 newsect->alignment_power = bfd_log2 (align);
2336 if (hdr->p_type == PT_LOAD)
2337 {
2338 /* Hack for gdb. Segments that have not been modified do
2339 not have their contents written to a core file, on the
2340 assumption that a debugger can find the contents in the
2341 executable. We flag this case by setting the fake
2342 section size to zero. Note that "real" bss sections will
2343 always have their contents dumped to the core file. */
2344 if (bfd_get_format (abfd) == bfd_core)
2345 newsect->size = 0;
2346 newsect->flags |= SEC_ALLOC;
2347 if (hdr->p_flags & PF_X)
2348 newsect->flags |= SEC_CODE;
2349 }
2350 if (!(hdr->p_flags & PF_W))
2351 newsect->flags |= SEC_READONLY;
2352 }
2353
2354 return TRUE;
2355 }
2356
2357 bfd_boolean
2358 bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index)
2359 {
2360 const struct elf_backend_data *bed;
2361
2362 switch (hdr->p_type)
2363 {
2364 case PT_NULL:
2365 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
2366
2367 case PT_LOAD:
2368 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
2369
2370 case PT_DYNAMIC:
2371 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
2372
2373 case PT_INTERP:
2374 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
2375
2376 case PT_NOTE:
2377 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
2378 return FALSE;
2379 if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
2380 return FALSE;
2381 return TRUE;
2382
2383 case PT_SHLIB:
2384 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
2385
2386 case PT_PHDR:
2387 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
2388
2389 case PT_GNU_EH_FRAME:
2390 return _bfd_elf_make_section_from_phdr (abfd, hdr, index,
2391 "eh_frame_hdr");
2392
2393 case PT_GNU_STACK:
2394 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "stack");
2395
2396 case PT_GNU_RELRO:
2397 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "relro");
2398
2399 default:
2400 /* Check for any processor-specific program segment types. */
2401 bed = get_elf_backend_data (abfd);
2402 return bed->elf_backend_section_from_phdr (abfd, hdr, index, "proc");
2403 }
2404 }
2405
2406 /* Initialize REL_HDR, the section-header for new section, containing
2407 relocations against ASECT. If USE_RELA_P is TRUE, we use RELA
2408 relocations; otherwise, we use REL relocations. */
2409
2410 bfd_boolean
2411 _bfd_elf_init_reloc_shdr (bfd *abfd,
2412 Elf_Internal_Shdr *rel_hdr,
2413 asection *asect,
2414 bfd_boolean use_rela_p)
2415 {
2416 char *name;
2417 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2418 bfd_size_type amt = sizeof ".rela" + strlen (asect->name);
2419
2420 name = bfd_alloc (abfd, amt);
2421 if (name == NULL)
2422 return FALSE;
2423 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
2424 rel_hdr->sh_name =
2425 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
2426 FALSE);
2427 if (rel_hdr->sh_name == (unsigned int) -1)
2428 return FALSE;
2429 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
2430 rel_hdr->sh_entsize = (use_rela_p
2431 ? bed->s->sizeof_rela
2432 : bed->s->sizeof_rel);
2433 rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
2434 rel_hdr->sh_flags = 0;
2435 rel_hdr->sh_addr = 0;
2436 rel_hdr->sh_size = 0;
2437 rel_hdr->sh_offset = 0;
2438
2439 return TRUE;
2440 }
2441
2442 /* Set up an ELF internal section header for a section. */
2443
2444 static void
2445 elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg)
2446 {
2447 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2448 bfd_boolean *failedptr = failedptrarg;
2449 Elf_Internal_Shdr *this_hdr;
2450 unsigned int sh_type;
2451
2452 if (*failedptr)
2453 {
2454 /* We already failed; just get out of the bfd_map_over_sections
2455 loop. */
2456 return;
2457 }
2458
2459 this_hdr = &elf_section_data (asect)->this_hdr;
2460
2461 this_hdr->sh_name = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2462 asect->name, FALSE);
2463 if (this_hdr->sh_name == (unsigned int) -1)
2464 {
2465 *failedptr = TRUE;
2466 return;
2467 }
2468
2469 /* Don't clear sh_flags. Assembler may set additional bits. */
2470
2471 if ((asect->flags & SEC_ALLOC) != 0
2472 || asect->user_set_vma)
2473 this_hdr->sh_addr = asect->vma;
2474 else
2475 this_hdr->sh_addr = 0;
2476
2477 this_hdr->sh_offset = 0;
2478 this_hdr->sh_size = asect->size;
2479 this_hdr->sh_link = 0;
2480 this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power;
2481 /* The sh_entsize and sh_info fields may have been set already by
2482 copy_private_section_data. */
2483
2484 this_hdr->bfd_section = asect;
2485 this_hdr->contents = NULL;
2486
2487 /* If the section type is unspecified, we set it based on
2488 asect->flags. */
2489 if ((asect->flags & SEC_GROUP) != 0)
2490 sh_type = SHT_GROUP;
2491 else if ((asect->flags & SEC_ALLOC) != 0
2492 && (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
2493 || (asect->flags & SEC_NEVER_LOAD) != 0))
2494 sh_type = SHT_NOBITS;
2495 else
2496 sh_type = SHT_PROGBITS;
2497
2498 if (this_hdr->sh_type == SHT_NULL)
2499 this_hdr->sh_type = sh_type;
2500 else if (this_hdr->sh_type == SHT_NOBITS
2501 && sh_type == SHT_PROGBITS
2502 && (asect->flags & SEC_ALLOC) != 0)
2503 {
2504 /* Warn if we are changing a NOBITS section to PROGBITS, but
2505 allow the link to proceed. This can happen when users link
2506 non-bss input sections to bss output sections, or emit data
2507 to a bss output section via a linker script. */
2508 (*_bfd_error_handler)
2509 (_("warning: section `%A' type changed to PROGBITS"), asect);
2510 this_hdr->sh_type = sh_type;
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 = GRP_ENTRY_SIZE;
2579 break;
2580
2581 case SHT_GNU_HASH:
2582 this_hdr->sh_entsize = bed->s->arch_size == 64 ? 0 : 4;
2583 break;
2584 }
2585
2586 if ((asect->flags & SEC_ALLOC) != 0)
2587 this_hdr->sh_flags |= SHF_ALLOC;
2588 if ((asect->flags & SEC_READONLY) == 0)
2589 this_hdr->sh_flags |= SHF_WRITE;
2590 if ((asect->flags & SEC_CODE) != 0)
2591 this_hdr->sh_flags |= SHF_EXECINSTR;
2592 if ((asect->flags & SEC_MERGE) != 0)
2593 {
2594 this_hdr->sh_flags |= SHF_MERGE;
2595 this_hdr->sh_entsize = asect->entsize;
2596 if ((asect->flags & SEC_STRINGS) != 0)
2597 this_hdr->sh_flags |= SHF_STRINGS;
2598 }
2599 if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL)
2600 this_hdr->sh_flags |= SHF_GROUP;
2601 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
2602 {
2603 this_hdr->sh_flags |= SHF_TLS;
2604 if (asect->size == 0
2605 && (asect->flags & SEC_HAS_CONTENTS) == 0)
2606 {
2607 struct bfd_link_order *o = asect->map_tail.link_order;
2608
2609 this_hdr->sh_size = 0;
2610 if (o != NULL)
2611 {
2612 this_hdr->sh_size = o->offset + o->size;
2613 if (this_hdr->sh_size != 0)
2614 this_hdr->sh_type = SHT_NOBITS;
2615 }
2616 }
2617 }
2618
2619 /* Check for processor-specific section types. */
2620 sh_type = this_hdr->sh_type;
2621 if (bed->elf_backend_fake_sections
2622 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
2623 *failedptr = TRUE;
2624
2625 if (sh_type == SHT_NOBITS && asect->size != 0)
2626 {
2627 /* Don't change the header type from NOBITS if we are being
2628 called for objcopy --only-keep-debug. */
2629 this_hdr->sh_type = sh_type;
2630 }
2631
2632 /* If the section has relocs, set up a section header for the
2633 SHT_REL[A] section. If two relocation sections are required for
2634 this section, it is up to the processor-specific back-end to
2635 create the other. */
2636 if ((asect->flags & SEC_RELOC) != 0
2637 && !_bfd_elf_init_reloc_shdr (abfd,
2638 &elf_section_data (asect)->rel_hdr,
2639 asect,
2640 asect->use_rela_p))
2641 *failedptr = TRUE;
2642 }
2643
2644 /* Fill in the contents of a SHT_GROUP section. Called from
2645 _bfd_elf_compute_section_file_positions for gas, objcopy, and
2646 when ELF targets use the generic linker, ld. Called for ld -r
2647 from bfd_elf_final_link. */
2648
2649 void
2650 bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
2651 {
2652 bfd_boolean *failedptr = failedptrarg;
2653 asection *elt, *first;
2654 unsigned char *loc;
2655 bfd_boolean gas;
2656
2657 /* Ignore linker created group section. See elfNN_ia64_object_p in
2658 elfxx-ia64.c. */
2659 if (((sec->flags & (SEC_GROUP | SEC_LINKER_CREATED)) != SEC_GROUP)
2660 || *failedptr)
2661 return;
2662
2663 if (elf_section_data (sec)->this_hdr.sh_info == 0)
2664 {
2665 unsigned long symindx = 0;
2666
2667 /* elf_group_id will have been set up by objcopy and the
2668 generic linker. */
2669 if (elf_group_id (sec) != NULL)
2670 symindx = elf_group_id (sec)->udata.i;
2671
2672 if (symindx == 0)
2673 {
2674 /* If called from the assembler, swap_out_syms will have set up
2675 elf_section_syms. */
2676 BFD_ASSERT (elf_section_syms (abfd) != NULL);
2677 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
2678 }
2679 elf_section_data (sec)->this_hdr.sh_info = symindx;
2680 }
2681 else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2)
2682 {
2683 /* The ELF backend linker sets sh_info to -2 when the group
2684 signature symbol is global, and thus the index can't be
2685 set until all local symbols are output. */
2686 asection *igroup = elf_sec_group (elf_next_in_group (sec));
2687 struct bfd_elf_section_data *sec_data = elf_section_data (igroup);
2688 unsigned long symndx = sec_data->this_hdr.sh_info;
2689 unsigned long extsymoff = 0;
2690 struct elf_link_hash_entry *h;
2691
2692 if (!elf_bad_symtab (igroup->owner))
2693 {
2694 Elf_Internal_Shdr *symtab_hdr;
2695
2696 symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr;
2697 extsymoff = symtab_hdr->sh_info;
2698 }
2699 h = elf_sym_hashes (igroup->owner)[symndx - extsymoff];
2700 while (h->root.type == bfd_link_hash_indirect
2701 || h->root.type == bfd_link_hash_warning)
2702 h = (struct elf_link_hash_entry *) h->root.u.i.link;
2703
2704 elf_section_data (sec)->this_hdr.sh_info = h->indx;
2705 }
2706
2707 /* The contents won't be allocated for "ld -r" or objcopy. */
2708 gas = TRUE;
2709 if (sec->contents == NULL)
2710 {
2711 gas = FALSE;
2712 sec->contents = bfd_alloc (abfd, sec->size);
2713
2714 /* Arrange for the section to be written out. */
2715 elf_section_data (sec)->this_hdr.contents = sec->contents;
2716 if (sec->contents == NULL)
2717 {
2718 *failedptr = TRUE;
2719 return;
2720 }
2721 }
2722
2723 loc = sec->contents + sec->size;
2724
2725 /* Get the pointer to the first section in the group that gas
2726 squirreled away here. objcopy arranges for this to be set to the
2727 start of the input section group. */
2728 first = elt = elf_next_in_group (sec);
2729
2730 /* First element is a flag word. Rest of section is elf section
2731 indices for all the sections of the group. Write them backwards
2732 just to keep the group in the same order as given in .section
2733 directives, not that it matters. */
2734 while (elt != NULL)
2735 {
2736 asection *s;
2737 unsigned int idx;
2738
2739 s = elt;
2740 if (! elf_discarded_section (s))
2741 {
2742 loc -= 4;
2743 if (!gas)
2744 s = s->output_section;
2745 idx = 0;
2746 if (s != NULL)
2747 idx = elf_section_data (s)->this_idx;
2748 H_PUT_32 (abfd, idx, loc);
2749 }
2750 elt = elf_next_in_group (elt);
2751 if (elt == first)
2752 break;
2753 }
2754
2755 if ((loc -= 4) != sec->contents)
2756 abort ();
2757
2758 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
2759 }
2760
2761 /* Assign all ELF section numbers. The dummy first section is handled here
2762 too. The link/info pointers for the standard section types are filled
2763 in here too, while we're at it. */
2764
2765 static bfd_boolean
2766 assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
2767 {
2768 struct elf_obj_tdata *t = elf_tdata (abfd);
2769 asection *sec;
2770 unsigned int section_number, secn;
2771 Elf_Internal_Shdr **i_shdrp;
2772 struct bfd_elf_section_data *d;
2773 bfd_boolean need_symtab;
2774
2775 section_number = 1;
2776
2777 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
2778
2779 /* SHT_GROUP sections are in relocatable files only. */
2780 if (link_info == NULL || link_info->relocatable)
2781 {
2782 /* Put SHT_GROUP sections first. */
2783 for (sec = abfd->sections; sec != NULL; sec = sec->next)
2784 {
2785 d = elf_section_data (sec);
2786
2787 if (d->this_hdr.sh_type == SHT_GROUP)
2788 {
2789 if (sec->flags & SEC_LINKER_CREATED)
2790 {
2791 /* Remove the linker created SHT_GROUP sections. */
2792 bfd_section_list_remove (abfd, sec);
2793 abfd->section_count--;
2794 }
2795 else
2796 d->this_idx = section_number++;
2797 }
2798 }
2799 }
2800
2801 for (sec = abfd->sections; sec; sec = sec->next)
2802 {
2803 d = elf_section_data (sec);
2804
2805 if (d->this_hdr.sh_type != SHT_GROUP)
2806 d->this_idx = section_number++;
2807 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
2808 if ((sec->flags & SEC_RELOC) == 0)
2809 d->rel_idx = 0;
2810 else
2811 {
2812 d->rel_idx = section_number++;
2813 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr.sh_name);
2814 }
2815
2816 if (d->rel_hdr2)
2817 {
2818 d->rel_idx2 = section_number++;
2819 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr2->sh_name);
2820 }
2821 else
2822 d->rel_idx2 = 0;
2823 }
2824
2825 t->shstrtab_section = section_number++;
2826 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
2827 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
2828
2829 need_symtab = (bfd_get_symcount (abfd) > 0
2830 || (link_info == NULL
2831 && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
2832 == HAS_RELOC)));
2833 if (need_symtab)
2834 {
2835 t->symtab_section = section_number++;
2836 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
2837 if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF))
2838 {
2839 t->symtab_shndx_section = section_number++;
2840 t->symtab_shndx_hdr.sh_name
2841 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2842 ".symtab_shndx", FALSE);
2843 if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1)
2844 return FALSE;
2845 }
2846 t->strtab_section = section_number++;
2847 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
2848 }
2849
2850 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
2851 t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
2852
2853 elf_numsections (abfd) = section_number;
2854 elf_elfheader (abfd)->e_shnum = section_number;
2855
2856 /* Set up the list of section header pointers, in agreement with the
2857 indices. */
2858 i_shdrp = bfd_zalloc2 (abfd, section_number, sizeof (Elf_Internal_Shdr *));
2859 if (i_shdrp == NULL)
2860 return FALSE;
2861
2862 i_shdrp[0] = bfd_zalloc (abfd, sizeof (Elf_Internal_Shdr));
2863 if (i_shdrp[0] == NULL)
2864 {
2865 bfd_release (abfd, i_shdrp);
2866 return FALSE;
2867 }
2868
2869 elf_elfsections (abfd) = i_shdrp;
2870
2871 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
2872 if (need_symtab)
2873 {
2874 i_shdrp[t->symtab_section] = &t->symtab_hdr;
2875 if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
2876 {
2877 i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr;
2878 t->symtab_shndx_hdr.sh_link = t->symtab_section;
2879 }
2880 i_shdrp[t->strtab_section] = &t->strtab_hdr;
2881 t->symtab_hdr.sh_link = t->strtab_section;
2882 }
2883
2884 for (sec = abfd->sections; sec; sec = sec->next)
2885 {
2886 struct bfd_elf_section_data *d = elf_section_data (sec);
2887 asection *s;
2888 const char *name;
2889
2890 i_shdrp[d->this_idx] = &d->this_hdr;
2891 if (d->rel_idx != 0)
2892 i_shdrp[d->rel_idx] = &d->rel_hdr;
2893 if (d->rel_idx2 != 0)
2894 i_shdrp[d->rel_idx2] = d->rel_hdr2;
2895
2896 /* Fill in the sh_link and sh_info fields while we're at it. */
2897
2898 /* sh_link of a reloc section is the section index of the symbol
2899 table. sh_info is the section index of the section to which
2900 the relocation entries apply. */
2901 if (d->rel_idx != 0)
2902 {
2903 d->rel_hdr.sh_link = t->symtab_section;
2904 d->rel_hdr.sh_info = d->this_idx;
2905 }
2906 if (d->rel_idx2 != 0)
2907 {
2908 d->rel_hdr2->sh_link = t->symtab_section;
2909 d->rel_hdr2->sh_info = d->this_idx;
2910 }
2911
2912 /* We need to set up sh_link for SHF_LINK_ORDER. */
2913 if ((d->this_hdr.sh_flags & SHF_LINK_ORDER) != 0)
2914 {
2915 s = elf_linked_to_section (sec);
2916 if (s)
2917 {
2918 /* elf_linked_to_section points to the input section. */
2919 if (link_info != NULL)
2920 {
2921 /* Check discarded linkonce section. */
2922 if (elf_discarded_section (s))
2923 {
2924 asection *kept;
2925 (*_bfd_error_handler)
2926 (_("%B: sh_link of section `%A' points to discarded section `%A' of `%B'"),
2927 abfd, d->this_hdr.bfd_section,
2928 s, s->owner);
2929 /* Point to the kept section if it has the same
2930 size as the discarded one. */
2931 kept = _bfd_elf_check_kept_section (s, link_info);
2932 if (kept == NULL)
2933 {
2934 bfd_set_error (bfd_error_bad_value);
2935 return FALSE;
2936 }
2937 s = kept;
2938 }
2939
2940 s = s->output_section;
2941 BFD_ASSERT (s != NULL);
2942 }
2943 else
2944 {
2945 /* Handle objcopy. */
2946 if (s->output_section == NULL)
2947 {
2948 (*_bfd_error_handler)
2949 (_("%B: sh_link of section `%A' points to removed section `%A' of `%B'"),
2950 abfd, d->this_hdr.bfd_section, s, s->owner);
2951 bfd_set_error (bfd_error_bad_value);
2952 return FALSE;
2953 }
2954 s = s->output_section;
2955 }
2956 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2957 }
2958 else
2959 {
2960 /* PR 290:
2961 The Intel C compiler generates SHT_IA_64_UNWIND with
2962 SHF_LINK_ORDER. But it doesn't set the sh_link or
2963 sh_info fields. Hence we could get the situation
2964 where s is NULL. */
2965 const struct elf_backend_data *bed
2966 = get_elf_backend_data (abfd);
2967 if (bed->link_order_error_handler)
2968 bed->link_order_error_handler
2969 (_("%B: warning: sh_link not set for section `%A'"),
2970 abfd, sec);
2971 }
2972 }
2973
2974 switch (d->this_hdr.sh_type)
2975 {
2976 case SHT_REL:
2977 case SHT_RELA:
2978 /* A reloc section which we are treating as a normal BFD
2979 section. sh_link is the section index of the symbol
2980 table. sh_info is the section index of the section to
2981 which the relocation entries apply. We assume that an
2982 allocated reloc section uses the dynamic symbol table.
2983 FIXME: How can we be sure? */
2984 s = bfd_get_section_by_name (abfd, ".dynsym");
2985 if (s != NULL)
2986 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2987
2988 /* We look up the section the relocs apply to by name. */
2989 name = sec->name;
2990 if (d->this_hdr.sh_type == SHT_REL)
2991 name += 4;
2992 else
2993 name += 5;
2994 s = bfd_get_section_by_name (abfd, name);
2995 if (s != NULL)
2996 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
2997 break;
2998
2999 case SHT_STRTAB:
3000 /* We assume that a section named .stab*str is a stabs
3001 string section. We look for a section with the same name
3002 but without the trailing ``str'', and set its sh_link
3003 field to point to this section. */
3004 if (CONST_STRNEQ (sec->name, ".stab")
3005 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
3006 {
3007 size_t len;
3008 char *alc;
3009
3010 len = strlen (sec->name);
3011 alc = bfd_malloc (len - 2);
3012 if (alc == NULL)
3013 return FALSE;
3014 memcpy (alc, sec->name, len - 3);
3015 alc[len - 3] = '\0';
3016 s = bfd_get_section_by_name (abfd, alc);
3017 free (alc);
3018 if (s != NULL)
3019 {
3020 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
3021
3022 /* This is a .stab section. */
3023 if (elf_section_data (s)->this_hdr.sh_entsize == 0)
3024 elf_section_data (s)->this_hdr.sh_entsize
3025 = 4 + 2 * bfd_get_arch_size (abfd) / 8;
3026 }
3027 }
3028 break;
3029
3030 case SHT_DYNAMIC:
3031 case SHT_DYNSYM:
3032 case SHT_GNU_verneed:
3033 case SHT_GNU_verdef:
3034 /* sh_link is the section header index of the string table
3035 used for the dynamic entries, or the symbol table, or the
3036 version strings. */
3037 s = bfd_get_section_by_name (abfd, ".dynstr");
3038 if (s != NULL)
3039 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3040 break;
3041
3042 case SHT_GNU_LIBLIST:
3043 /* sh_link is the section header index of the prelink library
3044 list used for the dynamic entries, or the symbol table, or
3045 the version strings. */
3046 s = bfd_get_section_by_name (abfd, (sec->flags & SEC_ALLOC)
3047 ? ".dynstr" : ".gnu.libstr");
3048 if (s != NULL)
3049 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3050 break;
3051
3052 case SHT_HASH:
3053 case SHT_GNU_HASH:
3054 case SHT_GNU_versym:
3055 /* sh_link is the section header index of the symbol table
3056 this hash table or version table is for. */
3057 s = bfd_get_section_by_name (abfd, ".dynsym");
3058 if (s != NULL)
3059 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
3060 break;
3061
3062 case SHT_GROUP:
3063 d->this_hdr.sh_link = t->symtab_section;
3064 }
3065 }
3066
3067 for (secn = 1; secn < section_number; ++secn)
3068 if (i_shdrp[secn] == NULL)
3069 i_shdrp[secn] = i_shdrp[0];
3070 else
3071 i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
3072 i_shdrp[secn]->sh_name);
3073 return TRUE;
3074 }
3075
3076 /* Map symbol from it's internal number to the external number, moving
3077 all local symbols to be at the head of the list. */
3078
3079 static bfd_boolean
3080 sym_is_global (bfd *abfd, asymbol *sym)
3081 {
3082 /* If the backend has a special mapping, use it. */
3083 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3084 if (bed->elf_backend_sym_is_global)
3085 return (*bed->elf_backend_sym_is_global) (abfd, sym);
3086
3087 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
3088 || bfd_is_und_section (bfd_get_section (sym))
3089 || bfd_is_com_section (bfd_get_section (sym)));
3090 }
3091
3092 /* Don't output section symbols for sections that are not going to be
3093 output. */
3094
3095 static bfd_boolean
3096 ignore_section_sym (bfd *abfd, asymbol *sym)
3097 {
3098 return ((sym->flags & BSF_SECTION_SYM) != 0
3099 && !(sym->section->owner == abfd
3100 || (sym->section->output_section->owner == abfd
3101 && sym->section->output_offset == 0)));
3102 }
3103
3104 static bfd_boolean
3105 elf_map_symbols (bfd *abfd)
3106 {
3107 unsigned int symcount = bfd_get_symcount (abfd);
3108 asymbol **syms = bfd_get_outsymbols (abfd);
3109 asymbol **sect_syms;
3110 unsigned int num_locals = 0;
3111 unsigned int num_globals = 0;
3112 unsigned int num_locals2 = 0;
3113 unsigned int num_globals2 = 0;
3114 int max_index = 0;
3115 unsigned int idx;
3116 asection *asect;
3117 asymbol **new_syms;
3118
3119 #ifdef DEBUG
3120 fprintf (stderr, "elf_map_symbols\n");
3121 fflush (stderr);
3122 #endif
3123
3124 for (asect = abfd->sections; asect; asect = asect->next)
3125 {
3126 if (max_index < asect->index)
3127 max_index = asect->index;
3128 }
3129
3130 max_index++;
3131 sect_syms = bfd_zalloc2 (abfd, max_index, sizeof (asymbol *));
3132 if (sect_syms == NULL)
3133 return FALSE;
3134 elf_section_syms (abfd) = sect_syms;
3135 elf_num_section_syms (abfd) = max_index;
3136
3137 /* Init sect_syms entries for any section symbols we have already
3138 decided to output. */
3139 for (idx = 0; idx < symcount; idx++)
3140 {
3141 asymbol *sym = syms[idx];
3142
3143 if ((sym->flags & BSF_SECTION_SYM) != 0
3144 && sym->value == 0
3145 && !ignore_section_sym (abfd, sym))
3146 {
3147 asection *sec = sym->section;
3148
3149 if (sec->owner != abfd)
3150 sec = sec->output_section;
3151
3152 sect_syms[sec->index] = syms[idx];
3153 }
3154 }
3155
3156 /* Classify all of the symbols. */
3157 for (idx = 0; idx < symcount; idx++)
3158 {
3159 if (ignore_section_sym (abfd, syms[idx]))
3160 continue;
3161 if (!sym_is_global (abfd, syms[idx]))
3162 num_locals++;
3163 else
3164 num_globals++;
3165 }
3166
3167 /* We will be adding a section symbol for each normal BFD section. Most
3168 sections will already have a section symbol in outsymbols, but
3169 eg. SHT_GROUP sections will not, and we need the section symbol mapped
3170 at least in that case. */
3171 for (asect = abfd->sections; asect; asect = asect->next)
3172 {
3173 if (sect_syms[asect->