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