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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [bfd/] [elf.c] - Blame information for rev 865

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

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

powered by: WebSVN 2.1.0

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