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 143

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
  /* For objcopy and relocatable link, don't copy the output ELF
6276
     section type from input if the output BFD section flags have been
6277
     set to something different.  For a final link allow some flags
6278
     that the linker clears to differ.  */
6279
  if (elf_section_type (osec) == SHT_NULL
6280
      && (osec->flags == isec->flags
6281
          || (final_link
6282
              && ((osec->flags ^ isec->flags)
6283
                  & ~(SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_RELOC)) == 0)))
6284
    elf_section_type (osec) = elf_section_type (isec);
6285
 
6286
  /* FIXME: Is this correct for all OS/PROC specific flags?  */
6287
  elf_section_flags (osec) |= (elf_section_flags (isec)
6288
                               & (SHF_MASKOS | SHF_MASKPROC));
6289
 
6290
  /* Set things up for objcopy and relocatable link.  The output
6291
     SHT_GROUP section will have its elf_next_in_group pointing back
6292
     to the input group members.  Ignore linker created group section.
6293
     See elfNN_ia64_object_p in elfxx-ia64.c.  */
6294
  if (!final_link)
6295
    {
6296
      if (elf_sec_group (isec) == NULL
6297
          || (elf_sec_group (isec)->flags & SEC_LINKER_CREATED) == 0)
6298
        {
6299
          if (elf_section_flags (isec) & SHF_GROUP)
6300
            elf_section_flags (osec) |= SHF_GROUP;
6301
          elf_next_in_group (osec) = elf_next_in_group (isec);
6302
          elf_section_data (osec)->group = elf_section_data (isec)->group;
6303
        }
6304
    }
6305
 
6306
  ihdr = &elf_section_data (isec)->this_hdr;
6307
 
6308
  /* We need to handle elf_linked_to_section for SHF_LINK_ORDER. We
6309
     don't use the output section of the linked-to section since it
6310
     may be NULL at this point.  */
6311
  if ((ihdr->sh_flags & SHF_LINK_ORDER) != 0)
6312
    {
6313
      ohdr = &elf_section_data (osec)->this_hdr;
6314
      ohdr->sh_flags |= SHF_LINK_ORDER;
6315
      elf_linked_to_section (osec) = elf_linked_to_section (isec);
6316
    }
6317
 
6318
  osec->use_rela_p = isec->use_rela_p;
6319
 
6320
  return TRUE;
6321
}
6322
 
6323
/* Copy private section information.  This copies over the entsize
6324
   field, and sometimes the info field.  */
6325
 
6326
bfd_boolean
6327
_bfd_elf_copy_private_section_data (bfd *ibfd,
6328
                                    asection *isec,
6329
                                    bfd *obfd,
6330
                                    asection *osec)
6331
{
6332
  Elf_Internal_Shdr *ihdr, *ohdr;
6333
 
6334
  if (ibfd->xvec->flavour != bfd_target_elf_flavour
6335
      || obfd->xvec->flavour != bfd_target_elf_flavour)
6336
    return TRUE;
6337
 
6338
  ihdr = &elf_section_data (isec)->this_hdr;
6339
  ohdr = &elf_section_data (osec)->this_hdr;
6340
 
6341
  ohdr->sh_entsize = ihdr->sh_entsize;
6342
 
6343
  if (ihdr->sh_type == SHT_SYMTAB
6344
      || ihdr->sh_type == SHT_DYNSYM
6345
      || ihdr->sh_type == SHT_GNU_verneed
6346
      || ihdr->sh_type == SHT_GNU_verdef)
6347
    ohdr->sh_info = ihdr->sh_info;
6348
 
6349
  return _bfd_elf_init_private_section_data (ibfd, isec, obfd, osec,
6350
                                             NULL);
6351
}
6352
 
6353
/* Look at all the SHT_GROUP sections in IBFD, making any adjustments
6354
   necessary if we are removing either the SHT_GROUP section or any of
6355
   the group member sections.  DISCARDED is the value that a section's
6356
   output_section has if the section will be discarded, NULL when this
6357
   function is called from objcopy, bfd_abs_section_ptr when called
6358
   from the linker.  */
6359
 
6360
bfd_boolean
6361
_bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
6362
{
6363
  asection *isec;
6364
 
6365
  for (isec = ibfd->sections; isec != NULL; isec = isec->next)
6366
    if (elf_section_type (isec) == SHT_GROUP)
6367
      {
6368
        asection *first = elf_next_in_group (isec);
6369
        asection *s = first;
6370
        bfd_size_type removed = 0;
6371
 
6372
        while (s != NULL)
6373
          {
6374
            /* If this member section is being output but the
6375
               SHT_GROUP section is not, then clear the group info
6376
               set up by _bfd_elf_copy_private_section_data.  */
6377
            if (s->output_section != discarded
6378
                && isec->output_section == discarded)
6379
              {
6380
                elf_section_flags (s->output_section) &= ~SHF_GROUP;
6381
                elf_group_name (s->output_section) = NULL;
6382
              }
6383
            /* Conversely, if the member section is not being output
6384
               but the SHT_GROUP section is, then adjust its size.  */
6385
            else if (s->output_section == discarded
6386
                     && isec->output_section != discarded)
6387
              removed += 4;
6388
            s = elf_next_in_group (s);
6389
            if (s == first)
6390
              break;
6391
          }
6392
        if (removed != 0)
6393
          {
6394
            if (discarded != NULL)
6395
              {
6396
                /* If we've been called for ld -r, then we need to
6397
                   adjust the input section size.  This function may
6398
                   be called multiple times, so save the original
6399
                   size.  */
6400
                if (isec->rawsize == 0)
6401
                  isec->rawsize = isec->size;
6402
                isec->size = isec->rawsize - removed;
6403
              }
6404
            else
6405
              {
6406
                /* Adjust the output section size when called from
6407
                   objcopy. */
6408
                isec->output_section->size -= removed;
6409
              }
6410
          }
6411
      }
6412
 
6413
  return TRUE;
6414
}
6415
 
6416
/* Copy private header information.  */
6417
 
6418
bfd_boolean
6419
_bfd_elf_copy_private_header_data (bfd *ibfd, bfd *obfd)
6420
{
6421
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6422
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6423
    return TRUE;
6424
 
6425
  /* Copy over private BFD data if it has not already been copied.
6426
     This must be done here, rather than in the copy_private_bfd_data
6427
     entry point, because the latter is called after the section
6428
     contents have been set, which means that the program headers have
6429
     already been worked out.  */
6430
  if (elf_tdata (obfd)->segment_map == NULL && elf_tdata (ibfd)->phdr != NULL)
6431
    {
6432
      if (! copy_private_bfd_data (ibfd, obfd))
6433
        return FALSE;
6434
    }
6435
 
6436
  return _bfd_elf_fixup_group_sections (ibfd, NULL);
6437
}
6438
 
6439
/* Copy private symbol information.  If this symbol is in a section
6440
   which we did not map into a BFD section, try to map the section
6441
   index correctly.  We use special macro definitions for the mapped
6442
   section indices; these definitions are interpreted by the
6443
   swap_out_syms function.  */
6444
 
6445
#define MAP_ONESYMTAB (SHN_HIOS + 1)
6446
#define MAP_DYNSYMTAB (SHN_HIOS + 2)
6447
#define MAP_STRTAB    (SHN_HIOS + 3)
6448
#define MAP_SHSTRTAB  (SHN_HIOS + 4)
6449
#define MAP_SYM_SHNDX (SHN_HIOS + 5)
6450
 
6451
bfd_boolean
6452
_bfd_elf_copy_private_symbol_data (bfd *ibfd,
6453
                                   asymbol *isymarg,
6454
                                   bfd *obfd,
6455
                                   asymbol *osymarg)
6456
{
6457
  elf_symbol_type *isym, *osym;
6458
 
6459
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
6460
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
6461
    return TRUE;
6462
 
6463
  isym = elf_symbol_from (ibfd, isymarg);
6464
  osym = elf_symbol_from (obfd, osymarg);
6465
 
6466
  if (isym != NULL
6467
      && isym->internal_elf_sym.st_shndx != 0
6468
      && osym != NULL
6469
      && bfd_is_abs_section (isym->symbol.section))
6470
    {
6471
      unsigned int shndx;
6472
 
6473
      shndx = isym->internal_elf_sym.st_shndx;
6474
      if (shndx == elf_onesymtab (ibfd))
6475
        shndx = MAP_ONESYMTAB;
6476
      else if (shndx == elf_dynsymtab (ibfd))
6477
        shndx = MAP_DYNSYMTAB;
6478
      else if (shndx == elf_tdata (ibfd)->strtab_section)
6479
        shndx = MAP_STRTAB;
6480
      else if (shndx == elf_tdata (ibfd)->shstrtab_section)
6481
        shndx = MAP_SHSTRTAB;
6482
      else if (shndx == elf_tdata (ibfd)->symtab_shndx_section)
6483
        shndx = MAP_SYM_SHNDX;
6484
      osym->internal_elf_sym.st_shndx = shndx;
6485
    }
6486
 
6487
  return TRUE;
6488
}
6489
 
6490
/* Swap out the symbols.  */
6491
 
6492
static bfd_boolean
6493
swap_out_syms (bfd *abfd,
6494
               struct bfd_strtab_hash **sttp,
6495
               int relocatable_p)
6496
{
6497
  const struct elf_backend_data *bed;
6498
  int symcount;
6499
  asymbol **syms;
6500
  struct bfd_strtab_hash *stt;
6501
  Elf_Internal_Shdr *symtab_hdr;
6502
  Elf_Internal_Shdr *symtab_shndx_hdr;
6503
  Elf_Internal_Shdr *symstrtab_hdr;
6504
  bfd_byte *outbound_syms;
6505
  bfd_byte *outbound_shndx;
6506
  int idx;
6507
  bfd_size_type amt;
6508
  bfd_boolean name_local_sections;
6509
 
6510
  if (!elf_map_symbols (abfd))
6511
    return FALSE;
6512
 
6513
  /* Dump out the symtabs.  */
6514
  stt = _bfd_elf_stringtab_init ();
6515
  if (stt == NULL)
6516
    return FALSE;
6517
 
6518
  bed = get_elf_backend_data (abfd);
6519
  symcount = bfd_get_symcount (abfd);
6520
  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6521
  symtab_hdr->sh_type = SHT_SYMTAB;
6522
  symtab_hdr->sh_entsize = bed->s->sizeof_sym;
6523
  symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
6524
  symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
6525
  symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align;
6526
 
6527
  symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
6528
  symstrtab_hdr->sh_type = SHT_STRTAB;
6529
 
6530
  outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount,
6531
                                           bed->s->sizeof_sym);
6532
  if (outbound_syms == NULL)
6533
    {
6534
      _bfd_stringtab_free (stt);
6535
      return FALSE;
6536
    }
6537
  symtab_hdr->contents = outbound_syms;
6538
 
6539
  outbound_shndx = NULL;
6540
  symtab_shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
6541
  if (symtab_shndx_hdr->sh_name != 0)
6542
    {
6543
      amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx);
6544
      outbound_shndx =  (bfd_byte *)
6545
          bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx));
6546
      if (outbound_shndx == NULL)
6547
        {
6548
          _bfd_stringtab_free (stt);
6549
          return FALSE;
6550
        }
6551
 
6552
      symtab_shndx_hdr->contents = outbound_shndx;
6553
      symtab_shndx_hdr->sh_type = SHT_SYMTAB_SHNDX;
6554
      symtab_shndx_hdr->sh_size = amt;
6555
      symtab_shndx_hdr->sh_addralign = sizeof (Elf_External_Sym_Shndx);
6556
      symtab_shndx_hdr->sh_entsize = sizeof (Elf_External_Sym_Shndx);
6557
    }
6558
 
6559
  /* Now generate the data (for "contents").  */
6560
  {
6561
    /* Fill in zeroth symbol and swap it out.  */
6562
    Elf_Internal_Sym sym;
6563
    sym.st_name = 0;
6564
    sym.st_value = 0;
6565
    sym.st_size = 0;
6566
    sym.st_info = 0;
6567
    sym.st_other = 0;
6568
    sym.st_shndx = SHN_UNDEF;
6569
    sym.st_target_internal = 0;
6570
    bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6571
    outbound_syms += bed->s->sizeof_sym;
6572
    if (outbound_shndx != NULL)
6573
      outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6574
  }
6575
 
6576
  name_local_sections
6577
    = (bed->elf_backend_name_local_section_symbols
6578
       && bed->elf_backend_name_local_section_symbols (abfd));
6579
 
6580
  syms = bfd_get_outsymbols (abfd);
6581
  for (idx = 0; idx < symcount; idx++)
6582
    {
6583
      Elf_Internal_Sym sym;
6584
      bfd_vma value = syms[idx]->value;
6585
      elf_symbol_type *type_ptr;
6586
      flagword flags = syms[idx]->flags;
6587
      int type;
6588
 
6589
      if (!name_local_sections
6590
          && (flags & (BSF_SECTION_SYM | BSF_GLOBAL)) == BSF_SECTION_SYM)
6591
        {
6592
          /* Local section symbols have no name.  */
6593
          sym.st_name = 0;
6594
        }
6595
      else
6596
        {
6597
          sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
6598
                                                            syms[idx]->name,
6599
                                                            TRUE, FALSE);
6600
          if (sym.st_name == (unsigned long) -1)
6601
            {
6602
              _bfd_stringtab_free (stt);
6603
              return FALSE;
6604
            }
6605
        }
6606
 
6607
      type_ptr = elf_symbol_from (abfd, syms[idx]);
6608
 
6609
      if ((flags & BSF_SECTION_SYM) == 0
6610
          && bfd_is_com_section (syms[idx]->section))
6611
        {
6612
          /* ELF common symbols put the alignment into the `value' field,
6613
             and the size into the `size' field.  This is backwards from
6614
             how BFD handles it, so reverse it here.  */
6615
          sym.st_size = value;
6616
          if (type_ptr == NULL
6617
              || type_ptr->internal_elf_sym.st_value == 0)
6618
            sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
6619
          else
6620
            sym.st_value = type_ptr->internal_elf_sym.st_value;
6621
          sym.st_shndx = _bfd_elf_section_from_bfd_section
6622
            (abfd, syms[idx]->section);
6623
        }
6624
      else
