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