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