6625
        {
6626
          asection *sec = syms[idx]->section;
6627
          unsigned int shndx;
6628
 
6629
          if (sec->output_section)
6630
            {
6631
              value += sec->output_offset;
6632
              sec = sec->output_section;
6633
            }
6634
 
6635
          /* Don't add in the section vma for relocatable output.  */
6636
          if (! relocatable_p)
6637
            value += sec->vma;
6638
          sym.st_value = value;
6639
          sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
6640
 
6641
          if (bfd_is_abs_section (sec)
6642
              && type_ptr != NULL
6643
              && type_ptr->internal_elf_sym.st_shndx != 0)
6644
            {
6645
              /* This symbol is in a real ELF section which we did
6646
                 not create as a BFD section.  Undo the mapping done
6647
                 by copy_private_symbol_data.  */
6648
              shndx = type_ptr->internal_elf_sym.st_shndx;
6649
              switch (shndx)
6650
                {
6651
                case MAP_ONESYMTAB:
6652
                  shndx = elf_onesymtab (abfd);
6653
                  break;
6654
                case MAP_DYNSYMTAB:
6655
                  shndx = elf_dynsymtab (abfd);
6656
                  break;
6657
                case MAP_STRTAB:
6658
                  shndx = elf_tdata (abfd)->strtab_section;
6659
                  break;
6660
                case MAP_SHSTRTAB:
6661
                  shndx = elf_tdata (abfd)->shstrtab_section;
6662
                  break;
6663
                case MAP_SYM_SHNDX:
6664
                  shndx = elf_tdata (abfd)->symtab_shndx_section;
6665
                  break;
6666
                default:
6667
                  break;
6668
                }
6669
            }
6670
          else
6671
            {
6672
              shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
6673
 
6674
              if (shndx == SHN_BAD)
6675
                {
6676
                  asection *sec2;
6677
 
6678
                  /* Writing this would be a hell of a lot easier if
6679
                     we had some decent documentation on bfd, and
6680
                     knew what to expect of the library, and what to
6681
                     demand of applications.  For example, it
6682
                     appears that `objcopy' might not set the
6683
                     section of a symbol to be a section that is
6684
                     actually in the output file.  */
6685
                  sec2 = bfd_get_section_by_name (abfd, sec->name);
6686
                  if (sec2 == NULL)
6687
                    {
6688
                      _bfd_error_handler (_("\
6689
Unable to find equivalent output section for symbol '%s' from section '%s'"),
6690
                                          syms[idx]->name ? syms[idx]->name : "<Local sym>",
6691
                                          sec->name);
6692
                      bfd_set_error (bfd_error_invalid_operation);
6693
                      _bfd_stringtab_free (stt);
6694
                      return FALSE;
6695
                    }
6696
 
6697
                  shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
6698
                  BFD_ASSERT (shndx != SHN_BAD);
6699
                }
6700
            }
6701
 
6702
          sym.st_shndx = shndx;
6703
        }
6704
 
6705
      if ((flags & BSF_THREAD_LOCAL) != 0)
6706
        type = STT_TLS;
6707
      else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0)
6708
        type = STT_GNU_IFUNC;
6709
      else if ((flags & BSF_FUNCTION) != 0)
6710
        type = STT_FUNC;
6711
      else if ((flags & BSF_OBJECT) != 0)
6712
        type = STT_OBJECT;
6713
      else if ((flags & BSF_RELC) != 0)
6714
        type = STT_RELC;
6715
      else if ((flags & BSF_SRELC) != 0)
6716
        type = STT_SRELC;
6717
      else
6718
        type = STT_NOTYPE;
6719
 
6720
      if (syms[idx]->section->flags & SEC_THREAD_LOCAL)
6721
        type = STT_TLS;
6722
 
6723
      /* Processor-specific types.  */
6724
      if (type_ptr != NULL
6725
          && bed->elf_backend_get_symbol_type)
6726
        type = ((*bed->elf_backend_get_symbol_type)
6727
                (&type_ptr->internal_elf_sym, type));
6728
 
6729
      if (flags & BSF_SECTION_SYM)
6730
        {
6731
          if (flags & BSF_GLOBAL)
6732
            sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
6733
          else
6734
            sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
6735
        }
6736
      else if (bfd_is_com_section (syms[idx]->section))
6737
        {
6738
#ifdef USE_STT_COMMON
6739
          if (type == STT_OBJECT)
6740
            sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON);
6741
          else
6742
#endif
6743
            sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
6744
        }
6745
      else if (bfd_is_und_section (syms[idx]->section))
6746
        sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
6747
                                    ? STB_WEAK
6748
                                    : STB_GLOBAL),
6749
                                   type);
6750
      else if (flags & BSF_FILE)
6751
        sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
6752
      else
6753
        {
6754
          int bind = STB_LOCAL;
6755
 
6756
          if (flags & BSF_LOCAL)
6757
            bind = STB_LOCAL;
6758
          else if (flags & BSF_GNU_UNIQUE)
6759
            bind = STB_GNU_UNIQUE;
6760
          else if (flags & BSF_WEAK)
6761
            bind = STB_WEAK;
6762
          else if (flags & BSF_GLOBAL)
6763
            bind = STB_GLOBAL;
6764
 
6765
          sym.st_info = ELF_ST_INFO (bind, type);
6766
        }
6767
 
6768
      if (type_ptr != NULL)
6769
        {
6770
          sym.st_other = type_ptr->internal_elf_sym.st_other;
6771
          sym.st_target_internal
6772
            = type_ptr->internal_elf_sym.st_target_internal;
6773
        }
6774
      else
6775
        {
6776
          sym.st_other = 0;
6777
          sym.st_target_internal = 0;
6778
        }
6779
 
6780
      bed->s->swap_symbol_out (abfd, &sym, outbound_syms, outbound_shndx);
6781
      outbound_syms += bed->s->sizeof_sym;
6782
      if (outbound_shndx != NULL)
6783
        outbound_shndx += sizeof (Elf_External_Sym_Shndx);
6784
    }
6785
 
6786
  *sttp = stt;
6787
  symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
6788
  symstrtab_hdr->sh_type = SHT_STRTAB;
6789
 
6790
  symstrtab_hdr->sh_flags = 0;
6791
  symstrtab_hdr->sh_addr = 0;
6792
  symstrtab_hdr->sh_entsize = 0;
6793
  symstrtab_hdr->sh_link = 0;
6794
  symstrtab_hdr->sh_info = 0;
6795
  symstrtab_hdr->sh_addralign = 1;
6796
 
6797
  return TRUE;
6798
}
6799
 
6800
/* Return the number of bytes required to hold the symtab vector.
6801
 
6802
   Note that we base it on the count plus 1, since we will null terminate
6803
   the vector allocated based on this size.  However, the ELF symbol table
6804
   always has a dummy entry as symbol #0, so it ends up even.  */
6805
 
6806
long
6807
_bfd_elf_get_symtab_upper_bound (bfd *abfd)
6808
{
6809
  long symcount;
6810
  long symtab_size;
6811
  Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
6812
 
6813
  symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6814
  symtab_size = (symcount + 1) * (sizeof (asymbol *));
6815
  if (symcount > 0)
6816
    symtab_size -= sizeof (asymbol *);
6817
 
6818
  return symtab_size;
6819
}
6820
 
6821
long
6822
_bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
6823
{
6824
  long symcount;
6825
  long symtab_size;
6826
  Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
6827
 
6828
  if (elf_dynsymtab (abfd) == 0)
6829
    {
6830
      bfd_set_error (bfd_error_invalid_operation);
6831
      return -1;
6832
    }
6833
 
6834
  symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
6835
  symtab_size = (symcount + 1) * (sizeof (asymbol *));
6836
  if (symcount > 0)
6837
    symtab_size -= sizeof (asymbol *);
6838
 
6839
  return symtab_size;
6840
}
6841
 
6842
long
6843
_bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
6844
                                sec_ptr asect)
6845
{
6846
  return (asect->reloc_count + 1) * sizeof (arelent *);
6847
}
6848
 
6849
/* Canonicalize the relocs.  */
6850
 
6851
long
6852
_bfd_elf_canonicalize_reloc (bfd *abfd,
6853
                             sec_ptr section,
6854
                             arelent **relptr,
6855
                             asymbol **symbols)
6856
{
6857
  arelent *tblptr;
6858
  unsigned int i;
6859
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6860
 
6861
  if (! bed->s->slurp_reloc_table (abfd, section, symbols, FALSE))
6862
    return -1;
6863
 
6864
  tblptr = section->relocation;
6865
  for (i = 0; i < section->reloc_count; i++)
6866
    *relptr++ = tblptr++;
6867
 
6868
  *relptr = NULL;
6869
 
6870
  return section->reloc_count;
6871
}
6872
 
6873
long
6874
_bfd_elf_canonicalize_symtab (bfd *abfd, asymbol **allocation)
6875
{
6876
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6877
  long symcount = bed->s->slurp_symbol_table (abfd, allocation, FALSE);
6878
 
6879
  if (symcount >= 0)
6880
    bfd_get_symcount (abfd) = symcount;
6881
  return symcount;
6882
}
6883
 
6884
long
6885
_bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
6886
                                      asymbol **allocation)
6887
{
6888
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6889
  long symcount = bed->s->slurp_symbol_table (abfd, allocation, TRUE);
6890
 
6891
  if (symcount >= 0)
6892
    bfd_get_dynamic_symcount (abfd) = symcount;
6893
  return symcount;
6894
}
6895
 
6896
/* Return the size required for the dynamic reloc entries.  Any loadable
6897
   section that was actually installed in the BFD, and has type SHT_REL
6898
   or SHT_RELA, and uses the dynamic symbol table, is considered to be a
6899
   dynamic reloc section.  */
6900
 
6901
long
6902
_bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
6903
{
6904
  long ret;
6905
  asection *s;
6906
 
6907
  if (elf_dynsymtab (abfd) == 0)
6908
    {
6909
      bfd_set_error (bfd_error_invalid_operation);
6910
      return -1;
6911
    }
6912
 
6913
  ret = sizeof (arelent *);
6914
  for (s = abfd->sections; s != NULL; s = s->next)
6915
    if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6916
        && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6917
            || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6918
      ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
6919
              * sizeof (arelent *));
6920
 
6921
  return ret;
6922
}
6923
 
6924
/* Canonicalize the dynamic relocation entries.  Note that we return the
6925
   dynamic relocations as a single block, although they are actually
6926
   associated with particular sections; the interface, which was
6927
   designed for SunOS style shared libraries, expects that there is only
6928
   one set of dynamic relocs.  Any loadable section that was actually
6929
   installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
6930
   dynamic symbol table, is considered to be a dynamic reloc section.  */
6931
 
6932
long
6933
_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
6934
                                     arelent **storage,
6935
                                     asymbol **syms)
6936
{
6937
  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
6938
  asection *s;
6939
  long ret;
6940
 
6941
  if (elf_dynsymtab (abfd) == 0)
6942
    {
6943
      bfd_set_error (bfd_error_invalid_operation);
6944
      return -1;
6945
    }
6946
 
6947
  slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
6948
  ret = 0;
6949
  for (s = abfd->sections; s != NULL; s = s->next)
6950
    {
6951
      if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
6952
          && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
6953
              || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
6954
        {
6955
          arelent *p;
6956
          long count, i;
6957
 
6958
          if (! (*slurp_relocs) (abfd, s, syms, TRUE))
6959
            return -1;
6960
          count = s->size / elf_section_data (s)->this_hdr.sh_entsize;
6961
          p = s->relocation;
6962
          for (i = 0; i < count; i++)
6963
            *storage++ = p++;
6964
          ret += count;
6965
        }
6966
    }
6967
 
6968
  *storage = NULL;
6969
 
6970
  return ret;
6971
}
6972
 
6973
/* Read in the version information.  */
6974
 
6975
bfd_boolean
6976
_bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver)
6977
{
6978
  bfd_byte *contents = NULL;
6979
  unsigned int freeidx = 0;
6980
 
6981
  if (elf_dynverref (abfd) != 0)
6982
    {
6983
      Elf_Internal_Shdr *hdr;
6984
      Elf_External_Verneed *everneed;
6985
      Elf_Internal_Verneed *iverneed;
6986
      unsigned int i;
6987
      bfd_byte *contents_end;
6988
 
6989
      hdr = &elf_tdata (abfd)->dynverref_hdr;
6990
 
6991
      elf_tdata (abfd)->verref = (Elf_Internal_Verneed *)
6992
          bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed));
6993
      if (elf_tdata (abfd)->verref == NULL)
6994
        goto error_return;
6995
 
6996
      elf_tdata (abfd)->cverrefs = hdr->sh_info;
6997
 
6998
      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
6999
      if (contents == NULL)
7000
        {
7001
error_return_verref:
7002
          elf_tdata (abfd)->verref = NULL;
7003
          elf_tdata (abfd)->cverrefs = 0;
7004
          goto error_return;
7005
        }
7006
      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
7007
          || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
7008
        goto error_return_verref;
7009
 
7010
      if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verneed))
7011
        goto error_return_verref;
7012
 
7013
      BFD_ASSERT (sizeof (Elf_External_Verneed)
7014
                  == sizeof (Elf_External_Vernaux));
7015
      contents_end = contents + hdr->sh_size - sizeof (Elf_External_Verneed);
7016
      everneed = (Elf_External_Verneed *) contents;
7017
      iverneed = elf_tdata (abfd)->verref;
7018
      for (i = 0; i < hdr->sh_info; i++, iverneed++)
7019
        {
7020
          Elf_External_Vernaux *evernaux;
7021
          Elf_Internal_Vernaux *ivernaux;
7022
          unsigned int j;
7023
 
7024
          _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
7025
 
7026
          iverneed->vn_bfd = abfd;
7027
 
7028
          iverneed->vn_filename =
7029
            bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7030
                                             iverneed->vn_file);
7031
          if (iverneed->vn_filename == NULL)
7032
            goto error_return_verref;
7033
 
7034
          if (iverneed->vn_cnt == 0)
7035
            iverneed->vn_auxptr = NULL;
7036
          else
7037
            {
7038
              iverneed->vn_auxptr = (struct elf_internal_vernaux *)
7039
                  bfd_alloc2 (abfd, iverneed->vn_cnt,
7040
                              sizeof (Elf_Internal_Vernaux));
7041
              if (iverneed->vn_auxptr == NULL)
7042
                goto error_return_verref;
7043
            }
7044
 
7045
          if (iverneed->vn_aux
7046
              > (size_t) (contents_end - (bfd_byte *) everneed))
7047
            goto error_return_verref;
7048
 
7049
          evernaux = ((Elf_External_Vernaux *)
7050
                      ((bfd_byte *) everneed + iverneed->vn_aux));
7051
          ivernaux = iverneed->vn_auxptr;
7052
          for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
7053
            {
7054
              _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
7055
 
7056
              ivernaux->vna_nodename =
7057
                bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7058
                                                 ivernaux->vna_name);
7059
              if (ivernaux->vna_nodename == NULL)
7060
                goto error_return_verref;
7061
 
7062
              if (j + 1 < iverneed->vn_cnt)
7063
                ivernaux->vna_nextptr = ivernaux + 1;
7064
              else
7065
                ivernaux->vna_nextptr = NULL;
7066
 
7067
              if (ivernaux->vna_next
7068
                  > (size_t) (contents_end - (bfd_byte *) evernaux))
7069
                goto error_return_verref;
7070
 
7071
              evernaux = ((Elf_External_Vernaux *)
7072
                          ((bfd_byte *) evernaux + ivernaux->vna_next));
7073
 
7074
              if (ivernaux->vna_other > freeidx)
7075
                freeidx = ivernaux->vna_other;
