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