]> Git Repo - binutils.git/blob - bfd/elf.c
* config/sparc/xm-sparc.h (NEW_SUN_CORE): Remove, never used.
[binutils.git] / bfd / elf.c
1 /* ELF executable support for BFD.
2    Copyright 1993, 1994, 1995, 1996 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));
43 static int elf_sort_sections PARAMS ((const PTR, const PTR));
44 static boolean assign_file_positions_for_segments PARAMS ((bfd *));
45 static boolean assign_file_positions_except_relocs PARAMS ((bfd *));
46 static boolean prep_headers PARAMS ((bfd *));
47 static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **));
48 static boolean copy_private_bfd_data PARAMS ((bfd *, bfd *));
49
50 /* Standard ELF hash function.  Do not change this function; you will
51    cause invalid hash tables to be generated.  (Well, you would if this
52    were being used yet.)  */
53 unsigned long
54 bfd_elf_hash (name)
55      CONST unsigned char *name;
56 {
57   unsigned long h = 0;
58   unsigned long g;
59   int ch;
60
61   while ((ch = *name++) != '\0')
62     {
63       h = (h << 4) + ch;
64       if ((g = (h & 0xf0000000)) != 0)
65         {
66           h ^= g >> 24;
67           h &= ~g;
68         }
69     }
70   return h;
71 }
72
73 /* Read a specified number of bytes at a specified offset in an ELF
74    file, into a newly allocated buffer, and return a pointer to the
75    buffer. */
76
77 static char *
78 elf_read (abfd, offset, size)
79      bfd * abfd;
80      long offset;
81      unsigned int size;
82 {
83   char *buf;
84
85   if ((buf = bfd_alloc (abfd, size)) == NULL)
86     return NULL;
87   if (bfd_seek (abfd, offset, SEEK_SET) == -1)
88     return NULL;
89   if (bfd_read ((PTR) buf, size, 1, abfd) != size)
90     {
91       if (bfd_get_error () != bfd_error_system_call)
92         bfd_set_error (bfd_error_file_truncated);
93       return NULL;
94     }
95   return buf;
96 }
97
98 boolean
99 elf_mkobject (abfd)
100      bfd * abfd;
101 {
102   /* this just does initialization */
103   /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
104   elf_tdata (abfd) = (struct elf_obj_tdata *)
105     bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
106   if (elf_tdata (abfd) == 0)
107     return false;
108   /* since everything is done at close time, do we need any
109      initialization? */
110
111   return true;
112 }
113
114 char *
115 bfd_elf_get_str_section (abfd, shindex)
116      bfd * abfd;
117      unsigned int shindex;
118 {
119   Elf_Internal_Shdr **i_shdrp;
120   char *shstrtab = NULL;
121   unsigned int offset;
122   unsigned int shstrtabsize;
123
124   i_shdrp = elf_elfsections (abfd);
125   if (i_shdrp == 0 || i_shdrp[shindex] == 0)
126     return 0;
127
128   shstrtab = (char *) i_shdrp[shindex]->contents;
129   if (shstrtab == NULL)
130     {
131       /* No cached one, attempt to read, and cache what we read. */
132       offset = i_shdrp[shindex]->sh_offset;
133       shstrtabsize = i_shdrp[shindex]->sh_size;
134       shstrtab = elf_read (abfd, offset, shstrtabsize);
135       i_shdrp[shindex]->contents = (PTR) shstrtab;
136     }
137   return shstrtab;
138 }
139
140 char *
141 bfd_elf_string_from_elf_section (abfd, shindex, strindex)
142      bfd * abfd;
143      unsigned int shindex;
144      unsigned int strindex;
145 {
146   Elf_Internal_Shdr *hdr;
147
148   if (strindex == 0)
149     return "";
150
151   hdr = elf_elfsections (abfd)[shindex];
152
153   if (hdr->contents == NULL
154       && bfd_elf_get_str_section (abfd, shindex) == NULL)
155     return NULL;
156
157   return ((char *) hdr->contents) + strindex;
158 }
159
160 /* Make a BFD section from an ELF section.  We store a pointer to the
161    BFD section in the bfd_section field of the header.  */
162
163 boolean
164 _bfd_elf_make_section_from_shdr (abfd, hdr, name)
165      bfd *abfd;
166      Elf_Internal_Shdr *hdr;
167      const char *name;
168 {
169   asection *newsect;
170   flagword flags;
171
172   if (hdr->bfd_section != NULL)
173     {
174       BFD_ASSERT (strcmp (name,
175                           bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
176       return true;
177     }
178
179   newsect = bfd_make_section_anyway (abfd, name);
180   if (newsect == NULL)
181     return false;
182
183   newsect->filepos = hdr->sh_offset;
184
185   if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
186       || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
187       || ! bfd_set_section_alignment (abfd, newsect,
188                                       bfd_log2 (hdr->sh_addralign)))
189     return false;
190
191   flags = SEC_NO_FLAGS;
192   if (hdr->sh_type != SHT_NOBITS)
193     flags |= SEC_HAS_CONTENTS;
194   if ((hdr->sh_flags & SHF_ALLOC) != 0)
195     {
196       flags |= SEC_ALLOC;
197       if (hdr->sh_type != SHT_NOBITS)
198         flags |= SEC_LOAD;
199     }
200   if ((hdr->sh_flags & SHF_WRITE) == 0)
201     flags |= SEC_READONLY;
202   if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
203     flags |= SEC_CODE;
204   else if ((flags & SEC_LOAD) != 0)
205     flags |= SEC_DATA;
206
207   /* The debugging sections appear to be recognized only by name, not
208      any sort of flag.  */
209   if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
210       || strncmp (name, ".line", sizeof ".line" - 1) == 0
211       || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
212     flags |= SEC_DEBUGGING;
213
214   if (! bfd_set_section_flags (abfd, newsect, flags))
215     return false;
216
217   if ((flags & SEC_ALLOC) != 0)
218     {
219       Elf_Internal_Phdr *phdr;
220       unsigned int i;
221
222       /* Look through the phdrs to see if we need to adjust the lma.  */
223       phdr = elf_tdata (abfd)->phdr;
224       for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
225         {
226           if (phdr->p_type == PT_LOAD
227               && phdr->p_paddr != 0
228               && phdr->p_vaddr != phdr->p_paddr
229               && phdr->p_vaddr <= hdr->sh_addr
230               && phdr->p_vaddr + phdr->p_memsz >= hdr->sh_addr + hdr->sh_size)
231             {
232               newsect->lma += phdr->p_paddr - phdr->p_vaddr;
233               break;
234             }
235         }
236     }
237
238   hdr->bfd_section = newsect;
239   elf_section_data (newsect)->this_hdr = *hdr;
240
241   return true;
242 }
243
244 /*
245 INTERNAL_FUNCTION
246         bfd_elf_find_section
247
248 SYNOPSIS
249         struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
250
251 DESCRIPTION
252         Helper functions for GDB to locate the string tables.
253         Since BFD hides string tables from callers, GDB needs to use an
254         internal hook to find them.  Sun's .stabstr, in particular,
255         isn't even pointed to by the .stab section, so ordinary
256         mechanisms wouldn't work to find it, even if we had some.
257 */
258
259 struct elf_internal_shdr *
260 bfd_elf_find_section (abfd, name)
261      bfd * abfd;
262      char *name;
263 {
264   Elf_Internal_Shdr **i_shdrp;
265   char *shstrtab;
266   unsigned int max;
267   unsigned int i;
268
269   i_shdrp = elf_elfsections (abfd);
270   if (i_shdrp != NULL)
271     {
272       shstrtab = bfd_elf_get_str_section (abfd, elf_elfheader (abfd)->e_shstrndx);
273       if (shstrtab != NULL)
274         {
275           max = elf_elfheader (abfd)->e_shnum;
276           for (i = 1; i < max; i++)
277             if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
278               return i_shdrp[i];
279         }
280     }
281   return 0;
282 }
283
284 const char *const bfd_elf_section_type_names[] = {
285   "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
286   "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
287   "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
288 };
289
290 /* ELF relocs are against symbols.  If we are producing relocateable
291    output, and the reloc is against an external symbol, and nothing
292    has given us any additional addend, the resulting reloc will also
293    be against the same symbol.  In such a case, we don't want to
294    change anything about the way the reloc is handled, since it will
295    all be done at final link time.  Rather than put special case code
296    into bfd_perform_relocation, all the reloc types use this howto
297    function.  It just short circuits the reloc if producing
298    relocateable output against an external symbol.  */
299
300 /*ARGSUSED*/
301 bfd_reloc_status_type
302 bfd_elf_generic_reloc (abfd,
303                        reloc_entry,
304                        symbol,
305                        data,
306                        input_section,
307                        output_bfd,
308                        error_message)
309      bfd *abfd;
310      arelent *reloc_entry;
311      asymbol *symbol;
312      PTR data;
313      asection *input_section;
314      bfd *output_bfd;
315      char **error_message;
316 {
317   if (output_bfd != (bfd *) NULL
318       && (symbol->flags & BSF_SECTION_SYM) == 0
319       && (! reloc_entry->howto->partial_inplace
320           || reloc_entry->addend == 0))
321     {
322       reloc_entry->address += input_section->output_offset;
323       return bfd_reloc_ok;
324     }
325
326   return bfd_reloc_continue;
327 }
328 \f
329 /* Print out the program headers.  */
330
331 boolean
332 _bfd_elf_print_private_bfd_data (abfd, farg)
333      bfd *abfd;
334      PTR farg;
335 {
336   FILE *f = (FILE *) farg;
337   Elf_Internal_Phdr *p;
338   asection *s;
339   bfd_byte *dynbuf = NULL;
340
341   p = elf_tdata (abfd)->phdr;
342   if (p != NULL)
343     {
344       unsigned int i, c;
345
346       fprintf (f, "\nProgram Header:\n");
347       c = elf_elfheader (abfd)->e_phnum;
348       for (i = 0; i < c; i++, p++)
349         {
350           const char *s;
351           char buf[20];
352
353           switch (p->p_type)
354             {
355             case PT_NULL: s = "NULL"; break;
356             case PT_LOAD: s = "LOAD"; break;
357             case PT_DYNAMIC: s = "DYNAMIC"; break;
358             case PT_INTERP: s = "INTERP"; break;
359             case PT_NOTE: s = "NOTE"; break;
360             case PT_SHLIB: s = "SHLIB"; break;
361             case PT_PHDR: s = "PHDR"; break;
362             default: sprintf (buf, "0x%lx", p->p_type); s = buf; break;
363             }
364           fprintf (f, "%8s off    0x", s);
365           fprintf_vma (f, p->p_offset);
366           fprintf (f, " vaddr 0x");
367           fprintf_vma (f, p->p_vaddr);
368           fprintf (f, " paddr 0x");
369           fprintf_vma (f, p->p_paddr);
370           fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
371           fprintf (f, "         filesz 0x");
372           fprintf_vma (f, p->p_filesz);
373           fprintf (f, " memsz 0x");
374           fprintf_vma (f, p->p_memsz);
375           fprintf (f, " flags %c%c%c",
376                    (p->p_flags & PF_R) != 0 ? 'r' : '-',
377                    (p->p_flags & PF_W) != 0 ? 'w' : '-',
378                    (p->p_flags & PF_X) != 0 ? 'x' : '-');
379           if ((p->p_flags &~ (PF_R | PF_W | PF_X)) != 0)
380             fprintf (f, " %lx", p->p_flags &~ (PF_R | PF_W | PF_X));
381           fprintf (f, "\n");
382         }
383     }
384
385   s = bfd_get_section_by_name (abfd, ".dynamic");
386   if (s != NULL)
387     {
388       int elfsec;
389       unsigned long link;
390       bfd_byte *extdyn, *extdynend;
391       size_t extdynsize;
392       void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
393
394       fprintf (f, "\nDynamic Section:\n");
395
396       dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
397       if (dynbuf == NULL)
398         goto error_return;
399       if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
400                                       s->_raw_size))
401         goto error_return;
402
403       elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
404       if (elfsec == -1)
405         goto error_return;
406       link = elf_elfsections (abfd)[elfsec]->sh_link;
407
408       extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
409       swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
410
411       extdyn = dynbuf;
412       extdynend = extdyn + s->_raw_size;
413       for (; extdyn < extdynend; extdyn += extdynsize)
414         {
415           Elf_Internal_Dyn dyn;
416           const char *name;
417           char ab[20];
418           boolean stringp;
419
420           (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
421
422           if (dyn.d_tag == DT_NULL)
423             break;
424
425           stringp = false;
426           switch (dyn.d_tag)
427             {
428             default:
429               sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
430               name = ab;
431               break;
432
433             case DT_NEEDED: name = "NEEDED"; stringp = true; break;
434             case DT_PLTRELSZ: name = "PLTRELSZ"; break;
435             case DT_PLTGOT: name = "PLTGOT"; break;
436             case DT_HASH: name = "HASH"; break;
437             case DT_STRTAB: name = "STRTAB"; break;
438             case DT_SYMTAB: name = "SYMTAB"; break;
439             case DT_RELA: name = "RELA"; break;
440             case DT_RELASZ: name = "RELASZ"; break;
441             case DT_RELAENT: name = "RELAENT"; break;
442             case DT_STRSZ: name = "STRSZ"; break;
443             case DT_SYMENT: name = "SYMENT"; break;
444             case DT_INIT: name = "INIT"; break;
445             case DT_FINI: name = "FINI"; break;
446             case DT_SONAME: name = "SONAME"; stringp = true; break;
447             case DT_RPATH: name = "RPATH"; stringp = true; break;
448             case DT_SYMBOLIC: name = "SYMBOLIC"; break;
449             case DT_REL: name = "REL"; break;
450             case DT_RELSZ: name = "RELSZ"; break;
451             case DT_RELENT: name = "RELENT"; break;
452             case DT_PLTREL: name = "PLTREL"; break;
453             case DT_DEBUG: name = "DEBUG"; break;
454             case DT_TEXTREL: name = "TEXTREL"; break;
455             case DT_JMPREL: name = "JMPREL"; break;
456             }
457
458           fprintf (f, "  %-11s ", name);
459           if (! stringp)
460             fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
461           else
462             {
463               const char *string;
464
465               string = bfd_elf_string_from_elf_section (abfd, link,
466                                                         dyn.d_un.d_val);
467               if (string == NULL)
468                 goto error_return;
469               fprintf (f, "%s", string);
470             }
471           fprintf (f, "\n");
472         }
473
474       free (dynbuf);
475       dynbuf = NULL;
476     }
477
478   return true;
479
480  error_return:
481   if (dynbuf != NULL)
482     free (dynbuf);
483   return false;
484 }
485
486 /* Display ELF-specific fields of a symbol.  */
487 void
488 bfd_elf_print_symbol (ignore_abfd, filep, symbol, how)
489      bfd *ignore_abfd;
490      PTR filep;
491      asymbol *symbol;
492      bfd_print_symbol_type how;
493 {
494   FILE *file = (FILE *) filep;
495   switch (how)
496     {
497     case bfd_print_symbol_name:
498       fprintf (file, "%s", symbol->name);
499       break;
500     case bfd_print_symbol_more:
501       fprintf (file, "elf ");
502       fprintf_vma (file, symbol->value);
503       fprintf (file, " %lx", (long) symbol->flags);
504       break;
505     case bfd_print_symbol_all:
506       {
507         CONST char *section_name;
508         section_name = symbol->section ? symbol->section->name : "(*none*)";
509         bfd_print_symbol_vandf ((PTR) file, symbol);
510         fprintf (file, " %s\t", section_name);
511         /* Print the "other" value for a symbol.  For common symbols,
512            we've already printed the size; now print the alignment.
513            For other symbols, we have no specified alignment, and
514            we've printed the address; now print the size.  */
515         fprintf_vma (file,
516                      (bfd_is_com_section (symbol->section)
517                       ? ((elf_symbol_type *) symbol)->internal_elf_sym.st_value
518                       : ((elf_symbol_type *) symbol)->internal_elf_sym.st_size));
519         fprintf (file, " %s", symbol->name);
520       }
521       break;
522     }
523 }
524 \f
525 /* Create an entry in an ELF linker hash table.  */
526
527 struct bfd_hash_entry *
528 _bfd_elf_link_hash_newfunc (entry, table, string)
529      struct bfd_hash_entry *entry;
530      struct bfd_hash_table *table;
531      const char *string;
532 {
533   struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
534
535   /* Allocate the structure if it has not already been allocated by a
536      subclass.  */
537   if (ret == (struct elf_link_hash_entry *) NULL)
538     ret = ((struct elf_link_hash_entry *)
539            bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)));
540   if (ret == (struct elf_link_hash_entry *) NULL)
541     return (struct bfd_hash_entry *) ret;
542
543   /* Call the allocation method of the superclass.  */
544   ret = ((struct elf_link_hash_entry *)
545          _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
546                                  table, string));
547   if (ret != (struct elf_link_hash_entry *) NULL)
548     {
549       /* Set local fields.  */
550       ret->indx = -1;
551       ret->size = 0;
552       ret->dynindx = -1;
553       ret->dynstr_index = 0;
554       ret->weakdef = NULL;
555       ret->got_offset = (bfd_vma) -1;
556       ret->plt_offset = (bfd_vma) -1;
557       ret->type = STT_NOTYPE;
558       ret->elf_link_hash_flags = 0;
559     }
560
561   return (struct bfd_hash_entry *) ret;
562 }
563
564 /* Initialize an ELF linker hash table.  */
565
566 boolean
567 _bfd_elf_link_hash_table_init (table, abfd, newfunc)
568      struct elf_link_hash_table *table;
569      bfd *abfd;
570      struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
571                                                 struct bfd_hash_table *,
572                                                 const char *));
573 {
574   table->dynamic_sections_created = false;
575   table->dynobj = NULL;
576   /* The first dynamic symbol is a dummy.  */
577   table->dynsymcount = 1;
578   table->dynstr = NULL;
579   table->bucketcount = 0;
580   table->needed = NULL;
581   return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
582 }
583
584 /* Create an ELF linker hash table.  */
585
586 struct bfd_link_hash_table *
587 _bfd_elf_link_hash_table_create (abfd)
588      bfd *abfd;
589 {
590   struct elf_link_hash_table *ret;
591
592   ret = ((struct elf_link_hash_table *)
593          bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
594   if (ret == (struct elf_link_hash_table *) NULL)
595     return NULL;
596
597   if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
598     {
599       bfd_release (abfd, ret);
600       return NULL;
601     }
602
603   return &ret->root;
604 }
605
606 /* This is a hook for the ELF emulation code in the generic linker to
607    tell the backend linker what file name to use for the DT_NEEDED
608    entry for a dynamic object.  The generic linker passes name as an
609    empty string to indicate that no DT_NEEDED entry should be made.  */
610
611 void
612 bfd_elf_set_dt_needed_name (abfd, name)
613      bfd *abfd;
614      const char *name;
615 {
616   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
617     elf_dt_needed_name (abfd) = name;
618 }
619
620 /* Get the list of DT_NEEDED entries for a link.  */
621
622 struct bfd_link_needed_list *
623 bfd_elf_get_needed_list (abfd, info)
624      bfd *abfd;
625      struct bfd_link_info *info;
626 {
627   if (info->hash->creator->flavour != bfd_target_elf_flavour)
628     return NULL;
629   return elf_hash_table (info)->needed;
630 }
631 \f
632 /* Allocate an ELF string table--force the first byte to be zero.  */
633
634 struct bfd_strtab_hash *
635 _bfd_elf_stringtab_init ()
636 {
637   struct bfd_strtab_hash *ret;
638
639   ret = _bfd_stringtab_init ();
640   if (ret != NULL)
641     {
642       bfd_size_type loc;
643
644       loc = _bfd_stringtab_add (ret, "", true, false);
645       BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
646       if (loc == (bfd_size_type) -1)
647         {
648           _bfd_stringtab_free (ret);
649           ret = NULL;
650         }
651     }
652   return ret;
653 }
654 \f
655 /* ELF .o/exec file reading */
656
657 /* Create a new bfd section from an ELF section header. */
658
659 boolean
660 bfd_section_from_shdr (abfd, shindex)
661      bfd *abfd;
662      unsigned int shindex;
663 {
664   Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
665   Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
666   struct elf_backend_data *bed = get_elf_backend_data (abfd);
667   char *name;
668
669   name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
670
671   switch (hdr->sh_type)
672     {
673     case SHT_NULL:
674       /* Inactive section. Throw it away.  */
675       return true;
676
677     case SHT_PROGBITS:  /* Normal section with contents.  */
678     case SHT_DYNAMIC:   /* Dynamic linking information.  */
679     case SHT_NOBITS:    /* .bss section.  */
680     case SHT_HASH:      /* .hash section.  */
681     case SHT_NOTE:      /* .note section.  */
682       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
683
684     case SHT_SYMTAB:            /* A symbol table */
685       if (elf_onesymtab (abfd) == shindex)
686         return true;
687
688       BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
689       BFD_ASSERT (elf_onesymtab (abfd) == 0);
690       elf_onesymtab (abfd) = shindex;
691       elf_tdata (abfd)->symtab_hdr = *hdr;
692       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
693       abfd->flags |= HAS_SYMS;
694
695       /* Sometimes a shared object will map in the symbol table.  If
696          SHF_ALLOC is set, and this is a shared object, then we also
697          treat this section as a BFD section.  We can not base the
698          decision purely on SHF_ALLOC, because that flag is sometimes
699          set in a relocateable object file, which would confuse the
700          linker.  */
701       if ((hdr->sh_flags & SHF_ALLOC) != 0
702           && (abfd->flags & DYNAMIC) != 0
703           && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
704         return false;
705
706       return true;
707
708     case SHT_DYNSYM:            /* A dynamic symbol table */
709       if (elf_dynsymtab (abfd) == shindex)
710         return true;
711
712       BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
713       BFD_ASSERT (elf_dynsymtab (abfd) == 0);
714       elf_dynsymtab (abfd) = shindex;
715       elf_tdata (abfd)->dynsymtab_hdr = *hdr;
716       elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
717       abfd->flags |= HAS_SYMS;
718
719       /* Besides being a symbol table, we also treat this as a regular
720          section, so that objcopy can handle it.  */
721       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
722
723     case SHT_STRTAB:            /* A string table */
724       if (hdr->bfd_section != NULL)
725         return true;
726       if (ehdr->e_shstrndx == shindex)
727         {
728           elf_tdata (abfd)->shstrtab_hdr = *hdr;
729           elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
730           return true;
731         }
732       {
733         unsigned int i;
734
735         for (i = 1; i < ehdr->e_shnum; i++)
736           {
737             Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
738             if (hdr2->sh_link == shindex)
739               {
740                 if (! bfd_section_from_shdr (abfd, i))
741                   return false;
742                 if (elf_onesymtab (abfd) == i)
743                   {
744                     elf_tdata (abfd)->strtab_hdr = *hdr;
745                     elf_elfsections (abfd)[shindex] =
746                       &elf_tdata (abfd)->strtab_hdr;
747                     return true;
748                   }
749                 if (elf_dynsymtab (abfd) == i)
750                   {
751                     elf_tdata (abfd)->dynstrtab_hdr = *hdr;
752                     elf_elfsections (abfd)[shindex] = hdr =
753                       &elf_tdata (abfd)->dynstrtab_hdr;
754                     /* We also treat this as a regular section, so
755                        that objcopy can handle it.  */
756                     break;
757                   }
758 #if 0 /* Not handling other string tables specially right now.  */
759                 hdr2 = elf_elfsections (abfd)[i];       /* in case it moved */
760                 /* We have a strtab for some random other section.  */
761                 newsect = (asection *) hdr2->bfd_section;
762                 if (!newsect)
763                   break;
764                 hdr->bfd_section = newsect;
765                 hdr2 = &elf_section_data (newsect)->str_hdr;
766                 *hdr2 = *hdr;
767                 elf_elfsections (abfd)[shindex] = hdr2;
768 #endif
769               }
770           }
771       }
772
773       return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
774
775     case SHT_REL:
776     case SHT_RELA:
777       /* *These* do a lot of work -- but build no sections!  */
778       {
779         asection *target_sect;
780         Elf_Internal_Shdr *hdr2;
781         int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
782
783         /* For some incomprehensible reason Oracle distributes
784            libraries for Solaris in which some of the objects have
785            bogus sh_link fields.  It would be nice if we could just
786            reject them, but, unfortunately, some people need to use
787            them.  We scan through the section headers; if we find only
788            one suitable symbol table, we clobber the sh_link to point
789            to it.  I hope this doesn't break anything.  */
790         if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
791             && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
792           {
793             int scan;
794             int found;
795
796             found = 0;
797             for (scan = 1; scan < ehdr->e_shnum; scan++)
798               {
799                 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
800                     || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
801                   {
802                     if (found != 0)
803                       {
804                         found = 0;
805                         break;
806                       }
807                     found = scan;
808                   }
809               }
810             if (found != 0)
811               hdr->sh_link = found;
812           }
813
814         /* Get the symbol table.  */
815         if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
816             && ! bfd_section_from_shdr (abfd, hdr->sh_link))
817           return false;
818
819         /* If this reloc section does not use the main symbol table we
820            don't treat it as a reloc section.  BFD can't adequately
821            represent such a section, so at least for now, we don't
822            try.  We just present it as a normal section.  */
823         if (hdr->sh_link != elf_onesymtab (abfd))
824           return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
825
826         /* Don't allow REL relocations on a machine that uses RELA and
827            vice versa.  */
828         /* @@ Actually, the generic ABI does suggest that both might be
829            used in one file.  But the four ABI Processor Supplements I
830            have access to right now all specify that only one is used on
831            each of those architectures.  It's conceivable that, e.g., a
832            bunch of absolute 32-bit relocs might be more compact in REL
833            form even on a RELA machine...  */
834         BFD_ASSERT (use_rela_p
835                     ? (hdr->sh_type == SHT_RELA
836                        && hdr->sh_entsize == bed->s->sizeof_rela)
837                     : (hdr->sh_type == SHT_REL
838                        && hdr->sh_entsize == bed->s->sizeof_rel));
839
840         if (! bfd_section_from_shdr (abfd, hdr->sh_info))
841           return false;
842         target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
843         if (target_sect == NULL)
844           return false;
845
846         hdr2 = &elf_section_data (target_sect)->rel_hdr;
847         *hdr2 = *hdr;
848         elf_elfsections (abfd)[shindex] = hdr2;
849         target_sect->reloc_count = hdr->sh_size / hdr->sh_entsize;
850         target_sect->flags |= SEC_RELOC;
851         target_sect->relocation = NULL;
852         target_sect->rel_filepos = hdr->sh_offset;
853         abfd->flags |= HAS_RELOC;
854         return true;
855       }
856       break;
857
858     case SHT_SHLIB:
859       return true;
860
861     default:
862       /* Check for any processor-specific section types.  */
863       {
864         if (bed->elf_backend_section_from_shdr)
865           (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
866       }
867       break;
868     }
869
870   return true;
871 }
872
873 /* Given an ELF section number, retrieve the corresponding BFD
874    section.  */
875
876 asection *
877 bfd_section_from_elf_index (abfd, index)
878      bfd *abfd;
879      unsigned int index;
880 {
881   BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
882   if (index >= elf_elfheader (abfd)->e_shnum)
883     return NULL;
884   return elf_elfsections (abfd)[index]->bfd_section;
885 }
886
887 boolean
888 _bfd_elf_new_section_hook (abfd, sec)
889      bfd *abfd;
890      asection *sec;
891 {
892   struct bfd_elf_section_data *sdata;
893
894   sdata = (struct bfd_elf_section_data *) bfd_alloc (abfd, sizeof (*sdata));
895   if (!sdata)
896     return false;
897   sec->used_by_bfd = (PTR) sdata;
898   memset (sdata, 0, sizeof (*sdata));
899   return true;
900 }
901
902 /* Create a new bfd section from an ELF program header.
903
904    Since program segments have no names, we generate a synthetic name
905    of the form segment<NUM>, where NUM is generally the index in the
906    program header table.  For segments that are split (see below) we
907    generate the names segment<NUM>a and segment<NUM>b.
908
909    Note that some program segments may have a file size that is different than
910    (less than) the memory size.  All this means is that at execution the
911    system must allocate the amount of memory specified by the memory size,
912    but only initialize it with the first "file size" bytes read from the
913    file.  This would occur for example, with program segments consisting
914    of combined data+bss.
915
916    To handle the above situation, this routine generates TWO bfd sections
917    for the single program segment.  The first has the length specified by
918    the file size of the segment, and the second has the length specified
919    by the difference between the two sizes.  In effect, the segment is split
920    into it's initialized and uninitialized parts.
921
922  */
923
924 boolean
925 bfd_section_from_phdr (abfd, hdr, index)
926      bfd *abfd;
927      Elf_Internal_Phdr *hdr;
928      int index;
929 {
930   asection *newsect;
931   char *name;
932   char namebuf[64];
933   int split;
934
935   split = ((hdr->p_memsz > 0) &&
936            (hdr->p_filesz > 0) &&
937            (hdr->p_memsz > hdr->p_filesz));
938   sprintf (namebuf, split ? "segment%da" : "segment%d", index);
939   name = bfd_alloc (abfd, strlen (namebuf) + 1);
940   if (!name)
941     return false;
942   strcpy (name, namebuf);
943   newsect = bfd_make_section (abfd, name);
944   if (newsect == NULL)
945     return false;
946   newsect->vma = hdr->p_vaddr;
947   newsect->lma = hdr->p_paddr;
948   newsect->_raw_size = hdr->p_filesz;
949   newsect->filepos = hdr->p_offset;
950   newsect->flags |= SEC_HAS_CONTENTS;
951   if (hdr->p_type == PT_LOAD)
952     {
953       newsect->flags |= SEC_ALLOC;
954       newsect->flags |= SEC_LOAD;
955       if (hdr->p_flags & PF_X)
956         {
957           /* FIXME: all we known is that it has execute PERMISSION,
958              may be data. */
959           newsect->flags |= SEC_CODE;
960         }
961     }
962   if (!(hdr->p_flags & PF_W))
963     {
964       newsect->flags |= SEC_READONLY;
965     }
966
967   if (split)
968     {
969       sprintf (namebuf, "segment%db", index);
970       name = bfd_alloc (abfd, strlen (namebuf) + 1);
971       if (!name)
972         return false;
973       strcpy (name, namebuf);
974       newsect = bfd_make_section (abfd, name);
975       if (newsect == NULL)
976         return false;
977       newsect->vma = hdr->p_vaddr + hdr->p_filesz;
978       newsect->lma = hdr->p_paddr + hdr->p_filesz;
979       newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
980       if (hdr->p_type == PT_LOAD)
981         {
982           newsect->flags |= SEC_ALLOC;
983           if (hdr->p_flags & PF_X)
984             newsect->flags |= SEC_CODE;
985         }
986       if (!(hdr->p_flags & PF_W))
987         newsect->flags |= SEC_READONLY;
988     }
989
990   return true;
991 }
992
993 /* Set up an ELF internal section header for a section.  */
994
995 /*ARGSUSED*/
996 static void
997 elf_fake_sections (abfd, asect, failedptrarg)
998      bfd *abfd;
999      asection *asect;
1000      PTR failedptrarg;
1001 {
1002   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1003   boolean *failedptr = (boolean *) failedptrarg;
1004   Elf_Internal_Shdr *this_hdr;
1005
1006   if (*failedptr)
1007     {
1008       /* We already failed; just get out of the bfd_map_over_sections
1009          loop.  */
1010       return;
1011     }
1012
1013   this_hdr = &elf_section_data (asect)->this_hdr;
1014
1015   this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1016                                                           asect->name,
1017                                                           true, false);
1018   if (this_hdr->sh_name == (unsigned long) -1)
1019     {
1020       *failedptr = true;
1021       return;
1022     }
1023
1024   this_hdr->sh_flags = 0;
1025
1026   if ((asect->flags & SEC_ALLOC) != 0)
1027     this_hdr->sh_addr = asect->vma;
1028   else
1029     this_hdr->sh_addr = 0;
1030
1031   this_hdr->sh_offset = 0;
1032   this_hdr->sh_size = asect->_raw_size;
1033   this_hdr->sh_link = 0;
1034   this_hdr->sh_addralign = 1 << asect->alignment_power;
1035   /* The sh_entsize and sh_info fields may have been set already by
1036      copy_private_section_data.  */
1037
1038   this_hdr->bfd_section = asect;
1039   this_hdr->contents = NULL;
1040
1041   /* FIXME: This should not be based on section names.  */
1042   if (strcmp (asect->name, ".dynstr") == 0)
1043     this_hdr->sh_type = SHT_STRTAB;
1044   else if (strcmp (asect->name, ".hash") == 0)
1045     {
1046       this_hdr->sh_type = SHT_HASH;
1047       this_hdr->sh_entsize = bed->s->arch_size / 8;
1048     }
1049   else if (strcmp (asect->name, ".dynsym") == 0)
1050     {
1051       this_hdr->sh_type = SHT_DYNSYM;
1052       this_hdr->sh_entsize = bed->s->sizeof_sym;
1053     }
1054   else if (strcmp (asect->name, ".dynamic") == 0)
1055     {
1056       this_hdr->sh_type = SHT_DYNAMIC;
1057       this_hdr->sh_entsize = bed->s->sizeof_dyn;
1058     }
1059   else if (strncmp (asect->name, ".rela", 5) == 0
1060            && get_elf_backend_data (abfd)->use_rela_p)
1061     {
1062       this_hdr->sh_type = SHT_RELA;
1063       this_hdr->sh_entsize = bed->s->sizeof_rela;
1064     }
1065   else if (strncmp (asect->name, ".rel", 4) == 0
1066            && ! get_elf_backend_data (abfd)->use_rela_p)
1067     {
1068       this_hdr->sh_type = SHT_REL;
1069       this_hdr->sh_entsize = bed->s->sizeof_rel;
1070     }
1071   else if (strcmp (asect->name, ".note") == 0)
1072     this_hdr->sh_type = SHT_NOTE;
1073   else if (strncmp (asect->name, ".stab", 5) == 0
1074            && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1075     this_hdr->sh_type = SHT_STRTAB;
1076   else if ((asect->flags & SEC_ALLOC) != 0
1077            && (asect->flags & SEC_LOAD) != 0)
1078     this_hdr->sh_type = SHT_PROGBITS;
1079   else if ((asect->flags & SEC_ALLOC) != 0
1080            && ((asect->flags & SEC_LOAD) == 0))
1081     this_hdr->sh_type = SHT_NOBITS;
1082   else
1083     {
1084       /* Who knows?  */
1085       this_hdr->sh_type = SHT_PROGBITS;
1086     }
1087
1088   if ((asect->flags & SEC_ALLOC) != 0)
1089     this_hdr->sh_flags |= SHF_ALLOC;
1090   if ((asect->flags & SEC_READONLY) == 0)
1091     this_hdr->sh_flags |= SHF_WRITE;
1092   if ((asect->flags & SEC_CODE) != 0)
1093     this_hdr->sh_flags |= SHF_EXECINSTR;
1094
1095   /* Check for processor-specific section types.  */
1096   {
1097     struct elf_backend_data *bed = get_elf_backend_data (abfd);
1098
1099     if (bed->elf_backend_fake_sections)
1100       (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1101   }
1102
1103   /* If the section has relocs, set up a section header for the
1104      SHT_REL[A] section.  */
1105   if ((asect->flags & SEC_RELOC) != 0)
1106     {
1107       Elf_Internal_Shdr *rela_hdr;
1108       int use_rela_p = get_elf_backend_data (abfd)->use_rela_p;
1109       char *name;
1110
1111       rela_hdr = &elf_section_data (asect)->rel_hdr;
1112       name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1113       if (name == NULL)
1114         {
1115           *failedptr = true;
1116           return;
1117         }
1118       sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1119       rela_hdr->sh_name =
1120         (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1121                                            true, false);
1122       if (rela_hdr->sh_name == (unsigned int) -1)
1123         {
1124           *failedptr = true;
1125           return;
1126         }
1127       rela_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1128       rela_hdr->sh_entsize = (use_rela_p
1129                               ? bed->s->sizeof_rela
1130                               : bed->s->sizeof_rel);
1131       rela_hdr->sh_addralign = bed->s->file_align;
1132       rela_hdr->sh_flags = 0;
1133       rela_hdr->sh_addr = 0;
1134       rela_hdr->sh_size = 0;
1135       rela_hdr->sh_offset = 0;
1136     }
1137 }
1138
1139 /* Assign all ELF section numbers.  The dummy first section is handled here
1140    too.  The link/info pointers for the standard section types are filled
1141    in here too, while we're at it.  */
1142
1143 static boolean
1144 assign_section_numbers (abfd)
1145      bfd *abfd;
1146 {
1147   struct elf_obj_tdata *t = elf_tdata (abfd);
1148   asection *sec;
1149   unsigned int section_number;
1150   Elf_Internal_Shdr **i_shdrp;
1151   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1152
1153   section_number = 1;
1154
1155   for (sec = abfd->sections; sec; sec = sec->next)
1156     {
1157       struct bfd_elf_section_data *d = elf_section_data (sec);
1158
1159       d->this_idx = section_number++;
1160       if ((sec->flags & SEC_RELOC) == 0)
1161         d->rel_idx = 0;
1162       else
1163         d->rel_idx = section_number++;
1164     }
1165
1166   t->shstrtab_section = section_number++;
1167   elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1168   t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1169
1170   if (abfd->symcount > 0)
1171     {
1172       t->symtab_section = section_number++;
1173       t->strtab_section = section_number++;
1174     }
1175
1176   elf_elfheader (abfd)->e_shnum = section_number;
1177
1178   /* Set up the list of section header pointers, in agreement with the
1179      indices.  */
1180   i_shdrp = ((Elf_Internal_Shdr **)
1181              bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1182   if (i_shdrp == NULL)
1183     return false;
1184
1185   i_shdrp[0] = ((Elf_Internal_Shdr *)
1186                 bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1187   if (i_shdrp[0] == NULL)
1188     {
1189       bfd_release (abfd, i_shdrp);
1190       return false;
1191     }
1192   memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1193
1194   elf_elfsections (abfd) = i_shdrp;
1195
1196   i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1197   if (abfd->symcount > 0)
1198     {
1199       i_shdrp[t->symtab_section] = &t->symtab_hdr;
1200       i_shdrp[t->strtab_section] = &t->strtab_hdr;
1201       t->symtab_hdr.sh_link = t->strtab_section;
1202     }
1203   for (sec = abfd->sections; sec; sec = sec->next)
1204     {
1205       struct bfd_elf_section_data *d = elf_section_data (sec);
1206       asection *s;
1207       const char *name;
1208
1209       i_shdrp[d->this_idx] = &d->this_hdr;
1210       if (d->rel_idx != 0)
1211         i_shdrp[d->rel_idx] = &d->rel_hdr;
1212
1213       /* Fill in the sh_link and sh_info fields while we're at it.  */
1214
1215       /* sh_link of a reloc section is the section index of the symbol
1216          table.  sh_info is the section index of the section to which
1217          the relocation entries apply.  */
1218       if (d->rel_idx != 0)
1219         {
1220           d->rel_hdr.sh_link = t->symtab_section;
1221           d->rel_hdr.sh_info = d->this_idx;
1222         }
1223
1224       switch (d->this_hdr.sh_type)
1225         {
1226         case SHT_REL:
1227         case SHT_RELA:
1228           /* A reloc section which we are treating as a normal BFD
1229              section.  sh_link is the section index of the symbol
1230              table.  sh_info is the section index of the section to
1231              which the relocation entries apply.  We assume that an
1232              allocated reloc section uses the dynamic symbol table.
1233              FIXME: How can we be sure?  */
1234           s = bfd_get_section_by_name (abfd, ".dynsym");
1235           if (s != NULL)
1236             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1237
1238           /* We look up the section the relocs apply to by name.  */
1239           name = sec->name;
1240           if (d->this_hdr.sh_type == SHT_REL)
1241             name += 4;
1242           else
1243             name += 5;
1244           s = bfd_get_section_by_name (abfd, name);
1245           if (s != NULL)
1246             d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1247           break;
1248
1249         case SHT_STRTAB:
1250           /* We assume that a section named .stab*str is a stabs
1251              string section.  We look for a section with the same name
1252              but without the trailing ``str'', and set its sh_link
1253              field to point to this section.  */
1254           if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1255               && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1256             {
1257               size_t len;
1258               char *alc;
1259
1260               len = strlen (sec->name);
1261               alc = (char *) bfd_malloc (len - 2);
1262               if (alc == NULL)
1263                 return false;
1264               strncpy (alc, sec->name, len - 3);
1265               alc[len - 3] = '\0';
1266               s = bfd_get_section_by_name (abfd, alc);
1267               free (alc);
1268               if (s != NULL)
1269                 {
1270                   elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1271
1272                   /* This is a .stab section.  */
1273                   elf_section_data (s)->this_hdr.sh_entsize =
1274                     4 + 2 * (bed->s->arch_size / 8);
1275                 }
1276             }
1277           break;
1278
1279         case SHT_DYNAMIC:
1280         case SHT_DYNSYM:
1281           /* sh_link is the section header index of the string table
1282              used for the dynamic entries or symbol table.  */
1283           s = bfd_get_section_by_name (abfd, ".dynstr");
1284           if (s != NULL)
1285             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1286           break;
1287
1288         case SHT_HASH:
1289           /* sh_link is the section header index of the symbol table
1290              this hash table is for.  */
1291           s = bfd_get_section_by_name (abfd, ".dynsym");
1292           if (s != NULL)
1293             d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1294           break;
1295         }
1296     }
1297
1298   return true;
1299 }
1300
1301 /* Map symbol from it's internal number to the external number, moving
1302    all local symbols to be at the head of the list.  */
1303
1304 static INLINE int
1305 sym_is_global (abfd, sym)
1306      bfd *abfd;
1307      asymbol *sym;
1308 {
1309   /* If the backend has a special mapping, use it.  */
1310   if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1311     return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1312             (abfd, sym));
1313
1314   return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1315           || bfd_is_und_section (bfd_get_section (sym))
1316           || bfd_is_com_section (bfd_get_section (sym)));
1317 }
1318
1319 static boolean
1320 elf_map_symbols (abfd)
1321      bfd *abfd;
1322 {
1323   int symcount = bfd_get_symcount (abfd);
1324   asymbol **syms = bfd_get_outsymbols (abfd);
1325   asymbol **sect_syms;
1326   int num_locals = 0;
1327   int num_globals = 0;
1328   int num_locals2 = 0;
1329   int num_globals2 = 0;
1330   int max_index = 0;
1331   int num_sections = 0;
1332   int idx;
1333   asection *asect;
1334   asymbol **new_syms;
1335
1336 #ifdef DEBUG
1337   fprintf (stderr, "elf_map_symbols\n");
1338   fflush (stderr);
1339 #endif
1340
1341   /* Add a section symbol for each BFD section.  FIXME: Is this really
1342      necessary?  */
1343   for (asect = abfd->sections; asect; asect = asect->next)
1344     {
1345       if (max_index < asect->index)
1346         max_index = asect->index;
1347     }
1348
1349   max_index++;
1350   sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1351   if (sect_syms == NULL)
1352     return false;
1353   elf_section_syms (abfd) = sect_syms;
1354
1355   for (idx = 0; idx < symcount; idx++)
1356     {
1357       if ((syms[idx]->flags & BSF_SECTION_SYM) != 0
1358           && (syms[idx]->value + syms[idx]->section->vma) == 0)
1359         {
1360           asection *sec;
1361
1362           sec = syms[idx]->section;
1363           if (sec->owner != NULL)
1364             {
1365               if (sec->owner != abfd)
1366                 {
1367                   if (sec->output_offset != 0)
1368                     continue;
1369                   sec = sec->output_section;
1370                   BFD_ASSERT (sec->owner == abfd);
1371                 }
1372               sect_syms[sec->index] = syms[idx];
1373             }
1374         }
1375     }
1376
1377   for (asect = abfd->sections; asect; asect = asect->next)
1378     {
1379       asymbol *sym;
1380
1381       if (sect_syms[asect->index] != NULL)
1382         continue;
1383
1384       sym = bfd_make_empty_symbol (abfd);
1385       if (sym == NULL)
1386         return false;
1387       sym->the_bfd = abfd;
1388       sym->name = asect->name;
1389       sym->value = 0;
1390       /* Set the flags to 0 to indicate that this one was newly added.  */
1391       sym->flags = 0;
1392       sym->section = asect;
1393       sect_syms[asect->index] = sym;
1394       num_sections++;
1395 #ifdef DEBUG
1396       fprintf (stderr,
1397                "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1398                asect->name, (long) asect->vma, asect->index, (long) asect);
1399 #endif
1400     }
1401
1402   /* Classify all of the symbols.  */
1403   for (idx = 0; idx < symcount; idx++)
1404     {
1405       if (!sym_is_global (abfd, syms[idx]))
1406         num_locals++;
1407       else
1408         num_globals++;
1409     }
1410   for (asect = abfd->sections; asect; asect = asect->next)
1411     {
1412       if (sect_syms[asect->index] != NULL
1413           && sect_syms[asect->index]->flags == 0)
1414         {
1415           sect_syms[asect->index]->flags = BSF_SECTION_SYM;
1416           if (!sym_is_global (abfd, sect_syms[asect->index]))
1417             num_locals++;
1418           else
1419             num_globals++;
1420           sect_syms[asect->index]->flags = 0;
1421         }
1422     }
1423
1424   /* Now sort the symbols so the local symbols are first.  */
1425   new_syms = ((asymbol **)
1426               bfd_alloc (abfd,
1427                          (num_locals + num_globals) * sizeof (asymbol *)));
1428   if (new_syms == NULL)
1429     return false;
1430
1431   for (idx = 0; idx < symcount; idx++)
1432     {
1433       asymbol *sym = syms[idx];
1434       int i;
1435
1436       if (!sym_is_global (abfd, sym))
1437         i = num_locals2++;
1438       else
1439         i = num_locals + num_globals2++;
1440       new_syms[i] = sym;
1441       sym->udata.i = i + 1;
1442     }
1443   for (asect = abfd->sections; asect; asect = asect->next)
1444     {
1445       if (sect_syms[asect->index] != NULL
1446           && sect_syms[asect->index]->flags == 0)
1447         {
1448           asymbol *sym = sect_syms[asect->index];
1449           int i;
1450
1451           sym->flags = BSF_SECTION_SYM;
1452           if (!sym_is_global (abfd, sym))
1453             i = num_locals2++;
1454           else
1455             i = num_locals + num_globals2++;
1456           new_syms[i] = sym;
1457           sym->udata.i = i + 1;
1458         }
1459     }
1460
1461   bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
1462
1463   elf_num_locals (abfd) = num_locals;
1464   elf_num_globals (abfd) = num_globals;
1465   return true;
1466 }
1467
1468 /* Align to the maximum file alignment that could be required for any
1469    ELF data structure.  */
1470
1471 static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
1472 static INLINE file_ptr
1473 align_file_position (off, align)
1474      file_ptr off;
1475      int align;
1476 {
1477   return (off + align - 1) & ~(align - 1);
1478 }
1479
1480 /* Assign a file position to a section, optionally aligning to the
1481    required section alignment.  */
1482
1483 INLINE file_ptr
1484 _bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
1485      Elf_Internal_Shdr *i_shdrp;
1486      file_ptr offset;
1487      boolean align;
1488 {
1489   if (align)
1490     {
1491       unsigned int al;
1492
1493       al = i_shdrp->sh_addralign;
1494       if (al > 1)
1495         offset = BFD_ALIGN (offset, al);
1496     }
1497   i_shdrp->sh_offset = offset;
1498   if (i_shdrp->bfd_section != NULL)
1499     i_shdrp->bfd_section->filepos = offset;
1500   if (i_shdrp->sh_type != SHT_NOBITS)
1501     offset += i_shdrp->sh_size;
1502   return offset;
1503 }
1504
1505 /* Compute the file positions we are going to put the sections at, and
1506    otherwise prepare to begin writing out the ELF file.  If LINK_INFO
1507    is not NULL, this is being called by the ELF backend linker.  */
1508
1509 boolean
1510 _bfd_elf_compute_section_file_positions (abfd, link_info)
1511      bfd *abfd;
1512      struct bfd_link_info *link_info;
1513 {
1514   struct elf_backend_data *bed = get_elf_backend_data (abfd);
1515   boolean failed;
1516   struct bfd_strtab_hash *strtab;
1517   Elf_Internal_Shdr *shstrtab_hdr;
1518
1519   if (abfd->output_has_begun)
1520     return true;
1521
1522   /* Do any elf backend specific processing first.  */
1523   if (bed->elf_backend_begin_write_processing)
1524     (*bed->elf_backend_begin_write_processing) (abfd, link_info);
1525
1526   if (! prep_headers (abfd))
1527     return false;
1528
1529   failed = false;
1530   bfd_map_over_sections (abfd, elf_fake_sections, &failed);
1531   if (failed)
1532     return false;
1533
1534   if (!assign_section_numbers (abfd))
1535     return false;
1536
1537   /* The backend linker builds symbol table information itself.  */
1538   if (link_info == NULL && abfd->symcount > 0)
1539     {
1540       if (! swap_out_syms (abfd, &strtab))
1541         return false;
1542     }
1543
1544   shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1545   /* sh_name was set in prep_headers.  */
1546   shstrtab_hdr->sh_type = SHT_STRTAB;
1547   shstrtab_hdr->sh_flags = 0;
1548   shstrtab_hdr->sh_addr = 0;
1549   shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1550   shstrtab_hdr->sh_entsize = 0;
1551   shstrtab_hdr->sh_link = 0;
1552   shstrtab_hdr->sh_info = 0;
1553   /* sh_offset is set in assign_file_positions_except_relocs.  */
1554   shstrtab_hdr->sh_addralign = 1;
1555
1556   if (!assign_file_positions_except_relocs (abfd))
1557     return false;
1558
1559   if (link_info == NULL && abfd->symcount > 0)
1560     {
1561       file_ptr off;
1562       Elf_Internal_Shdr *hdr;
1563
1564       off = elf_tdata (abfd)->next_file_pos;
1565
1566       hdr = &elf_tdata (abfd)->symtab_hdr;
1567       off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1568
1569       hdr = &elf_tdata (abfd)->strtab_hdr;
1570       off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1571
1572       elf_tdata (abfd)->next_file_pos = off;
1573
1574       /* Now that we know where the .strtab section goes, write it
1575          out.  */
1576       if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
1577           || ! _bfd_stringtab_emit (abfd, strtab))
1578         return false;
1579       _bfd_stringtab_free (strtab);
1580     }
1581
1582   abfd->output_has_begun = true;
1583
1584   return true;
1585 }
1586
1587 /* Create a mapping from a set of sections to a program segment.  */
1588
1589 static INLINE struct elf_segment_map *
1590 make_mapping (abfd, sections, from, to)
1591      bfd *abfd;
1592      asection **sections;
1593      unsigned int from;
1594      unsigned int to;
1595 {
1596   struct elf_segment_map *m;
1597   unsigned int i;
1598   asection **hdrpp;
1599
1600   m = ((struct elf_segment_map *)
1601        bfd_zalloc (abfd,
1602                    (sizeof (struct elf_segment_map)
1603                     + (to - from - 1) * sizeof (asection *))));
1604   if (m == NULL)
1605     return NULL;
1606   m->next = NULL;
1607   m->p_type = PT_LOAD;
1608   for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
1609     m->sections[i - from] = *hdrpp;
1610   m->count = to - from;
1611
1612   if (from == 0)
1613     {
1614       /* Include the headers in the first PT_LOAD segment.  */
1615       m->includes_filehdr = 1;
1616       m->includes_phdrs = 1;
1617     }
1618
1619   return m;
1620 }
1621
1622 /* Set up a mapping from BFD sections to program segments.  */
1623
1624 static boolean
1625 map_sections_to_segments (abfd)
1626      bfd *abfd;
1627 {
1628   asection **sections = NULL;
1629   asection *s;
1630   unsigned int i;
1631   unsigned int count;
1632   struct elf_segment_map *mfirst;
1633   struct elf_segment_map **pm;
1634   struct elf_segment_map *m;
1635   asection *last_hdr;
1636   unsigned int phdr_index;
1637   bfd_vma maxpagesize;
1638   asection **hdrpp;
1639
1640   if (elf_tdata (abfd)->segment_map != NULL)
1641     return true;
1642
1643   if (bfd_count_sections (abfd) == 0)
1644     return true;
1645
1646   /* Select the allocated sections, and sort them.  */
1647
1648   sections = (asection **) bfd_malloc (bfd_count_sections (abfd)
1649                                        * sizeof (asection *));
1650   if (sections == NULL)
1651     goto error_return;
1652
1653   i = 0;
1654   for (s = abfd->sections; s != NULL; s = s->next)
1655     {
1656       if ((s->flags & SEC_ALLOC) != 0)
1657         {
1658           sections[i] = s;
1659           ++i;
1660         }
1661     }
1662   BFD_ASSERT (i <= bfd_count_sections (abfd));
1663   count = i;
1664
1665   qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
1666
1667   /* Build the mapping.  */
1668
1669   mfirst = NULL;
1670   pm = &mfirst;
1671
1672   /* If we have a .interp section, then create a PT_PHDR segment for
1673      the program headers and a PT_INTERP segment for the .interp
1674      section.  */
1675   s = bfd_get_section_by_name (abfd, ".interp");
1676   if (s != NULL && (s->flags & SEC_LOAD) != 0)
1677     {
1678       m = ((struct elf_segment_map *)
1679            bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1680       if (m == NULL)
1681         goto error_return;
1682       m->next = NULL;
1683       m->p_type = PT_PHDR;
1684       /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not.  */
1685       m->p_flags = PF_R | PF_X;
1686       m->p_flags_valid = 1;
1687       m->includes_phdrs = 1;
1688
1689       *pm = m;
1690       pm = &m->next;
1691
1692       m = ((struct elf_segment_map *)
1693            bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1694       if (m == NULL)
1695         goto error_return;
1696       m->next = NULL;
1697       m->p_type = PT_INTERP;
1698       m->count = 1;
1699       m->sections[0] = s;
1700
1701       *pm = m;
1702       pm = &m->next;
1703     }
1704
1705   /* Look through the sections.  We put sections in the same program
1706      segment when the start of the second section can be placed within
1707      a few bytes of the end of the first section.  */
1708   last_hdr = NULL;
1709   phdr_index = 0;
1710   maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
1711   for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
1712     {
1713       asection *hdr;
1714
1715       hdr = *hdrpp;
1716
1717       /* See if this section and the last one will fit in the same
1718          segment.  */
1719       if (last_hdr == NULL
1720           || ((BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
1721                >= hdr->lma)
1722               && ((last_hdr->flags & SEC_LOAD) != 0
1723                   || (hdr->flags & SEC_LOAD) == 0)))
1724         {
1725           last_hdr = hdr;
1726           continue;
1727         }
1728
1729       /* This section won't fit in the program segment.  We must
1730          create a new program header holding all the sections from
1731          phdr_index until hdr.  */
1732
1733       m = make_mapping (abfd, sections, phdr_index, i);
1734       if (m == NULL)
1735         goto error_return;
1736
1737       *pm = m;
1738       pm = &m->next;
1739
1740       last_hdr = hdr;
1741       phdr_index = i;
1742     }
1743
1744   /* Create a final PT_LOAD program segment.  */
1745   if (last_hdr != NULL)
1746     {
1747       m = make_mapping (abfd, sections, phdr_index, i);
1748       if (m == NULL)
1749         goto error_return;
1750
1751       *pm = m;
1752       pm = &m->next;
1753     }
1754
1755   /* If there is a .dynamic section, throw in a PT_DYNAMIC segment.  */
1756   s = bfd_get_section_by_name (abfd, ".dynamic");
1757   if (s != NULL && (s->flags & SEC_LOAD) != 0)
1758     {
1759       m = ((struct elf_segment_map *)
1760            bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1761       if (m == NULL)
1762         goto error_return;
1763       m->next = NULL;
1764       m->p_type = PT_DYNAMIC;
1765       m->count = 1;
1766       m->sections[0] = s;
1767
1768       *pm = m;
1769       pm = &m->next;
1770     }
1771
1772   free (sections);
1773   sections = NULL;
1774
1775   elf_tdata (abfd)->segment_map = mfirst;
1776   return true;
1777
1778  error_return:
1779   if (sections != NULL)
1780     free (sections);
1781   return false;
1782 }
1783
1784 /* Sort sections by VMA.  */
1785
1786 static int
1787 elf_sort_sections (arg1, arg2)
1788      const PTR arg1;
1789      const PTR arg2;
1790 {
1791   const asection *sec1 = *(const asection **) arg1;
1792   const asection *sec2 = *(const asection **) arg2;
1793
1794   if (sec1->vma < sec2->vma)
1795     return -1;
1796   else if (sec1->vma > sec2->vma)
1797     return 1;
1798
1799   /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
1800
1801 #define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
1802
1803   if (TOEND (sec1))
1804     if (TOEND (sec2))
1805       return sec1->target_index - sec2->target_index;
1806     else 
1807       return 1;
1808
1809   if (TOEND (sec2))
1810     return -1;
1811
1812 #undef TOEND
1813
1814   /* Sort by size, to put zero sized sections before others at the
1815      same address.  */
1816
1817   if (sec1->_raw_size < sec2->_raw_size)
1818     return -1;
1819   if (sec1->_raw_size > sec2->_raw_size)
1820     return 1;
1821
1822   return sec1->target_index - sec2->target_index;
1823 }
1824
1825 /* Assign file positions to the sections based on the mapping from
1826    sections to segments.  This function also sets up some fields in
1827    the file header, and writes out the program headers.  */
1828
1829 static boolean
1830 assign_file_positions_for_segments (abfd)
1831      bfd *abfd;
1832 {
1833   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1834   unsigned int count;
1835   struct elf_segment_map *m;
1836   unsigned int alloc;
1837   Elf_Internal_Phdr *phdrs;
1838   file_ptr off;
1839   bfd_vma filehdr_vaddr, filehdr_paddr;
1840   bfd_vma phdrs_vaddr, phdrs_paddr;
1841   Elf_Internal_Phdr *p;
1842
1843   if (elf_tdata (abfd)->segment_map == NULL)
1844     {
1845       if (! map_sections_to_segments (abfd))
1846         return false;
1847     }
1848
1849   if (bed->elf_backend_modify_segment_map)
1850     {
1851       if (! (*bed->elf_backend_modify_segment_map) (abfd))
1852         return false;
1853     }
1854
1855   count = 0;
1856   for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
1857     ++count;
1858
1859   elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
1860   elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
1861   elf_elfheader (abfd)->e_phnum = count;
1862
1863   if (count == 0)
1864     return true;
1865
1866   /* If we already counted the number of program segments, make sure
1867      that we allocated enough space.  This happens when SIZEOF_HEADERS
1868      is used in a linker script.  */
1869   alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
1870   if (alloc != 0 && count > alloc)
1871     {
1872       ((*_bfd_error_handler)
1873        ("%s: Not enough room for program headers (allocated %u, need %u)",
1874         bfd_get_filename (abfd), alloc, count));
1875       bfd_set_error (bfd_error_bad_value);
1876       return false;
1877     }
1878
1879   if (alloc == 0)
1880     alloc = count;
1881
1882   phdrs = ((Elf_Internal_Phdr *)
1883            bfd_alloc (abfd, alloc * sizeof (Elf_Internal_Phdr)));
1884   if (phdrs == NULL)
1885     return false;
1886
1887   off = bed->s->sizeof_ehdr;
1888   off += alloc * bed->s->sizeof_phdr;
1889
1890   filehdr_vaddr = 0;
1891   filehdr_paddr = 0;
1892   phdrs_vaddr = 0;
1893   phdrs_paddr = 0;
1894   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
1895        m != NULL;
1896        m = m->next, p++)
1897     {
1898       unsigned int i;
1899       asection **secpp;
1900
1901       /* If elf_segment_map is not from map_sections_to_segments, the
1902          sections may not be correctly ordered.  */
1903       if (m->count > 0)
1904         qsort (m->sections, (size_t) m->count, sizeof (asection *),
1905                elf_sort_sections);
1906
1907       p->p_type = m->p_type;
1908
1909       if (m->p_flags_valid)
1910         p->p_flags = m->p_flags;
1911       else
1912         p->p_flags = 0;
1913
1914       if (p->p_type == PT_LOAD
1915           && m->count > 0
1916           && (m->sections[0]->flags & SEC_LOAD) != 0)
1917         off += (m->sections[0]->vma - off) % bed->maxpagesize;
1918
1919       if (m->count == 0)
1920         p->p_vaddr = 0;
1921       else
1922         p->p_vaddr = m->sections[0]->vma;
1923
1924       if (m->p_paddr_valid)
1925         p->p_paddr = m->p_paddr;
1926       else if (m->count == 0)
1927         p->p_paddr = 0;
1928       else
1929         p->p_paddr = m->sections[0]->lma;
1930
1931       if (p->p_type == PT_LOAD)
1932         p->p_align = bed->maxpagesize;
1933       else if (m->count == 0)
1934         p->p_align = bed->s->file_align;
1935       else
1936         p->p_align = 0;
1937
1938       p->p_offset = 0;
1939       p->p_filesz = 0;
1940       p->p_memsz = 0;
1941
1942       if (m->includes_filehdr)
1943         {
1944           if (! m->p_flags_valid)
1945             p->p_flags |= PF_R;
1946           p->p_offset = 0;
1947           p->p_filesz = bed->s->sizeof_ehdr;
1948           p->p_memsz = bed->s->sizeof_ehdr;
1949           if (m->count > 0)
1950             {
1951               BFD_ASSERT (p->p_type == PT_LOAD);
1952               p->p_vaddr -= off;
1953               if (! m->p_paddr_valid)
1954                 p->p_paddr -= off;
1955             }
1956           if (p->p_type == PT_LOAD)
1957             {
1958               filehdr_vaddr = p->p_vaddr;
1959               filehdr_paddr = p->p_paddr;
1960             }
1961         }
1962
1963       if (m->includes_phdrs)
1964         {
1965           if (! m->p_flags_valid)
1966             p->p_flags |= PF_R;
1967           if (m->includes_filehdr)
1968             {
1969               if (p->p_type == PT_LOAD)
1970                 {
1971                   phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
1972                   phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
1973                 }
1974             }
1975           else
1976             {
1977               p->p_offset = bed->s->sizeof_ehdr;
1978               if (m->count > 0)
1979                 {
1980                   BFD_ASSERT (p->p_type == PT_LOAD);
1981                   p->p_vaddr -= off - p->p_offset;
1982                   if (! m->p_paddr_valid)
1983                     p->p_paddr -= off - p->p_offset;
1984                 }
1985               if (p->p_type == PT_LOAD)
1986                 {
1987                   phdrs_vaddr = p->p_vaddr;
1988                   phdrs_paddr = p->p_paddr;
1989                 }
1990             }
1991           p->p_filesz += alloc * bed->s->sizeof_phdr;
1992           p->p_memsz += alloc * bed->s->sizeof_phdr;
1993         }
1994
1995       if (p->p_type == PT_LOAD)
1996         {
1997           if (! m->includes_filehdr && ! m->includes_phdrs)
1998             p->p_offset = off;
1999           else
2000             {
2001               file_ptr adjust;
2002
2003               adjust = off - (p->p_offset + p->p_filesz);
2004               p->p_filesz += adjust;
2005               p->p_memsz += adjust;
2006             }
2007         }
2008
2009       for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2010         {
2011           asection *sec;
2012           flagword flags;
2013           bfd_size_type align;
2014
2015           sec = *secpp;
2016           flags = sec->flags;
2017
2018           if (p->p_type == PT_LOAD)
2019             {
2020               bfd_vma adjust;
2021
2022               /* The section VMA must equal the file position modulo
2023                  the page size.  */
2024               if ((flags & SEC_LOAD) != 0)
2025                 {
2026                   adjust = (sec->vma - off) % bed->maxpagesize;
2027                   if (adjust != 0)
2028                     {
2029                       if (i == 0)
2030                         abort ();
2031                       p->p_memsz += adjust;
2032                       if ((flags & SEC_LOAD) != 0)
2033                         p->p_filesz += adjust;
2034                       off += adjust;
2035                     }
2036                 }
2037
2038               sec->filepos = off;
2039
2040               if ((flags & SEC_LOAD) != 0)
2041                 off += sec->_raw_size;
2042             }
2043
2044           p->p_memsz += sec->_raw_size;
2045
2046           if ((flags & SEC_LOAD) != 0)
2047             p->p_filesz += sec->_raw_size;
2048
2049           align = 1 << bfd_get_section_alignment (abfd, sec);
2050           if (align > p->p_align)
2051             p->p_align = align;
2052
2053           if (! m->p_flags_valid)
2054             {
2055               p->p_flags |= PF_R;
2056               if ((flags & SEC_CODE) != 0)
2057                 p->p_flags |= PF_X;
2058               if ((flags & SEC_READONLY) == 0)
2059                 p->p_flags |= PF_W;
2060             }
2061         }
2062     }
2063
2064   /* Now that we have set the section file positions, we can set up
2065      the file positions for the non PT_LOAD segments.  */
2066   for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2067        m != NULL;
2068        m = m->next, p++)
2069     {
2070       if (p->p_type != PT_LOAD && m->count > 0)
2071         {
2072           BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
2073           p->p_offset = m->sections[0]->filepos;
2074         }
2075       if (m->count == 0)
2076         {
2077           if (m->includes_filehdr)
2078             {
2079               p->p_vaddr = filehdr_vaddr;
2080               if (! m->p_paddr_valid)
2081                 p->p_paddr = filehdr_paddr;
2082             }
2083           else if (m->includes_phdrs)
2084             {
2085               p->p_vaddr = phdrs_vaddr;
2086               if (! m->p_paddr_valid)
2087                 p->p_paddr = phdrs_paddr;
2088             }
2089         }
2090     }
2091
2092   /* Clear out any program headers we allocated but did not use.  */
2093   for (; count < alloc; count++, p++)
2094     {
2095       memset (p, 0, sizeof *p);
2096       p->p_type = PT_NULL;
2097     }
2098
2099   elf_tdata (abfd)->phdr = phdrs;
2100
2101   elf_tdata (abfd)->next_file_pos = off;
2102
2103   /* Write out the program headers.  */
2104   if (bfd_seek (abfd, bed->s->sizeof_ehdr, SEEK_SET) != 0
2105       || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
2106     return false;
2107
2108   return true;
2109 }
2110
2111 /* Get the size of the program header.
2112
2113    If this is called by the linker before any of the section VMA's are set, it
2114    can't calculate the correct value for a strange memory layout.  This only
2115    happens when SIZEOF_HEADERS is used in a linker script.  In this case,
2116    SORTED_HDRS is NULL and we assume the normal scenario of one text and one
2117    data segment (exclusive of .interp and .dynamic).
2118
2119    ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
2120    will be two segments.  */
2121
2122 static bfd_size_type
2123 get_program_header_size (abfd)
2124      bfd *abfd;
2125 {
2126   size_t segs;
2127   asection *s;
2128   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2129
2130   /* We can't return a different result each time we're called.  */
2131   if (elf_tdata (abfd)->program_header_size != 0)
2132     return elf_tdata (abfd)->program_header_size;
2133
2134   if (elf_tdata (abfd)->segment_map != NULL)
2135     {
2136       struct elf_segment_map *m;
2137
2138       segs = 0;
2139       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
2140         ++segs;
2141       elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
2142       return elf_tdata (abfd)->program_header_size;
2143     }
2144
2145   /* Assume we will need exactly two PT_LOAD segments: one for text
2146      and one for data.  */
2147   segs = 2;
2148
2149   s = bfd_get_section_by_name (abfd, ".interp");
2150   if (s != NULL && (s->flags & SEC_LOAD) != 0)
2151     {
2152       /* If we have a loadable interpreter section, we need a
2153          PT_INTERP segment.  In this case, assume we also need a
2154          PT_PHDR segment, although that may not be true for all
2155          targets.  */
2156       segs += 2;
2157     }
2158
2159   if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
2160     {
2161       /* We need a PT_DYNAMIC segment.  */
2162       ++segs;
2163     }
2164
2165   /* Let the backend count up any program headers it might need.  */
2166   if (bed->elf_backend_additional_program_headers)
2167     {
2168       int a;
2169
2170       a = (*bed->elf_backend_additional_program_headers) (abfd);
2171       if (a == -1)
2172         abort ();
2173       segs += a;
2174     }
2175
2176   elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
2177   return elf_tdata (abfd)->program_header_size;
2178 }
2179
2180 /* Work out the file positions of all the sections.  This is called by
2181    _bfd_elf_compute_section_file_positions.  All the section sizes and
2182    VMAs must be known before this is called.
2183
2184    We do not consider reloc sections at this point, unless they form
2185    part of the loadable image.  Reloc sections are assigned file
2186    positions in assign_file_positions_for_relocs, which is called by
2187    write_object_contents and final_link.
2188
2189    We also don't set the positions of the .symtab and .strtab here.  */
2190
2191 static boolean
2192 assign_file_positions_except_relocs (abfd)
2193      bfd *abfd;
2194 {
2195   struct elf_obj_tdata * const tdata = elf_tdata (abfd);
2196   Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
2197   Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
2198   file_ptr off;
2199   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2200
2201   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2202     {
2203       Elf_Internal_Shdr **hdrpp;
2204       unsigned int i;
2205
2206       /* Start after the ELF header.  */
2207       off = i_ehdrp->e_ehsize;
2208
2209       /* We are not creating an executable, which means that we are
2210          not creating a program header, and that the actual order of
2211          the sections in the file is unimportant.  */
2212       for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2213         {
2214           Elf_Internal_Shdr *hdr;
2215
2216           hdr = *hdrpp;
2217           if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2218             {
2219               hdr->sh_offset = -1;
2220               continue;
2221             }
2222           if (i == tdata->symtab_section
2223               || i == tdata->strtab_section)
2224             {
2225               hdr->sh_offset = -1;
2226               continue;
2227             }
2228           
2229           off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2230         }
2231     }
2232   else
2233     {
2234       unsigned int i;
2235       Elf_Internal_Shdr **hdrpp;
2236
2237       /* Assign file positions for the loaded sections based on the
2238          assignment of sections to segments.  */
2239       if (! assign_file_positions_for_segments (abfd))
2240         return false;
2241
2242       /* Assign file positions for the other sections.  */
2243
2244       off = elf_tdata (abfd)->next_file_pos;
2245       for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2246         {
2247           Elf_Internal_Shdr *hdr;
2248
2249           hdr = *hdrpp;
2250           if (hdr->bfd_section != NULL
2251               && hdr->bfd_section->filepos != 0)
2252             hdr->sh_offset = hdr->bfd_section->filepos;
2253           else if ((hdr->sh_flags & SHF_ALLOC) != 0)
2254             {
2255               ((*_bfd_error_handler)
2256                ("%s: warning: allocated section `%s' not in segment",
2257                 bfd_get_filename (abfd),
2258                 (hdr->bfd_section == NULL
2259                  ? "*unknown*"
2260                  : hdr->bfd_section->name)));
2261               off += (hdr->sh_addr - off) % bed->maxpagesize;
2262               off = _bfd_elf_assign_file_position_for_section (hdr, off,
2263                                                                false);
2264             }
2265           else if (hdr->sh_type == SHT_REL
2266                    || hdr->sh_type == SHT_RELA
2267                    || hdr == i_shdrpp[tdata->symtab_section]
2268                    || hdr == i_shdrpp[tdata->strtab_section])
2269             hdr->sh_offset = -1;
2270           else
2271             off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2272         }                  
2273     }
2274
2275   /* Place the section headers.  */
2276   off = align_file_position (off, bed->s->file_align);
2277   i_ehdrp->e_shoff = off;
2278   off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2279
2280   elf_tdata (abfd)->next_file_pos = off;
2281
2282   return true;
2283 }
2284
2285 static boolean
2286 prep_headers (abfd)
2287      bfd *abfd;
2288 {
2289   Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
2290   Elf_Internal_Phdr *i_phdrp = 0;       /* Program header table, internal form */
2291   Elf_Internal_Shdr **i_shdrp;  /* Section header table, internal form */
2292   int count;
2293   struct bfd_strtab_hash *shstrtab;
2294   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2295
2296   i_ehdrp = elf_elfheader (abfd);
2297   i_shdrp = elf_elfsections (abfd);
2298
2299   shstrtab = _bfd_elf_stringtab_init ();
2300   if (shstrtab == NULL)
2301     return false;
2302
2303   elf_shstrtab (abfd) = shstrtab;
2304
2305   i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2306   i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2307   i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2308   i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2309
2310   i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
2311   i_ehdrp->e_ident[EI_DATA] =
2312     bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
2313   i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
2314
2315   for (count = EI_PAD; count < EI_NIDENT; count++)
2316     i_ehdrp->e_ident[count] = 0;
2317
2318   if ((abfd->flags & DYNAMIC) != 0)
2319     i_ehdrp->e_type = ET_DYN;
2320   else if ((abfd->flags & EXEC_P) != 0)
2321     i_ehdrp->e_type = ET_EXEC;
2322   else
2323     i_ehdrp->e_type = ET_REL;
2324
2325   switch (bfd_get_arch (abfd))
2326     {
2327     case bfd_arch_unknown:
2328       i_ehdrp->e_machine = EM_NONE;
2329       break;
2330     case bfd_arch_sparc:
2331       if (bed->s->arch_size == 64)
2332         i_ehdrp->e_machine = EM_SPARC64;
2333       else
2334         i_ehdrp->e_machine = EM_SPARC;
2335       break;
2336     case bfd_arch_i386:
2337       i_ehdrp->e_machine = EM_386;
2338       break;
2339     case bfd_arch_m68k:
2340       i_ehdrp->e_machine = EM_68K;
2341       break;
2342     case bfd_arch_m88k:
2343       i_ehdrp->e_machine = EM_88K;
2344       break;
2345     case bfd_arch_i860:
2346       i_ehdrp->e_machine = EM_860;
2347       break;
2348     case bfd_arch_mips: /* MIPS Rxxxx */
2349       i_ehdrp->e_machine = EM_MIPS;     /* only MIPS R3000 */
2350       break;
2351     case bfd_arch_hppa:
2352       i_ehdrp->e_machine = EM_PARISC;
2353       break;
2354     case bfd_arch_powerpc:
2355       i_ehdrp->e_machine = EM_PPC;
2356       break;
2357 /* start-sanitize-arc */
2358     case bfd_arch_arc:
2359       i_ehdrp->e_machine = EM_CYGNUS_ARC;
2360       break;
2361 /* end-sanitize-arc */
2362       /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2363     default:
2364       i_ehdrp->e_machine = EM_NONE;
2365     }
2366   i_ehdrp->e_version = bed->s->ev_current;
2367   i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
2368
2369   /* no program header, for now. */
2370   i_ehdrp->e_phoff = 0;
2371   i_ehdrp->e_phentsize = 0;
2372   i_ehdrp->e_phnum = 0;
2373
2374   /* each bfd section is section header entry */
2375   i_ehdrp->e_entry = bfd_get_start_address (abfd);
2376   i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
2377
2378   /* if we're building an executable, we'll need a program header table */
2379   if (abfd->flags & EXEC_P)
2380     {
2381       /* it all happens later */
2382 #if 0
2383       i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2384
2385       /* elf_build_phdrs() returns a (NULL-terminated) array of
2386          Elf_Internal_Phdrs */
2387       i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2388       i_ehdrp->e_phoff = outbase;
2389       outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2390 #endif
2391     }
2392   else
2393     {
2394       i_ehdrp->e_phentsize = 0;
2395       i_phdrp = 0;
2396       i_ehdrp->e_phoff = 0;
2397     }
2398
2399   elf_tdata (abfd)->symtab_hdr.sh_name =
2400     (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
2401   elf_tdata (abfd)->strtab_hdr.sh_name =
2402     (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
2403   elf_tdata (abfd)->shstrtab_hdr.sh_name =
2404     (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
2405   if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2406       || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2407       || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2408     return false;
2409
2410   return true;
2411 }
2412
2413 /* Assign file positions for all the reloc sections which are not part
2414    of the loadable file image.  */
2415
2416 void
2417 _bfd_elf_assign_file_positions_for_relocs (abfd)
2418      bfd *abfd;
2419 {
2420   file_ptr off;
2421   unsigned int i;
2422   Elf_Internal_Shdr **shdrpp;
2423
2424   off = elf_tdata (abfd)->next_file_pos;
2425
2426   for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2427        i < elf_elfheader (abfd)->e_shnum;
2428        i++, shdrpp++)
2429     {
2430       Elf_Internal_Shdr *shdrp;
2431
2432       shdrp = *shdrpp;
2433       if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2434           && shdrp->sh_offset == -1)
2435         off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
2436     }
2437
2438   elf_tdata (abfd)->next_file_pos = off;
2439 }
2440
2441 boolean
2442 _bfd_elf_write_object_contents (abfd)
2443      bfd *abfd;
2444 {
2445   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2446   Elf_Internal_Ehdr *i_ehdrp;
2447   Elf_Internal_Shdr **i_shdrp;
2448   boolean failed;
2449   unsigned int count;
2450
2451   if (! abfd->output_has_begun
2452       && ! _bfd_elf_compute_section_file_positions (abfd,
2453                                                     (struct bfd_link_info *) NULL))
2454     return false;
2455
2456   i_shdrp = elf_elfsections (abfd);
2457   i_ehdrp = elf_elfheader (abfd);
2458
2459   failed = false;
2460   bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
2461   if (failed)
2462     return false;
2463   _bfd_elf_assign_file_positions_for_relocs (abfd);
2464
2465   /* After writing the headers, we need to write the sections too... */
2466   for (count = 1; count < i_ehdrp->e_shnum; count++)
2467     {
2468       if (bed->elf_backend_section_processing)
2469         (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2470       if (i_shdrp[count]->contents)
2471         {
2472           if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2473               || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2474                              1, abfd)
2475                   != i_shdrp[count]->sh_size))
2476             return false;
2477         }
2478     }
2479
2480   /* Write out the section header names.  */
2481   if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
2482       || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
2483     return false;
2484
2485   if (bed->elf_backend_final_write_processing)
2486     (*bed->elf_backend_final_write_processing) (abfd,
2487                                                 elf_tdata (abfd)->linker);
2488
2489   return bed->s->write_shdrs_and_ehdr (abfd);
2490 }
2491
2492 /* given a section, search the header to find them... */
2493 int
2494 _bfd_elf_section_from_bfd_section (abfd, asect)
2495      bfd *abfd;
2496      struct sec *asect;
2497 {
2498   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2499   Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2500   int index;
2501   Elf_Internal_Shdr *hdr;
2502   int maxindex = elf_elfheader (abfd)->e_shnum;
2503
2504   for (index = 0; index < maxindex; index++)
2505     {
2506       hdr = i_shdrp[index];
2507       if (hdr->bfd_section == asect)
2508         return index;
2509     }
2510
2511   if (bed->elf_backend_section_from_bfd_section)
2512     {
2513       for (index = 0; index < maxindex; index++)
2514         {
2515           int retval;
2516
2517           hdr = i_shdrp[index];
2518           retval = index;
2519           if ((*bed->elf_backend_section_from_bfd_section)
2520               (abfd, hdr, asect, &retval))
2521             return retval;
2522         }
2523     }
2524
2525   if (bfd_is_abs_section (asect))
2526     return SHN_ABS;
2527   if (bfd_is_com_section (asect))
2528     return SHN_COMMON;
2529   if (bfd_is_und_section (asect))
2530     return SHN_UNDEF;
2531
2532   return -1;
2533 }
2534
2535 /* given a symbol, return the bfd index for that symbol.  */
2536  int
2537 _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2538      bfd *abfd;
2539      struct symbol_cache_entry **asym_ptr_ptr;
2540 {
2541   struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2542   int idx;
2543   flagword flags = asym_ptr->flags;
2544
2545   /* When gas creates relocations against local labels, it creates its
2546      own symbol for the section, but does put the symbol into the
2547      symbol chain, so udata is 0.  When the linker is generating
2548      relocatable output, this section symbol may be for one of the
2549      input sections rather than the output section.  */
2550   if (asym_ptr->udata.i == 0
2551       && (flags & BSF_SECTION_SYM)
2552       && asym_ptr->section)
2553     {
2554       int indx;
2555
2556       if (asym_ptr->section->output_section != NULL)
2557         indx = asym_ptr->section->output_section->index;
2558       else
2559         indx = asym_ptr->section->index;
2560       if (elf_section_syms (abfd)[indx])
2561         asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
2562     }
2563
2564   idx = asym_ptr->udata.i;
2565   BFD_ASSERT (idx != 0);
2566
2567 #if DEBUG & 4
2568   {
2569     fprintf (stderr,
2570              "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
2571      (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2572     fflush (stderr);
2573   }
2574 #endif
2575
2576   return idx;
2577 }
2578
2579 /* Copy private BFD data.  This copies any program header information.  */
2580
2581 static boolean
2582 copy_private_bfd_data (ibfd, obfd)
2583      bfd *ibfd;
2584      bfd *obfd;
2585 {
2586   Elf_Internal_Ehdr *iehdr;
2587   struct elf_segment_map *mfirst;
2588   struct elf_segment_map **pm;
2589   Elf_Internal_Phdr *p;
2590   unsigned int i, c;
2591
2592   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2593       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2594     return true;
2595
2596   if (elf_tdata (ibfd)->phdr == NULL)
2597     return true;
2598
2599   iehdr = elf_elfheader (ibfd);
2600
2601   mfirst = NULL;
2602   pm = &mfirst;
2603
2604   c = elf_elfheader (ibfd)->e_phnum;
2605   for (i = 0, p = elf_tdata (ibfd)->phdr; i < c; i++, p++)
2606     {
2607       unsigned int csecs;
2608       asection *s;
2609       struct elf_segment_map *m;
2610       unsigned int isec;
2611
2612       csecs = 0;
2613
2614       /* The complicated case when p_vaddr is 0 is to handle the
2615          Solaris linker, which generates a PT_INTERP section with
2616          p_vaddr and p_memsz set to 0.  */
2617       for (s = ibfd->sections; s != NULL; s = s->next)
2618         if (((s->vma >= p->p_vaddr
2619               && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
2620                   || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
2621              || (p->p_vaddr == 0
2622                  && p->p_filesz > 0
2623                  && (s->flags & SEC_HAS_CONTENTS) != 0
2624                  && (bfd_vma) s->filepos >= p->p_offset
2625                  && ((bfd_vma) s->filepos + s->_raw_size
2626                      <= p->p_offset + p->p_filesz)))
2627             && (s->flags & SEC_ALLOC) != 0
2628             && s->output_section != NULL)
2629           ++csecs;
2630
2631       m = ((struct elf_segment_map *)
2632            bfd_alloc (obfd,
2633                       (sizeof (struct elf_segment_map)
2634                        + (csecs - 1) * sizeof (asection *))));
2635       if (m == NULL)
2636         return false;
2637
2638       m->next = NULL;
2639       m->p_type = p->p_type;
2640       m->p_flags = p->p_flags;
2641       m->p_flags_valid = 1;
2642       m->p_paddr = p->p_paddr;
2643       m->p_paddr_valid = 1;
2644
2645       m->includes_filehdr = (p->p_offset == 0
2646                              && p->p_filesz >= iehdr->e_ehsize);
2647
2648       m->includes_phdrs = (p->p_offset <= (bfd_vma) iehdr->e_phoff
2649                            && (p->p_offset + p->p_filesz
2650                                >= ((bfd_vma) iehdr->e_phoff
2651                                    + iehdr->e_phnum * iehdr->e_phentsize)));
2652
2653       isec = 0;
2654       for (s = ibfd->sections; s != NULL; s = s->next)
2655         {
2656           if (((s->vma >= p->p_vaddr
2657                 && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
2658                     || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
2659                || (p->p_vaddr == 0
2660                    && p->p_filesz > 0
2661                    && (s->flags & SEC_HAS_CONTENTS) != 0
2662                    && (bfd_vma) s->filepos >= p->p_offset
2663                    && ((bfd_vma) s->filepos + s->_raw_size
2664                        <= p->p_offset + p->p_filesz)))
2665               && (s->flags & SEC_ALLOC) != 0
2666               && s->output_section != NULL)
2667             {
2668               m->sections[isec] = s->output_section;
2669               ++isec;
2670             }
2671         }
2672       BFD_ASSERT (isec == csecs);
2673       m->count = csecs;
2674
2675       *pm = m;
2676       pm = &m->next;
2677     }
2678
2679   elf_tdata (obfd)->segment_map = mfirst;
2680
2681   return true;
2682 }
2683
2684 /* Copy private section information.  This copies over the entsize
2685    field, and sometimes the info field.  */
2686
2687 boolean
2688 _bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
2689      bfd *ibfd;
2690      asection *isec;
2691      bfd *obfd;
2692      asection *osec;
2693 {
2694   Elf_Internal_Shdr *ihdr, *ohdr;
2695
2696   if (ibfd->xvec->flavour != bfd_target_elf_flavour
2697       || obfd->xvec->flavour != bfd_target_elf_flavour)
2698     return true;
2699
2700   /* Copy over private BFD data if it has not already been copied.
2701      This must be done here, rather than in the copy_private_bfd_data
2702      entry point, because the latter is called after the section
2703      contents have been set, which means that the program headers have
2704      already been worked out.  */
2705   if (elf_tdata (obfd)->segment_map == NULL
2706       && elf_tdata (ibfd)->phdr != NULL)
2707     {
2708       asection *s;
2709
2710       /* Only set up the segments when all the sections have been set
2711          up.  */
2712       for (s = ibfd->sections; s != NULL; s = s->next)
2713         if (s->output_section == NULL)
2714           break;
2715       if (s == NULL)
2716         {
2717           if (! copy_private_bfd_data (ibfd, obfd))
2718             return false;
2719         }
2720     }
2721
2722   ihdr = &elf_section_data (isec)->this_hdr;
2723   ohdr = &elf_section_data (osec)->this_hdr;
2724
2725   ohdr->sh_entsize = ihdr->sh_entsize;
2726
2727   if (ihdr->sh_type == SHT_SYMTAB
2728       || ihdr->sh_type == SHT_DYNSYM)
2729     ohdr->sh_info = ihdr->sh_info;
2730
2731   return true;
2732 }
2733
2734 /* Copy private symbol information.  If this symbol is in a section
2735    which we did not map into a BFD section, try to map the section
2736    index correctly.  We use special macro definitions for the mapped
2737    section indices; these definitions are interpreted by the
2738    swap_out_syms function.  */
2739
2740 #define MAP_ONESYMTAB (SHN_LORESERVE - 1)
2741 #define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
2742 #define MAP_STRTAB (SHN_LORESERVE - 3)
2743 #define MAP_SHSTRTAB (SHN_LORESERVE - 4)
2744
2745 boolean
2746 _bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
2747      bfd *ibfd;
2748      asymbol *isymarg;
2749      bfd *obfd;
2750      asymbol *osymarg;
2751 {
2752   elf_symbol_type *isym, *osym;
2753
2754   isym = elf_symbol_from (ibfd, isymarg);
2755   osym = elf_symbol_from (obfd, osymarg);
2756
2757   if (isym != NULL
2758       && osym != NULL
2759       && bfd_is_abs_section (isym->symbol.section))
2760     {
2761       unsigned int shndx;
2762
2763       shndx = isym->internal_elf_sym.st_shndx;
2764       if (shndx == elf_onesymtab (ibfd))
2765         shndx = MAP_ONESYMTAB;
2766       else if (shndx == elf_dynsymtab (ibfd))
2767         shndx = MAP_DYNSYMTAB;
2768       else if (shndx == elf_tdata (ibfd)->strtab_section)
2769         shndx = MAP_STRTAB;
2770       else if (shndx == elf_tdata (ibfd)->shstrtab_section)
2771         shndx = MAP_SHSTRTAB;
2772       osym->internal_elf_sym.st_shndx = shndx;
2773     }
2774
2775   return true;
2776 }
2777
2778 /* Swap out the symbols.  */
2779
2780 static boolean
2781 swap_out_syms (abfd, sttp)
2782      bfd *abfd;
2783      struct bfd_strtab_hash **sttp;
2784 {
2785   struct elf_backend_data *bed = get_elf_backend_data (abfd);
2786
2787   if (!elf_map_symbols (abfd))
2788     return false;
2789
2790   /* Dump out the symtabs. */
2791   {
2792     int symcount = bfd_get_symcount (abfd);
2793     asymbol **syms = bfd_get_outsymbols (abfd);
2794     struct bfd_strtab_hash *stt;
2795     Elf_Internal_Shdr *symtab_hdr;
2796     Elf_Internal_Shdr *symstrtab_hdr;
2797     char *outbound_syms;
2798     int idx;
2799
2800     stt = _bfd_elf_stringtab_init ();
2801     if (stt == NULL)
2802       return false;
2803
2804     symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2805     symtab_hdr->sh_type = SHT_SYMTAB;
2806     symtab_hdr->sh_entsize = bed->s->sizeof_sym;
2807     symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2808     symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2809     symtab_hdr->sh_addralign = bed->s->file_align;
2810
2811     symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2812     symstrtab_hdr->sh_type = SHT_STRTAB;
2813
2814     outbound_syms = bfd_alloc (abfd,
2815                                (1 + symcount) * bed->s->sizeof_sym);
2816     if (outbound_syms == NULL)
2817       return false;
2818     symtab_hdr->contents = (PTR) outbound_syms;
2819
2820     /* now generate the data (for "contents") */
2821     {
2822       /* Fill in zeroth symbol and swap it out.  */
2823       Elf_Internal_Sym sym;
2824       sym.st_name = 0;
2825       sym.st_value = 0;
2826       sym.st_size = 0;
2827       sym.st_info = 0;
2828       sym.st_other = 0;
2829       sym.st_shndx = SHN_UNDEF;
2830       bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
2831       outbound_syms += bed->s->sizeof_sym;
2832     }
2833     for (idx = 0; idx < symcount; idx++)
2834       {
2835         Elf_Internal_Sym sym;
2836         bfd_vma value = syms[idx]->value;
2837         elf_symbol_type *type_ptr;
2838         flagword flags = syms[idx]->flags;
2839
2840         if (flags & BSF_SECTION_SYM)
2841           /* Section symbols have no names.  */
2842           sym.st_name = 0;
2843         else
2844           {
2845             sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
2846                                                               syms[idx]->name,
2847                                                               true, false);
2848             if (sym.st_name == (unsigned long) -1)
2849               return false;
2850           }
2851
2852         type_ptr = elf_symbol_from (abfd, syms[idx]);
2853
2854         if (bfd_is_com_section (syms[idx]->section))
2855           {
2856             /* ELF common symbols put the alignment into the `value' field,
2857                and the size into the `size' field.  This is backwards from
2858                how BFD handles it, so reverse it here.  */
2859             sym.st_size = value;
2860             if (type_ptr == NULL
2861                 || type_ptr->internal_elf_sym.st_value == 0)
2862               sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
2863             else
2864               sym.st_value = type_ptr->internal_elf_sym.st_value;
2865             sym.st_shndx = _bfd_elf_section_from_bfd_section (abfd,
2866                                                               syms[idx]->section);
2867           }
2868         else
2869           {
2870             asection *sec = syms[idx]->section;
2871             int shndx;
2872
2873             if (sec->output_section)
2874               {
2875                 value += sec->output_offset;
2876                 sec = sec->output_section;
2877               }
2878             value += sec->vma;
2879             sym.st_value = value;
2880             sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2881
2882             if (bfd_is_abs_section (sec)
2883                 && type_ptr != NULL
2884                 && type_ptr->internal_elf_sym.st_shndx != 0)
2885               {
2886                 /* This symbol is in a real ELF section which we did
2887                    not create as a BFD section.  Undo the mapping done
2888                    by copy_private_symbol_data.  */
2889                 shndx = type_ptr->internal_elf_sym.st_shndx;
2890                 switch (shndx)
2891                   {
2892                   case MAP_ONESYMTAB:
2893                     shndx = elf_onesymtab (abfd);
2894                     break;
2895                   case MAP_DYNSYMTAB:
2896                     shndx = elf_dynsymtab (abfd);
2897                     break;
2898                   case MAP_STRTAB:
2899                     shndx = elf_tdata (abfd)->strtab_section;
2900                     break;
2901                   case MAP_SHSTRTAB:
2902                     shndx = elf_tdata (abfd)->shstrtab_section;
2903                     break;
2904                   default:
2905                     break;
2906                   }
2907               }
2908             else
2909               {
2910                 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2911
2912                 if (shndx == -1)
2913                   {
2914                     asection *sec2;
2915
2916                     /* Writing this would be a hell of a lot easier if
2917                        we had some decent documentation on bfd, and
2918                        knew what to expect of the library, and what to
2919                        demand of applications.  For example, it
2920                        appears that `objcopy' might not set the
2921                        section of a symbol to be a section that is
2922                        actually in the output file.  */
2923                     sec2 = bfd_get_section_by_name (abfd, sec->name);
2924                     BFD_ASSERT (sec2 != 0);
2925                     shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
2926                     BFD_ASSERT (shndx != -1);
2927                   }
2928               }
2929
2930             sym.st_shndx = shndx;
2931           }
2932
2933         if (bfd_is_com_section (syms[idx]->section))
2934           sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2935         else if (bfd_is_und_section (syms[idx]->section))
2936           sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
2937                                       ? STB_WEAK
2938                                       : STB_GLOBAL),
2939                                      ((flags & BSF_FUNCTION)
2940                                       ? STT_FUNC
2941                                       : STT_NOTYPE));
2942         else if (flags & BSF_SECTION_SYM)
2943           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2944         else if (flags & BSF_FILE)
2945           sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2946         else
2947           {
2948             int bind = STB_LOCAL;
2949             int type = STT_OBJECT;
2950
2951             if (flags & BSF_LOCAL)
2952               bind = STB_LOCAL;
2953             else if (flags & BSF_WEAK)
2954               bind = STB_WEAK;
2955             else if (flags & BSF_GLOBAL)
2956               bind = STB_GLOBAL;
2957
2958             if (flags & BSF_FUNCTION)
2959               type = STT_FUNC;
2960
2961             sym.st_info = ELF_ST_INFO (bind, type);
2962           }
2963
2964         sym.st_other = 0;
2965         bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
2966         outbound_syms += bed->s->sizeof_sym;
2967       }
2968
2969     *sttp = stt;
2970     symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
2971     symstrtab_hdr->sh_type = SHT_STRTAB;
2972
2973     symstrtab_hdr->sh_flags = 0;
2974     symstrtab_hdr->sh_addr = 0;
2975     symstrtab_hdr->sh_entsize = 0;
2976     symstrtab_hdr->sh_link = 0;
2977     symstrtab_hdr->sh_info = 0;
2978     symstrtab_hdr->sh_addralign = 1;
2979   }
2980
2981   return true;
2982 }
2983
2984 /* Return the number of bytes required to hold the symtab vector.
2985
2986    Note that we base it on the count plus 1, since we will null terminate
2987    the vector allocated based on this size.  However, the ELF symbol table
2988    always has a dummy entry as symbol #0, so it ends up even.  */
2989
2990 long
2991 _bfd_elf_get_symtab_upper_bound (abfd)
2992      bfd *abfd;
2993 {
2994   long symcount;
2995   long symtab_size;
2996   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
2997
2998   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2999   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3000
3001   return symtab_size;
3002 }
3003
3004 long
3005 _bfd_elf_get_dynamic_symtab_upper_bound (abfd)
3006      bfd *abfd;
3007 {
3008   long symcount;
3009   long symtab_size;
3010   Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
3011
3012   if (elf_dynsymtab (abfd) == 0)
3013     {
3014       bfd_set_error (bfd_error_invalid_operation);
3015       return -1;
3016     }
3017
3018   symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
3019   symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
3020
3021   return symtab_size;
3022 }
3023
3024 long
3025 _bfd_elf_get_reloc_upper_bound (abfd, asect)
3026      bfd *abfd;
3027      sec_ptr asect;
3028 {
3029   return (asect->reloc_count + 1) * sizeof (arelent *);
3030 }
3031
3032 /* Canonicalize the relocs.  */
3033
3034 long
3035 _bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
3036      bfd *abfd;
3037      sec_ptr section;
3038      arelent **relptr;
3039      asymbol **symbols;
3040 {
3041   arelent *tblptr;
3042   unsigned int i;
3043
3044   if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd, section, symbols))
3045     return -1;
3046
3047   tblptr = section->relocation;
3048   for (i = 0; i < section->reloc_count; i++)
3049     *relptr++ = tblptr++;
3050
3051   *relptr = NULL;
3052
3053   return section->reloc_count;
3054 }
3055
3056 long
3057 _bfd_elf_get_symtab (abfd, alocation)
3058      bfd *abfd;
3059      asymbol **alocation;
3060 {
3061   long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, false);
3062
3063   if (symcount >= 0)
3064     bfd_get_symcount (abfd) = symcount;
3065   return symcount;
3066 }
3067
3068 long
3069 _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
3070      bfd *abfd;
3071      asymbol **alocation;
3072 {
3073   return get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, true);
3074 }
3075
3076 asymbol *
3077 _bfd_elf_make_empty_symbol (abfd)
3078      bfd *abfd;
3079 {
3080   elf_symbol_type *newsym;
3081
3082   newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
3083   if (!newsym)
3084     return NULL;
3085   else
3086     {
3087       newsym->symbol.the_bfd = abfd;
3088       return &newsym->symbol;
3089     }
3090 }
3091
3092 void
3093 _bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
3094      bfd *ignore_abfd;
3095      asymbol *symbol;
3096      symbol_info *ret;
3097 {
3098   bfd_symbol_info (symbol, ret);
3099 }
3100
3101 alent *
3102 _bfd_elf_get_lineno (ignore_abfd, symbol)
3103      bfd *ignore_abfd;
3104      asymbol *symbol;
3105 {
3106   abort ();
3107   return NULL;
3108 }
3109
3110 boolean
3111 _bfd_elf_set_arch_mach (abfd, arch, machine)
3112      bfd *abfd;
3113      enum bfd_architecture arch;
3114      unsigned long machine;
3115 {
3116   /* If this isn't the right architecture for this backend, and this
3117      isn't the generic backend, fail.  */
3118   if (arch != get_elf_backend_data (abfd)->arch
3119       && arch != bfd_arch_unknown
3120       && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
3121     return false;
3122
3123   return bfd_default_set_arch_mach (abfd, arch, machine);
3124 }
3125
3126 /* Find the nearest line to a particular section and offset, for error
3127    reporting.  */
3128
3129 boolean
3130 _bfd_elf_find_nearest_line (abfd,
3131                             section,
3132                             symbols,
3133                             offset,
3134                             filename_ptr,
3135                             functionname_ptr,
3136                             line_ptr)
3137      bfd *abfd;
3138      asection *section;
3139      asymbol **symbols;
3140      bfd_vma offset;
3141      CONST char **filename_ptr;
3142      CONST char **functionname_ptr;
3143      unsigned int *line_ptr;
3144 {
3145   const char *filename;
3146   asymbol *func;
3147   asymbol **p;
3148
3149   if (symbols == NULL)
3150     return false;
3151
3152   filename = NULL;
3153   func = NULL;
3154
3155   for (p = symbols; *p != NULL; p++)
3156     {
3157       elf_symbol_type *q;
3158
3159       q = (elf_symbol_type *) *p;
3160
3161       if (bfd_get_section (&q->symbol) != section)
3162         continue;
3163
3164       switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
3165         {
3166         default:
3167           break;
3168         case STT_FILE:
3169           filename = bfd_asymbol_name (&q->symbol);
3170           break;
3171         case STT_FUNC:
3172           if (func == NULL
3173               || q->symbol.value <= offset)
3174             func = (asymbol *) q;
3175           break;
3176         }
3177     }
3178
3179   if (func == NULL)
3180     return false;
3181
3182   *filename_ptr = filename;
3183   *functionname_ptr = bfd_asymbol_name (func);
3184   *line_ptr = 0;
3185   return true;
3186 }
3187
3188 int
3189 _bfd_elf_sizeof_headers (abfd, reloc)
3190      bfd *abfd;
3191      boolean reloc;
3192 {
3193   int ret;
3194
3195   ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
3196   if (! reloc)
3197     ret += get_program_header_size (abfd);
3198   return ret;
3199 }
3200
3201 boolean
3202 _bfd_elf_set_section_contents (abfd, section, location, offset, count)
3203      bfd *abfd;
3204      sec_ptr section;
3205      PTR location;
3206      file_ptr offset;
3207      bfd_size_type count;
3208 {
3209   Elf_Internal_Shdr *hdr;
3210
3211   if (! abfd->output_has_begun
3212       && ! _bfd_elf_compute_section_file_positions (abfd,
3213                                                     (struct bfd_link_info *) NULL))
3214     return false;
3215
3216   hdr = &elf_section_data (section)->this_hdr;
3217
3218   if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3219     return false;
3220   if (bfd_write (location, 1, count, abfd) != count)
3221     return false;
3222
3223   return true;
3224 }
3225
3226 void
3227 _bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
3228      bfd *abfd;
3229      arelent *cache_ptr;
3230      Elf_Internal_Rela *dst;
3231 {
3232   abort ();
3233 }
3234
3235 #if 0
3236 void
3237 _bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3238      bfd *abfd;
3239      arelent *cache_ptr;
3240      Elf_Internal_Rel *dst;
3241 {
3242   abort ();
3243 }
3244 #endif
This page took 0.198772 seconds and 4 git commands to generate.