7076
            }
7077
 
7078
          if (i + 1 < hdr->sh_info)
7079
            iverneed->vn_nextref = iverneed + 1;
7080
          else
7081
            iverneed->vn_nextref = NULL;
7082
 
7083
          if (iverneed->vn_next
7084
              > (size_t) (contents_end - (bfd_byte *) everneed))
7085
            goto error_return_verref;
7086
 
7087
          everneed = ((Elf_External_Verneed *)
7088
                      ((bfd_byte *) everneed + iverneed->vn_next));
7089
        }
7090
 
7091
      free (contents);
7092
      contents = NULL;
7093
    }
7094
 
7095
  if (elf_dynverdef (abfd) != 0)
7096
    {
7097
      Elf_Internal_Shdr *hdr;
7098
      Elf_External_Verdef *everdef;
7099
      Elf_Internal_Verdef *iverdef;
7100
      Elf_Internal_Verdef *iverdefarr;
7101
      Elf_Internal_Verdef iverdefmem;
7102
      unsigned int i;
7103
      unsigned int maxidx;
7104
      bfd_byte *contents_end_def, *contents_end_aux;
7105
 
7106
      hdr = &elf_tdata (abfd)->dynverdef_hdr;
7107
 
7108
      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
7109
      if (contents == NULL)
7110
        goto error_return;
7111
      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
7112
          || bfd_bread (contents, hdr->sh_size, abfd) != hdr->sh_size)
7113
        goto error_return;
7114
 
7115
      if (hdr->sh_info && hdr->sh_size < sizeof (Elf_External_Verdef))
7116
        goto error_return;
7117
 
7118
      BFD_ASSERT (sizeof (Elf_External_Verdef)
7119
                  >= sizeof (Elf_External_Verdaux));
7120
      contents_end_def = contents + hdr->sh_size
7121
                         - sizeof (Elf_External_Verdef);
7122
      contents_end_aux = contents + hdr->sh_size
7123
                         - sizeof (Elf_External_Verdaux);
7124
 
7125
      /* We know the number of entries in the section but not the maximum
7126
         index.  Therefore we have to run through all entries and find
7127
         the maximum.  */
7128
      everdef = (Elf_External_Verdef *) contents;
7129
      maxidx = 0;
7130
      for (i = 0; i < hdr->sh_info; ++i)
7131
        {
7132
          _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7133
 
7134
          if ((iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION)) > maxidx)
7135
            maxidx = iverdefmem.vd_ndx & ((unsigned) VERSYM_VERSION);
7136
 
7137
          if (iverdefmem.vd_next
7138
              > (size_t) (contents_end_def - (bfd_byte *) everdef))
7139
            goto error_return;
7140
 
7141
          everdef = ((Elf_External_Verdef *)
7142
                     ((bfd_byte *) everdef + iverdefmem.vd_next));
7143
        }
7144
 
7145
      if (default_imported_symver)
7146
        {
7147
          if (freeidx > maxidx)
7148
            maxidx = ++freeidx;
7149
          else
7150
            freeidx = ++maxidx;
7151
        }
7152
      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7153
          bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef));
7154
      if (elf_tdata (abfd)->verdef == NULL)
7155
        goto error_return;
7156
 
7157
      elf_tdata (abfd)->cverdefs = maxidx;
7158
 
7159
      everdef = (Elf_External_Verdef *) contents;
7160
      iverdefarr = elf_tdata (abfd)->verdef;
7161
      for (i = 0; i < hdr->sh_info; i++)
7162
        {
7163
          Elf_External_Verdaux *everdaux;
7164
          Elf_Internal_Verdaux *iverdaux;
7165
          unsigned int j;
7166
 
7167
          _bfd_elf_swap_verdef_in (abfd, everdef, &iverdefmem);
7168
 
7169
          if ((iverdefmem.vd_ndx & VERSYM_VERSION) == 0)
7170
            {
7171
error_return_verdef:
7172
              elf_tdata (abfd)->verdef = NULL;
7173
              elf_tdata (abfd)->cverdefs = 0;
7174
              goto error_return;
7175
            }
7176
 
7177
          iverdef = &iverdefarr[(iverdefmem.vd_ndx & VERSYM_VERSION) - 1];
7178
          memcpy (iverdef, &iverdefmem, sizeof (Elf_Internal_Verdef));
7179
 
7180
          iverdef->vd_bfd = abfd;
7181
 
7182
          if (iverdef->vd_cnt == 0)
7183
            iverdef->vd_auxptr = NULL;
7184
          else
7185
            {
7186
              iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7187
                  bfd_alloc2 (abfd, iverdef->vd_cnt,
7188
                              sizeof (Elf_Internal_Verdaux));
7189
              if (iverdef->vd_auxptr == NULL)
7190
                goto error_return_verdef;
7191
            }
7192
 
7193
          if (iverdef->vd_aux
7194
              > (size_t) (contents_end_aux - (bfd_byte *) everdef))
7195
            goto error_return_verdef;
7196
 
7197
          everdaux = ((Elf_External_Verdaux *)
7198
                      ((bfd_byte *) everdef + iverdef->vd_aux));
7199
          iverdaux = iverdef->vd_auxptr;
7200
          for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
7201
            {
7202
              _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
7203
 
7204
              iverdaux->vda_nodename =
7205
                bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
7206
                                                 iverdaux->vda_name);
7207
              if (iverdaux->vda_nodename == NULL)
7208
                goto error_return_verdef;
7209
 
7210
              if (j + 1 < iverdef->vd_cnt)
7211
                iverdaux->vda_nextptr = iverdaux + 1;
7212
              else
7213
                iverdaux->vda_nextptr = NULL;
7214
 
7215
              if (iverdaux->vda_next
7216
                  > (size_t) (contents_end_aux - (bfd_byte *) everdaux))
7217
                goto error_return_verdef;
7218
 
7219
              everdaux = ((Elf_External_Verdaux *)
7220
                          ((bfd_byte *) everdaux + iverdaux->vda_next));
7221
            }
7222
 
7223
          if (iverdef->vd_cnt)
7224
            iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
7225
 
7226
          if ((size_t) (iverdef - iverdefarr) + 1 < maxidx)
7227
            iverdef->vd_nextdef = iverdef + 1;
7228
          else
7229
            iverdef->vd_nextdef = NULL;
7230
 
7231
          everdef = ((Elf_External_Verdef *)
7232
                     ((bfd_byte *) everdef + iverdef->vd_next));
7233
        }
7234
 
7235
      free (contents);
7236
      contents = NULL;
7237
    }
7238
  else if (default_imported_symver)
7239
    {
7240
      if (freeidx < 3)
7241
        freeidx = 3;
7242
      else
7243
        freeidx++;
7244
 
7245
      elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *)
7246
          bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef));
7247
      if (elf_tdata (abfd)->verdef == NULL)
7248
        goto error_return;
7249
 
7250
      elf_tdata (abfd)->cverdefs = freeidx;
7251
    }
7252
 
7253
  /* Create a default version based on the soname.  */
7254
  if (default_imported_symver)
7255
    {
7256
      Elf_Internal_Verdef *iverdef;
7257
      Elf_Internal_Verdaux *iverdaux;
7258
 
7259
      iverdef = &elf_tdata (abfd)->verdef[freeidx - 1];;
7260
 
7261
      iverdef->vd_version = VER_DEF_CURRENT;
7262
      iverdef->vd_flags = 0;
7263
      iverdef->vd_ndx = freeidx;
7264
      iverdef->vd_cnt = 1;
7265
 
7266
      iverdef->vd_bfd = abfd;
7267
 
7268
      iverdef->vd_nodename = bfd_elf_get_dt_soname (abfd);
7269
      if (iverdef->vd_nodename == NULL)
7270
        goto error_return_verdef;
7271
      iverdef->vd_nextdef = NULL;
7272
      iverdef->vd_auxptr = (struct elf_internal_verdaux *)
7273
          bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux));
7274
      if (iverdef->vd_auxptr == NULL)
7275
        goto error_return_verdef;
7276
 
7277
      iverdaux = iverdef->vd_auxptr;
7278
      iverdaux->vda_nodename = iverdef->vd_nodename;
7279
      iverdaux->vda_nextptr = NULL;
7280
    }
7281
 
7282
  return TRUE;
7283
 
7284
 error_return:
7285
  if (contents != NULL)
7286
    free (contents);
7287
  return FALSE;
7288
}
7289
 
7290
asymbol *
7291
_bfd_elf_make_empty_symbol (bfd *abfd)
7292
{
7293
  elf_symbol_type *newsym;
7294
  bfd_size_type amt = sizeof (elf_symbol_type);
7295
 
7296
  newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt);
7297
  if (!newsym)
7298
    return NULL;
7299
  else
7300
    {
7301
      newsym->symbol.the_bfd = abfd;
7302
      return &newsym->symbol;
7303
    }
7304
}
7305
 
7306
void
7307
_bfd_elf_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
7308
                          asymbol *symbol,
7309
                          symbol_info *ret)
7310
{
7311
  bfd_symbol_info (symbol, ret);
7312
}
7313
 
7314
/* Return whether a symbol name implies a local symbol.  Most targets
7315
   use this function for the is_local_label_name entry point, but some
7316
   override it.  */
7317
 
7318
bfd_boolean
7319
_bfd_elf_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
7320
                              const char *name)
7321
{
7322
  /* Normal local symbols start with ``.L''.  */
7323
  if (name[0] == '.' && name[1] == 'L')
7324
    return TRUE;
7325
 
7326
  /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
7327
     DWARF debugging symbols starting with ``..''.  */
7328
  if (name[0] == '.' && name[1] == '.')
7329
    return TRUE;
7330
 
7331
  /* gcc will sometimes generate symbols beginning with ``_.L_'' when
7332
     emitting DWARF debugging output.  I suspect this is actually a
7333
     small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
7334
     ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
7335
     underscore to be emitted on some ELF targets).  For ease of use,
7336
     we treat such symbols as local.  */
7337
  if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
7338
    return TRUE;
7339
 
7340
  return FALSE;
7341
}
7342
 
7343
alent *
7344
_bfd_elf_get_lineno (bfd *abfd ATTRIBUTE_UNUSED,
7345
                     asymbol *symbol ATTRIBUTE_UNUSED)
7346
{
7347
  abort ();
7348
  return NULL;
7349
}
7350
 
7351
bfd_boolean
7352
_bfd_elf_set_arch_mach (bfd *abfd,
7353
                        enum bfd_architecture arch,
7354
                        unsigned long machine)
7355
{
7356
  /* If this isn't the right architecture for this backend, and this
7357
     isn't the generic backend, fail.  */
7358
  if (arch != get_elf_backend_data (abfd)->arch
7359
      && arch != bfd_arch_unknown
7360
      && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
7361
    return FALSE;
7362
 
7363
  return bfd_default_set_arch_mach (abfd, arch, machine);
7364
}
7365
 
7366
/* Find the function to a particular section and offset,
7367
   for error reporting.  */
7368
 
7369
static bfd_boolean
7370
elf_find_function (bfd *abfd,
7371
                   asection *section,
7372
                   asymbol **symbols,
7373
                   bfd_vma offset,
7374
                   const char **filename_ptr,
7375
                   const char **functionname_ptr)
7376
{
7377
  const char *filename;
7378
  asymbol *func, *file;
7379
  bfd_vma low_func;
7380
  asymbol **p;
7381
  /* ??? Given multiple file symbols, it is impossible to reliably
7382
     choose the right file name for global symbols.  File symbols are
7383
     local symbols, and thus all file symbols must sort before any
7384
     global symbols.  The ELF spec may be interpreted to say that a
7385
     file symbol must sort before other local symbols, but currently
7386
     ld -r doesn't do this.  So, for ld -r output, it is possible to
7387
     make a better choice of file name for local symbols by ignoring
7388
     file symbols appearing after a given local symbol.  */
7389
  enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
7390
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7391
 
7392
  filename = NULL;
7393
  func = NULL;
7394
  file = NULL;
7395
  low_func = 0;
7396
  state = nothing_seen;
7397
 
7398
  for (p = symbols; *p != NULL; p++)
7399
    {
7400
      elf_symbol_type *q;
7401
      unsigned int type;
7402
 
7403
      q = (elf_symbol_type *) *p;
7404
 
7405
      type = ELF_ST_TYPE (q->internal_elf_sym.st_info);
7406
      switch (type)
7407
        {
7408
        case STT_FILE:
7409
          file = &q->symbol;
7410
          if (state == symbol_seen)
7411
            state = file_after_symbol_seen;
7412
          continue;
7413
        default:
7414
          if (!bed->is_function_type (type))
7415
            break;
7416
        case STT_NOTYPE:
7417
          if (bfd_get_section (&q->symbol) == section
7418
              && q->symbol.value >= low_func
7419
              && q->symbol.value <= offset)
7420
            {
7421
              func = (asymbol *) q;
7422
              low_func = q->symbol.value;
7423
              filename = NULL;
7424
              if (file != NULL
7425
                  && (ELF_ST_BIND (q->internal_elf_sym.st_info) == STB_LOCAL
7426
                      || state != file_after_symbol_seen))
7427
                filename = bfd_asymbol_name (file);
7428
            }
7429
          break;
7430
        }
7431
      if (state == nothing_seen)
7432
        state = symbol_seen;
7433
    }
7434
 
7435
  if (func == NULL)
7436
    return FALSE;
7437
 
7438
  if (filename_ptr)
7439
    *filename_ptr = filename;
7440
  if (functionname_ptr)
7441
    *functionname_ptr = bfd_asymbol_name (func);
7442
 
7443
  return TRUE;
7444
}
7445
 
7446
/* Find the nearest line to a particular section and offset,
7447
   for error reporting.  */
7448
 
7449
bfd_boolean
7450
_bfd_elf_find_nearest_line (bfd *abfd,
7451
                            asection *section,
7452
                            asymbol **symbols,
7453
                            bfd_vma offset,
7454
                            const char **filename_ptr,
7455
                            const char **functionname_ptr,
7456
                            unsigned int *line_ptr)
7457
{
7458
  bfd_boolean found;
7459
 
7460
  if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
7461
                                     filename_ptr, functionname_ptr,
7462
                                     line_ptr))
7463
    {
7464
      if (!*functionname_ptr)
7465
        elf_find_function (abfd, section, symbols, offset,
7466
                           *filename_ptr ? NULL : filename_ptr,
7467
                           functionname_ptr);
7468
 
7469
      return TRUE;
7470
    }
7471
 
7472
  if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
7473
                                     filename_ptr, functionname_ptr,
7474
                                     line_ptr, 0,
7475
                                     &elf_tdata (abfd)->dwarf2_find_line_info))
7476
    {
7477
      if (!*functionname_ptr)
7478
        elf_find_function (abfd, section, symbols, offset,
7479
                           *filename_ptr ? NULL : filename_ptr,
7480
                           functionname_ptr);
7481
 
7482
      return TRUE;
7483
    }
7484
 
7485
  if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
