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