OSDN Git Service

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