OSDN Git Service

Make debug_sec_names static.
[pf3gnuchains/pf3gnuchains4x.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
349   if (hdr->bfd_section != NULL)
350     {
351       BFD_ASSERT (strcmp (name,
352                           bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
353       return true;
354     }
355
356   newsect = bfd_make_section_anyway (abfd, name);
357   if (newsect == NULL)
358     return false;
359
360   newsect->filepos = hdr->sh_offset;
361
362   if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
363       || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
364       || ! bfd_set_section_alignment (abfd, newsect,
365                                       bfd_log2 (hdr->sh_addralign)))
366     return false;
367
368   flags = SEC_NO_FLAGS;
369   if (hdr->sh_type != SHT_NOBITS)
370     flags |= SEC_HAS_CONTENTS;
371   if ((hdr->sh_flags & SHF_ALLOC) != 0)
372     {
373       flags |= SEC_ALLOC;
374       if (hdr->sh_type != SHT_NOBITS)
375         flags |= SEC_LOAD;
376     }
377   if ((hdr->sh_flags & SHF_WRITE) == 0)
378     flags |= SEC_READONLY;
379   if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
380     flags |= SEC_CODE;
381   else if ((flags & SEC_LOAD) != 0)
382     flags |= SEC_DATA;
383
384   /* The debugging sections appear to be recognized only by name, not
385      any sort of flag.  */
386   {
387     static const char *debug_sec_names [] =
388     {
389       ".debug",
390       ".gnu.linkonce.wi.",
391       ".line",
392       ".stab"
393     };
394     int i;
395
396     for (i = sizeof (debug_sec_names) / sizeof (debug_sec_names[0]); i--;)
397       if (strncmp (name, debug_sec_names[i], strlen (debug_sec_names[i])) == 0)
398         break;
399
400     if (i >= 0)
401       flags |= SEC_DEBUGGING;
402   }
403
404   /* As a GNU extension, if the name begins with .gnu.linkonce, we
405      only link a single copy of the section.  This is used to support
406      g++.  g++ will emit each template expansion in its own section.
407      The symbols will be defined as weak, so that multiple definitions
408      are permitted.  The GNU linker extension is to actually discard
409      all but one of the sections.  */
410   if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
411     flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
412
413   if (! bfd_set_section_flags (abfd, newsect, flags))
414     return false;
415
416   if ((flags & SEC_ALLOC) != 0)
417     {
418       Elf_Internal_Phdr *phdr;
419       unsigned int i;
420
421       /* Look through the phdrs to see if we need to adjust the lma.
422          If all the p_paddr fields are zero, we ignore them, since
423          some ELF linkers produce such output.  */
424       phdr = elf_tdata (abfd)->phdr;
425       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
426         {
427           if (phdr->p_paddr != 0)
428             break;
429         }
430       if (i < elf_elfheader (abfd)->e_phnum)
431         {
432           phdr = elf_tdata (abfd)->phdr;
433           for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
434             {
435               if (phdr->p_type == PT_LOAD
436                   && phdr->p_vaddr != phdr->p_paddr
437                   && phdr->p_vaddr <= hdr->sh_addr
438                   && (phdr->p_vaddr + phdr->p_memsz
439                       >= hdr->sh_addr + hdr->sh_size)
440                   && ((flags & SEC_LOAD) == 0
441                       || (phdr->p_offset <= (bfd_vma) hdr->sh_offset
442                           && (phdr->p_offset + phdr->p_filesz
443                               >= hdr->sh_offset + hdr->sh_size))))
444                 {
445                   newsect->lma += phdr->p_paddr - phdr->p_vaddr;
446                   break;
447                 }
448             }
449         }
450     }
451
452   hdr->bfd_section = newsect;
453   elf_section_data (newsect)->this_hdr = *hdr;
454
455   return true;
456 }
457
458 /*
459 INTERNAL_FUNCTION
460         bfd_elf_find_section
461
462 SYNOPSIS
463         struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
464
465 DESCRIPTION
466         Helper functions for GDB to locate the string tables.
467         Since BFD hides string tables from callers, GDB needs to use an
468         internal hook to find them.  Sun's .stabstr, in particular,
469         isn't even pointed to by the .stab section, so ordinary
470         mechanisms wouldn't work to find it, even if we had some.
471 */
472
473 struct elf_internal_shdr *
474 bfd_elf_find_section (abfd, name)
475      bfd *abfd;
476      char *name;
477 {
478   Elf_Internal_Shdr **i_shdrp;
479   char *shstrtab;
480   unsigned int max;
481   unsigned int i;
482
483   i_shdrp = elf_elfsections (abfd);
484   if (i_shdrp != NULL)
485     {
486       shstrtab = bfd_elf_get_str_section
487         (abfd, elf_elfheader (abfd)->e_shstrndx);
488       if (shstrtab != NULL)
489         {
490           max = elf_elfheader (abfd)->e_shnum;
491           for (i = 1; i < max; i++)
492             if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
493               return i_shdrp[i];
494         }
495     }
496   return 0;
497 }
498
499 const char *const bfd_elf_section_type_names[] = {
500   "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
501   "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
502   "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
503 };
504
505 /* ELF relocs are against symbols.  If we are producing relocateable
506    output, and the reloc is against an external symbol, and nothing
507    has given us any additional addend, the resulting reloc will also
508    be against the same symbol.  In such a case, we don't want to
509    change anything about the way the reloc is handled, since it will
510    all be done at final link time.  Rather than put special case code
511    into bfd_perform_relocation, all the reloc types use this howto
512    function.  It just short circuits the reloc if producing
513    relocateable output against an external symbol.  */
514
515 bfd_reloc_status_type
516 bfd_elf_generic_reloc (abfd,
517                        reloc_entry,
518                        symbol,
519                        data,
520                        input_section,
521                        output_bfd,
522                        error_message)
523      bfd *abfd ATTRIBUTE_UNUSED;
524      arelent *reloc_entry;
525      asymbol *symbol;
526      PTR data ATTRIBUTE_UNUSED;
527      asection *input_section;
528      bfd *output_bfd;
529      char **error_message ATTRIBUTE_UNUSED;
530 {
531   if (output_bfd != (bfd *) NULL
532       && (symbol->flags & BSF_SECTION_SYM) == 0
533       && (! reloc_entry->howto->partial_inplace
534           || reloc_entry->addend == 0))
535     {
536       reloc_entry->address += input_section->output_offset;
537       return bfd_reloc_ok;
538     }
539
540   return bfd_reloc_continue;
541 }
542 \f
543 /* Print out the program headers.  */
544
545 boolean
546 _bfd_elf_print_private_bfd_data (abfd, farg)
547      bfd *abfd;
548      PTR farg;
549 {
550   FILE *f = (FILE *) farg;
551   Elf_Internal_Phdr *p;
552   asection *s;
553   bfd_byte *dynbuf = NULL;
554
555   p = elf_tdata (abfd)->phdr;
556   if (p != NULL)
557     {
558       unsigned int i, c;
559
560       fprintf (f, _("\nProgram Header:\n"));
561       c = elf_elfheader (abfd)->e_phnum;
562       for (i = 0; i < c; i++, p++)
563         {
564           const char *s;
565           char buf[20];
566
567           switch (p->p_type)
568             {
569             case PT_NULL: s = "NULL"; break;
570             case PT_LOAD: s = "LOAD"; break;
571             case PT_DYNAMIC: s = "DYNAMIC"; break;
572             case PT_INTERP: s = "INTERP"; break;
573             case PT_NOTE: s = "NOTE"; break;
574             case PT_SHLIB: s = "SHLIB"; break;
575             case PT_PHDR: s = "PHDR"; break;
576             default: sprintf (buf, "0x%lx", p->p_type); s = buf; break;
577             }
578           fprintf (f, "%8s off    0x", s);
579           fprintf_vma (f, p->p_offset);
580           fprintf (f, " vaddr 0x");
581           fprintf_vma (f, p->p_vaddr);
582           fprintf (f, " paddr 0x");
583           fprintf_vma (f, p->p_paddr);
584           fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
585           fprintf (f, "         filesz 0x");
586           fprintf_vma (f, p->p_filesz);
587           fprintf (f, " memsz 0x");
588           fprintf_vma (f, p->p_memsz);
589           fprintf (f, " flags %c%c%c",
590                    (p->p_flags & PF_R) != 0 ? 'r' : '-',
591                    (p->p_flags & PF_W) != 0 ? 'w' : '-',
592                    (p->p_flags & PF_X) != 0 ? 'x' : '-');
593           if ((p->p_flags &~ (PF_R | PF_W | PF_X)) != 0)
594             fprintf (f, " %lx", p->p_flags &~ (PF_R | PF_W | PF_X));
595           fprintf (f, "\n");
596         }
597     }
598
599   s = bfd_get_section_by_name (abfd, ".dynamic");
600   if (s != NULL)
601     {
602       int elfsec;
603       unsigned long link;
604       bfd_byte *extdyn, *extdynend;
605       size_t extdynsize;
606       void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
607
608       fprintf (f, _("\nDynamic Section:\n"));
609
610       dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
611       if (dynbuf == NULL)
612         goto error_return;
613       if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
614                                       s->_raw_size))
615         goto error_return;
616
617       elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
618       if (elfsec == -1)
619         goto error_return;
620       link = elf_elfsections (abfd)[elfsec]->sh_link;
621
622       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
623       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
624
625       extdyn = dynbuf;
626       extdynend = extdyn + s->_raw_size;
627       for (; extdyn < extdynend; extdyn += extdynsize)
628         {
629           Elf_Internal_Dyn dyn;
630           const char *name;
631           char ab[20];
632           boolean stringp;
633
634           (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
635
636           if (dyn.d_tag == DT_NULL)
637             break;
638
639           stringp = false;
640           switch (dyn.d_tag)
641             {
642             default:
643               sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
644               name = ab;
645               break;
646
647             case DT_NEEDED: name = "NEEDED"; stringp = true; break;
648             case DT_PLTRELSZ: name = "PLTRELSZ"; break;
649             case DT_PLTGOT: name = "PLTGOT"; break;
650             case DT_HASH: name = "HASH"; break;
651             case DT_STRTAB: name = "STRTAB"; break;
652             case DT_SYMTAB: name = "SYMTAB"; break;
653             case DT_RELA: name = "RELA"; break;
654             case DT_RELASZ: name = "RELASZ"; break;
655             case DT_RELAENT: name = "RELAENT"; break;
656             case DT_STRSZ: name = "STRSZ"; break;
657             case DT_SYMENT: name = "SYMENT"; break;
658             case DT_INIT: name = "INIT"; break;
659             case DT_FINI: name = "FINI"; break;
660             case DT_SONAME: name = "SONAME"; stringp = true; break;
661             case DT_RPATH: name = "RPATH"; stringp = true; break;
662             case DT_SYMBOLIC: name = "SYMBOLIC"; break;
663             case DT_REL: name = "REL"; break;
664             case DT_RELSZ: name = "RELSZ"; break;
665             case DT_RELENT: name = "RELENT"; break;
666             case DT_PLTREL: name = "PLTREL"; break;
667             case DT_DEBUG: name = "DEBUG"; break;
668             case DT_TEXTREL: name = "TEXTREL"; break;
669             case DT_JMPREL: name = "JMPREL"; break;
670             case DT_BIND_NOW: name = "BIND_NOW"; break;
671             case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
672             case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
673             case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
674             case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
675             case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
676             case DT_FLAGS: name = "FLAGS"; break;
677             case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
678             case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
679             case DT_CHECKSUM: name = "CHECKSUM"; break;
680             case DT_PLTPADSZ: name = "PLTPADSZ"; break;
681             case DT_MOVEENT: name = "MOVEENT"; break;
682             case DT_MOVESZ: name = "MOVESZ"; break;
683             case DT_FEATURE: name = "FEATURE"; break;
684             case DT_POSFLAG_1: name = "POSFLAG_1"; break;
685             case DT_SYMINSZ: name = "SYMINSZ"; break;
686             case DT_SYMINENT: name = "SYMINENT"; break;
687             case DT_CONFIG: name = "CONFIG"; stringp = true; break;
688             case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
689             case DT_AUDIT: name = "AUDIT"; stringp = true; break;
690             case DT_PLTPAD: name = "PLTPAD"; break;
691             case DT_MOVETAB: name = "MOVETAB"; break;
692             case DT_SYMINFO: name = "SYMINFO"; break;
693             case DT_RELACOUNT: name = "RELACOUNT"; break;
694             case DT_RELCOUNT: name = "RELCOUNT"; break;
695             case DT_FLAGS_1: name = "FLAGS_1"; break;
696             case DT_VERSYM: name = "VERSYM"; break;
697             case DT_VERDEF: name = "VERDEF"; break;
698             case DT_VERDEFNUM: name = "VERDEFNUM"; break;
699             case DT_VERNEED: name = "VERNEED"; break;
700             case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
701             case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
702             case DT_USED: name = "USED"; break;
703             case DT_FILTER: name = "FILTER"; stringp = true; break;
704             }
705
706           fprintf (f, "  %-11s ", name);
707           if (! stringp)
708             fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
709           else
710             {
711               const char *string;
712
713               string = bfd_elf_string_from_elf_section (abfd, link,
714                                                         dyn.d_un.d_val);
715               if (string == NULL)
716                 goto error_return;
717               fprintf (f, "%s", string);
718             }
719           fprintf (f, "\n");
720         }
721
722       free (dynbuf);
723       dynbuf = NULL;
724     }
725
726   if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
727       || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
728     {
729       if (! _bfd_elf_slurp_version_tables (abfd))
730         return false;
731     }
732
733   if (elf_dynverdef (abfd) != 0)
734     {
735       Elf_Internal_Verdef *t;
736
737       fprintf (f, _("\nVersion definitions:\n"));
738       for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
739         {
740           fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
741                    t->vd_flags, t->vd_hash, t->vd_nodename);
742           if (t->vd_auxptr->vda_nextptr != NULL)
743             {
744               Elf_Internal_Verdaux *a;
745
746               fprintf (f, "\t");
747               for (a = t->vd_auxptr->vda_nextptr;
748                    a != NULL;
749                    a = a->vda_nextptr)
750                 fprintf (f, "%s ", a->vda_nodename);
751               fprintf (f, "\n");
752             }
753         }
754     }
755
756   if (elf_dynverref (abfd) != 0)
757     {
758       Elf_Internal_Verneed *t;
759
760       fprintf (f, _("\nVersion References:\n"));
761       for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
762         {
763           Elf_Internal_Vernaux *a;
764
765           fprintf (f, _("  required from %s:\n"), t->vn_filename);
766           for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
767             fprintf (f, "    0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
768                      a->vna_flags, a->vna_other, a->vna_nodename);
769         }
770     }
771
772   return true;
773
774  error_return:
775   if (dynbuf != NULL)
776     free (dynbuf);
777   return false;
778 }
779
780 /* Display ELF-specific fields of a symbol.  */
781
782 void
783 bfd_elf_print_symbol (abfd, filep, symbol, how)
784      bfd *abfd;
785      PTR filep;
786      asymbol *symbol;
787      bfd_print_symbol_type how;
788 {
789   FILE *file = (FILE *) filep;
790   switch (how)
791     {
792     case bfd_print_symbol_name:
793       fprintf (file, "%s", symbol->name);
794       break;
795     case bfd_print_symbol_more:
796       fprintf (file, "elf ");
797       fprintf_vma (file, symbol->value);
798       fprintf (file, " %lx", (long) symbol->flags);
799       break;
800     case bfd_print_symbol_all:
801       {
802         CONST char *section_name;
803         CONST char *name = NULL;
804         struct elf_backend_data *bed;
805         unsigned char st_other;
806
807         section_name = symbol->section ? symbol->section->name : "(*none*)";
808
809         bed = get_elf_backend_data (abfd);
810         if (bed->elf_backend_print_symbol_all)
811           name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
812
813         if (name == NULL)
814           {
815             name = symbol->name;
816             bfd_print_symbol_vandf ((PTR) file, symbol);
817           }
818
819         fprintf (file, " %s\t", section_name);
820         /* Print the "other" value for a symbol.  For common symbols,
821            we've already printed the size; now print the alignment.
822            For other symbols, we have no specified alignment, and
823            we've printed the address; now print the size.  */
824         fprintf_vma (file,
825                      (bfd_is_com_section (symbol->section)
826                       ? ((elf_symbol_type *) symbol)->internal_elf_sym.st_value
827                       : ((elf_symbol_type *) symbol)->internal_elf_sym.st_size));
828
829         /* If we have version information, print it.  */
830         if (elf_tdata (abfd)->dynversym_section != 0
831             && (elf_tdata (abfd)->dynverdef_section != 0
832                 || elf_tdata (abfd)->dynverref_section != 0))
833           {
834             unsigned int vernum;
835             const char *version_string;
836
837             vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
838
839             if (vernum == 0)
840               version_string = "";
841             else if (vernum == 1)
842               version_string = "Base";
843             else if (vernum <= elf_tdata (abfd)->cverdefs)
844               version_string =
845                 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
846             else
847               {
848                 Elf_Internal_Verneed *t;
849
850                 version_string = "";
851                 for (t = elf_tdata (abfd)->verref;
852                      t != NULL;
853                      t = t->vn_nextref)
854                   {
855                     Elf_Internal_Vernaux *a;
856
857                     for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
858                       {
859                         if (a->vna_other == vernum)
860                           {
861                             version_string = a->vna_nodename;
862                             break;
863                           }
864                       }
865                   }
866               }
867
868             if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
869               fprintf (file, "  %-11s", version_string);
870             else
871               {
872                 int i;
873
874                 fprintf (file, " (%s)", version_string);
875                 for (i = 10 - strlen (version_string); i > 0; --i)
876                   putc (' ', file);
877               }
878           }
879
880         /* If the st_other field is not zero, print it.  */
881         st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
882
883         switch (st_other)
884           {
885           case 0: break;
886           case STV_INTERNAL:  fprintf (file, " .internal");  break;
887           case STV_HIDDEN:    fprintf (file, " .hidden");    break;
888           case STV_PROTECTED: fprintf (file, " .protected"); break;
889           default:
890             /* Some other non-defined flags are also present, so print
891                everything hex.  */
892             fprintf (file, " 0x%02x", (unsigned int) st_other);
893           }
894
895         fprintf (file, " %s", name);
896       }
897       break;
898     }
899 }
900 \f
901 /* Create an entry in an ELF linker hash table.  */
902
903 struct bfd_hash_entry *
904 _bfd_elf_link_hash_newfunc (entry, table, string)
905      struct bfd_hash_entry *entry;
906      struct bfd_hash_table *table;
907      const char *string;
908 {
909   struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
910
911   /* Allocate the structure if it has not already been allocated by a
912      subclass.  */
913   if (ret == (struct elf_link_hash_entry *) NULL)
914     ret = ((struct elf_link_hash_entry *)
915            bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)));
916   if (ret == (struct elf_link_hash_entry *) NULL)
917     return (struct bfd_hash_entry *) ret;
918
919   /* Call the allocation method of the superclass.  */
920   ret = ((struct elf_link_hash_entry *)
921          _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
922                                  table, string));
923   if (ret != (struct elf_link_hash_entry *) NULL)
924     {
925       /* Set local fields.  */
926       ret->indx = -1;
927       ret->size = 0;
928       ret->dynindx = -1;
929       ret->dynstr_index = 0;
930       ret->weakdef = NULL;
931       ret->got.offset = (bfd_vma) -1;
932       ret->plt.offset = (bfd_vma) -1;
933       ret->linker_section_pointer = (elf_linker_section_pointers_t *)0;
934       ret->verinfo.verdef = NULL;
935       ret->vtable_entries_used = NULL;
936       ret->vtable_entries_size = 0;
937       ret->vtable_parent = NULL;
938       ret->type = STT_NOTYPE;
939       ret->other = 0;
940       /* Assume that we have been called by a non-ELF symbol reader.
941          This flag is then reset by the code which reads an ELF input
942          file.  This ensures that a symbol created by a non-ELF symbol
943          reader will have the flag set correctly.  */
944       ret->elf_link_hash_flags = ELF_LINK_NON_ELF;
945     }
946
947   return (struct bfd_hash_entry *) ret;
948 }
949
950 /* Copy data from an indirect symbol to its direct symbol, hiding the
951    old indirect symbol.  */
952
953 void
954 _bfd_elf_link_hash_copy_indirect (dir, ind)
955      struct elf_link_hash_entry *dir, *ind;
956 {
957   /* Copy down any references that we may have already seen to the
958      symbol which just became indirect.  */
959
960   dir->elf_link_hash_flags |=
961     (ind->elf_link_hash_flags
962      & (ELF_LINK_HASH_REF_DYNAMIC
963         | ELF_LINK_HASH_REF_REGULAR
964         | ELF_LINK_HASH_REF_REGULAR_NONWEAK
965         | ELF_LINK_NON_GOT_REF));
966
967   /* Copy over the global and procedure linkage table offset entries.
968      These may have been already set up by a check_relocs routine.  */
969   if (dir->got.offset == (bfd_vma) -1)
970     {
971       dir->got.offset = ind->got.offset;
972       ind->got.offset = (bfd_vma) -1;
973     }
974   BFD_ASSERT (ind->got.offset == (bfd_vma) -1);
975
976   if (dir->plt.offset == (bfd_vma) -1)
977     {
978       dir->plt.offset = ind->plt.offset;
979       ind->plt.offset = (bfd_vma) -1;
980     }
981   BFD_ASSERT (ind->plt.offset == (bfd_vma) -1);
982
983   if (dir->dynindx == -1)
984     {
985       dir->dynindx = ind->dynindx;
986       dir->dynstr_index = ind->dynstr_index;
987       ind->dynindx = -1;
988       ind->dynstr_index = 0;
989     }
990   BFD_ASSERT (ind->dynindx == -1);
991 }
992
993 void
994 _bfd_elf_link_hash_hide_symbol (info, h)
995      struct bfd_link_info *info ATTRIBUTE_UNUSED;
996      struct elf_link_hash_entry *h;
997 {
998   h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
999   h->dynindx = -1;
1000   h->plt.offset = (bfd_vma) -1;
1001 }
1002
1003 /* Initialize an ELF linker hash table.  */
1004
1005 boolean
1006 _bfd_elf_link_hash_table_init (table, abfd, newfunc)
1007      struct elf_link_hash_table *table;
1008      bfd *abfd;
1009      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
1010                                                 struct bfd_hash_table *,
1011                                                 const char *));
1012 {
1013   table->dynamic_sections_created = false;
1014   table->dynobj = NULL;
1015   /* The first dynamic symbol is a dummy.  */
1016   table->dynsymcount = 1;
1017   table->dynstr = NULL;
1018   table->bucketcount = 0;
1019   table->needed = NULL;
1020   table->runpath = NULL;
1021   table->hgot = NULL;
1022   table->stab_info = NULL;
1023   table->dynlocal = NULL;
1024   return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
1025 }
1026
1027 /* Create an ELF linker hash table.  */
1028
1029 struct bfd_link_hash_table *
1030 _bfd_elf_link_hash_table_create (abfd)
1031      bfd *abfd;
1032 {
1033   struct elf_link_hash_table *ret;
1034
1035   ret = ((struct elf_link_hash_table *)
1036          bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
1037   if (ret == (struct elf_link_hash_table *) NULL)
1038     return NULL;
1039
1040   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
1041     {
1042       bfd_release (abfd, ret);
1043       return NULL;
1044     }
1045
1046   return &ret->root;
1047 }
1048
1049 /* This is a hook for the ELF emulation code in the generic linker to
1050    tell the backend linker what file name to use for the DT_NEEDED
1051    entry for a dynamic object.  The generic linker passes name as an
1052    empty string to indicate that no DT_NEEDED entry should be made.  */
1053
1054 void
1055 bfd_elf_set_dt_needed_name (abfd, name)
1056      bfd *abfd;
1057      const char *name;
1058 {
1059   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1060       && bfd_get_format (abfd) == bfd_object)
1061     elf_dt_name (abfd) = name;
1062 }
1063
1064 void
1065 bfd_elf_set_dt_needed_soname (abfd, name)
1066      bfd *abfd;
1067      const char *name;
1068 {
1069   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1070       && bfd_get_format (abfd) == bfd_object)
1071     elf_dt_soname (abfd) = name;
1072 }
1073
1074 /* Get the list of DT_NEEDED entries for a link.  This is a hook for
1075    the linker ELF emulation code.  */
1076
1077 struct bfd_link_needed_list *
1078 bfd_elf_get_needed_list (abfd, info)
1079      bfd *abfd ATTRIBUTE_UNUSED;
1080      struct bfd_link_info *info;
1081 {
1082   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1083     return NULL;
1084   return elf_hash_table (info)->needed;
1085 }
1086
1087 /* Get the list of DT_RPATH/DT_RUNPATH entries for a link.  This is a
1088    hook for the linker ELF emulation code.  */
1089
1090 struct bfd_link_needed_list *
1091 bfd_elf_get_runpath_list (abfd, info)
1092      bfd *abfd ATTRIBUTE_UNUSED;
1093      struct bfd_link_info *info;
1094 {
1095   if (info->hash->creator->flavour != bfd_target_elf_flavour)
1096     return NULL;
1097   return elf_hash_table (info)->runpath;
1098 }
1099
1100 /* Get the name actually used for a dynamic object for a link.  This
1101    is the SONAME entry if there is one.  Otherwise, it is the string
1102    passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
1103
1104 const char *
1105 bfd_elf_get_dt_soname (abfd)
1106      bfd *abfd;
1107 {
1108   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1109       && bfd_get_format (abfd) == bfd_object)
1110     return elf_dt_name (abfd);
1111   return NULL;
1112 }
1113
1114 /* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
1115    the ELF linker emulation code.  */
1116
1117 boolean
1118 bfd_elf_get_bfd_needed_list (abfd, pneeded)
1119      bfd *abfd;
1120      struct bfd_link_needed_list **pneeded;
1121 {
1122   asection *s;
1123   bfd_byte *dynbuf = NULL;
1124   int elfsec;
1125   unsigned long link;
1126   bfd_byte *extdyn, *extdynend;
1127   size_t extdynsize;
1128   void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1129
1130   *pneeded = NULL;
1131
1132   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
1133       || bfd_get_format (abfd) != bfd_object)
1134     return true;
1135
1136   s = bfd_get_section_by_name (abfd, ".dynamic");
1137   if (s == NULL || s->_raw_size == 0)
1138     return true;
1139
1140   dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
1141   if (dynbuf == NULL)
1142     goto error_return;
1143
1144   if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
1145                                   s->_raw_size))
1146     goto error_return;
1147
1148   elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1149   if (elfsec == -1)
1150     goto error_return;
1151
1152   link = elf_elfsections (abfd)[elfsec]->sh_link;
1153
1154   extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1155   swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1156
1157   extdyn = dynbuf;
1158   extdynend = extdyn + s->_raw_size;
1159   for (; extdyn < extdynend; extdyn += extdynsize)
1160     {
1161       Elf_Internal_Dyn dyn;
1162
1163       (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
1164
1165       if (dyn.d_tag == DT_NULL)
1166         break;
1167
1168       if (dyn.d_tag == DT_NEEDED)
1169         {
1170           const char *string;
1171           struct bfd_link_needed_list *l;
1172
1173           string = bfd_elf_string_from_elf_section (abfd, link,
1174                                                     dyn.d_un.d_val);
1175           if (string == NULL)
1176             goto error_return;
1177
1178           l = (struct bfd_link_needed_list *) bfd_alloc (abfd, sizeof *l);
1179           if (l == NULL)
1180             goto error_return;
1181
1182           l->by = abfd;
1183           l->name = string;
1184           l->next = *pneeded;
1185           *pneeded = l;
1186         }
1187     }
1188
1189   free (dynbuf);
1190
1191   return true;
1192
1193  error_return:
1194   if (dynbuf != NULL)
1195     free (dynbuf);
1196   return false;
1197 }
1198 \f
1199 /* Allocate an ELF string table--force the first byte to be zero.  */
1200
1201 struct bfd_strtab_hash *
1202 _bfd_elf_stringtab_init ()
1203 {
1204   struct bfd_strtab_hash *ret;
1205
1206   ret = _bfd_stringtab_init ();
1207   if (ret != NULL)
1208     {
1209       bfd_size_type loc;
1210
1211       loc = _bfd_stringtab_add (ret, "", true, false);
1212       BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1213       if (loc == (bfd_size_type) -1)
1214         {
1215           _bfd_stringtab_free (ret);
1216           ret = NULL;
1217         }
1218     }
1219   return ret;
1220 }
1221 \f
1222 /* ELF .o/exec file reading */
1223
1224 /* Create a new bfd section from an ELF section header.  */
1225
1226 boolean
1227 bfd_section_from_shdr (abfd, shindex)
1228      bfd *abfd;
1229      unsigned int shindex;
1230 {
1231   Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
1232   Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
1233   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1234   char *name;
1235
1236   name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
1237
1238   switch (hdr->sh_type)
1239     {
1240     case SHT_NULL:
1241       /* Inactive section. Throw it away.  */
1242       return true;
1243
1244     case SHT_PROGBITS:  /* Normal section with contents.  */
1245     case SHT_DYNAMIC:   /* Dynamic linking information.  */
1246     case SHT_NOBITS:    /* .bss section.  */
1247     case SHT_HASH:      /* .hash section.  */
1248     case SHT_NOTE:      /* .note section.  */
1249       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1250
1251     case SHT_SYMTAB:            /* A symbol table */
1252       if (elf_onesymtab (abfd) == shindex)
1253         return true;
1254
1255       BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1256       BFD_ASSERT (elf_onesymtab (abfd) == 0);
1257       elf_onesymtab (abfd) = shindex;
1258       elf_tdata (abfd)->symtab_hdr = *hdr;
1259       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1260       abfd->flags |= HAS_SYMS;
1261
1262       /* Sometimes a shared object will map in the symbol table.  If
1263          SHF_ALLOC is set, and this is a shared object, then we also
1264          treat this section as a BFD section.  We can not base the
1265          decision purely on SHF_ALLOC, because that flag is sometimes
1266          set in a relocateable object file, which would confuse the
1267          linker.  */
1268       if ((hdr->sh_flags & SHF_ALLOC) != 0
1269           && (abfd->flags & DYNAMIC) != 0
1270           && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
1271         return false;
1272
1273       return true;
1274
1275     case SHT_DYNSYM:            /* A dynamic symbol table */
1276       if (elf_dynsymtab (abfd) == shindex)
1277         return true;
1278
1279       BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1280       BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1281       elf_dynsymtab (abfd) = shindex;
1282       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1283       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1284       abfd->flags |= HAS_SYMS;
1285
1286       /* Besides being a symbol table, we also treat this as a regular
1287          section, so that objcopy can handle it.  */
1288       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1289
1290     case SHT_STRTAB:            /* A string table */
1291       if (hdr->bfd_section != NULL)
1292         return true;
1293       if (ehdr->e_shstrndx == shindex)
1294         {
1295           elf_tdata (abfd)->shstrtab_hdr = *hdr;
1296           elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1297           return true;
1298         }
1299       {
1300         unsigned int i;
1301
1302         for (i = 1; i < ehdr->e_shnum; i++)
1303           {
1304             Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1305             if (hdr2->sh_link == shindex)
1306               {
1307                 if (! bfd_section_from_shdr (abfd, i))
1308                   return false;
1309                 if (elf_onesymtab (abfd) == i)
1310                   {
1311                     elf_tdata (abfd)->strtab_hdr = *hdr;
1312                     elf_elfsections (abfd)[shindex] =
1313                       &elf_tdata (abfd)->strtab_hdr;
1314                     return true;
1315                   }
1316                 if (elf_dynsymtab (abfd) == i)
1317                   {
1318                     elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1319                     elf_elfsections (abfd)[shindex] = hdr =
1320                       &elf_tdata (abfd)->dynstrtab_hdr;
1321                     /* We also treat this as a regular section, so
1322                        that objcopy can handle it.  */
1323                     break;
1324                   }
1325 #if 0 /* Not handling other string tables specially right now.  */
1326                 hdr2 = elf_elfsections (abfd)[i];       /* in case it moved */
1327                 /* We have a strtab for some random other section.  */
1328                 newsect = (asection *) hdr2->bfd_section;
1329                 if (!newsect)
1330                   break;
1331                 hdr->bfd_section = newsect;
1332                 hdr2 = &elf_section_data (newsect)->str_hdr;
1333                 *hdr2 = *hdr;
1334                 elf_elfsections (abfd)[shindex] = hdr2;
1335 #endif
1336               }
1337           }
1338       }
1339
1340       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1341
1342     case SHT_REL:
1343     case SHT_RELA:
1344       /* *These* do a lot of work -- but build no sections!  */
1345       {
1346         asection *target_sect;
1347         Elf_Internal_Shdr *hdr2;
1348
1349         /* Check for a bogus link to avoid crashing.  */
1350         if (hdr->sh_link >= ehdr->e_shnum)
1351           {
1352             ((*_bfd_error_handler)
1353              (_("%s: invalid link %lu for reloc section %s (index %u)"),
1354               bfd_get_filename (abfd), hdr->sh_link, name, shindex));
1355             return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1356           }
1357
1358         /* For some incomprehensible reason Oracle distributes
1359            libraries for Solaris in which some of the objects have
1360            bogus sh_link fields.  It would be nice if we could just
1361            reject them, but, unfortunately, some people need to use
1362            them.  We scan through the section headers; if we find only
1363            one suitable symbol table, we clobber the sh_link to point
1364            to it.  I hope this doesn't break anything.  */
1365         if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1366             && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1367           {
1368             int scan;
1369             int found;
1370
1371             found = 0;
1372             for (scan = 1; scan < ehdr->e_shnum; scan++)
1373               {
1374                 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1375                     || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1376                   {
1377                     if (found != 0)
1378                       {
1379                         found = 0;
1380                         break;
1381                       }
1382                     found = scan;
1383                   }
1384               }
1385             if (found != 0)
1386               hdr->sh_link = found;
1387           }
1388
1389         /* Get the symbol table.  */
1390         if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1391             && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1392           return false;
1393
1394         /* If this reloc section does not use the main symbol table we
1395            don't treat it as a reloc section.  BFD can't adequately
1396            represent such a section, so at least for now, we don't
1397            try.  We just present it as a normal section.  We also
1398            can't use it as a reloc section if it points to the null
1399            section.  */
1400         if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF)
1401           return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1402
1403         if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1404           return false;
1405         target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1406         if (target_sect == NULL)
1407           return false;
1408
1409         if ((target_sect->flags & SEC_RELOC) == 0
1410             || target_sect->reloc_count == 0)
1411           hdr2 = &elf_section_data (target_sect)->rel_hdr;
1412         else
1413           {
1414             BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1415             hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
1416             elf_section_data (target_sect)->rel_hdr2 = hdr2;
1417           }
1418         *hdr2 = *hdr;
1419         elf_elfsections (abfd)[shindex] = hdr2;
1420         target_sect->reloc_count += hdr->sh_size / hdr->sh_entsize;
1421         target_sect->flags |= SEC_RELOC;
1422         target_sect->relocation = NULL;
1423         target_sect->rel_filepos = hdr->sh_offset;
1424         /* In the section to which the relocations apply, mark whether
1425            its relocations are of the REL or RELA variety.  */
1426         if (hdr->sh_size != 0)
1427           elf_section_data (target_sect)->use_rela_p
1428             = (hdr->sh_type == SHT_RELA);
1429         abfd->flags |= HAS_RELOC;
1430         return true;
1431       }
1432       break;
1433
1434     case SHT_GNU_verdef:
1435       elf_dynverdef (abfd) = shindex;
1436       elf_tdata (abfd)->dynverdef_hdr = *hdr;
1437       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1438       break;
1439
1440     case SHT_GNU_versym:
1441       elf_dynversym (abfd) = shindex;
1442       elf_tdata (abfd)->dynversym_hdr = *hdr;
1443       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1444       break;
1445
1446     case SHT_GNU_verneed:
1447       elf_dynverref (abfd) = shindex;
1448       elf_tdata (abfd)->dynverref_hdr = *hdr;
1449       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1450       break;
1451
1452     case SHT_SHLIB:
1453       return true;
1454
1455     default:
1456       /* Check for any processor-specific section types.  */
1457       {
1458         if (bed->elf_backend_section_from_shdr)
1459           (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
1460       }
1461       break;
1462     }
1463
1464   return true;
1465 }
1466
1467 /* Given an ELF section number, retrieve the corresponding BFD
1468    section.  */
1469
1470 asection *
1471 bfd_section_from_elf_index (abfd, index)
1472      bfd *abfd;
1473      unsigned int index;
1474 {
1475   BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
1476   if (index >= elf_elfheader (abfd)->e_shnum)
1477     return NULL;
1478   return elf_elfsections (abfd)[index]->bfd_section;
1479 }
1480
1481 boolean
1482 _bfd_elf_new_section_hook (abfd, sec)
1483      bfd *abfd;
1484      asection *sec;
1485 {
1486   struct bfd_elf_section_data *sdata;
1487
1488   sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, sizeof (*sdata));
1489   if (!sdata)
1490     return false;
1491   sec->used_by_bfd = (PTR) sdata;
1492
1493   /* Indicate whether or not this section should use RELA relocations.  */
1494   sdata->use_rela_p
1495     = get_elf_backend_data (abfd)->default_use_rela_p;
1496
1497   return true;
1498 }
1499
1500 /* Create a new bfd section from an ELF program header.
1501
1502    Since program segments have no names, we generate a synthetic name
1503    of the form segment<NUM>, where NUM is generally the index in the
1504    program header table.  For segments that are split (see below) we
1505    generate the names segment<NUM>a and segment<NUM>b.
1506
1507    Note that some program segments may have a file size that is different than
1508    (less than) the memory size.  All this means is that at execution the
1509    system must allocate the amount of memory specified by the memory size,
1510    but only initialize it with the first "file size" bytes read from the
1511    file.  This would occur for example, with program segments consisting
1512    of combined data+bss.
1513
1514    To handle the above situation, this routine generates TWO bfd sections
1515    for the single program segment.  The first has the length specified by
1516    the file size of the segment, and the second has the length specified
1517    by the difference between the two sizes.  In effect, the segment is split
1518    into it's initialized and uninitialized parts.
1519
1520  */
1521
1522 boolean
1523 _bfd_elf_make_section_from_phdr (abfd, hdr, index, typename)
1524      bfd *abfd;
1525      Elf_Internal_Phdr *hdr;
1526      int index;
1527      const char *typename;
1528 {
1529   asection *newsect;
1530   char *name;
1531   char namebuf[64];
1532   int split;
1533
1534   split = ((hdr->p_memsz > 0)
1535             && (hdr->p_filesz > 0)
1536             && (hdr->p_memsz > hdr->p_filesz));
1537   sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
1538   name = bfd_alloc (abfd, strlen (namebuf) + 1);
1539   if (!name)
1540     return false;
1541   strcpy (name, namebuf);
1542   newsect = bfd_make_section (abfd, name);
1543   if (newsect == NULL)
1544     return false;
1545   newsect->vma = hdr->p_vaddr;
1546   newsect->lma = hdr->p_paddr;
1547   newsect->_raw_size = hdr->p_filesz;
1548   newsect->filepos = hdr->p_offset;
1549   newsect->flags |= SEC_HAS_CONTENTS;
1550   if (hdr->p_type == PT_LOAD)
1551     {
1552       newsect->flags |= SEC_ALLOC;
1553       newsect->flags |= SEC_LOAD;
1554       if (hdr->p_flags & PF_X)
1555         {
1556           /* FIXME: all we known is that it has execute PERMISSION,
1557              may be data.  */
1558           newsect->flags |= SEC_CODE;
1559         }
1560     }
1561   if (!(hdr->p_flags & PF_W))
1562     {
1563       newsect->flags |= SEC_READONLY;
1564     }
1565
1566   if (split)
1567     {
1568       sprintf (namebuf, "%s%db", typename, index);
1569       name = bfd_alloc (abfd, strlen (namebuf) + 1);
1570       if (!name)
1571         return false;
1572       strcpy (name, namebuf);
1573       newsect = bfd_make_section (abfd, name);
1574       if (newsect == NULL)
1575         return false;
1576       newsect->vma = hdr->p_vaddr + hdr->p_filesz;
1577       newsect->lma = hdr->p_paddr + hdr->p_filesz;
1578       newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
1579       if (hdr->p_type == PT_LOAD)
1580         {
1581           newsect->flags |= SEC_ALLOC;
1582           if (hdr->p_flags & PF_X)
1583             newsect->flags |= SEC_CODE;
1584         }
1585       if (!(hdr->p_flags & PF_W))
1586         newsect->flags |= SEC_READONLY;
1587     }
1588
1589   return true;
1590 }
1591
1592 boolean
1593 bfd_section_from_phdr (abfd, hdr, index)
1594      bfd *abfd;
1595      Elf_Internal_Phdr *hdr;
1596      int index;
1597 {
1598   struct elf_backend_data *bed;
1599
1600   switch (hdr->p_type)
1601     {
1602     case PT_NULL:
1603       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
1604
1605     case PT_LOAD:
1606       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
1607
1608     case PT_DYNAMIC:
1609       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
1610
1611     case PT_INTERP:
1612       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
1613
1614     case PT_NOTE:
1615       if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
1616         return false;
1617       if (! elfcore_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
1618         return false;
1619       return true;
1620
1621     case PT_SHLIB:
1622       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
1623
1624     case PT_PHDR:
1625       return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
1626
1627     default:
1628       /* Check for any processor-specific program segment types.
1629          If no handler for them, default to making "segment" sections.  */
1630       bed = get_elf_backend_data (abfd);
1631       if (bed->elf_backend_section_from_phdr)
1632         return (*bed->elf_backend_section_from_phdr) (abfd, hdr, index);
1633       else
1634         return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "segment");
1635     }
1636 }
1637
1638 /* Initialize REL_HDR, the section-header for new section, containing
1639    relocations against ASECT.  If USE_RELA_P is true, we use RELA
1640    relocations; otherwise, we use REL relocations.  */
1641
1642 boolean
1643 _bfd_elf_init_reloc_shdr (abfd, rel_hdr, asect, use_rela_p)
1644      bfd *abfd;
1645      Elf_Internal_Shdr *rel_hdr;
1646      asection *asect;
1647      boolean use_rela_p;
1648 {
1649   char *name;
1650   struct elf_backend_data *bed;
1651
1652   bed = get_elf_backend_data (abfd);
1653   name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1654   if (name == NULL)
1655     return false;
1656   sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1657   rel_hdr->sh_name =
1658     (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1659                                        true, false);
1660   if (rel_hdr->sh_name == (unsigned int) -1)
1661     return false;
1662   rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1663   rel_hdr->sh_entsize = (use_rela_p
1664                          ? bed->s->sizeof_rela
1665                          : bed->s->sizeof_rel);
1666   rel_hdr->sh_addralign = bed->s->file_align;
1667   rel_hdr->sh_flags = 0;
1668   rel_hdr->sh_addr = 0;
1669   rel_hdr->sh_size = 0;
1670   rel_hdr->sh_offset = 0;
1671
1672   return true;
1673 }
1674
1675 /* Set up an ELF internal section header for a section.  */
1676
1677 static void
1678 elf_fake_sections (abfd, asect, failedptrarg)
1679      bfd *abfd;
1680      asection *asect;
1681      PTR failedptrarg;
1682 {
1683   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1684   boolean *failedptr = (boolean *) failedptrarg;
1685   Elf_Internal_Shdr *this_hdr;
1686
1687   if (*failedptr)
1688     {
1689       /* We already failed; just get out of the bfd_map_over_sections
1690          loop.  */
1691       return;
1692     }
1693
1694   this_hdr = &elf_section_data (asect)->this_hdr;
1695
1696   this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1697                                                           asect->name,
1698                                                           true, false);
1699   if (this_hdr->sh_name == (unsigned long) -1)
1700     {
1701       *failedptr = true;
1702       return;
1703     }
1704
1705   this_hdr->sh_flags = 0;
1706
1707   if ((asect->flags & SEC_ALLOC) != 0
1708       || asect->user_set_vma)
1709     this_hdr->sh_addr = asect->vma;
1710   else
1711     this_hdr->sh_addr = 0;
1712
1713   this_hdr->sh_offset = 0;
1714   this_hdr->sh_size = asect->_raw_size;
1715   this_hdr->sh_link = 0;
1716   this_hdr->sh_addralign = 1 << asect->alignment_power;
1717   /* The sh_entsize and sh_info fields may have been set already by
1718      copy_private_section_data.  */
1719
1720   this_hdr->bfd_section = asect;
1721   this_hdr->contents = NULL;
1722
1723   /* FIXME: This should not be based on section names.  */
1724   if (strcmp (asect->name, ".dynstr") == 0)
1725     this_hdr->sh_type = SHT_STRTAB;
1726   else if (strcmp (asect->name, ".hash") == 0)
1727     {
1728       this_hdr->sh_type = SHT_HASH;
1729       this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
1730     }
1731   else if (strcmp (asect->name, ".dynsym") == 0)
1732     {
1733       this_hdr->sh_type = SHT_DYNSYM;
1734       this_hdr->sh_entsize = bed->s->sizeof_sym;
1735     }
1736   else if (strcmp (asect->name, ".dynamic") == 0)
1737     {
1738       this_hdr->sh_type = SHT_DYNAMIC;
1739       this_hdr->sh_entsize = bed->s->sizeof_dyn;
1740     }
1741   else if (strncmp (asect->name, ".rela", 5) == 0
1742            && get_elf_backend_data (abfd)->may_use_rela_p)
1743     {
1744       this_hdr->sh_type = SHT_RELA;
1745       this_hdr->sh_entsize = bed->s->sizeof_rela;
1746     }
1747   else if (strncmp (asect->name, ".rel", 4) == 0
1748            && get_elf_backend_data (abfd)->may_use_rel_p)
1749     {
1750       this_hdr->sh_type = SHT_REL;
1751       this_hdr->sh_entsize = bed->s->sizeof_rel;
1752     }
1753   else if (strncmp (asect->name, ".note", 5) == 0)
1754     this_hdr->sh_type = SHT_NOTE;
1755   else if (strncmp (asect->name, ".stab", 5) == 0
1756            && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1757     this_hdr->sh_type = SHT_STRTAB;
1758   else if (strcmp (asect->name, ".gnu.version") == 0)
1759     {
1760       this_hdr->sh_type = SHT_GNU_versym;
1761       this_hdr->sh_entsize = sizeof (Elf_External_Versym);
1762     }
1763   else if (strcmp (asect->name, ".gnu.version_d") == 0)
1764     {
1765       this_hdr->sh_type = SHT_GNU_verdef;
1766       this_hdr->sh_entsize = 0;
1767       /* objcopy or strip will copy over sh_info, but may not set
1768          cverdefs.  The linker will set cverdefs, but sh_info will be
1769          zero.  */
1770       if (this_hdr->sh_info == 0)
1771         this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
1772       else
1773         BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
1774                     || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
1775     }
1776   else if (strcmp (asect->name, ".gnu.version_r") == 0)
1777     {
1778       this_hdr->sh_type = SHT_GNU_verneed;
1779       this_hdr->sh_entsize = 0;
1780       /* objcopy or strip will copy over sh_info, but may not set
1781          cverrefs.  The linker will set cverrefs, but sh_info will be
1782          zero.  */
1783       if (this_hdr->sh_info == 0)
1784         this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
1785       else
1786         BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
1787                     || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
1788     }
1789   else if ((asect->flags & SEC_ALLOC) != 0
1790            && (asect->flags & SEC_LOAD) != 0)
1791     this_hdr->sh_type = SHT_PROGBITS;
1792   else if ((asect->flags & SEC_ALLOC) != 0
1793            && ((asect->flags & SEC_LOAD) == 0))
1794     this_hdr->sh_type = SHT_NOBITS;
1795   else
1796     {
1797       /* Who knows?  */
1798       this_hdr->sh_type = SHT_PROGBITS;
1799     }
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)
4356           /* Section symbols have no names.  */
4357           sym.st_name = 0;
4358         else
4359           {
4360             sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
4361                                                               syms[idx]->name,
4362                                                               true, false);
4363             if (sym.st_name == (unsigned long) -1)
4364               return false;
4365           }
4366
4367         type_ptr = elf_symbol_from (abfd, syms[idx]);
4368
4369         if ((flags & BSF_SECTION_SYM) == 0
4370             && bfd_is_com_section (syms[idx]->section))
4371           {
4372             /* ELF common symbols put the alignment into the `value' field,
4373                and the size into the `size' field.  This is backwards from
4374                how BFD handles it, so reverse it here.  */
4375             sym.st_size = value;
4376             if (type_ptr == NULL
4377                 || type_ptr->internal_elf_sym.st_value == 0)
4378               sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
4379             else
4380               sym.st_value = type_ptr->internal_elf_sym.st_value;
4381             sym.st_shndx = _bfd_elf_section_from_bfd_section
4382               (abfd, syms[idx]->section);
4383           }
4384         else
4385           {
4386             asection *sec = syms[idx]->section;
4387             int shndx;
4388
4389             if (sec->output_section)
4390               {
4391                 value += sec->output_offset;
4392                 sec = sec->output_section;
4393               }
4394             /* Don't add in the section vma for relocatable output.  */
4395             if (! relocatable_p)
4396               value += sec->vma;
4397             sym.st_value = value;
4398             sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
4399
4400             if (bfd_is_abs_section (sec)
4401                 && type_ptr != NULL
4402                 && type_ptr->internal_elf_sym.st_shndx != 0)
4403               {
4404                 /* This symbol is in a real ELF section which we did
4405                    not create as a BFD section.  Undo the mapping done
4406                    by copy_private_symbol_data.  */
4407                 shndx = type_ptr->internal_elf_sym.st_shndx;
4408                 switch (shndx)
4409                   {
4410                   case MAP_ONESYMTAB:
4411                     shndx = elf_onesymtab (abfd);
4412                     break;
4413                   case MAP_DYNSYMTAB:
4414                     shndx = elf_dynsymtab (abfd);
4415                     break;
4416                   case MAP_STRTAB:
4417                     shndx = elf_tdata (abfd)->strtab_section;
4418                     break;
4419                   case MAP_SHSTRTAB:
4420                     shndx = elf_tdata (abfd)->shstrtab_section;
4421                     break;
4422                   default:
4423                     break;
4424                   }
4425               }
4426             else
4427               {
4428                 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
4429
4430                 if (shndx == -1)
4431                   {
4432                     asection *sec2;
4433
4434                     /* Writing this would be a hell of a lot easier if
4435                        we had some decent documentation on bfd, and
4436                        knew what to expect of the library, and what to
4437                        demand of applications.  For example, it
4438                        appears that `objcopy' might not set the
4439                        section of a symbol to be a section that is
4440                        actually in the output file.  */
4441                     sec2 = bfd_get_section_by_name (abfd, sec->name);
4442                     BFD_ASSERT (sec2 != 0);
4443                     shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
4444                     BFD_ASSERT (shndx != -1);
4445                   }
4446               }
4447
4448             sym.st_shndx = shndx;
4449           }
4450
4451         if ((flags & BSF_FUNCTION) != 0)
4452           type = STT_FUNC;
4453         else if ((flags & BSF_OBJECT) != 0)
4454           type = STT_OBJECT;
4455         else
4456           type = STT_NOTYPE;
4457
4458         /* Processor-specific types */
4459         if (type_ptr != NULL
4460             && bed->elf_backend_get_symbol_type)
4461           type = (*bed->elf_backend_get_symbol_type) (&type_ptr->internal_elf_sym, type);
4462
4463         if (flags & BSF_SECTION_SYM)
4464           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
4465         else if (bfd_is_com_section (syms[idx]->section))
4466           sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
4467         else if (bfd_is_und_section (syms[idx]->section))
4468           sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
4469                                       ? STB_WEAK
4470                                       : STB_GLOBAL),
4471                                      type);
4472         else if (flags & BSF_FILE)
4473           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
4474         else
4475           {
4476             int bind = STB_LOCAL;
4477
4478             if (flags & BSF_LOCAL)
4479               bind = STB_LOCAL;
4480             else if (flags & BSF_WEAK)
4481               bind = STB_WEAK;
4482             else if (flags & BSF_GLOBAL)
4483               bind = STB_GLOBAL;
4484
4485             sym.st_info = ELF_ST_INFO (bind, type);
4486           }
4487
4488         if (type_ptr != NULL)
4489           sym.st_other = type_ptr->internal_elf_sym.st_other;
4490         else
4491           sym.st_other = 0;
4492
4493         bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
4494         outbound_syms += bed->s->sizeof_sym;
4495       }
4496
4497     *sttp = stt;
4498     symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
4499     symstrtab_hdr->sh_type = SHT_STRTAB;
4500
4501     symstrtab_hdr->sh_flags = 0;
4502     symstrtab_hdr->sh_addr = 0;
4503     symstrtab_hdr->sh_entsize = 0;
4504     symstrtab_hdr->sh_link = 0;
4505     symstrtab_hdr->sh_info = 0;
4506     symstrtab_hdr->sh_addralign = 1;
4507   }
4508
4509   return true;
4510 }
4511
4512 /* Return the number of bytes required to hold the symtab vector.
4513
4514    Note that we base it on the count plus 1, since we will null terminate
4515    the vector allocated based on this size.  However, the ELF symbol table
4516    always has a dummy entry as symbol #0, so it ends up even.  */
4517
4518 long
4519 _bfd_elf_get_symtab_upper_bound (abfd)
4520      bfd *abfd;
4521 {
4522   long symcount;
4523   long symtab_size;
4524   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
4525
4526   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4527   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4528
4529   return symtab_size;
4530 }
4531
4532 long
4533 _bfd_elf_get_dynamic_symtab_upper_bound (abfd)
4534      bfd *abfd;
4535 {
4536   long symcount;
4537   long symtab_size;
4538   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4539
4540   if (elf_dynsymtab (abfd) == 0)
4541     {
4542       bfd_set_error (bfd_error_invalid_operation);
4543       return -1;
4544     }
4545
4546   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4547   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4548
4549   return symtab_size;
4550 }
4551
4552 long
4553 _bfd_elf_get_reloc_upper_bound (abfd, asect)
4554      bfd *abfd ATTRIBUTE_UNUSED;
4555      sec_ptr asect;
4556 {
4557   return (asect->reloc_count + 1) * sizeof (arelent *);
4558 }
4559
4560 /* Canonicalize the relocs.  */
4561
4562 long
4563 _bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
4564      bfd *abfd;
4565      sec_ptr section;
4566      arelent **relptr;
4567      asymbol **symbols;
4568 {
4569   arelent *tblptr;
4570   unsigned int i;
4571
4572   if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd,
4573                                                            section,
4574                                                            symbols,
4575                                                            false))
4576     return -1;
4577
4578   tblptr = section->relocation;
4579   for (i = 0; i < section->reloc_count; i++)
4580     *relptr++ = tblptr++;
4581
4582   *relptr = NULL;
4583
4584   return section->reloc_count;
4585 }
4586
4587 long
4588 _bfd_elf_get_symtab (abfd, alocation)
4589      bfd *abfd;
4590      asymbol **alocation;
4591 {
4592   long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table
4593     (abfd, alocation, false);
4594
4595   if (symcount >= 0)
4596     bfd_get_symcount (abfd) = symcount;
4597   return symcount;
4598 }
4599
4600 long
4601 _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
4602      bfd *abfd;
4603      asymbol **alocation;
4604 {
4605   return get_elf_backend_data (abfd)->s->slurp_symbol_table
4606     (abfd, alocation, true);
4607 }
4608
4609 /* Return the size required for the dynamic reloc entries.  Any
4610    section that was actually installed in the BFD, and has type
4611    SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
4612    considered to be a dynamic reloc section.  */
4613
4614 long
4615 _bfd_elf_get_dynamic_reloc_upper_bound (abfd)
4616      bfd *abfd;
4617 {
4618   long ret;
4619   asection *s;
4620
4621   if (elf_dynsymtab (abfd) == 0)
4622     {
4623       bfd_set_error (bfd_error_invalid_operation);
4624       return -1;
4625     }
4626
4627   ret = sizeof (arelent *);
4628   for (s = abfd->sections; s != NULL; s = s->next)
4629     if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4630         && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4631             || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4632       ret += ((s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize)
4633               * sizeof (arelent *));
4634
4635   return ret;
4636 }
4637
4638 /* Canonicalize the dynamic relocation entries.  Note that we return
4639    the dynamic relocations as a single block, although they are
4640    actually associated with particular sections; the interface, which
4641    was designed for SunOS style shared libraries, expects that there
4642    is only one set of dynamic relocs.  Any section that was actually
4643    installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
4644    the dynamic symbol table, is considered to be a dynamic reloc
4645    section.  */
4646
4647 long
4648 _bfd_elf_canonicalize_dynamic_reloc (abfd, storage, syms)
4649      bfd *abfd;
4650      arelent **storage;
4651      asymbol **syms;
4652 {
4653   boolean (*slurp_relocs) PARAMS ((bfd *, asection *, asymbol **, boolean));
4654   asection *s;
4655   long ret;
4656
4657   if (elf_dynsymtab (abfd) == 0)
4658     {
4659       bfd_set_error (bfd_error_invalid_operation);
4660       return -1;
4661     }
4662
4663   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
4664   ret = 0;
4665   for (s = abfd->sections; s != NULL; s = s->next)
4666     {
4667       if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4668           && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4669               || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4670         {
4671           arelent *p;
4672           long count, i;
4673
4674           if (! (*slurp_relocs) (abfd, s, syms, true))
4675             return -1;
4676           count = s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize;
4677           p = s->relocation;
4678           for (i = 0; i < count; i++)
4679             *storage++ = p++;
4680           ret += count;
4681         }
4682     }
4683
4684   *storage = NULL;
4685
4686   return ret;
4687 }
4688 \f
4689 /* Read in the version information.  */
4690
4691 boolean
4692 _bfd_elf_slurp_version_tables (abfd)
4693      bfd *abfd;
4694 {
4695   bfd_byte *contents = NULL;
4696
4697   if (elf_dynverdef (abfd) != 0)
4698     {
4699       Elf_Internal_Shdr *hdr;
4700       Elf_External_Verdef *everdef;
4701       Elf_Internal_Verdef *iverdef;
4702       Elf_Internal_Verdef *iverdefarr;
4703       Elf_Internal_Verdef iverdefmem;
4704       unsigned int i;
4705       unsigned int maxidx;
4706
4707       hdr = &elf_tdata (abfd)->dynverdef_hdr;
4708
4709       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4710       if (contents == NULL)
4711         goto error_return;
4712       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4713           || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4714         goto error_return;
4715
4716       /* We know the number of entries in the section but not the maximum
4717          index.  Therefore we have to run through all entries and find
4718          the maximum.  */
4719       everdef = (Elf_External_Verdef *) contents;
4720       maxidx = 0;
4721       for (i = 0; i < hdr->sh_info; ++i)
4722         {
4723           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
4724
4725           if ((iverdefmem.vd_ndx & VERSYM_VERSION) > maxidx)
4726             maxidx = iverdefmem.vd_ndx & VERSYM_VERSION;
4727
4728           everdef = ((Elf_External_Verdef *)
4729                      ((bfd_byte *) everdef + iverdefmem.vd_next));
4730         }
4731
4732       elf_tdata (abfd)->verdef =
4733         ((Elf_Internal_Verdef *)
4734          bfd_zalloc (abfd, maxidx * sizeof (Elf_Internal_Verdef)));
4735       if (elf_tdata (abfd)->verdef == NULL)
4736         goto error_return;
4737
4738       elf_tdata (abfd)->cverdefs = maxidx;
4739
4740       everdef = (Elf_External_Verdef *) contents;
4741       iverdefarr = elf_tdata (abfd)->verdef;
4742       for (i = 0; i < hdr->sh_info; i++)
4743         {
4744           Elf_External_Verdaux *everdaux;
4745           Elf_Internal_Verdaux *iverdaux;
4746           unsigned int j;
4747
4748           _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
4749
4750           iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
4751           memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
4752
4753           iverdef->vd_bfd = abfd;
4754
4755           iverdef->vd_auxptr = ((Elf_Internal_Verdaux *)
4756                                 bfd_alloc (abfd,
4757                                            (iverdef->vd_cnt
4758                                             * sizeof (Elf_Internal_Verdaux))));
4759           if (iverdef->vd_auxptr == NULL)
4760             goto error_return;
4761
4762           everdaux = ((Elf_External_Verdaux *)
4763                       ((bfd_byte *) everdef + iverdef->vd_aux));
4764           iverdaux = iverdef->vd_auxptr;
4765           for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
4766             {
4767               _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
4768
4769               iverdaux->vda_nodename =
4770                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4771                                                  iverdaux->vda_name);
4772               if (iverdaux->vda_nodename == NULL)
4773                 goto error_return;
4774
4775               if (j + 1 < iverdef->vd_cnt)
4776                 iverdaux->vda_nextptr = iverdaux + 1;
4777               else
4778                 iverdaux->vda_nextptr = NULL;
4779
4780               everdaux = ((Elf_External_Verdaux *)
4781                           ((bfd_byte *) everdaux + iverdaux->vda_next));
4782             }
4783
4784           iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
4785
4786           if (i + 1 < hdr->sh_info)
4787             iverdef->vd_nextdef = iverdef + 1;
4788           else
4789             iverdef->vd_nextdef = NULL;
4790
4791           everdef = ((Elf_External_Verdef *)
4792                      ((bfd_byte *) everdef + iverdef->vd_next));
4793         }
4794
4795       free (contents);
4796       contents = NULL;
4797     }
4798
4799   if (elf_dynverref (abfd) != 0)
4800     {
4801       Elf_Internal_Shdr *hdr;
4802       Elf_External_Verneed *everneed;
4803       Elf_Internal_Verneed *iverneed;
4804       unsigned int i;
4805
4806       hdr = &elf_tdata (abfd)->dynverref_hdr;
4807
4808       elf_tdata (abfd)->verref =
4809         ((Elf_Internal_Verneed *)
4810          bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verneed)));
4811       if (elf_tdata (abfd)->verref == NULL)
4812         goto error_return;
4813
4814       elf_tdata (abfd)->cverrefs = hdr->sh_info;
4815
4816       contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4817       if (contents == NULL)
4818         goto error_return;
4819       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4820           || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4821         goto error_return;
4822
4823       everneed = (Elf_External_Verneed *) contents;
4824       iverneed = elf_tdata (abfd)->verref;
4825       for (i = 0; i < hdr->sh_info; i++, iverneed++)
4826         {
4827           Elf_External_Vernaux *evernaux;
4828           Elf_Internal_Vernaux *ivernaux;
4829           unsigned int j;
4830
4831           _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
4832
4833           iverneed->vn_bfd = abfd;
4834
4835           iverneed->vn_filename =
4836             bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4837                                              iverneed->vn_file);
4838           if (iverneed->vn_filename == NULL)
4839             goto error_return;
4840
4841           iverneed->vn_auxptr =
4842             ((Elf_Internal_Vernaux *)
4843              bfd_alloc (abfd,
4844                         iverneed->vn_cnt * sizeof (Elf_Internal_Vernaux)));
4845
4846           evernaux = ((Elf_External_Vernaux *)
4847                       ((bfd_byte *) everneed + iverneed->vn_aux));
4848           ivernaux = iverneed->vn_auxptr;
4849           for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
4850             {
4851               _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
4852
4853               ivernaux->vna_nodename =
4854                 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4855                                                  ivernaux->vna_name);
4856               if (ivernaux->vna_nodename == NULL)
4857                 goto error_return;
4858
4859               if (j + 1 < iverneed->vn_cnt)
4860                 ivernaux->vna_nextptr = ivernaux + 1;
4861               else
4862                 ivernaux->vna_nextptr = NULL;
4863
4864               evernaux = ((Elf_External_Vernaux *)
4865                           ((bfd_byte *) evernaux + ivernaux->vna_next));
4866             }
4867
4868           if (i + 1 < hdr->sh_info)
4869             iverneed->vn_nextref = iverneed + 1;
4870           else
4871             iverneed->vn_nextref = NULL;
4872
4873           everneed = ((Elf_External_Verneed *)
4874                       ((bfd_byte *) everneed + iverneed->vn_next));
4875         }
4876
4877       free (contents);
4878       contents = NULL;
4879     }
4880
4881   return true;
4882
4883  error_return:
4884   if (contents == NULL)
4885     free (contents);
4886   return false;
4887 }
4888 \f
4889 asymbol *
4890 _bfd_elf_make_empty_symbol (abfd)
4891      bfd *abfd;
4892 {
4893   elf_symbol_type *newsym;
4894
4895   newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
4896   if (!newsym)
4897     return NULL;
4898   else
4899     {
4900       newsym->symbol.the_bfd = abfd;
4901       return &newsym->symbol;
4902     }
4903 }
4904
4905 void
4906 _bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
4907      bfd *ignore_abfd ATTRIBUTE_UNUSED;
4908      asymbol *symbol;
4909      symbol_info *ret;
4910 {
4911   bfd_symbol_info (symbol, ret);
4912 }
4913
4914 /* Return whether a symbol name implies a local symbol.  Most targets
4915    use this function for the is_local_label_name entry point, but some
4916    override it.  */
4917
4918 boolean
4919 _bfd_elf_is_local_label_name (abfd, name)
4920      bfd *abfd ATTRIBUTE_UNUSED;
4921      const char *name;
4922 {
4923   /* Normal local symbols start with ``.L''.  */
4924   if (name[0] == '.' && name[1] == 'L')
4925     return true;
4926
4927   /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
4928      DWARF debugging symbols starting with ``..''.  */
4929   if (name[0] == '.' && name[1] == '.')
4930     return true;
4931
4932   /* gcc will sometimes generate symbols beginning with ``_.L_'' when
4933      emitting DWARF debugging output.  I suspect this is actually a
4934      small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
4935      ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
4936      underscore to be emitted on some ELF targets).  For ease of use,
4937      we treat such symbols as local.  */
4938   if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
4939     return true;
4940
4941   return false;
4942 }
4943
4944 alent *
4945 _bfd_elf_get_lineno (ignore_abfd, symbol)
4946      bfd *ignore_abfd ATTRIBUTE_UNUSED;
4947      asymbol *symbol ATTRIBUTE_UNUSED;
4948 {
4949   abort ();
4950   return NULL;
4951 }
4952
4953 boolean
4954 _bfd_elf_set_arch_mach (abfd, arch, machine)
4955      bfd *abfd;
4956      enum bfd_architecture arch;
4957      unsigned long machine;
4958 {
4959   /* If this isn't the right architecture for this backend, and this
4960      isn't the generic backend, fail.  */
4961   if (arch != get_elf_backend_data (abfd)->arch
4962       && arch != bfd_arch_unknown
4963       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
4964     return false;
4965
4966   return bfd_default_set_arch_mach (abfd, arch, machine);
4967 }
4968
4969 /* Find the nearest line to a particular section and offset, for error
4970    reporting.  */
4971
4972 boolean
4973 _bfd_elf_find_nearest_line (abfd,
4974                             section,
4975                             symbols,
4976                             offset,
4977                             filename_ptr,
4978                             functionname_ptr,
4979                             line_ptr)
4980      bfd *abfd;
4981      asection *section;
4982      asymbol **symbols;
4983      bfd_vma offset;
4984      CONST char **filename_ptr;
4985      CONST char **functionname_ptr;
4986      unsigned int *line_ptr;
4987 {
4988   boolean found;
4989   const char *filename;
4990   asymbol *func;
4991   bfd_vma low_func;
4992   asymbol **p;
4993
4994   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
4995                                      filename_ptr, functionname_ptr,
4996                                      line_ptr))
4997     return true;
4998
4999   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
5000                                      filename_ptr, functionname_ptr,
5001                                      line_ptr, 0))
5002     return true;
5003
5004   if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
5005                                              &found, filename_ptr,
5006                                              functionname_ptr, line_ptr,
5007                                              &elf_tdata (abfd)->line_info))
5008     return false;
5009   if (found)
5010     return true;
5011
5012   if (symbols == NULL)
5013     return false;
5014
5015   filename = NULL;
5016   func = NULL;
5017   low_func = 0;
5018
5019   for (p = symbols; *p != NULL; p++)
5020     {
5021       elf_symbol_type *q;
5022
5023       q = (elf_symbol_type *) *p;
5024
5025       if (bfd_get_section (&q->symbol) != section)
5026         continue;
5027
5028       switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
5029         {
5030         default:
5031           break;
5032         case STT_FILE:
5033           filename = bfd_asymbol_name (&q->symbol);
5034           break;
5035         case STT_NOTYPE:
5036         case STT_FUNC:
5037           if (q->symbol.section == section
5038               && q->symbol.value >= low_func
5039               && q->symbol.value <= offset)
5040             {
5041               func = (asymbol *) q;
5042               low_func = q->symbol.value;
5043             }
5044           break;
5045         }
5046     }
5047
5048   if (func == NULL)
5049     return false;
5050
5051   *filename_ptr = filename;
5052   *functionname_ptr = bfd_asymbol_name (func);
5053   *line_ptr = 0;
5054   return true;
5055 }
5056
5057 int
5058 _bfd_elf_sizeof_headers (abfd, reloc)
5059      bfd *abfd;
5060      boolean reloc;
5061 {
5062   int ret;
5063
5064   ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
5065   if (! reloc)
5066     ret += get_program_header_size (abfd);
5067   return ret;
5068 }
5069
5070 boolean
5071 _bfd_elf_set_section_contents (abfd, section, location, offset, count)
5072      bfd *abfd;
5073      sec_ptr section;
5074      PTR location;
5075      file_ptr offset;
5076      bfd_size_type count;
5077 {
5078   Elf_Internal_Shdr *hdr;
5079
5080   if (! abfd->output_has_begun
5081       && ! _bfd_elf_compute_section_file_positions
5082       (abfd, (struct bfd_link_info *) NULL))
5083     return false;
5084
5085   hdr = &elf_section_data (section)->this_hdr;
5086
5087   if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
5088     return false;
5089   if (bfd_write (location, 1, count, abfd) != count)
5090     return false;
5091
5092   return true;
5093 }
5094
5095 void
5096 _bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
5097      bfd *abfd ATTRIBUTE_UNUSED;
5098      arelent *cache_ptr ATTRIBUTE_UNUSED;
5099      Elf_Internal_Rela *dst ATTRIBUTE_UNUSED;
5100 {
5101   abort ();
5102 }
5103
5104 #if 0
5105 void
5106 _bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
5107      bfd *abfd;
5108      arelent *cache_ptr;
5109      Elf_Internal_Rel *dst;
5110 {
5111   abort ();
5112 }
5113 #endif
5114
5115 /* Try to convert a non-ELF reloc into an ELF one.  */
5116
5117 boolean
5118 _bfd_elf_validate_reloc (abfd, areloc)
5119      bfd *abfd;
5120      arelent *areloc;
5121 {
5122   /* Check whether we really have an ELF howto.  */
5123
5124   if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
5125     {
5126       bfd_reloc_code_real_type code;
5127       reloc_howto_type *howto;
5128
5129       /* Alien reloc: Try to determine its type to replace it with an
5130          equivalent ELF reloc.  */
5131
5132       if (areloc->howto->pc_relative)
5133         {
5134           switch (areloc->howto->bitsize)
5135             {
5136             case 8:
5137               code = BFD_RELOC_8_PCREL;
5138               break;
5139             case 12:
5140               code = BFD_RELOC_12_PCREL;
5141               break;
5142             case 16:
5143               code = BFD_RELOC_16_PCREL;
5144               break;
5145             case 24:
5146               code = BFD_RELOC_24_PCREL;
5147               break;
5148             case 32:
5149               code = BFD_RELOC_32_PCREL;
5150               break;
5151             case 64:
5152               code = BFD_RELOC_64_PCREL;
5153               break;
5154             default:
5155               goto fail;
5156             }
5157
5158           howto = bfd_reloc_type_lookup (abfd, code);
5159
5160           if (areloc->howto->pcrel_offset != howto->pcrel_offset)
5161             {
5162               if (howto->pcrel_offset)
5163                 areloc->addend += areloc->address;
5164               else
5165                 areloc->addend -= areloc->address; /* addend is unsigned!! */
5166             }
5167         }
5168       else
5169         {
5170           switch (areloc->howto->bitsize)
5171             {
5172             case 8:
5173               code = BFD_RELOC_8;
5174               break;
5175             case 14:
5176               code = BFD_RELOC_14;
5177               break;
5178             case 16:
5179               code = BFD_RELOC_16;
5180               break;
5181             case 26:
5182               code = BFD_RELOC_26;
5183               break;
5184             case 32:
5185               code = BFD_RELOC_32;
5186               break;
5187             case 64:
5188               code = BFD_RELOC_64;
5189               break;
5190             default:
5191               goto fail;
5192             }
5193
5194           howto = bfd_reloc_type_lookup (abfd, code);
5195         }
5196
5197       if (howto)
5198         areloc->howto = howto;
5199       else
5200         goto fail;
5201     }
5202
5203   return true;
5204
5205  fail:
5206   (*_bfd_error_handler)
5207     (_("%s: unsupported relocation type %s"),
5208      bfd_get_filename (abfd), areloc->howto->name);
5209   bfd_set_error (bfd_error_bad_value);
5210   return false;
5211 }
5212
5213 boolean
5214 _bfd_elf_close_and_cleanup (abfd)
5215      bfd *abfd;
5216 {
5217   if (bfd_get_format (abfd) == bfd_object)
5218     {
5219       if (elf_shstrtab (abfd) != NULL)
5220         _bfd_stringtab_free (elf_shstrtab (abfd));
5221     }
5222
5223   return _bfd_generic_close_and_cleanup (abfd);
5224 }
5225
5226 /* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
5227    in the relocation's offset.  Thus we cannot allow any sort of sanity
5228    range-checking to interfere.  There is nothing else to do in processing
5229    this reloc.  */
5230
5231 bfd_reloc_status_type
5232 _bfd_elf_rel_vtable_reloc_fn (abfd, re, symbol, data, is, obfd, errmsg)
5233      bfd *abfd ATTRIBUTE_UNUSED;
5234      arelent *re ATTRIBUTE_UNUSED;
5235      struct symbol_cache_entry *symbol ATTRIBUTE_UNUSED;
5236      PTR data ATTRIBUTE_UNUSED;
5237      asection *is ATTRIBUTE_UNUSED;
5238      bfd *obfd ATTRIBUTE_UNUSED;
5239      char **errmsg ATTRIBUTE_UNUSED;
5240 {
5241   return bfd_reloc_ok;
5242 }
5243 \f
5244 /* Elf core file support.  Much of this only works on native
5245    toolchains, since we rely on knowing the
5246    machine-dependent procfs structure in order to pick
5247    out details about the corefile.  */
5248
5249 #ifdef HAVE_SYS_PROCFS_H
5250 # include <sys/procfs.h>
5251 #endif
5252
5253 /* Define offsetof for those systems which lack it.  */
5254
5255 #ifndef offsetof
5256 # define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
5257 #endif
5258
5259 /* FIXME: this is kinda wrong, but it's what gdb wants.  */
5260
5261 static int
5262 elfcore_make_pid (abfd)
5263      bfd *abfd;
5264 {
5265   return ((elf_tdata (abfd)->core_lwpid << 16)
5266           + (elf_tdata (abfd)->core_pid));
5267 }
5268
5269 /* If there isn't a section called NAME, make one, using
5270    data from SECT.  Note, this function will generate a
5271    reference to NAME, so you shouldn't deallocate or
5272    overwrite it.  */
5273
5274 static boolean
5275 elfcore_maybe_make_sect (abfd, name, sect)
5276      bfd *abfd;
5277      char *name;
5278      asection *sect;
5279 {
5280   asection *sect2;
5281
5282   if (bfd_get_section_by_name (abfd, name) != NULL)
5283     return true;
5284
5285   sect2 = bfd_make_section (abfd, name);
5286   if (sect2 == NULL)
5287     return false;
5288
5289   sect2->_raw_size = sect->_raw_size;
5290   sect2->filepos = sect->filepos;
5291   sect2->flags = sect->flags;
5292   sect2->alignment_power = sect->alignment_power;
5293   return true;
5294 }
5295
5296 /* prstatus_t exists on:
5297      solaris 2.5+
5298      linux 2.[01] + glibc
5299      unixware 4.2
5300 */
5301
5302 #if defined (HAVE_PRSTATUS_T)
5303 static boolean
5304 elfcore_grok_prstatus (abfd, note)
5305      bfd *abfd;
5306      Elf_Internal_Note *note;
5307 {
5308   char buf[100];
5309   char *name;
5310   asection *sect;
5311   int raw_size;
5312   int offset;
5313
5314   if (note->descsz == sizeof (prstatus_t))
5315     {
5316       prstatus_t prstat;
5317
5318       raw_size = sizeof (prstat.pr_reg);
5319       offset   = offsetof (prstatus_t, pr_reg);
5320       memcpy (&prstat, note->descdata, sizeof (prstat));
5321
5322       elf_tdata (abfd)->core_signal = prstat.pr_cursig;
5323       elf_tdata (abfd)->core_pid = prstat.pr_pid;
5324
5325       /* pr_who exists on:
5326          solaris 2.5+
5327          unixware 4.2
5328          pr_who doesn't exist on:
5329          linux 2.[01]
5330          */
5331 #if defined (HAVE_PRSTATUS_T_PR_WHO)
5332       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
5333 #endif
5334     }
5335 #if defined (HAVE_PRSTATUS32_T)
5336   else if (note->descsz == sizeof (prstatus32_t))
5337     {
5338       /* 64-bit host, 32-bit corefile */
5339       prstatus32_t prstat;
5340
5341       raw_size = sizeof (prstat.pr_reg);
5342       offset   = offsetof (prstatus32_t, pr_reg);
5343       memcpy (&prstat, note->descdata, sizeof (prstat));
5344
5345       elf_tdata (abfd)->core_signal = prstat.pr_cursig;
5346       elf_tdata (abfd)->core_pid = prstat.pr_pid;
5347
5348       /* pr_who exists on:
5349          solaris 2.5+
5350          unixware 4.2
5351          pr_who doesn't exist on:
5352          linux 2.[01]
5353          */
5354 #if defined (HAVE_PRSTATUS32_T_PR_WHO)
5355       elf_tdata (abfd)->core_lwpid = prstat.pr_who;
5356 #endif
5357     }
5358 #endif /* HAVE_PRSTATUS32_T */
5359   else
5360     {
5361       /* Fail - we don't know how to handle any other
5362          note size (ie. data object type).  */
5363       return true;
5364     }
5365
5366   /* Make a ".reg/999" section.  */
5367
5368   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5369   name = bfd_alloc (abfd, strlen (buf) + 1);
5370   if (name == NULL)
5371     return false;
5372   strcpy (name, buf);
5373
5374   sect = bfd_make_section (abfd, name);
5375   if (sect == NULL)
5376     return false;
5377
5378   sect->_raw_size = raw_size;
5379   sect->filepos = note->descpos + offset;
5380
5381   sect->flags = SEC_HAS_CONTENTS;
5382   sect->alignment_power = 2;
5383
5384   if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5385     return false;
5386
5387   return true;
5388 }
5389 #endif /* defined (HAVE_PRSTATUS_T) */
5390
5391 /* Create a pseudosection containing the exact contents of NOTE.  This
5392    actually creates up to two pseudosections:
5393    - For the single-threaded case, a section named NAME, unless
5394      such a section already exists.
5395    - For the multi-threaded case, a section named "NAME/PID", where
5396      PID is elfcore_make_pid (abfd).
5397    Both pseudosections have identical contents: the contents of NOTE.  */
5398
5399 static boolean
5400 elfcore_make_note_pseudosection (abfd, name, note)
5401      bfd *abfd;
5402      char *name;
5403      Elf_Internal_Note *note;
5404 {
5405   char buf[100];
5406   char *threaded_name;
5407   asection *sect;
5408
5409   /* Build the section name.  */
5410
5411   sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
5412   threaded_name = bfd_alloc (abfd, strlen (buf) + 1);
5413   if (threaded_name == NULL)
5414     return false;
5415   strcpy (threaded_name, buf);
5416
5417   sect = bfd_make_section (abfd, threaded_name);
5418   if (sect == NULL)
5419     return false;
5420   sect->_raw_size = note->descsz;
5421   sect->filepos = note->descpos;
5422   sect->flags = SEC_HAS_CONTENTS;
5423   sect->alignment_power = 2;
5424
5425   if (! elfcore_maybe_make_sect (abfd, name, sect))
5426     return false;
5427
5428   return true;
5429 }
5430
5431 /* There isn't a consistent prfpregset_t across platforms,
5432    but it doesn't matter, because we don't have to pick this
5433    data structure apart.  */
5434
5435 static boolean
5436 elfcore_grok_prfpreg (abfd, note)
5437      bfd *abfd;
5438      Elf_Internal_Note *note;
5439 {
5440   return elfcore_make_note_pseudosection (abfd, ".reg2", note);
5441 }
5442
5443 /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
5444    type of 5 (NT_PRXFPREG).  Just include the whole note's contents
5445    literally.  */
5446
5447 static boolean
5448 elfcore_grok_prxfpreg (abfd, note)
5449      bfd *abfd;
5450      Elf_Internal_Note *note;
5451 {
5452   return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
5453 }
5454
5455 #if defined (HAVE_PRPSINFO_T)
5456 typedef prpsinfo_t   elfcore_psinfo_t;
5457 #if defined (HAVE_PRPSINFO32_T)         /* Sparc64 cross Sparc32 */
5458 typedef prpsinfo32_t elfcore_psinfo32_t;
5459 #endif
5460 #endif
5461
5462 #if defined (HAVE_PSINFO_T)
5463 typedef psinfo_t   elfcore_psinfo_t;
5464 #if defined (HAVE_PSINFO32_T)           /* Sparc64 cross Sparc32 */
5465 typedef psinfo32_t elfcore_psinfo32_t;
5466 #endif
5467 #endif
5468
5469 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5470
5471 /* return a malloc'ed copy of a string at START which is at
5472    most MAX bytes long, possibly without a terminating '\0'.
5473    the copy will always have a terminating '\0'.  */
5474
5475 static char*
5476 elfcore_strndup (abfd, start, max)
5477      bfd *abfd;
5478      char *start;
5479      int max;
5480 {
5481   char *dup;
5482   char *end = memchr (start, '\0', max);
5483   int len;
5484
5485   if (end == NULL)
5486     len = max;
5487   else
5488     len = end - start;
5489
5490   dup = bfd_alloc (abfd, len + 1);
5491   if (dup == NULL)
5492     return NULL;
5493
5494   memcpy (dup, start, len);
5495   dup[len] = '\0';
5496
5497   return dup;
5498 }
5499
5500 static boolean
5501 elfcore_grok_psinfo (abfd, note)
5502      bfd *abfd;
5503      Elf_Internal_Note *note;
5504 {
5505   if (note->descsz == sizeof (elfcore_psinfo_t))
5506     {
5507       elfcore_psinfo_t psinfo;
5508
5509       memcpy (&psinfo, note->descdata, sizeof (psinfo));
5510
5511       elf_tdata (abfd)->core_program
5512         = elfcore_strndup (abfd, psinfo.pr_fname, sizeof (psinfo.pr_fname));
5513
5514       elf_tdata (abfd)->core_command
5515         = elfcore_strndup (abfd, psinfo.pr_psargs, sizeof (psinfo.pr_psargs));
5516     }
5517 #if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
5518   else if (note->descsz == sizeof (elfcore_psinfo32_t))
5519     {
5520       /* 64-bit host, 32-bit corefile */
5521       elfcore_psinfo32_t psinfo;
5522
5523       memcpy (&psinfo, note->descdata, sizeof (psinfo));
5524
5525       elf_tdata (abfd)->core_program
5526         = elfcore_strndup (abfd, psinfo.pr_fname, sizeof (psinfo.pr_fname));
5527
5528       elf_tdata (abfd)->core_command
5529         = elfcore_strndup (abfd, psinfo.pr_psargs, sizeof (psinfo.pr_psargs));
5530     }
5531 #endif
5532
5533   else
5534     {
5535       /* Fail - we don't know how to handle any other
5536          note size (ie. data object type).  */
5537       return true;
5538     }
5539
5540   /* Note that for some reason, a spurious space is tacked
5541      onto the end of the args in some (at least one anyway)
5542      implementations, so strip it off if it exists.  */
5543
5544   {
5545     char *command = elf_tdata (abfd)->core_command;
5546     int n = strlen (command);
5547
5548     if (0 < n && command[n - 1] == ' ')
5549       command[n - 1] = '\0';
5550   }
5551
5552   return true;
5553 }
5554 #endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
5555
5556 #if defined (HAVE_PSTATUS_T)
5557 static boolean
5558 elfcore_grok_pstatus (abfd, note)
5559      bfd *abfd;
5560      Elf_Internal_Note *note;
5561 {
5562   if (note->descsz == sizeof (pstatus_t))
5563     {
5564       pstatus_t pstat;
5565
5566       memcpy (&pstat, note->descdata, sizeof (pstat));
5567
5568       elf_tdata (abfd)->core_pid = pstat.pr_pid;
5569     }
5570 #if defined (HAVE_PSTATUS32_T)
5571   else if (note->descsz == sizeof (pstatus32_t))
5572     {
5573       /* 64-bit host, 32-bit corefile */
5574       pstatus32_t pstat;
5575
5576       memcpy (&pstat, note->descdata, sizeof (pstat));
5577
5578       elf_tdata (abfd)->core_pid = pstat.pr_pid;
5579     }
5580 #endif
5581   /* Could grab some more details from the "representative"
5582      lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
5583      NT_LWPSTATUS note, presumably.  */
5584
5585   return true;
5586 }
5587 #endif /* defined (HAVE_PSTATUS_T) */
5588
5589 #if defined (HAVE_LWPSTATUS_T)
5590 static boolean
5591 elfcore_grok_lwpstatus (abfd, note)
5592      bfd *abfd;
5593      Elf_Internal_Note *note;
5594 {
5595   lwpstatus_t lwpstat;
5596   char buf[100];
5597   char *name;
5598   asection *sect;
5599
5600   if (note->descsz != sizeof (lwpstat))
5601     return true;
5602
5603   memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
5604
5605   elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
5606   elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
5607
5608   /* Make a ".reg/999" section.  */
5609
5610   sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5611   name = bfd_alloc (abfd, strlen (buf) + 1);
5612   if (name == NULL)
5613     return false;
5614   strcpy (name, buf);
5615
5616   sect = bfd_make_section (abfd, name);
5617   if (sect == NULL)
5618     return false;
5619
5620 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5621   sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
5622   sect->filepos = note->descpos
5623     + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
5624 #endif
5625
5626 #if defined (HAVE_LWPSTATUS_T_PR_REG)
5627   sect->_raw_size = sizeof (lwpstat.pr_reg);
5628   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
5629 #endif
5630
5631   sect->flags = SEC_HAS_CONTENTS;
5632   sect->alignment_power = 2;
5633
5634   if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
5635     return false;
5636
5637   /* Make a ".reg2/999" section */
5638
5639   sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
5640   name = bfd_alloc (abfd, strlen (buf) + 1);
5641   if (name == NULL)
5642     return false;
5643   strcpy (name, buf);
5644
5645   sect = bfd_make_section (abfd, name);
5646   if (sect == NULL)
5647     return false;
5648
5649 #if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5650   sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
5651   sect->filepos = note->descpos
5652     + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
5653 #endif
5654
5655 #if defined (HAVE_LWPSTATUS_T_PR_FPREG)
5656   sect->_raw_size = sizeof (lwpstat.pr_fpreg);
5657   sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
5658 #endif
5659
5660   sect->flags = SEC_HAS_CONTENTS;
5661   sect->alignment_power = 2;
5662
5663   if (!elfcore_maybe_make_sect (abfd, ".reg2", sect))
5664     return false;
5665
5666   return true;
5667 }
5668 #endif /* defined (HAVE_LWPSTATUS_T) */
5669
5670 #if defined (HAVE_WIN32_PSTATUS_T)
5671 static boolean
5672 elfcore_grok_win32pstatus (abfd, note)
5673      bfd *abfd;
5674      Elf_Internal_Note *note;
5675 {
5676   char buf[30];
5677   char *name;
5678   asection *sect;
5679   win32_pstatus_t pstatus;
5680
5681   if (note->descsz < sizeof (pstatus))
5682     return true;
5683
5684   memcpy (&pstatus, note->descdata, note->descsz);
5685
5686   switch (pstatus.data_type)
5687     {
5688     case NOTE_INFO_PROCESS:
5689       /* FIXME: need to add ->core_command.  */
5690       elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
5691       elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
5692       break;
5693
5694     case NOTE_INFO_THREAD:
5695       /* Make a ".reg/999" section.  */
5696       sprintf (buf, ".reg/%d", pstatus.data.thread_info.tid);
5697
5698       name = bfd_alloc (abfd, strlen (buf) + 1);
5699       if (name == NULL)
5700         return false;
5701
5702       strcpy (name, buf);
5703
5704       sect = bfd_make_section (abfd, name);
5705       if (sect == NULL)
5706         return false;
5707
5708       sect->_raw_size = sizeof (pstatus.data.thread_info.thread_context);
5709       sect->filepos = note->descpos + offsetof (struct win32_pstatus,
5710                                                 data.thread_info.thread_context);
5711       sect->flags = SEC_HAS_CONTENTS;
5712       sect->alignment_power = 2;
5713
5714       if (pstatus.data.thread_info.is_active_thread)
5715         if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5716           return false;
5717       break;
5718
5719     case NOTE_INFO_MODULE:
5720       /* Make a ".module/xxxxxxxx" section.  */
5721       sprintf (buf, ".module/%08x", pstatus.data.module_info.base_address);
5722
5723       name = bfd_alloc (abfd, strlen (buf) + 1);
5724       if (name == NULL)
5725         return false;
5726
5727       strcpy (name, buf);
5728
5729       sect = bfd_make_section (abfd, name);
5730
5731       if (sect == NULL)
5732         return false;
5733
5734       sect->_raw_size = note->descsz;
5735       sect->filepos = note->descpos;
5736       sect->flags = SEC_HAS_CONTENTS;
5737       sect->alignment_power = 2;
5738       break;
5739
5740     default:
5741       return true;
5742     }
5743
5744   return true;
5745 }
5746 #endif /* HAVE_WIN32_PSTATUS_T */
5747
5748 static boolean
5749 elfcore_grok_note (abfd, note)
5750      bfd *abfd;
5751      Elf_Internal_Note *note;
5752 {
5753   switch (note->type)
5754     {
5755     default:
5756       return true;
5757
5758 #if defined (HAVE_PRSTATUS_T)
5759     case NT_PRSTATUS:
5760       return elfcore_grok_prstatus (abfd, note);
5761 #endif
5762
5763 #if defined (HAVE_PSTATUS_T)
5764     case NT_PSTATUS:
5765       return elfcore_grok_pstatus (abfd, note);
5766 #endif
5767
5768 #if defined (HAVE_LWPSTATUS_T)
5769     case NT_LWPSTATUS:
5770       return elfcore_grok_lwpstatus (abfd, note);
5771 #endif
5772
5773     case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
5774       return elfcore_grok_prfpreg (abfd, note);
5775
5776 #if defined (HAVE_WIN32_PSTATUS_T)
5777     case NT_WIN32PSTATUS:
5778       return elfcore_grok_win32pstatus (abfd, note);
5779 #endif
5780
5781     case NT_PRXFPREG:           /* Linux SSE extension */
5782       if (note->namesz == 5
5783           && ! strcmp (note->namedata, "LINUX"))
5784         return elfcore_grok_prxfpreg (abfd, note);
5785       else
5786         return true;
5787
5788 #if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5789     case NT_PRPSINFO:
5790     case NT_PSINFO:
5791       return elfcore_grok_psinfo (abfd, note);
5792 #endif
5793     }
5794 }
5795
5796 static boolean
5797 elfcore_read_notes (abfd, offset, size)
5798      bfd *abfd;
5799      bfd_vma offset;
5800      bfd_vma size;
5801 {
5802   char *buf;
5803   char *p;
5804
5805   if (size <= 0)
5806     return true;
5807
5808   if (bfd_seek (abfd, offset, SEEK_SET) == -1)
5809     return false;
5810
5811   buf = bfd_malloc ((size_t) size);
5812   if (buf == NULL)
5813     return false;
5814
5815   if (bfd_read (buf, size, 1, abfd) != size)
5816     {
5817     error:
5818       free (buf);
5819       return false;
5820     }
5821
5822   p = buf;
5823   while (p < buf + size)
5824     {
5825       /* FIXME: bad alignment assumption.  */
5826       Elf_External_Note *xnp = (Elf_External_Note *) p;
5827       Elf_Internal_Note in;
5828
5829       in.type = bfd_h_get_32 (abfd, (bfd_byte *) xnp->type);
5830
5831       in.namesz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->namesz);
5832       in.namedata = xnp->name;
5833
5834       in.descsz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->descsz);
5835       in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
5836       in.descpos = offset + (in.descdata - buf);
5837
5838       if (! elfcore_grok_note (abfd, &in))
5839         goto error;
5840
5841       p = in.descdata + BFD_ALIGN (in.descsz, 4);
5842     }
5843
5844   free (buf);
5845   return true;
5846 }
5847
5848 /* FIXME: This function is now unnecessary.  Callers can just call
5849    bfd_section_from_phdr directly.  */
5850
5851 boolean
5852 _bfd_elfcore_section_from_phdr (abfd, phdr, sec_num)
5853      bfd *abfd;
5854      Elf_Internal_Phdr* phdr;
5855      int sec_num;
5856 {
5857   if (! bfd_section_from_phdr (abfd, phdr, sec_num))
5858     return false;
5859
5860   return true;
5861 }
5862 \f
5863 /* Providing external access to the ELF program header table.  */
5864
5865 /* Return an upper bound on the number of bytes required to store a
5866    copy of ABFD's program header table entries.  Return -1 if an error
5867    occurs; bfd_get_error will return an appropriate code.  */
5868
5869 long
5870 bfd_get_elf_phdr_upper_bound (abfd)
5871      bfd *abfd;
5872 {
5873   if (abfd->xvec->flavour != bfd_target_elf_flavour)
5874     {
5875       bfd_set_error (bfd_error_wrong_format);
5876       return -1;
5877     }
5878
5879   return (elf_elfheader (abfd)->e_phnum
5880           * sizeof (Elf_Internal_Phdr));
5881 }
5882
5883 /* Copy ABFD's program header table entries to *PHDRS.  The entries
5884    will be stored as an array of Elf_Internal_Phdr structures, as
5885    defined in include/elf/internal.h.  To find out how large the
5886    buffer needs to be, call bfd_get_elf_phdr_upper_bound.
5887
5888    Return the number of program header table entries read, or -1 if an
5889    error occurs; bfd_get_error will return an appropriate code.  */
5890
5891 int
5892 bfd_get_elf_phdrs (abfd, phdrs)
5893      bfd *abfd;
5894      void *phdrs;
5895 {
5896   int num_phdrs;
5897
5898   if (abfd->xvec->flavour != bfd_target_elf_flavour)
5899     {
5900       bfd_set_error (bfd_error_wrong_format);
5901       return -1;
5902     }
5903
5904   num_phdrs = elf_elfheader (abfd)->e_phnum;
5905   memcpy (phdrs, elf_tdata (abfd)->phdr,
5906           num_phdrs * sizeof (Elf_Internal_Phdr));
5907
5908   return num_phdrs;
5909 }