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