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