7486
                                             &found, filename_ptr,
7487
                                             functionname_ptr, line_ptr,
7488
                                             &elf_tdata (abfd)->line_info))
7489
    return FALSE;
7490
  if (found && (*functionname_ptr || *line_ptr))
7491
    return TRUE;
7492
 
7493
  if (symbols == NULL)
7494
    return FALSE;
7495
 
7496
  if (! elf_find_function (abfd, section, symbols, offset,
7497
                           filename_ptr, functionname_ptr))
7498
    return FALSE;
7499
 
7500
  *line_ptr = 0;
7501
  return TRUE;
7502
}
7503
 
7504
/* Find the line for a symbol.  */
7505
 
7506
bfd_boolean
7507
_bfd_elf_find_line (bfd *abfd, asymbol **symbols, asymbol *symbol,
7508
                    const char **filename_ptr, unsigned int *line_ptr)
7509
{
7510
  return _bfd_dwarf2_find_line (abfd, symbols, symbol,
7511
                                filename_ptr, line_ptr, 0,
7512
                                &elf_tdata (abfd)->dwarf2_find_line_info);
7513
}
7514
 
7515
/* After a call to bfd_find_nearest_line, successive calls to
7516
   bfd_find_inliner_info can be used to get source information about
7517
   each level of function inlining that terminated at the address
7518
   passed to bfd_find_nearest_line.  Currently this is only supported
7519
   for DWARF2 with appropriate DWARF3 extensions. */
7520
 
7521
bfd_boolean
7522
_bfd_elf_find_inliner_info (bfd *abfd,
7523
                            const char **filename_ptr,
7524
                            const char **functionname_ptr,
7525
                            unsigned int *line_ptr)
7526
{
7527
  bfd_boolean found;
7528
  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
7529
                                         functionname_ptr, line_ptr,
7530
                                         & elf_tdata (abfd)->dwarf2_find_line_info);
7531
  return found;
7532
}
7533
 
7534
int
7535
_bfd_elf_sizeof_headers (bfd *abfd, struct bfd_link_info *info)
7536
{
7537
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
7538
  int ret = bed->s->sizeof_ehdr;
7539
 
7540
  if (!info->relocatable)
7541
    {
7542
      bfd_size_type phdr_size = elf_tdata (abfd)->program_header_size;
7543
 
7544
      if (phdr_size == (bfd_size_type) -1)
7545
        {
7546
          struct elf_segment_map *m;
7547
 
7548
          phdr_size = 0;
7549
          for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
7550
            phdr_size += bed->s->sizeof_phdr;
7551
 
7552
          if (phdr_size == 0)
7553
            phdr_size = get_program_header_size (abfd, info);
7554
        }
7555
 
7556
      elf_tdata (abfd)->program_header_size = phdr_size;
7557
      ret += phdr_size;
7558
    }
7559
 
7560
  return ret;
7561
}
7562
 
7563
bfd_boolean
7564
_bfd_elf_set_section_contents (bfd *abfd,
7565
                               sec_ptr section,
7566
                               const void *location,
7567
                               file_ptr offset,
7568
                               bfd_size_type count)
7569
{
7570
  Elf_Internal_Shdr *hdr;
7571
  bfd_signed_vma pos;
7572
 
7573
  if (! abfd->output_has_begun
7574
      && ! _bfd_elf_compute_section_file_positions (abfd, NULL))
7575
    return FALSE;
7576
 
7577
  hdr = &elf_section_data (section)->this_hdr;
7578
  pos = hdr->sh_offset + offset;
7579
  if (bfd_seek (abfd, pos, SEEK_SET) != 0
7580
      || bfd_bwrite (location, count, abfd) != count)
7581
    return FALSE;
7582
 
7583
  return TRUE;
7584
}
7585
 
7586
void
7587
_bfd_elf_no_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
7588
                           arelent *cache_ptr ATTRIBUTE_UNUSED,
7589
                           Elf_Internal_Rela *dst ATTRIBUTE_UNUSED)
7590
{
7591
  abort ();
7592
}
7593
 
7594
/* Try to convert a non-ELF reloc into an ELF one.  */
7595
 
7596
bfd_boolean
7597
_bfd_elf_validate_reloc (bfd *abfd, arelent *areloc)
7598
{
7599
  /* Check whether we really have an ELF howto.  */
7600
 
7601
  if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
7602
    {
7603
      bfd_reloc_code_real_type code;
7604
      reloc_howto_type *howto;
7605
 
7606
      /* Alien reloc: Try to determine its type to replace it with an
7607
         equivalent ELF reloc.  */
7608
 
7609
      if (areloc->howto->pc_relative)
7610
        {
7611
          switch (areloc->howto->bitsize)
7612
            {
7613
            case 8:
7614
              code = BFD_RELOC_8_PCREL;
7615
              break;
7616
            case 12:
7617
              code = BFD_RELOC_12_PCREL;
7618
              break;
7619
            case 16:
7620
              code = BFD_RELOC_16_PCREL;
7621
              break;
7622
            case 24:
7623
              code = BFD_RELOC_24_PCREL;
7624
              break;
7625
            case 32:
7626
              code = BFD_RELOC_32_PCREL;
7627
              break;
7628
            case 64:
7629
              code = BFD_RELOC_64_PCREL;
7630
              break;
7631
            default:
7632
              goto fail;
7633
            }
7634
 
7635
          howto = bfd_reloc_type_lookup (abfd, code);
7636
 
7637
          if (areloc->howto->pcrel_offset != howto->pcrel_offset)
7638
            {
7639
              if (howto->pcrel_offset)
7640
                areloc->addend += areloc->address;
7641
              else
7642
                areloc->addend -= areloc->address; /* addend is unsigned!! */
7643
            }
7644
        }
7645
      else
7646
        {
7647
          switch (areloc->howto->bitsize)
7648
            {
7649
            case 8:
7650
              code = BFD_RELOC_8;
7651
              break;
7652
            case 14:
7653
              code = BFD_RELOC_14;
7654
              break;
7655
            case 16:
7656
              code = BFD_RELOC_16;
7657
              break;
7658
            case 26:
7659
              code = BFD_RELOC_26;
7660
              break;
7661
            case 32:
7662
              code = BFD_RELOC_32;
7663
              break;
7664
            case 64:
7665
              code = BFD_RELOC_64;
7666
              break;
7667
            default:
7668
              goto fail;
7669
            }
7670
 
7671
          howto = bfd_reloc_type_lookup (abfd, code);
7672
        }
7673
 
7674
      if (howto)
7675
        areloc->howto = howto;
7676
      else
7677
        goto fail;
7678
    }
7679
 
7680
  return TRUE;
7681
 
7682
 fail:
7683
  (*_bfd_error_handler)
7684
    (_("%B: unsupported relocation type %s"),
7685
     abfd, areloc->howto->name);
7686
  bfd_set_error (bfd_error_bad_value);
7687
  return FALSE;
7688
}
7689
 
7690
bfd_boolean
7691
_bfd_elf_close_and_cleanup (bfd *abfd)
7692
{
7693
  if (bfd_get_format (abfd) == bfd_object)
7694
    {
7695
      if (elf_tdata (abfd) != NULL && elf_shstrtab (abfd) != NULL)
7696
        _bfd_elf_strtab_free (elf_shstrtab (abfd));
7697
      _bfd_dwarf2_cleanup_debug_info (abfd);
7698
    }
7699
 
7700
  return _bfd_generic_close_and_cleanup (abfd);
7701
}
7702
 
7703
/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
7704
   in the relocation's offset.  Thus we cannot allow any sort of sanity
7705
   range-checking to interfere.  There is nothing else to do in processing
7706
   this reloc.  */
7707
 
7708
bfd_reloc_status_type
7709
_bfd_elf_rel_vtable_reloc_fn
7710
  (bfd *abfd ATTRIBUTE_UNUSED, arelent *re ATTRIBUTE_UNUSED,
7711
   struct bfd_symbol *symbol ATTRIBUTE_UNUSED,
7712
   void *data ATTRIBUTE_UNUSED, asection *is ATTRIBUTE_UNUSED,
7713
   bfd *obfd ATTRIBUTE_UNUSED, char **errmsg ATTRIBUTE_UNUSED)
7714
{
7715
  return bfd_reloc_ok;
7716
}
7717
 
7718
/* Elf core file support.  Much of this only works on native
7719
   toolchains, since we rely on knowing the
7720
   machine-dependent procfs structure in order to pick
7721
   out details about the corefile.  */
7722
 
7723
#ifdef HAVE_SYS_PROCFS_H
7724
/* Needed for new procfs interface on sparc-solaris.  */
7725
# define _STRUCTURED_PROC 1
7726
# include <sys/procfs.h>
7727
#endif
7728
 
7729
/* Return a PID that identifies a "thread" for threaded cores, or the
7730
   PID of the main process for non-threaded cores.  */
7731
 
7732
static int
7733
elfcore_make_pid (bfd *abfd)
7734
{
7735
  int pid;
7736
 
7737
  pid = elf_tdata (abfd)->core_lwpid;
7738
  if (pid == 0)
7739
    pid = elf_tdata (abfd)->core_pid;
7740
 
7741
  return pid;
7742
}
7743
 
7744
/* If there isn't a section called NAME, make one, using
7745
   data from SECT.  Note, this function will generate a
7746
   reference to NAME, so you shouldn't deallocate or
7747
   overwrite it.  */
7748
 
7749
static bfd_boolean
7750
elfcore_maybe_make_sect (bfd *abfd, char *name, asection *sect)
7751
{
7752
  asection *sect2;
7753
 
7754
  if (bfd_get_section_by_name (abfd, name) != NULL)
7755
    return TRUE;
7756
 
7757
  sect2 = bfd_make_section_with_flags (abfd, name, sect->flags);
7758
  if (sect2 == NULL)
7759
    return FALSE;
7760
 
7761
  sect2->size = sect->size;
7762
  sect2->filepos = sect->filepos;
7763
  sect2->alignment_power = sect->alignment_power;
7764
  return TRUE;
7765
}
7766
 
7767
/* Create a pseudosection containing SIZE bytes at FILEPOS.  This
7768
   actually creates up to two pseudosections:
7769
   - For the single-threaded case, a section named NAME, unless
7770
     such a section already exists.
7771
   - For the multi-threaded case, a section named "NAME/PID", where
7772
     PID is elfcore_make_pid (abfd).
7773
   Both pseudosections have identical contents. */
7774
bfd_boolean
7775
_bfd_elfcore_make_pseudosection (bfd *abfd,
7776
                                 char *name,
7777
                                 size_t size,
7778
                                 ufile_ptr filepos)
7779
{
7780
  char buf[100];
7781
  char *threaded_name;
7782
  size_t len;
7783
  asection *sect;
7784
 
7785
  /* Build the section name.  */
7786
 
7787
  sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
7788
  len = strlen (buf) + 1;
7789
  threaded_name = (char *) bfd_alloc (abfd, len);
7790
  if (threaded_name == NULL)
7791
    return FALSE;
7792
  memcpy (threaded_name, buf, len);
7793
 
7794
  sect = bfd_make_section_anyway_with_flags (abfd, threaded_name,
7795
                                             SEC_HAS_CONTENTS);
7796
  if (sect == NULL)
7797
    return FALSE;
7798
  sect->size = size;
7799
  sect->filepos = filepos;
7800
  sect->alignment_power = 2;
7801
 
7802
  return elfcore_maybe_make_sect (abfd, name, sect);
7803
}
7804
 
7805
/* prstatus_t exists on:
7806
     solaris 2.5+
7807
     linux 2.[01] + glibc
7808
     unixware 4.2
7809
*/
7810
 
7811
#if defined (HAVE_PRSTATUS_T)
7812
 
7813
static bfd_boolean
7814
elfcore_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
7815
{
7816
  size_t size;
7817
  int offset;
7818
 
7819
  if (note->descsz == sizeof (prstatus_t))
7820
    {
7821
      prstatus_t prstat;
7822
 
7823
      size = sizeof (prstat.pr_reg);
7824
      offset   = offsetof (prstatus_t, pr_reg);
7825
      memcpy (&prstat, note->descdata, sizeof (prstat));
7826
 
7827
      /* Do not overwrite the core signal if it
7828
         has already been set by another thread.  */
7829
      if (elf_tdata (abfd)->core_signal == 0)
7830
        elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7831
      if (elf_tdata (abfd)->core_pid == 0)
7832
        elf_tdata (abfd)->core_pid = prstat.pr_pid;
7833
 
7834
      /* pr_who exists on:
7835
         solaris 2.5+
7836
         unixware 4.2
7837
         pr_who doesn't exist on:
7838
         linux 2.[01]
7839
         */
7840
#if defined (HAVE_PRSTATUS_T_PR_WHO)
7841
      elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7842
#else
7843
      elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7844
#endif
7845
    }
7846
#if defined (HAVE_PRSTATUS32_T)
7847
  else if (note->descsz == sizeof (prstatus32_t))
7848
    {
7849
      /* 64-bit host, 32-bit corefile */
7850
      prstatus32_t prstat;
7851
 
7852
      size = sizeof (prstat.pr_reg);
7853
      offset   = offsetof (prstatus32_t, pr_reg);
7854
      memcpy (&prstat, note->descdata, sizeof (prstat));
7855
 
7856
      /* Do not overwrite the core signal if it
7857
         has already been set by another thread.  */
7858
      if (elf_tdata (abfd)->core_signal == 0)
7859
        elf_tdata (abfd)->core_signal = prstat.pr_cursig;
7860
      if (elf_tdata (abfd)->core_pid == 0)
7861
        elf_tdata (abfd)->core_pid = prstat.pr_pid;
7862
 
7863
      /* pr_who exists on:
7864
         solaris 2.5+
7865
         unixware 4.2
7866
         pr_who doesn't exist on:
7867
         linux 2.[01]
7868
         */
7869
#if defined (HAVE_PRSTATUS32_T_PR_WHO)
7870
      elf_tdata (abfd)->core_lwpid = prstat.pr_who;
7871
#else
7872
      elf_tdata (abfd)->core_lwpid = prstat.pr_pid;
7873
#endif
7874
    }
7875
#endif /* HAVE_PRSTATUS32_T */
7876
  else
7877
    {
7878
      /* Fail - we don't know how to handle any other
7879
         note size (ie. data object type).  */
7880
      return TRUE;
7881
    }
7882
 
7883
  /* Make a ".reg/999" section and a ".reg" section.  */
7884
  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
7885
                                          size, note->descpos + offset);
7886
}
7887
#endif /* defined (HAVE_PRSTATUS_T) */
7888
 
7889
/* Create a pseudosection containing the exact contents of NOTE.  */
7890
static bfd_boolean
7891
elfcore_make_note_pseudosection (bfd *abfd,
7892
                                 char *name,
7893
                                 Elf_Internal_Note *note)
7894
{
7895
  return _bfd_elfcore_make_pseudosection (abfd, name,
7896
                                          note->descsz, note->descpos);
7897
}
7898
 
