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