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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [elf.c] - Blame information for rev 148

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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