OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [bfd/] [elf.c] - Blame information for rev 818

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.