7899
/* There isn't a consistent prfpregset_t across platforms,
7900
   but it doesn't matter, because we don't have to pick this
7901
   data structure apart.  */
7902
 
7903
static bfd_boolean
7904
elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note)
7905
{
7906
  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
7907
}
7908
 
7909
/* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
7910
   type of NT_PRXFPREG.  Just include the whole note's contents
7911
   literally.  */
7912
 
7913
static bfd_boolean
7914
elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
7915
{
7916
  return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
7917
}
7918
 
7919
/* Linux dumps the Intel XSAVE extended state in a note named "LINUX"
7920
   with a note type of NT_X86_XSTATE.  Just include the whole note's
7921
   contents literally.  */
7922
 
7923
static bfd_boolean
7924
elfcore_grok_xstatereg (bfd *abfd, Elf_Internal_Note *note)
7925
{
7926
  return elfcore_make_note_pseudosection (abfd, ".reg-xstate", note);
7927
}
7928
 
7929
static bfd_boolean
7930
elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note)
7931
{
7932
  return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note);
7933
}
7934
 
7935
static bfd_boolean
7936
elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note)
7937
{
7938
  return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note);
7939
}
7940
 
7941
static bfd_boolean
7942
elfcore_grok_s390_high_gprs (bfd *abfd, Elf_Internal_Note *note)
7943
{
7944
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-high-gprs", note);
7945
}
7946
 
7947
static bfd_boolean
7948
elfcore_grok_s390_timer (bfd *abfd, Elf_Internal_Note *note)
7949
{
7950
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-timer", note);
7951
}
7952
 
7953
static bfd_boolean
7954
elfcore_grok_s390_todcmp (bfd *abfd, Elf_Internal_Note *note)
7955
{
7956
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-todcmp", note);
7957
}
7958
 
7959
static bfd_boolean
7960
elfcore_grok_s390_todpreg (bfd *abfd, Elf_Internal_Note *note)
7961
{
7962
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-todpreg", note);
7963
}
7964
 
7965
static bfd_boolean
7966
elfcore_grok_s390_ctrs (bfd *abfd, Elf_Internal_Note *note)
7967
{
7968
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-ctrs", note);
7969
}
7970
 
7971
static bfd_boolean
7972
elfcore_grok_s390_prefix (bfd *abfd, Elf_Internal_Note *note)
7973
{
7974
  return elfcore_make_note_pseudosection (abfd, ".reg-s390-prefix", note);
7975
}
7976
 
7977
#if defined (HAVE_PRPSINFO_T)
7978
typedef prpsinfo_t   elfcore_psinfo_t;
7979
#if defined (HAVE_PRPSINFO32_T)         /* Sparc64 cross Sparc32 */
7980
typedef prpsinfo32_t elfcore_psinfo32_t;
7981
#endif
7982
#endif
7983
 
7984
#if defined (HAVE_PSINFO_T)
7985
typedef psinfo_t   elfcore_psinfo_t;
7986
#if defined (HAVE_PSINFO32_T)           /* Sparc64 cross Sparc32 */
7987
typedef psinfo32_t elfcore_psinfo32_t;
7988
#endif
7989
#endif
7990
 
7991
/* return a malloc'ed copy of a string at START which is at
7992
   most MAX bytes long, possibly without a terminating '\0'.
7993
   the copy will always have a terminating '\0'.  */
7994
 
7995
char *
7996
_bfd_elfcore_strndup (bfd *abfd, char *start, size_t max)
7997
{
7998
  char *dups;
7999
  char *end = (char *) memchr (start, '\0', max);
8000
  size_t len;
8001
 
8002
  if (end == NULL)
8003
    len = max;
8004
  else
8005
    len = end - start;
8006
 
8007
  dups = (char *) bfd_alloc (abfd, len + 1);
8008
  if (dups == NULL)
8009
    return NULL;
8010
 
8011
  memcpy (dups, start, len);
8012
  dups[len] = '\0';
8013
 
8014
  return dups;
8015
}
8016
 
8017
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8018
static bfd_boolean
8019
elfcore_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
8020
{
8021
  if (note->descsz == sizeof (elfcore_psinfo_t))
8022
    {
8023
      elfcore_psinfo_t psinfo;
8024
 
8025
      memcpy (&psinfo, note->descdata, sizeof (psinfo));
8026
 
8027
#if defined (HAVE_PSINFO_T_PR_PID) || defined (HAVE_PRPSINFO_T_PR_PID)
8028
      elf_tdata (abfd)->core_pid = psinfo.pr_pid;
8029
#endif
8030
      elf_tdata (abfd)->core_program
8031
        = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
8032
                                sizeof (psinfo.pr_fname));
8033
 
8034
      elf_tdata (abfd)->core_command
8035
        = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8036
                                sizeof (psinfo.pr_psargs));
8037
    }
8038
#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8039
  else if (note->descsz == sizeof (elfcore_psinfo32_t))
8040
    {
8041
      /* 64-bit host, 32-bit corefile */
8042
      elfcore_psinfo32_t psinfo;
8043
 
8044
      memcpy (&psinfo, note->descdata, sizeof (psinfo));
8045
 
8046
#if defined (HAVE_PSINFO32_T_PR_PID) || defined (HAVE_PRPSINFO32_T_PR_PID)
8047
      elf_tdata (abfd)->core_pid = psinfo.pr_pid;
8048
#endif
8049
      elf_tdata (abfd)->core_program
8050
        = _bfd_elfcore_strndup (abfd, psinfo.pr_fname,
8051
                                sizeof (psinfo.pr_fname));
8052
 
8053
      elf_tdata (abfd)->core_command
8054
        = _bfd_elfcore_strndup (abfd, psinfo.pr_psargs,
8055
                                sizeof (psinfo.pr_psargs));
8056
    }
8057
#endif
8058
 
8059
  else
8060
    {
8061
      /* Fail - we don't know how to handle any other
8062
         note size (ie. data object type).  */
8063
      return TRUE;
8064
    }
8065
 
8066
  /* Note that for some reason, a spurious space is tacked
8067
     onto the end of the args in some (at least one anyway)
8068
     implementations, so strip it off if it exists.  */
8069
 
8070
  {
8071
    char *command = elf_tdata (abfd)->core_command;
8072
    int n = strlen (command);
8073
 
8074
    if (0 < n && command[n - 1] == ' ')
8075
      command[n - 1] = '\0';
8076
  }
8077
 
8078
  return TRUE;
8079
}
8080
#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
8081
 
8082
#if defined (HAVE_PSTATUS_T)
8083
static bfd_boolean
8084
elfcore_grok_pstatus (bfd *abfd, Elf_Internal_Note *note)
8085
{
8086
  if (note->descsz == sizeof (pstatus_t)
8087
#if defined (HAVE_PXSTATUS_T)
8088
      || note->descsz == sizeof (pxstatus_t)
8089
#endif
8090
      )
8091
    {
8092
      pstatus_t pstat;
8093
 
8094
      memcpy (&pstat, note->descdata, sizeof (pstat));
8095
 
8096
      elf_tdata (abfd)->core_pid = pstat.pr_pid;
8097
    }
8098
#if defined (HAVE_PSTATUS32_T)
8099
  else if (note->descsz == sizeof (pstatus32_t))
8100
    {
8101
      /* 64-bit host, 32-bit corefile */
8102
      pstatus32_t pstat;
8103
 
8104
      memcpy (&pstat, note->descdata, sizeof (pstat));
8105
 
8106
      elf_tdata (abfd)->core_pid = pstat.pr_pid;
8107
    }
8108
#endif
8109
  /* Could grab some more details from the "representative"
8110
     lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
8111
     NT_LWPSTATUS note, presumably.  */
8112
 
8113
  return TRUE;
8114
}
8115
#endif /* defined (HAVE_PSTATUS_T) */
8116
 
8117
#if defined (HAVE_LWPSTATUS_T)
8118
static bfd_boolean
8119
elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note)
8120
{
8121
  lwpstatus_t lwpstat;
8122
  char buf[100];
8123
  char *name;
8124
  size_t len;
8125
  asection *sect;
8126
 
8127
  if (note->descsz != sizeof (lwpstat)
8128
#if defined (HAVE_LWPXSTATUS_T)
8129
      && note->descsz != sizeof (lwpxstatus_t)
8130
#endif
8131
      )
8132
    return TRUE;
8133
 
8134
  memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
8135
 
8136
  elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
8137
  /* Do not overwrite the core signal if it has already been set by
8138
     another thread.  */
8139
  if (elf_tdata (abfd)->core_signal == 0)
8140
    elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
8141
 
8142
  /* Make a ".reg/999" section.  */
8143
 
8144
  sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
8145
  len = strlen (buf) + 1;
8146
  name = bfd_alloc (abfd, len);
8147
  if (name == NULL)
8148
    return FALSE;
8149
  memcpy (name, buf, len);
8150
 
8151
  sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8152
  if (sect == NULL)
8153
    return FALSE;
8154
 
8155
#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8156
  sect->size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
8157
  sect->filepos = note->descpos
8158
    + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
8159
#endif
8160
 
8161
#if defined (HAVE_LWPSTATUS_T_PR_REG)
8162
  sect->size = sizeof (lwpstat.pr_reg);
8163
  sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
8164
#endif
8165
 
8166
  sect->alignment_power = 2;
8167
 
8168
  if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
8169
    return FALSE;
8170
 
8171
  /* Make a ".reg2/999" section */
8172
 
8173
  sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
8174
  len = strlen (buf) + 1;
8175
  name = bfd_alloc (abfd, len);
8176
  if (name == NULL)
8177
    return FALSE;
8178
  memcpy (name, buf, len);
8179
 
8180
  sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8181
  if (sect == NULL)
8182
    return FALSE;
8183
 
8184
#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8185
  sect->size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
8186
  sect->filepos = note->descpos
8187
    + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
8188
#endif
8189
 
8190
#if defined (HAVE_LWPSTATUS_T_PR_FPREG)
8191
  sect->size = sizeof (lwpstat.pr_fpreg);
8192
  sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
8193
#endif
8194
 
8195
  sect->alignment_power = 2;
8196
 
8197
  return elfcore_maybe_make_sect (abfd, ".reg2", sect);
8198
}
8199
#endif /* defined (HAVE_LWPSTATUS_T) */
8200
 
8201
static bfd_boolean
8202
elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note)
8203
{
8204
  char buf[30];
8205
  char *name;
8206
  size_t len;
8207
  asection *sect;
8208
  int type;
8209
  int is_active_thread;
8210
  bfd_vma base_addr;
8211
 
8212
  if (note->descsz < 728)
8213
    return TRUE;
8214
 
8215
  if (! CONST_STRNEQ (note->namedata, "win32"))
8216
    return TRUE;
8217
 
8218
  type = bfd_get_32 (abfd, note->descdata);
8219
 
8220
  switch (type)
8221
    {
8222
    case 1 /* NOTE_INFO_PROCESS */:
8223
      /* FIXME: need to add ->core_command.  */
8224
      /* process_info.pid */
8225
      elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8);
8226
      /* process_info.signal */
8227
      elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12);
8228
      break;
8229
 
8230
    case 2 /* NOTE_INFO_THREAD */:
8231
      /* Make a ".reg/999" section.  */
8232
      /* thread_info.tid */
8233
      sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8));
8234
 
8235
      len = strlen (buf) + 1;
8236
      name = (char *) bfd_alloc (abfd, len);
8237
      if (name == NULL)
8238
        return FALSE;
8239
 
8240
      memcpy (name, buf, len);
8241
 
8242
      sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8243
      if (sect == NULL)
8244
        return FALSE;
8245
 
8246
      /* sizeof (thread_info.thread_context) */
8247
      sect->size = 716;
8248
      /* offsetof (thread_info.thread_context) */
8249
      sect->filepos = note->descpos + 12;
8250
      sect->alignment_power = 2;
8251
 
8252
      /* thread_info.is_active_thread */
8253
      is_active_thread = bfd_get_32 (abfd, note->descdata + 8);
8254
 
8255
      if (is_active_thread)
8256
        if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
8257
          return FALSE;
8258
      break;
8259
 
8260
    case 3 /* NOTE_INFO_MODULE */:
8261
      /* Make a ".module/xxxxxxxx" section.  */
8262
      /* module_info.base_address */
8263
      base_addr = bfd_get_32 (abfd, note->descdata + 4);
8264
      sprintf (buf, ".module/%08lx", (unsigned long) base_addr);
8265
 
8266
      len = strlen (buf) + 1;
8267
      name = (char *) bfd_alloc (abfd, len);
8268
      if (name == NULL)
8269
        return FALSE;
8270
 
8271
      memcpy (name, buf, len);
8272
 
8273
      sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8274
 
8275
      if (sect == NULL)
8276
        return FALSE;
8277
 
8278
      sect->size = note->descsz;
8279
      sect->filepos = note->descpos;
8280
      sect->alignment_power = 2;
8281
      break;
8282
 
8283
    default:
8284
      return TRUE;
8285
    }
8286
 
8287
  return TRUE;
8288
}
8289
 
