Enable pei386_auto_import by default. Only print a info message about auto
[deliverable/binutils-gdb.git] / bfd / elf.c
CommitLineData
252b5132 1/* ELF executable support for BFD.
e1fddb6b 2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
7898deda 3 Free Software Foundation, Inc.
252b5132 4
661a3fd4 5 This file is part of BFD, the Binary File Descriptor library.
252b5132 6
661a3fd4
NC
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
252b5132 11
661a3fd4
NC
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
252b5132 16
661a3fd4
NC
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
252b5132 20
661a3fd4
NC
21/* SECTION
22
252b5132
RH
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
661a3fd4 31 haven't bothered yet. */
252b5132 32
7ee38065
MS
33/* For sparc64-cross-sparc32. */
34#define _SYSCALL32
252b5132
RH
35#include "bfd.h"
36#include "sysdep.h"
37#include "bfdlink.h"
38#include "libbfd.h"
39#define ARCH_SIZE 0
40#include "elf-bfd.h"
e0e8c97f 41#include "libiberty.h"
252b5132
RH
42
43static INLINE struct elf_segment_map *make_mapping
44 PARAMS ((bfd *, asection **, unsigned int, unsigned int, boolean));
45static boolean map_sections_to_segments PARAMS ((bfd *));
46static int elf_sort_sections PARAMS ((const PTR, const PTR));
47static boolean assign_file_positions_for_segments PARAMS ((bfd *));
48static boolean assign_file_positions_except_relocs PARAMS ((bfd *));
49static boolean prep_headers PARAMS ((bfd *));
50static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **, int));
51static boolean copy_private_bfd_data PARAMS ((bfd *, bfd *));
dc810e39 52static char *elf_read PARAMS ((bfd *, file_ptr, bfd_size_type));
b885599b 53static const char *group_signature PARAMS ((bfd *, Elf_Internal_Shdr *));
dbb410c3 54static boolean setup_group PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
d3c456e9 55static void merge_sections_remove_hook PARAMS ((bfd *, asection *));
252b5132 56static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
dbb410c3 57static void set_group_contents PARAMS ((bfd *, asection *, PTR));
252b5132
RH
58static boolean assign_section_numbers PARAMS ((bfd *));
59static INLINE int sym_is_global PARAMS ((bfd *, asymbol *));
60static boolean elf_map_symbols PARAMS ((bfd *));
61static bfd_size_type get_program_header_size PARAMS ((bfd *));
dc810e39 62static boolean elfcore_read_notes PARAMS ((bfd *, file_ptr, bfd_size_type));
a7b97311
AM
63static boolean elf_find_function PARAMS ((bfd *, asection *, asymbol **,
64 bfd_vma, const char **,
65 const char **));
66static int elfcore_make_pid PARAMS ((bfd *));
67static boolean elfcore_maybe_make_sect PARAMS ((bfd *, char *, asection *));
68static boolean elfcore_make_note_pseudosection PARAMS ((bfd *, char *,
69 Elf_Internal_Note *));
70static boolean elfcore_grok_prfpreg PARAMS ((bfd *, Elf_Internal_Note *));
71static boolean elfcore_grok_prxfpreg PARAMS ((bfd *, Elf_Internal_Note *));
72static boolean elfcore_grok_note PARAMS ((bfd *, Elf_Internal_Note *));
252b5132 73
50b2bdb7
AM
74static boolean elfcore_netbsd_get_lwpid PARAMS ((Elf_Internal_Note *, int *));
75static boolean elfcore_grok_netbsd_procinfo PARAMS ((bfd *,
76 Elf_Internal_Note *));
77static boolean elfcore_grok_netbsd_note PARAMS ((bfd *, Elf_Internal_Note *));
78
252b5132
RH
79/* Swap version information in and out. The version information is
80 currently size independent. If that ever changes, this code will
81 need to move into elfcode.h. */
82
83/* Swap in a Verdef structure. */
84
85void
86_bfd_elf_swap_verdef_in (abfd, src, dst)
87 bfd *abfd;
88 const Elf_External_Verdef *src;
89 Elf_Internal_Verdef *dst;
90{
dc810e39
AM
91 dst->vd_version = H_GET_16 (abfd, src->vd_version);
92 dst->vd_flags = H_GET_16 (abfd, src->vd_flags);
93 dst->vd_ndx = H_GET_16 (abfd, src->vd_ndx);
94 dst->vd_cnt = H_GET_16 (abfd, src->vd_cnt);
95 dst->vd_hash = H_GET_32 (abfd, src->vd_hash);
96 dst->vd_aux = H_GET_32 (abfd, src->vd_aux);
97 dst->vd_next = H_GET_32 (abfd, src->vd_next);
252b5132
RH
98}
99
100/* Swap out a Verdef structure. */
101
102void
103_bfd_elf_swap_verdef_out (abfd, src, dst)
104 bfd *abfd;
105 const Elf_Internal_Verdef *src;
106 Elf_External_Verdef *dst;
107{
dc810e39
AM
108 H_PUT_16 (abfd, src->vd_version, dst->vd_version);
109 H_PUT_16 (abfd, src->vd_flags, dst->vd_flags);
110 H_PUT_16 (abfd, src->vd_ndx, dst->vd_ndx);
111 H_PUT_16 (abfd, src->vd_cnt, dst->vd_cnt);
112 H_PUT_32 (abfd, src->vd_hash, dst->vd_hash);
113 H_PUT_32 (abfd, src->vd_aux, dst->vd_aux);
114 H_PUT_32 (abfd, src->vd_next, dst->vd_next);
252b5132
RH
115}
116
117/* Swap in a Verdaux structure. */
118
119void
120_bfd_elf_swap_verdaux_in (abfd, src, dst)
121 bfd *abfd;
122 const Elf_External_Verdaux *src;
123 Elf_Internal_Verdaux *dst;
124{
dc810e39
AM
125 dst->vda_name = H_GET_32 (abfd, src->vda_name);
126 dst->vda_next = H_GET_32 (abfd, src->vda_next);
252b5132
RH
127}
128
129/* Swap out a Verdaux structure. */
130
131void
132_bfd_elf_swap_verdaux_out (abfd, src, dst)
133 bfd *abfd;
134 const Elf_Internal_Verdaux *src;
135 Elf_External_Verdaux *dst;
136{
dc810e39
AM
137 H_PUT_32 (abfd, src->vda_name, dst->vda_name);
138 H_PUT_32 (abfd, src->vda_next, dst->vda_next);
252b5132
RH
139}
140
141/* Swap in a Verneed structure. */
142
143void
144_bfd_elf_swap_verneed_in (abfd, src, dst)
145 bfd *abfd;
146 const Elf_External_Verneed *src;
147 Elf_Internal_Verneed *dst;
148{
dc810e39
AM
149 dst->vn_version = H_GET_16 (abfd, src->vn_version);
150 dst->vn_cnt = H_GET_16 (abfd, src->vn_cnt);
151 dst->vn_file = H_GET_32 (abfd, src->vn_file);
152 dst->vn_aux = H_GET_32 (abfd, src->vn_aux);
153 dst->vn_next = H_GET_32 (abfd, src->vn_next);
252b5132
RH
154}
155
156/* Swap out a Verneed structure. */
157
158void
159_bfd_elf_swap_verneed_out (abfd, src, dst)
160 bfd *abfd;
161 const Elf_Internal_Verneed *src;
162 Elf_External_Verneed *dst;
163{
dc810e39
AM
164 H_PUT_16 (abfd, src->vn_version, dst->vn_version);
165 H_PUT_16 (abfd, src->vn_cnt, dst->vn_cnt);
166 H_PUT_32 (abfd, src->vn_file, dst->vn_file);
167 H_PUT_32 (abfd, src->vn_aux, dst->vn_aux);
168 H_PUT_32 (abfd, src->vn_next, dst->vn_next);
252b5132
RH
169}
170
171/* Swap in a Vernaux structure. */
172
173void
174_bfd_elf_swap_vernaux_in (abfd, src, dst)
175 bfd *abfd;
176 const Elf_External_Vernaux *src;
177 Elf_Internal_Vernaux *dst;
178{
dc810e39
AM
179 dst->vna_hash = H_GET_32 (abfd, src->vna_hash);
180 dst->vna_flags = H_GET_16 (abfd, src->vna_flags);
181 dst->vna_other = H_GET_16 (abfd, src->vna_other);
182 dst->vna_name = H_GET_32 (abfd, src->vna_name);
183 dst->vna_next = H_GET_32 (abfd, src->vna_next);
252b5132
RH
184}
185
186/* Swap out a Vernaux structure. */
187
188void
189_bfd_elf_swap_vernaux_out (abfd, src, dst)
190 bfd *abfd;
191 const Elf_Internal_Vernaux *src;
192 Elf_External_Vernaux *dst;
193{
dc810e39
AM
194 H_PUT_32 (abfd, src->vna_hash, dst->vna_hash);
195 H_PUT_16 (abfd, src->vna_flags, dst->vna_flags);
196 H_PUT_16 (abfd, src->vna_other, dst->vna_other);
197 H_PUT_32 (abfd, src->vna_name, dst->vna_name);
198 H_PUT_32 (abfd, src->vna_next, dst->vna_next);
252b5132
RH
199}
200
201/* Swap in a Versym structure. */
202
203void
204_bfd_elf_swap_versym_in (abfd, src, dst)
205 bfd *abfd;
206 const Elf_External_Versym *src;
207 Elf_Internal_Versym *dst;
208{
dc810e39 209 dst->vs_vers = H_GET_16 (abfd, src->vs_vers);
252b5132
RH
210}
211
212/* Swap out a Versym structure. */
213
214void
215_bfd_elf_swap_versym_out (abfd, src, dst)
216 bfd *abfd;
217 const Elf_Internal_Versym *src;
218 Elf_External_Versym *dst;
219{
dc810e39 220 H_PUT_16 (abfd, src->vs_vers, dst->vs_vers);
252b5132
RH
221}
222
223/* Standard ELF hash function. Do not change this function; you will
224 cause invalid hash tables to be generated. */
3a99b017 225
252b5132 226unsigned long
3a99b017
ILT
227bfd_elf_hash (namearg)
228 const char *namearg;
252b5132 229{
3a99b017 230 const unsigned char *name = (const unsigned char *) namearg;
252b5132
RH
231 unsigned long h = 0;
232 unsigned long g;
233 int ch;
234
235 while ((ch = *name++) != '\0')
236 {
237 h = (h << 4) + ch;
238 if ((g = (h & 0xf0000000)) != 0)
239 {
240 h ^= g >> 24;
241 /* The ELF ABI says `h &= ~g', but this is equivalent in
242 this case and on some machines one insn instead of two. */
243 h ^= g;
244 }
245 }
246 return h;
247}
248
249/* Read a specified number of bytes at a specified offset in an ELF
250 file, into a newly allocated buffer, and return a pointer to the
c044fabd 251 buffer. */
252b5132
RH
252
253static char *
254elf_read (abfd, offset, size)
c044fabd 255 bfd *abfd;
dc810e39
AM
256 file_ptr offset;
257 bfd_size_type size;
252b5132
RH
258{
259 char *buf;
260
261 if ((buf = bfd_alloc (abfd, size)) == NULL)
262 return NULL;
dc810e39 263 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
252b5132 264 return NULL;
dc810e39 265 if (bfd_bread ((PTR) buf, size, abfd) != size)
252b5132
RH
266 {
267 if (bfd_get_error () != bfd_error_system_call)
268 bfd_set_error (bfd_error_file_truncated);
269 return NULL;
270 }
271 return buf;
272}
273
274boolean
275bfd_elf_mkobject (abfd)
c044fabd 276 bfd *abfd;
252b5132 277{
c044fabd
KH
278 /* This just does initialization. */
279 /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
dc810e39
AM
280 bfd_size_type amt = sizeof (struct elf_obj_tdata);
281 elf_tdata (abfd) = (struct elf_obj_tdata *) bfd_zalloc (abfd, amt);
252b5132
RH
282 if (elf_tdata (abfd) == 0)
283 return false;
c044fabd
KH
284 /* Since everything is done at close time, do we need any
285 initialization? */
252b5132
RH
286
287 return true;
288}
289
290boolean
291bfd_elf_mkcorefile (abfd)
c044fabd 292 bfd *abfd;
252b5132 293{
c044fabd 294 /* I think this can be done just like an object file. */
252b5132
RH
295 return bfd_elf_mkobject (abfd);
296}
297
298char *
299bfd_elf_get_str_section (abfd, shindex)
c044fabd 300 bfd *abfd;
252b5132
RH
301 unsigned int shindex;
302{
303 Elf_Internal_Shdr **i_shdrp;
304 char *shstrtab = NULL;
dc810e39
AM
305 file_ptr offset;
306 bfd_size_type shstrtabsize;
252b5132
RH
307
308 i_shdrp = elf_elfsections (abfd);
309 if (i_shdrp == 0 || i_shdrp[shindex] == 0)
310 return 0;
311
312 shstrtab = (char *) i_shdrp[shindex]->contents;
313 if (shstrtab == NULL)
314 {
c044fabd 315 /* No cached one, attempt to read, and cache what we read. */
252b5132
RH
316 offset = i_shdrp[shindex]->sh_offset;
317 shstrtabsize = i_shdrp[shindex]->sh_size;
318 shstrtab = elf_read (abfd, offset, shstrtabsize);
319 i_shdrp[shindex]->contents = (PTR) shstrtab;
320 }
321 return shstrtab;
322}
323
324char *
325bfd_elf_string_from_elf_section (abfd, shindex, strindex)
c044fabd 326 bfd *abfd;
252b5132
RH
327 unsigned int shindex;
328 unsigned int strindex;
329{
330 Elf_Internal_Shdr *hdr;
331
332 if (strindex == 0)
333 return "";
334
335 hdr = elf_elfsections (abfd)[shindex];
336
337 if (hdr->contents == NULL
338 && bfd_elf_get_str_section (abfd, shindex) == NULL)
339 return NULL;
340
341 if (strindex >= hdr->sh_size)
342 {
343 (*_bfd_error_handler)
344 (_("%s: invalid string offset %u >= %lu for section `%s'"),
8f615d07 345 bfd_archive_filename (abfd), strindex, (unsigned long) hdr->sh_size,
252b5132
RH
346 ((shindex == elf_elfheader(abfd)->e_shstrndx
347 && strindex == hdr->sh_name)
348 ? ".shstrtab"
349 : elf_string_from_elf_strtab (abfd, hdr->sh_name)));
350 return "";
351 }
352
353 return ((char *) hdr->contents) + strindex;
354}
355
dbb410c3
AM
356/* Elf_Internal_Shdr->contents is an array of these for SHT_GROUP
357 sections. The first element is the flags, the rest are section
358 pointers. */
359
360typedef union elf_internal_group {
361 Elf_Internal_Shdr *shdr;
362 unsigned int flags;
363} Elf_Internal_Group;
364
b885599b
AM
365/* Return the name of the group signature symbol. Why isn't the
366 signature just a string? */
367
368static const char *
369group_signature (abfd, ghdr)
370 bfd *abfd;
371 Elf_Internal_Shdr *ghdr;
372{
373 struct elf_backend_data *bed;
374 file_ptr pos;
9dce4196
AM
375 bfd_size_type amt;
376 Elf_Internal_Shdr *hdr;
377 Elf_Internal_Shdr *shndx_hdr;
378 unsigned char esym[sizeof (Elf64_External_Sym)];
379 Elf_External_Sym_Shndx eshndx;
380 Elf_Internal_Sym isym;
381 unsigned int iname;
382 unsigned int shindex;
b885599b
AM
383
384 /* First we need to ensure the symbol table is available. */
385 if (! bfd_section_from_shdr (abfd, ghdr->sh_link))
386 return NULL;
387
9dce4196
AM
388 /* Go read the symbol. */
389 hdr = &elf_tdata (abfd)->symtab_hdr;
b885599b 390 bed = get_elf_backend_data (abfd);
9dce4196
AM
391 amt = bed->s->sizeof_sym;
392 pos = hdr->sh_offset + ghdr->sh_info * amt;
b885599b 393 if (bfd_seek (abfd, pos, SEEK_SET) != 0
9dce4196 394 || bfd_bread (esym, amt, abfd) != amt)
b885599b 395 return NULL;
9dce4196
AM
396
397 /* And possibly the symbol section index extension. */
398 shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
399 if (elf_elfsections (abfd) != NULL
400 && elf_elfsections (abfd)[shndx_hdr->sh_link] == hdr)
401 {
402 amt = sizeof (Elf_External_Sym_Shndx);
403 pos = shndx_hdr->sh_offset + ghdr->sh_info * amt;
404 if (bfd_seek (abfd, pos, SEEK_SET) != 0
405 || bfd_bread ((PTR) &eshndx, amt, abfd) != amt)
406 return NULL;
407 }
408
409 /* Convert to internal format. */
410 (*bed->s->swap_symbol_in) (abfd, (const PTR *) &esym, (const PTR *) &eshndx,
411 &isym);
412
413 /* Look up the symbol name. */
414 iname = isym.st_name;
415 shindex = hdr->sh_link;
416 if (iname == 0 && ELF_ST_TYPE (isym.st_info) == STT_SECTION)
417 {
418 iname = elf_elfsections (abfd)[isym.st_shndx]->sh_name;
419 shindex = elf_elfheader (abfd)->e_shstrndx;
420 }
421
422 return bfd_elf_string_from_elf_section (abfd, shindex, iname);
b885599b
AM
423}
424
dbb410c3
AM
425/* Set next_in_group list pointer, and group name for NEWSECT. */
426
427static boolean
428setup_group (abfd, hdr, newsect)
429 bfd *abfd;
430 Elf_Internal_Shdr *hdr;
431 asection *newsect;
432{
433 unsigned int num_group = elf_tdata (abfd)->num_group;
434
435 /* If num_group is zero, read in all SHT_GROUP sections. The count
436 is set to -1 if there are no SHT_GROUP sections. */
437 if (num_group == 0)
438 {
439 unsigned int i, shnum;
440
441 /* First count the number of groups. If we have a SHT_GROUP
442 section with just a flag word (ie. sh_size is 4), ignore it. */
9ad5cbcf 443 shnum = elf_numsections (abfd);
dbb410c3
AM
444 num_group = 0;
445 for (i = 0; i < shnum; i++)
446 {
447 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
448 if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
449 num_group += 1;
450 }
451
452 if (num_group == 0)
973ffd63 453 num_group = (unsigned) -1;
dbb410c3
AM
454 elf_tdata (abfd)->num_group = num_group;
455
456 if (num_group > 0)
457 {
458 /* We keep a list of elf section headers for group sections,
459 so we can find them quickly. */
460 bfd_size_type amt = num_group * sizeof (Elf_Internal_Shdr *);
461 elf_tdata (abfd)->group_sect_ptr = bfd_alloc (abfd, amt);
462 if (elf_tdata (abfd)->group_sect_ptr == NULL)
463 return false;
464
465 num_group = 0;
466 for (i = 0; i < shnum; i++)
467 {
468 Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[i];
469 if (shdr->sh_type == SHT_GROUP && shdr->sh_size >= 8)
470 {
973ffd63 471 unsigned char *src;
dbb410c3
AM
472 Elf_Internal_Group *dest;
473
474 /* Add to list of sections. */
475 elf_tdata (abfd)->group_sect_ptr[num_group] = shdr;
476 num_group += 1;
477
478 /* Read the raw contents. */
479 BFD_ASSERT (sizeof (*dest) >= 4);
480 amt = shdr->sh_size * sizeof (*dest) / 4;
481 shdr->contents = bfd_alloc (abfd, amt);
482 if (shdr->contents == NULL
483 || bfd_seek (abfd, shdr->sh_offset, SEEK_SET) != 0
484 || (bfd_bread (shdr->contents, shdr->sh_size, abfd)
485 != shdr->sh_size))
486 return false;
487
488 /* Translate raw contents, a flag word followed by an
489 array of elf section indices all in target byte order,
490 to the flag word followed by an array of elf section
491 pointers. */
492 src = shdr->contents + shdr->sh_size;
493 dest = (Elf_Internal_Group *) (shdr->contents + amt);
494 while (1)
495 {
496 unsigned int idx;
497
498 src -= 4;
499 --dest;
500 idx = H_GET_32 (abfd, src);
501 if (src == shdr->contents)
502 {
503 dest->flags = idx;
b885599b
AM
504 if (shdr->bfd_section != NULL && (idx & GRP_COMDAT))
505 shdr->bfd_section->flags
506 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
dbb410c3
AM
507 break;
508 }
509 if (idx >= shnum)
510 {
511 ((*_bfd_error_handler)
512 (_("%s: invalid SHT_GROUP entry"),
513 bfd_archive_filename (abfd)));
514 idx = 0;
515 }
516 dest->shdr = elf_elfsections (abfd)[idx];
517 }
518 }
519 }
520 }
521 }
522
523 if (num_group != (unsigned) -1)
524 {
525 unsigned int i;
526
527 for (i = 0; i < num_group; i++)
528 {
529 Elf_Internal_Shdr *shdr = elf_tdata (abfd)->group_sect_ptr[i];
530 Elf_Internal_Group *idx = (Elf_Internal_Group *) shdr->contents;
531 unsigned int n_elt = shdr->sh_size / 4;
532
533 /* Look through this group's sections to see if current
534 section is a member. */
535 while (--n_elt != 0)
536 if ((++idx)->shdr == hdr)
537 {
e0e8c97f 538 asection *s = NULL;
dbb410c3
AM
539
540 /* We are a member of this group. Go looking through
541 other members to see if any others are linked via
542 next_in_group. */
543 idx = (Elf_Internal_Group *) shdr->contents;
544 n_elt = shdr->sh_size / 4;
545 while (--n_elt != 0)
546 if ((s = (++idx)->shdr->bfd_section) != NULL
945906ff 547 && elf_next_in_group (s) != NULL)
dbb410c3
AM
548 break;
549 if (n_elt != 0)
550 {
dbb410c3
AM
551 /* Snarf the group name from other member, and
552 insert current section in circular list. */
945906ff
AM
553 elf_group_name (newsect) = elf_group_name (s);
554 elf_next_in_group (newsect) = elf_next_in_group (s);
555 elf_next_in_group (s) = newsect;
dbb410c3
AM
556 }
557 else
558 {
dbb410c3
AM
559 const char *gname;
560
b885599b
AM
561 gname = group_signature (abfd, shdr);
562 if (gname == NULL)
dbb410c3 563 return false;
945906ff 564 elf_group_name (newsect) = gname;
dbb410c3
AM
565
566 /* Start a circular list with one element. */
945906ff 567 elf_next_in_group (newsect) = newsect;
dbb410c3 568 }
b885599b 569
9dce4196
AM
570 /* If the group section has been created, point to the
571 new member. */
dbb410c3 572 if (shdr->bfd_section != NULL)
945906ff 573 elf_next_in_group (shdr->bfd_section) = newsect;
b885599b 574
dbb410c3
AM
575 i = num_group - 1;
576 break;
577 }
578 }
579 }
580
945906ff 581 if (elf_group_name (newsect) == NULL)
dbb410c3
AM
582 {
583 (*_bfd_error_handler) (_("%s: no group info for section %s"),
584 bfd_archive_filename (abfd), newsect->name);
585 }
586 return true;
587}
588
e61463e1 589boolean
b885599b
AM
590bfd_elf_discard_group (abfd, group)
591 bfd *abfd ATTRIBUTE_UNUSED;
592 asection *group;
593{
594 asection *first = elf_next_in_group (group);
595 asection *s = first;
596
597 while (s != NULL)
598 {
599 s->output_section = bfd_abs_section_ptr;
600 s = elf_next_in_group (s);
601 /* These lists are circular. */
602 if (s == first)
603 break;
604 }
e61463e1 605 return true;
b885599b
AM
606}
607
252b5132
RH
608/* Make a BFD section from an ELF section. We store a pointer to the
609 BFD section in the bfd_section field of the header. */
610
611boolean
612_bfd_elf_make_section_from_shdr (abfd, hdr, name)
613 bfd *abfd;
614 Elf_Internal_Shdr *hdr;
615 const char *name;
616{
617 asection *newsect;
618 flagword flags;
fa152c49 619 struct elf_backend_data *bed;
252b5132
RH
620
621 if (hdr->bfd_section != NULL)
622 {
623 BFD_ASSERT (strcmp (name,
624 bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
625 return true;
626 }
627
628 newsect = bfd_make_section_anyway (abfd, name);
629 if (newsect == NULL)
630 return false;
631
632 newsect->filepos = hdr->sh_offset;
633
634 if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
635 || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
636 || ! bfd_set_section_alignment (abfd, newsect,
dc810e39 637 bfd_log2 ((bfd_vma) hdr->sh_addralign)))
252b5132
RH
638 return false;
639
640 flags = SEC_NO_FLAGS;
641 if (hdr->sh_type != SHT_NOBITS)
642 flags |= SEC_HAS_CONTENTS;
dbb410c3
AM
643 if (hdr->sh_type == SHT_GROUP)
644 flags |= SEC_GROUP | SEC_EXCLUDE;
252b5132
RH
645 if ((hdr->sh_flags & SHF_ALLOC) != 0)
646 {
647 flags |= SEC_ALLOC;
648 if (hdr->sh_type != SHT_NOBITS)
649 flags |= SEC_LOAD;
650 }
651 if ((hdr->sh_flags & SHF_WRITE) == 0)
652 flags |= SEC_READONLY;
653 if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
654 flags |= SEC_CODE;
655 else if ((flags & SEC_LOAD) != 0)
656 flags |= SEC_DATA;
f5fa8ca2
JJ
657 if ((hdr->sh_flags & SHF_MERGE) != 0)
658 {
659 flags |= SEC_MERGE;
660 newsect->entsize = hdr->sh_entsize;
661 if ((hdr->sh_flags & SHF_STRINGS) != 0)
662 flags |= SEC_STRINGS;
663 }
dbb410c3
AM
664 if (hdr->sh_flags & SHF_GROUP)
665 if (!setup_group (abfd, hdr, newsect))
666 return false;
13ae64f3
JJ
667 if ((hdr->sh_flags & SHF_TLS) != 0)
668 flags |= SEC_THREAD_LOCAL;
252b5132
RH
669
670 /* The debugging sections appear to be recognized only by name, not
671 any sort of flag. */
7a6cc5fb 672 {
dbf48117 673 static const char *debug_sec_names [] =
7a6cc5fb
NC
674 {
675 ".debug",
676 ".gnu.linkonce.wi.",
677 ".line",
678 ".stab"
679 };
680 int i;
681
e0e8c97f 682 for (i = ARRAY_SIZE (debug_sec_names); i--;)
7a6cc5fb
NC
683 if (strncmp (name, debug_sec_names[i], strlen (debug_sec_names[i])) == 0)
684 break;
685
686 if (i >= 0)
687 flags |= SEC_DEBUGGING;
688 }
252b5132
RH
689
690 /* As a GNU extension, if the name begins with .gnu.linkonce, we
691 only link a single copy of the section. This is used to support
692 g++. g++ will emit each template expansion in its own section.
693 The symbols will be defined as weak, so that multiple definitions
694 are permitted. The GNU linker extension is to actually discard
695 all but one of the sections. */
b885599b
AM
696 if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0
697 && elf_next_in_group (newsect) == NULL)
252b5132
RH
698 flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
699
fa152c49
JW
700 bed = get_elf_backend_data (abfd);
701 if (bed->elf_backend_section_flags)
702 if (! bed->elf_backend_section_flags (&flags, hdr))
703 return false;
704
252b5132
RH
705 if (! bfd_set_section_flags (abfd, newsect, flags))
706 return false;
707
708 if ((flags & SEC_ALLOC) != 0)
709 {
710 Elf_Internal_Phdr *phdr;
711 unsigned int i;
712
713 /* Look through the phdrs to see if we need to adjust the lma.
714 If all the p_paddr fields are zero, we ignore them, since
715 some ELF linkers produce such output. */
716 phdr = elf_tdata (abfd)->phdr;
717 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
718 {
719 if (phdr->p_paddr != 0)
720 break;
721 }
722 if (i < elf_elfheader (abfd)->e_phnum)
723 {
724 phdr = elf_tdata (abfd)->phdr;
725 for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
726 {
e0e8c97f
NC
727 /* This section is part of this segment if its file
728 offset plus size lies within the segment's memory
729 span and, if the section is loaded, the extent of the
730 loaded data lies within the extent of the segment.
bf36db18
NC
731
732 Note - we used to check the p_paddr field as well, and
733 refuse to set the LMA if it was 0. This is wrong
dba143ef 734 though, as a perfectly valid initialised segment can
bf36db18 735 have a p_paddr of zero. Some architectures, eg ARM,
dba143ef 736 place special significance on the address 0 and
bf36db18
NC
737 executables need to be able to have a segment which
738 covers this address. */
252b5132 739 if (phdr->p_type == PT_LOAD
e0e8c97f
NC
740 && (bfd_vma) hdr->sh_offset >= phdr->p_offset
741 && (hdr->sh_offset + hdr->sh_size
742 <= phdr->p_offset + phdr->p_memsz)
252b5132 743 && ((flags & SEC_LOAD) == 0
d7866f04
AM
744 || (hdr->sh_offset + hdr->sh_size
745 <= phdr->p_offset + phdr->p_filesz)))
252b5132 746 {
dba143ef 747 if ((flags & SEC_LOAD) == 0)
d7866f04
AM
748 newsect->lma = (phdr->p_paddr
749 + hdr->sh_addr - phdr->p_vaddr);
dba143ef
AM
750 else
751 /* We used to use the same adjustment for SEC_LOAD
752 sections, but that doesn't work if the segment
753 is packed with code from multiple VMAs.
754 Instead we calculate the section LMA based on
755 the segment LMA. It is assumed that the
756 segment will contain sections with contiguous
757 LMAs, even if the VMAs are not. */
758 newsect->lma = (phdr->p_paddr
759 + hdr->sh_offset - phdr->p_offset);
d7866f04
AM
760
761 /* With contiguous segments, we can't tell from file
762 offsets whether a section with zero size should
763 be placed at the end of one segment or the
764 beginning of the next. Decide based on vaddr. */
765 if (hdr->sh_addr >= phdr->p_vaddr
766 && (hdr->sh_addr + hdr->sh_size
767 <= phdr->p_vaddr + phdr->p_memsz))
768 break;
252b5132
RH
769 }
770 }
771 }
772 }
773
774 hdr->bfd_section = newsect;
775 elf_section_data (newsect)->this_hdr = *hdr;
776
777 return true;
778}
779
780/*
781INTERNAL_FUNCTION
782 bfd_elf_find_section
783
784SYNOPSIS
785 struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
786
787DESCRIPTION
788 Helper functions for GDB to locate the string tables.
789 Since BFD hides string tables from callers, GDB needs to use an
790 internal hook to find them. Sun's .stabstr, in particular,
791 isn't even pointed to by the .stab section, so ordinary
792 mechanisms wouldn't work to find it, even if we had some.
793*/
794
795struct elf_internal_shdr *
796bfd_elf_find_section (abfd, name)
c044fabd 797 bfd *abfd;
252b5132
RH
798 char *name;
799{
800 Elf_Internal_Shdr **i_shdrp;
801 char *shstrtab;
802 unsigned int max;
803 unsigned int i;
804
805 i_shdrp = elf_elfsections (abfd);
806 if (i_shdrp != NULL)
807 {
9ad5cbcf
AM
808 shstrtab = bfd_elf_get_str_section (abfd,
809 elf_elfheader (abfd)->e_shstrndx);
252b5132
RH
810 if (shstrtab != NULL)
811 {
9ad5cbcf 812 max = elf_numsections (abfd);
252b5132
RH
813 for (i = 1; i < max; i++)
814 if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
815 return i_shdrp[i];
816 }
817 }
818 return 0;
819}
820
821const char *const bfd_elf_section_type_names[] = {
822 "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
823 "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
824 "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
825};
826
827/* ELF relocs are against symbols. If we are producing relocateable
828 output, and the reloc is against an external symbol, and nothing
829 has given us any additional addend, the resulting reloc will also
830 be against the same symbol. In such a case, we don't want to
831 change anything about the way the reloc is handled, since it will
832 all be done at final link time. Rather than put special case code
833 into bfd_perform_relocation, all the reloc types use this howto
834 function. It just short circuits the reloc if producing
835 relocateable output against an external symbol. */
836
252b5132
RH
837bfd_reloc_status_type
838bfd_elf_generic_reloc (abfd,
839 reloc_entry,
840 symbol,
841 data,
842 input_section,
843 output_bfd,
844 error_message)
7442e600 845 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
846 arelent *reloc_entry;
847 asymbol *symbol;
7442e600 848 PTR data ATTRIBUTE_UNUSED;
252b5132
RH
849 asection *input_section;
850 bfd *output_bfd;
7442e600 851 char **error_message ATTRIBUTE_UNUSED;
252b5132
RH
852{
853 if (output_bfd != (bfd *) NULL
854 && (symbol->flags & BSF_SECTION_SYM) == 0
855 && (! reloc_entry->howto->partial_inplace
856 || reloc_entry->addend == 0))
857 {
858 reloc_entry->address += input_section->output_offset;
859 return bfd_reloc_ok;
860 }
861
862 return bfd_reloc_continue;
863}
864\f
d3c456e9
JJ
865/* Make sure sec_info_type is cleared if sec_info is cleared too. */
866
867static void
868merge_sections_remove_hook (abfd, sec)
869 bfd *abfd ATTRIBUTE_UNUSED;
870 asection *sec;
871{
872 struct bfd_elf_section_data *sec_data;
873
874 sec_data = elf_section_data (sec);
875 BFD_ASSERT (sec_data->sec_info_type == ELF_INFO_TYPE_MERGE);
876 sec_data->sec_info_type = ELF_INFO_TYPE_NONE;
877}
878
8550eb6e
JJ
879/* Finish SHF_MERGE section merging. */
880
881boolean
882_bfd_elf_merge_sections (abfd, info)
883 bfd *abfd;
884 struct bfd_link_info *info;
885{
b0f35f36 886 if (!is_elf_hash_table (info))
8ea2e4bd 887 return false;
b0f35f36 888 if (elf_hash_table (info)->merge_info)
d3c456e9
JJ
889 _bfd_merge_sections (abfd, elf_hash_table (info)->merge_info,
890 merge_sections_remove_hook);
8550eb6e
JJ
891 return true;
892}
2d653fc7
AM
893
894void
895_bfd_elf_link_just_syms (sec, info)
896 asection *sec;
897 struct bfd_link_info *info;
898{
899 sec->output_section = bfd_abs_section_ptr;
900 sec->output_offset = sec->vma;
901 if (!is_elf_hash_table (info))
902 return;
903
904 elf_section_data (sec)->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
905}
8550eb6e 906\f
0ac4564e
L
907/* Copy the program header and other data from one object module to
908 another. */
252b5132 909
2d502050
L
910boolean
911_bfd_elf_copy_private_bfd_data (ibfd, obfd)
912 bfd *ibfd;
913 bfd *obfd;
914{
915 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
916 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
917 return true;
918
919 BFD_ASSERT (!elf_flags_init (obfd)
920 || (elf_elfheader (obfd)->e_flags
921 == elf_elfheader (ibfd)->e_flags));
922
0ac4564e 923 elf_gp (obfd) = elf_gp (ibfd);
2d502050
L
924 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
925 elf_flags_init (obfd) = true;
926 return true;
927}
928
f0b79d91
L
929/* Print out the program headers. */
930
252b5132
RH
931boolean
932_bfd_elf_print_private_bfd_data (abfd, farg)
933 bfd *abfd;
934 PTR farg;
935{
936 FILE *f = (FILE *) farg;
937 Elf_Internal_Phdr *p;
938 asection *s;
939 bfd_byte *dynbuf = NULL;
940
941 p = elf_tdata (abfd)->phdr;
942 if (p != NULL)
943 {
944 unsigned int i, c;
945
946 fprintf (f, _("\nProgram Header:\n"));
947 c = elf_elfheader (abfd)->e_phnum;
948 for (i = 0; i < c; i++, p++)
949 {
dc810e39 950 const char *pt;
252b5132
RH
951 char buf[20];
952
953 switch (p->p_type)
954 {
dc810e39
AM
955 case PT_NULL: pt = "NULL"; break;
956 case PT_LOAD: pt = "LOAD"; break;
957 case PT_DYNAMIC: pt = "DYNAMIC"; break;
958 case PT_INTERP: pt = "INTERP"; break;
959 case PT_NOTE: pt = "NOTE"; break;
960 case PT_SHLIB: pt = "SHLIB"; break;
961 case PT_PHDR: pt = "PHDR"; break;
13ae64f3 962 case PT_TLS: pt = "TLS"; break;
65765700 963 case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
dc810e39 964 default: sprintf (buf, "0x%lx", p->p_type); pt = buf; break;
252b5132 965 }
dc810e39 966 fprintf (f, "%8s off 0x", pt);
60b89a18 967 bfd_fprintf_vma (abfd, f, p->p_offset);
252b5132 968 fprintf (f, " vaddr 0x");
60b89a18 969 bfd_fprintf_vma (abfd, f, p->p_vaddr);
252b5132 970 fprintf (f, " paddr 0x");
60b89a18 971 bfd_fprintf_vma (abfd, f, p->p_paddr);
252b5132
RH
972 fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
973 fprintf (f, " filesz 0x");
60b89a18 974 bfd_fprintf_vma (abfd, f, p->p_filesz);
252b5132 975 fprintf (f, " memsz 0x");
60b89a18 976 bfd_fprintf_vma (abfd, f, p->p_memsz);
252b5132
RH
977 fprintf (f, " flags %c%c%c",
978 (p->p_flags & PF_R) != 0 ? 'r' : '-',
979 (p->p_flags & PF_W) != 0 ? 'w' : '-',
980 (p->p_flags & PF_X) != 0 ? 'x' : '-');
dc810e39
AM
981 if ((p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X)) != 0)
982 fprintf (f, " %lx", p->p_flags &~ (unsigned) (PF_R | PF_W | PF_X));
252b5132
RH
983 fprintf (f, "\n");
984 }
985 }
986
987 s = bfd_get_section_by_name (abfd, ".dynamic");
988 if (s != NULL)
989 {
990 int elfsec;
dc810e39 991 unsigned long shlink;
252b5132
RH
992 bfd_byte *extdyn, *extdynend;
993 size_t extdynsize;
994 void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
995
996 fprintf (f, _("\nDynamic Section:\n"));
997
998 dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
999 if (dynbuf == NULL)
1000 goto error_return;
1001 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
1002 s->_raw_size))
1003 goto error_return;
1004
1005 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1006 if (elfsec == -1)
1007 goto error_return;
dc810e39 1008 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
252b5132
RH
1009
1010 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1011 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1012
1013 extdyn = dynbuf;
1014 extdynend = extdyn + s->_raw_size;
1015 for (; extdyn < extdynend; extdyn += extdynsize)
1016 {
1017 Elf_Internal_Dyn dyn;
1018 const char *name;
1019 char ab[20];
1020 boolean stringp;
1021
1022 (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
1023
1024 if (dyn.d_tag == DT_NULL)
1025 break;
1026
1027 stringp = false;
1028 switch (dyn.d_tag)
1029 {
1030 default:
1031 sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
1032 name = ab;
1033 break;
1034
1035 case DT_NEEDED: name = "NEEDED"; stringp = true; break;
1036 case DT_PLTRELSZ: name = "PLTRELSZ"; break;
1037 case DT_PLTGOT: name = "PLTGOT"; break;
1038 case DT_HASH: name = "HASH"; break;
1039 case DT_STRTAB: name = "STRTAB"; break;
1040 case DT_SYMTAB: name = "SYMTAB"; break;
1041 case DT_RELA: name = "RELA"; break;
1042 case DT_RELASZ: name = "RELASZ"; break;
1043 case DT_RELAENT: name = "RELAENT"; break;
1044 case DT_STRSZ: name = "STRSZ"; break;
1045 case DT_SYMENT: name = "SYMENT"; break;
1046 case DT_INIT: name = "INIT"; break;
1047 case DT_FINI: name = "FINI"; break;
1048 case DT_SONAME: name = "SONAME"; stringp = true; break;
1049 case DT_RPATH: name = "RPATH"; stringp = true; break;
1050 case DT_SYMBOLIC: name = "SYMBOLIC"; break;
1051 case DT_REL: name = "REL"; break;
1052 case DT_RELSZ: name = "RELSZ"; break;
1053 case DT_RELENT: name = "RELENT"; break;
1054 case DT_PLTREL: name = "PLTREL"; break;
1055 case DT_DEBUG: name = "DEBUG"; break;
1056 case DT_TEXTREL: name = "TEXTREL"; break;
1057 case DT_JMPREL: name = "JMPREL"; break;
94558834
L
1058 case DT_BIND_NOW: name = "BIND_NOW"; break;
1059 case DT_INIT_ARRAY: name = "INIT_ARRAY"; break;
1060 case DT_FINI_ARRAY: name = "FINI_ARRAY"; break;
1061 case DT_INIT_ARRAYSZ: name = "INIT_ARRAYSZ"; break;
1062 case DT_FINI_ARRAYSZ: name = "FINI_ARRAYSZ"; break;
1063 case DT_RUNPATH: name = "RUNPATH"; stringp = true; break;
1064 case DT_FLAGS: name = "FLAGS"; break;
1065 case DT_PREINIT_ARRAY: name = "PREINIT_ARRAY"; break;
1066 case DT_PREINIT_ARRAYSZ: name = "PREINIT_ARRAYSZ"; break;
d48188b9 1067 case DT_CHECKSUM: name = "CHECKSUM"; break;
94558834
L
1068 case DT_PLTPADSZ: name = "PLTPADSZ"; break;
1069 case DT_MOVEENT: name = "MOVEENT"; break;
1070 case DT_MOVESZ: name = "MOVESZ"; break;
1071 case DT_FEATURE: name = "FEATURE"; break;
1072 case DT_POSFLAG_1: name = "POSFLAG_1"; break;
1073 case DT_SYMINSZ: name = "SYMINSZ"; break;
1074 case DT_SYMINENT: name = "SYMINENT"; break;
36a30e65
L
1075 case DT_CONFIG: name = "CONFIG"; stringp = true; break;
1076 case DT_DEPAUDIT: name = "DEPAUDIT"; stringp = true; break;
1077 case DT_AUDIT: name = "AUDIT"; stringp = true; break;
94558834
L
1078 case DT_PLTPAD: name = "PLTPAD"; break;
1079 case DT_MOVETAB: name = "MOVETAB"; break;
1080 case DT_SYMINFO: name = "SYMINFO"; break;
1081 case DT_RELACOUNT: name = "RELACOUNT"; break;
1082 case DT_RELCOUNT: name = "RELCOUNT"; break;
1083 case DT_FLAGS_1: name = "FLAGS_1"; break;
252b5132
RH
1084 case DT_VERSYM: name = "VERSYM"; break;
1085 case DT_VERDEF: name = "VERDEF"; break;
1086 case DT_VERDEFNUM: name = "VERDEFNUM"; break;
1087 case DT_VERNEED: name = "VERNEED"; break;
1088 case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
94558834
L
1089 case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
1090 case DT_USED: name = "USED"; break;
1091 case DT_FILTER: name = "FILTER"; stringp = true; break;
252b5132
RH
1092 }
1093
1094 fprintf (f, " %-11s ", name);
1095 if (! stringp)
1096 fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
1097 else
1098 {
1099 const char *string;
dc810e39 1100 unsigned int tagv = dyn.d_un.d_val;
252b5132 1101
dc810e39 1102 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
252b5132
RH
1103 if (string == NULL)
1104 goto error_return;
1105 fprintf (f, "%s", string);
1106 }
1107 fprintf (f, "\n");
1108 }
1109
1110 free (dynbuf);
1111 dynbuf = NULL;
1112 }
1113
1114 if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
1115 || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
1116 {
1117 if (! _bfd_elf_slurp_version_tables (abfd))
1118 return false;
1119 }
1120
1121 if (elf_dynverdef (abfd) != 0)
1122 {
1123 Elf_Internal_Verdef *t;
1124
1125 fprintf (f, _("\nVersion definitions:\n"));
1126 for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
1127 {
1128 fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
1129 t->vd_flags, t->vd_hash, t->vd_nodename);
1130 if (t->vd_auxptr->vda_nextptr != NULL)
1131 {
1132 Elf_Internal_Verdaux *a;
1133
1134 fprintf (f, "\t");
1135 for (a = t->vd_auxptr->vda_nextptr;
1136 a != NULL;
1137 a = a->vda_nextptr)
1138 fprintf (f, "%s ", a->vda_nodename);
1139 fprintf (f, "\n");
1140 }
1141 }
1142 }
1143
1144 if (elf_dynverref (abfd) != 0)
1145 {
1146 Elf_Internal_Verneed *t;
1147
1148 fprintf (f, _("\nVersion References:\n"));
1149 for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
1150 {
1151 Elf_Internal_Vernaux *a;
1152
1153 fprintf (f, _(" required from %s:\n"), t->vn_filename);
1154 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1155 fprintf (f, " 0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
1156 a->vna_flags, a->vna_other, a->vna_nodename);
1157 }
1158 }
1159
1160 return true;
1161
1162 error_return:
1163 if (dynbuf != NULL)
1164 free (dynbuf);
1165 return false;
1166}
1167
1168/* Display ELF-specific fields of a symbol. */
1169
1170void
1171bfd_elf_print_symbol (abfd, filep, symbol, how)
1172 bfd *abfd;
1173 PTR filep;
1174 asymbol *symbol;
1175 bfd_print_symbol_type how;
1176{
1177 FILE *file = (FILE *) filep;
1178 switch (how)
1179 {
1180 case bfd_print_symbol_name:
1181 fprintf (file, "%s", symbol->name);
1182 break;
1183 case bfd_print_symbol_more:
1184 fprintf (file, "elf ");
60b89a18 1185 bfd_fprintf_vma (abfd, file, symbol->value);
252b5132
RH
1186 fprintf (file, " %lx", (long) symbol->flags);
1187 break;
1188 case bfd_print_symbol_all:
1189 {
4e8a9624
AM
1190 const char *section_name;
1191 const char *name = NULL;
587ff49e 1192 struct elf_backend_data *bed;
7a13edea 1193 unsigned char st_other;
dbb410c3 1194 bfd_vma val;
c044fabd 1195
252b5132 1196 section_name = symbol->section ? symbol->section->name : "(*none*)";
587ff49e
RH
1197
1198 bed = get_elf_backend_data (abfd);
1199 if (bed->elf_backend_print_symbol_all)
c044fabd 1200 name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
587ff49e
RH
1201
1202 if (name == NULL)
1203 {
7ee38065 1204 name = symbol->name;
60b89a18 1205 bfd_print_symbol_vandf (abfd, (PTR) file, symbol);
587ff49e
RH
1206 }
1207
252b5132
RH
1208 fprintf (file, " %s\t", section_name);
1209 /* Print the "other" value for a symbol. For common symbols,
1210 we've already printed the size; now print the alignment.
1211 For other symbols, we have no specified alignment, and
1212 we've printed the address; now print the size. */
dbb410c3
AM
1213 if (bfd_is_com_section (symbol->section))
1214 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_value;
1215 else
1216 val = ((elf_symbol_type *) symbol)->internal_elf_sym.st_size;
1217 bfd_fprintf_vma (abfd, file, val);
252b5132
RH
1218
1219 /* If we have version information, print it. */
1220 if (elf_tdata (abfd)->dynversym_section != 0
1221 && (elf_tdata (abfd)->dynverdef_section != 0
1222 || elf_tdata (abfd)->dynverref_section != 0))
1223 {
1224 unsigned int vernum;
1225 const char *version_string;
1226
1227 vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
1228
1229 if (vernum == 0)
1230 version_string = "";
1231 else if (vernum == 1)
1232 version_string = "Base";
1233 else if (vernum <= elf_tdata (abfd)->cverdefs)
1234 version_string =
1235 elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
1236 else
1237 {
1238 Elf_Internal_Verneed *t;
1239
1240 version_string = "";
1241 for (t = elf_tdata (abfd)->verref;
1242 t != NULL;
1243 t = t->vn_nextref)
1244 {
1245 Elf_Internal_Vernaux *a;
1246
1247 for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
1248 {
1249 if (a->vna_other == vernum)
1250 {
1251 version_string = a->vna_nodename;
1252 break;
1253 }
1254 }
1255 }
1256 }
1257
1258 if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
1259 fprintf (file, " %-11s", version_string);
1260 else
1261 {
1262 int i;
1263
1264 fprintf (file, " (%s)", version_string);
1265 for (i = 10 - strlen (version_string); i > 0; --i)
1266 putc (' ', file);
1267 }
1268 }
1269
1270 /* If the st_other field is not zero, print it. */
7a13edea 1271 st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
c044fabd 1272
7a13edea
NC
1273 switch (st_other)
1274 {
1275 case 0: break;
1276 case STV_INTERNAL: fprintf (file, " .internal"); break;
1277 case STV_HIDDEN: fprintf (file, " .hidden"); break;
1278 case STV_PROTECTED: fprintf (file, " .protected"); break;
1279 default:
1280 /* Some other non-defined flags are also present, so print
1281 everything hex. */
1282 fprintf (file, " 0x%02x", (unsigned int) st_other);
1283 }
252b5132 1284
587ff49e 1285 fprintf (file, " %s", name);
252b5132
RH
1286 }
1287 break;
1288 }
1289}
1290\f
1291/* Create an entry in an ELF linker hash table. */
1292
1293struct bfd_hash_entry *
1294_bfd_elf_link_hash_newfunc (entry, table, string)
1295 struct bfd_hash_entry *entry;
1296 struct bfd_hash_table *table;
1297 const char *string;
1298{
252b5132
RH
1299 /* Allocate the structure if it has not already been allocated by a
1300 subclass. */
51b64d56
AM
1301 if (entry == NULL)
1302 {
1303 entry = bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry));
1304 if (entry == NULL)
1305 return entry;
1306 }
252b5132
RH
1307
1308 /* Call the allocation method of the superclass. */
51b64d56
AM
1309 entry = _bfd_link_hash_newfunc (entry, table, string);
1310 if (entry != NULL)
252b5132 1311 {
51b64d56
AM
1312 struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
1313 struct elf_link_hash_table *htab = (struct elf_link_hash_table *) table;
1314
252b5132
RH
1315 /* Set local fields. */
1316 ret->indx = -1;
1317 ret->size = 0;
1318 ret->dynindx = -1;
1319 ret->dynstr_index = 0;
1320 ret->weakdef = NULL;
51b64d56
AM
1321 ret->got.refcount = htab->init_refcount;
1322 ret->plt.refcount = htab->init_refcount;
1323 ret->linker_section_pointer = NULL;
252b5132
RH
1324 ret->verinfo.verdef = NULL;
1325 ret->vtable_entries_used = NULL;
1326 ret->vtable_entries_size = 0;
1327 ret->vtable_parent = NULL;
1328 ret->type = STT_NOTYPE;
1329 ret->other = 0;
1330 /* Assume that we have been called by a non-ELF symbol reader.
1331 This flag is then reset by the code which reads an ELF input
1332 file. This ensures that a symbol created by a non-ELF symbol
1333 reader will have the flag set correctly. */
1334 ret->elf_link_hash_flags = ELF_LINK_NON_ELF;
1335 }
1336
51b64d56 1337 return entry;
252b5132
RH
1338}
1339
2920b85c 1340/* Copy data from an indirect symbol to its direct symbol, hiding the
0a991dfe 1341 old indirect symbol. Also used for copying flags to a weakdef. */
2920b85c 1342
c61b8717
RH
1343void
1344_bfd_elf_link_hash_copy_indirect (dir, ind)
2920b85c
RH
1345 struct elf_link_hash_entry *dir, *ind;
1346{
3c3e9281
AM
1347 bfd_signed_vma tmp;
1348
2920b85c
RH
1349 /* Copy down any references that we may have already seen to the
1350 symbol which just became indirect. */
1351
1352 dir->elf_link_hash_flags |=
1353 (ind->elf_link_hash_flags
1354 & (ELF_LINK_HASH_REF_DYNAMIC
1355 | ELF_LINK_HASH_REF_REGULAR
1356 | ELF_LINK_HASH_REF_REGULAR_NONWEAK
1357 | ELF_LINK_NON_GOT_REF));
1358
1e370bd2 1359 if (ind->root.type != bfd_link_hash_indirect)
0a991dfe
AM
1360 return;
1361
51b64d56 1362 /* Copy over the global and procedure linkage table refcount entries.
2920b85c 1363 These may have been already set up by a check_relocs routine. */
3c3e9281
AM
1364 tmp = dir->got.refcount;
1365 if (tmp <= 0)
2920b85c 1366 {
51b64d56 1367 dir->got.refcount = ind->got.refcount;
3c3e9281 1368 ind->got.refcount = tmp;
2920b85c 1369 }
3c3e9281
AM
1370 else
1371 BFD_ASSERT (ind->got.refcount <= 0);
2920b85c 1372
3c3e9281
AM
1373 tmp = dir->plt.refcount;
1374 if (tmp <= 0)
2920b85c 1375 {
51b64d56 1376 dir->plt.refcount = ind->plt.refcount;
3c3e9281 1377 ind->plt.refcount = tmp;
2920b85c 1378 }
3c3e9281
AM
1379 else
1380 BFD_ASSERT (ind->plt.refcount <= 0);
2920b85c
RH
1381
1382 if (dir->dynindx == -1)
1383 {
1384 dir->dynindx = ind->dynindx;
1385 dir->dynstr_index = ind->dynstr_index;
1386 ind->dynindx = -1;
1387 ind->dynstr_index = 0;
1388 }
3c3e9281
AM
1389 else
1390 BFD_ASSERT (ind->dynindx == -1);
2920b85c
RH
1391}
1392
c61b8717 1393void
e5094212
AM
1394_bfd_elf_link_hash_hide_symbol (info, h, force_local)
1395 struct bfd_link_info *info;
2920b85c 1396 struct elf_link_hash_entry *h;
e5094212 1397 boolean force_local;
2920b85c 1398{
2920b85c 1399 h->plt.offset = (bfd_vma) -1;
e5094212
AM
1400 h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
1401 if (force_local)
1402 {
1403 h->elf_link_hash_flags |= ELF_LINK_FORCED_LOCAL;
1404 if (h->dynindx != -1)
1405 {
1406 h->dynindx = -1;
1407 _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
1408 h->dynstr_index);
1409 }
1410 }
2920b85c
RH
1411}
1412
252b5132
RH
1413/* Initialize an ELF linker hash table. */
1414
1415boolean
1416_bfd_elf_link_hash_table_init (table, abfd, newfunc)
1417 struct elf_link_hash_table *table;
1418 bfd *abfd;
1419 struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
1420 struct bfd_hash_table *,
1421 const char *));
1422{
8ea2e4bd
NC
1423 boolean ret;
1424
252b5132
RH
1425 table->dynamic_sections_created = false;
1426 table->dynobj = NULL;
51b64d56 1427 table->init_refcount = get_elf_backend_data (abfd)->can_refcount - 1;
252b5132
RH
1428 /* The first dynamic symbol is a dummy. */
1429 table->dynsymcount = 1;
1430 table->dynstr = NULL;
1431 table->bucketcount = 0;
1432 table->needed = NULL;
a963dc6a 1433 table->runpath = NULL;
252b5132
RH
1434 table->hgot = NULL;
1435 table->stab_info = NULL;
f5fa8ca2 1436 table->merge_info = NULL;
1ae00f9d 1437 table->dynlocal = NULL;
8ea2e4bd
NC
1438 ret = _bfd_link_hash_table_init (& table->root, abfd, newfunc);
1439 table->root.type = bfd_link_elf_hash_table;
1440
1441 return ret;
252b5132
RH
1442}
1443
1444/* Create an ELF linker hash table. */
1445
1446struct bfd_link_hash_table *
1447_bfd_elf_link_hash_table_create (abfd)
1448 bfd *abfd;
1449{
1450 struct elf_link_hash_table *ret;
dc810e39 1451 bfd_size_type amt = sizeof (struct elf_link_hash_table);
252b5132 1452
e2d34d7d 1453 ret = (struct elf_link_hash_table *) bfd_malloc (amt);
252b5132
RH
1454 if (ret == (struct elf_link_hash_table *) NULL)
1455 return NULL;
1456
1457 if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
1458 {
e2d34d7d 1459 free (ret);
252b5132
RH
1460 return NULL;
1461 }
1462
1463 return &ret->root;
1464}
1465
1466/* This is a hook for the ELF emulation code in the generic linker to
1467 tell the backend linker what file name to use for the DT_NEEDED
1468 entry for a dynamic object. The generic linker passes name as an
1469 empty string to indicate that no DT_NEEDED entry should be made. */
1470
1471void
1472bfd_elf_set_dt_needed_name (abfd, name)
1473 bfd *abfd;
1474 const char *name;
1475{
1476 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1477 && bfd_get_format (abfd) == bfd_object)
1478 elf_dt_name (abfd) = name;
1479}
1480
74816898
L
1481void
1482bfd_elf_set_dt_needed_soname (abfd, name)
1483 bfd *abfd;
1484 const char *name;
1485{
1486 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1487 && bfd_get_format (abfd) == bfd_object)
1488 elf_dt_soname (abfd) = name;
1489}
1490
252b5132
RH
1491/* Get the list of DT_NEEDED entries for a link. This is a hook for
1492 the linker ELF emulation code. */
1493
1494struct bfd_link_needed_list *
1495bfd_elf_get_needed_list (abfd, info)
7442e600 1496 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
1497 struct bfd_link_info *info;
1498{
1499 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1500 return NULL;
1501 return elf_hash_table (info)->needed;
1502}
1503
a963dc6a
L
1504/* Get the list of DT_RPATH/DT_RUNPATH entries for a link. This is a
1505 hook for the linker ELF emulation code. */
1506
1507struct bfd_link_needed_list *
1508bfd_elf_get_runpath_list (abfd, info)
1509 bfd *abfd ATTRIBUTE_UNUSED;
1510 struct bfd_link_info *info;
1511{
1512 if (info->hash->creator->flavour != bfd_target_elf_flavour)
1513 return NULL;
1514 return elf_hash_table (info)->runpath;
1515}
1516
252b5132
RH
1517/* Get the name actually used for a dynamic object for a link. This
1518 is the SONAME entry if there is one. Otherwise, it is the string
1519 passed to bfd_elf_set_dt_needed_name, or it is the filename. */
1520
1521const char *
1522bfd_elf_get_dt_soname (abfd)
1523 bfd *abfd;
1524{
1525 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1526 && bfd_get_format (abfd) == bfd_object)
1527 return elf_dt_name (abfd);
1528 return NULL;
1529}
1530
1531/* Get the list of DT_NEEDED entries from a BFD. This is a hook for
1532 the ELF linker emulation code. */
1533
1534boolean
1535bfd_elf_get_bfd_needed_list (abfd, pneeded)
1536 bfd *abfd;
1537 struct bfd_link_needed_list **pneeded;
1538{
1539 asection *s;
1540 bfd_byte *dynbuf = NULL;
1541 int elfsec;
dc810e39 1542 unsigned long shlink;
252b5132
RH
1543 bfd_byte *extdyn, *extdynend;
1544 size_t extdynsize;
1545 void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1546
1547 *pneeded = NULL;
1548
1549 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
1550 || bfd_get_format (abfd) != bfd_object)
1551 return true;
1552
1553 s = bfd_get_section_by_name (abfd, ".dynamic");
1554 if (s == NULL || s->_raw_size == 0)
1555 return true;
1556
1557 dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
1558 if (dynbuf == NULL)
1559 goto error_return;
1560
1561 if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
1562 s->_raw_size))
1563 goto error_return;
1564
1565 elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1566 if (elfsec == -1)
1567 goto error_return;
1568
dc810e39 1569 shlink = elf_elfsections (abfd)[elfsec]->sh_link;
252b5132
RH
1570
1571 extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1572 swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1573
1574 extdyn = dynbuf;
1575 extdynend = extdyn + s->_raw_size;
1576 for (; extdyn < extdynend; extdyn += extdynsize)
1577 {
1578 Elf_Internal_Dyn dyn;
1579
1580 (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
1581
1582 if (dyn.d_tag == DT_NULL)
1583 break;
1584
1585 if (dyn.d_tag == DT_NEEDED)
1586 {
1587 const char *string;
1588 struct bfd_link_needed_list *l;
dc810e39
AM
1589 unsigned int tagv = dyn.d_un.d_val;
1590 bfd_size_type amt;
252b5132 1591
dc810e39 1592 string = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
252b5132
RH
1593 if (string == NULL)
1594 goto error_return;
1595
dc810e39
AM
1596 amt = sizeof *l;
1597 l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
252b5132
RH
1598 if (l == NULL)
1599 goto error_return;
1600
1601 l->by = abfd;
1602 l->name = string;
1603 l->next = *pneeded;
1604 *pneeded = l;
1605 }
1606 }
1607
1608 free (dynbuf);
1609
1610 return true;
1611
1612 error_return:
1613 if (dynbuf != NULL)
1614 free (dynbuf);
1615 return false;
1616}
1617\f
1618/* Allocate an ELF string table--force the first byte to be zero. */
1619
1620struct bfd_strtab_hash *
1621_bfd_elf_stringtab_init ()
1622{
1623 struct bfd_strtab_hash *ret;
1624
1625 ret = _bfd_stringtab_init ();
1626 if (ret != NULL)
1627 {
1628 bfd_size_type loc;
1629
1630 loc = _bfd_stringtab_add (ret, "", true, false);
1631 BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1632 if (loc == (bfd_size_type) -1)
1633 {
1634 _bfd_stringtab_free (ret);
1635 ret = NULL;
1636 }
1637 }
1638 return ret;
1639}
1640\f
1641/* ELF .o/exec file reading */
1642
c044fabd 1643/* Create a new bfd section from an ELF section header. */
252b5132
RH
1644
1645boolean
1646bfd_section_from_shdr (abfd, shindex)
1647 bfd *abfd;
1648 unsigned int shindex;
1649{
1650 Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
1651 Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
1652 struct elf_backend_data *bed = get_elf_backend_data (abfd);
90937f86 1653 const char *name;
252b5132
RH
1654
1655 name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
1656
1657 switch (hdr->sh_type)
1658 {
1659 case SHT_NULL:
1660 /* Inactive section. Throw it away. */
1661 return true;
1662
1663 case SHT_PROGBITS: /* Normal section with contents. */
1664 case SHT_DYNAMIC: /* Dynamic linking information. */
1665 case SHT_NOBITS: /* .bss section. */
1666 case SHT_HASH: /* .hash section. */
1667 case SHT_NOTE: /* .note section. */
25e27870
L
1668 case SHT_INIT_ARRAY: /* .init_array section. */
1669 case SHT_FINI_ARRAY: /* .fini_array section. */
1670 case SHT_PREINIT_ARRAY: /* .preinit_array section. */
252b5132
RH
1671 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1672
1673 case SHT_SYMTAB: /* A symbol table */
1674 if (elf_onesymtab (abfd) == shindex)
1675 return true;
1676
1677 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1678 BFD_ASSERT (elf_onesymtab (abfd) == 0);
1679 elf_onesymtab (abfd) = shindex;
1680 elf_tdata (abfd)->symtab_hdr = *hdr;
1681 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1682 abfd->flags |= HAS_SYMS;
1683
1684 /* Sometimes a shared object will map in the symbol table. If
1685 SHF_ALLOC is set, and this is a shared object, then we also
1686 treat this section as a BFD section. We can not base the
1687 decision purely on SHF_ALLOC, because that flag is sometimes
1688 set in a relocateable object file, which would confuse the
1689 linker. */
1690 if ((hdr->sh_flags & SHF_ALLOC) != 0
1691 && (abfd->flags & DYNAMIC) != 0
1692 && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
1693 return false;
1694
1695 return true;
1696
1697 case SHT_DYNSYM: /* A dynamic symbol table */
1698 if (elf_dynsymtab (abfd) == shindex)
1699 return true;
1700
1701 BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1702 BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1703 elf_dynsymtab (abfd) = shindex;
1704 elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1705 elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1706 abfd->flags |= HAS_SYMS;
1707
1708 /* Besides being a symbol table, we also treat this as a regular
1709 section, so that objcopy can handle it. */
1710 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1711
9ad5cbcf
AM
1712 case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */
1713 if (elf_symtab_shndx (abfd) == shindex)
1714 return true;
1715
1716 /* Get the associated symbol table. */
1717 if (! bfd_section_from_shdr (abfd, hdr->sh_link)
1718 || hdr->sh_link != elf_onesymtab (abfd))
1719 return false;
1720
1721 elf_symtab_shndx (abfd) = shindex;
1722 elf_tdata (abfd)->symtab_shndx_hdr = *hdr;
1723 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->symtab_shndx_hdr;
1724 return true;
1725
252b5132
RH
1726 case SHT_STRTAB: /* A string table */
1727 if (hdr->bfd_section != NULL)
1728 return true;
1729 if (ehdr->e_shstrndx == shindex)
1730 {
1731 elf_tdata (abfd)->shstrtab_hdr = *hdr;
1732 elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1733 return true;
1734 }
1735 {
9ad5cbcf 1736 unsigned int i, num_sec;
252b5132 1737
9ad5cbcf
AM
1738 num_sec = elf_numsections (abfd);
1739 for (i = 1; i < num_sec; i++)
252b5132
RH
1740 {
1741 Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1742 if (hdr2->sh_link == shindex)
1743 {
1744 if (! bfd_section_from_shdr (abfd, i))
1745 return false;
1746 if (elf_onesymtab (abfd) == i)
1747 {
1748 elf_tdata (abfd)->strtab_hdr = *hdr;
1749 elf_elfsections (abfd)[shindex] =
1750 &elf_tdata (abfd)->strtab_hdr;
1751 return true;
1752 }
1753 if (elf_dynsymtab (abfd) == i)
1754 {
1755 elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1756 elf_elfsections (abfd)[shindex] = hdr =
1757 &elf_tdata (abfd)->dynstrtab_hdr;
1758 /* We also treat this as a regular section, so
1759 that objcopy can handle it. */
1760 break;
1761 }
1762#if 0 /* Not handling other string tables specially right now. */
1763 hdr2 = elf_elfsections (abfd)[i]; /* in case it moved */
1764 /* We have a strtab for some random other section. */
1765 newsect = (asection *) hdr2->bfd_section;
1766 if (!newsect)
1767 break;
1768 hdr->bfd_section = newsect;
1769 hdr2 = &elf_section_data (newsect)->str_hdr;
1770 *hdr2 = *hdr;
1771 elf_elfsections (abfd)[shindex] = hdr2;
1772#endif
1773 }
1774 }
1775 }
1776
1777 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1778
1779 case SHT_REL:
1780 case SHT_RELA:
1781 /* *These* do a lot of work -- but build no sections! */
1782 {
1783 asection *target_sect;
1784 Elf_Internal_Shdr *hdr2;
9ad5cbcf 1785 unsigned int num_sec = elf_numsections (abfd);
252b5132 1786
03ae5f59 1787 /* Check for a bogus link to avoid crashing. */
9ad5cbcf
AM
1788 if ((hdr->sh_link >= SHN_LORESERVE && hdr->sh_link <= SHN_HIRESERVE)
1789 || hdr->sh_link >= num_sec)
03ae5f59
ILT
1790 {
1791 ((*_bfd_error_handler)
1792 (_("%s: invalid link %lu for reloc section %s (index %u)"),
8f615d07 1793 bfd_archive_filename (abfd), hdr->sh_link, name, shindex));
03ae5f59
ILT
1794 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1795 }
1796
252b5132
RH
1797 /* For some incomprehensible reason Oracle distributes
1798 libraries for Solaris in which some of the objects have
1799 bogus sh_link fields. It would be nice if we could just
1800 reject them, but, unfortunately, some people need to use
1801 them. We scan through the section headers; if we find only
1802 one suitable symbol table, we clobber the sh_link to point
1803 to it. I hope this doesn't break anything. */
1804 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1805 && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1806 {
9ad5cbcf 1807 unsigned int scan;
252b5132
RH
1808 int found;
1809
1810 found = 0;
9ad5cbcf 1811 for (scan = 1; scan < num_sec; scan++)
252b5132
RH
1812 {
1813 if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1814 || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1815 {
1816 if (found != 0)
1817 {
1818 found = 0;
1819 break;
1820 }
1821 found = scan;
1822 }
1823 }
1824 if (found != 0)
1825 hdr->sh_link = found;
1826 }
1827
1828 /* Get the symbol table. */
1829 if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1830 && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1831 return false;
1832
1833 /* If this reloc section does not use the main symbol table we
1834 don't treat it as a reloc section. BFD can't adequately
1835 represent such a section, so at least for now, we don't
c044fabd 1836 try. We just present it as a normal section. We also
60bcf0fa 1837 can't use it as a reloc section if it points to the null
c044fabd 1838 section. */
60bcf0fa 1839 if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF)
252b5132
RH
1840 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1841
1842 if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1843 return false;
1844 target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1845 if (target_sect == NULL)
1846 return false;
1847
1848 if ((target_sect->flags & SEC_RELOC) == 0
1849 || target_sect->reloc_count == 0)
1850 hdr2 = &elf_section_data (target_sect)->rel_hdr;
1851 else
1852 {
dc810e39 1853 bfd_size_type amt;
252b5132 1854 BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
dc810e39
AM
1855 amt = sizeof (*hdr2);
1856 hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
252b5132
RH
1857 elf_section_data (target_sect)->rel_hdr2 = hdr2;
1858 }
1859 *hdr2 = *hdr;
1860 elf_elfsections (abfd)[shindex] = hdr2;
d9bc7a44 1861 target_sect->reloc_count += NUM_SHDR_ENTRIES (hdr);
252b5132
RH
1862 target_sect->flags |= SEC_RELOC;
1863 target_sect->relocation = NULL;
1864 target_sect->rel_filepos = hdr->sh_offset;
bf572ba0
MM
1865 /* In the section to which the relocations apply, mark whether
1866 its relocations are of the REL or RELA variety. */
72730e0c
AM
1867 if (hdr->sh_size != 0)
1868 elf_section_data (target_sect)->use_rela_p
1869 = (hdr->sh_type == SHT_RELA);
252b5132
RH
1870 abfd->flags |= HAS_RELOC;
1871 return true;
1872 }
1873 break;
1874
1875 case SHT_GNU_verdef:
1876 elf_dynverdef (abfd) = shindex;
1877 elf_tdata (abfd)->dynverdef_hdr = *hdr;
1878 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1879 break;
1880
1881 case SHT_GNU_versym:
1882 elf_dynversym (abfd) = shindex;
1883 elf_tdata (abfd)->dynversym_hdr = *hdr;
1884 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1885 break;
1886
1887 case SHT_GNU_verneed:
1888 elf_dynverref (abfd) = shindex;
1889 elf_tdata (abfd)->dynverref_hdr = *hdr;
1890 return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1891 break;
1892
1893 case SHT_SHLIB:
1894 return true;
1895
dbb410c3 1896 case SHT_GROUP:
b885599b
AM
1897 /* We need a BFD section for objcopy and relocatable linking,
1898 and it's handy to have the signature available as the section
1899 name. */
1900 name = group_signature (abfd, hdr);
1901 if (name == NULL)
1902 return false;
dbb410c3
AM
1903 if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name))
1904 return false;
1905 if (hdr->contents != NULL)
1906 {
1907 Elf_Internal_Group *idx = (Elf_Internal_Group *) hdr->contents;
1908 unsigned int n_elt = hdr->sh_size / 4;
1909 asection *s;
1910
b885599b
AM
1911 if (idx->flags & GRP_COMDAT)
1912 hdr->bfd_section->flags
1913 |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
1914
dbb410c3
AM
1915 while (--n_elt != 0)
1916 if ((s = (++idx)->shdr->bfd_section) != NULL
945906ff 1917 && elf_next_in_group (s) != NULL)
dbb410c3 1918 {
945906ff 1919 elf_next_in_group (hdr->bfd_section) = s;
dbb410c3
AM
1920 break;
1921 }
1922 }
1923 break;
1924
252b5132
RH
1925 default:
1926 /* Check for any processor-specific section types. */
1927 {
1928 if (bed->elf_backend_section_from_shdr)
1929 (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
1930 }
1931 break;
1932 }
1933
1934 return true;
1935}
1936
ec338859
AM
1937/* Return the section for the local symbol specified by ABFD, R_SYMNDX.
1938 Return SEC for sections that have no elf section, and NULL on error. */
1939
1940asection *
1941bfd_section_from_r_symndx (abfd, cache, sec, r_symndx)
1942 bfd *abfd;
1943 struct sym_sec_cache *cache;
1944 asection *sec;
1945 unsigned long r_symndx;
1946{
9ad5cbcf 1947 unsigned char esym_shndx[4];
ec338859
AM
1948 unsigned int isym_shndx;
1949 Elf_Internal_Shdr *symtab_hdr;
1950 file_ptr pos;
1951 bfd_size_type amt;
1952 unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE;
1953
1954 if (cache->abfd == abfd && cache->indx[ent] == r_symndx)
1955 return cache->sec[ent];
1956
1957 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
1958 pos = symtab_hdr->sh_offset;
1959 if (get_elf_backend_data (abfd)->s->sizeof_sym
1960 == sizeof (Elf64_External_Sym))
1961 {
1962 pos += r_symndx * sizeof (Elf64_External_Sym);
1963 pos += offsetof (Elf64_External_Sym, st_shndx);
9ad5cbcf 1964 amt = sizeof (((Elf64_External_Sym *) 0)->st_shndx);
ec338859
AM
1965 }
1966 else
1967 {
1968 pos += r_symndx * sizeof (Elf32_External_Sym);
1969 pos += offsetof (Elf32_External_Sym, st_shndx);
9ad5cbcf 1970 amt = sizeof (((Elf32_External_Sym *) 0)->st_shndx);
ec338859 1971 }
ec338859
AM
1972 if (bfd_seek (abfd, pos, SEEK_SET) != 0
1973 || bfd_bread ((PTR) esym_shndx, amt, abfd) != amt)
1974 return NULL;
1975 isym_shndx = H_GET_16 (abfd, esym_shndx);
1976
9ad5cbcf
AM
1977 if (isym_shndx == SHN_XINDEX)
1978 {
1979 Elf_Internal_Shdr *shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
1980 if (shndx_hdr->sh_size != 0)
1981 {
1982 pos = shndx_hdr->sh_offset;
1983 pos += r_symndx * sizeof (Elf_External_Sym_Shndx);
1984 amt = sizeof (Elf_External_Sym_Shndx);
1985 if (bfd_seek (abfd, pos, SEEK_SET) != 0
1986 || bfd_bread ((PTR) esym_shndx, amt, abfd) != amt)
1987 return NULL;
1988 isym_shndx = H_GET_32 (abfd, esym_shndx);
1989 }
1990 }
1991
ec338859
AM
1992 if (cache->abfd != abfd)
1993 {
1994 memset (cache->indx, -1, sizeof (cache->indx));
1995 cache->abfd = abfd;
1996 }
1997 cache->indx[ent] = r_symndx;
1998 cache->sec[ent] = sec;
9ad5cbcf 1999 if (isym_shndx < SHN_LORESERVE || isym_shndx > SHN_HIRESERVE)
ec338859
AM
2000 {
2001 asection *s;
2002 s = bfd_section_from_elf_index (abfd, isym_shndx);
2003 if (s != NULL)
2004 cache->sec[ent] = s;
2005 }
2006 return cache->sec[ent];
2007}
2008
252b5132
RH
2009/* Given an ELF section number, retrieve the corresponding BFD
2010 section. */
2011
2012asection *
2013bfd_section_from_elf_index (abfd, index)
2014 bfd *abfd;
2015 unsigned int index;
2016{
9ad5cbcf 2017 if (index >= elf_numsections (abfd))
252b5132
RH
2018 return NULL;
2019 return elf_elfsections (abfd)[index]->bfd_section;
2020}
2021
2022boolean
2023_bfd_elf_new_section_hook (abfd, sec)
2024 bfd *abfd;
2025 asection *sec;
2026{
2027 struct bfd_elf_section_data *sdata;
dc810e39 2028 bfd_size_type amt = sizeof (*sdata);
252b5132 2029
dc810e39 2030 sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, amt);
252b5132
RH
2031 if (!sdata)
2032 return false;
2033 sec->used_by_bfd = (PTR) sdata;
bf572ba0
MM
2034
2035 /* Indicate whether or not this section should use RELA relocations. */
c044fabd 2036 sdata->use_rela_p
bf572ba0
MM
2037 = get_elf_backend_data (abfd)->default_use_rela_p;
2038
252b5132
RH
2039 return true;
2040}
2041
2042/* Create a new bfd section from an ELF program header.
2043
2044 Since program segments have no names, we generate a synthetic name
2045 of the form segment<NUM>, where NUM is generally the index in the
2046 program header table. For segments that are split (see below) we
2047 generate the names segment<NUM>a and segment<NUM>b.
2048
2049 Note that some program segments may have a file size that is different than
2050 (less than) the memory size. All this means is that at execution the
2051 system must allocate the amount of memory specified by the memory size,
2052 but only initialize it with the first "file size" bytes read from the
2053 file. This would occur for example, with program segments consisting
2054 of combined data+bss.
2055
2056 To handle the above situation, this routine generates TWO bfd sections
2057 for the single program segment. The first has the length specified by
2058 the file size of the segment, and the second has the length specified
2059 by the difference between the two sizes. In effect, the segment is split
2060 into it's initialized and uninitialized parts.
2061
2062 */
2063
2064boolean
20cfcaae 2065_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename)
252b5132
RH
2066 bfd *abfd;
2067 Elf_Internal_Phdr *hdr;
2068 int index;
20cfcaae 2069 const char *typename;
252b5132
RH
2070{
2071 asection *newsect;
2072 char *name;
2073 char namebuf[64];
2074 int split;
2075
2076 split = ((hdr->p_memsz > 0)
2077 && (hdr->p_filesz > 0)
2078 && (hdr->p_memsz > hdr->p_filesz));
27ac83bf 2079 sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
dc810e39 2080 name = bfd_alloc (abfd, (bfd_size_type) strlen (namebuf) + 1);
252b5132
RH
2081 if (!name)
2082 return false;
2083 strcpy (name, namebuf);
2084 newsect = bfd_make_section (abfd, name);
2085 if (newsect == NULL)
2086 return false;
2087 newsect->vma = hdr->p_vaddr;
2088 newsect->lma = hdr->p_paddr;
2089 newsect->_raw_size = hdr->p_filesz;
2090 newsect->filepos = hdr->p_offset;
2091 newsect->flags |= SEC_HAS_CONTENTS;
2092 if (hdr->p_type == PT_LOAD)
2093 {
2094 newsect->flags |= SEC_ALLOC;
2095 newsect->flags |= SEC_LOAD;
2096 if (hdr->p_flags & PF_X)
2097 {
2098 /* FIXME: all we known is that it has execute PERMISSION,
c044fabd 2099 may be data. */
252b5132
RH
2100 newsect->flags |= SEC_CODE;
2101 }
2102 }
2103 if (!(hdr->p_flags & PF_W))
2104 {
2105 newsect->flags |= SEC_READONLY;
2106 }
2107
2108 if (split)
2109 {
27ac83bf 2110 sprintf (namebuf, "%s%db", typename, index);
dc810e39 2111 name = bfd_alloc (abfd, (bfd_size_type) strlen (namebuf) + 1);
252b5132
RH
2112 if (!name)
2113 return false;
2114 strcpy (name, namebuf);
2115 newsect = bfd_make_section (abfd, name);
2116 if (newsect == NULL)
2117 return false;
2118 newsect->vma = hdr->p_vaddr + hdr->p_filesz;
2119 newsect->lma = hdr->p_paddr + hdr->p_filesz;
2120 newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
2121 if (hdr->p_type == PT_LOAD)
2122 {
2123 newsect->flags |= SEC_ALLOC;
2124 if (hdr->p_flags & PF_X)
2125 newsect->flags |= SEC_CODE;
2126 }
2127 if (!(hdr->p_flags & PF_W))
2128 newsect->flags |= SEC_READONLY;
2129 }
2130
2131 return true;
2132}
2133
20cfcaae
NC
2134boolean
2135bfd_section_from_phdr (abfd, hdr, index)
2136 bfd *abfd;
2137 Elf_Internal_Phdr *hdr;
2138 int index;
2139{
2140 struct elf_backend_data *bed;
2141
2142 switch (hdr->p_type)
2143 {
2144 case PT_NULL:
2145 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
2146
2147 case PT_LOAD:
2148 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
2149
2150 case PT_DYNAMIC:
2151 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
2152
2153 case PT_INTERP:
2154 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
2155
2156 case PT_NOTE:
2157 if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
2158 return false;
dc810e39 2159 if (! elfcore_read_notes (abfd, (file_ptr) hdr->p_offset, hdr->p_filesz))
20cfcaae
NC
2160 return false;
2161 return true;
2162
2163 case PT_SHLIB:
2164 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
2165
2166 case PT_PHDR:
2167 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
2168
2169 default:
2170 /* Check for any processor-specific program segment types.
c044fabd 2171 If no handler for them, default to making "segment" sections. */
20cfcaae
NC
2172 bed = get_elf_backend_data (abfd);
2173 if (bed->elf_backend_section_from_phdr)
2174 return (*bed->elf_backend_section_from_phdr) (abfd, hdr, index);
2175 else
2176 return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "segment");
2177 }
2178}
2179
23bc299b
MM
2180/* Initialize REL_HDR, the section-header for new section, containing
2181 relocations against ASECT. If USE_RELA_P is true, we use RELA
2182 relocations; otherwise, we use REL relocations. */
2183
2184boolean
2185_bfd_elf_init_reloc_shdr (abfd, rel_hdr, asect, use_rela_p)
2186 bfd *abfd;
2187 Elf_Internal_Shdr *rel_hdr;
2188 asection *asect;
2189 boolean use_rela_p;
2190{
2191 char *name;
dc810e39
AM
2192 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2193 bfd_size_type amt = sizeof ".rela" + strlen (asect->name);
23bc299b 2194
dc810e39 2195 name = bfd_alloc (abfd, amt);
23bc299b
MM
2196 if (name == NULL)
2197 return false;
2198 sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
2199 rel_hdr->sh_name =
2b0f7ef9
JJ
2200 (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), name,
2201 false);
23bc299b
MM
2202 if (rel_hdr->sh_name == (unsigned int) -1)
2203 return false;
2204 rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
2205 rel_hdr->sh_entsize = (use_rela_p
2206 ? bed->s->sizeof_rela
2207 : bed->s->sizeof_rel);
2208 rel_hdr->sh_addralign = bed->s->file_align;
2209 rel_hdr->sh_flags = 0;
2210 rel_hdr->sh_addr = 0;
2211 rel_hdr->sh_size = 0;
2212 rel_hdr->sh_offset = 0;
2213
2214 return true;
2215}
2216
252b5132
RH
2217/* Set up an ELF internal section header for a section. */
2218
252b5132
RH
2219static void
2220elf_fake_sections (abfd, asect, failedptrarg)
2221 bfd *abfd;
2222 asection *asect;
2223 PTR failedptrarg;
2224{
2225 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2226 boolean *failedptr = (boolean *) failedptrarg;
2227 Elf_Internal_Shdr *this_hdr;
2228
2229 if (*failedptr)
2230 {
2231 /* We already failed; just get out of the bfd_map_over_sections
2232 loop. */
2233 return;
2234 }
2235
2236 this_hdr = &elf_section_data (asect)->this_hdr;
2237
2b0f7ef9
JJ
2238 this_hdr->sh_name = (unsigned long) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2239 asect->name, false);
252b5132
RH
2240 if (this_hdr->sh_name == (unsigned long) -1)
2241 {
2242 *failedptr = true;
2243 return;
2244 }
2245
2246 this_hdr->sh_flags = 0;
2247
2248 if ((asect->flags & SEC_ALLOC) != 0
2249 || asect->user_set_vma)
2250 this_hdr->sh_addr = asect->vma;
2251 else
2252 this_hdr->sh_addr = 0;
2253
2254 this_hdr->sh_offset = 0;
2255 this_hdr->sh_size = asect->_raw_size;
2256 this_hdr->sh_link = 0;
2257 this_hdr->sh_addralign = 1 << asect->alignment_power;
2258 /* The sh_entsize and sh_info fields may have been set already by
2259 copy_private_section_data. */
2260
2261 this_hdr->bfd_section = asect;
2262 this_hdr->contents = NULL;
2263
2264 /* FIXME: This should not be based on section names. */
2265 if (strcmp (asect->name, ".dynstr") == 0)
2266 this_hdr->sh_type = SHT_STRTAB;
2267 else if (strcmp (asect->name, ".hash") == 0)
2268 {
2269 this_hdr->sh_type = SHT_HASH;
c7ac6ff8 2270 this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
252b5132
RH
2271 }
2272 else if (strcmp (asect->name, ".dynsym") == 0)
2273 {
2274 this_hdr->sh_type = SHT_DYNSYM;
2275 this_hdr->sh_entsize = bed->s->sizeof_sym;
2276 }
2277 else if (strcmp (asect->name, ".dynamic") == 0)
2278 {
2279 this_hdr->sh_type = SHT_DYNAMIC;
2280 this_hdr->sh_entsize = bed->s->sizeof_dyn;
2281 }
a9d024b8 2282 else if (strncmp (asect->name, ".rela", 5) == 0
bf572ba0 2283 && get_elf_backend_data (abfd)->may_use_rela_p)
252b5132
RH
2284 {
2285 this_hdr->sh_type = SHT_RELA;
2286 this_hdr->sh_entsize = bed->s->sizeof_rela;
2287 }
a9d024b8 2288 else if (strncmp (asect->name, ".rel", 4) == 0
bf572ba0 2289 && get_elf_backend_data (abfd)->may_use_rel_p)
252b5132
RH
2290 {
2291 this_hdr->sh_type = SHT_REL;
2292 this_hdr->sh_entsize = bed->s->sizeof_rel;
2293 }
25e27870
L
2294 else if (strcmp (asect->name, ".init_array") == 0)
2295 this_hdr->sh_type = SHT_INIT_ARRAY;
2296 else if (strcmp (asect->name, ".fini_array") == 0)
2297 this_hdr->sh_type = SHT_FINI_ARRAY;
2298 else if (strcmp (asect->name, ".preinit_array") == 0)
2299 this_hdr->sh_type = SHT_PREINIT_ARRAY;
252b5132
RH
2300 else if (strncmp (asect->name, ".note", 5) == 0)
2301 this_hdr->sh_type = SHT_NOTE;
2302 else if (strncmp (asect->name, ".stab", 5) == 0
2303 && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
2304 this_hdr->sh_type = SHT_STRTAB;
2305 else if (strcmp (asect->name, ".gnu.version") == 0)
2306 {
2307 this_hdr->sh_type = SHT_GNU_versym;
2308 this_hdr->sh_entsize = sizeof (Elf_External_Versym);
2309 }
2310 else if (strcmp (asect->name, ".gnu.version_d") == 0)
2311 {
2312 this_hdr->sh_type = SHT_GNU_verdef;
2313 this_hdr->sh_entsize = 0;
2314 /* objcopy or strip will copy over sh_info, but may not set
2315 cverdefs. The linker will set cverdefs, but sh_info will be
2316 zero. */
2317 if (this_hdr->sh_info == 0)
2318 this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
2319 else
2320 BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
2321 || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
2322 }
2323 else if (strcmp (asect->name, ".gnu.version_r") == 0)
2324 {
2325 this_hdr->sh_type = SHT_GNU_verneed;
2326 this_hdr->sh_entsize = 0;
2327 /* objcopy or strip will copy over sh_info, but may not set
2328 cverrefs. The linker will set cverrefs, but sh_info will be
2329 zero. */
2330 if (this_hdr->sh_info == 0)
2331 this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
2332 else
2333 BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
2334 || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
2335 }
dbb410c3
AM
2336 else if ((asect->flags & SEC_GROUP) != 0)
2337 {
2338 this_hdr->sh_type = SHT_GROUP;
2339 this_hdr->sh_entsize = 4;
2340 }
252b5132 2341 else if ((asect->flags & SEC_ALLOC) != 0
edd29cf9
AM
2342 && (((asect->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0)
2343 || (asect->flags & SEC_NEVER_LOAD) != 0))
252b5132
RH
2344 this_hdr->sh_type = SHT_NOBITS;
2345 else
6c99a5c3 2346 this_hdr->sh_type = SHT_PROGBITS;
252b5132
RH
2347
2348 if ((asect->flags & SEC_ALLOC) != 0)
2349 this_hdr->sh_flags |= SHF_ALLOC;
2350 if ((asect->flags & SEC_READONLY) == 0)
2351 this_hdr->sh_flags |= SHF_WRITE;
2352 if ((asect->flags & SEC_CODE) != 0)
2353 this_hdr->sh_flags |= SHF_EXECINSTR;
f5fa8ca2
JJ
2354 if ((asect->flags & SEC_MERGE) != 0)
2355 {
2356 this_hdr->sh_flags |= SHF_MERGE;
2357 this_hdr->sh_entsize = asect->entsize;
2358 if ((asect->flags & SEC_STRINGS) != 0)
2359 this_hdr->sh_flags |= SHF_STRINGS;
2360 }
945906ff 2361 if (elf_group_name (asect) != NULL)
dbb410c3 2362 this_hdr->sh_flags |= SHF_GROUP;
13ae64f3
JJ
2363 if ((asect->flags & SEC_THREAD_LOCAL) != 0)
2364 this_hdr->sh_flags |= SHF_TLS;
252b5132
RH
2365
2366 /* Check for processor-specific section types. */
e1fddb6b
AO
2367 if (bed->elf_backend_fake_sections
2368 && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect))
2369 *failedptr = true;
252b5132
RH
2370
2371 /* If the section has relocs, set up a section header for the
23bc299b
MM
2372 SHT_REL[A] section. If two relocation sections are required for
2373 this section, it is up to the processor-specific back-end to
c044fabd 2374 create the other. */
23bc299b 2375 if ((asect->flags & SEC_RELOC) != 0
c044fabd 2376 && !_bfd_elf_init_reloc_shdr (abfd,
23bc299b 2377 &elf_section_data (asect)->rel_hdr,
c044fabd 2378 asect,
23bc299b
MM
2379 elf_section_data (asect)->use_rela_p))
2380 *failedptr = true;
252b5132
RH
2381}
2382
dbb410c3
AM
2383/* Fill in the contents of a SHT_GROUP section. */
2384
2385static void
2386set_group_contents (abfd, sec, failedptrarg)
2387 bfd *abfd;
2388 asection *sec;
2389 PTR failedptrarg ATTRIBUTE_UNUSED;
2390{
2391 boolean *failedptr = (boolean *) failedptrarg;
2392 unsigned long symindx;
9dce4196 2393 asection *elt, *first;
dbb410c3
AM
2394 unsigned char *loc;
2395 struct bfd_link_order *l;
9dce4196 2396 boolean gas;
dbb410c3
AM
2397
2398 if (elf_section_data (sec)->this_hdr.sh_type != SHT_GROUP
2399 || *failedptr)
2400 return;
2401
2402 /* If called from the assembler, swap_out_syms will have set up
945906ff
AM
2403 elf_section_syms; If called for "ld -r", the symbols won't yet
2404 be mapped, so emulate elf_bfd_final_link. */
2405 if (elf_section_syms (abfd) != NULL)
2406 symindx = elf_section_syms (abfd)[sec->index]->udata.i;
2407 else
dbb410c3
AM
2408 symindx = elf_section_data (sec)->this_idx;
2409 elf_section_data (sec)->this_hdr.sh_info = symindx;
2410
9dce4196
AM
2411 /* Nor will the contents be allocated for "ld -r" or objcopy. */
2412 gas = true;
dbb410c3
AM
2413 if (sec->contents == NULL)
2414 {
9dce4196 2415 gas = false;
dbb410c3 2416 sec->contents = bfd_alloc (abfd, sec->_raw_size);
9dce4196
AM
2417
2418 /* Arrange for the section to be written out. */
2419 elf_section_data (sec)->this_hdr.contents = sec->contents;
dbb410c3
AM
2420 if (sec->contents == NULL)
2421 {
2422 *failedptr = true;
2423 return;
2424 }
2425 }
2426
2427 loc = sec->contents + sec->_raw_size;
2428
9dce4196
AM
2429 /* Get the pointer to the first section in the group that gas
2430 squirreled away here. objcopy arranges for this to be set to the
2431 start of the input section group. */
2432 first = elt = elf_next_in_group (sec);
dbb410c3
AM
2433
2434 /* First element is a flag word. Rest of section is elf section
2435 indices for all the sections of the group. Write them backwards
2436 just to keep the group in the same order as given in .section
2437 directives, not that it matters. */
2438 while (elt != NULL)
2439 {
9dce4196
AM
2440 asection *s;
2441 unsigned int idx;
2442
dbb410c3 2443 loc -= 4;
9dce4196
AM
2444 s = elt;
2445 if (!gas)
2446 s = s->output_section;
2447 idx = 0;
2448 if (s != NULL)
2449 idx = elf_section_data (s)->this_idx;
2450 H_PUT_32 (abfd, idx, loc);
945906ff 2451 elt = elf_next_in_group (elt);
9dce4196
AM
2452 if (elt == first)
2453 break;
dbb410c3
AM
2454 }
2455
2456 /* If this is a relocatable link, then the above did nothing because
2457 SEC is the output section. Look through the input sections
2458 instead. */
2459 for (l = sec->link_order_head; l != NULL; l = l->next)
2460 if (l->type == bfd_indirect_link_order
945906ff 2461 && (elt = elf_next_in_group (l->u.indirect.section)) != NULL)
dbb410c3
AM
2462 do
2463 {
2464 loc -= 4;
2465 H_PUT_32 (abfd,
2466 elf_section_data (elt->output_section)->this_idx, loc);
945906ff 2467 elt = elf_next_in_group (elt);
dbb410c3
AM
2468 /* During a relocatable link, the lists are circular. */
2469 }
945906ff 2470 while (elt != elf_next_in_group (l->u.indirect.section));
dbb410c3 2471
9dce4196
AM
2472 /* With ld -r, merging SHT_GROUP sections results in wasted space
2473 due to allowing for the flag word on each input. We may well
2474 duplicate entries too. */
2475 while ((loc -= 4) > sec->contents)
2476 H_PUT_32 (abfd, 0, loc);
2477
2478 if (loc != sec->contents)
2479 abort ();
dbb410c3 2480
9dce4196 2481 H_PUT_32 (abfd, sec->flags & SEC_LINK_ONCE ? GRP_COMDAT : 0, loc);
dbb410c3
AM
2482}
2483
252b5132
RH
2484/* Assign all ELF section numbers. The dummy first section is handled here
2485 too. The link/info pointers for the standard section types are filled
2486 in here too, while we're at it. */
2487
2488static boolean
2489assign_section_numbers (abfd)
2490 bfd *abfd;
2491{
2492 struct elf_obj_tdata *t = elf_tdata (abfd);
2493 asection *sec;
2b0f7ef9 2494 unsigned int section_number, secn;
252b5132 2495 Elf_Internal_Shdr **i_shdrp;
dc810e39 2496 bfd_size_type amt;
252b5132
RH
2497
2498 section_number = 1;
2499
2b0f7ef9
JJ
2500 _bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
2501
252b5132
RH
2502 for (sec = abfd->sections; sec; sec = sec->next)
2503 {
2504 struct bfd_elf_section_data *d = elf_section_data (sec);
2505
9ad5cbcf
AM
2506 if (section_number == SHN_LORESERVE)
2507 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132 2508 d->this_idx = section_number++;
2b0f7ef9 2509 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name);
252b5132
RH
2510 if ((sec->flags & SEC_RELOC) == 0)
2511 d->rel_idx = 0;
2512 else
2b0f7ef9 2513 {
9ad5cbcf
AM
2514 if (section_number == SHN_LORESERVE)
2515 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2b0f7ef9
JJ
2516 d->rel_idx = section_number++;
2517 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr.sh_name);
2518 }
23bc299b
MM
2519
2520 if (d->rel_hdr2)
2b0f7ef9 2521 {
9ad5cbcf
AM
2522 if (section_number == SHN_LORESERVE)
2523 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2b0f7ef9
JJ
2524 d->rel_idx2 = section_number++;
2525 _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr2->sh_name);
2526 }
23bc299b
MM
2527 else
2528 d->rel_idx2 = 0;
252b5132
RH
2529 }
2530
9ad5cbcf
AM
2531 if (section_number == SHN_LORESERVE)
2532 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132 2533 t->shstrtab_section = section_number++;
2b0f7ef9 2534 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
252b5132 2535 elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
252b5132
RH
2536
2537 if (bfd_get_symcount (abfd) > 0)
2538 {
9ad5cbcf
AM
2539 if (section_number == SHN_LORESERVE)
2540 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132 2541 t->symtab_section = section_number++;
2b0f7ef9 2542 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
9ad5cbcf
AM
2543 if (section_number > SHN_LORESERVE - 2)
2544 {
2545 if (section_number == SHN_LORESERVE)
2546 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
2547 t->symtab_shndx_section = section_number++;
2548 t->symtab_shndx_hdr.sh_name
2549 = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd),
2550 ".symtab_shndx", false);
2551 if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1)
2552 return false;
2553 }
2554 if (section_number == SHN_LORESERVE)
2555 section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132 2556 t->strtab_section = section_number++;
2b0f7ef9 2557 _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name);
252b5132
RH
2558 }
2559
2b0f7ef9
JJ
2560 _bfd_elf_strtab_finalize (elf_shstrtab (abfd));
2561 t->shstrtab_hdr.sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
9ad5cbcf
AM
2562
2563 elf_numsections (abfd) = section_number;
252b5132 2564 elf_elfheader (abfd)->e_shnum = section_number;
9ad5cbcf
AM
2565 if (section_number > SHN_LORESERVE)
2566 elf_elfheader (abfd)->e_shnum -= SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132
RH
2567
2568 /* Set up the list of section header pointers, in agreement with the
2569 indices. */
dc810e39
AM
2570 amt = section_number * sizeof (Elf_Internal_Shdr *);
2571 i_shdrp = (Elf_Internal_Shdr **) bfd_alloc (abfd, amt);
252b5132
RH
2572 if (i_shdrp == NULL)
2573 return false;
2574
dc810e39
AM
2575 amt = sizeof (Elf_Internal_Shdr);
2576 i_shdrp[0] = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
252b5132
RH
2577 if (i_shdrp[0] == NULL)
2578 {
2579 bfd_release (abfd, i_shdrp);
2580 return false;
2581 }
2582 memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
2583
2584 elf_elfsections (abfd) = i_shdrp;
2585
2586 i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
2587 if (bfd_get_symcount (abfd) > 0)
2588 {
2589 i_shdrp[t->symtab_section] = &t->symtab_hdr;
9ad5cbcf
AM
2590 if (elf_numsections (abfd) > SHN_LORESERVE)
2591 {
2592 i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr;
2593 t->symtab_shndx_hdr.sh_link = t->symtab_section;
2594 }
252b5132
RH
2595 i_shdrp[t->strtab_section] = &t->strtab_hdr;
2596 t->symtab_hdr.sh_link = t->strtab_section;
2597 }
2598 for (sec = abfd->sections; sec; sec = sec->next)
2599 {
2600 struct bfd_elf_section_data *d = elf_section_data (sec);
2601 asection *s;
2602 const char *name;
2603
2604 i_shdrp[d->this_idx] = &d->this_hdr;
2605 if (d->rel_idx != 0)
2606 i_shdrp[d->rel_idx] = &d->rel_hdr;
23bc299b
MM
2607 if (d->rel_idx2 != 0)
2608 i_shdrp[d->rel_idx2] = d->rel_hdr2;
252b5132
RH
2609
2610 /* Fill in the sh_link and sh_info fields while we're at it. */
2611
2612 /* sh_link of a reloc section is the section index of the symbol
2613 table. sh_info is the section index of the section to which
2614 the relocation entries apply. */
2615 if (d->rel_idx != 0)
2616 {
2617 d->rel_hdr.sh_link = t->symtab_section;
2618 d->rel_hdr.sh_info = d->this_idx;
2619 }
23bc299b
MM
2620 if (d->rel_idx2 != 0)
2621 {
2622 d->rel_hdr2->sh_link = t->symtab_section;
2623 d->rel_hdr2->sh_info = d->this_idx;
2624 }
252b5132
RH
2625
2626 switch (d->this_hdr.sh_type)
2627 {
2628 case SHT_REL:
2629 case SHT_RELA:
2630 /* A reloc section which we are treating as a normal BFD
2631 section. sh_link is the section index of the symbol
2632 table. sh_info is the section index of the section to
2633 which the relocation entries apply. We assume that an
2634 allocated reloc section uses the dynamic symbol table.
2635 FIXME: How can we be sure? */
2636 s = bfd_get_section_by_name (abfd, ".dynsym");
2637 if (s != NULL)
2638 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2639
2640 /* We look up the section the relocs apply to by name. */
2641 name = sec->name;
2642 if (d->this_hdr.sh_type == SHT_REL)
2643 name += 4;
2644 else
2645 name += 5;
2646 s = bfd_get_section_by_name (abfd, name);
2647 if (s != NULL)
2648 d->this_hdr.sh_info = elf_section_data (s)->this_idx;
2649 break;
2650
2651 case SHT_STRTAB:
2652 /* We assume that a section named .stab*str is a stabs
2653 string section. We look for a section with the same name
2654 but without the trailing ``str'', and set its sh_link
2655 field to point to this section. */
2656 if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
2657 && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
2658 {
2659 size_t len;
2660 char *alc;
2661
2662 len = strlen (sec->name);
dc810e39 2663 alc = (char *) bfd_malloc ((bfd_size_type) len - 2);
252b5132
RH
2664 if (alc == NULL)
2665 return false;
2666 strncpy (alc, sec->name, len - 3);
2667 alc[len - 3] = '\0';
2668 s = bfd_get_section_by_name (abfd, alc);
2669 free (alc);
2670 if (s != NULL)
2671 {
2672 elf_section_data (s)->this_hdr.sh_link = d->this_idx;
2673
2674 /* This is a .stab section. */
2675 elf_section_data (s)->this_hdr.sh_entsize =
125c4a69 2676 4 + 2 * bfd_get_arch_size (abfd) / 8;
252b5132
RH
2677 }
2678 }
2679 break;
2680
2681 case SHT_DYNAMIC:
2682 case SHT_DYNSYM:
2683 case SHT_GNU_verneed:
2684 case SHT_GNU_verdef:
2685 /* sh_link is the section header index of the string table
2686 used for the dynamic entries, or the symbol table, or the
2687 version strings. */
2688 s = bfd_get_section_by_name (abfd, ".dynstr");
2689 if (s != NULL)
2690 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2691 break;
2692
2693 case SHT_HASH:
2694 case SHT_GNU_versym:
2695 /* sh_link is the section header index of the symbol table
2696 this hash table or version table is for. */
2697 s = bfd_get_section_by_name (abfd, ".dynsym");
2698 if (s != NULL)
2699 d->this_hdr.sh_link = elf_section_data (s)->this_idx;
2700 break;
dbb410c3
AM
2701
2702 case SHT_GROUP:
2703 d->this_hdr.sh_link = t->symtab_section;
252b5132
RH
2704 }
2705 }
2706
2b0f7ef9 2707 for (secn = 1; secn < section_number; ++secn)
9ad5cbcf
AM
2708 if (i_shdrp[secn] == NULL)
2709 i_shdrp[secn] = i_shdrp[0];
2710 else
2711 i_shdrp[secn]->sh_name = _bfd_elf_strtab_offset (elf_shstrtab (abfd),
2712 i_shdrp[secn]->sh_name);
252b5132
RH
2713 return true;
2714}
2715
2716/* Map symbol from it's internal number to the external number, moving
2717 all local symbols to be at the head of the list. */
2718
2719static INLINE int
2720sym_is_global (abfd, sym)
2721 bfd *abfd;
2722 asymbol *sym;
2723{
2724 /* If the backend has a special mapping, use it. */
2725 if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
2726 return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
2727 (abfd, sym));
2728
2729 return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2730 || bfd_is_und_section (bfd_get_section (sym))
2731 || bfd_is_com_section (bfd_get_section (sym)));
2732}
2733
2734static boolean
2735elf_map_symbols (abfd)
2736 bfd *abfd;
2737{
dc810e39 2738 unsigned int symcount = bfd_get_symcount (abfd);
252b5132
RH
2739 asymbol **syms = bfd_get_outsymbols (abfd);
2740 asymbol **sect_syms;
dc810e39
AM
2741 unsigned int num_locals = 0;
2742 unsigned int num_globals = 0;
2743 unsigned int num_locals2 = 0;
2744 unsigned int num_globals2 = 0;
252b5132 2745 int max_index = 0;
dc810e39 2746 unsigned int idx;
252b5132
RH
2747 asection *asect;
2748 asymbol **new_syms;
dc810e39 2749 bfd_size_type amt;
252b5132
RH
2750
2751#ifdef DEBUG
2752 fprintf (stderr, "elf_map_symbols\n");
2753 fflush (stderr);
2754#endif
2755
252b5132
RH
2756 for (asect = abfd->sections; asect; asect = asect->next)
2757 {
2758 if (max_index < asect->index)
2759 max_index = asect->index;
2760 }
2761
2762 max_index++;
dc810e39
AM
2763 amt = max_index * sizeof (asymbol *);
2764 sect_syms = (asymbol **) bfd_zalloc (abfd, amt);
252b5132
RH
2765 if (sect_syms == NULL)
2766 return false;
2767 elf_section_syms (abfd) = sect_syms;
4e89ac30 2768 elf_num_section_syms (abfd) = max_index;
252b5132 2769
079e9a2f
AM
2770 /* Init sect_syms entries for any section symbols we have already
2771 decided to output. */
252b5132
RH
2772 for (idx = 0; idx < symcount; idx++)
2773 {
dc810e39 2774 asymbol *sym = syms[idx];
c044fabd 2775
252b5132
RH
2776 if ((sym->flags & BSF_SECTION_SYM) != 0
2777 && sym->value == 0)
2778 {
2779 asection *sec;
2780
2781 sec = sym->section;
2782
2783 if (sec->owner != NULL)
2784 {
2785 if (sec->owner != abfd)
2786 {
2787 if (sec->output_offset != 0)
2788 continue;
c044fabd 2789
252b5132
RH
2790 sec = sec->output_section;
2791
079e9a2f
AM
2792 /* Empty sections in the input files may have had a
2793 section symbol created for them. (See the comment
2794 near the end of _bfd_generic_link_output_symbols in
2795 linker.c). If the linker script discards such
2796 sections then we will reach this point. Since we know
2797 that we cannot avoid this case, we detect it and skip
2798 the abort and the assignment to the sect_syms array.
2799 To reproduce this particular case try running the
2800 linker testsuite test ld-scripts/weak.exp for an ELF
2801 port that uses the generic linker. */
252b5132
RH
2802 if (sec->owner == NULL)
2803 continue;
2804
2805 BFD_ASSERT (sec->owner == abfd);
2806 }
2807 sect_syms[sec->index] = syms[idx];
2808 }
2809 }
2810 }
2811
252b5132
RH
2812 /* Classify all of the symbols. */
2813 for (idx = 0; idx < symcount; idx++)
2814 {
2815 if (!sym_is_global (abfd, syms[idx]))
2816 num_locals++;
2817 else
2818 num_globals++;
2819 }
079e9a2f
AM
2820
2821 /* We will be adding a section symbol for each BFD section. Most normal
2822 sections will already have a section symbol in outsymbols, but
2823 eg. SHT_GROUP sections will not, and we need the section symbol mapped
2824 at least in that case. */
252b5132
RH
2825 for (asect = abfd->sections; asect; asect = asect->next)
2826 {
079e9a2f 2827 if (sect_syms[asect->index] == NULL)
252b5132 2828 {
079e9a2f 2829 if (!sym_is_global (abfd, asect->symbol))
252b5132
RH
2830 num_locals++;
2831 else
2832 num_globals++;
252b5132
RH
2833 }
2834 }
2835
2836 /* Now sort the symbols so the local symbols are first. */
dc810e39
AM
2837 amt = (num_locals + num_globals) * sizeof (asymbol *);
2838 new_syms = (asymbol **) bfd_alloc (abfd, amt);
2839
252b5132
RH
2840 if (new_syms == NULL)
2841 return false;
2842
2843 for (idx = 0; idx < symcount; idx++)
2844 {
2845 asymbol *sym = syms[idx];
dc810e39 2846 unsigned int i;
252b5132
RH
2847
2848 if (!sym_is_global (abfd, sym))
2849 i = num_locals2++;
2850 else
2851 i = num_locals + num_globals2++;
2852 new_syms[i] = sym;
2853 sym->udata.i = i + 1;
2854 }
2855 for (asect = abfd->sections; asect; asect = asect->next)
2856 {
079e9a2f 2857 if (sect_syms[asect->index] == NULL)
252b5132 2858 {
079e9a2f 2859 asymbol *sym = asect->symbol;
dc810e39 2860 unsigned int i;
252b5132 2861
079e9a2f 2862 sect_syms[asect->index] = sym;
252b5132
RH
2863 if (!sym_is_global (abfd, sym))
2864 i = num_locals2++;
2865 else
2866 i = num_locals + num_globals2++;
2867 new_syms[i] = sym;
2868 sym->udata.i = i + 1;
2869 }
2870 }
2871
2872 bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
2873
2874 elf_num_locals (abfd) = num_locals;
2875 elf_num_globals (abfd) = num_globals;
2876 return true;
2877}
2878
2879/* Align to the maximum file alignment that could be required for any
2880 ELF data structure. */
2881
2882static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
2883static INLINE file_ptr
2884align_file_position (off, align)
2885 file_ptr off;
2886 int align;
2887{
2888 return (off + align - 1) & ~(align - 1);
2889}
2890
2891/* Assign a file position to a section, optionally aligning to the
2892 required section alignment. */
2893
2894INLINE file_ptr
2895_bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
2896 Elf_Internal_Shdr *i_shdrp;
2897 file_ptr offset;
2898 boolean align;
2899{
2900 if (align)
2901 {
2902 unsigned int al;
2903
2904 al = i_shdrp->sh_addralign;
2905 if (al > 1)
2906 offset = BFD_ALIGN (offset, al);
2907 }
2908 i_shdrp->sh_offset = offset;
2909 if (i_shdrp->bfd_section != NULL)
2910 i_shdrp->bfd_section->filepos = offset;
2911 if (i_shdrp->sh_type != SHT_NOBITS)
2912 offset += i_shdrp->sh_size;
2913 return offset;
2914}
2915
2916/* Compute the file positions we are going to put the sections at, and
2917 otherwise prepare to begin writing out the ELF file. If LINK_INFO
2918 is not NULL, this is being called by the ELF backend linker. */
2919
2920boolean
2921_bfd_elf_compute_section_file_positions (abfd, link_info)
2922 bfd *abfd;
2923 struct bfd_link_info *link_info;
2924{
2925 struct elf_backend_data *bed = get_elf_backend_data (abfd);
2926 boolean failed;
2927 struct bfd_strtab_hash *strtab;
2928 Elf_Internal_Shdr *shstrtab_hdr;
2929
2930 if (abfd->output_has_begun)
2931 return true;
2932
2933 /* Do any elf backend specific processing first. */
2934 if (bed->elf_backend_begin_write_processing)
2935 (*bed->elf_backend_begin_write_processing) (abfd, link_info);
2936
2937 if (! prep_headers (abfd))
2938 return false;
2939
e6c51ed4
NC
2940 /* Post process the headers if necessary. */
2941 if (bed->elf_backend_post_process_headers)
2942 (*bed->elf_backend_post_process_headers) (abfd, link_info);
2943
252b5132
RH
2944 failed = false;
2945 bfd_map_over_sections (abfd, elf_fake_sections, &failed);
2946 if (failed)
2947 return false;
2948
2949 if (!assign_section_numbers (abfd))
2950 return false;
2951
2952 /* The backend linker builds symbol table information itself. */
2953 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2954 {
2955 /* Non-zero if doing a relocatable link. */
2956 int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
2957
2958 if (! swap_out_syms (abfd, &strtab, relocatable_p))
2959 return false;
2960 }
2961
dbb410c3
AM
2962 if (link_info == NULL || link_info->relocateable)
2963 {
2964 bfd_map_over_sections (abfd, set_group_contents, &failed);
2965 if (failed)
2966 return false;
2967 }
2968
252b5132
RH
2969 shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
2970 /* sh_name was set in prep_headers. */
2971 shstrtab_hdr->sh_type = SHT_STRTAB;
2972 shstrtab_hdr->sh_flags = 0;
2973 shstrtab_hdr->sh_addr = 0;
2b0f7ef9 2974 shstrtab_hdr->sh_size = _bfd_elf_strtab_size (elf_shstrtab (abfd));
252b5132
RH
2975 shstrtab_hdr->sh_entsize = 0;
2976 shstrtab_hdr->sh_link = 0;
2977 shstrtab_hdr->sh_info = 0;
2978 /* sh_offset is set in assign_file_positions_except_relocs. */
2979 shstrtab_hdr->sh_addralign = 1;
2980
2981 if (!assign_file_positions_except_relocs (abfd))
2982 return false;
2983
2984 if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2985 {
2986 file_ptr off;
2987 Elf_Internal_Shdr *hdr;
2988
2989 off = elf_tdata (abfd)->next_file_pos;
2990
2991 hdr = &elf_tdata (abfd)->symtab_hdr;
2992 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2993
9ad5cbcf
AM
2994 hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
2995 if (hdr->sh_size != 0)
2996 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2997
252b5132
RH
2998 hdr = &elf_tdata (abfd)->strtab_hdr;
2999 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
3000
3001 elf_tdata (abfd)->next_file_pos = off;
3002
3003 /* Now that we know where the .strtab section goes, write it
3004 out. */
3005 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
3006 || ! _bfd_stringtab_emit (abfd, strtab))
3007 return false;
3008 _bfd_stringtab_free (strtab);
3009 }
3010
3011 abfd->output_has_begun = true;
3012
3013 return true;
3014}
3015
3016/* Create a mapping from a set of sections to a program segment. */
3017
3018static INLINE struct elf_segment_map *
3019make_mapping (abfd, sections, from, to, phdr)
3020 bfd *abfd;
3021 asection **sections;
3022 unsigned int from;
3023 unsigned int to;
3024 boolean phdr;
3025{
3026 struct elf_segment_map *m;
3027 unsigned int i;
3028 asection **hdrpp;
dc810e39 3029 bfd_size_type amt;
252b5132 3030
dc810e39
AM
3031 amt = sizeof (struct elf_segment_map);
3032 amt += (to - from - 1) * sizeof (asection *);
3033 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
3034 if (m == NULL)
3035 return NULL;
3036 m->next = NULL;
3037 m->p_type = PT_LOAD;
3038 for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
3039 m->sections[i - from] = *hdrpp;
3040 m->count = to - from;
3041
3042 if (from == 0 && phdr)
3043 {
3044 /* Include the headers in the first PT_LOAD segment. */
3045 m->includes_filehdr = 1;
3046 m->includes_phdrs = 1;
3047 }
3048
3049 return m;
3050}
3051
3052/* Set up a mapping from BFD sections to program segments. */
3053
3054static boolean
3055map_sections_to_segments (abfd)
3056 bfd *abfd;
3057{
3058 asection **sections = NULL;
3059 asection *s;
3060 unsigned int i;
3061 unsigned int count;
3062 struct elf_segment_map *mfirst;
3063 struct elf_segment_map **pm;
3064 struct elf_segment_map *m;
3065 asection *last_hdr;
3066 unsigned int phdr_index;
3067 bfd_vma maxpagesize;
3068 asection **hdrpp;
3069 boolean phdr_in_segment = true;
3070 boolean writable;
13ae64f3
JJ
3071 int tls_count = 0;
3072 asection *first_tls = NULL;
65765700 3073 asection *dynsec, *eh_frame_hdr;
dc810e39 3074 bfd_size_type amt;
252b5132
RH
3075
3076 if (elf_tdata (abfd)->segment_map != NULL)
3077 return true;
3078
3079 if (bfd_count_sections (abfd) == 0)
3080 return true;
3081
3082 /* Select the allocated sections, and sort them. */
3083
dc810e39
AM
3084 amt = bfd_count_sections (abfd) * sizeof (asection *);
3085 sections = (asection **) bfd_malloc (amt);
252b5132
RH
3086 if (sections == NULL)
3087 goto error_return;
3088
3089 i = 0;
3090 for (s = abfd->sections; s != NULL; s = s->next)
3091 {
3092 if ((s->flags & SEC_ALLOC) != 0)
3093 {
3094 sections[i] = s;
3095 ++i;
3096 }
3097 }
3098 BFD_ASSERT (i <= bfd_count_sections (abfd));
3099 count = i;
3100
3101 qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
3102
3103 /* Build the mapping. */
3104
3105 mfirst = NULL;
3106 pm = &mfirst;
3107
3108 /* If we have a .interp section, then create a PT_PHDR segment for
3109 the program headers and a PT_INTERP segment for the .interp
3110 section. */
3111 s = bfd_get_section_by_name (abfd, ".interp");
3112 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3113 {
dc810e39
AM
3114 amt = sizeof (struct elf_segment_map);
3115 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
3116 if (m == NULL)
3117 goto error_return;
3118 m->next = NULL;
3119 m->p_type = PT_PHDR;
3120 /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not. */
3121 m->p_flags = PF_R | PF_X;
3122 m->p_flags_valid = 1;
3123 m->includes_phdrs = 1;
3124
3125 *pm = m;
3126 pm = &m->next;
3127
dc810e39
AM
3128 amt = sizeof (struct elf_segment_map);
3129 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
3130 if (m == NULL)
3131 goto error_return;
3132 m->next = NULL;
3133 m->p_type = PT_INTERP;
3134 m->count = 1;
3135 m->sections[0] = s;
3136
3137 *pm = m;
3138 pm = &m->next;
3139 }
3140
3141 /* Look through the sections. We put sections in the same program
3142 segment when the start of the second section can be placed within
3143 a few bytes of the end of the first section. */
3144 last_hdr = NULL;
3145 phdr_index = 0;
3146 maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
3147 writable = false;
3148 dynsec = bfd_get_section_by_name (abfd, ".dynamic");
3149 if (dynsec != NULL
3150 && (dynsec->flags & SEC_LOAD) == 0)
3151 dynsec = NULL;
3152
3153 /* Deal with -Ttext or something similar such that the first section
3154 is not adjacent to the program headers. This is an
3155 approximation, since at this point we don't know exactly how many
3156 program headers we will need. */
3157 if (count > 0)
3158 {
3159 bfd_size_type phdr_size;
3160
3161 phdr_size = elf_tdata (abfd)->program_header_size;
3162 if (phdr_size == 0)
3163 phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
3164 if ((abfd->flags & D_PAGED) == 0
3165 || sections[0]->lma < phdr_size
3166 || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
3167 phdr_in_segment = false;
3168 }
3169
3170 for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
3171 {
3172 asection *hdr;
3173 boolean new_segment;
3174
3175 hdr = *hdrpp;
3176
3177 /* See if this section and the last one will fit in the same
3178 segment. */
3179
3180 if (last_hdr == NULL)
3181 {
3182 /* If we don't have a segment yet, then we don't need a new
3183 one (we build the last one after this loop). */
3184 new_segment = false;
3185 }
3186 else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
3187 {
3188 /* If this section has a different relation between the
3189 virtual address and the load address, then we need a new
3190 segment. */
3191 new_segment = true;
3192 }
3193 else if (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
3194 < BFD_ALIGN (hdr->lma, maxpagesize))
3195 {
3196 /* If putting this section in this segment would force us to
3197 skip a page in the segment, then we need a new segment. */
3198 new_segment = true;
3199 }
3200 else if ((last_hdr->flags & SEC_LOAD) == 0
3201 && (hdr->flags & SEC_LOAD) != 0)
3202 {
3203 /* We don't want to put a loadable section after a
3204 nonloadable section in the same segment. */
3205 new_segment = true;
3206 }
3207 else if ((abfd->flags & D_PAGED) == 0)
3208 {
3209 /* If the file is not demand paged, which means that we
3210 don't require the sections to be correctly aligned in the
3211 file, then there is no other reason for a new segment. */
3212 new_segment = false;
3213 }
3214 else if (! writable
3215 && (hdr->flags & SEC_READONLY) == 0
3216 && (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
3217 == hdr->lma))
3218 {
3219 /* We don't want to put a writable section in a read only
3220 segment, unless they are on the same page in memory
3221 anyhow. We already know that the last section does not
3222 bring us past the current section on the page, so the
3223 only case in which the new section is not on the same
3224 page as the previous section is when the previous section
3225 ends precisely on a page boundary. */
3226 new_segment = true;
3227 }
3228 else
3229 {
3230 /* Otherwise, we can use the same segment. */
3231 new_segment = false;
3232 }
3233
3234 if (! new_segment)
3235 {
3236 if ((hdr->flags & SEC_READONLY) == 0)
3237 writable = true;
3238 last_hdr = hdr;
3239 continue;
3240 }
3241
3242 /* We need a new program segment. We must create a new program
3243 header holding all the sections from phdr_index until hdr. */
3244
3245 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3246 if (m == NULL)
3247 goto error_return;
3248
3249 *pm = m;
3250 pm = &m->next;
3251
3252 if ((hdr->flags & SEC_READONLY) == 0)
3253 writable = true;
3254 else
3255 writable = false;
3256
3257 last_hdr = hdr;
3258 phdr_index = i;
3259 phdr_in_segment = false;
3260 }
3261
3262 /* Create a final PT_LOAD program segment. */
3263 if (last_hdr != NULL)
3264 {
3265 m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
3266 if (m == NULL)
3267 goto error_return;
3268
3269 *pm = m;
3270 pm = &m->next;
3271 }
3272
3273 /* If there is a .dynamic section, throw in a PT_DYNAMIC segment. */
3274 if (dynsec != NULL)
3275 {
dc810e39
AM
3276 amt = sizeof (struct elf_segment_map);
3277 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
3278 if (m == NULL)
3279 goto error_return;
3280 m->next = NULL;
3281 m->p_type = PT_DYNAMIC;
3282 m->count = 1;
3283 m->sections[0] = dynsec;
3284
3285 *pm = m;
3286 pm = &m->next;
3287 }
3288
3289 /* For each loadable .note section, add a PT_NOTE segment. We don't
3290 use bfd_get_section_by_name, because if we link together
3291 nonloadable .note sections and loadable .note sections, we will
3292 generate two .note sections in the output file. FIXME: Using
3293 names for section types is bogus anyhow. */
3294 for (s = abfd->sections; s != NULL; s = s->next)
3295 {
3296 if ((s->flags & SEC_LOAD) != 0
3297 && strncmp (s->name, ".note", 5) == 0)
3298 {
dc810e39
AM
3299 amt = sizeof (struct elf_segment_map);
3300 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132
RH
3301 if (m == NULL)
3302 goto error_return;
3303 m->next = NULL;
3304 m->p_type = PT_NOTE;
3305 m->count = 1;
3306 m->sections[0] = s;
3307
3308 *pm = m;
3309 pm = &m->next;
3310 }
13ae64f3
JJ
3311 if (s->flags & SEC_THREAD_LOCAL)
3312 {
3313 if (! tls_count)
3314 first_tls = s;
3315 tls_count++;
3316 }
3317 }
3318
3319 /* If there are any SHF_TLS output sections, add PT_TLS segment. */
3320 if (tls_count > 0)
3321 {
3322 int i;
3323
3324 amt = sizeof (struct elf_segment_map);
3325 amt += (tls_count - 1) * sizeof (asection *);
3326 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3327 if (m == NULL)
3328 goto error_return;
3329 m->next = NULL;
3330 m->p_type = PT_TLS;
3331 m->count = tls_count;
3332 /* Mandated PF_R. */
3333 m->p_flags = PF_R;
3334 m->p_flags_valid = 1;
3335 for (i = 0; i < tls_count; ++i)
3336 {
3337 BFD_ASSERT (first_tls->flags & SEC_THREAD_LOCAL);
3338 m->sections[i] = first_tls;
3339 first_tls = first_tls->next;
3340 }
3341
3342 *pm = m;
3343 pm = &m->next;
252b5132
RH
3344 }
3345
65765700
JJ
3346 /* If there is a .eh_frame_hdr section, throw in a PT_GNU_EH_FRAME
3347 segment. */
9ad5cbcf
AM
3348 eh_frame_hdr = NULL;
3349 if (elf_tdata (abfd)->eh_frame_hdr)
3350 eh_frame_hdr = bfd_get_section_by_name (abfd, ".eh_frame_hdr");
65765700
JJ
3351 if (eh_frame_hdr != NULL && (eh_frame_hdr->flags & SEC_LOAD))
3352 {
3353 amt = sizeof (struct elf_segment_map);
3354 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
3355 if (m == NULL)
3356 goto error_return;
3357 m->next = NULL;
3358 m->p_type = PT_GNU_EH_FRAME;
3359 m->count = 1;
3360 m->sections[0] = eh_frame_hdr;
3361
3362 *pm = m;
3363 pm = &m->next;
3364 }
3365
252b5132
RH
3366 free (sections);
3367 sections = NULL;
3368
3369 elf_tdata (abfd)->segment_map = mfirst;
3370 return true;
3371
3372 error_return:
3373 if (sections != NULL)
3374 free (sections);
3375 return false;
3376}
3377
3378/* Sort sections by address. */
3379
3380static int
3381elf_sort_sections (arg1, arg2)
3382 const PTR arg1;
3383 const PTR arg2;
3384{
3385 const asection *sec1 = *(const asection **) arg1;
3386 const asection *sec2 = *(const asection **) arg2;
3387
3388 /* Sort by LMA first, since this is the address used to
3389 place the section into a segment. */
3390 if (sec1->lma < sec2->lma)
3391 return -1;
3392 else if (sec1->lma > sec2->lma)
3393 return 1;
3394
3395 /* Then sort by VMA. Normally the LMA and the VMA will be
3396 the same, and this will do nothing. */
3397 if (sec1->vma < sec2->vma)
3398 return -1;
3399 else if (sec1->vma > sec2->vma)
3400 return 1;
3401
3402 /* Put !SEC_LOAD sections after SEC_LOAD ones. */
3403
3404#define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
3405
3406 if (TOEND (sec1))
3407 {
3408 if (TOEND (sec2))
00a7cdc5
NC
3409 {
3410 /* If the indicies are the same, do not return 0
3411 here, but continue to try the next comparison. */
3412 if (sec1->target_index - sec2->target_index != 0)
3413 return sec1->target_index - sec2->target_index;
3414 }
252b5132
RH
3415 else
3416 return 1;
3417 }
00a7cdc5 3418 else if (TOEND (sec2))
252b5132
RH
3419 return -1;
3420
3421#undef TOEND
3422
00a7cdc5
NC
3423 /* Sort by size, to put zero sized sections
3424 before others at the same address. */
252b5132
RH
3425
3426 if (sec1->_raw_size < sec2->_raw_size)
3427 return -1;
3428 if (sec1->_raw_size > sec2->_raw_size)
3429 return 1;
3430
3431 return sec1->target_index - sec2->target_index;
3432}
3433
3434/* Assign file positions to the sections based on the mapping from
3435 sections to segments. This function also sets up some fields in
3436 the file header, and writes out the program headers. */
3437
3438static boolean
3439assign_file_positions_for_segments (abfd)
3440 bfd *abfd;
3441{
3442 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
3443 unsigned int count;
3444 struct elf_segment_map *m;
3445 unsigned int alloc;
3446 Elf_Internal_Phdr *phdrs;
3447 file_ptr off, voff;
3448 bfd_vma filehdr_vaddr, filehdr_paddr;
3449 bfd_vma phdrs_vaddr, phdrs_paddr;
3450 Elf_Internal_Phdr *p;
dc810e39 3451 bfd_size_type amt;
252b5132
RH
3452
3453 if (elf_tdata (abfd)->segment_map == NULL)
3454 {
3455 if (! map_sections_to_segments (abfd))
3456 return false;
3457 }
1ed89aa9
NC
3458 else
3459 {
3460 /* The placement algorithm assumes that non allocated sections are
3461 not in PT_LOAD segments. We ensure this here by removing such
3462 sections from the segment map. */
3463 for (m = elf_tdata (abfd)->segment_map;
3464 m != NULL;
3465 m = m->next)
3466 {
3467 unsigned int new_count;
3468 unsigned int i;
3469
3470 if (m->p_type != PT_LOAD)
3471 continue;
3472
3473 new_count = 0;
3474 for (i = 0; i < m->count; i ++)
3475 {
3476 if ((m->sections[i]->flags & SEC_ALLOC) != 0)
3477 {
3478 if (i != new_count)
3479 m->sections[new_count] = m->sections[i];
3480
3481 new_count ++;
3482 }
3483 }
3484
3485 if (new_count != m->count)
3486 m->count = new_count;
3487 }
3488 }
252b5132
RH
3489
3490 if (bed->elf_backend_modify_segment_map)
3491 {
3492 if (! (*bed->elf_backend_modify_segment_map) (abfd))
3493 return false;
3494 }
3495
3496 count = 0;
3497 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
3498 ++count;
3499
3500 elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
3501 elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
3502 elf_elfheader (abfd)->e_phnum = count;
3503
3504 if (count == 0)
3505 return true;
3506
3507 /* If we already counted the number of program segments, make sure
3508 that we allocated enough space. This happens when SIZEOF_HEADERS
3509 is used in a linker script. */
3510 alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
3511 if (alloc != 0 && count > alloc)
3512 {
3513 ((*_bfd_error_handler)
3514 (_("%s: Not enough room for program headers (allocated %u, need %u)"),
3515 bfd_get_filename (abfd), alloc, count));
3516 bfd_set_error (bfd_error_bad_value);
3517 return false;
3518 }
3519
3520 if (alloc == 0)
3521 alloc = count;
3522
dc810e39
AM
3523 amt = alloc * sizeof (Elf_Internal_Phdr);
3524 phdrs = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
252b5132
RH
3525 if (phdrs == NULL)
3526 return false;
3527
3528 off = bed->s->sizeof_ehdr;
3529 off += alloc * bed->s->sizeof_phdr;
3530
3531 filehdr_vaddr = 0;
3532 filehdr_paddr = 0;
3533 phdrs_vaddr = 0;
3534 phdrs_paddr = 0;
3535
3536 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
3537 m != NULL;
3538 m = m->next, p++)
3539 {
3540 unsigned int i;
3541 asection **secpp;
3542
3543 /* If elf_segment_map is not from map_sections_to_segments, the
52e9b619
MS
3544 sections may not be correctly ordered. NOTE: sorting should
3545 not be done to the PT_NOTE section of a corefile, which may
3546 contain several pseudo-sections artificially created by bfd.
3547 Sorting these pseudo-sections breaks things badly. */
3548 if (m->count > 1
3549 && !(elf_elfheader (abfd)->e_type == ET_CORE
3550 && m->p_type == PT_NOTE))
252b5132
RH
3551 qsort (m->sections, (size_t) m->count, sizeof (asection *),
3552 elf_sort_sections);
3553
3554 p->p_type = m->p_type;
28a7f3e7 3555 p->p_flags = m->p_flags;
252b5132
RH
3556
3557 if (p->p_type == PT_LOAD
3558 && m->count > 0
3559 && (m->sections[0]->flags & SEC_ALLOC) != 0)
3560 {
3561 if ((abfd->flags & D_PAGED) != 0)
3562 off += (m->sections[0]->vma - off) % bed->maxpagesize;
3563 else
3564 {
3565 bfd_size_type align;
3566
3567 align = 0;
3568 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
3569 {
3570 bfd_size_type secalign;
3571
3572 secalign = bfd_get_section_alignment (abfd, *secpp);
3573 if (secalign > align)
3574 align = secalign;
3575 }
3576
3577 off += (m->sections[0]->vma - off) % (1 << align);
3578 }
3579 }
3580
3581 if (m->count == 0)
3582 p->p_vaddr = 0;
3583 else
3584 p->p_vaddr = m->sections[0]->vma;
3585
3586 if (m->p_paddr_valid)
3587 p->p_paddr = m->p_paddr;
3588 else if (m->count == 0)
3589 p->p_paddr = 0;
3590 else
3591 p->p_paddr = m->sections[0]->lma;
3592
3593 if (p->p_type == PT_LOAD
3594 && (abfd->flags & D_PAGED) != 0)
3595 p->p_align = bed->maxpagesize;
3596 else if (m->count == 0)
3597 p->p_align = bed->s->file_align;
3598 else
3599 p->p_align = 0;
3600
3601 p->p_offset = 0;
3602 p->p_filesz = 0;
3603 p->p_memsz = 0;
3604
3605 if (m->includes_filehdr)
3606 {
3607 if (! m->p_flags_valid)
3608 p->p_flags |= PF_R;
3609 p->p_offset = 0;
3610 p->p_filesz = bed->s->sizeof_ehdr;
3611 p->p_memsz = bed->s->sizeof_ehdr;
3612 if (m->count > 0)
3613 {
3614 BFD_ASSERT (p->p_type == PT_LOAD);
3615
3616 if (p->p_vaddr < (bfd_vma) off)
3617 {
caf47ea6
AM
3618 (*_bfd_error_handler)
3619 (_("%s: Not enough room for program headers, try linking with -N"),
3620 bfd_get_filename (abfd));
252b5132
RH
3621 bfd_set_error (bfd_error_bad_value);
3622 return false;
3623 }
3624
3625 p->p_vaddr -= off;
3626 if (! m->p_paddr_valid)
3627 p->p_paddr -= off;
3628 }
3629 if (p->p_type == PT_LOAD)
3630 {
3631 filehdr_vaddr = p->p_vaddr;
3632 filehdr_paddr = p->p_paddr;
3633 }
3634 }
3635
3636 if (m->includes_phdrs)
3637 {
3638 if (! m->p_flags_valid)
3639 p->p_flags |= PF_R;
3640
3641 if (m->includes_filehdr)
3642 {
3643 if (p->p_type == PT_LOAD)
3644 {
3645 phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
3646 phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
3647 }
3648 }
3649 else
3650 {
3651 p->p_offset = bed->s->sizeof_ehdr;
3652
3653 if (m->count > 0)
3654 {
3655 BFD_ASSERT (p->p_type == PT_LOAD);
3656 p->p_vaddr -= off - p->p_offset;
3657 if (! m->p_paddr_valid)
3658 p->p_paddr -= off - p->p_offset;
3659 }
3660
3661 if (p->p_type == PT_LOAD)
3662 {
3663 phdrs_vaddr = p->p_vaddr;
3664 phdrs_paddr = p->p_paddr;
3665 }
3666 else
3667 phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
3668 }
3669
3670 p->p_filesz += alloc * bed->s->sizeof_phdr;
3671 p->p_memsz += alloc * bed->s->sizeof_phdr;
3672 }
3673
3674 if (p->p_type == PT_LOAD
3675 || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
3676 {
3677 if (! m->includes_filehdr && ! m->includes_phdrs)
3678 p->p_offset = off;
3679 else
3680 {
3681 file_ptr adjust;
3682
3683 adjust = off - (p->p_offset + p->p_filesz);
3684 p->p_filesz += adjust;
3685 p->p_memsz += adjust;
3686 }
3687 }
3688
3689 voff = off;
3690
3691 for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
3692 {
3693 asection *sec;
3694 flagword flags;
3695 bfd_size_type align;
3696
3697 sec = *secpp;
3698 flags = sec->flags;
3699 align = 1 << bfd_get_section_alignment (abfd, sec);
3700
3701 /* The section may have artificial alignment forced by a
3702 link script. Notice this case by the gap between the
f5ffc919
NC
3703 cumulative phdr lma and the section's lma. */
3704 if (p->p_paddr + p->p_memsz < sec->lma)
252b5132 3705 {
f5ffc919 3706 bfd_vma adjust = sec->lma - (p->p_paddr + p->p_memsz);
252b5132
RH
3707
3708 p->p_memsz += adjust;
3709 off += adjust;
3710 voff += adjust;
3711 if ((flags & SEC_LOAD) != 0)
3712 p->p_filesz += adjust;
3713 }
3714
3715 if (p->p_type == PT_LOAD)
3716 {
3717 bfd_signed_vma adjust;
3718
3719 if ((flags & SEC_LOAD) != 0)
3720 {
3721 adjust = sec->lma - (p->p_paddr + p->p_memsz);
3722 if (adjust < 0)
3723 adjust = 0;
3724 }
3725 else if ((flags & SEC_ALLOC) != 0)
3726 {
3727 /* The section VMA must equal the file position
3728 modulo the page size. FIXME: I'm not sure if
3729 this adjustment is really necessary. We used to
3730 not have the SEC_LOAD case just above, and then
3731 this was necessary, but now I'm not sure. */
3732 if ((abfd->flags & D_PAGED) != 0)
3733 adjust = (sec->vma - voff) % bed->maxpagesize;
3734 else
3735 adjust = (sec->vma - voff) % align;
3736 }
3737 else
3738 adjust = 0;
3739
3740 if (adjust != 0)
3741 {
3742 if (i == 0)
3743 {
cdc7c09f
NC
3744 (* _bfd_error_handler) (_("\
3745Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%x"),
3746 bfd_section_name (abfd, sec),
3747 sec->lma,
3748 p->p_paddr);
252b5132
RH
3749 return false;
3750 }
3751 p->p_memsz += adjust;
3752 off += adjust;
3753 voff += adjust;
3754 if ((flags & SEC_LOAD) != 0)
3755 p->p_filesz += adjust;
3756 }
3757
3758 sec->filepos = off;
3759
3760 /* We check SEC_HAS_CONTENTS here because if NOLOAD is
3761 used in a linker script we may have a section with
3762 SEC_LOAD clear but which is supposed to have
3763 contents. */
3764 if ((flags & SEC_LOAD) != 0
3765 || (flags & SEC_HAS_CONTENTS) != 0)
3766 off += sec->_raw_size;
3767
3768 if ((flags & SEC_ALLOC) != 0)
3769 voff += sec->_raw_size;
3770 }
3771
3772 if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
3773 {
4a938328
MS
3774 /* The actual "note" segment has i == 0.
3775 This is the one that actually contains everything. */
3776 if (i == 0)
3777 {
252b5132
RH
3778 sec->filepos = off;
3779 p->p_filesz = sec->_raw_size;
3780 off += sec->_raw_size;
3781 voff = off;
3782 }
4a938328 3783 else
252b5132 3784 {
4a938328 3785 /* Fake sections -- don't need to be written. */
252b5132
RH
3786 sec->filepos = 0;
3787 sec->_raw_size = 0;
4a938328 3788 flags = sec->flags = 0;
252b5132
RH
3789 }
3790 p->p_memsz = 0;
3791 p->p_align = 1;
3792 }
3793 else
3794 {
3795 p->p_memsz += sec->_raw_size;
3796
3797 if ((flags & SEC_LOAD) != 0)
3798 p->p_filesz += sec->_raw_size;
3799
13ae64f3
JJ
3800 if (p->p_type == PT_TLS
3801 && sec->_raw_size == 0
3802 && (sec->flags & SEC_HAS_CONTENTS) == 0)
3803 {
3804 struct bfd_link_order *o;
3805 bfd_vma tbss_size = 0;
3806
3807 for (o = sec->link_order_head; o != NULL; o = o->next)
3808 if (tbss_size < o->offset + o->size)
3809 tbss_size = o->offset + o->size;
3810
3811 p->p_memsz += tbss_size;
3812 }
3813
252b5132
RH
3814 if (align > p->p_align
3815 && (p->p_type != PT_LOAD || (abfd->flags & D_PAGED) == 0))
3816 p->p_align = align;
3817 }
3818
3819 if (! m->p_flags_valid)
3820 {
3821 p->p_flags |= PF_R;
3822 if ((flags & SEC_CODE) != 0)
3823 p->p_flags |= PF_X;
3824 if ((flags & SEC_READONLY) == 0)
3825 p->p_flags |= PF_W;
3826 }
3827 }
3828 }
3829
3830 /* Now that we have set the section file positions, we can set up
3831 the file positions for the non PT_LOAD segments. */
3832 for (m = elf_tdata (abfd)->segment_map, p = phdrs;
3833 m != NULL;
3834 m = m->next, p++)
3835 {
3836 if (p->p_type != PT_LOAD && m->count > 0)
3837 {
3838 BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
3839 p->p_offset = m->sections[0]->filepos;
3840 }
3841 if (m->count == 0)
3842 {
3843 if (m->includes_filehdr)
3844 {
3845 p->p_vaddr = filehdr_vaddr;
3846 if (! m->p_paddr_valid)
3847 p->p_paddr = filehdr_paddr;
3848 }
3849 else if (m->includes_phdrs)
3850 {
3851 p->p_vaddr = phdrs_vaddr;
3852 if (! m->p_paddr_valid)
3853 p->p_paddr = phdrs_paddr;
3854 }
3855 }
3856 }
3857
caf47ea6
AM
3858 /* If additional nonloadable filepos adjustments are required,
3859 do them now. */
3860 if (bed->set_nonloadable_filepos)
3861 (*bed->set_nonloadable_filepos) (abfd, phdrs);
3862
252b5132
RH
3863 /* Clear out any program headers we allocated but did not use. */
3864 for (; count < alloc; count++, p++)
3865 {
3866 memset (p, 0, sizeof *p);
3867 p->p_type = PT_NULL;
3868 }
3869
3870 elf_tdata (abfd)->phdr = phdrs;
3871
3872 elf_tdata (abfd)->next_file_pos = off;
3873
3874 /* Write out the program headers. */
dc810e39 3875 if (bfd_seek (abfd, (bfd_signed_vma) bed->s->sizeof_ehdr, SEEK_SET) != 0
252b5132
RH
3876 || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
3877 return false;
3878
3879 return true;
3880}
3881
3882/* Get the size of the program header.
3883
3884 If this is called by the linker before any of the section VMA's are set, it
3885 can't calculate the correct value for a strange memory layout. This only
3886 happens when SIZEOF_HEADERS is used in a linker script. In this case,
3887 SORTED_HDRS is NULL and we assume the normal scenario of one text and one
3888 data segment (exclusive of .interp and .dynamic).
3889
3890 ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
3891 will be two segments. */
3892
3893static bfd_size_type
3894get_program_header_size (abfd)
3895 bfd *abfd;
3896{
3897 size_t segs;
3898 asection *s;
3899 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3900
3901 /* We can't return a different result each time we're called. */
3902 if (elf_tdata (abfd)->program_header_size != 0)
3903 return elf_tdata (abfd)->program_header_size;
3904
3905 if (elf_tdata (abfd)->segment_map != NULL)
3906 {
3907 struct elf_segment_map *m;
3908
3909 segs = 0;
3910 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
3911 ++segs;
3912 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3913 return elf_tdata (abfd)->program_header_size;
3914 }
3915
3916 /* Assume we will need exactly two PT_LOAD segments: one for text
3917 and one for data. */
3918 segs = 2;
3919
3920 s = bfd_get_section_by_name (abfd, ".interp");
3921 if (s != NULL && (s->flags & SEC_LOAD) != 0)
3922 {
3923 /* If we have a loadable interpreter section, we need a
3924 PT_INTERP segment. In this case, assume we also need a
3925 PT_PHDR segment, although that may not be true for all
3926 targets. */
3927 segs += 2;
3928 }
3929
3930 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
3931 {
3932 /* We need a PT_DYNAMIC segment. */
3933 ++segs;
3934 }
3935
65765700
JJ
3936 if (elf_tdata (abfd)->eh_frame_hdr
3937 && bfd_get_section_by_name (abfd, ".eh_frame_hdr") != NULL)
3938 {
3939 /* We need a PT_GNU_EH_FRAME segment. */
3940 ++segs;
3941 }
3942
252b5132
RH
3943 for (s = abfd->sections; s != NULL; s = s->next)
3944 {
3945 if ((s->flags & SEC_LOAD) != 0
3946 && strncmp (s->name, ".note", 5) == 0)
3947 {
3948 /* We need a PT_NOTE segment. */
3949 ++segs;
3950 }
3951 }
3952
13ae64f3
JJ
3953 for (s = abfd->sections; s != NULL; s = s->next)
3954 {
3955 if (s->flags & SEC_THREAD_LOCAL)
3956 {
3957 /* We need a PT_TLS segment. */
3958 ++segs;
3959 break;
3960 }
3961 }
3962
252b5132
RH
3963 /* Let the backend count up any program headers it might need. */
3964 if (bed->elf_backend_additional_program_headers)
3965 {
3966 int a;
3967
3968 a = (*bed->elf_backend_additional_program_headers) (abfd);
3969 if (a == -1)
3970 abort ();
3971 segs += a;
3972 }
3973
3974 elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3975 return elf_tdata (abfd)->program_header_size;
3976}
3977
3978/* Work out the file positions of all the sections. This is called by
3979 _bfd_elf_compute_section_file_positions. All the section sizes and
3980 VMAs must be known before this is called.
3981
3982 We do not consider reloc sections at this point, unless they form
3983 part of the loadable image. Reloc sections are assigned file
3984 positions in assign_file_positions_for_relocs, which is called by
3985 write_object_contents and final_link.
3986
3987 We also don't set the positions of the .symtab and .strtab here. */
3988
3989static boolean
3990assign_file_positions_except_relocs (abfd)
3991 bfd *abfd;
3992{
3993 struct elf_obj_tdata * const tdata = elf_tdata (abfd);
3994 Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
3995 Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
9ad5cbcf 3996 unsigned int num_sec = elf_numsections (abfd);
252b5132
RH
3997 file_ptr off;
3998 struct elf_backend_data *bed = get_elf_backend_data (abfd);
3999
4000 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
4001 && bfd_get_format (abfd) != bfd_core)
4002 {
4003 Elf_Internal_Shdr **hdrpp;
4004 unsigned int i;
4005
4006 /* Start after the ELF header. */
4007 off = i_ehdrp->e_ehsize;
4008
4009 /* We are not creating an executable, which means that we are
4010 not creating a program header, and that the actual order of
4011 the sections in the file is unimportant. */
9ad5cbcf 4012 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
252b5132
RH
4013 {
4014 Elf_Internal_Shdr *hdr;
4015
4016 hdr = *hdrpp;
9ad5cbcf
AM
4017 if (hdr->sh_type == SHT_REL
4018 || hdr->sh_type == SHT_RELA
4019 || i == tdata->symtab_section
4020 || i == tdata->symtab_shndx_section
252b5132
RH
4021 || i == tdata->strtab_section)
4022 {
4023 hdr->sh_offset = -1;
252b5132 4024 }
9ad5cbcf
AM
4025 else
4026 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
252b5132 4027
9ad5cbcf
AM
4028 if (i == SHN_LORESERVE - 1)
4029 {
4030 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4031 hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4032 }
252b5132
RH
4033 }
4034 }
4035 else
4036 {
4037 unsigned int i;
4038 Elf_Internal_Shdr **hdrpp;
4039
4040 /* Assign file positions for the loaded sections based on the
4041 assignment of sections to segments. */
4042 if (! assign_file_positions_for_segments (abfd))
4043 return false;
4044
4045 /* Assign file positions for the other sections. */
4046
4047 off = elf_tdata (abfd)->next_file_pos;
9ad5cbcf 4048 for (i = 1, hdrpp = i_shdrpp + 1; i < num_sec; i++, hdrpp++)
252b5132
RH
4049 {
4050 Elf_Internal_Shdr *hdr;
4051
4052 hdr = *hdrpp;
4053 if (hdr->bfd_section != NULL
4054 && hdr->bfd_section->filepos != 0)
4055 hdr->sh_offset = hdr->bfd_section->filepos;
4056 else if ((hdr->sh_flags & SHF_ALLOC) != 0)
4057 {
4058 ((*_bfd_error_handler)
4059 (_("%s: warning: allocated section `%s' not in segment"),
4060 bfd_get_filename (abfd),
4061 (hdr->bfd_section == NULL
4062 ? "*unknown*"
4063 : hdr->bfd_section->name)));
4064 if ((abfd->flags & D_PAGED) != 0)
4065 off += (hdr->sh_addr - off) % bed->maxpagesize;
4066 else
4067 off += (hdr->sh_addr - off) % hdr->sh_addralign;
4068 off = _bfd_elf_assign_file_position_for_section (hdr, off,
4069 false);
4070 }
4071 else if (hdr->sh_type == SHT_REL
4072 || hdr->sh_type == SHT_RELA
4073 || hdr == i_shdrpp[tdata->symtab_section]
9ad5cbcf 4074 || hdr == i_shdrpp[tdata->symtab_shndx_section]
252b5132
RH
4075 || hdr == i_shdrpp[tdata->strtab_section])
4076 hdr->sh_offset = -1;
4077 else
4078 off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
9ad5cbcf
AM
4079
4080 if (i == SHN_LORESERVE - 1)
4081 {
4082 i += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4083 hdrpp += SHN_HIRESERVE + 1 - SHN_LORESERVE;
4084 }
252b5132
RH
4085 }
4086 }
4087
4088 /* Place the section headers. */
4089 off = align_file_position (off, bed->s->file_align);
4090 i_ehdrp->e_shoff = off;
4091 off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
4092
4093 elf_tdata (abfd)->next_file_pos = off;
4094
4095 return true;
4096}
4097
4098static boolean
4099prep_headers (abfd)
4100 bfd *abfd;
4101{
4102 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
4103 Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
4104 Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */
2b0f7ef9 4105 struct elf_strtab_hash *shstrtab;
252b5132
RH
4106 struct elf_backend_data *bed = get_elf_backend_data (abfd);
4107
4108 i_ehdrp = elf_elfheader (abfd);
4109 i_shdrp = elf_elfsections (abfd);
4110
2b0f7ef9 4111 shstrtab = _bfd_elf_strtab_init ();
252b5132
RH
4112 if (shstrtab == NULL)
4113 return false;
4114
4115 elf_shstrtab (abfd) = shstrtab;
4116
4117 i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
4118 i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
4119 i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
4120 i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
4121
4122 i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
4123 i_ehdrp->e_ident[EI_DATA] =
4124 bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
4125 i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
4126
252b5132
RH
4127 if ((abfd->flags & DYNAMIC) != 0)
4128 i_ehdrp->e_type = ET_DYN;
4129 else if ((abfd->flags & EXEC_P) != 0)
4130 i_ehdrp->e_type = ET_EXEC;
4131 else if (bfd_get_format (abfd) == bfd_core)
4132 i_ehdrp->e_type = ET_CORE;
4133 else
4134 i_ehdrp->e_type = ET_REL;
4135
4136 switch (bfd_get_arch (abfd))
4137 {
4138 case bfd_arch_unknown:
4139 i_ehdrp->e_machine = EM_NONE;
4140 break;
aa4f99bb
AO
4141
4142 /* There used to be a long list of cases here, each one setting
4143 e_machine to the same EM_* macro #defined as ELF_MACHINE_CODE
4144 in the corresponding bfd definition. To avoid duplication,
4145 the switch was removed. Machines that need special handling
4146 can generally do it in elf_backend_final_write_processing(),
4147 unless they need the information earlier than the final write.
4148 Such need can generally be supplied by replacing the tests for
4149 e_machine with the conditions used to determine it. */
252b5132 4150 default:
aa4f99bb
AO
4151 if (get_elf_backend_data (abfd) != NULL)
4152 i_ehdrp->e_machine = get_elf_backend_data (abfd)->elf_machine_code;
4153 else
4154 i_ehdrp->e_machine = EM_NONE;
4155 }
4156
252b5132
RH
4157 i_ehdrp->e_version = bed->s->ev_current;
4158 i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
4159
c044fabd 4160 /* No program header, for now. */
252b5132
RH
4161 i_ehdrp->e_phoff = 0;
4162 i_ehdrp->e_phentsize = 0;
4163 i_ehdrp->e_phnum = 0;
4164
c044fabd 4165 /* Each bfd section is section header entry. */
252b5132
RH
4166 i_ehdrp->e_entry = bfd_get_start_address (abfd);
4167 i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
4168
c044fabd 4169 /* If we're building an executable, we'll need a program header table. */
252b5132
RH
4170 if (abfd->flags & EXEC_P)
4171 {
c044fabd 4172 /* It all happens later. */
252b5132
RH
4173#if 0
4174 i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
4175
4176 /* elf_build_phdrs() returns a (NULL-terminated) array of
c044fabd 4177 Elf_Internal_Phdrs. */
252b5132
RH
4178 i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
4179 i_ehdrp->e_phoff = outbase;
4180 outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
4181#endif
4182 }
4183 else
4184 {
4185 i_ehdrp->e_phentsize = 0;
4186 i_phdrp = 0;
4187 i_ehdrp->e_phoff = 0;
4188 }
4189
4190 elf_tdata (abfd)->symtab_hdr.sh_name =
2b0f7ef9 4191 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", false);
252b5132 4192 elf_tdata (abfd)->strtab_hdr.sh_name =
2b0f7ef9 4193 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".strtab", false);
252b5132 4194 elf_tdata (abfd)->shstrtab_hdr.sh_name =
2b0f7ef9 4195 (unsigned int) _bfd_elf_strtab_add (shstrtab, ".shstrtab", false);
252b5132
RH
4196 if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
4197 || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
4198 || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
4199 return false;
4200
4201 return true;
4202}
4203
4204/* Assign file positions for all the reloc sections which are not part
4205 of the loadable file image. */
4206
4207void
4208_bfd_elf_assign_file_positions_for_relocs (abfd)
4209 bfd *abfd;
4210{
4211 file_ptr off;
9ad5cbcf 4212 unsigned int i, num_sec;
252b5132
RH
4213 Elf_Internal_Shdr **shdrpp;
4214
4215 off = elf_tdata (abfd)->next_file_pos;
4216
9ad5cbcf
AM
4217 num_sec = elf_numsections (abfd);
4218 for (i = 1, shdrpp = elf_elfsections (abfd) + 1; i < num_sec; i++, shdrpp++)
252b5132
RH
4219 {
4220 Elf_Internal_Shdr *shdrp;
4221
4222 shdrp = *shdrpp;
4223 if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
4224 && shdrp->sh_offset == -1)
4225 off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
4226 }
4227
4228 elf_tdata (abfd)->next_file_pos = off;
4229}
4230
4231boolean
4232_bfd_elf_write_object_contents (abfd)
4233 bfd *abfd;
4234{
4235 struct elf_backend_data *bed = get_elf_backend_data (abfd);
4236 Elf_Internal_Ehdr *i_ehdrp;
4237 Elf_Internal_Shdr **i_shdrp;
4238 boolean failed;
9ad5cbcf 4239 unsigned int count, num_sec;
252b5132
RH
4240
4241 if (! abfd->output_has_begun
4242 && ! _bfd_elf_compute_section_file_positions
4243 (abfd, (struct bfd_link_info *) NULL))
4244 return false;
4245
4246 i_shdrp = elf_elfsections (abfd);
4247 i_ehdrp = elf_elfheader (abfd);
4248
4249 failed = false;
4250 bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
4251 if (failed)
4252 return false;
4253
4254 _bfd_elf_assign_file_positions_for_relocs (abfd);
4255
c044fabd 4256 /* After writing the headers, we need to write the sections too... */
9ad5cbcf
AM
4257 num_sec = elf_numsections (abfd);
4258 for (count = 1; count < num_sec; count++)
252b5132
RH
4259 {
4260 if (bed->elf_backend_section_processing)
4261 (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
4262 if (i_shdrp[count]->contents)
4263 {
dc810e39
AM
4264 bfd_size_type amt = i_shdrp[count]->sh_size;
4265
252b5132 4266 if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
dc810e39 4267 || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt)
252b5132
RH
4268 return false;
4269 }
9ad5cbcf
AM
4270 if (count == SHN_LORESERVE - 1)
4271 count += SHN_HIRESERVE + 1 - SHN_LORESERVE;
252b5132
RH
4272 }
4273
4274 /* Write out the section header names. */
4275 if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
2b0f7ef9 4276 || ! _bfd_elf_strtab_emit (abfd, elf_shstrtab (abfd)))
252b5132
RH
4277 return false;
4278
4279 if (bed->elf_backend_final_write_processing)
4280 (*bed->elf_backend_final_write_processing) (abfd,
4281 elf_tdata (abfd)->linker);
4282
4283 return bed->s->write_shdrs_and_ehdr (abfd);
4284}
4285
4286boolean
4287_bfd_elf_write_corefile_contents (abfd)
4288 bfd *abfd;
4289{
c044fabd 4290 /* Hopefully this can be done just like an object file. */
252b5132
RH
4291 return _bfd_elf_write_object_contents (abfd);
4292}
c044fabd
KH
4293
4294/* Given a section, search the header to find them. */
4295
252b5132
RH
4296int
4297_bfd_elf_section_from_bfd_section (abfd, asect)
4298 bfd *abfd;
4299 struct sec *asect;
4300{
af746e92 4301 struct elf_backend_data *bed;
252b5132 4302 int index;
252b5132 4303
9ad5cbcf
AM
4304 if (elf_section_data (asect) != NULL
4305 && elf_section_data (asect)->this_idx != 0)
4306 return elf_section_data (asect)->this_idx;
4307
4308 if (bfd_is_abs_section (asect))
af746e92
AM
4309 index = SHN_ABS;
4310 else if (bfd_is_com_section (asect))
4311 index = SHN_COMMON;
4312 else if (bfd_is_und_section (asect))
4313 index = SHN_UNDEF;
4314 else
252b5132 4315 {
af746e92
AM
4316 Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
4317 int maxindex = elf_numsections (abfd);
4318
4319 for (index = 1; index < maxindex; index++)
4320 {
4321 Elf_Internal_Shdr *hdr = i_shdrp[index];
4322
4323 if (hdr != NULL && hdr->bfd_section == asect)
4324 return index;
4325 }
4326 index = -1;
252b5132
RH
4327 }
4328
af746e92 4329 bed = get_elf_backend_data (abfd);
252b5132
RH
4330 if (bed->elf_backend_section_from_bfd_section)
4331 {
af746e92 4332 int retval = index;
9ad5cbcf 4333
af746e92
AM
4334 if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval))
4335 return retval;
252b5132
RH
4336 }
4337
af746e92
AM
4338 if (index == -1)
4339 bfd_set_error (bfd_error_nonrepresentable_section);
252b5132 4340
af746e92 4341 return index;
252b5132
RH
4342}
4343
4344/* Given a BFD symbol, return the index in the ELF symbol table, or -1
4345 on error. */
4346
4347int
4348_bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
4349 bfd *abfd;
4350 asymbol **asym_ptr_ptr;
4351{
4352 asymbol *asym_ptr = *asym_ptr_ptr;
4353 int idx;
4354 flagword flags = asym_ptr->flags;
4355
4356 /* When gas creates relocations against local labels, it creates its
4357 own symbol for the section, but does put the symbol into the
4358 symbol chain, so udata is 0. When the linker is generating
4359 relocatable output, this section symbol may be for one of the
4360 input sections rather than the output section. */
4361 if (asym_ptr->udata.i == 0
4362 && (flags & BSF_SECTION_SYM)
4363 && asym_ptr->section)
4364 {
4365 int indx;
4366
4367 if (asym_ptr->section->output_section != NULL)
4368 indx = asym_ptr->section->output_section->index;
4369 else
4370 indx = asym_ptr->section->index;
4e89ac30
L
4371 if (indx < elf_num_section_syms (abfd)
4372 && elf_section_syms (abfd)[indx] != NULL)
252b5132
RH
4373 asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
4374 }
4375
4376 idx = asym_ptr->udata.i;
4377
4378 if (idx == 0)
4379 {
4380 /* This case can occur when using --strip-symbol on a symbol
4381 which is used in a relocation entry. */
4382 (*_bfd_error_handler)
4383 (_("%s: symbol `%s' required but not present"),
8f615d07 4384 bfd_archive_filename (abfd), bfd_asymbol_name (asym_ptr));
252b5132
RH
4385 bfd_set_error (bfd_error_no_symbols);
4386 return -1;
4387 }
4388
4389#if DEBUG & 4
4390 {
4391 fprintf (stderr,
661a3fd4 4392 "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
252b5132
RH
4393 (long) asym_ptr, asym_ptr->name, idx, flags,
4394 elf_symbol_flags (flags));
4395 fflush (stderr);
4396 }
4397#endif
4398
4399 return idx;
4400}
4401
4402/* Copy private BFD data. This copies any program header information. */
4403
4404static boolean
4405copy_private_bfd_data (ibfd, obfd)
4406 bfd *ibfd;
4407 bfd *obfd;
4408{
bc67d8a6
NC
4409 Elf_Internal_Ehdr * iehdr;
4410 struct elf_segment_map * map;
4411 struct elf_segment_map * map_first;
4412 struct elf_segment_map ** pointer_to_map;
4413 Elf_Internal_Phdr * segment;
4414 asection * section;
4415 unsigned int i;
4416 unsigned int num_segments;
4417 boolean phdr_included = false;
4418 bfd_vma maxpagesize;
4419 struct elf_segment_map * phdr_adjust_seg = NULL;
4420 unsigned int phdr_adjust_num = 0;
caf47ea6 4421 struct elf_backend_data * bed;
bc67d8a6 4422
c044fabd 4423 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
252b5132
RH
4424 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4425 return true;
4426
4427 if (elf_tdata (ibfd)->phdr == NULL)
4428 return true;
4429
caf47ea6 4430 bed = get_elf_backend_data (ibfd);
252b5132
RH
4431 iehdr = elf_elfheader (ibfd);
4432
bc67d8a6 4433 map_first = NULL;
c044fabd 4434 pointer_to_map = &map_first;
252b5132
RH
4435
4436 num_segments = elf_elfheader (ibfd)->e_phnum;
bc67d8a6
NC
4437 maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
4438
4439 /* Returns the end address of the segment + 1. */
4440#define SEGMENT_END(segment, start) \
4441 (start + (segment->p_memsz > segment->p_filesz \
4442 ? segment->p_memsz : segment->p_filesz))
4443
4444 /* Returns true if the given section is contained within
4445 the given segment. VMA addresses are compared. */
4446#define IS_CONTAINED_BY_VMA(section, segment) \
4447 (section->vma >= segment->p_vaddr \
4448 && (section->vma + section->_raw_size) \
4449 <= (SEGMENT_END (segment, segment->p_vaddr)))
c044fabd 4450
bc67d8a6
NC
4451 /* Returns true if the given section is contained within
4452 the given segment. LMA addresses are compared. */
4453#define IS_CONTAINED_BY_LMA(section, segment, base) \
4454 (section->lma >= base \
4455 && (section->lma + section->_raw_size) \
4456 <= SEGMENT_END (segment, base))
252b5132 4457
caf47ea6
AM
4458 /* Returns true if the given section is contained within the
4459 given segment. Filepos addresses are compared in an elf
4460 backend function. */
4461#define IS_CONTAINED_BY_FILEPOS(sec, seg, bed) \
4462 (bed->is_contained_by_filepos \
4463 && (*bed->is_contained_by_filepos) (sec, seg))
4464
c044fabd 4465 /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
bc67d8a6
NC
4466#define IS_COREFILE_NOTE(p, s) \
4467 (p->p_type == PT_NOTE \
4468 && bfd_get_format (ibfd) == bfd_core \
4469 && s->vma == 0 && s->lma == 0 \
4470 && (bfd_vma) s->filepos >= p->p_offset \
4471 && (bfd_vma) s->filepos + s->_raw_size \
252b5132
RH
4472 <= p->p_offset + p->p_filesz)
4473
4474 /* The complicated case when p_vaddr is 0 is to handle the Solaris
4475 linker, which generates a PT_INTERP section with p_vaddr and
4476 p_memsz set to 0. */
bc67d8a6
NC
4477#define IS_SOLARIS_PT_INTERP(p, s) \
4478 ( p->p_vaddr == 0 \
4479 && p->p_filesz > 0 \
4480 && (s->flags & SEC_HAS_CONTENTS) != 0 \
4481 && s->_raw_size > 0 \
4482 && (bfd_vma) s->filepos >= p->p_offset \
4483 && ((bfd_vma) s->filepos + s->_raw_size \
c0f7859b 4484 <= p->p_offset + p->p_filesz))
5c440b1e 4485
bc67d8a6
NC
4486 /* Decide if the given section should be included in the given segment.
4487 A section will be included if:
f5ffc919
NC
4488 1. It is within the address space of the segment -- we use the LMA
4489 if that is set for the segment and the VMA otherwise,
bc67d8a6
NC
4490 2. It is an allocated segment,
4491 3. There is an output section associated with it,
4492 4. The section has not already been allocated to a previous segment. */
caf47ea6 4493#define INCLUDE_SECTION_IN_SEGMENT(section, segment, bed) \
f5ffc919
NC
4494 (((((segment->p_paddr \
4495 ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
4496 : IS_CONTAINED_BY_VMA (section, segment)) \
4497 || IS_SOLARIS_PT_INTERP (segment, section)) \
4498 && (section->flags & SEC_ALLOC) != 0) \
caf47ea6
AM
4499 || IS_COREFILE_NOTE (segment, section) \
4500 || (IS_CONTAINED_BY_FILEPOS (section, segment, bed) \
4501 && (section->flags & SEC_ALLOC) == 0)) \
f5ffc919 4502 && section->output_section != NULL \
bc67d8a6
NC
4503 && section->segment_mark == false)
4504
4505 /* Returns true iff seg1 starts after the end of seg2. */
4506#define SEGMENT_AFTER_SEGMENT(seg1, seg2) \
4507 (seg1->p_vaddr >= SEGMENT_END (seg2, seg2->p_vaddr))
4508
4509 /* Returns true iff seg1 and seg2 overlap. */
4510#define SEGMENT_OVERLAPS(seg1, seg2) \
4511 (!(SEGMENT_AFTER_SEGMENT (seg1, seg2) || SEGMENT_AFTER_SEGMENT (seg2, seg1)))
4512
4513 /* Initialise the segment mark field. */
4514 for (section = ibfd->sections; section != NULL; section = section->next)
4515 section->segment_mark = false;
4516
252b5132 4517 /* Scan through the segments specified in the program header
bc67d8a6 4518 of the input BFD. For this first scan we look for overlaps
9ad5cbcf 4519 in the loadable segments. These can be created by weird
bc67d8a6
NC
4520 parameters to objcopy. */
4521 for (i = 0, segment = elf_tdata (ibfd)->phdr;
4522 i < num_segments;
c044fabd 4523 i++, segment++)
252b5132 4524 {
252b5132 4525 unsigned int j;
c044fabd 4526 Elf_Internal_Phdr *segment2;
252b5132 4527
bc67d8a6
NC
4528 if (segment->p_type != PT_LOAD)
4529 continue;
c044fabd 4530
bc67d8a6 4531 /* Determine if this segment overlaps any previous segments. */
c044fabd 4532 for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2 ++)
bc67d8a6
NC
4533 {
4534 bfd_signed_vma extra_length;
c044fabd 4535
bc67d8a6
NC
4536 if (segment2->p_type != PT_LOAD
4537 || ! SEGMENT_OVERLAPS (segment, segment2))
4538 continue;
c044fabd 4539
bc67d8a6
NC
4540 /* Merge the two segments together. */
4541 if (segment2->p_vaddr < segment->p_vaddr)
4542 {
c044fabd
KH
4543 /* Extend SEGMENT2 to include SEGMENT and then delete
4544 SEGMENT. */
bc67d8a6
NC
4545 extra_length =
4546 SEGMENT_END (segment, segment->p_vaddr)
4547 - SEGMENT_END (segment2, segment2->p_vaddr);
c044fabd 4548
bc67d8a6
NC
4549 if (extra_length > 0)
4550 {
4551 segment2->p_memsz += extra_length;
4552 segment2->p_filesz += extra_length;
4553 }
c044fabd 4554
bc67d8a6 4555 segment->p_type = PT_NULL;
c044fabd 4556
bc67d8a6
NC
4557 /* Since we have deleted P we must restart the outer loop. */
4558 i = 0;
4559 segment = elf_tdata (ibfd)->phdr;
4560 break;
4561 }
4562 else
4563 {
c044fabd
KH
4564 /* Extend SEGMENT to include SEGMENT2 and then delete
4565 SEGMENT2. */
bc67d8a6
NC
4566 extra_length =
4567 SEGMENT_END (segment2, segment2->p_vaddr)
4568 - SEGMENT_END (segment, segment->p_vaddr);
c044fabd 4569
bc67d8a6
NC
4570 if (extra_length > 0)
4571 {
4572 segment->p_memsz += extra_length;
4573 segment->p_filesz += extra_length;
4574 }
c044fabd 4575
bc67d8a6
NC
4576 segment2->p_type = PT_NULL;
4577 }
4578 }
4579 }
c044fabd 4580
bc67d8a6
NC
4581 /* The second scan attempts to assign sections to segments. */
4582 for (i = 0, segment = elf_tdata (ibfd)->phdr;
4583 i < num_segments;
4584 i ++, segment ++)
4585 {
4586 unsigned int section_count;
4587 asection ** sections;
4588 asection * output_section;
4589 unsigned int isec;
4590 bfd_vma matching_lma;
4591 bfd_vma suggested_lma;
4592 unsigned int j;
dc810e39 4593 bfd_size_type amt;
bc67d8a6
NC
4594
4595 if (segment->p_type == PT_NULL)
4596 continue;
c044fabd 4597
bc67d8a6
NC
4598 /* Compute how many sections might be placed into this segment. */
4599 section_count = 0;
4600 for (section = ibfd->sections; section != NULL; section = section->next)
caf47ea6 4601 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
c044fabd 4602 ++section_count;
252b5132
RH
4603
4604 /* Allocate a segment map big enough to contain all of the
4605 sections we have selected. */
dc810e39
AM
4606 amt = sizeof (struct elf_segment_map);
4607 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
4608 map = (struct elf_segment_map *) bfd_alloc (obfd, amt);
bc67d8a6 4609 if (map == NULL)
252b5132
RH
4610 return false;
4611
4612 /* Initialise the fields of the segment map. Default to
4613 using the physical address of the segment in the input BFD. */
bc67d8a6
NC
4614 map->next = NULL;
4615 map->p_type = segment->p_type;
4616 map->p_flags = segment->p_flags;
4617 map->p_flags_valid = 1;
4618 map->p_paddr = segment->p_paddr;
4619 map->p_paddr_valid = 1;
252b5132
RH
4620
4621 /* Determine if this segment contains the ELF file header
4622 and if it contains the program headers themselves. */
bc67d8a6
NC
4623 map->includes_filehdr = (segment->p_offset == 0
4624 && segment->p_filesz >= iehdr->e_ehsize);
252b5132 4625
bc67d8a6 4626 map->includes_phdrs = 0;
252b5132 4627
bc67d8a6 4628 if (! phdr_included || segment->p_type != PT_LOAD)
252b5132 4629 {
bc67d8a6
NC
4630 map->includes_phdrs =
4631 (segment->p_offset <= (bfd_vma) iehdr->e_phoff
4632 && (segment->p_offset + segment->p_filesz
252b5132
RH
4633 >= ((bfd_vma) iehdr->e_phoff
4634 + iehdr->e_phnum * iehdr->e_phentsize)));
c044fabd 4635
bc67d8a6 4636 if (segment->p_type == PT_LOAD && map->includes_phdrs)
252b5132
RH
4637 phdr_included = true;
4638 }
4639
bc67d8a6 4640 if (section_count == 0)
252b5132
RH
4641 {
4642 /* Special segments, such as the PT_PHDR segment, may contain
4643 no sections, but ordinary, loadable segments should contain
1ed89aa9
NC
4644 something. They are allowed by the ELF spec however, so only
4645 a warning is produced. */
bc67d8a6 4646 if (segment->p_type == PT_LOAD)
caf47ea6 4647 (*_bfd_error_handler)
1ed89aa9 4648 (_("%s: warning: Empty loadable segment detected, is this intentional ?\n"),
caf47ea6 4649 bfd_archive_filename (ibfd));
252b5132 4650
bc67d8a6 4651 map->count = 0;
c044fabd
KH
4652 *pointer_to_map = map;
4653 pointer_to_map = &map->next;
252b5132
RH
4654
4655 continue;
4656 }
4657
4658 /* Now scan the sections in the input BFD again and attempt
4659 to add their corresponding output sections to the segment map.
4660 The problem here is how to handle an output section which has
4661 been moved (ie had its LMA changed). There are four possibilities:
4662
4663 1. None of the sections have been moved.
4664 In this case we can continue to use the segment LMA from the
4665 input BFD.
4666
4667 2. All of the sections have been moved by the same amount.
4668 In this case we can change the segment's LMA to match the LMA
4669 of the first section.
4670
4671 3. Some of the sections have been moved, others have not.
4672 In this case those sections which have not been moved can be
4673 placed in the current segment which will have to have its size,
4674 and possibly its LMA changed, and a new segment or segments will
4675 have to be created to contain the other sections.
4676
4677 4. The sections have been moved, but not be the same amount.
4678 In this case we can change the segment's LMA to match the LMA
4679 of the first section and we will have to create a new segment
4680 or segments to contain the other sections.
4681
4682 In order to save time, we allocate an array to hold the section
4683 pointers that we are interested in. As these sections get assigned
4684 to a segment, they are removed from this array. */
4685
dc810e39
AM
4686 amt = (bfd_size_type) section_count * sizeof (asection *);
4687 sections = (asection **) bfd_malloc (amt);
252b5132
RH
4688 if (sections == NULL)
4689 return false;
4690
4691 /* Step One: Scan for segment vs section LMA conflicts.
4692 Also add the sections to the section array allocated above.
4693 Also add the sections to the current segment. In the common
4694 case, where the sections have not been moved, this means that
4695 we have completely filled the segment, and there is nothing
4696 more to do. */
252b5132 4697 isec = 0;
72730e0c 4698 matching_lma = 0;
252b5132
RH
4699 suggested_lma = 0;
4700
bc67d8a6
NC
4701 for (j = 0, section = ibfd->sections;
4702 section != NULL;
4703 section = section->next)
252b5132 4704 {
caf47ea6 4705 if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed))
c0f7859b 4706 {
bc67d8a6
NC
4707 output_section = section->output_section;
4708
4709 sections[j ++] = section;
252b5132
RH
4710
4711 /* The Solaris native linker always sets p_paddr to 0.
4712 We try to catch that case here, and set it to the
4713 correct value. */
bc67d8a6
NC
4714 if (segment->p_paddr == 0
4715 && segment->p_vaddr != 0
252b5132 4716 && isec == 0
bc67d8a6
NC
4717 && output_section->lma != 0
4718 && (output_section->vma == (segment->p_vaddr
4719 + (map->includes_filehdr
4720 ? iehdr->e_ehsize
4721 : 0)
4722 + (map->includes_phdrs
079e9a2f
AM
4723 ? (iehdr->e_phnum
4724 * iehdr->e_phentsize)
bc67d8a6
NC
4725 : 0))))
4726 map->p_paddr = segment->p_vaddr;
252b5132
RH
4727
4728 /* Match up the physical address of the segment with the
4729 LMA address of the output section. */
bc67d8a6 4730 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
caf47ea6 4731 || IS_CONTAINED_BY_FILEPOS (section, segment, bed)
bc67d8a6 4732 || IS_COREFILE_NOTE (segment, section))
252b5132
RH
4733 {
4734 if (matching_lma == 0)
bc67d8a6 4735 matching_lma = output_section->lma;
252b5132
RH
4736
4737 /* We assume that if the section fits within the segment
bc67d8a6 4738 then it does not overlap any other section within that
252b5132 4739 segment. */
bc67d8a6 4740 map->sections[isec ++] = output_section;
252b5132
RH
4741 }
4742 else if (suggested_lma == 0)
bc67d8a6 4743 suggested_lma = output_section->lma;
252b5132
RH
4744 }
4745 }
4746
bc67d8a6 4747 BFD_ASSERT (j == section_count);
252b5132
RH
4748
4749 /* Step Two: Adjust the physical address of the current segment,
4750 if necessary. */
bc67d8a6 4751 if (isec == section_count)
252b5132
RH
4752 {
4753 /* All of the sections fitted within the segment as currently
4754 specified. This is the default case. Add the segment to
4755 the list of built segments and carry on to process the next
4756 program header in the input BFD. */
bc67d8a6 4757 map->count = section_count;
c044fabd
KH
4758 *pointer_to_map = map;
4759 pointer_to_map = &map->next;
252b5132
RH
4760
4761 free (sections);
4762 continue;
4763 }
252b5132
RH
4764 else
4765 {
72730e0c
AM
4766 if (matching_lma != 0)
4767 {
4768 /* At least one section fits inside the current segment.
4769 Keep it, but modify its physical address to match the
4770 LMA of the first section that fitted. */
bc67d8a6 4771 map->p_paddr = matching_lma;
72730e0c
AM
4772 }
4773 else
4774 {
4775 /* None of the sections fitted inside the current segment.
4776 Change the current segment's physical address to match
4777 the LMA of the first section. */
bc67d8a6 4778 map->p_paddr = suggested_lma;
72730e0c
AM
4779 }
4780
bc67d8a6
NC
4781 /* Offset the segment physical address from the lma
4782 to allow for space taken up by elf headers. */
4783 if (map->includes_filehdr)
4784 map->p_paddr -= iehdr->e_ehsize;
252b5132 4785
bc67d8a6
NC
4786 if (map->includes_phdrs)
4787 {
4788 map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize;
4789
4790 /* iehdr->e_phnum is just an estimate of the number
4791 of program headers that we will need. Make a note
4792 here of the number we used and the segment we chose
4793 to hold these headers, so that we can adjust the
4794 offset when we know the correct value. */
4795 phdr_adjust_num = iehdr->e_phnum;
4796 phdr_adjust_seg = map;
4797 }
252b5132
RH
4798 }
4799
4800 /* Step Three: Loop over the sections again, this time assigning
caf47ea6 4801 those that fit to the current segment and removing them from the
252b5132
RH
4802 sections array; but making sure not to leave large gaps. Once all
4803 possible sections have been assigned to the current segment it is
4804 added to the list of built segments and if sections still remain
4805 to be assigned, a new segment is constructed before repeating
4806 the loop. */
4807 isec = 0;
4808 do
4809 {
bc67d8a6 4810 map->count = 0;
252b5132
RH
4811 suggested_lma = 0;
4812
4813 /* Fill the current segment with sections that fit. */
bc67d8a6 4814 for (j = 0; j < section_count; j++)
252b5132 4815 {
bc67d8a6 4816 section = sections[j];
252b5132 4817
bc67d8a6 4818 if (section == NULL)
252b5132
RH
4819 continue;
4820
bc67d8a6 4821 output_section = section->output_section;
252b5132 4822
bc67d8a6 4823 BFD_ASSERT (output_section != NULL);
c044fabd 4824
bc67d8a6
NC
4825 if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
4826 || IS_COREFILE_NOTE (segment, section))
252b5132 4827 {
bc67d8a6 4828 if (map->count == 0)
252b5132
RH
4829 {
4830 /* If the first section in a segment does not start at
bc67d8a6
NC
4831 the beginning of the segment, then something is
4832 wrong. */
4833 if (output_section->lma !=
4834 (map->p_paddr
4835 + (map->includes_filehdr ? iehdr->e_ehsize : 0)
4836 + (map->includes_phdrs
4837 ? iehdr->e_phnum * iehdr->e_phentsize
4838 : 0)))
252b5132
RH
4839 abort ();
4840 }
4841 else
4842 {
4843 asection * prev_sec;
252b5132 4844
bc67d8a6 4845 prev_sec = map->sections[map->count - 1];
252b5132
RH
4846
4847 /* If the gap between the end of the previous section
bc67d8a6
NC
4848 and the start of this section is more than
4849 maxpagesize then we need to start a new segment. */
079e9a2f
AM
4850 if ((BFD_ALIGN (prev_sec->lma + prev_sec->_raw_size,
4851 maxpagesize)
caf47ea6 4852 < BFD_ALIGN (output_section->lma, maxpagesize))
079e9a2f
AM
4853 || ((prev_sec->lma + prev_sec->_raw_size)
4854 > output_section->lma))
252b5132
RH
4855 {
4856 if (suggested_lma == 0)
bc67d8a6 4857 suggested_lma = output_section->lma;
252b5132
RH
4858
4859 continue;
4860 }
4861 }
4862
bc67d8a6 4863 map->sections[map->count++] = output_section;
252b5132
RH
4864 ++isec;
4865 sections[j] = NULL;
bc67d8a6 4866 section->segment_mark = true;
252b5132
RH
4867 }
4868 else if (suggested_lma == 0)
bc67d8a6 4869 suggested_lma = output_section->lma;
252b5132
RH
4870 }
4871
bc67d8a6 4872 BFD_ASSERT (map->count > 0);
252b5132
RH
4873
4874 /* Add the current segment to the list of built segments. */
c044fabd
KH
4875 *pointer_to_map = map;
4876 pointer_to_map = &map->next;
252b5132 4877
bc67d8a6 4878 if (isec < section_count)
252b5132
RH
4879 {
4880 /* We still have not allocated all of the sections to
4881 segments. Create a new segment here, initialise it
4882 and carry on looping. */
dc810e39
AM
4883 amt = sizeof (struct elf_segment_map);
4884 amt += ((bfd_size_type) section_count - 1) * sizeof (asection *);
4885 map = (struct elf_segment_map *) bfd_alloc (obfd, amt);
bc67d8a6 4886 if (map == NULL)
252b5132
RH
4887 return false;
4888
4889 /* Initialise the fields of the segment map. Set the physical
4890 physical address to the LMA of the first section that has
4891 not yet been assigned. */
bc67d8a6
NC
4892 map->next = NULL;
4893 map->p_type = segment->p_type;
4894 map->p_flags = segment->p_flags;
4895 map->p_flags_valid = 1;
4896 map->p_paddr = suggested_lma;
4897 map->p_paddr_valid = 1;
4898 map->includes_filehdr = 0;
4899 map->includes_phdrs = 0;
252b5132
RH
4900 }
4901 }
bc67d8a6 4902 while (isec < section_count);
252b5132
RH
4903
4904 free (sections);
4905 }
4906
4907 /* The Solaris linker creates program headers in which all the
4908 p_paddr fields are zero. When we try to objcopy or strip such a
4909 file, we get confused. Check for this case, and if we find it
4910 reset the p_paddr_valid fields. */
bc67d8a6
NC
4911 for (map = map_first; map != NULL; map = map->next)
4912 if (map->p_paddr != 0)
252b5132 4913 break;
bc67d8a6 4914 if (map == NULL)
252b5132 4915 {
bc67d8a6
NC
4916 for (map = map_first; map != NULL; map = map->next)
4917 map->p_paddr_valid = 0;
252b5132
RH
4918 }
4919
bc67d8a6
NC
4920 elf_tdata (obfd)->segment_map = map_first;
4921
4922 /* If we had to estimate the number of program headers that were
9ad5cbcf 4923 going to be needed, then check our estimate now and adjust
bc67d8a6
NC
4924 the offset if necessary. */
4925 if (phdr_adjust_seg != NULL)
4926 {
4927 unsigned int count;
c044fabd 4928
bc67d8a6 4929 for (count = 0, map = map_first; map != NULL; map = map->next)
c044fabd 4930 count++;
252b5132 4931
bc67d8a6
NC
4932 if (count > phdr_adjust_num)
4933 phdr_adjust_seg->p_paddr
4934 -= (count - phdr_adjust_num) * iehdr->e_phentsize;
4935 }
c044fabd 4936
252b5132 4937#if 0
c044fabd
KH
4938 /* Final Step: Sort the segments into ascending order of physical
4939 address. */
bc67d8a6 4940 if (map_first != NULL)
252b5132 4941 {
c044fabd 4942 struct elf_segment_map *prev;
252b5132 4943
bc67d8a6
NC
4944 prev = map_first;
4945 for (map = map_first->next; map != NULL; prev = map, map = map->next)
252b5132 4946 {
bc67d8a6
NC
4947 /* Yes I know - its a bubble sort.... */
4948 if (map->next != NULL && (map->next->p_paddr < map->p_paddr))
252b5132 4949 {
bc67d8a6
NC
4950 /* Swap map and map->next. */
4951 prev->next = map->next;
4952 map->next = map->next->next;
4953 prev->next->next = map;
252b5132 4954
bc67d8a6
NC
4955 /* Restart loop. */
4956 map = map_first;
252b5132
RH
4957 }
4958 }
4959 }
4960#endif
4961
bc67d8a6
NC
4962#undef SEGMENT_END
4963#undef IS_CONTAINED_BY_VMA
4964#undef IS_CONTAINED_BY_LMA
caf47ea6 4965#undef IS_CONTAINED_BY_FILEPOS
252b5132 4966#undef IS_COREFILE_NOTE
bc67d8a6
NC
4967#undef IS_SOLARIS_PT_INTERP
4968#undef INCLUDE_SECTION_IN_SEGMENT
4969#undef SEGMENT_AFTER_SEGMENT
4970#undef SEGMENT_OVERLAPS
252b5132
RH
4971 return true;
4972}
4973
4974/* Copy private section information. This copies over the entsize
4975 field, and sometimes the info field. */
4976
4977boolean
4978_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
4979 bfd *ibfd;
4980 asection *isec;
4981 bfd *obfd;
4982 asection *osec;
4983{
4984 Elf_Internal_Shdr *ihdr, *ohdr;
caf47ea6 4985 const struct elf_backend_data *bed = get_elf_backend_data (ibfd);
252b5132
RH
4986
4987 if (ibfd->xvec->flavour != bfd_target_elf_flavour
4988 || obfd->xvec->flavour != bfd_target_elf_flavour)
4989 return true;
4990
4991 /* Copy over private BFD data if it has not already been copied.
4992 This must be done here, rather than in the copy_private_bfd_data
4993 entry point, because the latter is called after the section
4994 contents have been set, which means that the program headers have
caf47ea6
AM
4995 already been worked out. The backend function provides a way to
4996 override the test conditions and code path for the call to
4997 copy_private_bfd_data. */
4998 if (bed->copy_private_bfd_data_p)
252b5132 4999 {
caf47ea6
AM
5000 if ((*bed->copy_private_bfd_data_p) (ibfd, isec, obfd, osec))
5001 if (! copy_private_bfd_data (ibfd, obfd))
5002 return false;
5003 }
5004 else if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL)
5005 {
5006 asection *s;
5007
5008 /* Only set up the segments if there are no more SEC_ALLOC
5009 sections. FIXME: This won't do the right thing if objcopy is
5010 used to remove the last SEC_ALLOC section, since objcopy
5011 won't call this routine in that case. */
5012 for (s = isec->next; s != NULL; s = s->next)
5013 if ((s->flags & SEC_ALLOC) != 0)
5014 break;
5015 if (s == NULL)
5016 {
5017 if (! copy_private_bfd_data (ibfd, obfd))
5018 return false;
5019 }
252b5132
RH
5020 }
5021
5022 ihdr = &elf_section_data (isec)->this_hdr;
5023 ohdr = &elf_section_data (osec)->this_hdr;
5024
5025 ohdr->sh_entsize = ihdr->sh_entsize;
5026
5027 if (ihdr->sh_type == SHT_SYMTAB
5028 || ihdr->sh_type == SHT_DYNSYM
5029 || ihdr->sh_type == SHT_GNU_verneed
5030 || ihdr->sh_type == SHT_GNU_verdef)
5031 ohdr->sh_info = ihdr->sh_info;
5032
9dce4196
AM
5033 /* Set things up for objcopy. The output SHT_GROUP section will
5034 have its elf_next_in_group pointing back to the input group
5035 members. */
5036 elf_next_in_group (osec) = elf_next_in_group (isec);
5037 elf_group_name (osec) = elf_group_name (isec);
5038
bf572ba0
MM
5039 elf_section_data (osec)->use_rela_p
5040 = elf_section_data (isec)->use_rela_p;
5041
252b5132
RH
5042 return true;
5043}
5044
5045/* Copy private symbol information. If this symbol is in a section
5046 which we did not map into a BFD section, try to map the section
5047 index correctly. We use special macro definitions for the mapped
5048 section indices; these definitions are interpreted by the
5049 swap_out_syms function. */
5050
9ad5cbcf
AM
5051#define MAP_ONESYMTAB (SHN_HIOS + 1)
5052#define MAP_DYNSYMTAB (SHN_HIOS + 2)
5053#define MAP_STRTAB (SHN_HIOS + 3)
5054#define MAP_SHSTRTAB (SHN_HIOS + 4)
5055#define MAP_SYM_SHNDX (SHN_HIOS + 5)
252b5132
RH
5056
5057boolean
5058_bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
5059 bfd *ibfd;
5060 asymbol *isymarg;
5061 bfd *obfd;
5062 asymbol *osymarg;
5063{
5064 elf_symbol_type *isym, *osym;
5065
5066 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
5067 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
5068 return true;
5069
5070 isym = elf_symbol_from (ibfd, isymarg);
5071 osym = elf_symbol_from (obfd, osymarg);
5072
5073 if (isym != NULL
5074 && osym != NULL
5075 && bfd_is_abs_section (isym->symbol.section))
5076 {
5077 unsigned int shndx;
5078
5079 shndx = isym->internal_elf_sym.st_shndx;
5080 if (shndx == elf_onesymtab (ibfd))
5081 shndx = MAP_ONESYMTAB;
5082 else if (shndx == elf_dynsymtab (ibfd))
5083 shndx = MAP_DYNSYMTAB;
5084 else if (shndx == elf_tdata (ibfd)->strtab_section)
5085 shndx = MAP_STRTAB;
5086 else if (shndx == elf_tdata (ibfd)->shstrtab_section)
5087 shndx = MAP_SHSTRTAB;
9ad5cbcf
AM
5088 else if (shndx == elf_tdata (ibfd)->symtab_shndx_section)
5089 shndx = MAP_SYM_SHNDX;
252b5132
RH
5090 osym->internal_elf_sym.st_shndx = shndx;
5091 }
5092
5093 return true;
5094}
5095
5096/* Swap out the symbols. */
5097
5098static boolean
5099swap_out_syms (abfd, sttp, relocatable_p)
5100 bfd *abfd;
5101 struct bfd_strtab_hash **sttp;
5102 int relocatable_p;
5103{
079e9a2f
AM
5104 struct elf_backend_data *bed;
5105 int symcount;
5106 asymbol **syms;
5107 struct bfd_strtab_hash *stt;
5108 Elf_Internal_Shdr *symtab_hdr;
9ad5cbcf 5109 Elf_Internal_Shdr *symtab_shndx_hdr;
079e9a2f
AM
5110 Elf_Internal_Shdr *symstrtab_hdr;
5111 char *outbound_syms;
9ad5cbcf 5112 char *outbound_shndx;
079e9a2f
AM
5113 int idx;
5114 bfd_size_type amt;
252b5132
RH
5115
5116 if (!elf_map_symbols (abfd))
5117 return false;
5118
c044fabd 5119 /* Dump out the symtabs. */
079e9a2f
AM
5120 stt = _bfd_elf_stringtab_init ();
5121 if (stt == NULL)
5122 return false;
252b5132 5123
079e9a2f
AM
5124 bed = get_elf_backend_data (abfd);
5125 symcount = bfd_get_symcount (abfd);
5126 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
5127 symtab_hdr->sh_type = SHT_SYMTAB;
5128 symtab_hdr->sh_entsize = bed->s->sizeof_sym;
5129 symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
5130 symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
5131 symtab_hdr->sh_addralign = bed->s->file_align;
5132
5133 symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
5134 symstrtab_hdr->sh_type = SHT_STRTAB;
5135
5136 amt = (bfd_size_type) (1 + symcount) * bed->s->sizeof_sym;
5137 outbound_syms = bfd_alloc (abfd, amt);
5138 if (outbound_syms == NULL)
5139 return false;
5140 symtab_hdr->contents = (PTR) outbound_syms;
252b5132 5141
9ad5cbcf
AM
5142 outbound_shndx = NULL;
5143 symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
5144 if (symtab_shndx_hdr->sh_name != 0)
5145 {
5146 amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
5147 outbound_shndx = bfd_alloc (abfd, amt);
5148 if (outbound_shndx == NULL)
5149 return false;
5150 memset (outbound_shndx, 0, (unsigned long) amt);
5151 symtab_shndx_hdr->contents = outbound_shndx;
5152 symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
5153 symtab_shndx_hdr->sh_size = amt;
5154 symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
5155 symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
5156 }
5157
079e9a2f
AM
5158 /* now generate the data (for "contents") */
5159 {
5160 /* Fill in zeroth symbol and swap it out. */
5161 Elf_Internal_Sym sym;
5162 sym.st_name = 0;
5163 sym.st_value = 0;
5164 sym.st_size = 0;
5165 sym.st_info = 0;
5166 sym.st_other = 0;
5167 sym.st_shndx = SHN_UNDEF;
9ad5cbcf 5168 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
079e9a2f 5169 outbound_syms += bed->s->sizeof_sym;
9ad5cbcf
AM
5170 if (outbound_shndx != NULL)
5171 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
079e9a2f 5172 }
252b5132 5173
079e9a2f
AM
5174 syms = bfd_get_outsymbols (abfd);
5175 for (idx = 0; idx < symcount; idx++)
252b5132 5176 {
252b5132 5177 Elf_Internal_Sym sym;
079e9a2f
AM
5178 bfd_vma value = syms[idx]->value;
5179 elf_symbol_type *type_ptr;
5180 flagword flags = syms[idx]->flags;
5181 int type;
252b5132 5182
079e9a2f
AM
5183 if ((flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
5184 {
5185 /* Local section symbols have no name. */
5186 sym.st_name = 0;
5187 }
5188 else
5189 {
5190 sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
5191 syms[idx]->name,
5192 true, false);
5193 if (sym.st_name == (unsigned long) -1)
5194 return false;
5195 }
252b5132 5196
079e9a2f 5197 type_ptr = elf_symbol_from (abfd, syms[idx]);
252b5132 5198
079e9a2f
AM
5199 if ((flags & BSF_SECTION_SYM) == 0
5200 && bfd_is_com_section (syms[idx]->section))
5201 {
5202 /* ELF common symbols put the alignment into the `value' field,
5203 and the size into the `size' field. This is backwards from
5204 how BFD handles it, so reverse it here. */
5205 sym.st_size = value;
5206 if (type_ptr == NULL
5207 || type_ptr->internal_elf_sym.st_value == 0)
5208 sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
5209 else
5210 sym.st_value = type_ptr->internal_elf_sym.st_value;
5211 sym.st_shndx = _bfd_elf_section_from_bfd_section
5212 (abfd, syms[idx]->section);
5213 }
5214 else
5215 {
5216 asection *sec = syms[idx]->section;
5217 int shndx;
252b5132 5218
079e9a2f
AM
5219 if (sec->output_section)
5220 {
5221 value += sec->output_offset;
5222 sec = sec->output_section;
5223 }
5224 /* Don't add in the section vma for relocatable output. */
5225 if (! relocatable_p)
5226 value += sec->vma;
5227 sym.st_value = value;
5228 sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
5229
5230 if (bfd_is_abs_section (sec)
5231 && type_ptr != NULL
5232 && type_ptr->internal_elf_sym.st_shndx != 0)
5233 {
5234 /* This symbol is in a real ELF section which we did
5235 not create as a BFD section. Undo the mapping done
5236 by copy_private_symbol_data. */
5237 shndx = type_ptr->internal_elf_sym.st_shndx;
5238 switch (shndx)
5239 {
5240 case MAP_ONESYMTAB:
5241 shndx = elf_onesymtab (abfd);
5242 break;
5243 case MAP_DYNSYMTAB:
5244 shndx = elf_dynsymtab (abfd);
5245 break;
5246 case MAP_STRTAB:
5247 shndx = elf_tdata (abfd)->strtab_section;
5248 break;
5249 case MAP_SHSTRTAB:
5250 shndx = elf_tdata (abfd)->shstrtab_section;
5251 break;
9ad5cbcf
AM
5252 case MAP_SYM_SHNDX:
5253 shndx = elf_tdata (abfd)->symtab_shndx_section;
5254 break;
079e9a2f
AM
5255 default:
5256 break;
5257 }
5258 }
5259 else
5260 {
5261 shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
252b5132 5262
079e9a2f
AM
5263 if (shndx == -1)
5264 {
5265 asection *sec2;
5266
5267 /* Writing this would be a hell of a lot easier if
5268 we had some decent documentation on bfd, and
5269 knew what to expect of the library, and what to
5270 demand of applications. For example, it
5271 appears that `objcopy' might not set the
5272 section of a symbol to be a section that is
5273 actually in the output file. */
5274 sec2 = bfd_get_section_by_name (abfd, sec->name);
5275 BFD_ASSERT (sec2 != 0);
5276 shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
5277 BFD_ASSERT (shndx != -1);
5278 }
5279 }
252b5132 5280
079e9a2f
AM
5281 sym.st_shndx = shndx;
5282 }
252b5132 5283
13ae64f3
JJ
5284 if ((flags & BSF_THREAD_LOCAL) != 0)
5285 type = STT_TLS;
5286 else if ((flags & BSF_FUNCTION) != 0)
079e9a2f
AM
5287 type = STT_FUNC;
5288 else if ((flags & BSF_OBJECT) != 0)
5289 type = STT_OBJECT;
5290 else
5291 type = STT_NOTYPE;
252b5132 5292
13ae64f3
JJ
5293 if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
5294 type = STT_TLS;
5295
079e9a2f
AM
5296 /* Processor-specific types */
5297 if (type_ptr != NULL
5298 && bed->elf_backend_get_symbol_type)
5299 type = ((*bed->elf_backend_get_symbol_type)
5300 (&type_ptr->internal_elf_sym, type));
252b5132 5301
079e9a2f
AM
5302 if (flags & BSF_SECTION_SYM)
5303 {
5304 if (flags & BSF_GLOBAL)
5305 sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5306 else
5307 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
5308 }
5309 else if (bfd_is_com_section (syms[idx]->section))
5310 sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
5311 else if (bfd_is_und_section (syms[idx]->section))
5312 sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
5313 ? STB_WEAK
5314 : STB_GLOBAL),
5315 type);
5316 else if (flags & BSF_FILE)
5317 sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
5318 else
5319 {
5320 int bind = STB_LOCAL;
252b5132 5321
079e9a2f
AM
5322 if (flags & BSF_LOCAL)
5323 bind = STB_LOCAL;
5324 else if (flags & BSF_WEAK)
5325 bind = STB_WEAK;
5326 else if (flags & BSF_GLOBAL)
5327 bind = STB_GLOBAL;
252b5132 5328
079e9a2f
AM
5329 sym.st_info = ELF_ST_INFO (bind, type);
5330 }
252b5132 5331
079e9a2f
AM
5332 if (type_ptr != NULL)
5333 sym.st_other = type_ptr->internal_elf_sym.st_other;
5334 else
5335 sym.st_other = 0;
252b5132 5336
9ad5cbcf 5337 bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
079e9a2f 5338 outbound_syms += bed->s->sizeof_sym;
9ad5cbcf
AM
5339 if (outbound_shndx != NULL)
5340 outbound_shndx += sizeof (Elf_External_Sym_Shndx);
079e9a2f 5341 }
252b5132 5342
079e9a2f
AM
5343 *sttp = stt;
5344 symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
5345 symstrtab_hdr->sh_type = SHT_STRTAB;
252b5132 5346
079e9a2f
AM
5347 symstrtab_hdr->sh_flags = 0;
5348 symstrtab_hdr->sh_addr = 0;
5349 symstrtab_hdr->sh_entsize = 0;
5350 symstrtab_hdr->sh_link = 0;
5351 symstrtab_hdr->sh_info = 0;
5352 symstrtab_hdr->sh_addralign = 1;
252b5132
RH
5353
5354 return true;
5355}
5356
5357/* Return the number of bytes required to hold the symtab vector.
5358
5359 Note that we base it on the count plus 1, since we will null terminate
5360 the vector allocated based on this size. However, the ELF symbol table
5361 always has a dummy entry as symbol #0, so it ends up even. */
5362
5363long
5364_bfd_elf_get_symtab_upper_bound (abfd)
5365 bfd *abfd;
5366{
5367 long symcount;
5368 long symtab_size;
5369 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
5370
5371 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
b99d1833
AM
5372 symtab_size = (symcount + 1) * (sizeof (asymbol *));
5373 if (symcount > 0)
5374 symtab_size -= sizeof (asymbol *);
252b5132
RH
5375
5376 return symtab_size;
5377}
5378
5379long
5380_bfd_elf_get_dynamic_symtab_upper_bound (abfd)
5381 bfd *abfd;
5382{
5383 long symcount;
5384 long symtab_size;
5385 Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
5386
5387 if (elf_dynsymtab (abfd) == 0)
5388 {
5389 bfd_set_error (bfd_error_invalid_operation);
5390 return -1;
5391 }
5392
5393 symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
b99d1833
AM
5394 symtab_size = (symcount + 1) * (sizeof (asymbol *));
5395 if (symcount > 0)
5396 symtab_size -= sizeof (asymbol *);
252b5132
RH
5397
5398 return symtab_size;
5399}
5400
5401long
5402_bfd_elf_get_reloc_upper_bound (abfd, asect)
7442e600 5403 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
5404 sec_ptr asect;
5405{
5406 return (asect->reloc_count + 1) * sizeof (arelent *);
5407}
5408
5409/* Canonicalize the relocs. */
5410
5411long
5412_bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
5413 bfd *abfd;
5414 sec_ptr section;
5415 arelent **relptr;
5416 asymbol **symbols;
5417{
5418 arelent *tblptr;
5419 unsigned int i;
dbb410c3 5420 struct elf_backend_data *bed = get_elf_backend_data (abfd);
252b5132 5421
dbb410c3 5422 if (! bed->s->slurp_reloc_table (abfd, section, symbols, false))
252b5132
RH
5423 return -1;
5424
5425 tblptr = section->relocation;
5426 for (i = 0; i < section->reloc_count; i++)
5427 *relptr++ = tblptr++;
5428
5429 *relptr = NULL;
5430
5431 return section->reloc_count;
5432}
5433
5434long
5435_bfd_elf_get_symtab (abfd, alocation)
5436 bfd *abfd;
5437 asymbol **alocation;
5438{
dbb410c3
AM
5439 struct elf_backend_data *bed = get_elf_backend_data (abfd);
5440 long symcount = bed->s->slurp_symbol_table (abfd, alocation, false);
252b5132
RH
5441
5442 if (symcount >= 0)
5443 bfd_get_symcount (abfd) = symcount;
5444 return symcount;
5445}
5446
5447long
5448_bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
5449 bfd *abfd;
5450 asymbol **alocation;
5451{
dbb410c3
AM
5452 struct elf_backend_data *bed = get_elf_backend_data (abfd);
5453 return bed->s->slurp_symbol_table (abfd, alocation, true);
252b5132
RH
5454}
5455
5456/* Return the size required for the dynamic reloc entries. Any
5457 section that was actually installed in the BFD, and has type
5458 SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
5459 considered to be a dynamic reloc section. */
5460
5461long
5462_bfd_elf_get_dynamic_reloc_upper_bound (abfd)
5463 bfd *abfd;
5464{
5465 long ret;
5466 asection *s;
5467
5468 if (elf_dynsymtab (abfd) == 0)
5469 {
5470 bfd_set_error (bfd_error_invalid_operation);
5471 return -1;
5472 }
5473
5474 ret = sizeof (arelent *);
5475 for (s = abfd->sections; s != NULL; s = s->next)
5476 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
5477 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
5478 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
5479 ret += ((s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize)
5480 * sizeof (arelent *));
5481
5482 return ret;
5483}
5484
5485/* Canonicalize the dynamic relocation entries. Note that we return
5486 the dynamic relocations as a single block, although they are
5487 actually associated with particular sections; the interface, which
5488 was designed for SunOS style shared libraries, expects that there
5489 is only one set of dynamic relocs. Any section that was actually
5490 installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
5491 the dynamic symbol table, is considered to be a dynamic reloc
5492 section. */
5493
5494long
5495_bfd_elf_canonicalize_dynamic_reloc (abfd, storage, syms)
5496 bfd *abfd;
5497 arelent **storage;
5498 asymbol **syms;
5499{
5500 boolean (*slurp_relocs) PARAMS ((bfd *, asection *, asymbol **, boolean));
5501 asection *s;
5502 long ret;
5503
5504 if (elf_dynsymtab (abfd) == 0)
5505 {
5506 bfd_set_error (bfd_error_invalid_operation);
5507 return -1;
5508 }
5509
5510 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
5511 ret = 0;
5512 for (s = abfd->sections; s != NULL; s = s->next)
5513 {
5514 if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
5515 && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
5516 || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
5517 {
5518 arelent *p;
5519 long count, i;
5520
5521 if (! (*slurp_relocs) (abfd, s, syms, true))
5522 return -1;
5523 count = s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize;
5524 p = s->relocation;
5525 for (i = 0; i < count; i++)
5526 *storage++ = p++;
5527 ret += count;
5528 }
5529 }
5530
5531 *storage = NULL;
5532
5533 return ret;
5534}
5535\f
5536/* Read in the version information. */
5537
5538boolean
5539_bfd_elf_slurp_version_tables (abfd)
5540 bfd *abfd;
5541{
5542 bfd_byte *contents = NULL;
dc810e39 5543 bfd_size_type amt;
252b5132
RH
5544
5545 if (elf_dynverdef (abfd) != 0)
5546 {
5547 Elf_Internal_Shdr *hdr;
5548 Elf_External_Verdef *everdef;
5549 Elf_Internal_Verdef *iverdef;
f631889e
UD
5550 Elf_Internal_Verdef *iverdefarr;
5551 Elf_Internal_Verdef iverdefmem;
252b5132 5552 unsigned int i;
062e2358 5553 unsigned int maxidx;
252b5132
RH
5554
5555 hdr = &elf_tdata (abfd)->dynverdef_hdr;
5556
252b5132
RH
5557 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
5558 if (contents == NULL)
5559 goto error_return;
5560 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
dc810e39 5561 || bfd_bread ((PTR) contents, hdr->sh_size, abfd) != hdr->sh_size)
252b5132
RH
5562 goto error_return;
5563
f631889e
UD
5564 /* We know the number of entries in the section but not the maximum
5565 index. Therefore we have to run through all entries and find
5566 the maximum. */
252b5132 5567 everdef = (Elf_External_Verdef *) contents;
f631889e
UD
5568 maxidx = 0;
5569 for (i = 0; i < hdr->sh_info; ++i)
5570 {
5571 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
5572
062e2358
AM
5573 if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
5574 maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
f631889e
UD
5575
5576 everdef = ((Elf_External_Verdef *)
5577 ((bfd_byte *) everdef + iverdefmem.vd_next));
5578 }
5579
dc810e39
AM
5580 amt = (bfd_size_type) maxidx * sizeof (Elf_Internal_Verdef);
5581 elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
f631889e
UD
5582 if (elf_tdata (abfd)->verdef == NULL)
5583 goto error_return;
5584
5585 elf_tdata (abfd)->cverdefs = maxidx;
5586
5587 everdef = (Elf_External_Verdef *) contents;
5588 iverdefarr = elf_tdata (abfd)->verdef;
5589 for (i = 0; i < hdr->sh_info; i++)
252b5132
RH
5590 {
5591 Elf_External_Verdaux *everdaux;
5592 Elf_Internal_Verdaux *iverdaux;
5593 unsigned int j;
5594
f631889e
UD
5595 _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
5596
5597 iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
5598 memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
252b5132
RH
5599
5600 iverdef->vd_bfd = abfd;
5601
dc810e39
AM
5602 amt = (bfd_size_type) iverdef->vd_cnt * sizeof (Elf_Internal_Verdaux);
5603 iverdef->vd_auxptr = (Elf_Internal_Verdaux *) bfd_alloc (abfd, amt);
252b5132
RH
5604 if (iverdef->vd_auxptr == NULL)
5605 goto error_return;
5606
5607 everdaux = ((Elf_External_Verdaux *)
5608 ((bfd_byte *) everdef + iverdef->vd_aux));
5609 iverdaux = iverdef->vd_auxptr;
5610 for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
5611 {
5612 _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
5613
5614 iverdaux->vda_nodename =
5615 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
5616 iverdaux->vda_name);
5617 if (iverdaux->vda_nodename == NULL)
5618 goto error_return;
5619
5620 if (j + 1 < iverdef->vd_cnt)
5621 iverdaux->vda_nextptr = iverdaux + 1;
5622 else
5623 iverdaux->vda_nextptr = NULL;
5624
5625 everdaux = ((Elf_External_Verdaux *)
5626 ((bfd_byte *) everdaux + iverdaux->vda_next));
5627 }
5628
5629 iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
5630
5631 if (i + 1 < hdr->sh_info)
5632 iverdef->vd_nextdef = iverdef + 1;
5633 else
5634 iverdef->vd_nextdef = NULL;
5635
5636 everdef = ((Elf_External_Verdef *)
5637 ((bfd_byte *) everdef + iverdef->vd_next));
5638 }
5639
5640 free (contents);
5641 contents = NULL;
5642 }
5643
5644 if (elf_dynverref (abfd) != 0)
5645 {
5646 Elf_Internal_Shdr *hdr;
5647 Elf_External_Verneed *everneed;
5648 Elf_Internal_Verneed *iverneed;
5649 unsigned int i;
5650
5651 hdr = &elf_tdata (abfd)->dynverref_hdr;
5652
dc810e39 5653 amt = (bfd_size_type) hdr->sh_info * sizeof (Elf_Internal_Verneed);
252b5132 5654 elf_tdata (abfd)->verref =
dc810e39 5655 (Elf_Internal_Verneed *) bfd_zalloc (abfd, amt);
252b5132
RH
5656 if (elf_tdata (abfd)->verref == NULL)
5657 goto error_return;
5658
5659 elf_tdata (abfd)->cverrefs = hdr->sh_info;
5660
5661 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
5662 if (contents == NULL)
5663 goto error_return;
5664 if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
dc810e39 5665 || bfd_bread ((PTR) contents, hdr->sh_size, abfd) != hdr->sh_size)
252b5132
RH
5666 goto error_return;
5667
5668 everneed = (Elf_External_Verneed *) contents;
5669 iverneed = elf_tdata (abfd)->verref;
5670 for (i = 0; i < hdr->sh_info; i++, iverneed++)
5671 {
5672 Elf_External_Vernaux *evernaux;
5673 Elf_Internal_Vernaux *ivernaux;
5674 unsigned int j;
5675
5676 _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
5677
5678 iverneed->vn_bfd = abfd;
5679
5680 iverneed->vn_filename =
5681 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
5682 iverneed->vn_file);
5683 if (iverneed->vn_filename == NULL)
5684 goto error_return;
5685
dc810e39
AM
5686 amt = iverneed->vn_cnt;
5687 amt *= sizeof (Elf_Internal_Vernaux);
5688 iverneed->vn_auxptr = (Elf_Internal_Vernaux *) bfd_alloc (abfd, amt);
252b5132
RH
5689
5690 evernaux = ((Elf_External_Vernaux *)
5691 ((bfd_byte *) everneed + iverneed->vn_aux));
5692 ivernaux = iverneed->vn_auxptr;
5693 for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
5694 {
5695 _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
5696
5697 ivernaux->vna_nodename =
5698 bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
5699 ivernaux->vna_name);
5700 if (ivernaux->vna_nodename == NULL)
5701 goto error_return;
5702
5703 if (j + 1 < iverneed->vn_cnt)
5704 ivernaux->vna_nextptr = ivernaux + 1;
5705 else
5706 ivernaux->vna_nextptr = NULL;
5707
5708 evernaux = ((Elf_External_Vernaux *)
5709 ((bfd_byte *) evernaux + ivernaux->vna_next));
5710 }
5711
5712 if (i + 1 < hdr->sh_info)
5713 iverneed->vn_nextref = iverneed + 1;
5714 else
5715 iverneed->vn_nextref = NULL;
5716
5717 everneed = ((Elf_External_Verneed *)
5718 ((bfd_byte *) everneed + iverneed->vn_next));
5719 }
5720
5721 free (contents);
5722 contents = NULL;
5723 }
5724
5725 return true;
5726
5727 error_return:
5728 if (contents == NULL)
5729 free (contents);
5730 return false;
5731}
5732\f
5733asymbol *
5734_bfd_elf_make_empty_symbol (abfd)
5735 bfd *abfd;
5736{
5737 elf_symbol_type *newsym;
dc810e39 5738 bfd_size_type amt = sizeof (elf_symbol_type);
252b5132 5739
dc810e39 5740 newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt);
252b5132
RH
5741 if (!newsym)
5742 return NULL;
5743 else
5744 {
5745 newsym->symbol.the_bfd = abfd;
5746 return &newsym->symbol;
5747 }
5748}
5749
5750void
5751_bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
7442e600 5752 bfd *ignore_abfd ATTRIBUTE_UNUSED;
252b5132
RH
5753 asymbol *symbol;
5754 symbol_info *ret;
5755{
5756 bfd_symbol_info (symbol, ret);
5757}
5758
5759/* Return whether a symbol name implies a local symbol. Most targets
5760 use this function for the is_local_label_name entry point, but some
5761 override it. */
5762
5763boolean
5764_bfd_elf_is_local_label_name (abfd, name)
7442e600 5765 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
5766 const char *name;
5767{
5768 /* Normal local symbols start with ``.L''. */
5769 if (name[0] == '.' && name[1] == 'L')
5770 return true;
5771
5772 /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
5773 DWARF debugging symbols starting with ``..''. */
5774 if (name[0] == '.' && name[1] == '.')
5775 return true;
5776
5777 /* gcc will sometimes generate symbols beginning with ``_.L_'' when
5778 emitting DWARF debugging output. I suspect this is actually a
5779 small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
5780 ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
5781 underscore to be emitted on some ELF targets). For ease of use,
5782 we treat such symbols as local. */
5783 if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
5784 return true;
5785
5786 return false;
5787}
5788
5789alent *
5790_bfd_elf_get_lineno (ignore_abfd, symbol)
7442e600
ILT
5791 bfd *ignore_abfd ATTRIBUTE_UNUSED;
5792 asymbol *symbol ATTRIBUTE_UNUSED;
252b5132
RH
5793{
5794 abort ();
5795 return NULL;
5796}
5797
5798boolean
5799_bfd_elf_set_arch_mach (abfd, arch, machine)
5800 bfd *abfd;
5801 enum bfd_architecture arch;
5802 unsigned long machine;
5803{
5804 /* If this isn't the right architecture for this backend, and this
5805 isn't the generic backend, fail. */
5806 if (arch != get_elf_backend_data (abfd)->arch
5807 && arch != bfd_arch_unknown
5808 && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
5809 return false;
5810
5811 return bfd_default_set_arch_mach (abfd, arch, machine);
5812}
5813
d1fad7c6
NC
5814/* Find the function to a particular section and offset,
5815 for error reporting. */
252b5132 5816
d1fad7c6
NC
5817static boolean
5818elf_find_function (abfd, section, symbols, offset,
4e8a9624 5819 filename_ptr, functionname_ptr)
d1fad7c6 5820 bfd *abfd ATTRIBUTE_UNUSED;
252b5132
RH
5821 asection *section;
5822 asymbol **symbols;
5823 bfd_vma offset;
4e8a9624
AM
5824 const char **filename_ptr;
5825 const char **functionname_ptr;
252b5132 5826{
252b5132
RH
5827 const char *filename;
5828 asymbol *func;
5829 bfd_vma low_func;
5830 asymbol **p;
5831
252b5132
RH
5832 filename = NULL;
5833 func = NULL;
5834 low_func = 0;
5835
5836 for (p = symbols; *p != NULL; p++)
5837 {
5838 elf_symbol_type *q;
5839
5840 q = (elf_symbol_type *) *p;
5841
5842 if (bfd_get_section (&q->symbol) != section)
5843 continue;
5844
5845 switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
5846 {
5847 default:
5848 break;
5849 case STT_FILE:
5850 filename = bfd_asymbol_name (&q->symbol);
5851 break;
5852 case STT_NOTYPE:
5853 case STT_FUNC:
5854 if (q->symbol.section == section
5855 && q->symbol.value >= low_func
5856 && q->symbol.value <= offset)
5857 {
5858 func = (asymbol *) q;
5859 low_func = q->symbol.value;
5860 }
5861 break;
5862 }
5863 }
5864
5865 if (func == NULL)
5866 return false;
5867
d1fad7c6
NC
5868 if (filename_ptr)
5869 *filename_ptr = filename;
5870 if (functionname_ptr)
5871 *functionname_ptr = bfd_asymbol_name (func);
5872
5873 return true;
5874}
5875
5876/* Find the nearest line to a particular section and offset,
5877 for error reporting. */
5878
5879boolean
5880_bfd_elf_find_nearest_line (abfd, section, symbols, offset,
4e8a9624 5881 filename_ptr, functionname_ptr, line_ptr)
d1fad7c6
NC
5882 bfd *abfd;
5883 asection *section;
5884 asymbol **symbols;
5885 bfd_vma offset;
4e8a9624
AM
5886 const char **filename_ptr;
5887 const char **functionname_ptr;
d1fad7c6
NC
5888 unsigned int *line_ptr;
5889{
5890 boolean found;
5891
5892 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
4e8a9624
AM
5893 filename_ptr, functionname_ptr,
5894 line_ptr))
d1fad7c6
NC
5895 {
5896 if (!*functionname_ptr)
4e8a9624
AM
5897 elf_find_function (abfd, section, symbols, offset,
5898 *filename_ptr ? NULL : filename_ptr,
5899 functionname_ptr);
5900
d1fad7c6
NC
5901 return true;
5902 }
5903
5904 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
4e8a9624
AM
5905 filename_ptr, functionname_ptr,
5906 line_ptr, 0,
5907 &elf_tdata (abfd)->dwarf2_find_line_info))
d1fad7c6
NC
5908 {
5909 if (!*functionname_ptr)
4e8a9624
AM
5910 elf_find_function (abfd, section, symbols, offset,
5911 *filename_ptr ? NULL : filename_ptr,
5912 functionname_ptr);
5913
d1fad7c6
NC
5914 return true;
5915 }
5916
5917 if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
4e8a9624
AM
5918 &found, filename_ptr,
5919 functionname_ptr, line_ptr,
5920 &elf_tdata (abfd)->line_info))
d1fad7c6
NC
5921 return false;
5922 if (found)
5923 return true;
5924
5925 if (symbols == NULL)
5926 return false;
5927
5928 if (! elf_find_function (abfd, section, symbols, offset,
4e8a9624 5929 filename_ptr, functionname_ptr))
d1fad7c6
NC
5930 return false;
5931
252b5132
RH
5932 *line_ptr = 0;
5933 return true;
5934}
5935
5936int
5937_bfd_elf_sizeof_headers (abfd, reloc)
5938 bfd *abfd;
5939 boolean reloc;
5940{
5941 int ret;
5942
5943 ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
5944 if (! reloc)
5945 ret += get_program_header_size (abfd);
5946 return ret;
5947}
5948
5949boolean
5950_bfd_elf_set_section_contents (abfd, section, location, offset, count)
5951 bfd *abfd;
5952 sec_ptr section;
5953 PTR location;
5954 file_ptr offset;
5955 bfd_size_type count;
5956{
5957 Elf_Internal_Shdr *hdr;
dc810e39 5958 bfd_signed_vma pos;
252b5132
RH
5959
5960 if (! abfd->output_has_begun
5961 && ! _bfd_elf_compute_section_file_positions
5962 (abfd, (struct bfd_link_info *) NULL))
5963 return false;
5964
5965 hdr = &elf_section_data (section)->this_hdr;
dc810e39
AM
5966 pos = hdr->sh_offset + offset;
5967 if (bfd_seek (abfd, pos, SEEK_SET) != 0
5968 || bfd_bwrite (location, count, abfd) != count)
252b5132
RH
5969 return false;
5970
5971 return true;
5972}
5973
5974void
5975_bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
7442e600
ILT
5976 bfd *abfd ATTRIBUTE_UNUSED;
5977 arelent *cache_ptr ATTRIBUTE_UNUSED;
5978 Elf_Internal_Rela *dst ATTRIBUTE_UNUSED;
252b5132
RH
5979{
5980 abort ();
5981}
5982
5983#if 0
5984void
5985_bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
5986 bfd *abfd;
5987 arelent *cache_ptr;
5988 Elf_Internal_Rel *dst;
5989{
5990 abort ();
5991}
5992#endif
5993
5994/* Try to convert a non-ELF reloc into an ELF one. */
5995
5996boolean
5997_bfd_elf_validate_reloc (abfd, areloc)
5998 bfd *abfd;
5999 arelent *areloc;
6000{
c044fabd 6001 /* Check whether we really have an ELF howto. */
252b5132
RH
6002
6003 if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
6004 {
6005 bfd_reloc_code_real_type code;
6006 reloc_howto_type *howto;
6007
6008 /* Alien reloc: Try to determine its type to replace it with an
c044fabd 6009 equivalent ELF reloc. */
252b5132
RH
6010
6011 if (areloc->howto->pc_relative)
6012 {
6013 switch (areloc->howto->bitsize)
6014 {
6015 case 8:
6016 code = BFD_RELOC_8_PCREL;
6017 break;
6018 case 12:
6019 code = BFD_RELOC_12_PCREL;
6020 break;
6021 case 16:
6022 code = BFD_RELOC_16_PCREL;
6023 break;
6024 case 24:
6025 code = BFD_RELOC_24_PCREL;
6026 break;
6027 case 32:
6028 code = BFD_RELOC_32_PCREL;
6029 break;
6030 case 64:
6031 code = BFD_RELOC_64_PCREL;
6032 break;
6033 default:
6034 goto fail;
6035 }
6036
6037 howto = bfd_reloc_type_lookup (abfd, code);
6038
6039 if (areloc->howto->pcrel_offset != howto->pcrel_offset)
6040 {
6041 if (howto->pcrel_offset)
6042 areloc->addend += areloc->address;
6043 else
6044 areloc->addend -= areloc->address; /* addend is unsigned!! */
6045 }
6046 }
6047 else
6048 {
6049 switch (areloc->howto->bitsize)
6050 {
6051 case 8:
6052 code = BFD_RELOC_8;
6053 break;
6054 case 14:
6055 code = BFD_RELOC_14;
6056 break;
6057 case 16:
6058 code = BFD_RELOC_16;
6059 break;
6060 case 26:
6061 code = BFD_RELOC_26;
6062 break;
6063 case 32:
6064 code = BFD_RELOC_32;
6065 break;
6066 case 64:
6067 code = BFD_RELOC_64;
6068 break;
6069 default:
6070 goto fail;
6071 }
6072
6073 howto = bfd_reloc_type_lookup (abfd, code);
6074 }
6075
6076 if (howto)
6077 areloc->howto = howto;
6078 else
6079 goto fail;
6080 }
6081
6082 return true;
6083
6084 fail:
6085 (*_bfd_error_handler)
6086 (_("%s: unsupported relocation type %s"),
8f615d07 6087 bfd_archive_filename (abfd), areloc->howto->name);
252b5132
RH
6088 bfd_set_error (bfd_error_bad_value);
6089 return false;
6090}
6091
6092boolean
6093_bfd_elf_close_and_cleanup (abfd)
6094 bfd *abfd;
6095{
6096 if (bfd_get_format (abfd) == bfd_object)
6097 {
6098 if (elf_shstrtab (abfd) != NULL)
2b0f7ef9 6099 _bfd_elf_strtab_free (elf_shstrtab (abfd));
252b5132
RH
6100 }
6101
6102 return _bfd_generic_close_and_cleanup (abfd);
6103}
6104
6105/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
6106 in the relocation's offset. Thus we cannot allow any sort of sanity
6107 range-checking to interfere. There is nothing else to do in processing
6108 this reloc. */
6109
6110bfd_reloc_status_type
6111_bfd_elf_rel_vtable_reloc_fn (abfd, re, symbol, data, is, obfd, errmsg)
7442e600
ILT
6112 bfd *abfd ATTRIBUTE_UNUSED;
6113 arelent *re ATTRIBUTE_UNUSED;
6114 struct symbol_cache_entry *symbol ATTRIBUTE_UNUSED;
6115 PTR data ATTRIBUTE_UNUSED;
6116 asection *is ATTRIBUTE_UNUSED;
6117 bfd *obfd ATTRIBUTE_UNUSED;
6118 char **errmsg ATTRIBUTE_UNUSED;
252b5132
RH
6119{
6120 return bfd_reloc_ok;
6121}
252b5132
RH
6122\f
6123/* Elf core file support. Much of this only works on native
6124 toolchains, since we rely on knowing the
6125 machine-dependent procfs structure in order to pick
c044fabd 6126 out details about the corefile. */
252b5132
RH
6127
6128#ifdef HAVE_SYS_PROCFS_H
6129# include <sys/procfs.h>
6130#endif
6131
c044fabd 6132/* FIXME: this is kinda wrong, but it's what gdb wants. */
252b5132
RH
6133
6134static int
6135elfcore_make_pid (abfd)
c044fabd 6136 bfd *abfd;
252b5132
RH
6137{
6138 return ((elf_tdata (abfd)->core_lwpid << 16)
6139 + (elf_tdata (abfd)->core_pid));
6140}
6141
252b5132
RH
6142/* If there isn't a section called NAME, make one, using
6143 data from SECT. Note, this function will generate a
6144 reference to NAME, so you shouldn't deallocate or
c044fabd 6145 overwrite it. */
252b5132
RH
6146
6147static boolean
6148elfcore_maybe_make_sect (abfd, name, sect)
c044fabd
KH
6149 bfd *abfd;
6150 char *name;
6151 asection *sect;
252b5132 6152{
c044fabd 6153 asection *sect2;
252b5132
RH
6154
6155 if (bfd_get_section_by_name (abfd, name) != NULL)
6156 return true;
6157
6158 sect2 = bfd_make_section (abfd, name);
6159 if (sect2 == NULL)
6160 return false;
6161
6162 sect2->_raw_size = sect->_raw_size;
6163 sect2->filepos = sect->filepos;
6164 sect2->flags = sect->flags;
6165 sect2->alignment_power = sect->alignment_power;
6166 return true;
6167}
6168
bb0082d6
AM
6169/* Create a pseudosection containing SIZE bytes at FILEPOS. This
6170 actually creates up to two pseudosections:
6171 - For the single-threaded case, a section named NAME, unless
6172 such a section already exists.
6173 - For the multi-threaded case, a section named "NAME/PID", where
6174 PID is elfcore_make_pid (abfd).
6175 Both pseudosections have identical contents. */
6176boolean
6177_bfd_elfcore_make_pseudosection (abfd, name, size, filepos)
6178 bfd *abfd;
6179 char *name;
dc810e39
AM
6180 size_t size;
6181 ufile_ptr filepos;
bb0082d6
AM
6182{
6183 char buf[100];
6184 char *threaded_name;
6185 asection *sect;
6186
6187 /* Build the section name. */
6188
6189 sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
dc810e39 6190 threaded_name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
bb0082d6
AM
6191 if (threaded_name == NULL)
6192 return false;
6193 strcpy (threaded_name, buf);
6194
6195 sect = bfd_make_section (abfd, threaded_name);
6196 if (sect == NULL)
6197 return false;
6198 sect->_raw_size = size;
6199 sect->filepos = filepos;
6200 sect->flags = SEC_HAS_CONTENTS;
6201 sect->alignment_power = 2;
6202
936e320b 6203 return elfcore_maybe_make_sect (abfd, name, sect);
bb0082d6
AM
6204}
6205
252b5132 6206/* prstatus_t exists on:
4a938328 6207 solaris 2.5+
252b5132
RH
6208 linux 2.[01] + glibc
6209 unixware 4.2
6210*/
6211
6212#if defined (HAVE_PRSTATUS_T)
a7b97311
AM
6213static boolean elfcore_grok_prstatus PARAMS ((bfd *, Elf_Internal_Note *));
6214
252b5132
RH
6215static boolean
6216elfcore_grok_prstatus (abfd, note)
c044fabd
KH
6217 bfd *abfd;
6218 Elf_Internal_Note *note;
252b5132 6219{
dc810e39 6220 size_t raw_size;
7ee38065 6221 int offset;
252b5132 6222
4a938328
MS
6223 if (note->descsz == sizeof (prstatus_t))
6224 {
6225 prstatus_t prstat;
252b5132 6226
e0ebfc61 6227 raw_size = sizeof (prstat.pr_reg);
7ee38065 6228 offset = offsetof (prstatus_t, pr_reg);
4a938328 6229 memcpy (&prstat, note->descdata, sizeof (prstat));
252b5132 6230
fa49d224
NC
6231 /* Do not overwrite the core signal if it
6232 has already been set by another thread. */
6233 if (elf_tdata (abfd)->core_signal == 0)
6234 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
4a938328 6235 elf_tdata (abfd)->core_pid = prstat.pr_pid;
252b5132 6236
4a938328
MS
6237 /* pr_who exists on:
6238 solaris 2.5+
6239 unixware 4.2
6240 pr_who doesn't exist on:
6241 linux 2.[01]
6242 */
252b5132 6243#if defined (HAVE_PRSTATUS_T_PR_WHO)
4a938328 6244 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
252b5132 6245#endif
4a938328 6246 }
7ee38065 6247#if defined (HAVE_PRSTATUS32_T)
4a938328
MS
6248 else if (note->descsz == sizeof (prstatus32_t))
6249 {
6250 /* 64-bit host, 32-bit corefile */
6251 prstatus32_t prstat;
6252
e0ebfc61 6253 raw_size = sizeof (prstat.pr_reg);
7ee38065 6254 offset = offsetof (prstatus32_t, pr_reg);
4a938328
MS
6255 memcpy (&prstat, note->descdata, sizeof (prstat));
6256
fa49d224
NC
6257 /* Do not overwrite the core signal if it
6258 has already been set by another thread. */
6259 if (elf_tdata (abfd)->core_signal == 0)
6260 elf_tdata (abfd)->core_signal = prstat.pr_cursig;
4a938328
MS
6261 elf_tdata (abfd)->core_pid = prstat.pr_pid;
6262
6263 /* pr_who exists on:
6264 solaris 2.5+
6265 unixware 4.2
6266 pr_who doesn't exist on:
6267 linux 2.[01]
6268 */
7ee38065 6269#if defined (HAVE_PRSTATUS32_T_PR_WHO)
4a938328
MS
6270 elf_tdata (abfd)->core_lwpid = prstat.pr_who;
6271#endif
6272 }
7ee38065 6273#endif /* HAVE_PRSTATUS32_T */
4a938328
MS
6274 else
6275 {
6276 /* Fail - we don't know how to handle any other
6277 note size (ie. data object type). */
6278 return true;
6279 }
252b5132 6280
bb0082d6 6281 /* Make a ".reg/999" section and a ".reg" section. */
936e320b
AM
6282 return _bfd_elfcore_make_pseudosection (abfd, ".reg",
6283 raw_size, note->descpos + offset);
252b5132
RH
6284}
6285#endif /* defined (HAVE_PRSTATUS_T) */
6286
bb0082d6 6287/* Create a pseudosection containing the exact contents of NOTE. */
252b5132 6288static boolean
ff08c6bb 6289elfcore_make_note_pseudosection (abfd, name, note)
c044fabd 6290 bfd *abfd;
ff08c6bb 6291 char *name;
c044fabd 6292 Elf_Internal_Note *note;
252b5132 6293{
936e320b
AM
6294 return _bfd_elfcore_make_pseudosection (abfd, name,
6295 note->descsz, note->descpos);
252b5132
RH
6296}
6297
ff08c6bb
JB
6298/* There isn't a consistent prfpregset_t across platforms,
6299 but it doesn't matter, because we don't have to pick this
c044fabd
KH
6300 data structure apart. */
6301
ff08c6bb
JB
6302static boolean
6303elfcore_grok_prfpreg (abfd, note)
c044fabd
KH
6304 bfd *abfd;
6305 Elf_Internal_Note *note;
ff08c6bb
JB
6306{
6307 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
6308}
6309
ff08c6bb
JB
6310/* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
6311 type of 5 (NT_PRXFPREG). Just include the whole note's contents
6312 literally. */
c044fabd 6313
ff08c6bb
JB
6314static boolean
6315elfcore_grok_prxfpreg (abfd, note)
c044fabd
KH
6316 bfd *abfd;
6317 Elf_Internal_Note *note;
ff08c6bb
JB
6318{
6319 return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
6320}
6321
252b5132 6322#if defined (HAVE_PRPSINFO_T)
4a938328 6323typedef prpsinfo_t elfcore_psinfo_t;
7ee38065 6324#if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
4a938328
MS
6325typedef prpsinfo32_t elfcore_psinfo32_t;
6326#endif
252b5132
RH
6327#endif
6328
6329#if defined (HAVE_PSINFO_T)
4a938328 6330typedef psinfo_t elfcore_psinfo_t;
7ee38065 6331#if defined (HAVE_PSINFO32_T) /* Sparc64 cross Sparc32 */
4a938328
MS
6332typedef psinfo32_t elfcore_psinfo32_t;
6333#endif
252b5132
RH
6334#endif
6335
252b5132
RH
6336/* return a malloc'ed copy of a string at START which is at
6337 most MAX bytes long, possibly without a terminating '\0'.
c044fabd 6338 the copy will always have a terminating '\0'. */
252b5132 6339
936e320b 6340char *
bb0082d6 6341_bfd_elfcore_strndup (abfd, start, max)
c044fabd
KH
6342 bfd *abfd;
6343 char *start;
dc810e39 6344 size_t max;
252b5132 6345{
dc810e39 6346 char *dups;
c044fabd 6347 char *end = memchr (start, '\0', max);
dc810e39 6348 size_t len;
252b5132
RH
6349
6350 if (end == NULL)
6351 len = max;
6352 else
6353 len = end - start;
6354
dc810e39
AM
6355 dups = bfd_alloc (abfd, (bfd_size_type) len + 1);
6356 if (dups == NULL)
252b5132
RH
6357 return NULL;
6358
dc810e39
AM
6359 memcpy (dups, start, len);
6360 dups[len] = '\0';
252b5132 6361
dc810e39 6362 return dups;
252b5132
RH
6363}
6364
bb0082d6 6365#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
a7b97311 6366static boolean elfcore_grok_psinfo PARAMS ((bfd *, Elf_Internal_Note *));
bb0082d6 6367
252b5132
RH
6368static boolean
6369elfcore_grok_psinfo (abfd, note)
c044fabd
KH
6370 bfd *abfd;
6371 Elf_Internal_Note *note;
252b5132 6372{
4a938328
MS
6373 if (note->descsz == sizeof (elfcore_psinfo_t))
6374 {
6375 elfcore_psinfo_t psinfo;
252b5132 6376
7ee38065 6377 memcpy (&psinfo, note->descdata, sizeof (psinfo));
252b5132 6378
4a938328 6379 elf_tdata (abfd)->core_program
936e320b
AM
6380 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
6381 sizeof (psinfo.pr_fname));
252b5132 6382
4a938328 6383 elf_tdata (abfd)->core_command
936e320b
AM
6384 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
6385 sizeof (psinfo.pr_psargs));
4a938328 6386 }
7ee38065 6387#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
4a938328
MS
6388 else if (note->descsz == sizeof (elfcore_psinfo32_t))
6389 {
6390 /* 64-bit host, 32-bit corefile */
6391 elfcore_psinfo32_t psinfo;
6392
7ee38065 6393 memcpy (&psinfo, note->descdata, sizeof (psinfo));
252b5132 6394
4a938328 6395 elf_tdata (abfd)->core_program
936e320b
AM
6396 = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
6397 sizeof (psinfo.pr_fname));
4a938328
MS
6398
6399 elf_tdata (abfd)->core_command
936e320b
AM
6400 = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
6401 sizeof (psinfo.pr_psargs));
4a938328
MS
6402 }
6403#endif
6404
6405 else
6406 {
6407 /* Fail - we don't know how to handle any other
6408 note size (ie. data object type). */
6409 return true;
6410 }
252b5132
RH
6411
6412 /* Note that for some reason, a spurious space is tacked
6413 onto the end of the args in some (at least one anyway)
c044fabd 6414 implementations, so strip it off if it exists. */
252b5132
RH
6415
6416 {
c044fabd 6417 char *command = elf_tdata (abfd)->core_command;
252b5132
RH
6418 int n = strlen (command);
6419
6420 if (0 < n && command[n - 1] == ' ')
6421 command[n - 1] = '\0';
6422 }
6423
6424 return true;
6425}
6426#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
6427
252b5132 6428#if defined (HAVE_PSTATUS_T)
51316059
MS
6429static boolean elfcore_grok_pstatus PARAMS ((bfd *, Elf_Internal_Note *));
6430
252b5132
RH
6431static boolean
6432elfcore_grok_pstatus (abfd, note)
c044fabd
KH
6433 bfd *abfd;
6434 Elf_Internal_Note *note;
252b5132 6435{
f572a39d
AM
6436 if (note->descsz == sizeof (pstatus_t)
6437#if defined (HAVE_PXSTATUS_T)
6438 || note->descsz == sizeof (pxstatus_t)
6439#endif
6440 )
4a938328
MS
6441 {
6442 pstatus_t pstat;
252b5132 6443
4a938328 6444 memcpy (&pstat, note->descdata, sizeof (pstat));
252b5132 6445
4a938328
MS
6446 elf_tdata (abfd)->core_pid = pstat.pr_pid;
6447 }
7ee38065 6448#if defined (HAVE_PSTATUS32_T)
4a938328
MS
6449 else if (note->descsz == sizeof (pstatus32_t))
6450 {
6451 /* 64-bit host, 32-bit corefile */
6452 pstatus32_t pstat;
252b5132 6453
4a938328 6454 memcpy (&pstat, note->descdata, sizeof (pstat));
252b5132 6455
4a938328
MS
6456 elf_tdata (abfd)->core_pid = pstat.pr_pid;
6457 }
6458#endif
252b5132
RH
6459 /* Could grab some more details from the "representative"
6460 lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
c044fabd 6461 NT_LWPSTATUS note, presumably. */
252b5132
RH
6462
6463 return true;
6464}
6465#endif /* defined (HAVE_PSTATUS_T) */
6466
252b5132 6467#if defined (HAVE_LWPSTATUS_T)
51316059
MS
6468static boolean elfcore_grok_lwpstatus PARAMS ((bfd *, Elf_Internal_Note *));
6469
252b5132
RH
6470static boolean
6471elfcore_grok_lwpstatus (abfd, note)
c044fabd
KH
6472 bfd *abfd;
6473 Elf_Internal_Note *note;
252b5132
RH
6474{
6475 lwpstatus_t lwpstat;
6476 char buf[100];
c044fabd
KH
6477 char *name;
6478 asection *sect;
252b5132 6479
f572a39d
AM
6480 if (note->descsz != sizeof (lwpstat)
6481#if defined (HAVE_LWPXSTATUS_T)
6482 && note->descsz != sizeof (lwpxstatus_t)
6483#endif
6484 )
252b5132
RH
6485 return true;
6486
6487 memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
6488
6489 elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
6490 elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
6491
c044fabd 6492 /* Make a ".reg/999" section. */
252b5132
RH
6493
6494 sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
dc810e39 6495 name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
252b5132
RH
6496 if (name == NULL)
6497 return false;
6498 strcpy (name, buf);
6499
6500 sect = bfd_make_section (abfd, name);
6501 if (sect == NULL)
6502 return false;
6503
6504#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
6505 sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
6506 sect->filepos = note->descpos
6507 + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
6508#endif
6509
6510#if defined (HAVE_LWPSTATUS_T_PR_REG)
6511 sect->_raw_size = sizeof (lwpstat.pr_reg);
6512 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
6513#endif
6514
6515 sect->flags = SEC_HAS_CONTENTS;
6516 sect->alignment_power = 2;
6517
6518 if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
6519 return false;
6520
6521 /* Make a ".reg2/999" section */
6522
6523 sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
dc810e39 6524 name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
252b5132
RH
6525 if (name == NULL)
6526 return false;
6527 strcpy (name, buf);
6528
6529 sect = bfd_make_section (abfd, name);
6530 if (sect == NULL)
6531 return false;
6532
6533#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
6534 sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
6535 sect->filepos = note->descpos
6536 + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
6537#endif
6538
6539#if defined (HAVE_LWPSTATUS_T_PR_FPREG)
6540 sect->_raw_size = sizeof (lwpstat.pr_fpreg);
6541 sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
6542#endif
6543
6544 sect->flags = SEC_HAS_CONTENTS;
6545 sect->alignment_power = 2;
6546
936e320b 6547 return elfcore_maybe_make_sect (abfd, ".reg2", sect);
252b5132
RH
6548}
6549#endif /* defined (HAVE_LWPSTATUS_T) */
6550
16e9c715
NC
6551#if defined (HAVE_WIN32_PSTATUS_T)
6552static boolean
6553elfcore_grok_win32pstatus (abfd, note)
c044fabd
KH
6554 bfd *abfd;
6555 Elf_Internal_Note *note;
16e9c715
NC
6556{
6557 char buf[30];
c044fabd
KH
6558 char *name;
6559 asection *sect;
16e9c715
NC
6560 win32_pstatus_t pstatus;
6561
6562 if (note->descsz < sizeof (pstatus))
6563 return true;
6564
e8eab623 6565 memcpy (&pstatus, note->descdata, sizeof (pstatus));
c044fabd
KH
6566
6567 switch (pstatus.data_type)
16e9c715
NC
6568 {
6569 case NOTE_INFO_PROCESS:
6570 /* FIXME: need to add ->core_command. */
6571 elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
6572 elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
c044fabd 6573 break;
16e9c715
NC
6574
6575 case NOTE_INFO_THREAD:
6576 /* Make a ".reg/999" section. */
6577 sprintf (buf, ".reg/%d", pstatus.data.thread_info.tid);
c044fabd 6578
dc810e39 6579 name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
16e9c715 6580 if (name == NULL)
c044fabd
KH
6581 return false;
6582
16e9c715
NC
6583 strcpy (name, buf);
6584
6585 sect = bfd_make_section (abfd, name);
6586 if (sect == NULL)
c044fabd
KH
6587 return false;
6588
16e9c715 6589 sect->_raw_size = sizeof (pstatus.data.thread_info.thread_context);
079e9a2f
AM
6590 sect->filepos = (note->descpos
6591 + offsetof (struct win32_pstatus,
6592 data.thread_info.thread_context));
16e9c715
NC
6593 sect->flags = SEC_HAS_CONTENTS;
6594 sect->alignment_power = 2;
6595
6596 if (pstatus.data.thread_info.is_active_thread)
6597 if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
6598 return false;
6599 break;
6600
6601 case NOTE_INFO_MODULE:
6602 /* Make a ".module/xxxxxxxx" section. */
c044fabd
KH
6603 sprintf (buf, ".module/%08x", pstatus.data.module_info.base_address);
6604
dc810e39 6605 name = bfd_alloc (abfd, (bfd_size_type) strlen (buf) + 1);
16e9c715
NC
6606 if (name == NULL)
6607 return false;
c044fabd 6608
16e9c715 6609 strcpy (name, buf);
252b5132 6610
16e9c715 6611 sect = bfd_make_section (abfd, name);
c044fabd 6612
16e9c715
NC
6613 if (sect == NULL)
6614 return false;
c044fabd 6615
16e9c715
NC
6616 sect->_raw_size = note->descsz;
6617 sect->filepos = note->descpos;
6618 sect->flags = SEC_HAS_CONTENTS;
6619 sect->alignment_power = 2;
6620 break;
6621
6622 default:
6623 return true;
6624 }
6625
6626 return true;
6627}
6628#endif /* HAVE_WIN32_PSTATUS_T */
252b5132
RH
6629
6630static boolean
6631elfcore_grok_note (abfd, note)
c044fabd
KH
6632 bfd *abfd;
6633 Elf_Internal_Note *note;
252b5132 6634{
bb0082d6
AM
6635 struct elf_backend_data *bed = get_elf_backend_data (abfd);
6636
252b5132
RH
6637 switch (note->type)
6638 {
6639 default:
6640 return true;
6641
252b5132 6642 case NT_PRSTATUS:
bb0082d6
AM
6643 if (bed->elf_backend_grok_prstatus)
6644 if ((*bed->elf_backend_grok_prstatus) (abfd, note))
6645 return true;
6646#if defined (HAVE_PRSTATUS_T)
252b5132 6647 return elfcore_grok_prstatus (abfd, note);
bb0082d6
AM
6648#else
6649 return true;
252b5132
RH
6650#endif
6651
6652#if defined (HAVE_PSTATUS_T)
6653 case NT_PSTATUS:
6654 return elfcore_grok_pstatus (abfd, note);
6655#endif
6656
6657#if defined (HAVE_LWPSTATUS_T)
6658 case NT_LWPSTATUS:
6659 return elfcore_grok_lwpstatus (abfd, note);
6660#endif
6661
6662 case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */
6663 return elfcore_grok_prfpreg (abfd, note);
6664
16e9c715 6665#if defined (HAVE_WIN32_PSTATUS_T)
c044fabd 6666 case NT_WIN32PSTATUS:
16e9c715
NC
6667 return elfcore_grok_win32pstatus (abfd, note);
6668#endif
6669
c044fabd 6670 case NT_PRXFPREG: /* Linux SSE extension */
ff08c6bb
JB
6671 if (note->namesz == 5
6672 && ! strcmp (note->namedata, "LINUX"))
6673 return elfcore_grok_prxfpreg (abfd, note);
6674 else
6675 return true;
6676
252b5132
RH
6677 case NT_PRPSINFO:
6678 case NT_PSINFO:
bb0082d6
AM
6679 if (bed->elf_backend_grok_psinfo)
6680 if ((*bed->elf_backend_grok_psinfo) (abfd, note))
6681 return true;
6682#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
252b5132 6683 return elfcore_grok_psinfo (abfd, note);
bb0082d6
AM
6684#else
6685 return true;
252b5132
RH
6686#endif
6687 }
6688}
6689
50b2bdb7
AM
6690static boolean
6691elfcore_netbsd_get_lwpid (note, lwpidp)
6692 Elf_Internal_Note *note;
6693 int *lwpidp;
6694{
6695 char *cp;
6696
6697 cp = strchr (note->namedata, '@');
6698 if (cp != NULL)
6699 {
d2b64500 6700 *lwpidp = atoi(cp + 1);
50b2bdb7
AM
6701 return true;
6702 }
6703 return false;
6704}
6705
6706static boolean
6707elfcore_grok_netbsd_procinfo (abfd, note)
6708 bfd *abfd;
6709 Elf_Internal_Note *note;
6710{
6711
6712 /* Signal number at offset 0x08. */
6713 elf_tdata (abfd)->core_signal
6714 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
6715
6716 /* Process ID at offset 0x50. */
6717 elf_tdata (abfd)->core_pid
6718 = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
6719
6720 /* Command name at 0x7c (max 32 bytes, including nul). */
6721 elf_tdata (abfd)->core_command
6722 = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
6723
6724 return true;
6725}
6726
6727static boolean
6728elfcore_grok_netbsd_note (abfd, note)
6729 bfd *abfd;
6730 Elf_Internal_Note *note;
6731{
6732 int lwp;
6733
6734 if (elfcore_netbsd_get_lwpid (note, &lwp))
6735 elf_tdata (abfd)->core_lwpid = lwp;
6736
b4db1224 6737 if (note->type == NT_NETBSDCORE_PROCINFO)
50b2bdb7
AM
6738 {
6739 /* NetBSD-specific core "procinfo". Note that we expect to
6740 find this note before any of the others, which is fine,
6741 since the kernel writes this note out first when it
6742 creates a core file. */
6743
6744 return elfcore_grok_netbsd_procinfo (abfd, note);
6745 }
6746
b4db1224
JT
6747 /* As of Jan 2002 there are no other machine-independent notes
6748 defined for NetBSD core files. If the note type is less
6749 than the start of the machine-dependent note types, we don't
6750 understand it. */
50b2bdb7 6751
b4db1224 6752 if (note->type < NT_NETBSDCORE_FIRSTMACH)
50b2bdb7
AM
6753 return true;
6754
6755
6756 switch (bfd_get_arch (abfd))
6757 {
6758 /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
6759 PT_GETFPREGS == mach+2. */
6760
6761 case bfd_arch_alpha:
6762 case bfd_arch_sparc:
6763 switch (note->type)
6764 {
b4db1224 6765 case NT_NETBSDCORE_FIRSTMACH+0:
50b2bdb7
AM
6766 return elfcore_make_note_pseudosection (abfd, ".reg", note);
6767
b4db1224 6768 case NT_NETBSDCORE_FIRSTMACH+2:
50b2bdb7
AM
6769 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
6770
6771 default:
6772 return true;
6773 }
6774
6775 /* On all other arch's, PT_GETREGS == mach+1 and
6776 PT_GETFPREGS == mach+3. */
6777
6778 default:
6779 switch (note->type)
6780 {
b4db1224 6781 case NT_NETBSDCORE_FIRSTMACH+1:
50b2bdb7
AM
6782 return elfcore_make_note_pseudosection (abfd, ".reg", note);
6783
b4db1224 6784 case NT_NETBSDCORE_FIRSTMACH+3:
50b2bdb7
AM
6785 return elfcore_make_note_pseudosection (abfd, ".reg2", note);
6786
6787 default:
6788 return true;
6789 }
6790 }
6791 /* NOTREACHED */
6792}
6793
7c76fa91
MS
6794/* Function: elfcore_write_note
6795
6796 Inputs:
6797 buffer to hold note
6798 name of note
6799 type of note
6800 data for note
6801 size of data for note
6802
6803 Return:
6804 End of buffer containing note. */
6805
6806char *
6807elfcore_write_note (abfd, buf, bufsiz, name, type, input, size)
6808 bfd *abfd;
6809 char *buf;
6810 int *bufsiz;
6811 char *name;
6812 int type;
6813 void *input;
6814 int size;
6815{
6816 Elf_External_Note *xnp;
6817 int namesz = strlen (name);
6818 int newspace = BFD_ALIGN (sizeof (Elf_External_Note) + size + namesz - 1, 4);
6819 char *p, *dest;
6820
6821 p = realloc (buf, *bufsiz + newspace);
6822 dest = p + *bufsiz;
6823 *bufsiz += newspace;
6824 xnp = (Elf_External_Note *) dest;
6825 H_PUT_32 (abfd, namesz, xnp->namesz);
6826 H_PUT_32 (abfd, size, xnp->descsz);
6827 H_PUT_32 (abfd, type, xnp->type);
6828 strcpy (xnp->name, name);
6829 memcpy (xnp->name + BFD_ALIGN (namesz, 4), input, size);
6830 return p;
6831}
6832
6833#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
6834char *
6835elfcore_write_prpsinfo (abfd, buf, bufsiz, fname, psargs)
6836 bfd *abfd;
6837 char *buf;
6838 int *bufsiz;
6839 char *fname;
6840 char *psargs;
6841{
6842 int note_type;
6843 char *note_name = "CORE";
6844
6845#if defined (HAVE_PSINFO_T)
6846 psinfo_t data;
6847 note_type = NT_PSINFO;
6848#else
6849 prpsinfo_t data;
6850 note_type = NT_PRPSINFO;
6851#endif
6852
6853 memset (&data, 0, sizeof (data));
6854 strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
6855 strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
6856 return elfcore_write_note (abfd, buf, bufsiz,
6857 note_name, note_type, &data, sizeof (data));
6858}
6859#endif /* PSINFO_T or PRPSINFO_T */
6860
6861#if defined (HAVE_PRSTATUS_T)
6862char *
6863elfcore_write_prstatus (abfd, buf, bufsiz, pid, cursig, gregs)
6864 bfd *abfd;
6865 char *buf;
6866 int *bufsiz;
b87011e9 6867 long pid;
7c76fa91
MS
6868 int cursig;
6869 void *gregs;
6870{
6871 prstatus_t prstat;
6872 char *note_name = "CORE";
6873
6874 memset (&prstat, 0, sizeof (prstat));
6875 prstat.pr_pid = pid;
6876 prstat.pr_cursig = cursig;
c106e334 6877 memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
7c76fa91
MS
6878 return elfcore_write_note (abfd, buf, bufsiz,
6879 note_name, NT_PRSTATUS, &prstat, sizeof (prstat));
6880}
6881#endif /* HAVE_PRSTATUS_T */
6882
51316059
MS
6883#if defined (HAVE_LWPSTATUS_T)
6884char *
6885elfcore_write_lwpstatus (abfd, buf, bufsiz, pid, cursig, gregs)
6886 bfd *abfd;
6887 char *buf;
6888 int *bufsiz;
6889 long pid;
6890 int cursig;
6891 void *gregs;
6892{
6893 lwpstatus_t lwpstat;
6894 char *note_name = "CORE";
6895
6896 memset (&lwpstat, 0, sizeof (lwpstat));
6897 lwpstat.pr_lwpid = pid >> 16;
6898 lwpstat.pr_cursig = cursig;
6899#if defined (HAVE_LWPSTATUS_T_PR_REG)
6900 memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
6901#elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
6902#if !defined(gregs)
6903 memcpy (lwpstat.pr_context.uc_mcontext.gregs,
6904 gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
6905#else
6906 memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
6907 gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
6908#endif
6909#endif
6910 return elfcore_write_note (abfd, buf, bufsiz, note_name,
6911 NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
6912}
6913#endif /* HAVE_LWPSTATUS_T */
6914
7c76fa91
MS
6915#if defined (HAVE_PSTATUS_T)
6916char *
6917elfcore_write_pstatus (abfd, buf, bufsiz, pid, cursig, gregs)
6918 bfd *abfd;
6919 char *buf;
6920 int *bufsiz;
b87011e9 6921 long pid;
7c76fa91
MS
6922 int cursig;
6923 void *gregs;
6924{
6925 pstatus_t pstat;
6926 char *note_name = "CORE";
6927
51316059
MS
6928 memset (&pstat, 0, sizeof (pstat));
6929 pstat.pr_pid = pid & 0xffff;
6930 buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
6931 NT_PSTATUS, &pstat, sizeof (pstat));
6932 return buf;
7c76fa91
MS
6933}
6934#endif /* HAVE_PSTATUS_T */
6935
6936char *
6937elfcore_write_prfpreg (abfd, buf, bufsiz, fpregs, size)
6938 bfd *abfd;
6939 char *buf;
6940 int *bufsiz;
6941 void *fpregs;
6942 int size;
6943{
6944 char *note_name = "CORE";
6945 return elfcore_write_note (abfd, buf, bufsiz,
6946 note_name, NT_FPREGSET, fpregs, size);
6947}
6948
6949char *
6950elfcore_write_prxfpreg (abfd, buf, bufsiz, xfpregs, size)
6951 bfd *abfd;
6952 char *buf;
6953 int *bufsiz;
6954 void *xfpregs;
6955 int size;
6956{
6957 char *note_name = "LINUX";
6958 return elfcore_write_note (abfd, buf, bufsiz,
6959 note_name, NT_PRXFPREG, xfpregs, size);
6960}
6961
252b5132
RH
6962static boolean
6963elfcore_read_notes (abfd, offset, size)
c044fabd 6964 bfd *abfd;
dc810e39
AM
6965 file_ptr offset;
6966 bfd_size_type size;
252b5132 6967{
c044fabd
KH
6968 char *buf;
6969 char *p;
252b5132
RH
6970
6971 if (size <= 0)
6972 return true;
6973
dc810e39 6974 if (bfd_seek (abfd, offset, SEEK_SET) != 0)
252b5132
RH
6975 return false;
6976
dc810e39 6977 buf = bfd_malloc (size);
252b5132
RH
6978 if (buf == NULL)
6979 return false;
6980
dc810e39 6981 if (bfd_bread (buf, size, abfd) != size)
252b5132
RH
6982 {
6983 error:
6984 free (buf);
6985 return false;
6986 }
6987
6988 p = buf;
6989 while (p < buf + size)
6990 {
c044fabd
KH
6991 /* FIXME: bad alignment assumption. */
6992 Elf_External_Note *xnp = (Elf_External_Note *) p;
252b5132
RH
6993 Elf_Internal_Note in;
6994
dc810e39 6995 in.type = H_GET_32 (abfd, xnp->type);
252b5132 6996
dc810e39 6997 in.namesz = H_GET_32 (abfd, xnp->namesz);
252b5132
RH
6998 in.namedata = xnp->name;
6999
dc810e39 7000 in.descsz = H_GET_32 (abfd, xnp->descsz);
252b5132
RH
7001 in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
7002 in.descpos = offset + (in.descdata - buf);
7003
50b2bdb7
AM
7004 if (strncmp (in.namedata, "NetBSD-CORE", 11) == 0)
7005 {
7006 if (! elfcore_grok_netbsd_note (abfd, &in))
7007 goto error;
7008 }
7009 else
7010 {
7011 if (! elfcore_grok_note (abfd, &in))
7012 goto error;
7013 }
252b5132
RH
7014
7015 p = in.descdata + BFD_ALIGN (in.descsz, 4);
7016 }
7017
7018 free (buf);
7019 return true;
7020}
98d8431c
JB
7021\f
7022/* Providing external access to the ELF program header table. */
7023
7024/* Return an upper bound on the number of bytes required to store a
7025 copy of ABFD's program header table entries. Return -1 if an error
7026 occurs; bfd_get_error will return an appropriate code. */
c044fabd 7027
98d8431c
JB
7028long
7029bfd_get_elf_phdr_upper_bound (abfd)
7030 bfd *abfd;
7031{
7032 if (abfd->xvec->flavour != bfd_target_elf_flavour)
7033 {
7034 bfd_set_error (bfd_error_wrong_format);
7035 return -1;
7036 }
7037
936e320b 7038 return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
98d8431c
JB
7039}
7040
98d8431c
JB
7041/* Copy ABFD's program header table entries to *PHDRS. The entries
7042 will be stored as an array of Elf_Internal_Phdr structures, as
7043 defined in include/elf/internal.h. To find out how large the
7044 buffer needs to be, call bfd_get_elf_phdr_upper_bound.
7045
7046 Return the number of program header table entries read, or -1 if an
7047 error occurs; bfd_get_error will return an appropriate code. */
c044fabd 7048
98d8431c
JB
7049int
7050bfd_get_elf_phdrs (abfd, phdrs)
7051 bfd *abfd;
7052 void *phdrs;
7053{
7054 int num_phdrs;
7055
7056 if (abfd->xvec->flavour != bfd_target_elf_flavour)
7057 {
7058 bfd_set_error (bfd_error_wrong_format);
7059 return -1;
7060 }
7061
7062 num_phdrs = elf_elfheader (abfd)->e_phnum;
c044fabd 7063 memcpy (phdrs, elf_tdata (abfd)->phdr,
98d8431c
JB
7064 num_phdrs * sizeof (Elf_Internal_Phdr));
7065
7066 return num_phdrs;
7067}
ae4221d7
L
7068
7069void
4e771d61 7070_bfd_elf_sprintf_vma (abfd, buf, value)
cc55aec9 7071 bfd *abfd ATTRIBUTE_UNUSED;
ae4221d7
L
7072 char *buf;
7073 bfd_vma value;
7074{
d3b05f8d 7075#ifdef BFD64
ae4221d7
L
7076 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
7077
7078 i_ehdrp = elf_elfheader (abfd);
7079 if (i_ehdrp == NULL)
7080 sprintf_vma (buf, value);
7081 else
7082 {
7083 if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64)
cc55aec9 7084 {
ae4221d7 7085#if BFD_HOST_64BIT_LONG
cc55aec9 7086 sprintf (buf, "%016lx", value);
ae4221d7 7087#else
cc55aec9
AM
7088 sprintf (buf, "%08lx%08lx", _bfd_int64_high (value),
7089 _bfd_int64_low (value));
ae4221d7 7090#endif
cc55aec9 7091 }
ae4221d7
L
7092 else
7093 sprintf (buf, "%08lx", (unsigned long) (value & 0xffffffff));
7094 }
d3b05f8d
L
7095#else
7096 sprintf_vma (buf, value);
7097#endif
ae4221d7
L
7098}
7099
7100void
4e771d61 7101_bfd_elf_fprintf_vma (abfd, stream, value)
cc55aec9 7102 bfd *abfd ATTRIBUTE_UNUSED;
ae4221d7
L
7103 PTR stream;
7104 bfd_vma value;
7105{
d3b05f8d 7106#ifdef BFD64
ae4221d7
L
7107 Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */
7108
7109 i_ehdrp = elf_elfheader (abfd);
7110 if (i_ehdrp == NULL)
7111 fprintf_vma ((FILE *) stream, value);
7112 else
7113 {
7114 if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64)
cc55aec9 7115 {
ae4221d7 7116#if BFD_HOST_64BIT_LONG
cc55aec9 7117 fprintf ((FILE *) stream, "%016lx", value);
ae4221d7 7118#else
cc55aec9
AM
7119 fprintf ((FILE *) stream, "%08lx%08lx",
7120 _bfd_int64_high (value), _bfd_int64_low (value));
ae4221d7 7121#endif
cc55aec9 7122 }
ae4221d7
L
7123 else
7124 fprintf ((FILE *) stream, "%08lx",
7125 (unsigned long) (value & 0xffffffff));
7126 }
d3b05f8d
L
7127#else
7128 fprintf_vma ((FILE *) stream, value);
7129#endif
ae4221d7 7130}
db6751f2
JJ
7131
7132enum elf_reloc_type_class
f51e552e
AM
7133_bfd_elf_reloc_type_class (rela)
7134 const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED;
db6751f2
JJ
7135{
7136 return reloc_class_normal;
7137}
f8df10f4
JJ
7138
7139/* For RELA architectures, return what the relocation value for
7140 relocation against a local symbol. */
7141
7142bfd_vma
7143_bfd_elf_rela_local_sym (abfd, sym, sec, rel)
7144 bfd *abfd;
7145 Elf_Internal_Sym *sym;
7146 asection *sec;
7147 Elf_Internal_Rela *rel;
7148{
7149 bfd_vma relocation;
7150
7151 relocation = (sec->output_section->vma
7152 + sec->output_offset
7153 + sym->st_value);
7154 if ((sec->flags & SEC_MERGE)
c629eae0 7155 && ELF_ST_TYPE (sym->st_info) == STT_SECTION
65765700 7156 && elf_section_data (sec)->sec_info_type == ELF_INFO_TYPE_MERGE)
f8df10f4
JJ
7157 {
7158 asection *msec;
7159
7160 msec = sec;
7161 rel->r_addend =
7162 _bfd_merged_section_offset (abfd, &msec,
65765700 7163 elf_section_data (sec)->sec_info,
f8df10f4
JJ
7164 sym->st_value + rel->r_addend,
7165 (bfd_vma) 0)
7166 - relocation;
7167 rel->r_addend += msec->output_section->vma + msec->output_offset;
7168 }
7169 return relocation;
7170}
c629eae0
JJ
7171
7172bfd_vma
7173_bfd_elf_rel_local_sym (abfd, sym, psec, addend)
7174 bfd *abfd;
7175 Elf_Internal_Sym *sym;
7176 asection **psec;
7177 bfd_vma addend;
7178{
7179 asection *sec = *psec;
7180
65765700 7181 if (elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_MERGE)
c629eae0
JJ
7182 return sym->st_value + addend;
7183
7184 return _bfd_merged_section_offset (abfd, psec,
65765700 7185 elf_section_data (sec)->sec_info,
c629eae0
JJ
7186 sym->st_value + addend, (bfd_vma) 0);
7187}
7188
7189bfd_vma
7190_bfd_elf_section_offset (abfd, info, sec, offset)
7191 bfd *abfd;
7192 struct bfd_link_info *info;
7193 asection *sec;
7194 bfd_vma offset;
7195{
7196 struct bfd_elf_section_data *sec_data;
7197
7198 sec_data = elf_section_data (sec);
65765700
JJ
7199 switch (sec_data->sec_info_type)
7200 {
7201 case ELF_INFO_TYPE_STABS:
7202 return _bfd_stab_section_offset
7203 (abfd, &elf_hash_table (info)->merge_info, sec, &sec_data->sec_info,
7204 offset);
7205 case ELF_INFO_TYPE_EH_FRAME:
7206 return _bfd_elf_eh_frame_section_offset (abfd, sec, offset);
7207 default:
7208 return offset;
7209 }
c629eae0 7210}
This page took 0.681329 seconds and 4 git commands to generate.