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