* elf.c (_bfd_elf_make_section_from_shdr): Don't set lma based on
[deliverable/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 *) malloc (len - 2);
1162 if (alc == NULL)
1163 {
1164 bfd_set_error (bfd_error_no_memory);
1165 return false;
1166 }
1167 strncpy (alc, sec->name, len - 3);
1168 alc[len - 3] = '\0';
1169 s = bfd_get_section_by_name (abfd, alc);
1170 free (alc);
1171 if (s != NULL)
1172 {
1173 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1174
1175 /* This is a .stab section. */
1176 elf_section_data (s)->this_hdr.sh_entsize =
1177 4 + 2 * (bed->s->arch_size / 8);
1178 }
1179 }
1180 break;
1181
1182 case SHT_DYNAMIC:
1183 case SHT_DYNSYM:
1184 /* sh_link is the section header index of the string table
1185 used for the dynamic entries or symbol table. */
1186 s = bfd_get_section_by_name (abfd, ".dynstr");
1187 if (s != NULL)
1188 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1189 break;
1190
1191 case SHT_HASH:
1192 /* sh_link is the section header index of the symbol table
1193 this hash table is for. */
1194 s = bfd_get_section_by_name (abfd, ".dynsym");
1195 if (s != NULL)
1196 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1197 break;
1198 }
1199 }
1200
1201 return true;
1202 }
1203
1204 /* Map symbol from it's internal number to the external number, moving
1205 all local symbols to be at the head of the list. */
1206
1207 static INLINE int
1208 sym_is_global (abfd, sym)
1209 bfd *abfd;
1210 asymbol *sym;
1211 {
1212 /* If the backend has a special mapping, use it. */
1213 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1214 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1215 (abfd, sym));
1216
1217 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1218 || bfd_is_und_section (bfd_get_section (sym))
1219 || bfd_is_com_section (bfd_get_section (sym)));
1220 }
1221
1222 static boolean
1223 elf_map_symbols (abfd)
1224 bfd *abfd;
1225 {
1226 int symcount = bfd_get_symcount (abfd);
1227 asymbol **syms = bfd_get_outsymbols (abfd);
1228 asymbol **sect_syms;
1229 int num_locals = 0;
1230 int num_globals = 0;
1231 int num_locals2 = 0;
1232 int num_globals2 = 0;
1233 int max_index = 0;
1234 int num_sections = 0;
1235 int idx;
1236 asection *asect;
1237 asymbol **new_syms;
1238
1239 #ifdef DEBUG
1240 fprintf (stderr, "elf_map_symbols\n");
1241 fflush (stderr);
1242 #endif
1243
1244 /* Add a section symbol for each BFD section. FIXME: Is this really
1245 necessary? */
1246 for (asect = abfd->sections; asect; asect = asect->next)
1247 {
1248 if (max_index < asect->index)
1249 max_index = asect->index;
1250 }
1251
1252 max_index++;
1253 sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1254 if (sect_syms == NULL)
1255 return false;
1256 elf_section_syms (abfd) = sect_syms;
1257
1258 for (idx = 0; idx < symcount; idx++)
1259 {
1260 if ((syms[idx]->flags & BSF_SECTION_SYM) != 0
1261 && (syms[idx]->value + syms[idx]->section->vma) == 0)
1262 {
1263 asection *sec;
1264
1265 sec = syms[idx]->section;
1266 if (sec->owner != NULL)
1267 {
1268 if (sec->owner != abfd)
1269 {
1270 if (sec->output_offset != 0)
1271 continue;
1272 sec = sec->output_section;
1273 BFD_ASSERT (sec->owner == abfd);
1274 }
1275 sect_syms[sec->index] = syms[idx];
1276 }
1277 }
1278 }
1279
1280 for (asect = abfd->sections; asect; asect = asect->next)
1281 {
1282 asymbol *sym;
1283
1284 if (sect_syms[asect->index] != NULL)
1285 continue;
1286
1287 sym = bfd_make_empty_symbol (abfd);
1288 if (sym == NULL)
1289 return false;
1290 sym->the_bfd = abfd;
1291 sym->name = asect->name;
1292 sym->value = 0;
1293 /* Set the flags to 0 to indicate that this one was newly added. */
1294 sym->flags = 0;
1295 sym->section = asect;
1296 sect_syms[asect->index] = sym;
1297 num_sections++;
1298 #ifdef DEBUG
1299 fprintf (stderr,
1300 "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n",
1301 asect->name, (long) asect->vma, asect->index, (long) asect);
1302 #endif
1303 }
1304
1305 /* Classify all of the symbols. */
1306 for (idx = 0; idx < symcount; idx++)
1307 {
1308 if (!sym_is_global (abfd, syms[idx]))
1309 num_locals++;
1310 else
1311 num_globals++;
1312 }
1313 for (asect = abfd->sections; asect; asect = asect->next)
1314 {
1315 if (sect_syms[asect->index] != NULL
1316 && sect_syms[asect->index]->flags == 0)
1317 {
1318 sect_syms[asect->index]->flags = BSF_SECTION_SYM;
1319 if (!sym_is_global (abfd, sect_syms[asect->index]))
1320 num_locals++;
1321 else
1322 num_globals++;
1323 sect_syms[asect->index]->flags = 0;
1324 }
1325 }
1326
1327 /* Now sort the symbols so the local symbols are first. */
1328 new_syms = ((asymbol **)
1329 bfd_alloc (abfd,
1330 (num_locals + num_globals) * sizeof (asymbol *)));
1331 if (new_syms == NULL)
1332 return false;
1333
1334 for (idx = 0; idx < symcount; idx++)
1335 {
1336 asymbol *sym = syms[idx];
1337 int i;
1338
1339 if (!sym_is_global (abfd, sym))
1340 i = num_locals2++;
1341 else
1342 i = num_locals + num_globals2++;
1343 new_syms[i] = sym;
1344 sym->udata.i = i + 1;
1345 }
1346 for (asect = abfd->sections; asect; asect = asect->next)
1347 {
1348 if (sect_syms[asect->index] != NULL
1349 && sect_syms[asect->index]->flags == 0)
1350 {
1351 asymbol *sym = sect_syms[asect->index];
1352 int i;
1353
1354 sym->flags = BSF_SECTION_SYM;
1355 if (!sym_is_global (abfd, sym))
1356 i = num_locals2++;
1357 else
1358 i = num_locals + num_globals2++;
1359 new_syms[i] = sym;
1360 sym->udata.i = i + 1;
1361 }
1362 }
1363
1364 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
1365
1366 elf_num_locals (abfd) = num_locals;
1367 elf_num_globals (abfd) = num_globals;
1368 return true;
1369 }
1370
1371 /* Align to the maximum file alignment that could be required for any
1372 ELF data structure. */
1373
1374 static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
1375 static INLINE file_ptr
1376 align_file_position (off, align)
1377 file_ptr off;
1378 int align;
1379 {
1380 return (off + align - 1) & ~(align - 1);
1381 }
1382
1383 /* Assign a file position to a section, optionally aligning to the
1384 required section alignment. */
1385
1386 INLINE file_ptr
1387 _bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
1388 Elf_Internal_Shdr *i_shdrp;
1389 file_ptr offset;
1390 boolean align;
1391 {
1392 if (align)
1393 {
1394 unsigned int al;
1395
1396 al = i_shdrp->sh_addralign;
1397 if (al > 1)
1398 offset = BFD_ALIGN (offset, al);
1399 }
1400 i_shdrp->sh_offset = offset;
1401 if (i_shdrp->bfd_section != NULL)
1402 i_shdrp->bfd_section->filepos = offset;
1403 if (i_shdrp->sh_type != SHT_NOBITS)
1404 offset += i_shdrp->sh_size;
1405 return offset;
1406 }
1407
1408 /* Compute the file positions we are going to put the sections at, and
1409 otherwise prepare to begin writing out the ELF file. If LINK_INFO
1410 is not NULL, this is being called by the ELF backend linker. */
1411
1412 boolean
1413 _bfd_elf_compute_section_file_positions (abfd, link_info)
1414 bfd *abfd;
1415 struct bfd_link_info *link_info;
1416 {
1417 struct elf_backend_data *bed = get_elf_backend_data (abfd);
1418 boolean failed;
1419 struct bfd_strtab_hash *strtab;
1420 Elf_Internal_Shdr *shstrtab_hdr;
1421
1422 if (abfd->output_has_begun)
1423 return true;
1424
1425 /* Do any elf backend specific processing first. */
1426 if (bed->elf_backend_begin_write_processing)
1427 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
1428
1429 if (! prep_headers (abfd))
1430 return false;
1431
1432 failed = false;
1433 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
1434 if (failed)
1435 return false;
1436
1437 if (!assign_section_numbers (abfd))
1438 return false;
1439
1440 /* The backend linker builds symbol table information itself. */
1441 if (link_info == NULL && abfd->symcount > 0)
1442 {
1443 if (! swap_out_syms (abfd, &strtab))
1444 return false;
1445 }
1446
1447 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
1448 /* sh_name was set in prep_headers. */
1449 shstrtab_hdr->sh_type = SHT_STRTAB;
1450 shstrtab_hdr->sh_flags = 0;
1451 shstrtab_hdr->sh_addr = 0;
1452 shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1453 shstrtab_hdr->sh_entsize = 0;
1454 shstrtab_hdr->sh_link = 0;
1455 shstrtab_hdr->sh_info = 0;
1456 /* sh_offset is set in assign_file_positions_except_relocs. */
1457 shstrtab_hdr->sh_addralign = 1;
1458
1459 if (!assign_file_positions_except_relocs (abfd))
1460 return false;
1461
1462 if (link_info == NULL && abfd->symcount > 0)
1463 {
1464 file_ptr off;
1465 Elf_Internal_Shdr *hdr;
1466
1467 off = elf_tdata (abfd)->next_file_pos;
1468
1469 hdr = &elf_tdata (abfd)->symtab_hdr;
1470 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1471
1472 hdr = &elf_tdata (abfd)->strtab_hdr;
1473 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
1474
1475 elf_tdata (abfd)->next_file_pos = off;
1476
1477 /* Now that we know where the .strtab section goes, write it
1478 out. */
1479 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
1480 || ! _bfd_stringtab_emit (abfd, strtab))
1481 return false;
1482 _bfd_stringtab_free (strtab);
1483 }
1484
1485 abfd->output_has_begun = true;
1486
1487 return true;
1488 }
1489
1490 /* Create a mapping from a set of sections to a program segment. */
1491
1492 static INLINE struct elf_segment_map *
1493 make_mapping (abfd, sections, from, to)
1494 bfd *abfd;
1495 asection **sections;
1496 unsigned int from;
1497 unsigned int to;
1498 {
1499 struct elf_segment_map *m;
1500 unsigned int i;
1501 asection **hdrpp;
1502
1503 m = ((struct elf_segment_map *)
1504 bfd_zalloc (abfd,
1505 (sizeof (struct elf_segment_map)
1506 + (to - from - 1) * sizeof (asection *))));
1507 if (m == NULL)
1508 return NULL;
1509 m->next = NULL;
1510 m->p_type = PT_LOAD;
1511 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
1512 m->sections[i - from] = *hdrpp;
1513 m->count = to - from;
1514
1515 if (from == 0)
1516 {
1517 /* Include the headers in the first PT_LOAD segment. */
1518 m->includes_filehdr = 1;
1519 m->includes_phdrs = 1;
1520 }
1521
1522 return m;
1523 }
1524
1525 /* Set up a mapping from BFD sections to program segments. */
1526
1527 static boolean
1528 map_sections_to_segments (abfd)
1529 bfd *abfd;
1530 {
1531 asection **sections = NULL;
1532 asection *s;
1533 unsigned int i;
1534 unsigned int count;
1535 struct elf_segment_map *mfirst;
1536 struct elf_segment_map **pm;
1537 struct elf_segment_map *m;
1538 asection *last_hdr;
1539 unsigned int phdr_index;
1540 bfd_vma maxpagesize;
1541 asection **hdrpp;
1542
1543 if (elf_tdata (abfd)->segment_map != NULL)
1544 return true;
1545
1546 if (bfd_count_sections (abfd) == 0)
1547 return true;
1548
1549 /* Select the allocated sections, and sort them. */
1550
1551 sections = (asection **) malloc (bfd_count_sections (abfd)
1552 * sizeof (asection *));
1553 if (sections == NULL)
1554 {
1555 bfd_set_error (bfd_error_no_memory);
1556 goto error_return;
1557 }
1558
1559 i = 0;
1560 for (s = abfd->sections; s != NULL; s = s->next)
1561 {
1562 if ((s->flags & SEC_ALLOC) != 0)
1563 {
1564 sections[i] = s;
1565 ++i;
1566 }
1567 }
1568 BFD_ASSERT (i <= bfd_count_sections (abfd));
1569 count = i;
1570
1571 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
1572
1573 /* Build the mapping. */
1574
1575 mfirst = NULL;
1576 pm = &mfirst;
1577
1578 /* If we have a .interp section, then create a PT_PHDR segment for
1579 the program headers and a PT_INTERP segment for the .interp
1580 section. */
1581 s = bfd_get_section_by_name (abfd, ".interp");
1582 if (s != NULL && (s->flags & SEC_LOAD) != 0)
1583 {
1584 m = ((struct elf_segment_map *)
1585 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1586 if (m == NULL)
1587 goto error_return;
1588 m->next = NULL;
1589 m->p_type = PT_PHDR;
1590 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
1591 m->p_flags = PF_R | PF_X;
1592 m->p_flags_valid = 1;
1593 m->includes_phdrs = 1;
1594
1595 *pm = m;
1596 pm = &m->next;
1597
1598 m = ((struct elf_segment_map *)
1599 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1600 if (m == NULL)
1601 goto error_return;
1602 m->next = NULL;
1603 m->p_type = PT_INTERP;
1604 m->count = 1;
1605 m->sections[0] = s;
1606
1607 *pm = m;
1608 pm = &m->next;
1609 }
1610
1611 /* Look through the sections. We put sections in the same program
1612 segment when the start of the second section can be placed within
1613 a few bytes of the end of the first section. */
1614 last_hdr = NULL;
1615 phdr_index = 0;
1616 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
1617 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
1618 {
1619 asection *hdr;
1620
1621 hdr = *hdrpp;
1622
1623 /* See if this section and the last one will fit in the same
1624 segment. */
1625 if (last_hdr == NULL
1626 || ((BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
1627 >= hdr->lma)
1628 && ((last_hdr->flags & SEC_LOAD) != 0
1629 || (hdr->flags & SEC_LOAD) == 0)))
1630 {
1631 last_hdr = hdr;
1632 continue;
1633 }
1634
1635 /* This section won't fit in the program segment. We must
1636 create a new program header holding all the sections from
1637 phdr_index until hdr. */
1638
1639 m = make_mapping (abfd, sections, phdr_index, i);
1640 if (m == NULL)
1641 goto error_return;
1642
1643 *pm = m;
1644 pm = &m->next;
1645
1646 last_hdr = hdr;
1647 phdr_index = i;
1648 }
1649
1650 /* Create a final PT_LOAD program segment. */
1651 if (last_hdr != NULL)
1652 {
1653 m = make_mapping (abfd, sections, phdr_index, i);
1654 if (m == NULL)
1655 goto error_return;
1656
1657 *pm = m;
1658 pm = &m->next;
1659 }
1660
1661 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
1662 s = bfd_get_section_by_name (abfd, ".dynamic");
1663 if (s != NULL && (s->flags & SEC_LOAD) != 0)
1664 {
1665 m = ((struct elf_segment_map *)
1666 bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
1667 if (m == NULL)
1668 goto error_return;
1669 m->next = NULL;
1670 m->p_type = PT_DYNAMIC;
1671 m->count = 1;
1672 m->sections[0] = s;
1673
1674 *pm = m;
1675 pm = &m->next;
1676 }
1677
1678 free (sections);
1679 sections = NULL;
1680
1681 elf_tdata (abfd)->segment_map = mfirst;
1682 return true;
1683
1684 error_return:
1685 if (sections != NULL)
1686 free (sections);
1687 return false;
1688 }
1689
1690 /* Sort sections by VMA. */
1691
1692 static int
1693 elf_sort_sections (arg1, arg2)
1694 const PTR arg1;
1695 const PTR arg2;
1696 {
1697 const asection *sec1 = *(const asection **) arg1;
1698 const asection *sec2 = *(const asection **) arg2;
1699
1700 if (sec1->vma < sec2->vma)
1701 return -1;
1702 else if (sec1->vma > sec2->vma)
1703 return 1;
1704
1705 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
1706
1707 #define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
1708
1709 if (TOEND (sec1))
1710 if (TOEND (sec2))
1711 return sec1->target_index - sec2->target_index;
1712 else
1713 return 1;
1714
1715 if (TOEND (sec2))
1716 return -1;
1717
1718 #undef TOEND
1719
1720 /* Sort by size, to put zero sized sections before others at the
1721 same address. */
1722
1723 if (sec1->_raw_size < sec2->_raw_size)
1724 return -1;
1725 if (sec1->_raw_size > sec2->_raw_size)
1726 return 1;
1727
1728 return sec1->target_index - sec2->target_index;
1729 }
1730
1731 /* Assign file positions to the sections based on the mapping from
1732 sections to segments. This function also sets up some fields in
1733 the file header, and writes out the program headers. */
1734
1735 static boolean
1736 assign_file_positions_for_segments (abfd)
1737 bfd *abfd;
1738 {
1739 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1740 unsigned int count;
1741 struct elf_segment_map *m;
1742 unsigned int alloc;
1743 Elf_Internal_Phdr *phdrs;
1744 file_ptr off;
1745 bfd_vma filehdr_vaddr, filehdr_paddr;
1746 bfd_vma phdrs_vaddr, phdrs_paddr;
1747 Elf_Internal_Phdr *p;
1748
1749 if (elf_tdata (abfd)->segment_map == NULL)
1750 {
1751 if (! map_sections_to_segments (abfd))
1752 return false;
1753 }
1754
1755 count = 0;
1756 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
1757 ++count;
1758
1759 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
1760 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
1761 elf_elfheader (abfd)->e_phnum = count;
1762
1763 if (count == 0)
1764 return true;
1765
1766 /* Let the backend count up any program headers it might need. */
1767 if (bed->elf_backend_create_program_headers)
1768 count = ((*bed->elf_backend_create_program_headers)
1769 (abfd, (Elf_Internal_Phdr *) NULL, count));
1770
1771 /* If we already counted the number of program segments, make sure
1772 that we allocated enough space. This happens when SIZEOF_HEADERS
1773 is used in a linker script. */
1774 alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
1775 if (alloc != 0 && count > alloc)
1776 {
1777 ((*_bfd_error_handler)
1778 ("%s: Not enough room for program headers (allocated %u, need %u)",
1779 bfd_get_filename (abfd), alloc, count));
1780 bfd_set_error (bfd_error_bad_value);
1781 return false;
1782 }
1783
1784 if (alloc == 0)
1785 alloc = count;
1786
1787 phdrs = ((Elf_Internal_Phdr *)
1788 bfd_alloc (abfd, alloc * sizeof (Elf_Internal_Phdr)));
1789 if (phdrs == NULL)
1790 return false;
1791
1792 off = bed->s->sizeof_ehdr;
1793 off += alloc * bed->s->sizeof_phdr;
1794
1795 filehdr_vaddr = 0;
1796 filehdr_paddr = 0;
1797 phdrs_vaddr = 0;
1798 phdrs_paddr = 0;
1799 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
1800 m != NULL;
1801 m = m->next, p++)
1802 {
1803 unsigned int i;
1804 asection **secpp;
1805
1806 p->p_type = m->p_type;
1807
1808 if (m->p_flags_valid)
1809 p->p_flags = m->p_flags;
1810
1811 if (p->p_type == PT_LOAD && m->count > 0)
1812 off += (m->sections[0]->vma - off) % bed->maxpagesize;
1813
1814 if (m->count == 0)
1815 p->p_vaddr = 0;
1816 else
1817 p->p_vaddr = m->sections[0]->vma;
1818
1819 if (m->p_paddr_valid)
1820 p->p_paddr = m->p_paddr;
1821 else if (m->count == 0)
1822 p->p_paddr = 0;
1823 else
1824 p->p_paddr = m->sections[0]->lma;
1825
1826 if (p->p_type == PT_LOAD)
1827 p->p_align = bed->maxpagesize;
1828 else if (m->count == 0)
1829 p->p_align = bed->s->file_align;
1830 else
1831 p->p_align = 0;
1832
1833 p->p_offset = 0;
1834 p->p_filesz = 0;
1835 p->p_memsz = 0;
1836
1837 if (m->includes_filehdr)
1838 {
1839 p->p_offset = 0;
1840 p->p_filesz = bed->s->sizeof_ehdr;
1841 p->p_memsz = bed->s->sizeof_ehdr;
1842 if (m->count > 0)
1843 {
1844 BFD_ASSERT (p->p_type == PT_LOAD);
1845 p->p_vaddr -= off;
1846 if (! m->p_paddr_valid)
1847 p->p_paddr -= off;
1848 }
1849 if (p->p_type == PT_LOAD)
1850 {
1851 filehdr_vaddr = p->p_vaddr;
1852 filehdr_paddr = p->p_paddr;
1853 }
1854 }
1855
1856 if (m->includes_phdrs)
1857 {
1858 if (m->includes_filehdr)
1859 {
1860 if (p->p_type == PT_LOAD)
1861 {
1862 phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
1863 phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
1864 }
1865 }
1866 else
1867 {
1868 p->p_offset = bed->s->sizeof_ehdr;
1869 if (m->count > 0)
1870 {
1871 BFD_ASSERT (p->p_type == PT_LOAD);
1872 p->p_vaddr -= off - p->p_offset;
1873 if (! m->p_paddr_valid)
1874 p->p_paddr -= off - p->p_offset;
1875 }
1876 if (p->p_type == PT_LOAD)
1877 {
1878 phdrs_vaddr = p->p_vaddr;
1879 phdrs_paddr = p->p_paddr;
1880 }
1881 }
1882 p->p_filesz += alloc * bed->s->sizeof_phdr;
1883 p->p_memsz += alloc * bed->s->sizeof_phdr;
1884 }
1885
1886 if (p->p_type == PT_LOAD)
1887 {
1888 if (! m->includes_filehdr && ! m->includes_phdrs)
1889 p->p_offset = off;
1890 else
1891 {
1892 file_ptr adjust;
1893
1894 adjust = off - (p->p_offset + p->p_filesz);
1895 p->p_filesz += adjust;
1896 p->p_memsz += adjust;
1897 }
1898 }
1899
1900 if (! m->p_flags_valid)
1901 p->p_flags = PF_R;
1902 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
1903 {
1904 asection *sec;
1905 flagword flags;
1906 bfd_size_type align;
1907
1908 sec = *secpp;
1909 flags = sec->flags;
1910
1911 if (p->p_type == PT_LOAD)
1912 {
1913 bfd_vma adjust;
1914
1915 /* The section VMA must equal the file position modulo
1916 the page size. */
1917 adjust = (sec->vma - off) % bed->maxpagesize;
1918 if (adjust != 0)
1919 {
1920 if (i == 0)
1921 abort ();
1922 p->p_memsz += adjust;
1923 if ((flags & SEC_LOAD) != 0)
1924 p->p_filesz += adjust;
1925 off += adjust;
1926 }
1927
1928 sec->filepos = off;
1929
1930 if ((flags & SEC_LOAD) != 0)
1931 off += sec->_raw_size;
1932 }
1933
1934 p->p_memsz += sec->_raw_size;
1935
1936 if ((flags & SEC_LOAD) != 0)
1937 p->p_filesz += sec->_raw_size;
1938
1939 align = 1 << bfd_get_section_alignment (abfd, sec);
1940 if (align > p->p_align)
1941 p->p_align = align;
1942
1943 if (! m->p_flags_valid)
1944 {
1945 if ((flags & SEC_CODE) != 0)
1946 p->p_flags |= PF_X;
1947 if ((flags & SEC_READONLY) == 0)
1948 p->p_flags |= PF_W;
1949 }
1950 }
1951 }
1952
1953 /* Now that we have set the section file positions, we can set up
1954 the file positions for the non PT_LOAD segments. */
1955 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
1956 m != NULL;
1957 m = m->next, p++)
1958 {
1959 if (p->p_type != PT_LOAD && m->count > 0)
1960 {
1961 BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
1962 p->p_offset = m->sections[0]->filepos;
1963 }
1964 if (m->count == 0)
1965 {
1966 if (m->includes_filehdr)
1967 {
1968 p->p_vaddr = filehdr_vaddr;
1969 if (! m->p_paddr_valid)
1970 p->p_paddr = filehdr_paddr;
1971 }
1972 else if (m->includes_phdrs)
1973 {
1974 p->p_vaddr = phdrs_vaddr;
1975 if (! m->p_paddr_valid)
1976 p->p_paddr = phdrs_paddr;
1977 }
1978 }
1979 }
1980
1981 /* Let the backend set up any program headers it might need. */
1982 if (bed->elf_backend_create_program_headers)
1983 count = ((*bed->elf_backend_create_program_headers)
1984 (abfd, phdrs, count));
1985
1986 /* Clear out any program headers we allocated but did not use. */
1987 for (; count < alloc; count++, p++)
1988 {
1989 memset (p, 0, sizeof *p);
1990 p->p_type = PT_NULL;
1991 }
1992
1993 elf_tdata (abfd)->phdr = phdrs;
1994
1995 elf_tdata (abfd)->next_file_pos = off;
1996
1997 /* Write out the program headers. */
1998 if (bfd_seek (abfd, bed->s->sizeof_ehdr, SEEK_SET) != 0
1999 || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
2000 return false;
2001
2002 return true;
2003 }
2004
2005 /* Get the size of the program header.
2006
2007 If this is called by the linker before any of the section VMA's are set, it
2008 can't calculate the correct value for a strange memory layout. This only
2009 happens when SIZEOF_HEADERS is used in a linker script. In this case,
2010 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
2011 data segment (exclusive of .interp and .dynamic).
2012
2013 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
2014 will be two segments. */
2015
2016 static bfd_size_type
2017 get_program_header_size (abfd)
2018 bfd *abfd;
2019 {
2020 size_t segs;
2021 asection *s;
2022 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2023
2024 /* We can't return a different result each time we're called. */
2025 if (elf_tdata (abfd)->program_header_size != 0)
2026 return elf_tdata (abfd)->program_header_size;
2027
2028 /* Assume we will need exactly two PT_LOAD segments: one for text
2029 and one for data. */
2030 segs = 2;
2031
2032 s = bfd_get_section_by_name (abfd, ".interp");
2033 if (s != NULL && (s->flags & SEC_LOAD) != 0)
2034 {
2035 /* If we have a loadable interpreter section, we need a
2036 PT_INTERP segment. In this case, assume we also need a
2037 PT_PHDR segment, although that may not be true for all
2038 targets. */
2039 segs += 2;
2040 }
2041
2042 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
2043 {
2044 /* We need a PT_DYNAMIC segment. */
2045 ++segs;
2046 }
2047
2048 /* Let the backend count up any program headers it might need. */
2049 if (bed->elf_backend_create_program_headers)
2050 segs = ((*bed->elf_backend_create_program_headers)
2051 (abfd, (Elf_Internal_Phdr *) NULL, segs));
2052
2053 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
2054 return elf_tdata (abfd)->program_header_size;
2055 }
2056
2057 /* Work out the file positions of all the sections. This is called by
2058 _bfd_elf_compute_section_file_positions. All the section sizes and
2059 VMAs must be known before this is called.
2060
2061 We do not consider reloc sections at this point, unless they form
2062 part of the loadable image. Reloc sections are assigned file
2063 positions in assign_file_positions_for_relocs, which is called by
2064 write_object_contents and final_link.
2065
2066 We also don't set the positions of the .symtab and .strtab here. */
2067
2068 static boolean
2069 assign_file_positions_except_relocs (abfd)
2070 bfd *abfd;
2071 {
2072 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
2073 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
2074 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
2075 file_ptr off;
2076 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2077
2078 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2079 {
2080 Elf_Internal_Shdr **hdrpp;
2081 unsigned int i;
2082
2083 /* Start after the ELF header. */
2084 off = i_ehdrp->e_ehsize;
2085
2086 /* We are not creating an executable, which means that we are
2087 not creating a program header, and that the actual order of
2088 the sections in the file is unimportant. */
2089 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2090 {
2091 Elf_Internal_Shdr *hdr;
2092
2093 hdr = *hdrpp;
2094 if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
2095 {
2096 hdr->sh_offset = -1;
2097 continue;
2098 }
2099 if (i == tdata->symtab_section
2100 || i == tdata->strtab_section)
2101 {
2102 hdr->sh_offset = -1;
2103 continue;
2104 }
2105
2106 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2107 }
2108 }
2109 else
2110 {
2111 unsigned int i;
2112 Elf_Internal_Shdr **hdrpp;
2113
2114 /* Assign file positions for the loaded sections based on the
2115 assignment of sections to segments. */
2116 if (! assign_file_positions_for_segments (abfd))
2117 return false;
2118
2119 /* Assign file positions for the other sections. */
2120
2121 off = elf_tdata (abfd)->next_file_pos;
2122 for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
2123 {
2124 Elf_Internal_Shdr *hdr;
2125
2126 hdr = *hdrpp;
2127 if (hdr->bfd_section != NULL
2128 && hdr->bfd_section->filepos != 0)
2129 hdr->sh_offset = hdr->bfd_section->filepos;
2130 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
2131 {
2132 ((*_bfd_error_handler)
2133 ("%s: warning: allocated section `%s' not in segment",
2134 bfd_get_filename (abfd),
2135 (hdr->bfd_section == NULL
2136 ? "*unknown*"
2137 : hdr->bfd_section->name)));
2138 off += (hdr->sh_addr - off) % bed->maxpagesize;
2139 off = _bfd_elf_assign_file_position_for_section (hdr, off,
2140 false);
2141 }
2142 else if (hdr->sh_type == SHT_REL
2143 || hdr->sh_type == SHT_RELA
2144 || hdr == i_shdrpp[tdata->symtab_section]
2145 || hdr == i_shdrpp[tdata->strtab_section])
2146 hdr->sh_offset = -1;
2147 else
2148 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2149 }
2150 }
2151
2152 /* Place the section headers. */
2153 off = align_file_position (off, bed->s->file_align);
2154 i_ehdrp->e_shoff = off;
2155 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
2156
2157 elf_tdata (abfd)->next_file_pos = off;
2158
2159 return true;
2160 }
2161
2162 static boolean
2163 prep_headers (abfd)
2164 bfd *abfd;
2165 {
2166 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
2167 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
2168 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2169 int count;
2170 struct bfd_strtab_hash *shstrtab;
2171 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2172
2173 i_ehdrp = elf_elfheader (abfd);
2174 i_shdrp = elf_elfsections (abfd);
2175
2176 shstrtab = _bfd_elf_stringtab_init ();
2177 if (shstrtab == NULL)
2178 return false;
2179
2180 elf_shstrtab (abfd) = shstrtab;
2181
2182 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
2183 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
2184 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
2185 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
2186
2187 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
2188 i_ehdrp->e_ident[EI_DATA] =
2189 abfd->xvec->byteorder_big_p ? ELFDATA2MSB : ELFDATA2LSB;
2190 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
2191
2192 for (count = EI_PAD; count < EI_NIDENT; count++)
2193 i_ehdrp->e_ident[count] = 0;
2194
2195 if ((abfd->flags & DYNAMIC) != 0)
2196 i_ehdrp->e_type = ET_DYN;
2197 else if ((abfd->flags & EXEC_P) != 0)
2198 i_ehdrp->e_type = ET_EXEC;
2199 else
2200 i_ehdrp->e_type = ET_REL;
2201
2202 switch (bfd_get_arch (abfd))
2203 {
2204 case bfd_arch_unknown:
2205 i_ehdrp->e_machine = EM_NONE;
2206 break;
2207 case bfd_arch_sparc:
2208 if (bed->s->arch_size == 64)
2209 i_ehdrp->e_machine = EM_SPARC64;
2210 else
2211 i_ehdrp->e_machine = EM_SPARC;
2212 break;
2213 case bfd_arch_i386:
2214 i_ehdrp->e_machine = EM_386;
2215 break;
2216 case bfd_arch_m68k:
2217 i_ehdrp->e_machine = EM_68K;
2218 break;
2219 case bfd_arch_m88k:
2220 i_ehdrp->e_machine = EM_88K;
2221 break;
2222 case bfd_arch_i860:
2223 i_ehdrp->e_machine = EM_860;
2224 break;
2225 case bfd_arch_mips: /* MIPS Rxxxx */
2226 i_ehdrp->e_machine = EM_MIPS; /* only MIPS R3000 */
2227 break;
2228 case bfd_arch_hppa:
2229 i_ehdrp->e_machine = EM_PARISC;
2230 break;
2231 case bfd_arch_powerpc:
2232 i_ehdrp->e_machine = EM_PPC;
2233 break;
2234 /* start-sanitize-arc */
2235 case bfd_arch_arc:
2236 i_ehdrp->e_machine = EM_CYGNUS_ARC;
2237 break;
2238 /* end-sanitize-arc */
2239 /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
2240 default:
2241 i_ehdrp->e_machine = EM_NONE;
2242 }
2243 i_ehdrp->e_version = bed->s->ev_current;
2244 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
2245
2246 /* no program header, for now. */
2247 i_ehdrp->e_phoff = 0;
2248 i_ehdrp->e_phentsize = 0;
2249 i_ehdrp->e_phnum = 0;
2250
2251 /* each bfd section is section header entry */
2252 i_ehdrp->e_entry = bfd_get_start_address (abfd);
2253 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
2254
2255 /* if we're building an executable, we'll need a program header table */
2256 if (abfd->flags & EXEC_P)
2257 {
2258 /* it all happens later */
2259 #if 0
2260 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
2261
2262 /* elf_build_phdrs() returns a (NULL-terminated) array of
2263 Elf_Internal_Phdrs */
2264 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
2265 i_ehdrp->e_phoff = outbase;
2266 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
2267 #endif
2268 }
2269 else
2270 {
2271 i_ehdrp->e_phentsize = 0;
2272 i_phdrp = 0;
2273 i_ehdrp->e_phoff = 0;
2274 }
2275
2276 elf_tdata (abfd)->symtab_hdr.sh_name =
2277 (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
2278 elf_tdata (abfd)->strtab_hdr.sh_name =
2279 (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
2280 elf_tdata (abfd)->shstrtab_hdr.sh_name =
2281 (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
2282 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2283 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
2284 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
2285 return false;
2286
2287 return true;
2288 }
2289
2290 /* Assign file positions for all the reloc sections which are not part
2291 of the loadable file image. */
2292
2293 void
2294 _bfd_elf_assign_file_positions_for_relocs (abfd)
2295 bfd *abfd;
2296 {
2297 file_ptr off;
2298 unsigned int i;
2299 Elf_Internal_Shdr **shdrpp;
2300
2301 off = elf_tdata (abfd)->next_file_pos;
2302
2303 for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
2304 i < elf_elfheader (abfd)->e_shnum;
2305 i++, shdrpp++)
2306 {
2307 Elf_Internal_Shdr *shdrp;
2308
2309 shdrp = *shdrpp;
2310 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
2311 && shdrp->sh_offset == -1)
2312 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
2313 }
2314
2315 elf_tdata (abfd)->next_file_pos = off;
2316 }
2317
2318 boolean
2319 _bfd_elf_write_object_contents (abfd)
2320 bfd *abfd;
2321 {
2322 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2323 Elf_Internal_Ehdr *i_ehdrp;
2324 Elf_Internal_Shdr **i_shdrp;
2325 boolean failed;
2326 unsigned int count;
2327
2328 if (! abfd->output_has_begun
2329 && ! _bfd_elf_compute_section_file_positions (abfd,
2330 (struct bfd_link_info *) NULL))
2331 return false;
2332
2333 i_shdrp = elf_elfsections (abfd);
2334 i_ehdrp = elf_elfheader (abfd);
2335
2336 failed = false;
2337 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
2338 if (failed)
2339 return false;
2340 _bfd_elf_assign_file_positions_for_relocs (abfd);
2341
2342 /* After writing the headers, we need to write the sections too... */
2343 for (count = 1; count < i_ehdrp->e_shnum; count++)
2344 {
2345 if (bed->elf_backend_section_processing)
2346 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
2347 if (i_shdrp[count]->contents)
2348 {
2349 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
2350 || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
2351 1, abfd)
2352 != i_shdrp[count]->sh_size))
2353 return false;
2354 }
2355 }
2356
2357 /* Write out the section header names. */
2358 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
2359 || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
2360 return false;
2361
2362 if (bed->elf_backend_final_write_processing)
2363 (*bed->elf_backend_final_write_processing) (abfd,
2364 elf_tdata (abfd)->linker);
2365
2366 return bed->s->write_shdrs_and_ehdr (abfd);
2367 }
2368
2369 /* given a section, search the header to find them... */
2370 int
2371 _bfd_elf_section_from_bfd_section (abfd, asect)
2372 bfd *abfd;
2373 struct sec *asect;
2374 {
2375 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2376 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
2377 int index;
2378 Elf_Internal_Shdr *hdr;
2379 int maxindex = elf_elfheader (abfd)->e_shnum;
2380
2381 for (index = 0; index < maxindex; index++)
2382 {
2383 hdr = i_shdrp[index];
2384 if (hdr->bfd_section == asect)
2385 return index;
2386 }
2387
2388 if (bed->elf_backend_section_from_bfd_section)
2389 {
2390 for (index = 0; index < maxindex; index++)
2391 {
2392 int retval;
2393
2394 hdr = i_shdrp[index];
2395 retval = index;
2396 if ((*bed->elf_backend_section_from_bfd_section)
2397 (abfd, hdr, asect, &retval))
2398 return retval;
2399 }
2400 }
2401
2402 if (bfd_is_abs_section (asect))
2403 return SHN_ABS;
2404 if (bfd_is_com_section (asect))
2405 return SHN_COMMON;
2406 if (bfd_is_und_section (asect))
2407 return SHN_UNDEF;
2408
2409 return -1;
2410 }
2411
2412 /* given a symbol, return the bfd index for that symbol. */
2413 int
2414 _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
2415 bfd *abfd;
2416 struct symbol_cache_entry **asym_ptr_ptr;
2417 {
2418 struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;
2419 int idx;
2420 flagword flags = asym_ptr->flags;
2421
2422 /* When gas creates relocations against local labels, it creates its
2423 own symbol for the section, but does put the symbol into the
2424 symbol chain, so udata is 0. When the linker is generating
2425 relocatable output, this section symbol may be for one of the
2426 input sections rather than the output section. */
2427 if (asym_ptr->udata.i == 0
2428 && (flags & BSF_SECTION_SYM)
2429 && asym_ptr->section)
2430 {
2431 int indx;
2432
2433 if (asym_ptr->section->output_section != NULL)
2434 indx = asym_ptr->section->output_section->index;
2435 else
2436 indx = asym_ptr->section->index;
2437 if (elf_section_syms (abfd)[indx])
2438 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
2439 }
2440
2441 idx = asym_ptr->udata.i;
2442 BFD_ASSERT (idx != 0);
2443
2444 #if DEBUG & 4
2445 {
2446 fprintf (stderr,
2447 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
2448 (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
2449 fflush (stderr);
2450 }
2451 #endif
2452
2453 return idx;
2454 }
2455
2456 /* Copy private BFD data. This copies any program header information. */
2457
2458 static boolean
2459 copy_private_bfd_data (ibfd, obfd)
2460 bfd *ibfd;
2461 bfd *obfd;
2462 {
2463 Elf_Internal_Ehdr *iehdr;
2464 struct elf_segment_map *mfirst;
2465 struct elf_segment_map **pm;
2466 Elf_Internal_Phdr *p;
2467 unsigned int i, c;
2468
2469 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2470 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2471 return true;
2472
2473 if (elf_tdata (ibfd)->phdr == NULL)
2474 return true;
2475
2476 iehdr = elf_elfheader (ibfd);
2477
2478 mfirst = NULL;
2479 pm = &mfirst;
2480
2481 c = elf_elfheader (ibfd)->e_phnum;
2482 for (i = 0, p = elf_tdata (ibfd)->phdr; i < c; i++, p++)
2483 {
2484 unsigned int csecs;
2485 asection *s;
2486 struct elf_segment_map *m;
2487 unsigned int isec;
2488
2489 csecs = 0;
2490
2491 /* The complicated case when p_vaddr is 0 is to handle the
2492 Solaris linker, which generates a PT_INTERP section with
2493 p_vaddr and p_memsz set to 0. */
2494 for (s = ibfd->sections; s != NULL; s = s->next)
2495 if (((s->vma >= p->p_vaddr
2496 && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
2497 || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
2498 || (p->p_vaddr == 0
2499 && p->p_filesz > 0
2500 && (s->flags & SEC_HAS_CONTENTS) != 0
2501 && (bfd_vma) s->filepos >= p->p_offset
2502 && ((bfd_vma) s->filepos + s->_raw_size
2503 <= p->p_offset + p->p_filesz)))
2504 && s->output_section != NULL)
2505 ++csecs;
2506
2507 m = ((struct elf_segment_map *)
2508 bfd_alloc (obfd,
2509 (sizeof (struct elf_segment_map)
2510 + (csecs - 1) * sizeof (asection *))));
2511 if (m == NULL)
2512 return false;
2513
2514 m->next = NULL;
2515 m->p_type = p->p_type;
2516 m->p_flags = p->p_flags;
2517 m->p_flags_valid = 1;
2518 m->p_paddr = p->p_paddr;
2519 m->p_paddr_valid = 1;
2520
2521 m->includes_filehdr = (p->p_offset == 0
2522 && p->p_filesz >= iehdr->e_ehsize);
2523
2524 m->includes_phdrs = (p->p_offset <= (bfd_vma) iehdr->e_phoff
2525 && (p->p_offset + p->p_filesz
2526 >= ((bfd_vma) iehdr->e_phoff
2527 + iehdr->e_phnum * iehdr->e_phentsize)));
2528
2529 isec = 0;
2530 for (s = ibfd->sections; s != NULL; s = s->next)
2531 {
2532 if (((s->vma >= p->p_vaddr
2533 && (s->vma + s->_raw_size <= p->p_vaddr + p->p_memsz
2534 || s->vma + s->_raw_size <= p->p_vaddr + p->p_filesz))
2535 || (p->p_vaddr == 0
2536 && p->p_filesz > 0
2537 && (s->flags & SEC_HAS_CONTENTS) != 0
2538 && (bfd_vma) s->filepos >= p->p_offset
2539 && ((bfd_vma) s->filepos + s->_raw_size
2540 <= p->p_offset + p->p_filesz)))
2541 && s->output_section != NULL)
2542 {
2543 m->sections[isec] = s->output_section;
2544 ++isec;
2545 }
2546 }
2547 BFD_ASSERT (isec == csecs);
2548 if (csecs > 0)
2549 qsort (m->sections, (size_t) csecs, sizeof (asection *),
2550 elf_sort_sections);
2551 m->count = csecs;
2552
2553 *pm = m;
2554 pm = &m->next;
2555 }
2556
2557 elf_tdata (obfd)->segment_map = mfirst;
2558
2559 return true;
2560 }
2561
2562 /* Copy private section information. This copies over the entsize
2563 field, and sometimes the info field. */
2564
2565 boolean
2566 _bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
2567 bfd *ibfd;
2568 asection *isec;
2569 bfd *obfd;
2570 asection *osec;
2571 {
2572 Elf_Internal_Shdr *ihdr, *ohdr;
2573
2574 if (ibfd->xvec->flavour != bfd_target_elf_flavour
2575 || obfd->xvec->flavour != bfd_target_elf_flavour)
2576 return true;
2577
2578 /* Copy over private BFD data if it has not already been copied.
2579 This must be done here, rather than in the copy_private_bfd_data
2580 entry point, because the latter is called after the section
2581 contents have been set, which means that the program headers have
2582 already been worked out. */
2583 if (elf_tdata (obfd)->segment_map == NULL
2584 && elf_tdata (ibfd)->phdr != NULL)
2585 {
2586 asection *s;
2587
2588 /* Only set up the segments when all the sections have been set
2589 up. */
2590 for (s = ibfd->sections; s != NULL; s = s->next)
2591 if (s->output_section == NULL)
2592 break;
2593 if (s == NULL)
2594 {
2595 if (! copy_private_bfd_data (ibfd, obfd))
2596 return false;
2597 }
2598 }
2599
2600 ihdr = &elf_section_data (isec)->this_hdr;
2601 ohdr = &elf_section_data (osec)->this_hdr;
2602
2603 ohdr->sh_entsize = ihdr->sh_entsize;
2604
2605 if (ihdr->sh_type == SHT_SYMTAB
2606 || ihdr->sh_type == SHT_DYNSYM)
2607 ohdr->sh_info = ihdr->sh_info;
2608
2609 return true;
2610 }
2611
2612 /* Copy private symbol information. If this symbol is in a section
2613 which we did not map into a BFD section, try to map the section
2614 index correctly. We use special macro definitions for the mapped
2615 section indices; these definitions are interpreted by the
2616 swap_out_syms function. */
2617
2618 #define MAP_ONESYMTAB (SHN_LORESERVE - 1)
2619 #define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
2620 #define MAP_STRTAB (SHN_LORESERVE - 3)
2621 #define MAP_SHSTRTAB (SHN_LORESERVE - 4)
2622
2623 boolean
2624 _bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
2625 bfd *ibfd;
2626 asymbol *isymarg;
2627 bfd *obfd;
2628 asymbol *osymarg;
2629 {
2630 elf_symbol_type *isym, *osym;
2631
2632 isym = elf_symbol_from (ibfd, isymarg);
2633 osym = elf_symbol_from (obfd, osymarg);
2634
2635 if (isym != NULL
2636 && osym != NULL
2637 && bfd_is_abs_section (isym->symbol.section))
2638 {
2639 unsigned int shndx;
2640
2641 shndx = isym->internal_elf_sym.st_shndx;
2642 if (shndx == elf_onesymtab (ibfd))
2643 shndx = MAP_ONESYMTAB;
2644 else if (shndx == elf_dynsymtab (ibfd))
2645 shndx = MAP_DYNSYMTAB;
2646 else if (shndx == elf_tdata (ibfd)->strtab_section)
2647 shndx = MAP_STRTAB;
2648 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
2649 shndx = MAP_SHSTRTAB;
2650 osym->internal_elf_sym.st_shndx = shndx;
2651 }
2652
2653 return true;
2654 }
2655
2656 /* Swap out the symbols. */
2657
2658 static boolean
2659 swap_out_syms (abfd, sttp)
2660 bfd *abfd;
2661 struct bfd_strtab_hash **sttp;
2662 {
2663 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2664
2665 if (!elf_map_symbols (abfd))
2666 return false;
2667
2668 /* Dump out the symtabs. */
2669 {
2670 int symcount = bfd_get_symcount (abfd);
2671 asymbol **syms = bfd_get_outsymbols (abfd);
2672 struct bfd_strtab_hash *stt;
2673 Elf_Internal_Shdr *symtab_hdr;
2674 Elf_Internal_Shdr *symstrtab_hdr;
2675 char *outbound_syms;
2676 int idx;
2677
2678 stt = _bfd_elf_stringtab_init ();
2679 if (stt == NULL)
2680 return false;
2681
2682 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2683 symtab_hdr->sh_type = SHT_SYMTAB;
2684 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
2685 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
2686 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
2687 symtab_hdr->sh_addralign = bed->s->file_align;
2688
2689 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
2690 symstrtab_hdr->sh_type = SHT_STRTAB;
2691
2692 outbound_syms = bfd_alloc (abfd,
2693 (1 + symcount) * bed->s->sizeof_sym);
2694 if (outbound_syms == NULL)
2695 return false;
2696 symtab_hdr->contents = (PTR) outbound_syms;
2697
2698 /* now generate the data (for "contents") */
2699 {
2700 /* Fill in zeroth symbol and swap it out. */
2701 Elf_Internal_Sym sym;
2702 sym.st_name = 0;
2703 sym.st_value = 0;
2704 sym.st_size = 0;
2705 sym.st_info = 0;
2706 sym.st_other = 0;
2707 sym.st_shndx = SHN_UNDEF;
2708 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
2709 outbound_syms += bed->s->sizeof_sym;
2710 }
2711 for (idx = 0; idx < symcount; idx++)
2712 {
2713 Elf_Internal_Sym sym;
2714 bfd_vma value = syms[idx]->value;
2715 elf_symbol_type *type_ptr;
2716 flagword flags = syms[idx]->flags;
2717
2718 if (flags & BSF_SECTION_SYM)
2719 /* Section symbols have no names. */
2720 sym.st_name = 0;
2721 else
2722 {
2723 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
2724 syms[idx]->name,
2725 true, false);
2726 if (sym.st_name == (unsigned long) -1)
2727 return false;
2728 }
2729
2730 type_ptr = elf_symbol_from (abfd, syms[idx]);
2731
2732 if (bfd_is_com_section (syms[idx]->section))
2733 {
2734 /* ELF common symbols put the alignment into the `value' field,
2735 and the size into the `size' field. This is backwards from
2736 how BFD handles it, so reverse it here. */
2737 sym.st_size = value;
2738 if (type_ptr == NULL
2739 || type_ptr->internal_elf_sym.st_value == 0)
2740 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
2741 else
2742 sym.st_value = type_ptr->internal_elf_sym.st_value;
2743 sym.st_shndx = _bfd_elf_section_from_bfd_section (abfd,
2744 syms[idx]->section);
2745 }
2746 else
2747 {
2748 asection *sec = syms[idx]->section;
2749 int shndx;
2750
2751 if (sec->output_section)
2752 {
2753 value += sec->output_offset;
2754 sec = sec->output_section;
2755 }
2756 value += sec->vma;
2757 sym.st_value = value;
2758 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
2759
2760 if (bfd_is_abs_section (sec)
2761 && type_ptr != NULL
2762 && type_ptr->internal_elf_sym.st_shndx != 0)
2763 {
2764 /* This symbol is in a real ELF section which we did
2765 not create as a BFD section. Undo the mapping done
2766 by copy_private_symbol_data. */
2767 shndx = type_ptr->internal_elf_sym.st_shndx;
2768 switch (shndx)
2769 {
2770 case MAP_ONESYMTAB:
2771 shndx = elf_onesymtab (abfd);
2772 break;
2773 case MAP_DYNSYMTAB:
2774 shndx = elf_dynsymtab (abfd);
2775 break;
2776 case MAP_STRTAB:
2777 shndx = elf_tdata (abfd)->strtab_section;
2778 break;
2779 case MAP_SHSTRTAB:
2780 shndx = elf_tdata (abfd)->shstrtab_section;
2781 break;
2782 default:
2783 break;
2784 }
2785 }
2786 else
2787 {
2788 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2789
2790 if (shndx == -1)
2791 {
2792 asection *sec2;
2793
2794 /* Writing this would be a hell of a lot easier if
2795 we had some decent documentation on bfd, and
2796 knew what to expect of the library, and what to
2797 demand of applications. For example, it
2798 appears that `objcopy' might not set the
2799 section of a symbol to be a section that is
2800 actually in the output file. */
2801 sec2 = bfd_get_section_by_name (abfd, sec->name);
2802 BFD_ASSERT (sec2 != 0);
2803 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
2804 BFD_ASSERT (shndx != -1);
2805 }
2806 }
2807
2808 sym.st_shndx = shndx;
2809 }
2810
2811 if (bfd_is_com_section (syms[idx]->section))
2812 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_OBJECT);
2813 else if (bfd_is_und_section (syms[idx]->section))
2814 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
2815 ? STB_WEAK
2816 : STB_GLOBAL),
2817 ((flags & BSF_FUNCTION)
2818 ? STT_FUNC
2819 : STT_NOTYPE));
2820 else if (flags & BSF_SECTION_SYM)
2821 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
2822 else if (flags & BSF_FILE)
2823 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
2824 else
2825 {
2826 int bind = STB_LOCAL;
2827 int type = STT_OBJECT;
2828
2829 if (flags & BSF_LOCAL)
2830 bind = STB_LOCAL;
2831 else if (flags & BSF_WEAK)
2832 bind = STB_WEAK;
2833 else if (flags & BSF_GLOBAL)
2834 bind = STB_GLOBAL;
2835
2836 if (flags & BSF_FUNCTION)
2837 type = STT_FUNC;
2838
2839 sym.st_info = ELF_ST_INFO (bind, type);
2840 }
2841
2842 sym.st_other = 0;
2843 bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
2844 outbound_syms += bed->s->sizeof_sym;
2845 }
2846
2847 *sttp = stt;
2848 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
2849 symstrtab_hdr->sh_type = SHT_STRTAB;
2850
2851 symstrtab_hdr->sh_flags = 0;
2852 symstrtab_hdr->sh_addr = 0;
2853 symstrtab_hdr->sh_entsize = 0;
2854 symstrtab_hdr->sh_link = 0;
2855 symstrtab_hdr->sh_info = 0;
2856 symstrtab_hdr->sh_addralign = 1;
2857 }
2858
2859 return true;
2860 }
2861
2862 /* Return the number of bytes required to hold the symtab vector.
2863
2864 Note that we base it on the count plus 1, since we will null terminate
2865 the vector allocated based on this size. However, the ELF symbol table
2866 always has a dummy entry as symbol #0, so it ends up even. */
2867
2868 long
2869 _bfd_elf_get_symtab_upper_bound (abfd)
2870 bfd *abfd;
2871 {
2872 long symcount;
2873 long symtab_size;
2874 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
2875
2876 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2877 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2878
2879 return symtab_size;
2880 }
2881
2882 long
2883 _bfd_elf_get_dynamic_symtab_upper_bound (abfd)
2884 bfd *abfd;
2885 {
2886 long symcount;
2887 long symtab_size;
2888 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
2889
2890 if (elf_dynsymtab (abfd) == 0)
2891 {
2892 bfd_set_error (bfd_error_invalid_operation);
2893 return -1;
2894 }
2895
2896 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
2897 symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
2898
2899 return symtab_size;
2900 }
2901
2902 long
2903 _bfd_elf_get_reloc_upper_bound (abfd, asect)
2904 bfd *abfd;
2905 sec_ptr asect;
2906 {
2907 return (asect->reloc_count + 1) * sizeof (arelent *);
2908 }
2909
2910 /* Canonicalize the relocs. */
2911
2912 long
2913 _bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
2914 bfd *abfd;
2915 sec_ptr section;
2916 arelent **relptr;
2917 asymbol **symbols;
2918 {
2919 arelent *tblptr;
2920 unsigned int i;
2921
2922 if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd, section, symbols))
2923 return -1;
2924
2925 tblptr = section->relocation;
2926 for (i = 0; i < section->reloc_count; i++)
2927 *relptr++ = tblptr++;
2928
2929 *relptr = NULL;
2930
2931 return section->reloc_count;
2932 }
2933
2934 long
2935 _bfd_elf_get_symtab (abfd, alocation)
2936 bfd *abfd;
2937 asymbol **alocation;
2938 {
2939 long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, false);
2940
2941 if (symcount >= 0)
2942 bfd_get_symcount (abfd) = symcount;
2943 return symcount;
2944 }
2945
2946 long
2947 _bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
2948 bfd *abfd;
2949 asymbol **alocation;
2950 {
2951 return get_elf_backend_data (abfd)->s->slurp_symbol_table (abfd, alocation, true);
2952 }
2953
2954 asymbol *
2955 _bfd_elf_make_empty_symbol (abfd)
2956 bfd *abfd;
2957 {
2958 elf_symbol_type *newsym;
2959
2960 newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
2961 if (!newsym)
2962 return NULL;
2963 else
2964 {
2965 newsym->symbol.the_bfd = abfd;
2966 return &newsym->symbol;
2967 }
2968 }
2969
2970 void
2971 _bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
2972 bfd *ignore_abfd;
2973 asymbol *symbol;
2974 symbol_info *ret;
2975 {
2976 bfd_symbol_info (symbol, ret);
2977 }
2978
2979 alent *
2980 _bfd_elf_get_lineno (ignore_abfd, symbol)
2981 bfd *ignore_abfd;
2982 asymbol *symbol;
2983 {
2984 abort ();
2985 return NULL;
2986 }
2987
2988 boolean
2989 _bfd_elf_set_arch_mach (abfd, arch, machine)
2990 bfd *abfd;
2991 enum bfd_architecture arch;
2992 unsigned long machine;
2993 {
2994 /* If this isn't the right architecture for this backend, and this
2995 isn't the generic backend, fail. */
2996 if (arch != get_elf_backend_data (abfd)->arch
2997 && arch != bfd_arch_unknown
2998 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
2999 return false;
3000
3001 return bfd_default_set_arch_mach (abfd, arch, machine);
3002 }
3003
3004 /* Find the nearest line to a particular section and offset, for error
3005 reporting. */
3006
3007 boolean
3008 _bfd_elf_find_nearest_line (abfd,
3009 section,
3010 symbols,
3011 offset,
3012 filename_ptr,
3013 functionname_ptr,
3014 line_ptr)
3015 bfd *abfd;
3016 asection *section;
3017 asymbol **symbols;
3018 bfd_vma offset;
3019 CONST char **filename_ptr;
3020 CONST char **functionname_ptr;
3021 unsigned int *line_ptr;
3022 {
3023 const char *filename;
3024 asymbol *func;
3025 asymbol **p;
3026
3027 if (symbols == NULL)
3028 return false;
3029
3030 filename = NULL;
3031 func = NULL;
3032
3033 for (p = symbols; *p != NULL; p++)
3034 {
3035 elf_symbol_type *q;
3036
3037 q = (elf_symbol_type *) *p;
3038
3039 if (bfd_get_section (&q->symbol) != section)
3040 continue;
3041
3042 switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
3043 {
3044 default:
3045 break;
3046 case STT_FILE:
3047 filename = bfd_asymbol_name (&q->symbol);
3048 break;
3049 case STT_FUNC:
3050 if (func == NULL
3051 || q->symbol.value <= offset)
3052 func = (asymbol *) q;
3053 break;
3054 }
3055 }
3056
3057 if (func == NULL)
3058 return false;
3059
3060 *filename_ptr = filename;
3061 *functionname_ptr = bfd_asymbol_name (func);
3062 *line_ptr = 0;
3063 return true;
3064 }
3065
3066 int
3067 _bfd_elf_sizeof_headers (abfd, reloc)
3068 bfd *abfd;
3069 boolean reloc;
3070 {
3071 int ret;
3072
3073 ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
3074 if (! reloc)
3075 ret += get_program_header_size (abfd);
3076 return ret;
3077 }
3078
3079 boolean
3080 _bfd_elf_set_section_contents (abfd, section, location, offset, count)
3081 bfd *abfd;
3082 sec_ptr section;
3083 PTR location;
3084 file_ptr offset;
3085 bfd_size_type count;
3086 {
3087 Elf_Internal_Shdr *hdr;
3088
3089 if (! abfd->output_has_begun
3090 && ! _bfd_elf_compute_section_file_positions (abfd,
3091 (struct bfd_link_info *) NULL))
3092 return false;
3093
3094 hdr = &elf_section_data (section)->this_hdr;
3095
3096 if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
3097 return false;
3098 if (bfd_write (location, 1, count, abfd) != count)
3099 return false;
3100
3101 return true;
3102 }
3103
3104 void
3105 _bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
3106 bfd *abfd;
3107 arelent *cache_ptr;
3108 Elf_Internal_Rela *dst;
3109 {
3110 abort ();
3111 }
3112
3113 #if 0
3114 void
3115 _bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
3116 bfd *abfd;
3117 arelent *cache_ptr;
3118 Elf_Internal_Rel *dst;
3119 {
3120 abort ();
3121 }
3122 #endif
This page took 0.09036 seconds and 5 git commands to generate.