8290
static bfd_boolean
8291
elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
8292
{
8293
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8294
 
8295
  switch (note->type)
8296
    {
8297
    default:
8298
      return TRUE;
8299
 
8300
    case NT_PRSTATUS:
8301
      if (bed->elf_backend_grok_prstatus)
8302
        if ((*bed->elf_backend_grok_prstatus) (abfd, note))
8303
          return TRUE;
8304
#if defined (HAVE_PRSTATUS_T)
8305
      return elfcore_grok_prstatus (abfd, note);
8306
#else
8307
      return TRUE;
8308
#endif
8309
 
8310
#if defined (HAVE_PSTATUS_T)
8311
    case NT_PSTATUS:
8312
      return elfcore_grok_pstatus (abfd, note);
8313
#endif
8314
 
8315
#if defined (HAVE_LWPSTATUS_T)
8316
    case NT_LWPSTATUS:
8317
      return elfcore_grok_lwpstatus (abfd, note);
8318
#endif
8319
 
8320
    case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
8321
      return elfcore_grok_prfpreg (abfd, note);
8322
 
8323
    case NT_WIN32PSTATUS:
8324
      return elfcore_grok_win32pstatus (abfd, note);
8325
 
8326
    case NT_PRXFPREG:           /* Linux SSE extension */
8327
      if (note->namesz == 6
8328
          && strcmp (note->namedata, "LINUX") == 0)
8329
        return elfcore_grok_prxfpreg (abfd, note);
8330
      else
8331
        return TRUE;
8332
 
8333
    case NT_X86_XSTATE:         /* Linux XSAVE extension */
8334
      if (note->namesz == 6
8335
          && strcmp (note->namedata, "LINUX") == 0)
8336
        return elfcore_grok_xstatereg (abfd, note);
8337
      else
8338
        return TRUE;
8339
 
8340
    case NT_PPC_VMX:
8341
      if (note->namesz == 6
8342
          && strcmp (note->namedata, "LINUX") == 0)
8343
        return elfcore_grok_ppc_vmx (abfd, note);
8344
      else
8345
        return TRUE;
8346
 
8347
    case NT_PPC_VSX:
8348
      if (note->namesz == 6
8349
          && strcmp (note->namedata, "LINUX") == 0)
8350
        return elfcore_grok_ppc_vsx (abfd, note);
8351
      else
8352
        return TRUE;
8353
 
8354
    case NT_S390_HIGH_GPRS:
8355
      if (note->namesz == 6
8356
          && strcmp (note->namedata, "LINUX") == 0)
8357
        return elfcore_grok_s390_high_gprs (abfd, note);
8358
      else
8359
        return TRUE;
8360
 
8361
    case NT_S390_TIMER:
8362
      if (note->namesz == 6
8363
          && strcmp (note->namedata, "LINUX") == 0)
8364
        return elfcore_grok_s390_timer (abfd, note);
8365
      else
8366
        return TRUE;
8367
 
8368
    case NT_S390_TODCMP:
8369
      if (note->namesz == 6
8370
          && strcmp (note->namedata, "LINUX") == 0)
8371
        return elfcore_grok_s390_todcmp (abfd, note);
8372
      else
8373
        return TRUE;
8374
 
8375
    case NT_S390_TODPREG:
8376
      if (note->namesz == 6
8377
          && strcmp (note->namedata, "LINUX") == 0)
8378
        return elfcore_grok_s390_todpreg (abfd, note);
8379
      else
8380
        return TRUE;
8381
 
8382
    case NT_S390_CTRS:
8383
      if (note->namesz == 6
8384
          && strcmp (note->namedata, "LINUX") == 0)
8385
        return elfcore_grok_s390_ctrs (abfd, note);
8386
      else
8387
        return TRUE;
8388
 
8389
    case NT_S390_PREFIX:
8390
      if (note->namesz == 6
8391
          && strcmp (note->namedata, "LINUX") == 0)
8392
        return elfcore_grok_s390_prefix (abfd, note);
8393
      else
8394
        return TRUE;
8395
 
8396
    case NT_PRPSINFO:
8397
    case NT_PSINFO:
8398
      if (bed->elf_backend_grok_psinfo)
8399
        if ((*bed->elf_backend_grok_psinfo) (abfd, note))
8400
          return TRUE;
8401
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8402
      return elfcore_grok_psinfo (abfd, note);
8403
#else
8404
      return TRUE;
8405
#endif
8406
 
8407
    case NT_AUXV:
8408
      {
8409
        asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8410
                                                             SEC_HAS_CONTENTS);
8411
 
8412
        if (sect == NULL)
8413
          return FALSE;
8414
        sect->size = note->descsz;
8415
        sect->filepos = note->descpos;
8416
        sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8417
 
8418
        return TRUE;
8419
      }
8420
    }
8421
}
8422
 
8423
static bfd_boolean
8424
elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note)
8425
{
8426
  elf_tdata (abfd)->build_id_size = note->descsz;
8427
  elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz);
8428
  if (elf_tdata (abfd)->build_id == NULL)
8429
    return FALSE;
8430
 
8431
  memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz);
8432
 
8433
  return TRUE;
8434
}
8435
 
8436
static bfd_boolean
8437
elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note)
8438
{
8439
  switch (note->type)
8440
    {
8441
    default:
8442
      return TRUE;
8443
 
8444
    case NT_GNU_BUILD_ID:
8445
      return elfobj_grok_gnu_build_id (abfd, note);
8446
    }
8447
}
8448
 
8449
static bfd_boolean
8450
elfobj_grok_stapsdt_note_1 (bfd *abfd, Elf_Internal_Note *note)
8451
{
8452
  struct sdt_note *cur =
8453
    (struct sdt_note *) bfd_alloc (abfd, sizeof (struct sdt_note)
8454
                                   + note->descsz);
8455
 
8456
  cur->next = (struct sdt_note *) (elf_tdata (abfd))->sdt_note_head;
8457
  cur->size = (bfd_size_type) note->descsz;
8458
  memcpy (cur->data, note->descdata, note->descsz);
8459
 
8460
  elf_tdata (abfd)->sdt_note_head = cur;
8461
 
8462
  return TRUE;
8463
}
8464
 
8465
static bfd_boolean
8466
elfobj_grok_stapsdt_note (bfd *abfd, Elf_Internal_Note *note)
8467
{
8468
  switch (note->type)
8469
    {
8470
    case NT_STAPSDT:
8471
      return elfobj_grok_stapsdt_note_1 (abfd, note);
8472
 
8473
    default:
8474
      return TRUE;
8475
    }
8476
}
8477
 
8478
static bfd_boolean
8479
elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp)
8480
{
8481
  char *cp;
8482
 
8483
  cp = strchr (note->namedata, '@');
8484
  if (cp != NULL)
8485
    {
8486
      *lwpidp = atoi(cp + 1);
8487
      return TRUE;
8488
    }
8489
  return FALSE;
8490
}
8491
 
8492
static bfd_boolean
8493
elfcore_grok_netbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8494
{
8495
  /* Signal number at offset 0x08. */
8496
  elf_tdata (abfd)->core_signal
8497
    = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8498
 
8499
  /* Process ID at offset 0x50. */
8500
  elf_tdata (abfd)->core_pid
8501
    = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x50);
8502
 
8503
  /* Command name at 0x7c (max 32 bytes, including nul). */
8504
  elf_tdata (abfd)->core_command
8505
    = _bfd_elfcore_strndup (abfd, note->descdata + 0x7c, 31);
8506
 
8507
  return elfcore_make_note_pseudosection (abfd, ".note.netbsdcore.procinfo",
8508
                                          note);
8509
}
8510
 
8511
static bfd_boolean
8512
elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note)
8513
{
8514
  int lwp;
8515
 
8516
  if (elfcore_netbsd_get_lwpid (note, &lwp))
8517
    elf_tdata (abfd)->core_lwpid = lwp;
8518
 
8519
  if (note->type == NT_NETBSDCORE_PROCINFO)
8520
    {
8521
      /* NetBSD-specific core "procinfo".  Note that we expect to
8522
         find this note before any of the others, which is fine,
8523
         since the kernel writes this note out first when it
8524
         creates a core file.  */
8525
 
8526
      return elfcore_grok_netbsd_procinfo (abfd, note);
8527
    }
8528
 
8529
  /* As of Jan 2002 there are no other machine-independent notes
8530
     defined for NetBSD core files.  If the note type is less
8531
     than the start of the machine-dependent note types, we don't
8532
     understand it.  */
8533
 
8534
  if (note->type < NT_NETBSDCORE_FIRSTMACH)
8535
    return TRUE;
8536
 
8537
 
8538
  switch (bfd_get_arch (abfd))
8539
    {
8540
      /* On the Alpha, SPARC (32-bit and 64-bit), PT_GETREGS == mach+0 and
8541
         PT_GETFPREGS == mach+2.  */
8542
 
8543
    case bfd_arch_alpha:
8544
    case bfd_arch_sparc:
8545
      switch (note->type)
8546
        {
8547
        case NT_NETBSDCORE_FIRSTMACH+0:
8548
          return elfcore_make_note_pseudosection (abfd, ".reg", note);
8549
 
8550
        case NT_NETBSDCORE_FIRSTMACH+2:
8551
          return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8552
 
8553
        default:
8554
          return TRUE;
8555
        }
8556
 
8557
      /* On all other arch's, PT_GETREGS == mach+1 and
8558
         PT_GETFPREGS == mach+3.  */
8559
 
8560
    default:
8561
      switch (note->type)
8562
        {
8563
        case NT_NETBSDCORE_FIRSTMACH+1:
8564
          return elfcore_make_note_pseudosection (abfd, ".reg", note);
8565
 
8566
        case NT_NETBSDCORE_FIRSTMACH+3:
8567
          return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8568
 
8569
        default:
8570
          return TRUE;
8571
        }
8572
    }
8573
    /* NOTREACHED */
8574
}
8575
 
8576
static bfd_boolean
8577
elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal_Note *note)
8578
{
8579
  /* Signal number at offset 0x08. */
8580
  elf_tdata (abfd)->core_signal
8581
    = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x08);
8582
 
8583
  /* Process ID at offset 0x20. */
8584
  elf_tdata (abfd)->core_pid
8585
    = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20);
8586
 
8587
  /* Command name at 0x48 (max 32 bytes, including nul). */
8588
  elf_tdata (abfd)->core_command
8589
    = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31);
8590
 
8591
  return TRUE;
8592
}
8593
 
8594
static bfd_boolean
8595
elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
8596
{
8597
  if (note->type == NT_OPENBSD_PROCINFO)
8598
    return elfcore_grok_openbsd_procinfo (abfd, note);
8599
 
8600
  if (note->type == NT_OPENBSD_REGS)
8601
    return elfcore_make_note_pseudosection (abfd, ".reg", note);
8602
 
8603
  if (note->type == NT_OPENBSD_FPREGS)
8604
    return elfcore_make_note_pseudosection (abfd, ".reg2", note);
8605
 
8606
  if (note->type == NT_OPENBSD_XFPREGS)
8607
    return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
8608
 
8609
  if (note->type == NT_OPENBSD_AUXV)
8610
    {
8611
      asection *sect = bfd_make_section_anyway_with_flags (abfd, ".auxv",
8612
                                                           SEC_HAS_CONTENTS);
8613
 
8614
      if (sect == NULL)
8615
        return FALSE;
8616
      sect->size = note->descsz;
8617
      sect->filepos = note->descpos;
8618
      sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8619
 
8620
      return TRUE;
8621
    }
8622
 
8623
  if (note->type == NT_OPENBSD_WCOOKIE)
8624
    {
8625
      asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie",
8626
                                                           SEC_HAS_CONTENTS);
8627
 
8628
      if (sect == NULL)
8629
        return FALSE;
8630
      sect->size = note->descsz;
8631
      sect->filepos = note->descpos;
8632
      sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32;
8633
 
8634
      return TRUE;
8635
    }
8636
 
8637
  return TRUE;
8638
}
8639
 
8640
static bfd_boolean
8641
elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid)
8642
{
8643
  void *ddata = note->descdata;
8644
  char buf[100];
8645
  char *name;
8646
  asection *sect;
8647
  short sig;
8648
  unsigned flags;
8649
 
8650
  /* nto_procfs_status 'pid' field is at offset 0.  */
8651
  elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, (bfd_byte *) ddata);
8652
 
8653
  /* nto_procfs_status 'tid' field is at offset 4.  Pass it back.  */
8654
  *tid = bfd_get_32 (abfd, (bfd_byte *) ddata + 4);
8655
 
8656
  /* nto_procfs_status 'flags' field is at offset 8.  */
8657
  flags = bfd_get_32 (abfd, (bfd_byte *) ddata + 8);
8658
 
8659
  /* nto_procfs_status 'what' field is at offset 14.  */
8660
  if ((sig = bfd_get_16 (abfd, (bfd_byte *) ddata + 14)) > 0)
8661
    {
8662
      elf_tdata (abfd)->core_signal = sig;
8663
      elf_tdata (abfd)->core_lwpid = *tid;
8664
    }
8665
 
8666
  /* _DEBUG_FLAG_CURTID (current thread) is 0x80.  Some cores
8667
     do not come from signals so we make sure we set the current
8668
     thread just in case.  */
8669
  if (flags & 0x00000080)
8670
    elf_tdata (abfd)->core_lwpid = *tid;
8671
 
8672
  /* Make a ".qnx_core_status/%d" section.  */
8673
  sprintf (buf, ".qnx_core_status/%ld", *tid);
8674
 
8675
  name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8676
  if (name == NULL)
8677
    return FALSE;
8678
  strcpy (name, buf);
8679
 
8680
  sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8681
  if (sect == NULL)
8682
    return FALSE;
8683
 
8684
  sect->size            = note->descsz;
8685
  sect->filepos         = note->descpos;
8686
  sect->alignment_power = 2;
8687
 
8688
  return (elfcore_maybe_make_sect (abfd, ".qnx_core_status", sect));
8689
}
8690
 
8691
static bfd_boolean
8692
elfcore_grok_nto_regs (bfd *abfd,
8693
                       Elf_Internal_Note *note,
8694
                       long tid,
8695
                       char *base)
8696
{
8697
  char buf[100];
8698
  char *name;
8699
  asection *sect;
8700
 
8701
  /* Make a "(base)/%d" section.  */
8702
  sprintf (buf, "%s/%ld", base, tid);
8703
 
8704
  name = (char *) bfd_alloc (abfd, strlen (buf) + 1);
8705
  if (name == NULL)
8706
    return FALSE;
8707
  strcpy (name, buf);
8708
 
8709
  sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8710
  if (sect == NULL)
8711
    return FALSE;
8712
 
8713
  sect->size            = note->descsz;
8714
  sect->filepos         = note->descpos;
8715
  sect->alignment_power = 2;
8716
 
8717
  /* This is the current thread.  */
8718
  if (elf_tdata (abfd)->core_lwpid == tid)
8719
    return elfcore_maybe_make_sect (abfd, base, sect);
8720
 
8721
  return TRUE;
8722
}
8723
 
8724
#define BFD_QNT_CORE_INFO       7
8725
#define BFD_QNT_CORE_STATUS     8
8726
#define BFD_QNT_CORE_GREG       9
8727
#define BFD_QNT_CORE_FPREG      10
8728
 
8729
static bfd_boolean
8730
elfcore_grok_nto_note (bfd *abfd, Elf_Internal_Note *note)
8731
{
8732
  /* Every GREG section has a STATUS section before it.  Store the
8733
     tid from the previous call to pass down to the next gregs
8734
     function.  */
8735
  static long tid = 1;
8736
 
8737
  switch (note->type)
8738
    {
8739
    case BFD_QNT_CORE_INFO:
8740
      return elfcore_make_note_pseudosection (abfd, ".qnx_core_info", note);
8741
    case BFD_QNT_CORE_STATUS:
8742
      return elfcore_grok_nto_status (abfd, note, &tid);
8743
    case BFD_QNT_CORE_GREG:
8744
      return elfcore_grok_nto_regs (abfd, note, tid, ".reg");
8745
    case BFD_QNT_CORE_FPREG:
8746
      return elfcore_grok_nto_regs (abfd, note, tid, ".reg2");
8747
    default:
8748
      return TRUE;
8749
    }
8750
}
8751
 
8752
static bfd_boolean
8753
elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note)
8754
{
8755
  char *name;
8756
  asection *sect;
8757
  size_t len;
8758
 
8759
  /* Use note name as section name.  */
8760
  len = note->namesz;
8761
  name = (char *) bfd_alloc (abfd, len);
8762
  if (name == NULL)
8763
    return FALSE;
8764
  memcpy (name, note->namedata, len);
8765
  name[len - 1] = '\0';
8766
 
8767
  sect = bfd_make_section_anyway_with_flags (abfd, name, SEC_HAS_CONTENTS);
8768
  if (sect == NULL)
8769
    return FALSE;
8770
 
8771
  sect->size            = note->descsz;
8772
  sect->filepos         = note->descpos;
8773
  sect->alignment_power = 1;
8774
 
8775
  return TRUE;
8776
}
8777
 
