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