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