8778
/* Function: elfcore_write_note
8779
 
8780
   Inputs:
8781
     buffer to hold note, and current size of buffer
8782
     name of note
8783
     type of note
8784
     data for note
8785
     size of data for note
8786
 
8787
   Writes note to end of buffer.  ELF64 notes are written exactly as
8788
   for ELF32, despite the current (as of 2006) ELF gabi specifying
8789
   that they ought to have 8-byte namesz and descsz field, and have
8790
   8-byte alignment.  Other writers, eg. Linux kernel, do the same.
8791
 
8792
   Return:
8793
   Pointer to realloc'd buffer, *BUFSIZ updated.  */
8794
 
8795
char *
8796
elfcore_write_note (bfd *abfd,
8797
                    char *buf,
8798
                    int *bufsiz,
8799
                    const char *name,
8800
                    int type,
8801
                    const void *input,
8802
                    int size)
8803
{
8804
  Elf_External_Note *xnp;
8805
  size_t namesz;
8806
  size_t newspace;
8807
  char *dest;
8808
 
8809
  namesz = 0;
8810
  if (name != NULL)
8811
    namesz = strlen (name) + 1;
8812
 
8813
  newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4);
8814
 
8815
  buf = (char *) realloc (buf, *bufsiz + newspace);
8816
  if (buf == NULL)
8817
    return buf;
8818
  dest = buf + *bufsiz;
8819
  *bufsiz += newspace;
8820
  xnp = (Elf_External_Note *) dest;
8821
  H_PUT_32 (abfd, namesz, xnp->namesz);
8822
  H_PUT_32 (abfd, size, xnp->descsz);
8823
  H_PUT_32 (abfd, type, xnp->type);
8824
  dest = xnp->name;
8825
  if (name != NULL)
8826
    {
8827
      memcpy (dest, name, namesz);
8828
      dest += namesz;
8829
      while (namesz & 3)
8830
        {
8831
          *dest++ = '\0';
8832
          ++namesz;
8833
        }
8834
    }
8835
  memcpy (dest, input, size);
8836
  dest += size;
8837
  while (size & 3)
8838
    {
8839
      *dest++ = '\0';
8840
      ++size;
8841
    }
8842
  return buf;
8843
}
8844
 
8845
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
8846
char *
8847
elfcore_write_prpsinfo (bfd  *abfd,
8848
                        char *buf,
8849
                        int  *bufsiz,
8850
                        const char *fname,
8851
                        const char *psargs)
8852
{
8853
  const char *note_name = "CORE";
8854
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8855
 
8856
  if (bed->elf_backend_write_core_note != NULL)
8857
    {
8858
      char *ret;
8859
      ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8860
                                                 NT_PRPSINFO, fname, psargs);
8861
      if (ret != NULL)
8862
        return ret;
8863
    }
8864
 
8865
#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
8866
  if (bed->s->elfclass == ELFCLASS32)
8867
    {
8868
#if defined (HAVE_PSINFO32_T)
8869
      psinfo32_t data;
8870
      int note_type = NT_PSINFO;
8871
#else
8872
      prpsinfo32_t data;
8873
      int note_type = NT_PRPSINFO;
8874
#endif
8875
 
8876
      memset (&data, 0, sizeof (data));
8877
      strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8878
      strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8879
      return elfcore_write_note (abfd, buf, bufsiz,
8880
                                 note_name, note_type, &data, sizeof (data));
8881
    }
8882
  else
8883
#endif
8884
    {
8885
#if defined (HAVE_PSINFO_T)
8886
      psinfo_t data;
8887
      int note_type = NT_PSINFO;
8888
#else
8889
      prpsinfo_t data;
8890
      int note_type = NT_PRPSINFO;
8891
#endif
8892
 
8893
      memset (&data, 0, sizeof (data));
8894
      strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
8895
      strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
8896
      return elfcore_write_note (abfd, buf, bufsiz,
8897
                                 note_name, note_type, &data, sizeof (data));
8898
    }
8899
}
8900
#endif  /* PSINFO_T or PRPSINFO_T */
8901
 
8902
#if defined (HAVE_PRSTATUS_T)
8903
char *
8904
elfcore_write_prstatus (bfd *abfd,
8905
                        char *buf,
8906
                        int *bufsiz,
8907
                        long pid,
8908
                        int cursig,
8909
                        const void *gregs)
8910
{
8911
  const char *note_name = "CORE";
8912
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8913
 
8914
  if (bed->elf_backend_write_core_note != NULL)
8915
    {
8916
      char *ret;
8917
      ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
8918
                                                 NT_PRSTATUS,
8919
                                                 pid, cursig, gregs);
8920
      if (ret != NULL)
8921
        return ret;
8922
    }
8923
 
8924
#if defined (HAVE_PRSTATUS32_T)
8925
  if (bed->s->elfclass == ELFCLASS32)
8926
    {
8927
      prstatus32_t prstat;
8928
 
8929
      memset (&prstat, 0, sizeof (prstat));
8930
      prstat.pr_pid = pid;
8931
      prstat.pr_cursig = cursig;
8932
      memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8933
      return elfcore_write_note (abfd, buf, bufsiz, note_name,
8934
                                 NT_PRSTATUS, &prstat, sizeof (prstat));
8935
    }
8936
  else
8937
#endif
8938
    {
8939
      prstatus_t prstat;
8940
 
8941
      memset (&prstat, 0, sizeof (prstat));
8942
      prstat.pr_pid = pid;
8943
      prstat.pr_cursig = cursig;
8944
      memcpy (&prstat.pr_reg, gregs, sizeof (prstat.pr_reg));
8945
      return elfcore_write_note (abfd, buf, bufsiz, note_name,
8946
                                 NT_PRSTATUS, &prstat, sizeof (prstat));
8947
    }
8948
}
8949
#endif /* HAVE_PRSTATUS_T */
8950
 
8951
#if defined (HAVE_LWPSTATUS_T)
8952
char *
8953
elfcore_write_lwpstatus (bfd *abfd,
8954
                         char *buf,
8955
                         int *bufsiz,
8956
                         long pid,
8957
                         int cursig,
8958
                         const void *gregs)
8959
{
8960
  lwpstatus_t lwpstat;
8961
  const char *note_name = "CORE";
8962
 
8963
  memset (&lwpstat, 0, sizeof (lwpstat));
8964
  lwpstat.pr_lwpid  = pid >> 16;
8965
  lwpstat.pr_cursig = cursig;
8966
#if defined (HAVE_LWPSTATUS_T_PR_REG)
8967
  memcpy (lwpstat.pr_reg, gregs, sizeof (lwpstat.pr_reg));
8968
#elif defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
8969
#if !defined(gregs)
8970
  memcpy (lwpstat.pr_context.uc_mcontext.gregs,
8971
          gregs, sizeof (lwpstat.pr_context.uc_mcontext.gregs));
8972
#else
8973
  memcpy (lwpstat.pr_context.uc_mcontext.__gregs,
8974
          gregs, sizeof (lwpstat.pr_context.uc_mcontext.__gregs));
8975
#endif
8976
#endif
8977
  return elfcore_write_note (abfd, buf, bufsiz, note_name,
8978
                             NT_LWPSTATUS, &lwpstat, sizeof (lwpstat));
8979
}
8980
#endif /* HAVE_LWPSTATUS_T */
8981
 
8982
#if defined (HAVE_PSTATUS_T)
8983
char *
8984
elfcore_write_pstatus (bfd *abfd,
8985
                       char *buf,
8986
                       int *bufsiz,
8987
                       long pid,
8988
                       int cursig ATTRIBUTE_UNUSED,
8989
                       const void *gregs ATTRIBUTE_UNUSED)
8990
{
8991
  const char *note_name = "CORE";
8992
#if defined (HAVE_PSTATUS32_T)
8993
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
8994
 
8995
  if (bed->s->elfclass == ELFCLASS32)
8996
    {
8997
      pstatus32_t pstat;
8998
 
8999
      memset (&pstat, 0, sizeof (pstat));
9000
      pstat.pr_pid = pid & 0xffff;
9001
      buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
9002
                                NT_PSTATUS, &pstat, sizeof (pstat));
9003
      return buf;
9004
    }
9005
  else
9006
#endif
9007
    {
9008
      pstatus_t pstat;
9009
 
9010
      memset (&pstat, 0, sizeof (pstat));
9011
      pstat.pr_pid = pid & 0xffff;
9012
      buf = elfcore_write_note (abfd, buf, bufsiz, note_name,
9013
                                NT_PSTATUS, &pstat, sizeof (pstat));
9014
      return buf;
9015
    }
9016
}
9017
#endif /* HAVE_PSTATUS_T */
9018
 
9019
char *
9020
elfcore_write_prfpreg (bfd *abfd,
9021
                       char *buf,
9022
                       int *bufsiz,
9023
                       const void *fpregs,
9024
                       int size)
9025
{
9026
  const char *note_name = "CORE";
9027
  return elfcore_write_note (abfd, buf, bufsiz,
9028
                             note_name, NT_FPREGSET, fpregs, size);
9029
}
9030
 
9031
char *
9032
elfcore_write_prxfpreg (bfd *abfd,
9033
                        char *buf,
9034
                        int *bufsiz,
9035
                        const void *xfpregs,
9036
                        int size)
9037
{
9038
  char *note_name = "LINUX";
9039
  return elfcore_write_note (abfd, buf, bufsiz,
9040
                             note_name, NT_PRXFPREG, xfpregs, size);
9041
}
9042
 
9043
char *
9044
elfcore_write_xstatereg (bfd *abfd, char *buf, int *bufsiz,
9045
                         const void *xfpregs, int size)
9046
{
9047
  char *note_name = "LINUX";
9048
  return elfcore_write_note (abfd, buf, bufsiz,
9049
                             note_name, NT_X86_XSTATE, xfpregs, size);
9050
}
9051
 
9052
char *
9053
elfcore_write_ppc_vmx (bfd *abfd,
9054
                       char *buf,
9055
                       int *bufsiz,
9056
                       const void *ppc_vmx,
9057
                       int size)
9058
{
9059
  char *note_name = "LINUX";
9060
  return elfcore_write_note (abfd, buf, bufsiz,
9061
                             note_name, NT_PPC_VMX, ppc_vmx, size);
9062
}
9063
 
9064
char *
9065
elfcore_write_ppc_vsx (bfd *abfd,
9066
                       char *buf,
9067
                       int *bufsiz,
9068
                       const void *ppc_vsx,
9069
                       int size)
9070
{
9071
  char *note_name = "LINUX";
9072
  return elfcore_write_note (abfd, buf, bufsiz,
9073
                             note_name, NT_PPC_VSX, ppc_vsx, size);
9074
}
9075
 
9076
static char *
9077
elfcore_write_s390_high_gprs (bfd *abfd,
9078
                              char *buf,
9079
                              int *bufsiz,
9080
                              const void *s390_high_gprs,
9081
                              int size)
9082
{
9083
  char *note_name = "LINUX";
9084
  return elfcore_write_note (abfd, buf, bufsiz,
9085
                             note_name, NT_S390_HIGH_GPRS,
9086
                             s390_high_gprs, size);
9087
}
9088
 
9089
char *
9090
elfcore_write_s390_timer (bfd *abfd,
9091
                          char *buf,
9092
                          int *bufsiz,
9093
                          const void *s390_timer,
9094
                          int size)
9095
{
9096
  char *note_name = "LINUX";
9097
  return elfcore_write_note (abfd, buf, bufsiz,
9098
                             note_name, NT_S390_TIMER, s390_timer, size);
9099
}
9100
 
9101
char *
9102
elfcore_write_s390_todcmp (bfd *abfd,
9103
                           char *buf,
9104
                           int *bufsiz,
9105
                           const void *s390_todcmp,
9106
                           int size)
9107
{
9108
  char *note_name = "LINUX";
9109
  return elfcore_write_note (abfd, buf, bufsiz,
9110
                             note_name, NT_S390_TODCMP, s390_todcmp, size);
9111
}
9112
 
9113
char *
9114
elfcore_write_s390_todpreg (bfd *abfd,
9115
                            char *buf,
9116
                            int *bufsiz,
9117
                            const void *s390_todpreg,
9118
                            int size)
9119
{
9120
  char *note_name = "LINUX";
9121
  return elfcore_write_note (abfd, buf, bufsiz,
9122
                             note_name, NT_S390_TODPREG, s390_todpreg, size);
9123
}
9124
 
9125
char *
9126
elfcore_write_s390_ctrs (bfd *abfd,
9127
                         char *buf,
9128
                         int *bufsiz,
9129
                         const void *s390_ctrs,
9130
                         int size)
9131
{
9132
  char *note_name = "LINUX";
9133
  return elfcore_write_note (abfd, buf, bufsiz,
9134
                             note_name, NT_S390_CTRS, s390_ctrs, size);
9135
}
9136
 
9137
char *
9138
elfcore_write_s390_prefix (bfd *abfd,
9139
                           char *buf,
9140
                           int *bufsiz,
9141
                           const void *s390_prefix,
9142
                           int size)
9143
{
9144
  char *note_name = "LINUX";
9145
  return elfcore_write_note (abfd, buf, bufsiz,
9146
                             note_name, NT_S390_PREFIX, s390_prefix, size);
9147
}
9148
 
9149
char *
9150
elfcore_write_register_note (bfd *abfd,
9151
                             char *buf,
9152
                             int *bufsiz,
9153
                             const char *section,
9154
                             const void *data,
9155
                             int size)
9156
{
9157
  if (strcmp (section, ".reg2") == 0)
9158
    return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size);
9159
  if (strcmp (section, ".reg-xfp") == 0)
9160
    return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size);
9161
  if (strcmp (section, ".reg-xstate") == 0)
9162
    return elfcore_write_xstatereg (abfd, buf, bufsiz, data, size);
9163
  if (strcmp (section, ".reg-ppc-vmx") == 0)
9164
    return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size);
9165
  if (strcmp (section, ".reg-ppc-vsx") == 0)
9166
    return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size);
9167
  if (strcmp (section, ".reg-s390-high-gprs") == 0)
9168
    return elfcore_write_s390_high_gprs (abfd, buf, bufsiz, data, size);
9169
  if (strcmp (section, ".reg-s390-timer") == 0)
9170
    return elfcore_write_s390_timer (abfd, buf, bufsiz, data, size);
9171
  if (strcmp (section, ".reg-s390-todcmp") == 0)
9172
    return elfcore_write_s390_todcmp (abfd, buf, bufsiz, data, size);
9173
  if (strcmp (section, ".reg-s390-todpreg") == 0)
9174
    return elfcore_write_s390_todpreg (abfd, buf, bufsiz, data, size);
9175
  if (strcmp (section, ".reg-s390-ctrs") == 0)
9176
    return elfcore_write_s390_ctrs (abfd, buf, bufsiz, data, size);
