82b9b45de43c4866c04acc37d1273a4303026215
[deliverable/binutils-gdb.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2 Copyright 1993, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20 /*
21
22 SECTION
23 ELF backends
24
25 BFD support for ELF formats is being worked on.
26 Currently, the best supported back ends are for sparc and i386
27 (running svr4 or Solaris 2).
28
29 Documentation of the internals of the support code still needs
30 to be written. The code is changing quickly enough that we
31 haven't bothered yet.
32 */
33
34 #include "bfd.h"
35 #include "sysdep.h"
36 #include "bfdlink.h"
37 #include "libbfd.h"
38 #define ARCH_SIZE 0
39 #include "elf-bfd.h"
40
41 static INLINE struct elf_segment_map *make_mapping
42 PARAMS ((bfd *, asection **, unsigned int, unsigned int, boolean));
43 static boolean map_sections_to_segments PARAMS ((bfd *));
44 static int elf_sort_sections PARAMS ((const PTR, const PTR));
45 static boolean assign_file_positions_for_segments PARAMS ((bfd *));
46 static boolean assign_file_positions_except_relocs PARAMS ((bfd *));
47 static boolean prep_headers PARAMS ((bfd *));
48 static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **, int));
49 static boolean copy_private_bfd_data PARAMS ((bfd *, bfd *));
50 static char *elf_read PARAMS ((bfd *, long, unsigned int));
51 static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
52 static boolean assign_section_numbers PARAMS ((bfd *));
53 static INLINE int sym_is_global PARAMS ((bfd *, asymbol *));
54 static boolean elf_map_symbols PARAMS ((bfd *));
55 static bfd_size_type get_program_header_size PARAMS ((bfd *));
56 static boolean elfcore_read_notes PARAMS ((bfd *, bfd_vma, bfd_vma));
57
58 /* Swap version information in and out. The version information is
59 currently size independent. If that ever changes, this code will
60 need to move into elfcode.h. */
61
62 /* Swap in a Verdef structure. */
63
64 void
65 _bfd_elf_swap_verdef_in (abfd, src, dst)
66 bfd *abfd;
67 const Elf_External_Verdef *src;
68 Elf_Internal_Verdef *dst;
69 {
70 dst->vd_version = bfd_h_get_16 (abfd, src->vd_version);
71 dst->vd_flags = bfd_h_get_16 (abfd, src->vd_flags);
72 dst->vd_ndx = bfd_h_get_16 (abfd, src->vd_ndx);
73 dst->vd_cnt = bfd_h_get_16 (abfd, src->vd_cnt);
74 dst->vd_hash = bfd_h_get_32 (abfd, src->vd_hash);
75 dst->vd_aux = bfd_h_get_32 (abfd, src->vd_aux);
76 dst->vd_next = bfd_h_get_32 (abfd, src->vd_next);
77 }
78
79 /* Swap out a Verdef structure. */
80
81 void
82 _bfd_elf_swap_verdef_out (abfd, src, dst)
83 bfd *abfd;
84 const Elf_Internal_Verdef *src;
85 Elf_External_Verdef *dst;
86 {
87 bfd_h_put_16 (abfd, src->vd_version, dst->vd_version);
88 bfd_h_put_16 (abfd, src->vd_flags, dst->vd_flags);
89 bfd_h_put_16 (abfd, src->vd_ndx, dst->vd_ndx);
90 bfd_h_put_16 (abfd, src->vd_cnt, dst->vd_cnt);
91 bfd_h_put_32 (abfd, src->vd_hash, dst->vd_hash);
92 bfd_h_put_32 (abfd, src->vd_aux, dst->vd_aux);
93 bfd_h_put_32 (abfd, src->vd_next, dst->vd_next);
94 }
95
96 /* Swap in a Verdaux structure. */
97
98 void
99 _bfd_elf_swap_verdaux_in (abfd, src, dst)
100 bfd *abfd;
101 const Elf_External_Verdaux *src;
102 Elf_Internal_Verdaux *dst;
103 {
104 dst->vda_name = bfd_h_get_32 (abfd, src->vda_name);
105 dst->vda_next = bfd_h_get_32 (abfd, src->vda_next);
106 }
107
108 /* Swap out a Verdaux structure. */
109
110 void
111 _bfd_elf_swap_verdaux_out (abfd, src, dst)
112 bfd *abfd;
113 const Elf_Internal_Verdaux *src;
114 Elf_External_Verdaux *dst;
115 {
116 bfd_h_put_32 (abfd, src->vda_name, dst->vda_name);
117 bfd_h_put_32 (abfd, src->vda_next, dst->vda_next);
118 }
119
120 /* Swap in a Verneed structure. */
121
122 void
123 _bfd_elf_swap_verneed_in (abfd, src, dst)
124 bfd *abfd;
125 const Elf_External_Verneed *src;
126 Elf_Internal_Verneed *dst;
127 {
128 dst->vn_version = bfd_h_get_16 (abfd, src->vn_version);
129 dst->vn_cnt = bfd_h_get_16 (abfd, src->vn_cnt);
130 dst->vn_file = bfd_h_get_32 (abfd, src->vn_file);
131 dst->vn_aux = bfd_h_get_32 (abfd, src->vn_aux);
132 dst->vn_next = bfd_h_get_32 (abfd, src->vn_next);
133 }
134
135 /* Swap out a Verneed structure. */
136
137 void
138 _bfd_elf_swap_verneed_out (abfd, src, dst)
139 bfd *abfd;
140 const Elf_Internal_Verneed *src;
141 Elf_External_Verneed *dst;
142 {
143 bfd_h_put_16 (abfd, src->vn_version, dst->vn_version);
144 bfd_h_put_16 (abfd, src->vn_cnt, dst->vn_cnt);
145 bfd_h_put_32 (abfd, src->vn_file, dst->vn_file);
146 bfd_h_put_32 (abfd, src->vn_aux, dst->vn_aux);
147 bfd_h_put_32 (abfd, src->vn_next, dst->vn_next);
148 }
149
150 /* Swap in a Vernaux structure. */
151
152 void
153 _bfd_elf_swap_vernaux_in (abfd, src, dst)
154 bfd *abfd;
155 const Elf_External_Vernaux *src;
156 Elf_Internal_Vernaux *dst;
157 {
158 dst->vna_hash = bfd_h_get_32 (abfd, src->vna_hash);
159 dst->vna_flags = bfd_h_get_16 (abfd, src->vna_flags);
160 dst->vna_other = bfd_h_get_16 (abfd, src->vna_other);
161 dst->vna_name = bfd_h_get_32 (abfd, src->vna_name);
162 dst->vna_next = bfd_h_get_32 (abfd, src->vna_next);
163 }
164
165 /* Swap out a Vernaux structure. */
166
167 void
168 _bfd_elf_swap_vernaux_out (abfd, src, dst)
169 bfd *abfd;
170 const Elf_Internal_Vernaux *src;
171 Elf_External_Vernaux *dst;
172 {
173 bfd_h_put_32 (abfd, src->vna_hash, dst->vna_hash);
174 bfd_h_put_16 (abfd, src->vna_flags, dst->vna_flags);
175 bfd_h_put_16 (abfd, src->vna_other, dst->vna_other);
176 bfd_h_put_32 (abfd, src->vna_name, dst->vna_name);
177 bfd_h_put_32 (abfd, src->vna_next, dst->vna_next);
178 }
179
180 /* Swap in a Versym structure. */
181
182 void
183 _bfd_elf_swap_versym_in (abfd, src, dst)
184 bfd *abfd;
185 const Elf_External_Versym *src;
186 Elf_Internal_Versym *dst;
187 {
188 dst->vs_vers = bfd_h_get_16 (abfd, src->vs_vers);
189 }
190
191 /* Swap out a Versym structure. */
192
193 void
194 _bfd_elf_swap_versym_out (abfd, src, dst)
195 bfd *abfd;
196 const Elf_Internal_Versym *src;
197 Elf_External_Versym *dst;
198 {
199 bfd_h_put_16 (abfd, src->vs_vers, dst->vs_vers);
200 }
201
202 /* Standard ELF hash function. Do not change this function; you will
203 cause invalid hash tables to be generated. */
204
205 unsigned long
206 bfd_elf_hash (namearg)
207 const char *namearg;
208 {
209 const unsigned char *name = (const unsigned char *) namearg;
210 unsigned long h = 0;
211 unsigned long g;
212 int ch;
213
214 while ((ch = *name++) != '\0')
215 {
216 h = (h << 4) + ch;
217 if ((g = (h & 0xf0000000)) != 0)
218 {
219 h ^= g >> 24;
220 /* The ELF ABI says `h &= ~g', but this is equivalent in
221 this case and on some machines one insn instead of two. */
222 h ^= g;
223 }
224 }
225 return h;
226 }
227
228 /* Read a specified number of bytes at a specified offset in an ELF
229 file, into a newly allocated buffer, and return a pointer to the
230 buffer. */
231
232 static char *
233 elf_read (abfd, offset, size)
234 bfd * abfd;
235 long offset;
236 unsigned int size;
237 {
238 char *buf;
239
240 if ((buf = bfd_alloc (abfd, size)) == NULL)
241 return NULL;
242 if (bfd_seek (abfd, offset, SEEK_SET) == -1)
243 return NULL;
244 if (bfd_read ((PTR) buf, size, 1, abfd) != size)
245 {
246 if (bfd_get_error () != bfd_error_system_call)
247 bfd_set_error (bfd_error_file_truncated);
248 return NULL;
249 }
250 return buf;
251 }
252
253 boolean
254 bfd_elf_mkobject (abfd)
255 bfd * abfd;
256 {
257 /* this just does initialization */
258 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
259 elf_tdata (abfd) = (struct elf_obj_tdata *)
260 bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
261 if (elf_tdata (abfd) == 0)
262 return false;
263 /* since everything is done at close time, do we need any
264 initialization? */
265
266 return true;
267 }
268
269 boolean
270 bfd_elf_mkcorefile (abfd)
271 bfd * abfd;
272 {
273 /* I think this can be done just like an object file. */
274 return bfd_elf_mkobject (abfd);
275 }
276
277 char *
278 bfd_elf_get_str_section (abfd, shindex)
279 bfd * abfd;
280 unsigned int shindex;
281 {
282 Elf_Internal_Shdr **i_shdrp;
283 char *shstrtab = NULL;
284 unsigned int offset;
285 unsigned int shstrtabsize;
286
287 i_shdrp = elf_elfsections (abfd);
288 if (i_shdrp == 0 || i_shdrp[shindex] == 0)
289 return 0;
290
291 shstrtab = (char *) i_shdrp[shindex]->contents;
292 if (shstrtab == NULL)
293 {
294 /* No cached one, attempt to read, and cache what we read. */
295 offset = i_shdrp[shindex]->sh_offset;
296 shstrtabsize = i_shdrp[shindex]->sh_size;
297 shstrtab = elf_read (abfd, offset, shstrtabsize);
298 i_shdrp[shindex]->contents = (PTR) shstrtab;
299 }
300 return shstrtab;
301 }
302
303 char *
304 bfd_elf_string_from_elf_section (abfd, shindex, strindex)
305 bfd * abfd;
306 unsigned int shindex;
307 unsigned int strindex;
308 {
309 Elf_Internal_Shdr *hdr;
310
311 if (strindex == 0)
312 return "";
313
314 hdr = elf_elfsections (abfd)[shindex];
315
316 if (hdr->contents == NULL
317 && bfd_elf_get_str_section (abfd, shindex) == NULL)
318 return NULL;
319
320 if (strindex >= hdr->sh_size)
321 {
322 (*_bfd_error_handler)
323 (_("%s: invalid string offset %u >= %lu for section `%s'"),
324 bfd_get_filename (abfd), strindex, (unsigned long) hdr->sh_size,
325 ((shindex == elf_elfheader(abfd)->e_shstrndx
326 && strindex == hdr->sh_name)
327 ? ".shstrtab"
328 : elf_string_from_elf_strtab (abfd, hdr->sh_name)));
329 return "";
330 }
331
332 return ((char *) hdr->contents) + strindex;
333 }
334
335 /* Make a BFD section from an ELF section. We store a pointer to the
336 BFD section in the bfd_section field of the header. */
337
338 boolean
339 _bfd_elf_make_section_from_shdr (abfd, hdr, name)
340 bfd *abfd;
341 Elf_Internal_Shdr *hdr;
342 const char *name;
343 {
344 asection *newsect;
345 flagword flags;
346
347 if (hdr->bfd_section != NULL)
348 {
349 BFD_ASSERT (strcmp (name,
350 bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
351 return true;
352 }
353
354 newsect = bfd_make_section_anyway (abfd, name);
355 if (newsect == NULL)
356 return false;
357
358 newsect->filepos = hdr->sh_offset;
359
360 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
361 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
362 || ! bfd_set_section_alignment (abfd, newsect,
363 bfd_log2 (hdr->sh_addralign)))
364 return false;
365
366 flags = SEC_NO_FLAGS;
367 if (hdr->sh_type != SHT_NOBITS)
368 flags |= SEC_HAS_CONTENTS;
369 if ((hdr->sh_flags & SHF_ALLOC) != 0)
370 {
371 flags |= SEC_ALLOC;
372 if (hdr->sh_type != SHT_NOBITS)
373 flags |= SEC_LOAD;
374 }
375 if ((hdr->sh_flags & SHF_WRITE) == 0)
376 flags |= SEC_READONLY;
377 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
378 flags |= SEC_CODE;
379 else if ((flags & SEC_LOAD) != 0)
380 flags |= SEC_DATA;
381
382 /* The debugging sections appear to be recognized only by name, not
383 any sort of flag. */
384 if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
385 || strncmp (name, ".line", sizeof ".line" - 1) == 0
386 || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
387 flags |= SEC_DEBUGGING;
388
389 /* As a GNU extension, if the name begins with .gnu.linkonce, we
390 only link a single copy of the section. This is used to support
391 g++. g++ will emit each template expansion in its own section.
392 The symbols will be defined as weak, so that multiple definitions
393 are permitted. The GNU linker extension is to actually discard
394 all but one of the sections. */
395 if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
396 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
397
398 if (! bfd_set_section_flags (abfd, newsect, flags))
399 return false;
400
401 if ((flags & SEC_ALLOC) != 0)
402 {
403 Elf_Internal_Phdr *phdr;
404 unsigned int i;
405
406 /* Look through the phdrs to see if we need to adjust the lma.
407 If all the p_paddr fields are zero, we ignore them, since
408 some ELF linkers produce such output. */
409 phdr = elf_tdata (abfd)->phdr;
410 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
411 {
412 if (phdr->p_paddr != 0)
413 break;
414 }
415 if (i < elf_elfheader (abfd)->e_phnum)
416 {
417 phdr = elf_tdata (abfd)->phdr;
418 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
419 {
420 if (phdr->p_type == PT_LOAD
421 && phdr->p_vaddr != phdr->p_paddr
422 && phdr->p_vaddr <= hdr->sh_addr
423 && (phdr->p_vaddr + phdr->p_memsz
424 >= hdr->sh_addr + hdr->sh_size)
425 && ((flags & SEC_LOAD) == 0
426 || (phdr->p_offset <= (bfd_vma) hdr->sh_offset
427 && (phdr->p_offset + phdr->p_filesz
428 >= hdr->sh_offset + hdr->sh_size))))
429 {
430 newsect->lma += phdr->p_paddr - phdr->p_vaddr;
431 break;
432 }
433 }
434 }
435 }
436
437 hdr->bfd_section = newsect;
438 elf_section_data (newsect)->this_hdr = *hdr;
439
440 return true;
441 }
442
443 /*
444 INTERNAL_FUNCTION
445 bfd_elf_find_section
446
447 SYNOPSIS
448 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
449
450 DESCRIPTION
451 Helper functions for GDB to locate the string tables.
452 Since BFD hides string tables from callers, GDB needs to use an
453 internal hook to find them. Sun's .stabstr, in particular,
454 isn't even pointed to by the .stab section, so ordinary
455 mechanisms wouldn't work to find it, even if we had some.
456 */
457
458 struct elf_internal_shdr *
459 bfd_elf_find_section (abfd, name)
460 bfd * abfd;
461 char *name;
462 {
463 Elf_Internal_Shdr **i_shdrp;
464 char *shstrtab;
465 unsigned int max;
466 unsigned int i;
467
468 i_shdrp = elf_elfsections (abfd);
469 if (i_shdrp != NULL)
470 {
471 shstrtab = bfd_elf_get_str_section
472 (abfd, elf_elfheader (abfd)->e_shstrndx);
473 if (shstrtab != NULL)
474 {
475 max = elf_elfheader (abfd)->e_shnum;
476 for (i = 1; i < max; i++)
477 if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
478 return i_shdrp[i];
479 }
480 }
481 return 0;
482 }
483
484 const char *const bfd_elf_section_type_names[] = {
485 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
486 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
487 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
488 };
489
490 /* ELF relocs are against symbols. If we are producing relocateable
491 output, and the reloc is against an external symbol, and nothing
492 has given us any additional addend, the resulting reloc will also
493 be against the same symbol. In such a case, we don't want to
494 change anything about the way the reloc is handled, since it will
495 all be done at final link time. Rather than put special case code
496 into bfd_perform_relocation, all the reloc types use this howto
497 function. It just short circuits the reloc if producing
498 relocateable output against an external symbol. */
499
500 /*ARGSUSED*/
501 bfd_reloc_status_type
502 bfd_elf_generic_reloc (abfd,
503 reloc_entry,
504 symbol,
505 data,
506 input_section,
507 output_bfd,
508 error_message)
509 bfd *abfd ATTRIBUTE_UNUSED;
510 arelent *reloc_entry;
511 asymbol *symbol;
512 PTR data ATTRIBUTE_UNUSED;
513 asection *input_section;
514 bfd *output_bfd;
515 char **error_message ATTRIBUTE_UNUSED;
516 {
517 if (output_bfd != (bfd *) NULL
518 && (symbol->flags & BSF_SECTION_SYM) == 0
519 && (! reloc_entry->howto->partial_inplace
520 || reloc_entry->addend == 0))
521 {
522 reloc_entry->address += input_section->output_offset;
523 return bfd_reloc_ok;
524 }
525
526 return bfd_reloc_continue;
527 }
528 \f
529 /* Print out the program headers. */
530
531 boolean
532 _bfd_elf_print_private_bfd_data (abfd, farg)
533 bfd *abfd;
534 PTR farg;
535 {
536 FILE *f = (FILE *) farg;
537 Elf_Internal_Phdr *p;
538 asection *s;
539 bfd_byte *dynbuf = NULL;
540
541 p = elf_tdata (abfd)->phdr;
542 if (p != NULL)
543 {
544 unsigned int i, c;
545
546 fprintf (f, _("\nProgram Header:\n"));
547 c = elf_elfheader (abfd)->e_phnum;
548 for (i = 0; i < c; i++, p++)
549 {
550 const char *s;
551 char buf[20];
552
553 switch (p->p_type)
554 {
555 case PT_NULL: s = "NULL"; break;
556 case PT_LOAD: s = "LOAD"; break;
557 case PT_DYNAMIC: s = "DYNAMIC"; break;
558 case PT_INTERP: s = "INTERP"; break;
559 case PT_NOTE: s = "NOTE"; break;
560 case PT_SHLIB: s = "SHLIB"; break;
561 case PT_PHDR: s = "PHDR"; break;
562 default: sprintf (buf, "0x%lx", p->p_type); s = buf; break;
563 }
564 fprintf (f, "%8s off 0x", s);
565 fprintf_vma (f, p->p_offset);
566 fprintf (f, " vaddr 0x");
567 fprintf_vma (f, p->p_vaddr);
568 fprintf (f, " paddr 0x");
569 fprintf_vma (f, p->p_paddr);
570 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
571 fprintf (f, " filesz 0x");
572 fprintf_vma (f, p->p_filesz);
573 fprintf (f, " memsz 0x");
574 fprintf_vma (f, p->p_memsz);
575 fprintf (f, " flags %c%c%c",
576 (p->p_flags & PF_R) != 0 ? 'r' : '-',
577 (p->p_flags & PF_W) != 0 ? 'w' : '-',
578 (p->p_flags & PF_X) != 0 ? 'x' : '-');
579 if ((p->p_flags &~ (PF_R | PF_W | PF_X)) != 0)
580 fprintf (f, " %lx", p->p_flags &~ (PF_R | PF_W | PF_X));
581 fprintf (f, "\n");
582 }
583 }
584
585 s = bfd_get_section_by_name (abfd, ".dynamic");
586 if (s != NULL)
587 {
588 int elfsec;
589 unsigned long link;
590 bfd_byte *extdyn, *extdynend;
591 size_t extdynsize;
592 void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
593
594 fprintf (f, _("\nDynamic Section:\n"));
595
596 dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
597 if (dynbuf == NULL)
598 goto error_return;
599 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
600 s->_raw_size))
601 goto error_return;
602
603 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
604 if (elfsec == -1)
605 goto error_return;
606 link = elf_elfsections (abfd)[elfsec]->sh_link;
607
608 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
609 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
610
611 extdyn = dynbuf;
612 extdynend = extdyn + s->_raw_size;
613 for (; extdyn < extdynend; extdyn += extdynsize)
614 {
615 Elf_Internal_Dyn dyn;
616 const char *name;
617 char ab[20];
618 boolean stringp;
619
620 (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
621
622 if (dyn.d_tag == DT_NULL)
623 break;
624
625 stringp = false;
626 switch (dyn.d_tag)
627 {
628 default:
629 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
630 name = ab;
631 break;
632
633 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
634 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
635 case DT_PLTGOT: name = "PLTGOT"; break;
636 case DT_HASH: name = "HASH"; break;
637 case DT_STRTAB: name = "STRTAB"; break;
638 case DT_SYMTAB: name = "SYMTAB"; break;
639 case DT_RELA: name = "RELA"; break;
640 case DT_RELASZ: name = "RELASZ"; break;
641 case DT_RELAENT: name = "RELAENT"; break;
642 case DT_STRSZ: name = "STRSZ"; break;
643 case DT_SYMENT: name = "SYMENT"; break;
644 case DT_INIT: name = "INIT"; break;
645 case DT_FINI: name = "FINI"; break;
646 case DT_SONAME: name = "SONAME"; stringp = true; break;
647 case DT_RPATH: name = "RPATH"; stringp = true; break;
648 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
649 case DT_REL: name = "REL"; break;
650 case DT_RELSZ: name = "RELSZ"; break;
651 case DT_RELENT: name = "RELENT"; break;
652 case DT_PLTREL: name = "PLTREL"; break;
653 case DT_DEBUG: name = "DEBUG"; break;
654 case DT_TEXTREL: name = "TEXTREL"; break;
655 case DT_JMPREL: name = "JMPREL"; break;
656 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
657 case DT_FILTER: name = "FILTER"; stringp = true; break;
658 case DT_VERSYM: name = "VERSYM"; break;
659 case DT_VERDEF: name = "VERDEF"; break;
660 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
661 case DT_VERNEED: name = "VERNEED"; break;
662 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
663 }
664
665 fprintf (f, " %-11s ", name);
666 if (! stringp)
667 fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
668 else
669 {
670 const char *string;
671
672 string = bfd_elf_string_from_elf_section (abfd, link,
673 dyn.d_un.d_val);
674 if (string == NULL)
675 goto error_return;
676 fprintf (f, "%s", string);
677 }
678 fprintf (f, "\n");
679 }
680
681 free (dynbuf);
682 dynbuf = NULL;
683 }
684
685 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
686 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
687 {
688 if (! _bfd_elf_slurp_version_tables (abfd))
689 return false;
690 }
691
692 if (elf_dynverdef (abfd) != 0)
693 {
694 Elf_Internal_Verdef *t;
695
696 fprintf (f, _("\nVersion definitions:\n"));
697 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
698 {
699 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
700 t->vd_flags, t->vd_hash, t->vd_nodename);
701 if (t->vd_auxptr->vda_nextptr != NULL)
702 {
703 Elf_Internal_Verdaux *a;
704
705 fprintf (f, "\t");
706 for (a = t->vd_auxptr->vda_nextptr;
707 a != NULL;
708 a = a->vda_nextptr)
709 fprintf (f, "%s ", a->vda_nodename);
710 fprintf (f, "\n");
711 }
712 }
713 }
714
715 if (elf_dynverref (abfd) != 0)
716 {
717 Elf_Internal_Verneed *t;
718
719 fprintf (f, _("\nVersion References:\n"));
720 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
721 {
722 Elf_Internal_Vernaux *a;
723
724 fprintf (f, _(" required from %s:\n"), t->vn_filename);
725 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
726 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
727 a->vna_flags, a->vna_other, a->vna_nodename);
728 }
729 }
730
731 return true;
732
733 error_return:
734 if (dynbuf != NULL)
735 free (dynbuf);
736 return false;
737 }
738
739 /* Display ELF-specific fields of a symbol. */
740
741 void
742 bfd_elf_print_symbol (abfd, filep, symbol, how)
743 bfd *abfd;
744 PTR filep;
745 asymbol *symbol;
746 bfd_print_symbol_type how;
747 {
748 FILE *file = (FILE *) filep;
749 switch (how)
750 {
751 case bfd_print_symbol_name:
752 fprintf (file, "%s", symbol->name);
753 break;
754 case bfd_print_symbol_more:
755 fprintf (file, "elf ");
756 fprintf_vma (file, symbol->value);
757 fprintf (file, " %lx", (long) symbol->flags);
758 break;
759 case bfd_print_symbol_all:
760 {
761 CONST char *section_name;
762 CONST char *name = NULL;
763 struct elf_backend_data *bed;
764 unsigned char st_other;
765
766 section_name = symbol->section ? symbol->section->name : "(*none*)";
767
768 bed = get_elf_backend_data (abfd);
769 if (bed->elf_backend_print_symbol_all)
770 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
771
772 if (name == NULL)
773 {
774 name = symbol->name;
775 bfd_print_symbol_vandf ((PTR) file, symbol);
776 }
777
778 fprintf (file, " %s\t", section_name);
779 /* Print the "other" value for a symbol. For common symbols,
780 we've already printed the size; now print the alignment.
781 For other symbols, we have no specified alignment, and
782 we've printed the address; now print the size. */
783 fprintf_vma (file,
784 (bfd_is_com_section (symbol->section)
785 ? ((elf_symbol_type *) symbol)->internal_elf_sym.st_value
786 : ((elf_symbol_type *) symbol)->internal_elf_sym.st_size));
787
788 /* If we have version information, print it. */
789 if (elf_tdata (abfd)->dynversym_section != 0
790 && (elf_tdata (abfd)->dynverdef_section != 0
791 || elf_tdata (abfd)->dynverref_section != 0))
792 {
793 unsigned int vernum;
794 const char *version_string;
795
796 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
797
798 if (vernum == 0)
799 version_string = "";
800 else if (vernum == 1)
801 version_string = "Base";
802 else if (vernum <= elf_tdata (abfd)->cverdefs)
803 version_string =
804 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
805 else
806 {
807 Elf_Internal_Verneed *t;
808
809 version_string = "";
810 for (t = elf_tdata (abfd)->verref;
811 t != NULL;
812 t = t->vn_nextref)
813 {
814 Elf_Internal_Vernaux *a;
815
816 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
817 {
818 if (a->vna_other == vernum)
819 {
820 version_string = a->vna_nodename;
821 break;
822 }
823 }
824 }
825 }
826
827 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
828 fprintf (file, " %-11s", version_string);
829 else
830 {
831 int i;
832
833 fprintf (file, " (%s)", version_string);
834 for (i = 10 - strlen (version_string); i > 0; --i)
835 putc (' ', file);
836 }
837 }
838
839 /* If the st_other field is not zero, print it. */
840 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
841
842 switch (st_other)
843 {
844 case 0: break;
845 case STV_INTERNAL: fprintf (file, " .internal"); break;
846 case STV_HIDDEN: fprintf (file, " .hidden"); break;
847 case STV_PROTECTED: fprintf (file, " .protected"); break;
848 default:
849 /* Some other non-defined flags are also present, so print
850 everything hex. */
851 fprintf (file, " 0x%02x", (unsigned int) st_other);
852 }
853
854 fprintf (file, " %s", name);
855 }
856 break;
857 }
858 }
859 \f
860 /* Create an entry in an ELF linker hash table. */
861
862 struct bfd_hash_entry *
863 _bfd_elf_link_hash_newfunc (entry, table, string)
864 struct bfd_hash_entry *entry;
865 struct bfd_hash_table *table;
866 const char *string;
867 {
868 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
869
870 /* Allocate the structure if it has not already been allocated by a
871 subclass. */
872 if (ret == (struct elf_link_hash_entry *) NULL)
873 ret = ((struct elf_link_hash_entry *)
874 bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)));
875 if (ret == (struct elf_link_hash_entry *) NULL)
876 return (struct bfd_hash_entry *) ret;
877
878 /* Call the allocation method of the superclass. */
879 ret = ((struct elf_link_hash_entry *)
880 _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
881 table, string));
882 if (ret != (struct elf_link_hash_entry *) NULL)
883 {
884 /* Set local fields. */
885 ret->indx = -1;
886 ret->size = 0;
887 ret->dynindx = -1;
888 ret->dynstr_index = 0;
889 ret->weakdef = NULL;
890 ret->got.offset = (bfd_vma) -1;
891 ret->plt.offset = (bfd_vma) -1;
892 ret->linker_section_pointer = (elf_linker_section_pointers_t *)0;
893 ret->verinfo.verdef = NULL;
894 ret->vtable_entries_used = NULL;
895 ret->vtable_entries_size = 0;
896 ret->vtable_parent = NULL;
897 ret->type = STT_NOTYPE;
898 ret->other = 0;
899 /* Assume that we have been called by a non-ELF symbol reader.
900 This flag is then reset by the code which reads an ELF input
901 file. This ensures that a symbol created by a non-ELF symbol
902 reader will have the flag set correctly. */
903 ret->elf_link_hash_flags = ELF_LINK_NON_ELF;
904 }
905
906 return (struct bfd_hash_entry *) ret;
907 }
908
909 /* Copy data from an indirect symbol to its direct symbol, hiding the
910 old indirect symbol. */
911
912 void
913 _bfd_elf_link_hash_copy_indirect (dir, ind)
914 struct elf_link_hash_entry *dir, *ind;
915 {
916 /* Copy down any references that we may have already seen to the
917 symbol which just became indirect. */
918
919 dir->elf_link_hash_flags |=
920 (ind->elf_link_hash_flags
921 & (ELF_LINK_HASH_REF_DYNAMIC
922 | ELF_LINK_HASH_REF_REGULAR
923 | ELF_LINK_HASH_REF_REGULAR_NONWEAK
924 | ELF_LINK_NON_GOT_REF));
925
926 /* Copy over the global and procedure linkage table offset entries.
927 These may have been already set up by a check_relocs routine. */
928 if (dir->got.offset == (bfd_vma) -1)
929 {
930 dir->got.offset = ind->got.offset;
931 ind->got.offset = (bfd_vma) -1;
932 }
933 BFD_ASSERT (ind->got.offset == (bfd_vma) -1);
934
935 if (dir->plt.offset == (bfd_vma) -1)
936 {
937 dir->plt.offset = ind->plt.offset;
938 ind->plt.offset = (bfd_vma) -1;
939 }
940 BFD_ASSERT (ind->plt.offset == (bfd_vma) -1);
941
942 if (dir->dynindx == -1)
943 {
944 dir->dynindx = ind->dynindx;
945 dir->dynstr_index = ind->dynstr_index;
946 ind->dynindx = -1;
947 ind->dynstr_index = 0;
948 }
949 BFD_ASSERT (ind->dynindx == -1);
950 }
951
952 void
953 _bfd_elf_link_hash_hide_symbol(h)
954 struct elf_link_hash_entry *h;
955 {
956 h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
957 h->dynindx = -1;
958 h->plt.offset = (bfd_vma) -1;
959 }
960
961 /* Initialize an ELF linker hash table. */
962
963 boolean
964 _bfd_elf_link_hash_table_init (table, abfd, newfunc)
965 struct elf_link_hash_table *table;
966 bfd *abfd;
967 struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
968 struct bfd_hash_table *,
969 const char *));
970 {
971 table->dynamic_sections_created = false;
972 table->dynobj = NULL;
973 /* The first dynamic symbol is a dummy. */
974 table->dynsymcount = 1;
975 table->dynstr = NULL;
976 table->bucketcount = 0;
977 table->needed = NULL;
978 table->hgot = NULL;
979 table->stab_info = NULL;
980 return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
981 }
982
983 /* Create an ELF linker hash table. */
984
985 struct bfd_link_hash_table *
986 _bfd_elf_link_hash_table_create (abfd)
987 bfd *abfd;
988 {
989 struct elf_link_hash_table *ret;
990
991 ret = ((struct elf_link_hash_table *)
992 bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
993 if (ret == (struct elf_link_hash_table *) NULL)
994 return NULL;
995
996 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
997 {
998 bfd_release (abfd, ret);
999 return NULL;
1000 }
1001
1002 return &ret->root;
1003 }
1004
1005 /* This is a hook for the ELF emulation code in the generic linker to
1006 tell the backend linker what file name to use for the DT_NEEDED
1007 entry for a dynamic object. The generic linker passes name as an
1008 empty string to indicate that no DT_NEEDED entry should be made. */
1009
1010 void
1011 bfd_elf_set_dt_needed_name (abfd, name)
1012 bfd *abfd;
1013 const char *name;
1014 {
1015 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1016 && bfd_get_format (abfd) == bfd_object)
1017 elf_dt_name (abfd) = name;
1018 }
1019
1020 /* Get the list of DT_NEEDED entries for a link. This is a hook for
1021 the linker ELF emulation code. */
1022
1023 struct bfd_link_needed_list *
1024 bfd_elf_get_needed_list (abfd, info)
1025 bfd *abfd ATTRIBUTE_UNUSED;
1026 struct bfd_link_info *info;
1027 {
1028 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1029 return NULL;
1030 return elf_hash_table (info)->needed;
1031 }
1032
1033 /* Get the name actually used for a dynamic object for a link. This
1034 is the SONAME entry if there is one. Otherwise, it is the string
1035 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
1036
1037 const char *
1038 bfd_elf_get_dt_soname (abfd)
1039 bfd *abfd;
1040 {
1041 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1042 && bfd_get_format (abfd) == bfd_object)
1043 return elf_dt_name (abfd);
1044 return NULL;
1045 }
1046
1047 /* Get the list of DT_NEEDED entries from a BFD. This is a hook for
1048 the ELF linker emulation code. */
1049
1050 boolean
1051 bfd_elf_get_bfd_needed_list (abfd, pneeded)
1052 bfd *abfd;
1053 struct bfd_link_needed_list **pneeded;
1054 {
1055 asection *s;
1056 bfd_byte *dynbuf = NULL;
1057 int elfsec;
1058 unsigned long link;
1059 bfd_byte *extdyn, *extdynend;
1060 size_t extdynsize;
1061 void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1062
1063 *pneeded = NULL;
1064
1065 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
1066 || bfd_get_format (abfd) != bfd_object)
1067 return true;
1068
1069 s = bfd_get_section_by_name (abfd, ".dynamic");
1070 if (s == NULL || s->_raw_size == 0)
1071 return true;
1072
1073 dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
1074 if (dynbuf == NULL)
1075 goto error_return;
1076
1077 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
1078 s->_raw_size))
1079 goto error_return;
1080
1081 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1082 if (elfsec == -1)
1083 goto error_return;
1084
1085 link = elf_elfsections (abfd)[elfsec]->sh_link;
1086
1087 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1088 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1089
1090 extdyn = dynbuf;
1091 extdynend = extdyn + s->_raw_size;
1092 for (; extdyn < extdynend; extdyn += extdynsize)
1093 {
1094 Elf_Internal_Dyn dyn;
1095
1096 (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
1097
1098 if (dyn.d_tag == DT_NULL)
1099 break;
1100
1101 if (dyn.d_tag == DT_NEEDED)
1102 {
1103 const char *string;
1104 struct bfd_link_needed_list *l;
1105
1106 string = bfd_elf_string_from_elf_section (abfd, link,
1107 dyn.d_un.d_val);
1108 if (string == NULL)
1109 goto error_return;
1110
1111 l = (struct bfd_link_needed_list *) bfd_alloc (abfd, sizeof *l);
1112 if (l == NULL)
1113 goto error_return;
1114
1115 l->by = abfd;
1116 l->name = string;
1117 l->next = *pneeded;
1118 *pneeded = l;
1119 }
1120 }
1121
1122 free (dynbuf);
1123
1124 return true;
1125
1126 error_return:
1127 if (dynbuf != NULL)
1128 free (dynbuf);
1129 return false;
1130 }
1131 \f
1132 /* Allocate an ELF string table--force the first byte to be zero. */
1133
1134 struct bfd_strtab_hash *
1135 _bfd_elf_stringtab_init ()
1136 {
1137 struct bfd_strtab_hash *ret;
1138
1139 ret = _bfd_stringtab_init ();
1140 if (ret != NULL)
1141 {
1142 bfd_size_type loc;
1143
1144 loc = _bfd_stringtab_add (ret, "", true, false);
1145 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1146 if (loc == (bfd_size_type) -1)
1147 {
1148 _bfd_stringtab_free (ret);
1149 ret = NULL;
1150 }
1151 }
1152 return ret;
1153 }
1154 \f
1155 /* ELF .o/exec file reading */
1156
1157 /* Create a new bfd section from an ELF section header. */
1158
1159 boolean
1160 bfd_section_from_shdr (abfd, shindex)
1161 bfd *abfd;
1162 unsigned int shindex;
1163 {
1164 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
1165 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
1166 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1167 char *name;
1168
1169 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
1170
1171 switch (hdr->sh_type)
1172 {
1173 case SHT_NULL:
1174 /* Inactive section. Throw it away. */
1175 return true;
1176
1177 case SHT_PROGBITS: /* Normal section with contents. */
1178 case SHT_DYNAMIC: /* Dynamic linking information. */
1179 case SHT_NOBITS: /* .bss section. */
1180 case SHT_HASH: /* .hash section. */
1181 case SHT_NOTE: /* .note section. */
1182 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1183
1184 case SHT_SYMTAB: /* A symbol table */
1185 if (elf_onesymtab (abfd) == shindex)
1186 return true;
1187
1188 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1189 BFD_ASSERT (elf_onesymtab (abfd) == 0);
1190 elf_onesymtab (abfd) = shindex;
1191 elf_tdata (abfd)->symtab_hdr = *hdr;
1192 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1193 abfd->flags |= HAS_SYMS;
1194
1195 /* Sometimes a shared object will map in the symbol table. If
1196 SHF_ALLOC is set, and this is a shared object, then we also
1197 treat this section as a BFD section. We can not base the
1198 decision purely on SHF_ALLOC, because that flag is sometimes
1199 set in a relocateable object file, which would confuse the
1200 linker. */
1201 if ((hdr->sh_flags & SHF_ALLOC) != 0
1202 && (abfd->flags & DYNAMIC) != 0
1203 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
1204 return false;
1205
1206 return true;
1207
1208 case SHT_DYNSYM: /* A dynamic symbol table */
1209 if (elf_dynsymtab (abfd) == shindex)
1210 return true;
1211
1212 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1213 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1214 elf_dynsymtab (abfd) = shindex;
1215 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1216 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1217 abfd->flags |= HAS_SYMS;
1218
1219 /* Besides being a symbol table, we also treat this as a regular
1220 section, so that objcopy can handle it. */
1221 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1222
1223 case SHT_STRTAB: /* A string table */
1224 if (hdr->bfd_section != NULL)
1225 return true;
1226 if (ehdr->e_shstrndx == shindex)
1227 {
1228 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1229 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1230 return true;
1231 }
1232 {
1233 unsigned int i;
1234
1235 for (i = 1; i < ehdr->e_shnum; i++)
1236 {
1237 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1238 if (hdr2->sh_link == shindex)
1239 {
1240 if (! bfd_section_from_shdr (abfd, i))
1241 return false;
1242 if (elf_onesymtab (abfd) == i)
1243 {
1244 elf_tdata (abfd)->strtab_hdr = *hdr;
1245 elf_elfsections (abfd)[shindex] =
1246 &elf_tdata (abfd)->strtab_hdr;
1247 return true;
1248 }
1249 if (elf_dynsymtab (abfd) == i)
1250 {
1251 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1252 elf_elfsections (abfd)[shindex] = hdr =
1253 &elf_tdata (abfd)->dynstrtab_hdr;
1254 /* We also treat this as a regular section, so
1255 that objcopy can handle it. */
1256 break;
1257 }
1258 #if 0 /* Not handling other string tables specially right now. */
1259 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
1260 /* We have a strtab for some random other section. */
1261 newsect = (asection *) hdr2->bfd_section;
1262 if (!newsect)
1263 break;
1264 hdr->bfd_section = newsect;
1265 hdr2 = &elf_section_data (newsect)->str_hdr;
1266 *hdr2 = *hdr;
1267 elf_elfsections (abfd)[shindex] = hdr2;
1268 #endif
1269 }
1270 }
1271 }
1272
1273 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1274
1275 case SHT_REL:
1276 case SHT_RELA:
1277 /* *These* do a lot of work -- but build no sections! */
1278 {
1279 asection *target_sect;
1280 Elf_Internal_Shdr *hdr2;
1281
1282 /* Check for a bogus link to avoid crashing. */
1283 if (hdr->sh_link >= ehdr->e_shnum)
1284 {
1285 ((*_bfd_error_handler)
1286 (_("%s: invalid link %lu for reloc section %s (index %u)"),
1287 bfd_get_filename (abfd), hdr->sh_link, name, shindex));
1288 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1289 }
1290
1291 /* For some incomprehensible reason Oracle distributes
1292 libraries for Solaris in which some of the objects have
1293 bogus sh_link fields. It would be nice if we could just
1294 reject them, but, unfortunately, some people need to use
1295 them. We scan through the section headers; if we find only
1296 one suitable symbol table, we clobber the sh_link to point
1297 to it. I hope this doesn't break anything. */
1298 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1299 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1300 {
1301 int scan;
1302 int found;
1303
1304 found = 0;
1305 for (scan = 1; scan < ehdr->e_shnum; scan++)
1306 {
1307 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1308 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1309 {
1310 if (found != 0)
1311 {
1312 found = 0;
1313 break;
1314 }
1315 found = scan;
1316 }
1317 }
1318 if (found != 0)
1319 hdr->sh_link = found;
1320 }
1321
1322 /* Get the symbol table. */
1323 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1324 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1325 return false;
1326
1327 /* If this reloc section does not use the main symbol table we
1328 don't treat it as a reloc section. BFD can't adequately
1329 represent such a section, so at least for now, we don't
1330 try. We just present it as a normal section. */
1331 if (hdr->sh_link != elf_onesymtab (abfd))
1332 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1333
1334 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1335 return false;
1336 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1337 if (target_sect == NULL)
1338 return false;
1339
1340 if ((target_sect->flags & SEC_RELOC) == 0
1341 || target_sect->reloc_count == 0)
1342 hdr2 = &elf_section_data (target_sect)->rel_hdr;
1343 else
1344 {
1345 BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1346 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
1347 elf_section_data (target_sect)->rel_hdr2 = hdr2;
1348 }
1349 *hdr2 = *hdr;
1350 elf_elfsections (abfd)[shindex] = hdr2;
1351 target_sect->reloc_count += hdr->sh_size / hdr->sh_entsize;
1352 target_sect->flags |= SEC_RELOC;
1353 target_sect->relocation = NULL;
1354 target_sect->rel_filepos = hdr->sh_offset;
1355 /* In the section to which the relocations apply, mark whether
1356 its relocations are of the REL or RELA variety. */
1357 elf_section_data (target_sect)->use_rela_p
1358 = (hdr->sh_type == SHT_RELA);
1359 abfd->flags |= HAS_RELOC;
1360 return true;
1361 }
1362 break;
1363
1364 case SHT_GNU_verdef:
1365 elf_dynverdef (abfd) = shindex;
1366 elf_tdata (abfd)->dynverdef_hdr = *hdr;
1367 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1368 break;
1369
1370 case SHT_GNU_versym:
1371 elf_dynversym (abfd) = shindex;
1372 elf_tdata (abfd)->dynversym_hdr = *hdr;
1373 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1374 break;
1375
1376 case SHT_GNU_verneed:
1377 elf_dynverref (abfd) = shindex;
1378 elf_tdata (abfd)->dynverref_hdr = *hdr;
1379 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1380 break;
1381
1382 case SHT_SHLIB:
1383 return true;
1384
1385 default:
1386 /* Check for any processor-specific section types. */
1387 {
1388 if (bed->elf_backend_section_from_shdr)
1389 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
1390 }
1391 break;
1392 }
1393
1394 return true;
1395 }
1396
1397 /* Given an ELF section number, retrieve the corresponding BFD
1398 section. */
1399
1400 asection *
1401 bfd_section_from_elf_index (abfd, index)
1402 bfd *abfd;
1403 unsigned int index;
1404 {
1405 BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
1406 if (index >= elf_elfheader (abfd)->e_shnum)
1407 return NULL;
1408 return elf_elfsections (abfd)[index]->bfd_section;
1409 }
1410
1411 boolean
1412 _bfd_elf_new_section_hook (abfd, sec)
1413 bfd *abfd;
1414 asection *sec;
1415 {
1416 struct bfd_elf_section_data *sdata;
1417
1418 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, sizeof (*sdata));
1419 if (!sdata)
1420 return false;
1421 sec->used_by_bfd = (PTR) sdata;
1422
1423 /* Indicate whether or not this section should use RELA relocations. */
1424 sdata->use_rela_p
1425 = get_elf_backend_data (abfd)->default_use_rela_p;
1426
1427 return true;
1428 }
1429
1430 /* Create a new bfd section from an ELF program header.
1431
1432 Since program segments have no names, we generate a synthetic name
1433 of the form segment<NUM>, where NUM is generally the index in the
1434 program header table. For segments that are split (see below) we
1435 generate the names segment<NUM>a and segment<NUM>b.
1436
1437 Note that some program segments may have a file size that is different than
1438 (less than) the memory size. All this means is that at execution the
1439 system must allocate the amount of memory specified by the memory size,
1440 but only initialize it with the first "file size" bytes read from the
1441 file. This would occur for example, with program segments consisting
1442 of combined data+bss.
1443
1444 To handle the above situation, this routine generates TWO bfd sections
1445 for the single program segment. The first has the length specified by
1446 the file size of the segment, and the second has the length specified
1447 by the difference between the two sizes. In effect, the segment is split
1448 into it's initialized and uninitialized parts.
1449
1450 */
1451
1452 boolean
1453 _bfd_elf_make_section_from_phdr (abfd, hdr, index, typename)
1454 bfd *abfd;
1455 Elf_Internal_Phdr *hdr;
1456 int index;
1457 const char *typename;
1458 {
1459 asection *newsect;
1460 char *name;
1461 char namebuf[64];
1462 int split;
1463
1464 split = ((hdr->p_memsz > 0)
1465 && (hdr->p_filesz > 0)
1466 && (hdr->p_memsz > hdr->p_filesz));
1467 sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
1468 name = bfd_alloc (abfd, strlen (namebuf) + 1);
1469 if (!name)
1470 return false;
1471 strcpy (name, namebuf);
1472 newsect = bfd_make_section (abfd, name);
1473 if (newsect == NULL)
1474 return false;
1475 newsect->vma = hdr->p_vaddr;
1476 newsect->lma = hdr->p_paddr;
1477 newsect->_raw_size = hdr->p_filesz;
1478 newsect->filepos = hdr->p_offset;
1479 newsect->flags |= SEC_HAS_CONTENTS;
1480 if (hdr->p_type == PT_LOAD)
1481 {
1482 newsect->flags |= SEC_ALLOC;
1483 newsect->flags |= SEC_LOAD;
1484 if (hdr->p_flags & PF_X)
1485 {
1486 /* FIXME: all we known is that it has execute PERMISSION,
1487 may be data. */
1488 newsect->flags |= SEC_CODE;
1489 }
1490 }
1491 if (!(hdr->p_flags & PF_W))
1492 {
1493 newsect->flags |= SEC_READONLY;
1494 }
1495
1496 if (split)
1497 {
1498 sprintf (namebuf, "%s%db", typename, index);
1499 name = bfd_alloc (abfd, strlen (namebuf) + 1);
1500 if (!name)
1501 return false;
1502 strcpy (name, namebuf);
1503 newsect = bfd_make_section (abfd, name);
1504 if (newsect == NULL)
1505 return false;
1506 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
1507 newsect->lma = hdr->p_paddr + hdr->p_filesz;
1508 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
1509 if (hdr->p_type == PT_LOAD)
1510 {
1511 newsect->flags |= SEC_ALLOC;
1512 if (hdr->p_flags & PF_X)
1513 newsect->flags |= SEC_CODE;
1514 }
1515 if (!(hdr->p_flags & PF_W))
1516 newsect->flags |= SEC_READONLY;
1517 }
1518
1519 return true;
1520 }
1521
1522 boolean
1523 bfd_section_from_phdr (abfd, hdr, index)
1524 bfd *abfd;
1525 Elf_Internal_Phdr *hdr;
1526 int index;
1527 {
1528 struct elf_backend_data *bed;
1529
1530 switch (hdr->p_type)
1531 {
1532 case PT_NULL:
1533 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
1534
1535 case PT_LOAD:
1536 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
1537
1538 case PT_DYNAMIC:
1539 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
1540
1541 case PT_INTERP:
1542 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
1543
1544 case PT_NOTE:
1545 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
1546 return false;
1547 if (! elfcore_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
1548 return false;
1549 return true;
1550
1551 case PT_SHLIB:
1552 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
1553
1554 case PT_PHDR:
1555 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
1556
1557 default:
1558 /* Check for any processor-specific program segment types.
1559 If no handler for them, default to making "segment" sections. */
1560 bed = get_elf_backend_data (abfd);
1561 if (bed->elf_backend_section_from_phdr)
1562 return (*bed->elf_backend_section_from_phdr) (abfd, hdr, index);
1563 else
1564 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "segment");
1565 }
1566 }
1567
1568 /* Initialize REL_HDR, the section-header for new section, containing
1569 relocations against ASECT. If USE_RELA_P is true, we use RELA
1570 relocations; otherwise, we use REL relocations. */
1571
1572 boolean
1573 _bfd_elf_init_reloc_shdr (abfd, rel_hdr, asect, use_rela_p)
1574 bfd *abfd;
1575 Elf_Internal_Shdr *rel_hdr;
1576 asection *asect;
1577 boolean use_rela_p;
1578 {
1579 char *name;
1580 struct elf_backend_data *bed;
1581
1582 bed = get_elf_backend_data (abfd);
1583 name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1584 if (name == NULL)
1585 return false;
1586 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1587 rel_hdr->sh_name =
1588 (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1589 true, false);
1590 if (rel_hdr->sh_name == (unsigned int) -1)
1591 return false;
1592 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1593 rel_hdr->sh_entsize = (use_rela_p
1594 ? bed->s->sizeof_rela
1595 : bed->s->sizeof_rel);
1596 rel_hdr->sh_addralign = bed->s->file_align;
1597 rel_hdr->sh_flags = 0;
1598 rel_hdr->sh_addr = 0;
1599 rel_hdr->sh_size = 0;
1600 rel_hdr->sh_offset = 0;
1601
1602 return true;
1603 }
1604
1605 /* Set up an ELF internal section header for a section. */
1606
1607 /*ARGSUSED*/
1608 static void
1609 elf_fake_sections (abfd, asect, failedptrarg)
1610 bfd *abfd;
1611 asection *asect;
1612 PTR failedptrarg;
1613 {
1614 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1615 boolean *failedptr = (boolean *) failedptrarg;
1616 Elf_Internal_Shdr *this_hdr;
1617
1618 if (*failedptr)
1619 {
1620 /* We already failed; just get out of the bfd_map_over_sections
1621 loop. */
1622 return;
1623 }
1624
1625 this_hdr = &elf_section_data (asect)->this_hdr;
1626
1627 this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1628 asect->name,
1629 true, false);
1630 if (this_hdr->sh_name == (unsigned long) -1)
1631 {
1632 *failedptr = true;
1633 return;
1634 }
1635
1636 this_hdr->sh_flags = 0;
1637
1638 if ((asect->flags & SEC_ALLOC) != 0
1639 || asect->user_set_vma)
1640 this_hdr->sh_addr = asect->vma;
1641 else
1642 this_hdr->sh_addr = 0;
1643
1644 this_hdr->sh_offset = 0;
1645 this_hdr->sh_size = asect->_raw_size;
1646 this_hdr->sh_link = 0;
1647 this_hdr->sh_addralign = 1 << asect->alignment_power;
1648 /* The sh_entsize and sh_info fields may have been set already by
1649 copy_private_section_data. */
1650
1651 this_hdr->bfd_section = asect;
1652 this_hdr->contents = NULL;
1653
1654 /* FIXME: This should not be based on section names. */
1655 if (strcmp (asect->name, ".dynstr") == 0)
1656 this_hdr->sh_type = SHT_STRTAB;
1657 else if (strcmp (asect->name, ".hash") == 0)
1658 {
1659 this_hdr->sh_type = SHT_HASH;
1660 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
1661 }
1662 else if (strcmp (asect->name, ".dynsym") == 0)
1663 {
1664 this_hdr->sh_type = SHT_DYNSYM;
1665 this_hdr->sh_entsize = bed->s->sizeof_sym;
1666 }
1667 else if (strcmp (asect->name, ".dynamic") == 0)
1668 {
1669 this_hdr->sh_type = SHT_DYNAMIC;
1670 this_hdr->sh_entsize = bed->s->sizeof_dyn;
1671 }
1672 else if (strncmp (asect->name, ".rela", 5) == 0
1673 && get_elf_backend_data (abfd)->may_use_rela_p)
1674 {
1675 this_hdr->sh_type = SHT_RELA;
1676 this_hdr->sh_entsize = bed->s->sizeof_rela;
1677 }
1678 else if (strncmp (asect->name, ".rel", 4) == 0
1679 && get_elf_backend_data (abfd)->may_use_rel_p)
1680 {
1681 this_hdr->sh_type = SHT_REL;
1682 this_hdr->sh_entsize = bed->s->sizeof_rel;
1683 }
1684 else if (strncmp (asect->name, ".note", 5) == 0)
1685 this_hdr->sh_type = SHT_NOTE;
1686 else if (strncmp (asect->name, ".stab", 5) == 0
1687 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1688 this_hdr->sh_type = SHT_STRTAB;
1689 else if (strcmp (asect->name, ".gnu.version") == 0)
1690 {
1691 this_hdr->sh_type = SHT_GNU_versym;
1692 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
1693 }
1694 else if (strcmp (asect->name, ".gnu.version_d") == 0)
1695 {
1696 this_hdr->sh_type = SHT_GNU_verdef;
1697 this_hdr->sh_entsize = 0;
1698 /* objcopy or strip will copy over sh_info, but may not set
1699 cverdefs. The linker will set cverdefs, but sh_info will be
1700 zero. */
1701 if (this_hdr->sh_info == 0)
1702 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
1703 else
1704 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
1705 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
1706 }
1707 else if (strcmp (asect->name, ".gnu.version_r") == 0)
1708 {
1709 this_hdr->sh_type = SHT_GNU_verneed;
1710 this_hdr->sh_entsize = 0;
1711 /* objcopy or strip will copy over sh_info, but may not set
1712 cverrefs. The linker will set cverrefs, but sh_info will be
1713 zero. */
1714 if (this_hdr->sh_info == 0)
1715 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
1716 else
1717 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
1718 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
1719 }
1720 else if ((asect->flags & SEC_ALLOC) != 0
1721 && (asect->flags & SEC_LOAD) != 0)
1722 this_hdr->sh_type = SHT_PROGBITS;
1723 else if ((asect->flags & SEC_ALLOC) != 0
1724 && ((asect->flags & SEC_LOAD) == 0))
1725 this_hdr->sh_type = SHT_NOBITS;
1726 else
1727 {
1728 /* Who knows? */
1729 this_hdr->sh_type = SHT_PROGBITS;
1730 }
1731
1732 if ((asect->flags & SEC_ALLOC) != 0)
1733 this_hdr->sh_flags |= SHF_ALLOC;
1734 if ((asect->flags & SEC_READONLY) == 0)
1735 this_hdr->sh_flags |= SHF_WRITE;
1736 if ((asect->flags & SEC_CODE) != 0)
1737 this_hdr->sh_flags |= SHF_EXECINSTR;
1738
1739 /* Check for processor-specific section types. */
1740 if (bed->elf_backend_fake_sections)
1741 (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1742
1743 /* If the section has relocs, set up a section header for the
1744 SHT_REL[A] section. If two relocation sections are required for
1745 this section, it is up to the processor-specific back-end to
1746 create the other. */
1747 if ((asect->flags & SEC_RELOC) != 0
1748 && !_bfd_elf_init_reloc_shdr (abfd,
1749 &elf_section_data (asect)->rel_hdr,
1750 asect,
1751 elf_section_data (asect)->use_rela_p))
1752 *failedptr = true;
1753 }
1754
1755 /* Assign all ELF section numbers. The dummy first section is handled here
1756 too. The link/info pointers for the standard section types are filled
1757 in here too, while we're at it. */
1758
1759 static boolean
1760 assign_section_numbers (abfd)
1761 bfd *abfd;
1762 {
1763 struct elf_obj_tdata *t = elf_tdata (abfd);
1764 asection *sec;
1765 unsigned int section_number;
1766 Elf_Internal_Shdr **i_shdrp;
1767 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1768
1769 section_number = 1;
1770
1771 for (sec = abfd->sections; sec; sec = sec->next)
1772 {
1773 struct bfd_elf_section_data *d = elf_section_data (sec);
1774
1775 d->this_idx = section_number++;
1776 if ((sec->flags & SEC_RELOC) == 0)
1777 d->rel_idx = 0;
1778 else
1779 d->rel_idx = section_number++;
1780
1781 if (d->rel_hdr2)
1782 d->rel_idx2 = section_number++;
1783 else
1784 d->rel_idx2 = 0;
1785 }
1786
1787 t->shstrtab_section = section_number++;
1788 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1789 t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1790
1791 if (bfd_get_symcount (abfd) > 0)
1792 {
1793 t->symtab_section = section_number++;
1794 t->strtab_section = section_number++;
1795 }
1796
1797 elf_elfheader (abfd)->e_shnum = section_number;
1798
1799 /* Set up the list of section header pointers, in agreement with the
1800 indices. */
1801 i_shdrp = ((Elf_Internal_Shdr **)
1802 bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1803 if (i_shdrp == NULL)
1804 return false;
1805
1806 i_shdrp[0] = ((Elf_Internal_Shdr *)
1807 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1808 if (i_shdrp[0] == NULL)
1809 {
1810 bfd_release (abfd, i_shdrp);
1811 return false;
1812 }
1813 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1814
1815 elf_elfsections (abfd) = i_shdrp;
1816
1817 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1818 if (bfd_get_symcount (abfd) > 0)
1819 {
1820 i_shdrp[t->symtab_section] = &t->symtab_hdr;
1821 i_shdrp[t->strtab_section] = &t->strtab_hdr;
1822 t->symtab_hdr.sh_link = t->strtab_section;
1823 }
1824 for (sec = abfd->sections; sec; sec = sec->next)
1825 {
1826 struct bfd_elf_section_data *d = elf_section_data (sec);
1827 asection *s;
1828 const char *name;
1829
1830 i_shdrp[d->this_idx] = &d->this_hdr;
1831 if (d->rel_idx != 0)
1832 i_shdrp[d->rel_idx] = &d->rel_hdr;
1833 if (d->rel_idx2 != 0)
1834 i_shdrp[d->rel_idx2] = d->rel_hdr2;
1835
1836 /* Fill in the sh_link and sh_info fields while we're at it. */
1837
1838 /* sh_link of a reloc section is the section index of the symbol
1839 table. sh_info is the section index of the section to which
1840 the relocation entries apply. */
1841 if (d->rel_idx != 0)
1842 {
1843 d->rel_hdr.sh_link = t->symtab_section;
1844 d->rel_hdr.sh_info = d->this_idx;
1845 }
1846 if (d->rel_idx2 != 0)
1847 {
1848 d->rel_hdr2->sh_link = t->symtab_section;
1849 d->rel_hdr2->sh_info = d->this_idx;
1850 }
1851
1852 switch (d->this_hdr.sh_type)
1853 {
1854 case SHT_REL:
1855 case SHT_RELA:
1856 /* A reloc section which we are treating as a normal BFD
1857 section. sh_link is the section index of the symbol
1858 table. sh_info is the section index of the section to
1859 which the relocation entries apply. We assume that an
1860 allocated reloc section uses the dynamic symbol table.
1861 FIXME: How can we be sure? */
1862 s = bfd_get_section_by_name (abfd, ".dynsym");
1863 if (s != NULL)
1864 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1865
1866 /* We look up the section the relocs apply to by name. */
1867 name = sec->name;
1868 if (d->this_hdr.sh_type == SHT_REL)
1869 name += 4;
1870 else
1871 name += 5;
1872 s = bfd_get_section_by_name (abfd, name);
1873 if (s != NULL)
1874 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1875 break;
1876
1877 case SHT_STRTAB:
1878 /* We assume that a section named .stab*str is a stabs
1879 string section. We look for a section with the same name
1880 but without the trailing ``str'', and set its sh_link
1881 field to point to this section. */
1882 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1883 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1884 {
1885 size_t len;
1886 char *alc;
1887
1888 len = strlen (sec->name);
1889 alc = (char *) bfd_malloc (len - 2);
1890 if (alc == NULL)
1891 return false;
1892 strncpy (alc, sec->name, len - 3);
1893 alc[len - 3] = '\0';
1894 s = bfd_get_section_by_name (abfd, alc);
1895 free (alc);
1896 if (s != NULL)
1897 {
1898 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1899
1900 /* This is a .stab section. */
1901 elf_section_data (s)->this_hdr.sh_entsize =
1902 4 + 2 * (bed->s->arch_size / 8);
1903 }
1904 }
1905 break;
1906
1907 case SHT_DYNAMIC:
1908 case SHT_DYNSYM:
1909 case SHT_GNU_verneed:
1910 case SHT_GNU_verdef:
1911 /* sh_link is the section header index of the string table
1912 used for the dynamic entries, or the symbol table, or the
1913 version strings. */
1914 s = bfd_get_section_by_name (abfd, ".dynstr");
1915 if (s != NULL)
1916 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1917 break;
1918
1919 case SHT_HASH:
1920 case SHT_GNU_versym:
1921 /* sh_link is the section header index of the symbol table
1922 this hash table or version table is for. */
1923 s = bfd_get_section_by_name (abfd, ".dynsym");
1924 if (s != NULL)
1925 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1926 break;
1927 }
1928 }
1929
1930 return true;
1931 }
1932
1933 /* Map symbol from it's internal number to the external number, moving
1934 all local symbols to be at the head of the list. */
1935
1936 static INLINE int
1937 sym_is_global (abfd, sym)
1938 bfd *abfd;
1939 asymbol *sym;
1940 {
1941 /* If the backend has a special mapping, use it. */
1942 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1943 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1944 (abfd, sym));
1945
1946 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1947 || bfd_is_und_section (bfd_get_section (sym))
1948 || bfd_is_com_section (bfd_get_section (sym)));
1949 }
1950
1951 static boolean
1952 elf_map_symbols (abfd)
1953 bfd *abfd;
1954 {
1955 int symcount = bfd_get_symcount (abfd);
1956 asymbol **syms = bfd_get_outsymbols (abfd);
1957 asymbol **sect_syms;
1958 int num_locals = 0;
1959 int num_globals = 0;
1960 int num_locals2 = 0;
1961 int num_globals2 = 0;
1962 int max_index = 0;
1963 int num_sections = 0;
1964 int idx;
1965 asection *asect;
1966 asymbol **new_syms;
1967 asymbol *sym;
1968
1969 #ifdef DEBUG
1970 fprintf (stderr, "elf_map_symbols\n");
1971 fflush (stderr);
1972 #endif
1973
1974 /* Add a section symbol for each BFD section. FIXME: Is this really
1975 necessary? */
1976 for (asect = abfd->sections; asect; asect = asect->next)
1977 {
1978 if (max_index < asect->index)
1979 max_index = asect->index;
1980 }
1981
1982 max_index++;
1983 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1984 if (sect_syms == NULL)
1985 return false;
1986 elf_section_syms (abfd) = sect_syms;
1987
1988 for (idx = 0; idx < symcount; idx++)
1989 {
1990 sym = syms[idx];
1991
1992 if ((sym->flags & BSF_SECTION_SYM) != 0
1993 && sym->value == 0)
1994 {
1995 asection *sec;
1996
1997 sec = sym->section;
1998
1999 if (sec->owner != NULL)
2000 {
2001 if (sec->owner != abfd)
2002 {
2003 if (sec->output_offset != 0)
2004 continue;
2005
2006 sec = sec->output_section;
2007
2008 /* Empty sections in the input files may have had a section
2009 symbol created for them. (See the comment near the end of
2010 _bfd_generic_link_output_symbols in linker.c). If the linker
2011 script discards such sections then we will reach this point.
2012 Since we know that we cannot avoid this case, we detect it
2013 and skip the abort and the assignment to the sect_syms array.
2014 To reproduce this particular case try running the linker
2015 testsuite test ld-scripts/weak.exp for an ELF port that uses
2016 the generic linker. */
2017 if (sec->owner == NULL)
2018 continue;
2019
2020 BFD_ASSERT (sec->owner == abfd);
2021 }
2022 sect_syms[sec->index] = syms[idx];
2023 }
2024 }
2025 }
2026
2027 for (asect = abfd->sections; asect; asect = asect->next)
2028 {
2029 if (sect_syms[asect->index] != NULL)
2030 continue;
2031
2032 sym = bfd_make_empty_symbol (abfd);
2033 if (sym == NULL)
2034 return false;
2035 sym->the_bfd = abfd;
2036 sym->name = asect->name;
2037 sym->value = 0;
2038 /* Set the flags to 0 to indicate that this one was newly added. */
2039 sym->flags = 0;
2040 sym->section = asect;
2041 sect_syms[asect->index] = sym;
2042 num_sections++;
2043 #ifdef DEBUG
2044 fprintf (stderr,
2045 _("creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n"),
2046 asect->name, (long) asect->vma, asect->index, (long) asect);
2047 #endif
2048 }
2049
2050 /* Classify all of the symbols. */
2051 for (idx = 0; idx < symcount; idx++)
2052 {
2053 if (!sym_is_global (abfd, syms[idx]))
2054 num_locals++;
2055 else
2056 num_globals++;
2057 }
2058 for (asect = abfd->sections; asect; asect = asect->next)
2059 {
2060 if (sect_syms[asect->index] != NULL
2061 && sect_syms[asect->index]->flags == 0)
2062 {
2063 sect_syms[asect->index]->flags = BSF_SECTION_SYM;
2064 if (!sym_is_global (abfd, sect_syms[asect->index]))
2065 num_locals++;
2066 else
2067 num_globals++;
2068 sect_syms[asect->index]->flags = 0;
2069 }
2070 }
2071
2072 /* Now sort the symbols so the local symbols are first. */
2073 new_syms = ((asymbol **)
2074 bfd_alloc (abfd,
2075 (num_locals + num_globals) * sizeof (asymbol *)));
2076 if (new_syms == NULL)
2077 return false;
2078
2079 for (idx = 0; idx < symcount; idx++)
2080 {
2081 asymbol *sym = syms[idx];
2082 int i;
2083
2084 if (!sym_is_global (abfd, sym))
2085 i = num_locals2++;
2086 else
2087 i = num_locals + num_globals2++;
2088 new_syms[i] = sym;
2089 sym->udata.i = i + 1;
2090 }
2091 for (asect = abfd->sections; asect; asect = asect->next)
2092 {
2093 if (sect_syms[asect->index] != NULL
2094 && sect_syms[asect->index]->flags == 0)
2095 {
2096 asymbol *sym = sect_syms[asect->index];
2097 int i;
2098
2099 sym->flags = BSF_SECTION_SYM;
2100 if (!sym_is_global (abfd, sym))
2101 i = num_locals2++;
2102 else
2103 i = num_locals + num_globals2++;
2104 new_syms[i] = sym;
2105 sym->udata.i = i + 1;
2106 }
2107 }
2108
2109 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
2110
2111 elf_num_locals (abfd) = num_locals;
2112 elf_num_globals (abfd) = num_globals;
2113 return true;
2114 }
2115
2116 /* Align to the maximum file alignment that could be required for any
2117 ELF data structure. */
2118
2119 static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
2120 static INLINE file_ptr
2121 align_file_position (off, align)
2122 file_ptr off;
2123 int align;
2124 {
2125 return (off + align - 1) & ~(align - 1);
2126 }
2127
2128 /* Assign a file position to a section, optionally aligning to the
2129 required section alignment. */
2130
2131 INLINE file_ptr
2132 _bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
2133 Elf_Internal_Shdr *i_shdrp;
2134 file_ptr offset;
2135 boolean align;
2136 {
2137 if (align)
2138 {
2139 unsigned int al;
2140
2141 al = i_shdrp->sh_addralign;
2142 if (al > 1)
2143 offset = BFD_ALIGN (offset, al);
2144 }
2145 i_shdrp->sh_offset = offset;
2146 if (i_shdrp->bfd_section != NULL)
2147 i_shdrp->bfd_section->filepos = offset;
2148 if (i_shdrp->sh_type != SHT_NOBITS)
2149 offset += i_shdrp->sh_size;
2150 return offset;
2151 }
2152
2153 /* Compute the file positions we are going to put the sections at, and
2154 otherwise prepare to begin writing out the ELF file. If LINK_INFO
2155 is not NULL, this is being called by the ELF backend linker. */
2156
2157 boolean
2158 _bfd_elf_compute_section_file_positions (abfd, link_info)
2159 bfd *abfd;
2160 struct bfd_link_info *link_info;
2161 {
2162 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2163 boolean failed;
2164 struct bfd_strtab_hash *strtab;
2165 Elf_Internal_Shdr *shstrtab_hdr;
2166
2167 if (abfd->output_has_begun)
2168 return true;
2169
2170 /* Do any elf backend specific processing first. */
2171 if (bed->elf_backend_begin_write_processing)
2172 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
2173
2174 if (! prep_headers (abfd))
2175 return false;
2176
2177 /* Post process the headers if necessary. */
2178 if (bed->elf_backend_post_process_headers)
2179 (*bed->elf_backend_post_process_headers) (abfd, link_info);
2180
2181 failed = false;
2182 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
2183 if (failed)
2184 return false;
2185
2186 if (!assign_section_numbers (abfd))
2187 return false;
2188
2189 /* The backend linker builds symbol table information itself. */
2190 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2191 {
2192 /* Non-zero if doing a relocatable link. */
2193 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
2194
2195 if (! swap_out_syms (abfd, &strtab, relocatable_p))
2196 return false;
2197 }
2198
2199 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
2200 /* sh_name was set in prep_headers. */
2201 shstrtab_hdr->sh_type = SHT_STRTAB;
2202 shstrtab_hdr->sh_flags = 0;
2203 shstrtab_hdr->sh_addr = 0;
2204 shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
2205 shstrtab_hdr->sh_entsize = 0;
2206 shstrtab_hdr->sh_link = 0;
2207 shstrtab_hdr->sh_info = 0;
2208 /* sh_offset is set in assign_file_positions_except_relocs. */
2209 shstrtab_hdr->sh_addralign = 1;
2210
2211 if (!assign_file_positions_except_relocs (abfd))
2212 return false;
2213
2214 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2215 {
2216 file_ptr off;
2217 Elf_Internal_Shdr *hdr;
2218
2219 off = elf_tdata (abfd)->next_file_pos;
2220
2221 hdr = &elf_tdata (abfd)->symtab_hdr;
2222 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2223
2224 hdr = &elf_tdata (abfd)->strtab_hdr;
2225 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2226
2227 elf_tdata (abfd)->next_file_pos = off;
2228
2229 /* Now that we know where the .strtab section goes, write it
2230 out. */
2231 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
2232 || ! _bfd_stringtab_emit (abfd, strtab))
2233 return false;
2234 _bfd_stringtab_free (strtab);
2235 }
2236
2237 abfd->output_has_begun = true;
2238
2239 return true;
2240 }
2241
2242 /* Create a mapping from a set of sections to a program segment. */
2243
2244 static INLINE struct elf_segment_map *
2245 make_mapping (abfd, sections, from, to, phdr)
2246 bfd *abfd;
2247 asection **sections;
2248 unsigned int from;
2249 unsigned int to;
2250 boolean phdr;
2251 {
2252 struct elf_segment_map *m;
2253 unsigned int i;
2254 asection **hdrpp;
2255
2256 m = ((struct elf_segment_map *)
2257 bfd_zalloc (abfd,
2258 (sizeof (struct elf_segment_map)
2259 + (to - from - 1) * sizeof (asection *))));
2260 if (m == NULL)
2261 return NULL;
2262 m->next = NULL;
2263 m->p_type = PT_LOAD;
2264 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
2265 m->sections[i - from] = *hdrpp;
2266 m->count = to - from;
2267
2268 if (from == 0 && phdr)
2269 {
2270 /* Include the headers in the first PT_LOAD segment. */
2271 m->includes_filehdr = 1;
2272 m->includes_phdrs = 1;
2273 }
2274
2275 return m;
2276 }
2277
2278 /* Set up a mapping from BFD sections to program segments. */
2279
2280 static boolean
2281 map_sections_to_segments (abfd)
2282 bfd *abfd;
2283 {
2284 asection **sections = NULL;
2285 asection *s;
2286 unsigned int i;
2287 unsigned int count;
2288 struct elf_segment_map *mfirst;
2289 struct elf_segment_map **pm;
2290 struct elf_segment_map *m;
2291 asection *last_hdr;
2292 unsigned int phdr_index;
2293 bfd_vma maxpagesize;
2294 asection **hdrpp;
2295 boolean phdr_in_segment = true;
2296 boolean writable;
2297 asection *dynsec;
2298
2299 if (elf_tdata (abfd)->segment_map != NULL)
2300 return true;
2301
2302 if (bfd_count_sections (abfd) == 0)
2303 return true;
2304
2305 /* Select the allocated sections, and sort them. */
2306
2307 sections = (asection **) bfd_malloc (bfd_count_sections (abfd)
2308 * sizeof (asection *));
2309 if (sections == NULL)
2310 goto error_return;
2311
2312 i = 0;
2313 for (s = abfd->sections; s != NULL; s = s->next)
2314 {
2315 if ((s->flags & SEC_ALLOC) != 0)
2316 {
2317 sections[i] = s;
2318 ++i;
2319 }
2320 }
2321 BFD_ASSERT (i <= bfd_count_sections (abfd));
2322 count = i;
2323
2324 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
2325
2326 /* Build the mapping. */
2327
2328 mfirst = NULL;
2329 pm = &mfirst;
2330
2331 /* If we have a .interp section, then create a PT_PHDR segment for
2332 the program headers and a PT_INTERP segment for the .interp
2333 section. */
2334 s = bfd_get_section_by_name (abfd, ".interp");
2335 if (s != NULL && (s->flags & SEC_LOAD) != 0)
2336 {
2337 m = ((struct elf_segment_map *)
2338 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2339 if (m == NULL)
2340 goto error_return;
2341 m->next = NULL;
2342 m->p_type = PT_PHDR;
2343 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
2344 m->p_flags = PF_R | PF_X;
2345 m->p_flags_valid = 1;
2346 m->includes_phdrs = 1;
2347
2348 *pm = m;
2349 pm = &m->next;
2350
2351 m = ((struct elf_segment_map *)
2352 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2353 if (m == NULL)
2354 goto error_return;
2355 m->next = NULL;
2356 m->p_type = PT_INTERP;
2357 m->count = 1;
2358 m->sections[0] = s;
2359
2360 *pm = m;
2361 pm = &m->next;
2362 }
2363
2364 /* Look through the sections. We put sections in the same program
2365 segment when the start of the second section can be placed within
2366 a few bytes of the end of the first section. */
2367 last_hdr = NULL;
2368 phdr_index = 0;
2369 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2370 writable = false;
2371 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
2372 if (dynsec != NULL
2373 && (dynsec->flags & SEC_LOAD) == 0)
2374 dynsec = NULL;
2375
2376 /* Deal with -Ttext or something similar such that the first section
2377 is not adjacent to the program headers. This is an
2378 approximation, since at this point we don't know exactly how many
2379 program headers we will need. */
2380 if (count > 0)
2381 {
2382 bfd_size_type phdr_size;
2383
2384 phdr_size = elf_tdata (abfd)->program_header_size;
2385 if (phdr_size == 0)
2386 phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
2387 if ((abfd->flags & D_PAGED) == 0
2388 || sections[0]->lma < phdr_size
2389 || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
2390 phdr_in_segment = false;
2391 }
2392
2393 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
2394 {
2395 asection *hdr;
2396 boolean new_segment;
2397
2398 hdr = *hdrpp;
2399
2400 /* See if this section and the last one will fit in the same
2401 segment. */
2402
2403 if (last_hdr == NULL)
2404 {
2405 /* If we don't have a segment yet, then we don't need a new
2406 one (we build the last one after this loop). */
2407 new_segment = false;
2408 }
2409 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
2410 {
2411 /* If this section has a different relation between the
2412 virtual address and the load address, then we need a new
2413 segment. */
2414 new_segment = true;
2415 }
2416 else if (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2417 < BFD_ALIGN (hdr->lma, maxpagesize))
2418 {
2419 /* If putting this section in this segment would force us to
2420 skip a page in the segment, then we need a new segment. */
2421 new_segment = true;
2422 }
2423 else if ((last_hdr->flags & SEC_LOAD) == 0
2424 && (hdr->flags & SEC_LOAD) != 0)
2425 {
2426 /* We don't want to put a loadable section after a
2427 nonloadable section in the same segment. */
2428 new_segment = true;
2429 }
2430 else if ((abfd->flags & D_PAGED) == 0)
2431 {
2432 /* If the file is not demand paged, which means that we
2433 don't require the sections to be correctly aligned in the
2434 file, then there is no other reason for a new segment. */
2435 new_segment = false;
2436 }
2437 else if (! writable
2438 && (hdr->flags & SEC_READONLY) == 0
2439 && (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2440 == hdr->lma))
2441 {
2442 /* We don't want to put a writable section in a read only
2443 segment, unless they are on the same page in memory
2444 anyhow. We already know that the last section does not
2445 bring us past the current section on the page, so the
2446 only case in which the new section is not on the same
2447 page as the previous section is when the previous section
2448 ends precisely on a page boundary. */
2449 new_segment = true;
2450 }
2451 else
2452 {
2453 /* Otherwise, we can use the same segment. */
2454 new_segment = false;
2455 }
2456
2457 if (! new_segment)
2458 {
2459 if ((hdr->flags & SEC_READONLY) == 0)
2460 writable = true;
2461 last_hdr = hdr;
2462 continue;
2463 }
2464
2465 /* We need a new program segment. We must create a new program
2466 header holding all the sections from phdr_index until hdr. */
2467
2468 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
2469 if (m == NULL)
2470 goto error_return;
2471
2472 *pm = m;
2473 pm = &m->next;
2474
2475 if ((hdr->flags & SEC_READONLY) == 0)
2476 writable = true;
2477 else
2478 writable = false;
2479
2480 last_hdr = hdr;
2481 phdr_index = i;
2482 phdr_in_segment = false;
2483 }
2484
2485 /* Create a final PT_LOAD program segment. */
2486 if (last_hdr != NULL)
2487 {
2488 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
2489 if (m == NULL)
2490 goto error_return;
2491
2492 *pm = m;
2493 pm = &m->next;
2494 }
2495
2496 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
2497 if (dynsec != NULL)
2498 {
2499 m = ((struct elf_segment_map *)
2500 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2501 if (m == NULL)
2502 goto error_return;
2503 m->next = NULL;
2504 m->p_type = PT_DYNAMIC;
2505 m->count = 1;
2506 m->sections[0] = dynsec;
2507
2508 *pm = m;
2509 pm = &m->next;
2510 }
2511
2512 /* For each loadable .note section, add a PT_NOTE segment. We don't
2513 use bfd_get_section_by_name, because if we link together
2514 nonloadable .note sections and loadable .note sections, we will
2515 generate two .note sections in the output file. FIXME: Using
2516 names for section types is bogus anyhow. */
2517 for (s = abfd->sections; s != NULL; s = s->next)
2518 {
2519 if ((s->flags & SEC_LOAD) != 0
2520 && strncmp (s->name, ".note", 5) == 0)
2521 {
2522 m = ((struct elf_segment_map *)
2523 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2524 if (m == NULL)
2525 goto error_return;
2526 m->next = NULL;
2527 m->p_type = PT_NOTE;
2528 m->count = 1;
2529 m->sections[0] = s;
2530
2531 *pm = m;
2532 pm = &m->next;
2533 }
2534 }
2535
2536 free (sections);
2537 sections = NULL;
2538
2539 elf_tdata (abfd)->segment_map = mfirst;
2540 return true;
2541
2542 error_return:
2543 if (sections != NULL)
2544 free (sections);
2545 return false;
2546 }
2547
2548 /* Sort sections by address. */
2549
2550 static int
2551 elf_sort_sections (arg1, arg2)
2552 const PTR arg1;
2553 const PTR arg2;
2554 {
2555 const asection *sec1 = *(const asection **) arg1;
2556 const asection *sec2 = *(const asection **) arg2;
2557
2558 /* Sort by LMA first, since this is the address used to
2559 place the section into a segment. */
2560 if (sec1->lma < sec2->lma)
2561 return -1;
2562 else if (sec1->lma > sec2->lma)
2563 return 1;
2564
2565 /* Then sort by VMA. Normally the LMA and the VMA will be
2566 the same, and this will do nothing. */
2567 if (sec1->vma < sec2->vma)
2568 return -1;
2569 else if (sec1->vma > sec2->vma)
2570 return 1;
2571
2572 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
2573
2574 #define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
2575
2576 if (TOEND (sec1))
2577 {
2578 if (TOEND (sec2))
2579 return sec1->target_index - sec2->target_index;
2580 else
2581 return 1;
2582 }
2583
2584 if (TOEND (sec2))
2585 return -1;
2586
2587 #undef TOEND
2588
2589 /* Sort by size, to put zero sized sections before others at the
2590 same address. */
2591
2592 if (sec1->_raw_size < sec2->_raw_size)
2593 return -1;
2594 if (sec1->_raw_size > sec2->_raw_size)
2595 return 1;
2596
2597 return sec1->target_index - sec2->target_index;
2598 }
2599
2600 /* Assign file positions to the sections based on the mapping from
2601 sections to segments. This function also sets up some fields in
2602 the file header, and writes out the program headers. */
2603
2604 static boolean
2605 assign_file_positions_for_segments (abfd)
2606 bfd *abfd;
2607 {
2608 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2609 unsigned int count;
2610 struct elf_segment_map *m;
2611 unsigned int alloc;
2612 Elf_Internal_Phdr *phdrs;
2613 file_ptr off, voff;
2614 bfd_vma filehdr_vaddr, filehdr_paddr;
2615 bfd_vma phdrs_vaddr, phdrs_paddr;
2616 Elf_Internal_Phdr *p;
2617
2618 if (elf_tdata (abfd)->segment_map == NULL)
2619 {
2620 if (! map_sections_to_segments (abfd))
2621 return false;
2622 }
2623
2624 if (bed->elf_backend_modify_segment_map)
2625 {
2626 if (! (*bed->elf_backend_modify_segment_map) (abfd))
2627 return false;
2628 }
2629
2630 count = 0;
2631 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
2632 ++count;
2633
2634 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
2635 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
2636 elf_elfheader (abfd)->e_phnum = count;
2637
2638 if (count == 0)
2639 return true;
2640
2641 /* If we already counted the number of program segments, make sure
2642 that we allocated enough space. This happens when SIZEOF_HEADERS
2643 is used in a linker script. */
2644 alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
2645 if (alloc != 0 && count > alloc)
2646 {
2647 ((*_bfd_error_handler)
2648 (_("%s: Not enough room for program headers (allocated %u, need %u)"),
2649 bfd_get_filename (abfd), alloc, count));
2650 bfd_set_error (bfd_error_bad_value);
2651 return false;
2652 }
2653
2654 if (alloc == 0)
2655 alloc = count;
2656
2657 phdrs = ((Elf_Internal_Phdr *)
2658 bfd_alloc (abfd, alloc * sizeof (Elf_Internal_Phdr)));
2659 if (phdrs == NULL)
2660 return false;
2661
2662 off = bed->s->sizeof_ehdr;
2663 off += alloc * bed->s->sizeof_phdr;
2664
2665 filehdr_vaddr = 0;
2666 filehdr_paddr = 0;
2667 phdrs_vaddr = 0;
2668 phdrs_paddr = 0;
2669
2670 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2671 m != NULL;
2672 m = m->next, p++)
2673 {
2674 unsigned int i;
2675 asection **secpp;
2676
2677 /* If elf_segment_map is not from map_sections_to_segments, the
2678 sections may not be correctly ordered. */
2679 if (m->count > 0)
2680 qsort (m->sections, (size_t) m->count, sizeof (asection *),
2681 elf_sort_sections);
2682
2683 p->p_type = m->p_type;
2684 p->p_flags = m->p_flags;
2685
2686 if (p->p_type == PT_LOAD
2687 && m->count > 0
2688 && (m->sections[0]->flags & SEC_ALLOC) != 0)
2689 {
2690 if ((abfd->flags & D_PAGED) != 0)
2691 off += (m->sections[0]->vma - off) % bed->maxpagesize;
2692 else
2693 {
2694 bfd_size_type align;
2695
2696 align = 0;
2697 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2698 {
2699 bfd_size_type secalign;
2700
2701 secalign = bfd_get_section_alignment (abfd, *secpp);
2702 if (secalign > align)
2703 align = secalign;
2704 }
2705
2706 off += (m->sections[0]->vma - off) % (1 << align);
2707 }
2708 }
2709
2710 if (m->count == 0)
2711 p->p_vaddr = 0;
2712 else
2713 p->p_vaddr = m->sections[0]->vma;
2714
2715 if (m->p_paddr_valid)
2716 p->p_paddr = m->p_paddr;
2717 else if (m->count == 0)
2718 p->p_paddr = 0;
2719 else
2720 p->p_paddr = m->sections[0]->lma;
2721
2722 if (p->p_type == PT_LOAD
2723 && (abfd->flags & D_PAGED) != 0)
2724 p->p_align = bed->maxpagesize;
2725 else if (m->count == 0)
2726 p->p_align = bed->s->file_align;
2727 else
2728 p->p_align = 0;
2729
2730 p->p_offset = 0;
2731 p->p_filesz = 0;
2732 p->p_memsz = 0;
2733
2734 if (m->includes_filehdr)
2735 {
2736 if (! m->p_flags_valid)
2737 p->p_flags |= PF_R;
2738 p->p_offset = 0;
2739 p->p_filesz = bed->s->sizeof_ehdr;
2740 p->p_memsz = bed->s->sizeof_ehdr;
2741 if (m->count > 0)
2742 {
2743 BFD_ASSERT (p->p_type == PT_LOAD);
2744
2745 if (p->p_vaddr < (bfd_vma) off)
2746 {
2747 _bfd_error_handler (_("%s: Not enough room for program headers, try linking with -N"),
2748 bfd_get_filename (abfd));
2749 bfd_set_error (bfd_error_bad_value);
2750 return false;
2751 }
2752
2753 p->p_vaddr -= off;
2754 if (! m->p_paddr_valid)
2755 p->p_paddr -= off;
2756 }
2757 if (p->p_type == PT_LOAD)
2758 {
2759 filehdr_vaddr = p->p_vaddr;
2760 filehdr_paddr = p->p_paddr;
2761 }
2762 }
2763
2764 if (m->includes_phdrs)
2765 {
2766 if (! m->p_flags_valid)
2767 p->p_flags |= PF_R;
2768
2769 if (m->includes_filehdr)
2770 {
2771 if (p->p_type == PT_LOAD)
2772 {
2773 phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
2774 phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
2775 }
2776 }
2777 else
2778 {
2779 p->p_offset = bed->s->sizeof_ehdr;
2780
2781 if (m->count > 0)
2782 {
2783 BFD_ASSERT (p->p_type == PT_LOAD);
2784 p->p_vaddr -= off - p->p_offset;
2785 if (! m->p_paddr_valid)
2786 p->p_paddr -= off - p->p_offset;
2787 }
2788
2789 if (p->p_type == PT_LOAD)
2790 {
2791 phdrs_vaddr = p->p_vaddr;
2792 phdrs_paddr = p->p_paddr;
2793 }
2794 else
2795 phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
2796 }
2797
2798 p->p_filesz += alloc * bed->s->sizeof_phdr;
2799 p->p_memsz += alloc * bed->s->sizeof_phdr;
2800 }
2801
2802 if (p->p_type == PT_LOAD
2803 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
2804 {
2805 if (! m->includes_filehdr && ! m->includes_phdrs)
2806 p->p_offset = off;
2807 else
2808 {
2809 file_ptr adjust;
2810
2811 adjust = off - (p->p_offset + p->p_filesz);
2812 p->p_filesz += adjust;
2813 p->p_memsz += adjust;
2814 }
2815 }
2816
2817 voff = off;
2818
2819 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2820 {
2821 asection *sec;
2822 flagword flags;
2823 bfd_size_type align;
2824
2825 sec = *secpp;
2826 flags = sec->flags;
2827 align = 1 << bfd_get_section_alignment (abfd, sec);
2828
2829 /* The section may have artificial alignment forced by a
2830 link script. Notice this case by the gap between the
2831 cumulative phdr vma and the section's vma. */
2832 if (p->p_vaddr + p->p_memsz < sec->vma)
2833 {
2834 bfd_vma adjust = sec->vma - (p->p_vaddr + p->p_memsz);
2835
2836 p->p_memsz += adjust;
2837 off += adjust;
2838 voff += adjust;
2839 if ((flags & SEC_LOAD) != 0)
2840 p->p_filesz += adjust;
2841 }
2842
2843 if (p->p_type == PT_LOAD)
2844 {
2845 bfd_signed_vma adjust;
2846
2847 if ((flags & SEC_LOAD) != 0)
2848 {
2849 adjust = sec->lma - (p->p_paddr + p->p_memsz);
2850 if (adjust < 0)
2851 adjust = 0;
2852 }
2853 else if ((flags & SEC_ALLOC) != 0)
2854 {
2855 /* The section VMA must equal the file position
2856 modulo the page size. FIXME: I'm not sure if
2857 this adjustment is really necessary. We used to
2858 not have the SEC_LOAD case just above, and then
2859 this was necessary, but now I'm not sure. */
2860 if ((abfd->flags & D_PAGED) != 0)
2861 adjust = (sec->vma - voff) % bed->maxpagesize;
2862 else
2863 adjust = (sec->vma - voff) % align;
2864 }
2865 else
2866 adjust = 0;
2867
2868 if (adjust != 0)
2869 {
2870 if (i == 0)
2871 {
2872 (* _bfd_error_handler)
2873 (_("Error: First section in segment (%s) starts at 0x%x"),
2874 bfd_section_name (abfd, sec), sec->lma);
2875 (* _bfd_error_handler)
2876 (_(" whereas segment starts at 0x%x"),
2877 p->p_paddr);
2878
2879 return false;
2880 }
2881 p->p_memsz += adjust;
2882 off += adjust;
2883 voff += adjust;
2884 if ((flags & SEC_LOAD) != 0)
2885 p->p_filesz += adjust;
2886 }
2887
2888 sec->filepos = off;
2889
2890 /* We check SEC_HAS_CONTENTS here because if NOLOAD is
2891 used in a linker script we may have a section with
2892 SEC_LOAD clear but which is supposed to have
2893 contents. */
2894 if ((flags & SEC_LOAD) != 0
2895 || (flags & SEC_HAS_CONTENTS) != 0)
2896 off += sec->_raw_size;
2897
2898 if ((flags & SEC_ALLOC) != 0)
2899 voff += sec->_raw_size;
2900 }
2901
2902 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
2903 {
2904 if (i == 0) /* the actual "note" segment */
2905 { /* this one actually contains everything. */
2906 sec->filepos = off;
2907 p->p_filesz = sec->_raw_size;
2908 off += sec->_raw_size;
2909 voff = off;
2910 }
2911 else /* fake sections -- don't need to be written */
2912 {
2913 sec->filepos = 0;
2914 sec->_raw_size = 0;
2915 flags = sec->flags = 0; /* no contents */
2916 }
2917 p->p_memsz = 0;
2918 p->p_align = 1;
2919 }
2920 else
2921 {
2922 p->p_memsz += sec->_raw_size;
2923
2924 if ((flags & SEC_LOAD) != 0)
2925 p->p_filesz += sec->_raw_size;
2926
2927 if (align > p->p_align
2928 && (p->p_type != PT_LOAD || (abfd->flags & D_PAGED) == 0))
2929 p->p_align = align;
2930 }
2931
2932 if (! m->p_flags_valid)
2933 {
2934 p->p_flags |= PF_R;
2935 if ((flags & SEC_CODE) != 0)
2936 p->p_flags |= PF_X;
2937 if ((flags & SEC_READONLY) == 0)
2938 p->p_flags |= PF_W;
2939 }
2940 }
2941 }
2942
2943 /* Now that we have set the section file positions, we can set up
2944 the file positions for the non PT_LOAD segments. */
2945 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2946 m != NULL;
2947 m = m->next, p++)
2948 {
2949 if (p->p_type != PT_LOAD && m->count > 0)
2950 {
2951 BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
2952 p->p_offset = m->sections[0]->filepos;
2953 }
2954 if (m->count == 0)
2955 {
2956 if (m->includes_filehdr)
2957 {
2958 p->p_vaddr = filehdr_vaddr;
2959 if (! m->p_paddr_valid)
2960 p->p_paddr = filehdr_paddr;
2961 }
2962 else if (m->includes_phdrs)
2963 {
2964 p->p_vaddr = phdrs_vaddr;
2965 if (! m->p_paddr_valid)
2966 p->p_paddr = phdrs_paddr;
2967 }
2968 }
2969 }
2970
2971 /* Clear out any program headers we allocated but did not use. */
2972 for (; count < alloc; count++, p++)
2973 {
2974 memset (p, 0, sizeof *p);
2975 p->p_type = PT_NULL;
2976 }
2977
2978 elf_tdata (abfd)->phdr = phdrs;
2979
2980 elf_tdata (abfd)->next_file_pos = off;
2981
2982 /* Write out the program headers. */
2983 if (bfd_seek (abfd, bed->s->sizeof_ehdr, SEEK_SET) != 0
2984 || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
2985 return false;
2986
2987 return true;
2988 }
2989
2990 /* Get the size of the program header.
2991
2992 If this is called by the linker before any of the section VMA's are set, it
2993 can't calculate the correct value for a strange memory layout. This only
2994 happens when SIZEOF_HEADERS is used in a linker script. In this case,
2995 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
2996 data segment (exclusive of .interp and .dynamic).
2997
2998 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
2999 will be two segments. */
3000
3001 static bfd_size_type
3002 get_program_header_size (abfd)
3003 bfd *abfd;
3004 {
3005 size_t segs;
3006 asection *s;
3007 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3008
3009 /* We can't return a different result each time we're called. */
3010 if (elf_tdata (abfd)->program_header_size != 0)
3011 return elf_tdata (abfd)->program_header_size;
3012
3013 if (elf_tdata (abfd)->segment_map != NULL)
3014 {
3015 struct elf_segment_map *m;
3016
3017 segs = 0;
3018 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
3019 ++segs;
3020 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3021 return elf_tdata (abfd)->program_header_size;
3022 }
3023
3024 /* Assume we will need exactly two PT_LOAD segments: one for text
3025 and one for data. */
3026 segs = 2;
3027
3028 s = bfd_get_section_by_name (abfd, ".interp");
3029 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3030 {
3031 /* If we have a loadable interpreter section, we need a
3032 PT_INTERP segment. In this case, assume we also need a
3033 PT_PHDR segment, although that may not be true for all
3034 targets. */
3035 segs += 2;
3036 }
3037
3038 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
3039 {
3040 /* We need a PT_DYNAMIC segment. */
3041 ++segs;
3042 }
3043
3044 for (s = abfd->sections; s != NULL; s = s->next)
3045 {
3046 if ((s->flags & SEC_LOAD) != 0
3047 && strncmp (s->name, ".note", 5) == 0)
3048 {
3049 /* We need a PT_NOTE segment. */
3050 ++segs;
3051 }
3052 }
3053
3054 /* Let the backend count up any program headers it might need. */
3055 if (bed->elf_backend_additional_program_headers)
3056 {
3057 int a;
3058
3059 a = (*bed->elf_backend_additional_program_headers) (abfd);
3060 if (a == -1)
3061 abort ();
3062 segs += a;
3063 }
3064
3065 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3066 return elf_tdata (abfd)->program_header_size;
3067 }
3068
3069 /* Work out the file positions of all the sections. This is called by
3070 _bfd_elf_compute_section_file_positions. All the section sizes and
3071 VMAs must be known before this is called.
3072
3073 We do not consider reloc sections at this point, unless they form
3074 part of the loadable image. Reloc sections are assigned file
3075 positions in assign_file_positions_for_relocs, which is called by
3076 write_object_contents and final_link.
3077
3078 We also don't set the positions of the .symtab and .strtab here. */
3079
3080 static boolean
3081 assign_file_positions_except_relocs (abfd)
3082 bfd *abfd;
3083 {
3084 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
3085 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
3086 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
3087 file_ptr off;
3088 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3089
3090 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
3091 && bfd_get_format (abfd) != bfd_core)
3092 {
3093 Elf_Internal_Shdr **hdrpp;
3094 unsigned int i;
3095
3096 /* Start after the ELF header. */
3097 off = i_ehdrp->e_ehsize;
3098
3099 /* We are not creating an executable, which means that we are
3100 not creating a program header, and that the actual order of
3101 the sections in the file is unimportant. */
3102 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
3103 {
3104 Elf_Internal_Shdr *hdr;
3105
3106 hdr = *hdrpp;
3107 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
3108 {
3109 hdr->sh_offset = -1;
3110 continue;
3111 }
3112 if (i == tdata->symtab_section
3113 || i == tdata->strtab_section)
3114 {
3115 hdr->sh_offset = -1;
3116 continue;
3117 }
3118
3119 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
3120 }
3121 }
3122 else
3123 {
3124 unsigned int i;
3125 Elf_Internal_Shdr **hdrpp;
3126
3127 /* Assign file positions for the loaded sections based on the
3128 assignment of sections to segments. */
3129 if (! assign_file_positions_for_segments (abfd))
3130 return false;
3131
3132 /* Assign file positions for the other sections. */
3133
3134 off = elf_tdata (abfd)->next_file_pos;
3135 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
3136 {
3137 Elf_Internal_Shdr *hdr;
3138
3139 hdr = *hdrpp;
3140 if (hdr->bfd_section != NULL
3141 && hdr->bfd_section->filepos != 0)
3142 hdr->sh_offset = hdr->bfd_section->filepos;
3143 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
3144 {
3145 ((*_bfd_error_handler)
3146 (_("%s: warning: allocated section `%s' not in segment"),
3147 bfd_get_filename (abfd),
3148 (hdr->bfd_section == NULL
3149 ? "*unknown*"
3150 : hdr->bfd_section->name)));
3151 if ((abfd->flags & D_PAGED) != 0)
3152 off += (hdr->sh_addr - off) % bed->maxpagesize;
3153 else
3154 off += (hdr->sh_addr - off) % hdr->sh_addralign;
3155 off = _bfd_elf_assign_file_position_for_section (hdr, off,
3156 false);
3157 }
3158 else if (hdr->sh_type == SHT_REL
3159 || hdr->sh_type == SHT_RELA
3160 || hdr == i_shdrpp[tdata->symtab_section]
3161 || hdr == i_shdrpp[tdata->strtab_section])
3162 hdr->sh_offset = -1;
3163 else
3164 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
3165 }
3166 }
3167
3168 /* Place the section headers. */
3169 off = align_file_position (off, bed->s->file_align);
3170 i_ehdrp->e_shoff = off;
3171 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
3172
3173 elf_tdata (abfd)->next_file_pos = off;
3174
3175 return true;
3176 }
3177
3178 static boolean
3179 prep_headers (abfd)
3180 bfd *abfd;
3181 {
3182 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
3183 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
3184 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
3185 int count;
3186 struct bfd_strtab_hash *shstrtab;
3187 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3188
3189 i_ehdrp = elf_elfheader (abfd);
3190 i_shdrp = elf_elfsections (abfd);
3191
3192 shstrtab = _bfd_elf_stringtab_init ();
3193 if (shstrtab == NULL)
3194 return false;
3195
3196 elf_shstrtab (abfd) = shstrtab;
3197
3198 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
3199 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
3200 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
3201 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
3202
3203 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
3204 i_ehdrp->e_ident[EI_DATA] =
3205 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
3206 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
3207
3208 i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_SYSV;
3209 i_ehdrp->e_ident[EI_ABIVERSION] = 0;
3210
3211 for (count = EI_PAD; count < EI_NIDENT; count++)
3212 i_ehdrp->e_ident[count] = 0;
3213
3214 if ((abfd->flags & DYNAMIC) != 0)
3215 i_ehdrp->e_type = ET_DYN;
3216 else if ((abfd->flags & EXEC_P) != 0)
3217 i_ehdrp->e_type = ET_EXEC;
3218 else if (bfd_get_format (abfd) == bfd_core)
3219 i_ehdrp->e_type = ET_CORE;
3220 else
3221 i_ehdrp->e_type = ET_REL;
3222
3223 switch (bfd_get_arch (abfd))
3224 {
3225 case bfd_arch_unknown:
3226 i_ehdrp->e_machine = EM_NONE;
3227 break;
3228 case bfd_arch_sparc:
3229 if (bed->s->arch_size == 64)
3230 i_ehdrp->e_machine = EM_SPARCV9;
3231 else
3232 i_ehdrp->e_machine = EM_SPARC;
3233 break;
3234 case bfd_arch_i370:
3235 i_ehdrp->e_machine = EM_S370;
3236 break;
3237 case bfd_arch_i386:
3238 i_ehdrp->e_machine = EM_386;
3239 break;
3240 case bfd_arch_ia64:
3241 i_ehdrp->e_machine = EM_IA_64;
3242 break;
3243 case bfd_arch_m68k:
3244 i_ehdrp->e_machine = EM_68K;
3245 break;
3246 case bfd_arch_m88k:
3247 i_ehdrp->e_machine = EM_88K;
3248 break;
3249 case bfd_arch_i860:
3250 i_ehdrp->e_machine = EM_860;
3251 break;
3252 case bfd_arch_i960:
3253 i_ehdrp->e_machine = EM_960;
3254 break;
3255 case bfd_arch_mips: /* MIPS Rxxxx */
3256 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
3257 break;
3258 case bfd_arch_hppa:
3259 i_ehdrp->e_machine = EM_PARISC;
3260 break;
3261 case bfd_arch_powerpc:
3262 i_ehdrp->e_machine = EM_PPC;
3263 break;
3264 case bfd_arch_alpha:
3265 i_ehdrp->e_machine = EM_ALPHA;
3266 break;
3267 case bfd_arch_sh:
3268 i_ehdrp->e_machine = EM_SH;
3269 break;
3270 case bfd_arch_d10v:
3271 i_ehdrp->e_machine = EM_CYGNUS_D10V;
3272 break;
3273 case bfd_arch_d30v:
3274 i_ehdrp->e_machine = EM_CYGNUS_D30V;
3275 break;
3276 case bfd_arch_fr30:
3277 i_ehdrp->e_machine = EM_CYGNUS_FR30;
3278 break;
3279 case bfd_arch_mcore:
3280 i_ehdrp->e_machine = EM_MCORE;
3281 break;
3282 case bfd_arch_avr:
3283 i_ehdrp->e_machine = EM_AVR;
3284 break;
3285 case bfd_arch_v850:
3286 switch (bfd_get_mach (abfd))
3287 {
3288 default:
3289 case 0: i_ehdrp->e_machine = EM_CYGNUS_V850; break;
3290 }
3291 break;
3292 case bfd_arch_arc:
3293 i_ehdrp->e_machine = EM_CYGNUS_ARC;
3294 break;
3295 case bfd_arch_arm:
3296 i_ehdrp->e_machine = EM_ARM;
3297 break;
3298 case bfd_arch_m32r:
3299 i_ehdrp->e_machine = EM_CYGNUS_M32R;
3300 break;
3301 case bfd_arch_mn10200:
3302 i_ehdrp->e_machine = EM_CYGNUS_MN10200;
3303 break;
3304 case bfd_arch_mn10300:
3305 i_ehdrp->e_machine = EM_CYGNUS_MN10300;
3306 break;
3307 case bfd_arch_pj:
3308 i_ehdrp->e_machine = EM_PJ;
3309 break;
3310 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
3311 default:
3312 i_ehdrp->e_machine = EM_NONE;
3313 }
3314 i_ehdrp->e_version = bed->s->ev_current;
3315 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
3316
3317 /* no program header, for now. */
3318 i_ehdrp->e_phoff = 0;
3319 i_ehdrp->e_phentsize = 0;
3320 i_ehdrp->e_phnum = 0;
3321
3322 /* each bfd section is section header entry */
3323 i_ehdrp->e_entry = bfd_get_start_address (abfd);
3324 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
3325
3326 /* if we're building an executable, we'll need a program header table */
3327 if (abfd->flags & EXEC_P)
3328 {
3329 /* it all happens later */
3330 #if 0
3331 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
3332
3333 /* elf_build_phdrs() returns a (NULL-terminated) array of
3334 Elf_Internal_Phdrs */
3335 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
3336 i_ehdrp->e_phoff = outbase;
3337 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
3338 #endif
3339 }
3340 else
3341 {
3342 i_ehdrp->e_phentsize = 0;
3343 i_phdrp = 0;
3344 i_ehdrp->e_phoff = 0;
3345 }
3346
3347 elf_tdata (abfd)->symtab_hdr.sh_name =
3348 (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
3349 elf_tdata (abfd)->strtab_hdr.sh_name =
3350 (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
3351 elf_tdata (abfd)->shstrtab_hdr.sh_name =
3352 (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
3353 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
3354 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
3355 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
3356 return false;
3357
3358 return true;
3359 }
3360
3361 /* Assign file positions for all the reloc sections which are not part
3362 of the loadable file image. */
3363
3364 void
3365 _bfd_elf_assign_file_positions_for_relocs (abfd)
3366 bfd *abfd;
3367 {
3368 file_ptr off;
3369 unsigned int i;
3370 Elf_Internal_Shdr **shdrpp;
3371
3372 off = elf_tdata (abfd)->next_file_pos;
3373
3374 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
3375 i < elf_elfheader (abfd)->e_shnum;
3376 i++, shdrpp++)
3377 {
3378 Elf_Internal_Shdr *shdrp;
3379
3380 shdrp = *shdrpp;
3381 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
3382 && shdrp->sh_offset == -1)
3383 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
3384 }
3385
3386 elf_tdata (abfd)->next_file_pos = off;
3387 }
3388
3389 boolean
3390 _bfd_elf_write_object_contents (abfd)
3391 bfd *abfd;
3392 {
3393 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3394 Elf_Internal_Ehdr *i_ehdrp;
3395 Elf_Internal_Shdr **i_shdrp;
3396 boolean failed;
3397 unsigned int count;
3398
3399 if (! abfd->output_has_begun
3400 && ! _bfd_elf_compute_section_file_positions
3401 (abfd, (struct bfd_link_info *) NULL))
3402 return false;
3403
3404 i_shdrp = elf_elfsections (abfd);
3405 i_ehdrp = elf_elfheader (abfd);
3406
3407 failed = false;
3408 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
3409 if (failed)
3410 return false;
3411
3412 _bfd_elf_assign_file_positions_for_relocs (abfd);
3413
3414 /* After writing the headers, we need to write the sections too... */
3415 for (count = 1; count < i_ehdrp->e_shnum; count++)
3416 {
3417 if (bed->elf_backend_section_processing)
3418 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
3419 if (i_shdrp[count]->contents)
3420 {
3421 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
3422 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
3423 1, abfd)
3424 != i_shdrp[count]->sh_size))
3425 return false;
3426 }
3427 }
3428
3429 /* Write out the section header names. */
3430 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
3431 || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
3432 return false;
3433
3434 if (bed->elf_backend_final_write_processing)
3435 (*bed->elf_backend_final_write_processing) (abfd,
3436 elf_tdata (abfd)->linker);
3437
3438 return bed->s->write_shdrs_and_ehdr (abfd);
3439 }
3440
3441 boolean
3442 _bfd_elf_write_corefile_contents (abfd)
3443 bfd *abfd;
3444 {
3445 /* Hopefully this can be done just like an object file. */
3446 return _bfd_elf_write_object_contents (abfd);
3447 }
3448 /* given a section, search the header to find them... */
3449 int
3450 _bfd_elf_section_from_bfd_section (abfd, asect)
3451 bfd *abfd;
3452 struct sec *asect;
3453 {
3454 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3455 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
3456 int index;
3457 Elf_Internal_Shdr *hdr;
3458 int maxindex = elf_elfheader (abfd)->e_shnum;
3459
3460 for (index = 0; index < maxindex; index++)
3461 {
3462 hdr = i_shdrp[index];
3463 if (hdr->bfd_section == asect)
3464 return index;
3465 }
3466
3467 if (bed->elf_backend_section_from_bfd_section)
3468 {
3469 for (index = 0; index < maxindex; index++)
3470 {
3471 int retval;
3472
3473 hdr = i_shdrp[index];
3474 retval = index;
3475 if ((*bed->elf_backend_section_from_bfd_section)
3476 (abfd, hdr, asect, &retval))
3477 return retval;
3478 }
3479 }
3480
3481 if (bfd_is_abs_section (asect))
3482 return SHN_ABS;
3483 if (bfd_is_com_section (asect))
3484 return SHN_COMMON;
3485 if (bfd_is_und_section (asect))
3486 return SHN_UNDEF;
3487
3488 bfd_set_error (bfd_error_nonrepresentable_section);
3489
3490 return -1;
3491 }
3492
3493 /* Given a BFD symbol, return the index in the ELF symbol table, or -1
3494 on error. */
3495
3496 int
3497 _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
3498 bfd *abfd;
3499 asymbol **asym_ptr_ptr;
3500 {
3501 asymbol *asym_ptr = *asym_ptr_ptr;
3502 int idx;
3503 flagword flags = asym_ptr->flags;
3504
3505 /* When gas creates relocations against local labels, it creates its
3506 own symbol for the section, but does put the symbol into the
3507 symbol chain, so udata is 0. When the linker is generating
3508 relocatable output, this section symbol may be for one of the
3509 input sections rather than the output section. */
3510 if (asym_ptr->udata.i == 0
3511 && (flags & BSF_SECTION_SYM)
3512 && asym_ptr->section)
3513 {
3514 int indx;
3515
3516 if (asym_ptr->section->output_section != NULL)
3517 indx = asym_ptr->section->output_section->index;
3518 else
3519 indx = asym_ptr->section->index;
3520 if (elf_section_syms (abfd)[indx])
3521 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
3522 }
3523
3524 idx = asym_ptr->udata.i;
3525
3526 if (idx == 0)
3527 {
3528 /* This case can occur when using --strip-symbol on a symbol
3529 which is used in a relocation entry. */
3530 (*_bfd_error_handler)
3531 (_("%s: symbol `%s' required but not present"),
3532 bfd_get_filename (abfd), bfd_asymbol_name (asym_ptr));
3533 bfd_set_error (bfd_error_no_symbols);
3534 return -1;
3535 }
3536
3537 #if DEBUG & 4
3538 {
3539 fprintf (stderr,
3540 _("elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n"),
3541 (long) asym_ptr, asym_ptr->name, idx, flags,
3542 elf_symbol_flags (flags));
3543 fflush (stderr);
3544 }
3545 #endif
3546
3547 return idx;
3548 }
3549
3550 /* Copy private BFD data. This copies any program header information. */
3551
3552 static boolean
3553 copy_private_bfd_data (ibfd, obfd)
3554 bfd *ibfd;
3555 bfd *obfd;
3556 {
3557 Elf_Internal_Ehdr *iehdr;
3558 struct elf_segment_map *mfirst;
3559 struct elf_segment_map **pm;
3560 struct elf_segment_map *m;
3561 Elf_Internal_Phdr *p;
3562 unsigned int i;
3563 unsigned int num_segments;
3564 boolean phdr_included = false;
3565
3566 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
3567 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
3568 return true;
3569
3570 if (elf_tdata (ibfd)->phdr == NULL)
3571 return true;
3572
3573 iehdr = elf_elfheader (ibfd);
3574
3575 mfirst = NULL;
3576 pm = &mfirst;
3577
3578 num_segments = elf_elfheader (ibfd)->e_phnum;
3579
3580 #define IS_CONTAINED_BY(addr, len, bottom, phdr) \
3581 ((addr) >= (bottom) \
3582 && ( ((addr) + (len)) <= ((bottom) + (phdr)->p_memsz) \
3583 || ((addr) + (len)) <= ((bottom) + (phdr)->p_filesz)))
3584
3585 /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
3586
3587 #define IS_COREFILE_NOTE(p, s) \
3588 (p->p_type == PT_NOTE \
3589 && bfd_get_format (ibfd) == bfd_core \
3590 && s->vma == 0 && s->lma == 0 \
3591 && (bfd_vma) s->filepos >= p->p_offset \
3592 && (bfd_vma) s->filepos + s->_raw_size \
3593 <= p->p_offset + p->p_filesz)
3594
3595 /* The complicated case when p_vaddr is 0 is to handle the Solaris
3596 linker, which generates a PT_INTERP section with p_vaddr and
3597 p_memsz set to 0. */
3598
3599 #define IS_SOLARIS_PT_INTERP(p, s) \
3600 (p->p_vaddr == 0 \
3601 && p->p_filesz > 0 \
3602 && (s->flags & SEC_HAS_CONTENTS) != 0 \
3603 && s->_raw_size > 0 \
3604 && (bfd_vma) s->filepos >= p->p_offset \
3605 && ((bfd_vma) s->filepos + s->_raw_size \
3606 <= p->p_offset + p->p_filesz))
3607
3608 /* Scan through the segments specified in the program header
3609 of the input BFD. */
3610 for (i = 0, p = elf_tdata (ibfd)->phdr; i < num_segments; i++, p++)
3611 {
3612 unsigned int csecs;
3613 asection *s;
3614 asection **sections;
3615 asection *os;
3616 unsigned int isec;
3617 bfd_vma matching_lma;
3618 bfd_vma suggested_lma;
3619 unsigned int j;
3620
3621 /* For each section in the input BFD, decide if it should be
3622 included in the current segment. A section will be included
3623 if it is within the address space of the segment, and it is
3624 an allocated segment, and there is an output section
3625 associated with it. */
3626 csecs = 0;
3627 for (s = ibfd->sections; s != NULL; s = s->next)
3628 if (s->output_section != NULL)
3629 {
3630 if ((IS_CONTAINED_BY (s->vma, s->_raw_size, p->p_vaddr, p)
3631 || IS_SOLARIS_PT_INTERP (p, s))
3632 && (s->flags & SEC_ALLOC) != 0)
3633 ++csecs;
3634 else if (IS_COREFILE_NOTE (p, s))
3635 ++csecs;
3636 }
3637
3638 /* Allocate a segment map big enough to contain all of the
3639 sections we have selected. */
3640 m = ((struct elf_segment_map *)
3641 bfd_alloc (obfd,
3642 (sizeof (struct elf_segment_map)
3643 + ((size_t) csecs - 1) * sizeof (asection *))));
3644 if (m == NULL)
3645 return false;
3646
3647 /* Initialise the fields of the segment map. Default to
3648 using the physical address of the segment in the input BFD. */
3649 m->next = NULL;
3650 m->p_type = p->p_type;
3651 m->p_flags = p->p_flags;
3652 m->p_flags_valid = 1;
3653 m->p_paddr = p->p_paddr;
3654 m->p_paddr_valid = 1;
3655
3656 /* Determine if this segment contains the ELF file header
3657 and if it contains the program headers themselves. */
3658 m->includes_filehdr = (p->p_offset == 0
3659 && p->p_filesz >= iehdr->e_ehsize);
3660
3661 m->includes_phdrs = 0;
3662
3663 if (! phdr_included || p->p_type != PT_LOAD)
3664 {
3665 m->includes_phdrs =
3666 (p->p_offset <= (bfd_vma) iehdr->e_phoff
3667 && (p->p_offset + p->p_filesz
3668 >= ((bfd_vma) iehdr->e_phoff
3669 + iehdr->e_phnum * iehdr->e_phentsize)));
3670 if (p->p_type == PT_LOAD && m->includes_phdrs)
3671 phdr_included = true;
3672 }
3673
3674 if (csecs == 0)
3675 {
3676 /* Special segments, such as the PT_PHDR segment, may contain
3677 no sections, but ordinary, loadable segments should contain
3678 something. */
3679
3680 if (p->p_type == PT_LOAD)
3681 _bfd_error_handler
3682 (_("%s: warning: Empty loadable segment detected\n"),
3683 bfd_get_filename (ibfd));
3684
3685 m->count = 0;
3686 *pm = m;
3687 pm = &m->next;
3688
3689 continue;
3690 }
3691
3692 /* Now scan the sections in the input BFD again and attempt
3693 to add their corresponding output sections to the segment map.
3694 The problem here is how to handle an output section which has
3695 been moved (ie had its LMA changed). There are four possibilities:
3696
3697 1. None of the sections have been moved.
3698 In this case we can continue to use the segment LMA from the
3699 input BFD.
3700
3701 2. All of the sections have been moved by the same amount.
3702 In this case we can change the segment's LMA to match the LMA
3703 of the first section.
3704
3705 3. Some of the sections have been moved, others have not.
3706 In this case those sections which have not been moved can be
3707 placed in the current segment which will have to have its size,
3708 and possibly its LMA changed, and a new segment or segments will
3709 have to be created to contain the other sections.
3710
3711 4. The sections have been moved, but not be the same amount.
3712 In this case we can change the segment's LMA to match the LMA
3713 of the first section and we will have to create a new segment
3714 or segments to contain the other sections.
3715
3716 In order to save time, we allocate an array to hold the section
3717 pointers that we are interested in. As these sections get assigned
3718 to a segment, they are removed from this array. */
3719
3720 sections = (asection **) bfd_malloc (sizeof (asection *) * csecs);
3721 if (sections == NULL)
3722 return false;
3723
3724 /* Step One: Scan for segment vs section LMA conflicts.
3725 Also add the sections to the section array allocated above.
3726 Also add the sections to the current segment. In the common
3727 case, where the sections have not been moved, this means that
3728 we have completely filled the segment, and there is nothing
3729 more to do. */
3730
3731 isec = 0;
3732 matching_lma = false;
3733 suggested_lma = 0;
3734
3735 for (j = 0, s = ibfd->sections; s != NULL; s = s->next)
3736 {
3737 os = s->output_section;
3738
3739 if ((((IS_CONTAINED_BY (s->vma, s->_raw_size, p->p_vaddr, p)
3740 || IS_SOLARIS_PT_INTERP (p, s))
3741 && (s->flags & SEC_ALLOC) != 0)
3742 || IS_COREFILE_NOTE (p, s))
3743 && os != NULL)
3744 {
3745 sections[j++] = s;
3746
3747 /* The Solaris native linker always sets p_paddr to 0.
3748 We try to catch that case here, and set it to the
3749 correct value. */
3750 if (p->p_paddr == 0
3751 && p->p_vaddr != 0
3752 && isec == 0
3753 && os->lma != 0
3754 && (os->vma == (p->p_vaddr
3755 + (m->includes_filehdr
3756 ? iehdr->e_ehsize
3757 : 0)
3758 + (m->includes_phdrs
3759 ? iehdr->e_phnum * iehdr->e_phentsize
3760 : 0))))
3761 m->p_paddr = p->p_vaddr;
3762
3763 /* Match up the physical address of the segment with the
3764 LMA address of the output section. */
3765 if (IS_CONTAINED_BY (os->lma, os->_raw_size, m->p_paddr, p)
3766 || IS_COREFILE_NOTE (p, s))
3767 {
3768 if (matching_lma == 0)
3769 matching_lma = os->lma;
3770
3771 /* We assume that if the section fits within the segment
3772 that it does not overlap any other section within that
3773 segment. */
3774 m->sections[isec++] = os;
3775 }
3776 else if (suggested_lma == 0)
3777 suggested_lma = os->lma;
3778 }
3779 }
3780
3781 BFD_ASSERT (j == csecs);
3782
3783 /* Step Two: Adjust the physical address of the current segment,
3784 if necessary. */
3785 if (isec == csecs)
3786 {
3787 /* All of the sections fitted within the segment as currently
3788 specified. This is the default case. Add the segment to
3789 the list of built segments and carry on to process the next
3790 program header in the input BFD. */
3791 m->count = csecs;
3792 *pm = m;
3793 pm = &m->next;
3794
3795 free (sections);
3796 continue;
3797 }
3798 else if (matching_lma != 0)
3799 {
3800 /* At least one section fits inside the current segment.
3801 Keep it, but modify its physical address to match the
3802 LMA of the first section that fitted. */
3803
3804 m->p_paddr = matching_lma;
3805 }
3806 else
3807 {
3808 /* None of the sections fitted inside the current segment.
3809 Change the current segment's physical address to match
3810 the LMA of the first section. */
3811
3812 m->p_paddr = suggested_lma;
3813 }
3814
3815 /* Step Three: Loop over the sections again, this time assigning
3816 those that fit to the current segment and remvoing them from the
3817 sections array; but making sure not to leave large gaps. Once all
3818 possible sections have been assigned to the current segment it is
3819 added to the list of built segments and if sections still remain
3820 to be assigned, a new segment is constructed before repeating
3821 the loop. */
3822 isec = 0;
3823 do
3824 {
3825 m->count = 0;
3826 suggested_lma = 0;
3827
3828 /* Fill the current segment with sections that fit. */
3829 for (j = 0; j < csecs; j++)
3830 {
3831 s = sections[j];
3832
3833 if (s == NULL)
3834 continue;
3835
3836 os = s->output_section;
3837
3838 if (IS_CONTAINED_BY (os->lma, os->_raw_size, m->p_paddr, p)
3839 || IS_COREFILE_NOTE (p, s))
3840 {
3841 if (m->count == 0)
3842 {
3843 /* If the first section in a segment does not start at
3844 the beginning of the segment, then something is wrong. */
3845 if (os->lma != m->p_paddr)
3846 abort ();
3847 }
3848 else
3849 {
3850 asection * prev_sec;
3851 bfd_vma maxpagesize;
3852
3853 prev_sec = m->sections[m->count - 1];
3854 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
3855
3856 /* If the gap between the end of the previous section
3857 and the start of this section is more than maxpagesize
3858 then we need to start a new segment. */
3859 if (BFD_ALIGN (prev_sec->lma + prev_sec->_raw_size, maxpagesize)
3860 < BFD_ALIGN (os->lma, maxpagesize))
3861 {
3862 if (suggested_lma == 0)
3863 suggested_lma = os->lma;
3864
3865 continue;
3866 }
3867 }
3868
3869 m->sections[m->count++] = os;
3870 ++isec;
3871 sections[j] = NULL;
3872 }
3873 else if (suggested_lma == 0)
3874 suggested_lma = os->lma;
3875 }
3876
3877 BFD_ASSERT (m->count > 0);
3878
3879 /* Add the current segment to the list of built segments. */
3880 *pm = m;
3881 pm = &m->next;
3882
3883 if (isec < csecs)
3884 {
3885 /* We still have not allocated all of the sections to
3886 segments. Create a new segment here, initialise it
3887 and carry on looping. */
3888
3889 m = ((struct elf_segment_map *)
3890 bfd_alloc (obfd,
3891 (sizeof (struct elf_segment_map)
3892 + ((size_t) csecs - 1) * sizeof (asection *))));
3893 if (m == NULL)
3894 return false;
3895
3896 /* Initialise the fields of the segment map. Set the physical
3897 physical address to the LMA of the first section that has
3898 not yet been assigned. */
3899
3900 m->next = NULL;
3901 m->p_type = p->p_type;
3902 m->p_flags = p->p_flags;
3903 m->p_flags_valid = 1;
3904 m->p_paddr = suggested_lma;
3905 m->p_paddr_valid = 1;
3906 m->includes_filehdr = 0;
3907 m->includes_phdrs = 0;
3908 }
3909 }
3910 while (isec < csecs);
3911
3912 free (sections);
3913 }
3914
3915 /* The Solaris linker creates program headers in which all the
3916 p_paddr fields are zero. When we try to objcopy or strip such a
3917 file, we get confused. Check for this case, and if we find it
3918 reset the p_paddr_valid fields. */
3919 for (m = mfirst; m != NULL; m = m->next)
3920 if (m->p_paddr != 0)
3921 break;
3922 if (m == NULL)
3923 {
3924 for (m = mfirst; m != NULL; m = m->next)
3925 m->p_paddr_valid = 0;
3926 }
3927
3928 elf_tdata (obfd)->segment_map = mfirst;
3929
3930 #if 0
3931 /* Final Step: Sort the segments into ascending order of physical address. */
3932 if (mfirst != NULL)
3933 {
3934 struct elf_segment_map* prev;
3935
3936 prev = mfirst;
3937 for (m = mfirst->next; m != NULL; prev = m, m = m->next)
3938 {
3939 /* Yes I know - its a bubble sort....*/
3940 if (m->next != NULL && (m->next->p_paddr < m->p_paddr))
3941 {
3942 /* swap m and m->next */
3943 prev->next = m->next;
3944 m->next = m->next->next;
3945 prev->next->next = m;
3946
3947 /* restart loop. */
3948 m = mfirst;
3949 }
3950 }
3951 }
3952 #endif
3953
3954 #undef IS_CONTAINED_BY
3955 #undef IS_SOLARIS_PT_INTERP
3956 #undef IS_COREFILE_NOTE
3957 return true;
3958 }
3959
3960 /* Copy private section information. This copies over the entsize
3961 field, and sometimes the info field. */
3962
3963 boolean
3964 _bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
3965 bfd *ibfd;
3966 asection *isec;
3967 bfd *obfd;
3968 asection *osec;
3969 {
3970 Elf_Internal_Shdr *ihdr, *ohdr;
3971
3972 if (ibfd->xvec->flavour != bfd_target_elf_flavour
3973 || obfd->xvec->flavour != bfd_target_elf_flavour)
3974 return true;
3975
3976 /* Copy over private BFD data if it has not already been copied.
3977 This must be done here, rather than in the copy_private_bfd_data
3978 entry point, because the latter is called after the section
3979 contents have been set, which means that the program headers have
3980 already been worked out. */
3981 if (elf_tdata (obfd)->segment_map == NULL
3982 && elf_tdata (ibfd)->phdr != NULL)
3983 {
3984 asection *s;
3985
3986 /* Only set up the segments if there are no more SEC_ALLOC
3987 sections. FIXME: This won't do the right thing if objcopy is
3988 used to remove the last SEC_ALLOC section, since objcopy
3989 won't call this routine in that case. */
3990 for (s = isec->next; s != NULL; s = s->next)
3991 if ((s->flags & SEC_ALLOC) != 0)
3992 break;
3993 if (s == NULL)
3994 {
3995 if (! copy_private_bfd_data (ibfd, obfd))
3996 return false;
3997 }
3998 }
3999
4000 ihdr = &elf_section_data (isec)->this_hdr;
4001 ohdr = &elf_section_data (osec)->this_hdr;
4002
4003 ohdr->sh_entsize = ihdr->sh_entsize;
4004
4005 if (ihdr->sh_type == SHT_SYMTAB
4006 || ihdr->sh_type == SHT_DYNSYM
4007 || ihdr->sh_type == SHT_GNU_verneed
4008 || ihdr->sh_type == SHT_GNU_verdef)
4009 ohdr->sh_info = ihdr->sh_info;
4010
4011 elf_section_data (osec)->use_rela_p
4012 = elf_section_data (isec)->use_rela_p;
4013
4014 return true;
4015 }
4016
4017 /* Copy private symbol information. If this symbol is in a section
4018 which we did not map into a BFD section, try to map the section
4019 index correctly. We use special macro definitions for the mapped
4020 section indices; these definitions are interpreted by the
4021 swap_out_syms function. */
4022
4023 #define MAP_ONESYMTAB (SHN_LORESERVE - 1)
4024 #define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
4025 #define MAP_STRTAB (SHN_LORESERVE - 3)
4026 #define MAP_SHSTRTAB (SHN_LORESERVE - 4)
4027
4028 boolean
4029 _bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
4030 bfd *ibfd;
4031 asymbol *isymarg;
4032 bfd *obfd;
4033 asymbol *osymarg;
4034 {
4035 elf_symbol_type *isym, *osym;
4036
4037 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4038 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4039 return true;
4040
4041 isym = elf_symbol_from (ibfd, isymarg);
4042 osym = elf_symbol_from (obfd, osymarg);
4043
4044 if (isym != NULL
4045 && osym != NULL
4046 && bfd_is_abs_section (isym->symbol.section))
4047 {
4048 unsigned int shndx;
4049
4050 shndx = isym->internal_elf_sym.st_shndx;
4051 if (shndx == elf_onesymtab (ibfd))
4052 shndx = MAP_ONESYMTAB;
4053 else if (shndx == elf_dynsymtab (ibfd))
4054 shndx = MAP_DYNSYMTAB;
4055 else if (shndx == elf_tdata (ibfd)->strtab_section)
4056 shndx = MAP_STRTAB;
4057 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
4058 shndx = MAP_SHSTRTAB;
4059 osym->internal_elf_sym.st_shndx = shndx;
4060 }
4061
4062 return true;
4063 }
4064
4065 /* Swap out the symbols. */
4066
4067 static boolean
4068 swap_out_syms (abfd, sttp, relocatable_p)
4069 bfd *abfd;
4070 struct bfd_strtab_hash **sttp;
4071 int relocatable_p;
4072 {
4073 struct elf_backend_data *bed = get_elf_backend_data (abfd);
4074
4075 if (!elf_map_symbols (abfd))
4076 return false;
4077
4078 /* Dump out the symtabs. */
4079 {
4080 int symcount = bfd_get_symcount (abfd);
4081 asymbol **syms = bfd_get_outsymbols (abfd);
4082 struct bfd_strtab_hash *stt;
4083 Elf_Internal_Shdr *symtab_hdr;
4084 Elf_Internal_Shdr *symstrtab_hdr;
4085 char *outbound_syms;
4086 int idx;
4087
4088 stt = _bfd_elf_stringtab_init ();
4089 if (stt == NULL)
4090 return false;
4091
4092 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4093 symtab_hdr->sh_type = SHT_SYMTAB;
4094 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
4095 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
4096 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
4097 symtab_hdr->sh_addralign = bed->s->file_align;
4098
4099 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
4100 symstrtab_hdr->sh_type = SHT_STRTAB;
4101
4102 outbound_syms = bfd_alloc (abfd,
4103 (1 + symcount) * bed->s->sizeof_sym);
4104 if (outbound_syms == NULL)
4105 return false;
4106 symtab_hdr->contents = (PTR) outbound_syms;
4107
4108 /* now generate the data (for "contents") */
4109 {
4110 /* Fill in zeroth symbol and swap it out. */
4111 Elf_Internal_Sym sym;
4112 sym.st_name = 0;
4113 sym.st_value = 0;
4114 sym.st_size = 0;
4115 sym.st_info = 0;
4116 sym.st_other = 0;
4117 sym.st_shndx = SHN_UNDEF;
4118 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
4119 outbound_syms += bed->s->sizeof_sym;
4120 }
4121 for (idx = 0; idx < symcount; idx++)
4122 {
4123 Elf_Internal_Sym sym;
4124 bfd_vma value = syms[idx]->value;
4125 elf_symbol_type *type_ptr;
4126 flagword flags = syms[idx]->flags;
4127 int type;
4128
4129 if (flags & BSF_SECTION_SYM)
4130 /* Section symbols have no names. */
4131 sym.st_name = 0;
4132 else
4133 {
4134 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
4135 syms[idx]->name,
4136 true, false);
4137 if (sym.st_name == (unsigned long) -1)
4138 return false;
4139 }
4140
4141 type_ptr = elf_symbol_from (abfd, syms[idx]);
4142
4143 if ((flags & BSF_SECTION_SYM) == 0
4144 && bfd_is_com_section (syms[idx]->section))
4145 {
4146 /* ELF common symbols put the alignment into the `value' field,
4147 and the size into the `size' field. This is backwards from
4148 how BFD handles it, so reverse it here. */
4149 sym.st_size = value;
4150 if (type_ptr == NULL
4151 || type_ptr->internal_elf_sym.st_value == 0)
4152 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
4153 else
4154 sym.st_value = type_ptr->internal_elf_sym.st_value;
4155 sym.st_shndx = _bfd_elf_section_from_bfd_section
4156 (abfd, syms[idx]->section);
4157 }
4158 else
4159 {
4160 asection *sec = syms[idx]->section;
4161 int shndx;
4162
4163 if (sec->output_section)
4164 {
4165 value += sec->output_offset;
4166 sec = sec->output_section;
4167 }
4168 /* Don't add in the section vma for relocatable output. */
4169 if (! relocatable_p)
4170 value += sec->vma;
4171 sym.st_value = value;
4172 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
4173
4174 if (bfd_is_abs_section (sec)
4175 && type_ptr != NULL
4176 && type_ptr->internal_elf_sym.st_shndx != 0)
4177 {
4178 /* This symbol is in a real ELF section which we did
4179 not create as a BFD section. Undo the mapping done
4180 by copy_private_symbol_data. */
4181 shndx = type_ptr->internal_elf_sym.st_shndx;
4182 switch (shndx)
4183 {
4184 case MAP_ONESYMTAB:
4185 shndx = elf_onesymtab (abfd);
4186 break;
4187 case MAP_DYNSYMTAB:
4188 shndx = elf_dynsymtab (abfd);
4189 break;
4190 case MAP_STRTAB:
4191 shndx = elf_tdata (abfd)->strtab_section;
4192 break;
4193 case MAP_SHSTRTAB:
4194 shndx = elf_tdata (abfd)->shstrtab_section;
4195 break;
4196 default:
4197 break;
4198 }
4199 }
4200 else
4201 {
4202 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
4203
4204 if (shndx == -1)
4205 {
4206 asection *sec2;
4207
4208 /* Writing this would be a hell of a lot easier if
4209 we had some decent documentation on bfd, and
4210 knew what to expect of the library, and what to
4211 demand of applications. For example, it
4212 appears that `objcopy' might not set the
4213 section of a symbol to be a section that is
4214 actually in the output file. */
4215 sec2 = bfd_get_section_by_name (abfd, sec->name);
4216 BFD_ASSERT (sec2 != 0);
4217 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
4218 BFD_ASSERT (shndx != -1);
4219 }
4220 }
4221
4222 sym.st_shndx = shndx;
4223 }
4224
4225 if ((flags & BSF_FUNCTION) != 0)
4226 type = STT_FUNC;
4227 else if ((flags & BSF_OBJECT) != 0)
4228 type = STT_OBJECT;
4229 else
4230 type = STT_NOTYPE;
4231
4232 /* Processor-specific types */
4233 if (type_ptr != NULL
4234 && bed->elf_backend_get_symbol_type)
4235 type = (*bed->elf_backend_get_symbol_type) (&type_ptr->internal_elf_sym, type);
4236
4237 if (flags & BSF_SECTION_SYM)
4238 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
4239 else if (bfd_is_com_section (syms[idx]->section))
4240 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
4241 else if (bfd_is_und_section (syms[idx]->section))
4242 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
4243 ? STB_WEAK
4244 : STB_GLOBAL),
4245 type);
4246 else if (flags & BSF_FILE)
4247 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
4248 else
4249 {
4250 int bind = STB_LOCAL;
4251
4252 if (flags & BSF_LOCAL)
4253 bind = STB_LOCAL;
4254 else if (flags & BSF_WEAK)
4255 bind = STB_WEAK;
4256 else if (flags & BSF_GLOBAL)
4257 bind = STB_GLOBAL;
4258
4259 sym.st_info = ELF_ST_INFO (bind, type);
4260 }
4261
4262 if (type_ptr != NULL)
4263 sym.st_other = type_ptr->internal_elf_sym.st_other;
4264 else
4265 sym.st_other = 0;
4266
4267 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
4268 outbound_syms += bed->s->sizeof_sym;
4269 }
4270
4271 *sttp = stt;
4272 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
4273 symstrtab_hdr->sh_type = SHT_STRTAB;
4274
4275 symstrtab_hdr->sh_flags = 0;
4276 symstrtab_hdr->sh_addr = 0;
4277 symstrtab_hdr->sh_entsize = 0;
4278 symstrtab_hdr->sh_link = 0;
4279 symstrtab_hdr->sh_info = 0;
4280 symstrtab_hdr->sh_addralign = 1;
4281 }
4282
4283 return true;
4284 }
4285
4286 /* Return the number of bytes required to hold the symtab vector.
4287
4288 Note that we base it on the count plus 1, since we will null terminate
4289 the vector allocated based on this size. However, the ELF symbol table
4290 always has a dummy entry as symbol #0, so it ends up even. */
4291
4292 long
4293 _bfd_elf_get_symtab_upper_bound (abfd)
4294 bfd *abfd;
4295 {
4296 long symcount;
4297 long symtab_size;
4298 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
4299
4300 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4301 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4302
4303 return symtab_size;
4304 }
4305
4306 long
4307 _bfd_elf_get_dynamic_symtab_upper_bound (abfd)
4308 bfd *abfd;
4309 {
4310 long symcount;
4311 long symtab_size;
4312 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4313
4314 if (elf_dynsymtab (abfd) == 0)
4315 {
4316 bfd_set_error (bfd_error_invalid_operation);
4317 return -1;
4318 }
4319
4320 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4321 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4322
4323 return symtab_size;
4324 }
4325
4326 long
4327 _bfd_elf_get_reloc_upper_bound (abfd, asect)
4328 bfd *abfd ATTRIBUTE_UNUSED;
4329 sec_ptr asect;
4330 {
4331 return (asect->reloc_count + 1) * sizeof (arelent *);
4332 }
4333
4334 /* Canonicalize the relocs. */
4335
4336 long
4337 _bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
4338 bfd *abfd;
4339 sec_ptr section;
4340 arelent **relptr;
4341 asymbol **symbols;
4342 {
4343 arelent *tblptr;
4344 unsigned int i;
4345
4346 if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd,
4347 section,
4348 symbols,
4349 false))
4350 return -1;
4351
4352 tblptr = section->relocation;
4353 for (i = 0; i < section->reloc_count; i++)
4354 *relptr++ = tblptr++;
4355
4356 *relptr = NULL;
4357
4358 return section->reloc_count;
4359 }
4360
4361 long
4362 _bfd_elf_get_symtab (abfd, alocation)
4363 bfd *abfd;
4364 asymbol **alocation;
4365 {
4366 long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table
4367 (abfd, alocation, false);
4368
4369 if (symcount >= 0)
4370 bfd_get_symcount (abfd) = symcount;
4371 return symcount;
4372 }
4373
4374 long
4375 _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
4376 bfd *abfd;
4377 asymbol **alocation;
4378 {
4379 return get_elf_backend_data (abfd)->s->slurp_symbol_table
4380 (abfd, alocation, true);
4381 }
4382
4383 /* Return the size required for the dynamic reloc entries. Any
4384 section that was actually installed in the BFD, and has type
4385 SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
4386 considered to be a dynamic reloc section. */
4387
4388 long
4389 _bfd_elf_get_dynamic_reloc_upper_bound (abfd)
4390 bfd *abfd;
4391 {
4392 long ret;
4393 asection *s;
4394
4395 if (elf_dynsymtab (abfd) == 0)
4396 {
4397 bfd_set_error (bfd_error_invalid_operation);
4398 return -1;
4399 }
4400
4401 ret = sizeof (arelent *);
4402 for (s = abfd->sections; s != NULL; s = s->next)
4403 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4404 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4405 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4406 ret += ((s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize)
4407 * sizeof (arelent *));
4408
4409 return ret;
4410 }
4411
4412 /* Canonicalize the dynamic relocation entries. Note that we return
4413 the dynamic relocations as a single block, although they are
4414 actually associated with particular sections; the interface, which
4415 was designed for SunOS style shared libraries, expects that there
4416 is only one set of dynamic relocs. Any section that was actually
4417 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
4418 the dynamic symbol table, is considered to be a dynamic reloc
4419 section. */
4420
4421 long
4422 _bfd_elf_canonicalize_dynamic_reloc (abfd, storage, syms)
4423 bfd *abfd;
4424 arelent **storage;
4425 asymbol **syms;
4426 {
4427 boolean (*slurp_relocs) PARAMS ((bfd *, asection *, asymbol **, boolean));
4428 asection *s;
4429 long ret;
4430
4431 if (elf_dynsymtab (abfd) == 0)
4432 {
4433 bfd_set_error (bfd_error_invalid_operation);
4434 return -1;
4435 }
4436
4437 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
4438 ret = 0;
4439 for (s = abfd->sections; s != NULL; s = s->next)
4440 {
4441 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4442 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4443 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4444 {
4445 arelent *p;
4446 long count, i;
4447
4448 if (! (*slurp_relocs) (abfd, s, syms, true))
4449 return -1;
4450 count = s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize;
4451 p = s->relocation;
4452 for (i = 0; i < count; i++)
4453 *storage++ = p++;
4454 ret += count;
4455 }
4456 }
4457
4458 *storage = NULL;
4459
4460 return ret;
4461 }
4462 \f
4463 /* Read in the version information. */
4464
4465 boolean
4466 _bfd_elf_slurp_version_tables (abfd)
4467 bfd *abfd;
4468 {
4469 bfd_byte *contents = NULL;
4470
4471 if (elf_dynverdef (abfd) != 0)
4472 {
4473 Elf_Internal_Shdr *hdr;
4474 Elf_External_Verdef *everdef;
4475 Elf_Internal_Verdef *iverdef;
4476 unsigned int i;
4477
4478 hdr = &elf_tdata (abfd)->dynverdef_hdr;
4479
4480 elf_tdata (abfd)->verdef =
4481 ((Elf_Internal_Verdef *)
4482 bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verdef)));
4483 if (elf_tdata (abfd)->verdef == NULL)
4484 goto error_return;
4485
4486 elf_tdata (abfd)->cverdefs = hdr->sh_info;
4487
4488 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4489 if (contents == NULL)
4490 goto error_return;
4491 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4492 || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4493 goto error_return;
4494
4495 everdef = (Elf_External_Verdef *) contents;
4496 iverdef = elf_tdata (abfd)->verdef;
4497 for (i = 0; i < hdr->sh_info; i++, iverdef++)
4498 {
4499 Elf_External_Verdaux *everdaux;
4500 Elf_Internal_Verdaux *iverdaux;
4501 unsigned int j;
4502
4503 _bfd_elf_swap_verdef_in (abfd, everdef, iverdef);
4504
4505 iverdef->vd_bfd = abfd;
4506
4507 iverdef->vd_auxptr = ((Elf_Internal_Verdaux *)
4508 bfd_alloc (abfd,
4509 (iverdef->vd_cnt
4510 * sizeof (Elf_Internal_Verdaux))));
4511 if (iverdef->vd_auxptr == NULL)
4512 goto error_return;
4513
4514 everdaux = ((Elf_External_Verdaux *)
4515 ((bfd_byte *) everdef + iverdef->vd_aux));
4516 iverdaux = iverdef->vd_auxptr;
4517 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
4518 {
4519 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
4520
4521 iverdaux->vda_nodename =
4522 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4523 iverdaux->vda_name);
4524 if (iverdaux->vda_nodename == NULL)
4525 goto error_return;
4526
4527 if (j + 1 < iverdef->vd_cnt)
4528 iverdaux->vda_nextptr = iverdaux + 1;
4529 else
4530 iverdaux->vda_nextptr = NULL;
4531
4532 everdaux = ((Elf_External_Verdaux *)
4533 ((bfd_byte *) everdaux + iverdaux->vda_next));
4534 }
4535
4536 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
4537
4538 if (i + 1 < hdr->sh_info)
4539 iverdef->vd_nextdef = iverdef + 1;
4540 else
4541 iverdef->vd_nextdef = NULL;
4542
4543 everdef = ((Elf_External_Verdef *)
4544 ((bfd_byte *) everdef + iverdef->vd_next));
4545 }
4546
4547 free (contents);
4548 contents = NULL;
4549 }
4550
4551 if (elf_dynverref (abfd) != 0)
4552 {
4553 Elf_Internal_Shdr *hdr;
4554 Elf_External_Verneed *everneed;
4555 Elf_Internal_Verneed *iverneed;
4556 unsigned int i;
4557
4558 hdr = &elf_tdata (abfd)->dynverref_hdr;
4559
4560 elf_tdata (abfd)->verref =
4561 ((Elf_Internal_Verneed *)
4562 bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verneed)));
4563 if (elf_tdata (abfd)->verref == NULL)
4564 goto error_return;
4565
4566 elf_tdata (abfd)->cverrefs = hdr->sh_info;
4567
4568 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4569 if (contents == NULL)
4570 goto error_return;
4571 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4572 || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4573 goto error_return;
4574
4575 everneed = (Elf_External_Verneed *) contents;
4576 iverneed = elf_tdata (abfd)->verref;
4577 for (i = 0; i < hdr->sh_info; i++, iverneed++)
4578 {
4579 Elf_External_Vernaux *evernaux;
4580 Elf_Internal_Vernaux *ivernaux;
4581 unsigned int j;
4582
4583 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
4584
4585 iverneed->vn_bfd = abfd;
4586
4587 iverneed->vn_filename =
4588 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4589 iverneed->vn_file);
4590 if (iverneed->vn_filename == NULL)
4591 goto error_return;
4592
4593 iverneed->vn_auxptr =
4594 ((Elf_Internal_Vernaux *)
4595 bfd_alloc (abfd,
4596 iverneed->vn_cnt * sizeof (Elf_Internal_Vernaux)));
4597
4598 evernaux = ((Elf_External_Vernaux *)
4599 ((bfd_byte *) everneed + iverneed->vn_aux));
4600 ivernaux = iverneed->vn_auxptr;
4601 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
4602 {
4603 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
4604
4605 ivernaux->vna_nodename =
4606 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4607 ivernaux->vna_name);
4608 if (ivernaux->vna_nodename == NULL)
4609 goto error_return;
4610
4611 if (j + 1 < iverneed->vn_cnt)
4612 ivernaux->vna_nextptr = ivernaux + 1;
4613 else
4614 ivernaux->vna_nextptr = NULL;
4615
4616 evernaux = ((Elf_External_Vernaux *)
4617 ((bfd_byte *) evernaux + ivernaux->vna_next));
4618 }
4619
4620 if (i + 1 < hdr->sh_info)
4621 iverneed->vn_nextref = iverneed + 1;
4622 else
4623 iverneed->vn_nextref = NULL;
4624
4625 everneed = ((Elf_External_Verneed *)
4626 ((bfd_byte *) everneed + iverneed->vn_next));
4627 }
4628
4629 free (contents);
4630 contents = NULL;
4631 }
4632
4633 return true;
4634
4635 error_return:
4636 if (contents == NULL)
4637 free (contents);
4638 return false;
4639 }
4640 \f
4641 asymbol *
4642 _bfd_elf_make_empty_symbol (abfd)
4643 bfd *abfd;
4644 {
4645 elf_symbol_type *newsym;
4646
4647 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
4648 if (!newsym)
4649 return NULL;
4650 else
4651 {
4652 newsym->symbol.the_bfd = abfd;
4653 return &newsym->symbol;
4654 }
4655 }
4656
4657 void
4658 _bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
4659 bfd *ignore_abfd ATTRIBUTE_UNUSED;
4660 asymbol *symbol;
4661 symbol_info *ret;
4662 {
4663 bfd_symbol_info (symbol, ret);
4664 }
4665
4666 /* Return whether a symbol name implies a local symbol. Most targets
4667 use this function for the is_local_label_name entry point, but some
4668 override it. */
4669
4670 boolean
4671 _bfd_elf_is_local_label_name (abfd, name)
4672 bfd *abfd ATTRIBUTE_UNUSED;
4673 const char *name;
4674 {
4675 /* Normal local symbols start with ``.L''. */
4676 if (name[0] == '.' && name[1] == 'L')
4677 return true;
4678
4679 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
4680 DWARF debugging symbols starting with ``..''. */
4681 if (name[0] == '.' && name[1] == '.')
4682 return true;
4683
4684 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
4685 emitting DWARF debugging output. I suspect this is actually a
4686 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
4687 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
4688 underscore to be emitted on some ELF targets). For ease of use,
4689 we treat such symbols as local. */
4690 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
4691 return true;
4692
4693 return false;
4694 }
4695
4696 alent *
4697 _bfd_elf_get_lineno (ignore_abfd, symbol)
4698 bfd *ignore_abfd ATTRIBUTE_UNUSED;
4699 asymbol *symbol ATTRIBUTE_UNUSED;
4700 {
4701 abort ();
4702 return NULL;
4703 }
4704
4705 boolean
4706 _bfd_elf_set_arch_mach (abfd, arch, machine)
4707 bfd *abfd;
4708 enum bfd_architecture arch;
4709 unsigned long machine;
4710 {
4711 /* If this isn't the right architecture for this backend, and this
4712 isn't the generic backend, fail. */
4713 if (arch != get_elf_backend_data (abfd)->arch
4714 && arch != bfd_arch_unknown
4715 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
4716 return false;
4717
4718 return bfd_default_set_arch_mach (abfd, arch, machine);
4719 }
4720
4721 /* Find the nearest line to a particular section and offset, for error
4722 reporting. */
4723
4724 boolean
4725 _bfd_elf_find_nearest_line (abfd,
4726 section,
4727 symbols,
4728 offset,
4729 filename_ptr,
4730 functionname_ptr,
4731 line_ptr)
4732 bfd *abfd;
4733 asection *section;
4734 asymbol **symbols;
4735 bfd_vma offset;
4736 CONST char **filename_ptr;
4737 CONST char **functionname_ptr;
4738 unsigned int *line_ptr;
4739 {
4740 boolean found;
4741 const char *filename;
4742 asymbol *func;
4743 bfd_vma low_func;
4744 asymbol **p;
4745
4746 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
4747 filename_ptr, functionname_ptr,
4748 line_ptr))
4749 return true;
4750
4751 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
4752 filename_ptr, functionname_ptr,
4753 line_ptr, 0))
4754 return true;
4755
4756 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
4757 &found, filename_ptr,
4758 functionname_ptr, line_ptr,
4759 &elf_tdata (abfd)->line_info))
4760 return false;
4761 if (found)
4762 return true;
4763
4764 if (symbols == NULL)
4765 return false;
4766
4767 filename = NULL;
4768 func = NULL;
4769 low_func = 0;
4770
4771 for (p = symbols; *p != NULL; p++)
4772 {
4773 elf_symbol_type *q;
4774
4775 q = (elf_symbol_type *) *p;
4776
4777 if (bfd_get_section (&q->symbol) != section)
4778 continue;
4779
4780 switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
4781 {
4782 default:
4783 break;
4784 case STT_FILE:
4785 filename = bfd_asymbol_name (&q->symbol);
4786 break;
4787 case STT_NOTYPE:
4788 case STT_FUNC:
4789 if (q->symbol.section == section
4790 && q->symbol.value >= low_func
4791 && q->symbol.value <= offset)
4792 {
4793 func = (asymbol *) q;
4794 low_func = q->symbol.value;
4795 }
4796 break;
4797 }
4798 }
4799
4800 if (func == NULL)
4801 return false;
4802
4803 *filename_ptr = filename;
4804 *functionname_ptr = bfd_asymbol_name (func);
4805 *line_ptr = 0;
4806 return true;
4807 }
4808
4809 int
4810 _bfd_elf_sizeof_headers (abfd, reloc)
4811 bfd *abfd;
4812 boolean reloc;
4813 {
4814 int ret;
4815
4816 ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
4817 if (! reloc)
4818 ret += get_program_header_size (abfd);
4819 return ret;
4820 }
4821
4822 boolean
4823 _bfd_elf_set_section_contents (abfd, section, location, offset, count)
4824 bfd *abfd;
4825 sec_ptr section;
4826 PTR location;
4827 file_ptr offset;
4828 bfd_size_type count;
4829 {
4830 Elf_Internal_Shdr *hdr;
4831
4832 if (! abfd->output_has_begun
4833 && ! _bfd_elf_compute_section_file_positions
4834 (abfd, (struct bfd_link_info *) NULL))
4835 return false;
4836
4837 hdr = &elf_section_data (section)->this_hdr;
4838
4839 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
4840 return false;
4841 if (bfd_write (location, 1, count, abfd) != count)
4842 return false;
4843
4844 return true;
4845 }
4846
4847 void
4848 _bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
4849 bfd *abfd ATTRIBUTE_UNUSED;
4850 arelent *cache_ptr ATTRIBUTE_UNUSED;
4851 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED;
4852 {
4853 abort ();
4854 }
4855
4856 #if 0
4857 void
4858 _bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
4859 bfd *abfd;
4860 arelent *cache_ptr;
4861 Elf_Internal_Rel *dst;
4862 {
4863 abort ();
4864 }
4865 #endif
4866
4867 /* Try to convert a non-ELF reloc into an ELF one. */
4868
4869 boolean
4870 _bfd_elf_validate_reloc (abfd, areloc)
4871 bfd *abfd;
4872 arelent *areloc;
4873 {
4874 /* Check whether we really have an ELF howto. */
4875
4876 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
4877 {
4878 bfd_reloc_code_real_type code;
4879 reloc_howto_type *howto;
4880
4881 /* Alien reloc: Try to determine its type to replace it with an
4882 equivalent ELF reloc. */
4883
4884 if (areloc->howto->pc_relative)
4885 {
4886 switch (areloc->howto->bitsize)
4887 {
4888 case 8:
4889 code = BFD_RELOC_8_PCREL;
4890 break;
4891 case 12:
4892 code = BFD_RELOC_12_PCREL;
4893 break;
4894 case 16:
4895 code = BFD_RELOC_16_PCREL;
4896 break;
4897 case 24:
4898 code = BFD_RELOC_24_PCREL;
4899 break;
4900 case 32:
4901 code = BFD_RELOC_32_PCREL;
4902 break;
4903 case 64:
4904 code = BFD_RELOC_64_PCREL;
4905 break;
4906 default:
4907 goto fail;
4908 }
4909
4910 howto = bfd_reloc_type_lookup (abfd, code);
4911
4912 if (areloc->howto->pcrel_offset != howto->pcrel_offset)
4913 {
4914 if (howto->pcrel_offset)
4915 areloc->addend += areloc->address;
4916 else
4917 areloc->addend -= areloc->address; /* addend is unsigned!! */
4918 }
4919 }
4920 else
4921 {
4922 switch (areloc->howto->bitsize)
4923 {
4924 case 8:
4925 code = BFD_RELOC_8;
4926 break;
4927 case 14:
4928 code = BFD_RELOC_14;
4929 break;
4930 case 16:
4931 code = BFD_RELOC_16;
4932 break;
4933 case 26:
4934 code = BFD_RELOC_26;
4935 break;
4936 case 32:
4937 code = BFD_RELOC_32;
4938 break;
4939 case 64:
4940 code = BFD_RELOC_64;
4941 break;
4942 default:
4943 goto fail;
4944 }
4945
4946 howto = bfd_reloc_type_lookup (abfd, code);
4947 }
4948
4949 if (howto)
4950 areloc->howto = howto;
4951 else
4952 goto fail;
4953 }
4954
4955 return true;
4956
4957 fail:
4958 (*_bfd_error_handler)
4959 (_("%s: unsupported relocation type %s"),
4960 bfd_get_filename (abfd), areloc->howto->name);
4961 bfd_set_error (bfd_error_bad_value);
4962 return false;
4963 }
4964
4965 boolean
4966 _bfd_elf_close_and_cleanup (abfd)
4967 bfd *abfd;
4968 {
4969 if (bfd_get_format (abfd) == bfd_object)
4970 {
4971 if (elf_shstrtab (abfd) != NULL)
4972 _bfd_stringtab_free (elf_shstrtab (abfd));
4973 }
4974
4975 return _bfd_generic_close_and_cleanup (abfd);
4976 }
4977
4978 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
4979 in the relocation's offset. Thus we cannot allow any sort of sanity
4980 range-checking to interfere. There is nothing else to do in processing
4981 this reloc. */
4982
4983 bfd_reloc_status_type
4984 _bfd_elf_rel_vtable_reloc_fn (abfd, re, symbol, data, is, obfd, errmsg)
4985 bfd *abfd ATTRIBUTE_UNUSED;
4986 arelent *re ATTRIBUTE_UNUSED;
4987 struct symbol_cache_entry *symbol ATTRIBUTE_UNUSED;
4988 PTR data ATTRIBUTE_UNUSED;
4989 asection *is ATTRIBUTE_UNUSED;
4990 bfd *obfd ATTRIBUTE_UNUSED;
4991 char **errmsg ATTRIBUTE_UNUSED;
4992 {
4993 return bfd_reloc_ok;
4994 }
4995
4996 \f
4997 /* Elf core file support. Much of this only works on native
4998 toolchains, since we rely on knowing the
4999 machine-dependent procfs structure in order to pick
5000 out details about the corefile. */
5001
5002 #ifdef HAVE_SYS_PROCFS_H
5003 # include <sys/procfs.h>
5004 #endif
5005
5006
5007 /* Define offsetof for those systems which lack it. */
5008
5009 #ifndef offsetof
5010 # define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
5011 #endif
5012
5013
5014 /* FIXME: this is kinda wrong, but it's what gdb wants. */
5015
5016 static int
5017 elfcore_make_pid (abfd)
5018 bfd* abfd;
5019 {
5020 return ((elf_tdata (abfd)->core_lwpid << 16)
5021 + (elf_tdata (abfd)->core_pid));
5022 }
5023
5024
5025 /* If there isn't a section called NAME, make one, using
5026 data from SECT. Note, this function will generate a
5027 reference to NAME, so you shouldn't deallocate or
5028 overwrite it. */
5029
5030 static boolean
5031 elfcore_maybe_make_sect (abfd, name, sect)
5032 bfd* abfd;
5033 char* name;
5034 asection* sect;
5035 {
5036 asection* sect2;
5037
5038 if (bfd_get_section_by_name (abfd, name) != NULL)
5039 return true;
5040
5041 sect2 = bfd_make_section (abfd, name);
5042 if (sect2 == NULL)
5043 return false;
5044
5045 sect2->_raw_size = sect->_raw_size;
5046 sect2->filepos = sect->filepos;
5047 sect2->flags = sect->flags;
5048 sect2->alignment_power = sect->alignment_power;
5049 return true;
5050 }
5051
5052
5053 /* prstatus_t exists on:
5054 solaris 2.[567]
5055 linux 2.[01] + glibc
5056 unixware 4.2
5057 */
5058
5059 #if defined (HAVE_PRSTATUS_T)
5060 static boolean
5061 elfcore_grok_prstatus (abfd, note)
5062 bfd* abfd;
5063 Elf_Internal_Note* note;
5064 {
5065 prstatus_t prstat;
5066 char buf[100];
5067 char* name;
5068 asection* sect;
5069
5070 if (note->descsz != sizeof (prstat))
5071 return true;
5072
5073 memcpy (&prstat, note->descdata, sizeof (prstat));
5074
5075 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
5076 elf_tdata (abfd)->core_pid = prstat.pr_pid;
5077
5078 /* pr_who exists on:
5079 solaris 2.[567]
5080 unixware 4.2
5081 pr_who doesn't exist on:
5082 linux 2.[01]
5083 */
5084 #if defined (HAVE_PRSTATUS_T_PR_WHO)
5085 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
5086 #endif
5087
5088 /* Make a ".reg/999" section. */
5089
5090 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5091 name = bfd_alloc (abfd, strlen (buf) + 1);
5092 if (name == NULL)
5093 return false;
5094 strcpy (name, buf);
5095
5096 sect = bfd_make_section (abfd, name);
5097 if (sect == NULL)
5098 return false;
5099 sect->_raw_size = sizeof (prstat.pr_reg);
5100 sect->filepos = note->descpos + offsetof (prstatus_t, pr_reg);
5101 sect->flags = SEC_HAS_CONTENTS;
5102 sect->alignment_power = 2;
5103
5104 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5105 return false;
5106
5107 return true;
5108 }
5109 #endif /* defined (HAVE_PRSTATUS_T) */
5110
5111
5112 /* Create a pseudosection containing the exact contents of NOTE. This
5113 actually creates up to two pseudosections:
5114 - For the single-threaded case, a section named NAME, unless
5115 such a section already exists.
5116 - For the multi-threaded case, a section named "NAME/PID", where
5117 PID is elfcore_make_pid (abfd).
5118 Both pseudosections have identical contents: the contents of NOTE. */
5119
5120 static boolean
5121 elfcore_make_note_pseudosection (abfd, name, note)
5122 bfd* abfd;
5123 char *name;
5124 Elf_Internal_Note* note;
5125 {
5126 char buf[100];
5127 char *threaded_name;
5128 asection* sect;
5129
5130 /* Build the section name. */
5131
5132 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
5133 threaded_name = bfd_alloc (abfd, strlen (buf) + 1);
5134 if (threaded_name == NULL)
5135 return false;
5136 strcpy (threaded_name, buf);
5137
5138 sect = bfd_make_section (abfd, threaded_name);
5139 if (sect == NULL)
5140 return false;
5141 sect->_raw_size = note->descsz;
5142 sect->filepos = note->descpos;
5143 sect->flags = SEC_HAS_CONTENTS;
5144 sect->alignment_power = 2;
5145
5146 if (! elfcore_maybe_make_sect (abfd, name, sect))
5147 return false;
5148
5149 return true;
5150 }
5151
5152
5153 /* There isn't a consistent prfpregset_t across platforms,
5154 but it doesn't matter, because we don't have to pick this
5155 data structure apart. */
5156 static boolean
5157 elfcore_grok_prfpreg (abfd, note)
5158 bfd* abfd;
5159 Elf_Internal_Note* note;
5160 {
5161 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
5162 }
5163
5164
5165 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
5166 type of 5 (NT_PRXFPREG). Just include the whole note's contents
5167 literally. */
5168 static boolean
5169 elfcore_grok_prxfpreg (abfd, note)
5170 bfd* abfd;
5171 Elf_Internal_Note* note;
5172 {
5173 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
5174 }
5175
5176
5177 #if defined (HAVE_PRPSINFO_T)
5178 # define elfcore_psinfo_t prpsinfo_t
5179 #endif
5180
5181 #if defined (HAVE_PSINFO_T)
5182 # define elfcore_psinfo_t psinfo_t
5183 #endif
5184
5185
5186 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5187
5188 /* return a malloc'ed copy of a string at START which is at
5189 most MAX bytes long, possibly without a terminating '\0'.
5190 the copy will always have a terminating '\0'. */
5191
5192 static char*
5193 elfcore_strndup (abfd, start, max)
5194 bfd* abfd;
5195 char* start;
5196 int max;
5197 {
5198 char* dup;
5199 char* end = memchr (start, '\0', max);
5200 int len;
5201
5202 if (end == NULL)
5203 len = max;
5204 else
5205 len = end - start;
5206
5207 dup = bfd_alloc (abfd, len + 1);
5208 if (dup == NULL)
5209 return NULL;
5210
5211 memcpy (dup, start, len);
5212 dup[len] = '\0';
5213
5214 return dup;
5215 }
5216
5217 static boolean
5218 elfcore_grok_psinfo (abfd, note)
5219 bfd* abfd;
5220 Elf_Internal_Note* note;
5221 {
5222 elfcore_psinfo_t psinfo;
5223
5224 if (note->descsz != sizeof (elfcore_psinfo_t))
5225 return true;
5226
5227 memcpy (&psinfo, note->descdata, note->descsz);
5228
5229 elf_tdata (abfd)->core_program
5230 = elfcore_strndup (abfd, psinfo.pr_fname, sizeof (psinfo.pr_fname));
5231
5232 elf_tdata (abfd)->core_command
5233 = elfcore_strndup (abfd, psinfo.pr_psargs, sizeof (psinfo.pr_psargs));
5234
5235 /* Note that for some reason, a spurious space is tacked
5236 onto the end of the args in some (at least one anyway)
5237 implementations, so strip it off if it exists. */
5238
5239 {
5240 char* command = elf_tdata (abfd)->core_command;
5241 int n = strlen (command);
5242
5243 if (0 < n && command[n - 1] == ' ')
5244 command[n - 1] = '\0';
5245 }
5246
5247 return true;
5248 }
5249 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
5250
5251
5252 #if defined (HAVE_PSTATUS_T)
5253 static boolean
5254 elfcore_grok_pstatus (abfd, note)
5255 bfd* abfd;
5256 Elf_Internal_Note* note;
5257 {
5258 pstatus_t pstat;
5259
5260 if (note->descsz != sizeof (pstat))
5261 return true;
5262
5263 memcpy (&pstat, note->descdata, sizeof (pstat));
5264
5265 elf_tdata (abfd)->core_pid = pstat.pr_pid;
5266
5267 /* Could grab some more details from the "representative"
5268 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
5269 NT_LWPSTATUS note, presumably. */
5270
5271 return true;
5272 }
5273 #endif /* defined (HAVE_PSTATUS_T) */
5274
5275
5276 #if defined (HAVE_LWPSTATUS_T)
5277 static boolean
5278 elfcore_grok_lwpstatus (abfd, note)
5279 bfd* abfd;
5280 Elf_Internal_Note* note;
5281 {
5282 lwpstatus_t lwpstat;
5283 char buf[100];
5284 char* name;
5285 asection* sect;
5286
5287 if (note->descsz != sizeof (lwpstat))
5288 return true;
5289
5290 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
5291
5292 elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
5293 elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
5294
5295 /* Make a ".reg/999" section. */
5296
5297 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5298 name = bfd_alloc (abfd, strlen (buf) + 1);
5299 if (name == NULL)
5300 return false;
5301 strcpy (name, buf);
5302
5303 sect = bfd_make_section (abfd, name);
5304 if (sect == NULL)
5305 return false;
5306
5307 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5308 sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
5309 sect->filepos = note->descpos
5310 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
5311 #endif
5312
5313 #if defined (HAVE_LWPSTATUS_T_PR_REG)
5314 sect->_raw_size = sizeof (lwpstat.pr_reg);
5315 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
5316 #endif
5317
5318 sect->flags = SEC_HAS_CONTENTS;
5319 sect->alignment_power = 2;
5320
5321 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
5322 return false;
5323
5324 /* Make a ".reg2/999" section */
5325
5326 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
5327 name = bfd_alloc (abfd, strlen (buf) + 1);
5328 if (name == NULL)
5329 return false;
5330 strcpy (name, buf);
5331
5332 sect = bfd_make_section (abfd, name);
5333 if (sect == NULL)
5334 return false;
5335
5336 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5337 sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
5338 sect->filepos = note->descpos
5339 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
5340 #endif
5341
5342 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
5343 sect->_raw_size = sizeof (lwpstat.pr_fpreg);
5344 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
5345 #endif
5346
5347 sect->flags = SEC_HAS_CONTENTS;
5348 sect->alignment_power = 2;
5349
5350 if (!elfcore_maybe_make_sect (abfd, ".reg2", sect))
5351 return false;
5352
5353 return true;
5354 }
5355 #endif /* defined (HAVE_LWPSTATUS_T) */
5356
5357 #if defined (HAVE_WIN32_PSTATUS_T)
5358 static boolean
5359 elfcore_grok_win32pstatus (abfd, note)
5360 bfd * abfd;
5361 Elf_Internal_Note * note;
5362 {
5363 char buf[30];
5364 char * name;
5365 asection * sect;
5366 win32_pstatus_t pstatus;
5367
5368 if (note->descsz < sizeof (pstatus))
5369 return true;
5370
5371 memcpy (& pstatus, note->descdata, note->descsz);
5372
5373 switch (pstatus.data_type)
5374 {
5375 case NOTE_INFO_PROCESS:
5376 /* FIXME: need to add ->core_command. */
5377 elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
5378 elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
5379 break ;
5380
5381 case NOTE_INFO_THREAD:
5382 /* Make a ".reg/999" section. */
5383 sprintf (buf, ".reg/%d", pstatus.data.thread_info.tid);
5384
5385 name = bfd_alloc (abfd, strlen (buf) + 1);
5386 if (name == NULL)
5387 return false;
5388
5389 strcpy (name, buf);
5390
5391 sect = bfd_make_section (abfd, name);
5392 if (sect == NULL)
5393 return false;
5394
5395 sect->_raw_size = sizeof (pstatus.data.thread_info.thread_context);
5396 sect->filepos = note->descpos + offsetof (struct win32_pstatus,
5397 data.thread_info.thread_context);
5398 sect->flags = SEC_HAS_CONTENTS;
5399 sect->alignment_power = 2;
5400
5401 if (pstatus.data.thread_info.is_active_thread)
5402 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5403 return false;
5404 break;
5405
5406 case NOTE_INFO_MODULE:
5407 /* Make a ".module/xxxxxxxx" section. */
5408 sprintf (buf, ".module/%08x" , pstatus.data.module_info.base_address);
5409
5410 name = bfd_alloc (abfd, strlen (buf) + 1);
5411 if (name == NULL)
5412 return false;
5413
5414 strcpy (name, buf);
5415
5416 sect = bfd_make_section (abfd, name);
5417
5418 if (sect == NULL)
5419 return false;
5420
5421 sect->_raw_size = note->descsz;
5422 sect->filepos = note->descpos;
5423 sect->flags = SEC_HAS_CONTENTS;
5424 sect->alignment_power = 2;
5425 break;
5426
5427 default:
5428 return true;
5429 }
5430
5431 return true;
5432 }
5433 #endif /* HAVE_WIN32_PSTATUS_T */
5434
5435 static boolean
5436 elfcore_grok_note (abfd, note)
5437 bfd* abfd;
5438 Elf_Internal_Note* note;
5439 {
5440 switch (note->type)
5441 {
5442 default:
5443 return true;
5444
5445 #if defined (HAVE_PRSTATUS_T)
5446 case NT_PRSTATUS:
5447 return elfcore_grok_prstatus (abfd, note);
5448 #endif
5449
5450 #if defined (HAVE_PSTATUS_T)
5451 case NT_PSTATUS:
5452 return elfcore_grok_pstatus (abfd, note);
5453 #endif
5454
5455 #if defined (HAVE_LWPSTATUS_T)
5456 case NT_LWPSTATUS:
5457 return elfcore_grok_lwpstatus (abfd, note);
5458 #endif
5459
5460 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
5461 return elfcore_grok_prfpreg (abfd, note);
5462
5463 #if defined (HAVE_WIN32_PSTATUS_T)
5464 case NT_WIN32PSTATUS:
5465 return elfcore_grok_win32pstatus (abfd, note);
5466 #endif
5467
5468 case NT_PRXFPREG: /* Linux SSE extension */
5469 if (note->namesz == 5
5470 && ! strcmp (note->namedata, "LINUX"))
5471 return elfcore_grok_prxfpreg (abfd, note);
5472 else
5473 return true;
5474
5475 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5476 case NT_PRPSINFO:
5477 case NT_PSINFO:
5478 return elfcore_grok_psinfo (abfd, note);
5479 #endif
5480 }
5481 }
5482
5483
5484 static boolean
5485 elfcore_read_notes (abfd, offset, size)
5486 bfd* abfd;
5487 bfd_vma offset;
5488 bfd_vma size;
5489 {
5490 char* buf;
5491 char* p;
5492
5493 if (size <= 0)
5494 return true;
5495
5496 if (bfd_seek (abfd, offset, SEEK_SET) == -1)
5497 return false;
5498
5499 buf = bfd_malloc ((size_t) size);
5500 if (buf == NULL)
5501 return false;
5502
5503 if (bfd_read (buf, size, 1, abfd) != size)
5504 {
5505 error:
5506 free (buf);
5507 return false;
5508 }
5509
5510 p = buf;
5511 while (p < buf + size)
5512 {
5513 /* FIXME: bad alignment assumption. */
5514 Elf_External_Note* xnp = (Elf_External_Note*) p;
5515 Elf_Internal_Note in;
5516
5517 in.type = bfd_h_get_32 (abfd, (bfd_byte *) xnp->type);
5518
5519 in.namesz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->namesz);
5520 in.namedata = xnp->name;
5521
5522 in.descsz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->descsz);
5523 in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
5524 in.descpos = offset + (in.descdata - buf);
5525
5526 if (! elfcore_grok_note (abfd, &in))
5527 goto error;
5528
5529 p = in.descdata + BFD_ALIGN (in.descsz, 4);
5530 }
5531
5532 free (buf);
5533 return true;
5534 }
5535
5536
5537 /* FIXME: This function is now unnecessary. Callers can just call
5538 bfd_section_from_phdr directly. */
5539
5540 boolean
5541 _bfd_elfcore_section_from_phdr (abfd, phdr, sec_num)
5542 bfd* abfd;
5543 Elf_Internal_Phdr* phdr;
5544 int sec_num;
5545 {
5546 if (! bfd_section_from_phdr (abfd, phdr, sec_num))
5547 return false;
5548
5549 return true;
5550 }
5551
5552
5553 \f
5554 /* Providing external access to the ELF program header table. */
5555
5556 /* Return an upper bound on the number of bytes required to store a
5557 copy of ABFD's program header table entries. Return -1 if an error
5558 occurs; bfd_get_error will return an appropriate code. */
5559 long
5560 bfd_get_elf_phdr_upper_bound (abfd)
5561 bfd *abfd;
5562 {
5563 if (abfd->xvec->flavour != bfd_target_elf_flavour)
5564 {
5565 bfd_set_error (bfd_error_wrong_format);
5566 return -1;
5567 }
5568
5569 return (elf_elfheader (abfd)->e_phnum
5570 * sizeof (Elf_Internal_Phdr));
5571 }
5572
5573
5574 /* Copy ABFD's program header table entries to *PHDRS. The entries
5575 will be stored as an array of Elf_Internal_Phdr structures, as
5576 defined in include/elf/internal.h. To find out how large the
5577 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
5578
5579 Return the number of program header table entries read, or -1 if an
5580 error occurs; bfd_get_error will return an appropriate code. */
5581 int
5582 bfd_get_elf_phdrs (abfd, phdrs)
5583 bfd *abfd;
5584 void *phdrs;
5585 {
5586 int num_phdrs;
5587
5588 if (abfd->xvec->flavour != bfd_target_elf_flavour)
5589 {
5590 bfd_set_error (bfd_error_wrong_format);
5591 return -1;
5592 }
5593
5594 num_phdrs = elf_elfheader (abfd)->e_phnum;
5595 memcpy (phdrs, elf_tdata (abfd)->phdr,
5596 num_phdrs * sizeof (Elf_Internal_Phdr));
5597
5598 return num_phdrs;
5599 }
This page took 0.147186 seconds and 4 git commands to generate.