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