9177
  if (strcmp (section, ".reg-s390-prefix") == 0)
9178
    return elfcore_write_s390_prefix (abfd, buf, bufsiz, data, size);
9179
  return NULL;
9180
}
9181
 
9182
static bfd_boolean
9183
elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset)
9184
{
9185
  char *p;
9186
 
9187
  p = buf;
9188
  while (p < buf + size)
9189
    {
9190
      /* FIXME: bad alignment assumption.  */
9191
      Elf_External_Note *xnp = (Elf_External_Note *) p;
9192
      Elf_Internal_Note in;
9193
 
9194
      if (offsetof (Elf_External_Note, name) > buf - p + size)
9195
        return FALSE;
9196
 
9197
      in.type = H_GET_32 (abfd, xnp->type);
9198
 
9199
      in.namesz = H_GET_32 (abfd, xnp->namesz);
9200
      in.namedata = xnp->name;
9201
      if (in.namesz > buf - in.namedata + size)
9202
        return FALSE;
9203
 
9204
      in.descsz = H_GET_32 (abfd, xnp->descsz);
9205
      in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
9206
      in.descpos = offset + (in.descdata - buf);
9207
      if (in.descsz != 0
9208
          && (in.descdata >= buf + size
9209
              || in.descsz > buf - in.descdata + size))
9210
        return FALSE;
9211
 
9212
      switch (bfd_get_format (abfd))
9213
        {
9214
        default:
9215
          return TRUE;
9216
 
9217
        case bfd_core:
9218
          if (CONST_STRNEQ (in.namedata, "NetBSD-CORE"))
9219
            {
9220
              if (! elfcore_grok_netbsd_note (abfd, &in))
9221
                return FALSE;
9222
            }
9223
          else if (CONST_STRNEQ (in.namedata, "OpenBSD"))
9224
            {
9225
              if (! elfcore_grok_openbsd_note (abfd, &in))
9226
                return FALSE;
9227
            }
9228
          else if (CONST_STRNEQ (in.namedata, "QNX"))
9229
            {
9230
              if (! elfcore_grok_nto_note (abfd, &in))
9231
                return FALSE;
9232
            }
9233
          else if (CONST_STRNEQ (in.namedata, "SPU/"))
9234
            {
9235
              if (! elfcore_grok_spu_note (abfd, &in))
9236
                return FALSE;
9237
            }
9238
          else
9239
            {
9240
              if (! elfcore_grok_note (abfd, &in))
9241
                return FALSE;
9242
            }
9243
          break;
9244
 
9245
        case bfd_object:
9246
          if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0)
9247
            {
9248
              if (! elfobj_grok_gnu_note (abfd, &in))
9249
                return FALSE;
9250
            }
9251
          else if (in.namesz == sizeof "stapsdt"
9252
                   && strcmp (in.namedata, "stapsdt") == 0)
9253
            {
9254
              if (! elfobj_grok_stapsdt_note (abfd, &in))
9255
                return FALSE;
9256
            }
9257
          break;
9258
        }
9259
 
9260
      p = in.descdata + BFD_ALIGN (in.descsz, 4);
9261
    }
9262
 
9263
  return TRUE;
9264
}
9265
 
9266
static bfd_boolean
9267
elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size)
9268
{
9269
  char *buf;
9270
 
9271
  if (size <= 0)
9272
    return TRUE;
9273
 
9274
  if (bfd_seek (abfd, offset, SEEK_SET) != 0)
9275
    return FALSE;
9276
 
9277
  buf = (char *) bfd_malloc (size);
9278
  if (buf == NULL)
9279
    return FALSE;
9280
 
9281
  if (bfd_bread (buf, size, abfd) != size
9282
      || !elf_parse_notes (abfd, buf, size, offset))
9283
    {
9284
      free (buf);
9285
      return FALSE;
9286
    }
9287
 
9288
  free (buf);
9289
  return TRUE;
9290
}
9291
 
9292
/* Providing external access to the ELF program header table.  */
9293
 
9294
/* Return an upper bound on the number of bytes required to store a
9295
   copy of ABFD's program header table entries.  Return -1 if an error
9296
   occurs; bfd_get_error will return an appropriate code.  */
9297
 
9298
long
9299
bfd_get_elf_phdr_upper_bound (bfd *abfd)
9300
{
9301
  if (abfd->xvec->flavour != bfd_target_elf_flavour)
9302
    {
9303
      bfd_set_error (bfd_error_wrong_format);
9304
      return -1;
9305
    }
9306
 
9307
  return elf_elfheader (abfd)->e_phnum * sizeof (Elf_Internal_Phdr);
9308
}
9309
 
9310
/* Copy ABFD's program header table entries to *PHDRS.  The entries
9311
   will be stored as an array of Elf_Internal_Phdr structures, as
9312
   defined in include/elf/internal.h.  To find out how large the
9313
   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
9314
 
9315
   Return the number of program header table entries read, or -1 if an
9316
   error occurs; bfd_get_error will return an appropriate code.  */
9317
 
9318
int
9319
bfd_get_elf_phdrs (bfd *abfd, void *phdrs)
9320
{
9321
  int num_phdrs;
9322
 
9323
  if (abfd->xvec->flavour != bfd_target_elf_flavour)
9324
    {
9325
      bfd_set_error (bfd_error_wrong_format);
9326
      return -1;
9327
    }
9328
 
9329
  num_phdrs = elf_elfheader (abfd)->e_phnum;
9330
  memcpy (phdrs, elf_tdata (abfd)->phdr,
9331
          num_phdrs * sizeof (Elf_Internal_Phdr));
9332
 
9333
  return num_phdrs;
9334
}
9335
 
9336
enum elf_reloc_type_class
9337
_bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED)
9338
{
9339
  return reloc_class_normal;
9340
}
9341
 
9342
/* For RELA architectures, return the relocation value for a
9343
   relocation against a local symbol.  */
9344
 
9345
bfd_vma
9346
_bfd_elf_rela_local_sym (bfd *abfd,
9347
                         Elf_Internal_Sym *sym,
9348
                         asection **psec,
9349
                         Elf_Internal_Rela *rel)
9350
{
9351
  asection *sec = *psec;
9352
  bfd_vma relocation;
9353
 
9354
  relocation = (sec->output_section->vma
9355
                + sec->output_offset
9356
                + sym->st_value);
9357
  if ((sec->flags & SEC_MERGE)
9358
      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
9359
      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
9360
    {
9361
      rel->r_addend =
9362
        _bfd_merged_section_offset (abfd, psec,
9363
                                    elf_section_data (sec)->sec_info,
9364
                                    sym->st_value + rel->r_addend);
9365
      if (sec != *psec)
9366
        {
9367
          /* If we have changed the section, and our original section is
9368
             marked with SEC_EXCLUDE, it means that the original
9369
             SEC_MERGE section has been completely subsumed in some
9370
             other SEC_MERGE section.  In this case, we need to leave
9371
             some info around for --emit-relocs.  */
9372
          if ((sec->flags & SEC_EXCLUDE) != 0)
9373
            sec->kept_section = *psec;
9374
          sec = *psec;
9375
        }
9376
      rel->r_addend -= relocation;
9377
      rel->r_addend += sec->output_section->vma + sec->output_offset;
9378
    }
9379
  return relocation;
9380
}
9381
 
9382
bfd_vma
9383
_bfd_elf_rel_local_sym (bfd *abfd,
9384
                        Elf_Internal_Sym *sym,
9385
                        asection **psec,
9386
                        bfd_vma addend)
9387
{
9388
  asection *sec = *psec;
9389
 
9390
  if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
9391
    return sym->st_value + addend;
9392
 
9393
  return _bfd_merged_section_offset (abfd, psec,
9394
                                     elf_section_data (sec)->sec_info,
9395
                                     sym->st_value + addend);
9396
}
9397
 
9398
bfd_vma
9399
_bfd_elf_section_offset (bfd *abfd,
9400
                         struct bfd_link_info *info,
9401
                         asection *sec,
9402
                         bfd_vma offset)
9403
{
9404
  switch (sec->sec_info_type)
9405
    {
9406
    case ELF_INFO_TYPE_STABS:
9407
      return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
9408
                                       offset);
9409
    case ELF_INFO_TYPE_EH_FRAME:
9410
      return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
9411
    default:
9412
      if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
9413
        {
9414
          const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9415
          bfd_size_type address_size = bed->s->arch_size / 8;
9416
          offset = sec->size - offset - address_size;
9417
        }
9418
      return offset;
9419
    }
9420
}
9421
 
9422
/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
9423
   reconstruct an ELF file by reading the segments out of remote memory
9424
   based on the ELF file header at EHDR_VMA and the ELF program headers it
9425
   points to.  If not null, *LOADBASEP is filled in with the difference
9426
   between the VMAs from which the segments were read, and the VMAs the
9427
   file headers (and hence BFD's idea of each section's VMA) put them at.
9428
 
9429
   The function TARGET_READ_MEMORY is called to copy LEN bytes from the
9430
   remote memory at target address VMA into the local buffer at MYADDR; it
9431
   should return zero on success or an `errno' code on failure.  TEMPL must
9432
   be a BFD for an ELF target with the word size and byte order found in
9433
   the remote memory.  */
9434
 
9435
bfd *
9436
bfd_elf_bfd_from_remote_memory
9437
  (bfd *templ,
9438
   bfd_vma ehdr_vma,
9439
   bfd_vma *loadbasep,
9440
   int (*target_read_memory) (bfd_vma, bfd_byte *, int))
9441
{
9442
  return (*get_elf_backend_data (templ)->elf_backend_bfd_from_remote_memory)
9443
    (templ, ehdr_vma, loadbasep, target_read_memory);
9444
}
9445
 
9446
long
9447
_bfd_elf_get_synthetic_symtab (bfd *abfd,
9448
                               long symcount ATTRIBUTE_UNUSED,
9449
                               asymbol **syms ATTRIBUTE_UNUSED,
9450
                               long dynsymcount,
9451
                               asymbol **dynsyms,
9452
                               asymbol **ret)
9453
{
9454
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
9455
  asection *relplt;
9456
  asymbol *s;
9457
  const char *relplt_name;
9458
  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
9459
  arelent *p;
9460
  long count, i, n;
9461
  size_t size;
9462
  Elf_Internal_Shdr *hdr;
9463
  char *names;
9464
  asection *plt;
9465
 
9466
  *ret = NULL;
9467
 
9468
  if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
9469
    return 0;
9470
 
9471
  if (dynsymcount <= 0)
9472
    return 0;
9473
 
9474
  if (!bed->plt_sym_val)
9475
    return 0;
9476
 
9477
  relplt_name = bed->relplt_name;
9478
  if (relplt_name == NULL)
9479
    relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
9480
  relplt = bfd_get_section_by_name (abfd, relplt_name);
9481
  if (relplt == NULL)
9482
    return 0;
9483
 
9484
  hdr = &elf_section_data (relplt)->this_hdr;
9485
  if (hdr->sh_link != elf_dynsymtab (abfd)
9486
      || (hdr->sh_type != SHT_REL && hdr->sh_type != SHT_RELA))
9487
    return 0;
9488
 
9489
  plt = bfd_get_section_by_name (abfd, ".plt");
9490
  if (plt == NULL)
9491
    return 0;
9492
 
9493
  slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
9494
  if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
9495
    return -1;
9496
 
9497
  count = relplt->size / hdr->sh_entsize;
9498
  size = count * sizeof (asymbol);
9499
  p = relplt->relocation;
9500
  for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9501
    {
9502
      size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
9503
      if (p->addend != 0)
9504
        {
9505
#ifdef BFD64
9506
          size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64);
9507
#else
9508
          size += sizeof ("+0x") - 1 + 8;
9509
#endif
9510
        }
9511
    }
9512
 
9513
  s = *ret = (asymbol *) bfd_malloc (size);
9514
  if (s == NULL)
9515
    return -1;
9516
 
9517
  names = (char *) (s + count);
9518
  p = relplt->relocation;
9519
  n = 0;
9520
  for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel)
9521
    {
9522
      size_t len;
9523
      bfd_vma addr;
9524
 
9525
      addr = bed->plt_sym_val (i, plt, p);
9526
      if (addr == (bfd_vma) -1)
9527
        continue;
9528
 
9529
      *s = **p->sym_ptr_ptr;
9530
      /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
9531
         we are defining a symbol, ensure one of them is set.  */
9532
      if ((s->flags & BSF_LOCAL) == 0)
9533
        s->flags |= BSF_GLOBAL;
9534
      s->flags |= BSF_SYNTHETIC;
9535
      s->section = plt;
9536
      s->value = addr - plt->vma;
9537
      s->name = names;
9538
      s->udata.p = NULL;
9539
      len = strlen ((*p->sym_ptr_ptr)->name);
9540
      memcpy (names, (*p->sym_ptr_ptr)->name, len);
9541
      names += len;
9542
      if (p->addend != 0)
9543
        {
9544
          char buf[30], *a;
9545
 
9546
          memcpy (names, "+0x", sizeof ("+0x") - 1);
9547
          names += sizeof ("+0x") - 1;
9548
          bfd_sprintf_vma (abfd, buf, p->addend);
9549
          for (a = buf; *a == '0'; ++a)
9550
            ;
9551
          len = strlen (a);
9552
          memcpy (names, a, len);
9553
          names += len;
9554
        }
9555
      memcpy (names, "@plt", sizeof ("@plt"));
9556
      names += sizeof ("@plt");
9557
      ++s, ++n;
9558
    }
9559
 
9560
  return n;
9561
}
9562
 
9563
/* It is only used by x86-64 so far.  */
9564
asection _bfd_elf_large_com_section
9565
  = BFD_FAKE_SECTION (_bfd_elf_large_com_section,
9566
                      SEC_IS_COMMON, NULL, "LARGE_COMMON", 0);
9567
 
9568
void
9569
_bfd_elf_set_osabi (bfd * abfd,
9570
                    struct bfd_link_info * link_info ATTRIBUTE_UNUSED)
9571
{
9572
  Elf_Internal_Ehdr * i_ehdrp;  /* ELF file header, internal form.  */
9573
 
9574
  i_ehdrp = elf_elfheader (abfd);
9575
 
9576
  i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi;
9577
 
9578
  /* To make things simpler for the loader on Linux systems we set the
9579
     osabi field to ELFOSABI_LINUX if the binary contains symbols of
9580
     the STT_GNU_IFUNC type or STB_GNU_UNIQUE binding.  */
9581
  if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE
9582
      && elf_tdata (abfd)->has_gnu_symbols)
9583
    i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX;
9584
}
9585
 
9586
 
9587
/* Return TRUE for ELF symbol types that represent functions.
9588
   This is the default version of this function, which is sufficient for
9589
   most targets.  It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC.  */
9590
 
9591
bfd_boolean
9592
_bfd_elf_is_function_type (unsigned int type)
9593
{
9594
  return (type == STT_FUNC
9595
          || type == STT_GNU_IFUNC);
9596
}

powered by: WebSVN 2.1.0

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