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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [bfd/] [elf.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* ELF executable support for BFD.
2
   Copyright 1993, 94, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
3
 
4
This file is part of BFD, the Binary File Descriptor library.
5
 
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
GNU General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
19
 
20
/*
21
 
22
SECTION
23
        ELF backends
24
 
25
        BFD support for ELF formats is being worked on.
26
        Currently, the best supported back ends are for sparc and i386
27
        (running svr4 or Solaris 2).
28
 
29
        Documentation of the internals of the support code still needs
30
        to be written.  The code is changing quickly enough that we
31
        haven't bothered yet.
32
 */
33
 
34
#include "bfd.h"
35
#include "sysdep.h"
36
#include "bfdlink.h"
37
#include "libbfd.h"
38
#define ARCH_SIZE 0
39
#include "elf-bfd.h"
40
 
41
static INLINE struct elf_segment_map *make_mapping
42
  PARAMS ((bfd *, asection **, unsigned int, unsigned int, boolean));
43
static boolean map_sections_to_segments PARAMS ((bfd *));
44
static int elf_sort_sections PARAMS ((const PTR, const PTR));
45
static boolean assign_file_positions_for_segments PARAMS ((bfd *));
46
static boolean assign_file_positions_except_relocs PARAMS ((bfd *));
47
static boolean prep_headers PARAMS ((bfd *));
48
static boolean swap_out_syms PARAMS ((bfd *, struct bfd_strtab_hash **, int));
49
static boolean copy_private_bfd_data PARAMS ((bfd *, bfd *));
50
static char *elf_read PARAMS ((bfd *, long, unsigned int));
51
static void elf_fake_sections PARAMS ((bfd *, asection *, PTR));
52
static boolean assign_section_numbers PARAMS ((bfd *));
53
static INLINE int sym_is_global PARAMS ((bfd *, asymbol *));
54
static boolean elf_map_symbols PARAMS ((bfd *));
55
static bfd_size_type get_program_header_size PARAMS ((bfd *));
56
static boolean elfcore_read_notes PARAMS ((bfd *, bfd_vma, bfd_vma));
57
 
58
/* Swap version information in and out.  The version information is
59
   currently size independent.  If that ever changes, this code will
60
   need to move into elfcode.h.  */
61
 
62
/* Swap in a Verdef structure.  */
63
 
64
void
65
_bfd_elf_swap_verdef_in (abfd, src, dst)
66
     bfd *abfd;
67
     const Elf_External_Verdef *src;
68
     Elf_Internal_Verdef *dst;
69
{
70
  dst->vd_version = bfd_h_get_16 (abfd, src->vd_version);
71
  dst->vd_flags   = bfd_h_get_16 (abfd, src->vd_flags);
72
  dst->vd_ndx     = bfd_h_get_16 (abfd, src->vd_ndx);
73
  dst->vd_cnt     = bfd_h_get_16 (abfd, src->vd_cnt);
74
  dst->vd_hash    = bfd_h_get_32 (abfd, src->vd_hash);
75
  dst->vd_aux     = bfd_h_get_32 (abfd, src->vd_aux);
76
  dst->vd_next    = bfd_h_get_32 (abfd, src->vd_next);
77
}
78
 
79
/* Swap out a Verdef structure.  */
80
 
81
void
82
_bfd_elf_swap_verdef_out (abfd, src, dst)
83
     bfd *abfd;
84
     const Elf_Internal_Verdef *src;
85
     Elf_External_Verdef *dst;
86
{
87
  bfd_h_put_16 (abfd, src->vd_version, dst->vd_version);
88
  bfd_h_put_16 (abfd, src->vd_flags, dst->vd_flags);
89
  bfd_h_put_16 (abfd, src->vd_ndx, dst->vd_ndx);
90
  bfd_h_put_16 (abfd, src->vd_cnt, dst->vd_cnt);
91
  bfd_h_put_32 (abfd, src->vd_hash, dst->vd_hash);
92
  bfd_h_put_32 (abfd, src->vd_aux, dst->vd_aux);
93
  bfd_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 (abfd, src, dst)
100
     bfd *abfd;
101
     const Elf_External_Verdaux *src;
102
     Elf_Internal_Verdaux *dst;
103
{
104
  dst->vda_name = bfd_h_get_32 (abfd, src->vda_name);
105
  dst->vda_next = bfd_h_get_32 (abfd, src->vda_next);
106
}
107
 
108
/* Swap out a Verdaux structure.  */
109
 
110
void
111
_bfd_elf_swap_verdaux_out (abfd, src, dst)
112
     bfd *abfd;
113
     const Elf_Internal_Verdaux *src;
114
     Elf_External_Verdaux *dst;
115
{
116
  bfd_h_put_32 (abfd, src->vda_name, dst->vda_name);
117
  bfd_h_put_32 (abfd, src->vda_next, dst->vda_next);
118
}
119
 
120
/* Swap in a Verneed structure.  */
121
 
122
void
123
_bfd_elf_swap_verneed_in (abfd, src, dst)
124
     bfd *abfd;
125
     const Elf_External_Verneed *src;
126
     Elf_Internal_Verneed *dst;
127
{
128
  dst->vn_version = bfd_h_get_16 (abfd, src->vn_version);
129
  dst->vn_cnt     = bfd_h_get_16 (abfd, src->vn_cnt);
130
  dst->vn_file    = bfd_h_get_32 (abfd, src->vn_file);
131
  dst->vn_aux     = bfd_h_get_32 (abfd, src->vn_aux);
132
  dst->vn_next    = bfd_h_get_32 (abfd, src->vn_next);
133
}
134
 
135
/* Swap out a Verneed structure.  */
136
 
137
void
138
_bfd_elf_swap_verneed_out (abfd, src, dst)
139
     bfd *abfd;
140
     const Elf_Internal_Verneed *src;
141
     Elf_External_Verneed *dst;
142
{
143
  bfd_h_put_16 (abfd, src->vn_version, dst->vn_version);
144
  bfd_h_put_16 (abfd, src->vn_cnt, dst->vn_cnt);
145
  bfd_h_put_32 (abfd, src->vn_file, dst->vn_file);
146
  bfd_h_put_32 (abfd, src->vn_aux, dst->vn_aux);
147
  bfd_h_put_32 (abfd, src->vn_next, dst->vn_next);
148
}
149
 
150
/* Swap in a Vernaux structure.  */
151
 
152
void
153
_bfd_elf_swap_vernaux_in (abfd, src, dst)
154
     bfd *abfd;
155
     const Elf_External_Vernaux *src;
156
     Elf_Internal_Vernaux *dst;
157
{
158
  dst->vna_hash  = bfd_h_get_32 (abfd, src->vna_hash);
159
  dst->vna_flags = bfd_h_get_16 (abfd, src->vna_flags);
160
  dst->vna_other = bfd_h_get_16 (abfd, src->vna_other);
161
  dst->vna_name  = bfd_h_get_32 (abfd, src->vna_name);
162
  dst->vna_next  = bfd_h_get_32 (abfd, src->vna_next);
163
}
164
 
165
/* Swap out a Vernaux structure.  */
166
 
167
void
168
_bfd_elf_swap_vernaux_out (abfd, src, dst)
169
     bfd *abfd;
170
     const Elf_Internal_Vernaux *src;
171
     Elf_External_Vernaux *dst;
172
{
173
  bfd_h_put_32 (abfd, src->vna_hash, dst->vna_hash);
174
  bfd_h_put_16 (abfd, src->vna_flags, dst->vna_flags);
175
  bfd_h_put_16 (abfd, src->vna_other, dst->vna_other);
176
  bfd_h_put_32 (abfd, src->vna_name, dst->vna_name);
177
  bfd_h_put_32 (abfd, src->vna_next, dst->vna_next);
178
}
179
 
180
/* Swap in a Versym structure.  */
181
 
182
void
183
_bfd_elf_swap_versym_in (abfd, src, dst)
184
     bfd *abfd;
185
     const Elf_External_Versym *src;
186
     Elf_Internal_Versym *dst;
187
{
188
  dst->vs_vers = bfd_h_get_16 (abfd, src->vs_vers);
189
}
190
 
191
/* Swap out a Versym structure.  */
192
 
193
void
194
_bfd_elf_swap_versym_out (abfd, src, dst)
195
     bfd *abfd;
196
     const Elf_Internal_Versym *src;
197
     Elf_External_Versym *dst;
198
{
199
  bfd_h_put_16 (abfd, src->vs_vers, dst->vs_vers);
200
}
201
 
202
/* Standard ELF hash function.  Do not change this function; you will
203
   cause invalid hash tables to be generated.  */
204
 
205
unsigned long
206
bfd_elf_hash (namearg)
207
     const char *namearg;
208
{
209
  const unsigned char *name = (const unsigned char *) namearg;
210
  unsigned long h = 0;
211
  unsigned long g;
212
  int ch;
213
 
214
  while ((ch = *name++) != '\0')
215
    {
216
      h = (h << 4) + ch;
217
      if ((g = (h & 0xf0000000)) != 0)
218
        {
219
          h ^= g >> 24;
220
          /* The ELF ABI says `h &= ~g', but this is equivalent in
221
             this case and on some machines one insn instead of two.  */
222
          h ^= g;
223
        }
224
    }
225
  return h;
226
}
227
 
228
/* Read a specified number of bytes at a specified offset in an ELF
229
   file, into a newly allocated buffer, and return a pointer to the
230
   buffer. */
231
 
232
static char *
233
elf_read (abfd, offset, size)
234
     bfd * abfd;
235
     long offset;
236
     unsigned int size;
237
{
238
  char *buf;
239
 
240
  if ((buf = bfd_alloc (abfd, size)) == NULL)
241
    return NULL;
242
  if (bfd_seek (abfd, offset, SEEK_SET) == -1)
243
    return NULL;
244
  if (bfd_read ((PTR) buf, size, 1, abfd) != size)
245
    {
246
      if (bfd_get_error () != bfd_error_system_call)
247
        bfd_set_error (bfd_error_file_truncated);
248
      return NULL;
249
    }
250
  return buf;
251
}
252
 
253
boolean
254
bfd_elf_mkobject (abfd)
255
     bfd * abfd;
256
{
257
  /* this just does initialization */
258
  /* coff_mkobject zalloc's space for tdata.coff_obj_data ... */
259
  elf_tdata (abfd) = (struct elf_obj_tdata *)
260
    bfd_zalloc (abfd, sizeof (struct elf_obj_tdata));
261
  if (elf_tdata (abfd) == 0)
262
    return false;
263
  /* since everything is done at close time, do we need any
264
     initialization? */
265
 
266
  return true;
267
}
268
 
269
boolean
270
bfd_elf_mkcorefile (abfd)
271
     bfd * abfd;
272
{
273
  /* I think this can be done just like an object file. */
274
  return bfd_elf_mkobject (abfd);
275
}
276
 
277
char *
278
bfd_elf_get_str_section (abfd, shindex)
279
     bfd * abfd;
280
     unsigned int shindex;
281
{
282
  Elf_Internal_Shdr **i_shdrp;
283
  char *shstrtab = NULL;
284
  unsigned int offset;
285
  unsigned int shstrtabsize;
286
 
287
  i_shdrp = elf_elfsections (abfd);
288
  if (i_shdrp == 0 || i_shdrp[shindex] == 0)
289
    return 0;
290
 
291
  shstrtab = (char *) i_shdrp[shindex]->contents;
292
  if (shstrtab == NULL)
293
    {
294
      /* No cached one, attempt to read, and cache what we read. */
295
      offset = i_shdrp[shindex]->sh_offset;
296
      shstrtabsize = i_shdrp[shindex]->sh_size;
297
      shstrtab = elf_read (abfd, offset, shstrtabsize);
298
      i_shdrp[shindex]->contents = (PTR) shstrtab;
299
    }
300
  return shstrtab;
301
}
302
 
303
char *
304
bfd_elf_string_from_elf_section (abfd, shindex, strindex)
305
     bfd * abfd;
306
     unsigned int shindex;
307
     unsigned int strindex;
308
{
309
  Elf_Internal_Shdr *hdr;
310
 
311
  if (strindex == 0)
312
    return "";
313
 
314
  hdr = elf_elfsections (abfd)[shindex];
315
 
316
  if (hdr->contents == NULL
317
      && bfd_elf_get_str_section (abfd, shindex) == NULL)
318
    return NULL;
319
 
320
  if (strindex >= hdr->sh_size)
321
    {
322
      (*_bfd_error_handler)
323
        (_("%s: invalid string offset %u >= %lu for section `%s'"),
324
         bfd_get_filename (abfd), strindex, (unsigned long) hdr->sh_size,
325
         ((shindex == elf_elfheader(abfd)->e_shstrndx
326
           && strindex == hdr->sh_name)
327
          ? ".shstrtab"
328
          : elf_string_from_elf_strtab (abfd, hdr->sh_name)));
329
      return "";
330
    }
331
 
332
  return ((char *) hdr->contents) + strindex;
333
}
334
 
335
/* Make a BFD section from an ELF section.  We store a pointer to the
336
   BFD section in the bfd_section field of the header.  */
337
 
338
boolean
339
_bfd_elf_make_section_from_shdr (abfd, hdr, name)
340
     bfd *abfd;
341
     Elf_Internal_Shdr *hdr;
342
     const char *name;
343
{
344
  asection *newsect;
345
  flagword flags;
346
 
347
  if (hdr->bfd_section != NULL)
348
    {
349
      BFD_ASSERT (strcmp (name,
350
                          bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
351
      return true;
352
    }
353
 
354
  newsect = bfd_make_section_anyway (abfd, name);
355
  if (newsect == NULL)
356
    return false;
357
 
358
  newsect->filepos = hdr->sh_offset;
359
 
360
  if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr)
361
      || ! bfd_set_section_size (abfd, newsect, hdr->sh_size)
362
      || ! bfd_set_section_alignment (abfd, newsect,
363
                                      bfd_log2 (hdr->sh_addralign)))
364
    return false;
365
 
366
  flags = SEC_NO_FLAGS;
367
  if (hdr->sh_type != SHT_NOBITS)
368
    flags |= SEC_HAS_CONTENTS;
369
  if ((hdr->sh_flags & SHF_ALLOC) != 0)
370
    {
371
      flags |= SEC_ALLOC;
372
      if (hdr->sh_type != SHT_NOBITS)
373
        flags |= SEC_LOAD;
374
    }
375
  if ((hdr->sh_flags & SHF_WRITE) == 0)
376
    flags |= SEC_READONLY;
377
  if ((hdr->sh_flags & SHF_EXECINSTR) != 0)
378
    flags |= SEC_CODE;
379
  else if ((flags & SEC_LOAD) != 0)
380
    flags |= SEC_DATA;
381
 
382
  /* The debugging sections appear to be recognized only by name, not
383
     any sort of flag.  */
384
  if (strncmp (name, ".debug", sizeof ".debug" - 1) == 0
385
      || strncmp (name, ".line", sizeof ".line" - 1) == 0
386
      || strncmp (name, ".stab", sizeof ".stab" - 1) == 0)
387
    flags |= SEC_DEBUGGING;
388
 
389
  /* As a GNU extension, if the name begins with .gnu.linkonce, we
390
     only link a single copy of the section.  This is used to support
391
     g++.  g++ will emit each template expansion in its own section.
392
     The symbols will be defined as weak, so that multiple definitions
393
     are permitted.  The GNU linker extension is to actually discard
394
     all but one of the sections.  */
395
  if (strncmp (name, ".gnu.linkonce", sizeof ".gnu.linkonce" - 1) == 0)
396
    flags |= SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD;
397
 
398
  if (! bfd_set_section_flags (abfd, newsect, flags))
399
    return false;
400
 
401
  if ((flags & SEC_ALLOC) != 0)
402
    {
403
      Elf_Internal_Phdr *phdr;
404
      unsigned int i;
405
 
406
      /* Look through the phdrs to see if we need to adjust the lma.
407
         If all the p_paddr fields are zero, we ignore them, since
408
         some ELF linkers produce such output.  */
409
      phdr = elf_tdata (abfd)->phdr;
410
      for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
411
        {
412
          if (phdr->p_paddr != 0)
413
            break;
414
        }
415
      if (i < elf_elfheader (abfd)->e_phnum)
416
        {
417
          phdr = elf_tdata (abfd)->phdr;
418
          for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
419
            {
420
              if (phdr->p_type == PT_LOAD
421
                  && phdr->p_vaddr != phdr->p_paddr
422
                  && phdr->p_vaddr <= hdr->sh_addr
423
                  && (phdr->p_vaddr + phdr->p_memsz
424
                      >= hdr->sh_addr + hdr->sh_size)
425
                  && ((flags & SEC_LOAD) == 0
426
                      || (phdr->p_offset <= (bfd_vma) hdr->sh_offset
427
                          && (phdr->p_offset + phdr->p_filesz
428
                              >= hdr->sh_offset + hdr->sh_size))))
429
                {
430
                  newsect->lma += phdr->p_paddr - phdr->p_vaddr;
431
                  break;
432
                }
433
            }
434
        }
435
    }
436
 
437
  hdr->bfd_section = newsect;
438
  elf_section_data (newsect)->this_hdr = *hdr;
439
 
440
  return true;
441
}
442
 
443
/*
444
INTERNAL_FUNCTION
445
        bfd_elf_find_section
446
 
447
SYNOPSIS
448
        struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name);
449
 
450
DESCRIPTION
451
        Helper functions for GDB to locate the string tables.
452
        Since BFD hides string tables from callers, GDB needs to use an
453
        internal hook to find them.  Sun's .stabstr, in particular,
454
        isn't even pointed to by the .stab section, so ordinary
455
        mechanisms wouldn't work to find it, even if we had some.
456
*/
457
 
458
struct elf_internal_shdr *
459
bfd_elf_find_section (abfd, name)
460
     bfd * abfd;
461
     char *name;
462
{
463
  Elf_Internal_Shdr **i_shdrp;
464
  char *shstrtab;
465
  unsigned int max;
466
  unsigned int i;
467
 
468
  i_shdrp = elf_elfsections (abfd);
469
  if (i_shdrp != NULL)
470
    {
471
      shstrtab = bfd_elf_get_str_section
472
        (abfd, elf_elfheader (abfd)->e_shstrndx);
473
      if (shstrtab != NULL)
474
        {
475
          max = elf_elfheader (abfd)->e_shnum;
476
          for (i = 1; i < max; i++)
477
            if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name))
478
              return i_shdrp[i];
479
        }
480
    }
481
  return 0;
482
}
483
 
484
const char *const bfd_elf_section_type_names[] = {
485
  "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB",
486
  "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE",
487
  "SHT_NOBITS", "SHT_REL", "SHT_SHLIB", "SHT_DYNSYM",
488
};
489
 
490
/* ELF relocs are against symbols.  If we are producing relocateable
491
   output, and the reloc is against an external symbol, and nothing
492
   has given us any additional addend, the resulting reloc will also
493
   be against the same symbol.  In such a case, we don't want to
494
   change anything about the way the reloc is handled, since it will
495
   all be done at final link time.  Rather than put special case code
496
   into bfd_perform_relocation, all the reloc types use this howto
497
   function.  It just short circuits the reloc if producing
498
   relocateable output against an external symbol.  */
499
 
500
/*ARGSUSED*/
501
bfd_reloc_status_type
502
bfd_elf_generic_reloc (abfd,
503
                       reloc_entry,
504
                       symbol,
505
                       data,
506
                       input_section,
507
                       output_bfd,
508
                       error_message)
509
     bfd *abfd ATTRIBUTE_UNUSED;
510
     arelent *reloc_entry;
511
     asymbol *symbol;
512
     PTR data ATTRIBUTE_UNUSED;
513
     asection *input_section;
514
     bfd *output_bfd;
515
     char **error_message ATTRIBUTE_UNUSED;
516
{
517
  if (output_bfd != (bfd *) NULL
518
      && (symbol->flags & BSF_SECTION_SYM) == 0
519
      && (! reloc_entry->howto->partial_inplace
520
          || reloc_entry->addend == 0))
521
    {
522
      reloc_entry->address += input_section->output_offset;
523
      return bfd_reloc_ok;
524
    }
525
 
526
  return bfd_reloc_continue;
527
}
528
 
529
/* Print out the program headers.  */
530
 
531
boolean
532
_bfd_elf_print_private_bfd_data (abfd, farg)
533
     bfd *abfd;
534
     PTR farg;
535
{
536
  FILE *f = (FILE *) farg;
537
  Elf_Internal_Phdr *p;
538
  asection *s;
539
  bfd_byte *dynbuf = NULL;
540
 
541
  p = elf_tdata (abfd)->phdr;
542
  if (p != NULL)
543
    {
544
      unsigned int i, c;
545
 
546
      fprintf (f, _("\nProgram Header:\n"));
547
      c = elf_elfheader (abfd)->e_phnum;
548
      for (i = 0; i < c; i++, p++)
549
        {
550
          const char *s;
551
          char buf[20];
552
 
553
          switch (p->p_type)
554
            {
555
            case PT_NULL: s = "NULL"; break;
556
            case PT_LOAD: s = "LOAD"; break;
557
            case PT_DYNAMIC: s = "DYNAMIC"; break;
558
            case PT_INTERP: s = "INTERP"; break;
559
            case PT_NOTE: s = "NOTE"; break;
560
            case PT_SHLIB: s = "SHLIB"; break;
561
            case PT_PHDR: s = "PHDR"; break;
562
            default: sprintf (buf, "0x%lx", p->p_type); s = buf; break;
563
            }
564
          fprintf (f, "%8s off    0x", s);
565
          fprintf_vma (f, p->p_offset);
566
          fprintf (f, " vaddr 0x");
567
          fprintf_vma (f, p->p_vaddr);
568
          fprintf (f, " paddr 0x");
569
          fprintf_vma (f, p->p_paddr);
570
          fprintf (f, " align 2**%u\n", bfd_log2 (p->p_align));
571
          fprintf (f, "         filesz 0x");
572
          fprintf_vma (f, p->p_filesz);
573
          fprintf (f, " memsz 0x");
574
          fprintf_vma (f, p->p_memsz);
575
          fprintf (f, " flags %c%c%c",
576
                   (p->p_flags & PF_R) != 0 ? 'r' : '-',
577
                   (p->p_flags & PF_W) != 0 ? 'w' : '-',
578
                   (p->p_flags & PF_X) != 0 ? 'x' : '-');
579
          if ((p->p_flags &~ (PF_R | PF_W | PF_X)) != 0)
580
            fprintf (f, " %lx", p->p_flags &~ (PF_R | PF_W | PF_X));
581
          fprintf (f, "\n");
582
        }
583
    }
584
 
585
  s = bfd_get_section_by_name (abfd, ".dynamic");
586
  if (s != NULL)
587
    {
588
      int elfsec;
589
      unsigned long link;
590
      bfd_byte *extdyn, *extdynend;
591
      size_t extdynsize;
592
      void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
593
 
594
      fprintf (f, _("\nDynamic Section:\n"));
595
 
596
      dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
597
      if (dynbuf == NULL)
598
        goto error_return;
599
      if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
600
                                      s->_raw_size))
601
        goto error_return;
602
 
603
      elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
604
      if (elfsec == -1)
605
        goto error_return;
606
      link = elf_elfsections (abfd)[elfsec]->sh_link;
607
 
608
      extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
609
      swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
610
 
611
      extdyn = dynbuf;
612
      extdynend = extdyn + s->_raw_size;
613
      for (; extdyn < extdynend; extdyn += extdynsize)
614
        {
615
          Elf_Internal_Dyn dyn;
616
          const char *name;
617
          char ab[20];
618
          boolean stringp;
619
 
620
          (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
621
 
622
          if (dyn.d_tag == DT_NULL)
623
            break;
624
 
625
          stringp = false;
626
          switch (dyn.d_tag)
627
            {
628
            default:
629
              sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
630
              name = ab;
631
              break;
632
 
633
            case DT_NEEDED: name = "NEEDED"; stringp = true; break;
634
            case DT_PLTRELSZ: name = "PLTRELSZ"; break;
635
            case DT_PLTGOT: name = "PLTGOT"; break;
636
            case DT_HASH: name = "HASH"; break;
637
            case DT_STRTAB: name = "STRTAB"; break;
638
            case DT_SYMTAB: name = "SYMTAB"; break;
639
            case DT_RELA: name = "RELA"; break;
640
            case DT_RELASZ: name = "RELASZ"; break;
641
            case DT_RELAENT: name = "RELAENT"; break;
642
            case DT_STRSZ: name = "STRSZ"; break;
643
            case DT_SYMENT: name = "SYMENT"; break;
644
            case DT_INIT: name = "INIT"; break;
645
            case DT_FINI: name = "FINI"; break;
646
            case DT_SONAME: name = "SONAME"; stringp = true; break;
647
            case DT_RPATH: name = "RPATH"; stringp = true; break;
648
            case DT_SYMBOLIC: name = "SYMBOLIC"; break;
649
            case DT_REL: name = "REL"; break;
650
            case DT_RELSZ: name = "RELSZ"; break;
651
            case DT_RELENT: name = "RELENT"; break;
652
            case DT_PLTREL: name = "PLTREL"; break;
653
            case DT_DEBUG: name = "DEBUG"; break;
654
            case DT_TEXTREL: name = "TEXTREL"; break;
655
            case DT_JMPREL: name = "JMPREL"; break;
656
            case DT_AUXILIARY: name = "AUXILIARY"; stringp = true; break;
657
            case DT_FILTER: name = "FILTER"; stringp = true; break;
658
            case DT_VERSYM: name = "VERSYM"; break;
659
            case DT_VERDEF: name = "VERDEF"; break;
660
            case DT_VERDEFNUM: name = "VERDEFNUM"; break;
661
            case DT_VERNEED: name = "VERNEED"; break;
662
            case DT_VERNEEDNUM: name = "VERNEEDNUM"; break;
663
            }
664
 
665
          fprintf (f, "  %-11s ", name);
666
          if (! stringp)
667
            fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
668
          else
669
            {
670
              const char *string;
671
 
672
              string = bfd_elf_string_from_elf_section (abfd, link,
673
                                                        dyn.d_un.d_val);
674
              if (string == NULL)
675
                goto error_return;
676
              fprintf (f, "%s", string);
677
            }
678
          fprintf (f, "\n");
679
        }
680
 
681
      free (dynbuf);
682
      dynbuf = NULL;
683
    }
684
 
685
  if ((elf_dynverdef (abfd) != 0 && elf_tdata (abfd)->verdef == NULL)
686
      || (elf_dynverref (abfd) != 0 && elf_tdata (abfd)->verref == NULL))
687
    {
688
      if (! _bfd_elf_slurp_version_tables (abfd))
689
        return false;
690
    }
691
 
692
  if (elf_dynverdef (abfd) != 0)
693
    {
694
      Elf_Internal_Verdef *t;
695
 
696
      fprintf (f, _("\nVersion definitions:\n"));
697
      for (t = elf_tdata (abfd)->verdef; t != NULL; t = t->vd_nextdef)
698
        {
699
          fprintf (f, "%d 0x%2.2x 0x%8.8lx %s\n", t->vd_ndx,
700
                   t->vd_flags, t->vd_hash, t->vd_nodename);
701
          if (t->vd_auxptr->vda_nextptr != NULL)
702
            {
703
              Elf_Internal_Verdaux *a;
704
 
705
              fprintf (f, "\t");
706
              for (a = t->vd_auxptr->vda_nextptr;
707
                   a != NULL;
708
                   a = a->vda_nextptr)
709
                fprintf (f, "%s ", a->vda_nodename);
710
              fprintf (f, "\n");
711
            }
712
        }
713
    }
714
 
715
  if (elf_dynverref (abfd) != 0)
716
    {
717
      Elf_Internal_Verneed *t;
718
 
719
      fprintf (f, _("\nVersion References:\n"));
720
      for (t = elf_tdata (abfd)->verref; t != NULL; t = t->vn_nextref)
721
        {
722
          Elf_Internal_Vernaux *a;
723
 
724
          fprintf (f, _("  required from %s:\n"), t->vn_filename);
725
          for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
726
            fprintf (f, "    0x%8.8lx 0x%2.2x %2.2d %s\n", a->vna_hash,
727
                     a->vna_flags, a->vna_other, a->vna_nodename);
728
        }
729
    }
730
 
731
  return true;
732
 
733
 error_return:
734
  if (dynbuf != NULL)
735
    free (dynbuf);
736
  return false;
737
}
738
 
739
/* Display ELF-specific fields of a symbol.  */
740
 
741
void
742
bfd_elf_print_symbol (abfd, filep, symbol, how)
743
     bfd *abfd;
744
     PTR filep;
745
     asymbol *symbol;
746
     bfd_print_symbol_type how;
747
{
748
  FILE *file = (FILE *) filep;
749
  switch (how)
750
    {
751
    case bfd_print_symbol_name:
752
      fprintf (file, "%s", symbol->name);
753
      break;
754
    case bfd_print_symbol_more:
755
      fprintf (file, "elf ");
756
      fprintf_vma (file, symbol->value);
757
      fprintf (file, " %lx", (long) symbol->flags);
758
      break;
759
    case bfd_print_symbol_all:
760
      {
761
        CONST char *section_name;
762
        CONST char *name = NULL;
763
        struct elf_backend_data *bed;
764
        unsigned char st_other;
765
 
766
        section_name = symbol->section ? symbol->section->name : "(*none*)";
767
 
768
        bed = get_elf_backend_data (abfd);
769
        if (bed->elf_backend_print_symbol_all)
770
            name = (*bed->elf_backend_print_symbol_all) (abfd, filep, symbol);
771
 
772
        if (name == NULL)
773
          {
774
            name = symbol->name;
775
            bfd_print_symbol_vandf ((PTR) file, symbol);
776
          }
777
 
778
        fprintf (file, " %s\t", section_name);
779
        /* Print the "other" value for a symbol.  For common symbols,
780
           we've already printed the size; now print the alignment.
781
           For other symbols, we have no specified alignment, and
782
           we've printed the address; now print the size.  */
783
        fprintf_vma (file,
784
                     (bfd_is_com_section (symbol->section)
785
                      ? ((elf_symbol_type *) symbol)->internal_elf_sym.st_value
786
                      : ((elf_symbol_type *) symbol)->internal_elf_sym.st_size));
787
 
788
        /* If we have version information, print it.  */
789
        if (elf_tdata (abfd)->dynversym_section != 0
790
            && (elf_tdata (abfd)->dynverdef_section != 0
791
                || elf_tdata (abfd)->dynverref_section != 0))
792
          {
793
            unsigned int vernum;
794
            const char *version_string;
795
 
796
            vernum = ((elf_symbol_type *) symbol)->version & VERSYM_VERSION;
797
 
798
            if (vernum == 0)
799
              version_string = "";
800
            else if (vernum == 1)
801
              version_string = "Base";
802
            else if (vernum <= elf_tdata (abfd)->cverdefs)
803
              version_string =
804
                elf_tdata (abfd)->verdef[vernum - 1].vd_nodename;
805
            else
806
              {
807
                Elf_Internal_Verneed *t;
808
 
809
                version_string = "";
810
                for (t = elf_tdata (abfd)->verref;
811
                     t != NULL;
812
                     t = t->vn_nextref)
813
                  {
814
                    Elf_Internal_Vernaux *a;
815
 
816
                    for (a = t->vn_auxptr; a != NULL; a = a->vna_nextptr)
817
                      {
818
                        if (a->vna_other == vernum)
819
                          {
820
                            version_string = a->vna_nodename;
821
                            break;
822
                          }
823
                      }
824
                  }
825
              }
826
 
827
            if ((((elf_symbol_type *) symbol)->version & VERSYM_HIDDEN) == 0)
828
              fprintf (file, "  %-11s", version_string);
829
            else
830
              {
831
                int i;
832
 
833
                fprintf (file, " (%s)", version_string);
834
                for (i = 10 - strlen (version_string); i > 0; --i)
835
                  putc (' ', file);
836
              }
837
          }
838
 
839
        /* If the st_other field is not zero, print it.  */
840
        st_other = ((elf_symbol_type *) symbol)->internal_elf_sym.st_other;
841
 
842
        switch (st_other)
843
          {
844
          case 0: break;
845
          case STV_INTERNAL:  fprintf (file, " .internal");  break;
846
          case STV_HIDDEN:    fprintf (file, " .hidden");    break;
847
          case STV_PROTECTED: fprintf (file, " .protected"); break;
848
          default:
849
            /* Some other non-defined flags are also present, so print
850
               everything hex.  */
851
            fprintf (file, " 0x%02x", (unsigned int) st_other);
852
          }
853
 
854
        fprintf (file, " %s", name);
855
      }
856
      break;
857
    }
858
}
859
 
860
/* Create an entry in an ELF linker hash table.  */
861
 
862
struct bfd_hash_entry *
863
_bfd_elf_link_hash_newfunc (entry, table, string)
864
     struct bfd_hash_entry *entry;
865
     struct bfd_hash_table *table;
866
     const char *string;
867
{
868
  struct elf_link_hash_entry *ret = (struct elf_link_hash_entry *) entry;
869
 
870
  /* Allocate the structure if it has not already been allocated by a
871
     subclass.  */
872
  if (ret == (struct elf_link_hash_entry *) NULL)
873
    ret = ((struct elf_link_hash_entry *)
874
           bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)));
875
  if (ret == (struct elf_link_hash_entry *) NULL)
876
    return (struct bfd_hash_entry *) ret;
877
 
878
  /* Call the allocation method of the superclass.  */
879
  ret = ((struct elf_link_hash_entry *)
880
         _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
881
                                 table, string));
882
  if (ret != (struct elf_link_hash_entry *) NULL)
883
    {
884
      /* Set local fields.  */
885
      ret->indx = -1;
886
      ret->size = 0;
887
      ret->dynindx = -1;
888
      ret->dynstr_index = 0;
889
      ret->weakdef = NULL;
890
      ret->got.offset = (bfd_vma) -1;
891
      ret->plt.offset = (bfd_vma) -1;
892
      ret->linker_section_pointer = (elf_linker_section_pointers_t *)0;
893
      ret->verinfo.verdef = NULL;
894
      ret->vtable_entries_used = NULL;
895
      ret->vtable_entries_size = 0;
896
      ret->vtable_parent = NULL;
897
      ret->type = STT_NOTYPE;
898
      ret->other = 0;
899
      /* Assume that we have been called by a non-ELF symbol reader.
900
         This flag is then reset by the code which reads an ELF input
901
         file.  This ensures that a symbol created by a non-ELF symbol
902
         reader will have the flag set correctly.  */
903
      ret->elf_link_hash_flags = ELF_LINK_NON_ELF;
904
    }
905
 
906
  return (struct bfd_hash_entry *) ret;
907
}
908
 
909
/* Copy data from an indirect symbol to its direct symbol, hiding the
910
   old indirect symbol.  */
911
 
912
void
913
_bfd_elf_link_hash_copy_indirect (dir, ind)
914
     struct elf_link_hash_entry *dir, *ind;
915
{
916
  /* Copy down any references that we may have already seen to the
917
     symbol which just became indirect.  */
918
 
919
  dir->elf_link_hash_flags |=
920
    (ind->elf_link_hash_flags
921
     & (ELF_LINK_HASH_REF_DYNAMIC
922
        | ELF_LINK_HASH_REF_REGULAR
923
        | ELF_LINK_HASH_REF_REGULAR_NONWEAK
924
        | ELF_LINK_NON_GOT_REF));
925
 
926
  /* Copy over the global and procedure linkage table offset entries.
927
     These may have been already set up by a check_relocs routine.  */
928
  if (dir->got.offset == (bfd_vma) -1)
929
    {
930
      dir->got.offset = ind->got.offset;
931
      ind->got.offset = (bfd_vma) -1;
932
    }
933
  BFD_ASSERT (ind->got.offset == (bfd_vma) -1);
934
 
935
  if (dir->plt.offset == (bfd_vma) -1)
936
    {
937
      dir->plt.offset = ind->plt.offset;
938
      ind->plt.offset = (bfd_vma) -1;
939
    }
940
  BFD_ASSERT (ind->plt.offset == (bfd_vma) -1);
941
 
942
  if (dir->dynindx == -1)
943
    {
944
      dir->dynindx = ind->dynindx;
945
      dir->dynstr_index = ind->dynstr_index;
946
      ind->dynindx = -1;
947
      ind->dynstr_index = 0;
948
    }
949
  BFD_ASSERT (ind->dynindx == -1);
950
}
951
 
952
void
953
_bfd_elf_link_hash_hide_symbol(h)
954
     struct elf_link_hash_entry *h;
955
{
956
  h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
957
  h->dynindx = -1;
958
  h->plt.offset = (bfd_vma) -1;
959
}
960
 
961
/* Initialize an ELF linker hash table.  */
962
 
963
boolean
964
_bfd_elf_link_hash_table_init (table, abfd, newfunc)
965
     struct elf_link_hash_table *table;
966
     bfd *abfd;
967
     struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
968
                                                struct bfd_hash_table *,
969
                                                const char *));
970
{
971
  table->dynamic_sections_created = false;
972
  table->dynobj = NULL;
973
  /* The first dynamic symbol is a dummy.  */
974
  table->dynsymcount = 1;
975
  table->dynstr = NULL;
976
  table->bucketcount = 0;
977
  table->needed = NULL;
978
  table->hgot = NULL;
979
  table->stab_info = NULL;
980
  return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
981
}
982
 
983
/* Create an ELF linker hash table.  */
984
 
985
struct bfd_link_hash_table *
986
_bfd_elf_link_hash_table_create (abfd)
987
     bfd *abfd;
988
{
989
  struct elf_link_hash_table *ret;
990
 
991
  ret = ((struct elf_link_hash_table *)
992
         bfd_alloc (abfd, sizeof (struct elf_link_hash_table)));
993
  if (ret == (struct elf_link_hash_table *) NULL)
994
    return NULL;
995
 
996
  if (! _bfd_elf_link_hash_table_init (ret, abfd, _bfd_elf_link_hash_newfunc))
997
    {
998
      bfd_release (abfd, ret);
999
      return NULL;
1000
    }
1001
 
1002
  return &ret->root;
1003
}
1004
 
1005
/* This is a hook for the ELF emulation code in the generic linker to
1006
   tell the backend linker what file name to use for the DT_NEEDED
1007
   entry for a dynamic object.  The generic linker passes name as an
1008
   empty string to indicate that no DT_NEEDED entry should be made.  */
1009
 
1010
void
1011
bfd_elf_set_dt_needed_name (abfd, name)
1012
     bfd *abfd;
1013
     const char *name;
1014
{
1015
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1016
      && bfd_get_format (abfd) == bfd_object)
1017
    elf_dt_name (abfd) = name;
1018
}
1019
 
1020
/* Get the list of DT_NEEDED entries for a link.  This is a hook for
1021
   the linker ELF emulation code.  */
1022
 
1023
struct bfd_link_needed_list *
1024
bfd_elf_get_needed_list (abfd, info)
1025
     bfd *abfd ATTRIBUTE_UNUSED;
1026
     struct bfd_link_info *info;
1027
{
1028
  if (info->hash->creator->flavour != bfd_target_elf_flavour)
1029
    return NULL;
1030
  return elf_hash_table (info)->needed;
1031
}
1032
 
1033
/* Get the name actually used for a dynamic object for a link.  This
1034
   is the SONAME entry if there is one.  Otherwise, it is the string
1035
   passed to bfd_elf_set_dt_needed_name, or it is the filename.  */
1036
 
1037
const char *
1038
bfd_elf_get_dt_soname (abfd)
1039
     bfd *abfd;
1040
{
1041
  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1042
      && bfd_get_format (abfd) == bfd_object)
1043
    return elf_dt_name (abfd);
1044
  return NULL;
1045
}
1046
 
1047
/* Get the list of DT_NEEDED entries from a BFD.  This is a hook for
1048
   the ELF linker emulation code.  */
1049
 
1050
boolean
1051
bfd_elf_get_bfd_needed_list (abfd, pneeded)
1052
     bfd *abfd;
1053
     struct bfd_link_needed_list **pneeded;
1054
{
1055
  asection *s;
1056
  bfd_byte *dynbuf = NULL;
1057
  int elfsec;
1058
  unsigned long link;
1059
  bfd_byte *extdyn, *extdynend;
1060
  size_t extdynsize;
1061
  void (*swap_dyn_in) PARAMS ((bfd *, const PTR, Elf_Internal_Dyn *));
1062
 
1063
  *pneeded = NULL;
1064
 
1065
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour
1066
      || bfd_get_format (abfd) != bfd_object)
1067
    return true;
1068
 
1069
  s = bfd_get_section_by_name (abfd, ".dynamic");
1070
  if (s == NULL || s->_raw_size == 0)
1071
    return true;
1072
 
1073
  dynbuf = (bfd_byte *) bfd_malloc (s->_raw_size);
1074
  if (dynbuf == NULL)
1075
    goto error_return;
1076
 
1077
  if (! bfd_get_section_contents (abfd, s, (PTR) dynbuf, (file_ptr) 0,
1078
                                  s->_raw_size))
1079
    goto error_return;
1080
 
1081
  elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
1082
  if (elfsec == -1)
1083
    goto error_return;
1084
 
1085
  link = elf_elfsections (abfd)[elfsec]->sh_link;
1086
 
1087
  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
1088
  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
1089
 
1090
  extdyn = dynbuf;
1091
  extdynend = extdyn + s->_raw_size;
1092
  for (; extdyn < extdynend; extdyn += extdynsize)
1093
    {
1094
      Elf_Internal_Dyn dyn;
1095
 
1096
      (*swap_dyn_in) (abfd, (PTR) extdyn, &dyn);
1097
 
1098
      if (dyn.d_tag == DT_NULL)
1099
        break;
1100
 
1101
      if (dyn.d_tag == DT_NEEDED)
1102
        {
1103
          const char *string;
1104
          struct bfd_link_needed_list *l;
1105
 
1106
          string = bfd_elf_string_from_elf_section (abfd, link,
1107
                                                    dyn.d_un.d_val);
1108
          if (string == NULL)
1109
            goto error_return;
1110
 
1111
          l = (struct bfd_link_needed_list *) bfd_alloc (abfd, sizeof *l);
1112
          if (l == NULL)
1113
            goto error_return;
1114
 
1115
          l->by = abfd;
1116
          l->name = string;
1117
          l->next = *pneeded;
1118
          *pneeded = l;
1119
        }
1120
    }
1121
 
1122
  free (dynbuf);
1123
 
1124
  return true;
1125
 
1126
 error_return:
1127
  if (dynbuf != NULL)
1128
    free (dynbuf);
1129
  return false;
1130
}
1131
 
1132
/* Allocate an ELF string table--force the first byte to be zero.  */
1133
 
1134
struct bfd_strtab_hash *
1135
_bfd_elf_stringtab_init ()
1136
{
1137
  struct bfd_strtab_hash *ret;
1138
 
1139
  ret = _bfd_stringtab_init ();
1140
  if (ret != NULL)
1141
    {
1142
      bfd_size_type loc;
1143
 
1144
      loc = _bfd_stringtab_add (ret, "", true, false);
1145
      BFD_ASSERT (loc == 0 || loc == (bfd_size_type) -1);
1146
      if (loc == (bfd_size_type) -1)
1147
        {
1148
          _bfd_stringtab_free (ret);
1149
          ret = NULL;
1150
        }
1151
    }
1152
  return ret;
1153
}
1154
 
1155
/* ELF .o/exec file reading */
1156
 
1157
/* Create a new bfd section from an ELF section header. */
1158
 
1159
boolean
1160
bfd_section_from_shdr (abfd, shindex)
1161
     bfd *abfd;
1162
     unsigned int shindex;
1163
{
1164
  Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex];
1165
  Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd);
1166
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
1167
  char *name;
1168
 
1169
  name = elf_string_from_elf_strtab (abfd, hdr->sh_name);
1170
 
1171
  switch (hdr->sh_type)
1172
    {
1173
    case SHT_NULL:
1174
      /* Inactive section. Throw it away.  */
1175
      return true;
1176
 
1177
    case SHT_PROGBITS:  /* Normal section with contents.  */
1178
    case SHT_DYNAMIC:   /* Dynamic linking information.  */
1179
    case SHT_NOBITS:    /* .bss section.  */
1180
    case SHT_HASH:      /* .hash section.  */
1181
    case SHT_NOTE:      /* .note section.  */
1182
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1183
 
1184
    case SHT_SYMTAB:            /* A symbol table */
1185
      if (elf_onesymtab (abfd) == shindex)
1186
        return true;
1187
 
1188
      BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1189
      BFD_ASSERT (elf_onesymtab (abfd) == 0);
1190
      elf_onesymtab (abfd) = shindex;
1191
      elf_tdata (abfd)->symtab_hdr = *hdr;
1192
      elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr;
1193
      abfd->flags |= HAS_SYMS;
1194
 
1195
      /* Sometimes a shared object will map in the symbol table.  If
1196
         SHF_ALLOC is set, and this is a shared object, then we also
1197
         treat this section as a BFD section.  We can not base the
1198
         decision purely on SHF_ALLOC, because that flag is sometimes
1199
         set in a relocateable object file, which would confuse the
1200
         linker.  */
1201
      if ((hdr->sh_flags & SHF_ALLOC) != 0
1202
          && (abfd->flags & DYNAMIC) != 0
1203
          && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
1204
        return false;
1205
 
1206
      return true;
1207
 
1208
    case SHT_DYNSYM:            /* A dynamic symbol table */
1209
      if (elf_dynsymtab (abfd) == shindex)
1210
        return true;
1211
 
1212
      BFD_ASSERT (hdr->sh_entsize == bed->s->sizeof_sym);
1213
      BFD_ASSERT (elf_dynsymtab (abfd) == 0);
1214
      elf_dynsymtab (abfd) = shindex;
1215
      elf_tdata (abfd)->dynsymtab_hdr = *hdr;
1216
      elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr;
1217
      abfd->flags |= HAS_SYMS;
1218
 
1219
      /* Besides being a symbol table, we also treat this as a regular
1220
         section, so that objcopy can handle it.  */
1221
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1222
 
1223
    case SHT_STRTAB:            /* A string table */
1224
      if (hdr->bfd_section != NULL)
1225
        return true;
1226
      if (ehdr->e_shstrndx == shindex)
1227
        {
1228
          elf_tdata (abfd)->shstrtab_hdr = *hdr;
1229
          elf_elfsections (abfd)[shindex] = &elf_tdata (abfd)->shstrtab_hdr;
1230
          return true;
1231
        }
1232
      {
1233
        unsigned int i;
1234
 
1235
        for (i = 1; i < ehdr->e_shnum; i++)
1236
          {
1237
            Elf_Internal_Shdr *hdr2 = elf_elfsections (abfd)[i];
1238
            if (hdr2->sh_link == shindex)
1239
              {
1240
                if (! bfd_section_from_shdr (abfd, i))
1241
                  return false;
1242
                if (elf_onesymtab (abfd) == i)
1243
                  {
1244
                    elf_tdata (abfd)->strtab_hdr = *hdr;
1245
                    elf_elfsections (abfd)[shindex] =
1246
                      &elf_tdata (abfd)->strtab_hdr;
1247
                    return true;
1248
                  }
1249
                if (elf_dynsymtab (abfd) == i)
1250
                  {
1251
                    elf_tdata (abfd)->dynstrtab_hdr = *hdr;
1252
                    elf_elfsections (abfd)[shindex] = hdr =
1253
                      &elf_tdata (abfd)->dynstrtab_hdr;
1254
                    /* We also treat this as a regular section, so
1255
                       that objcopy can handle it.  */
1256
                    break;
1257
                  }
1258
#if 0 /* Not handling other string tables specially right now.  */
1259
                hdr2 = elf_elfsections (abfd)[i];       /* in case it moved */
1260
                /* We have a strtab for some random other section.  */
1261
                newsect = (asection *) hdr2->bfd_section;
1262
                if (!newsect)
1263
                  break;
1264
                hdr->bfd_section = newsect;
1265
                hdr2 = &elf_section_data (newsect)->str_hdr;
1266
                *hdr2 = *hdr;
1267
                elf_elfsections (abfd)[shindex] = hdr2;
1268
#endif
1269
              }
1270
          }
1271
      }
1272
 
1273
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1274
 
1275
    case SHT_REL:
1276
    case SHT_RELA:
1277
      /* *These* do a lot of work -- but build no sections!  */
1278
      {
1279
        asection *target_sect;
1280
        Elf_Internal_Shdr *hdr2;
1281
 
1282
        /* Check for a bogus link to avoid crashing.  */
1283
        if (hdr->sh_link >= ehdr->e_shnum)
1284
          {
1285
            ((*_bfd_error_handler)
1286
             (_("%s: invalid link %lu for reloc section %s (index %u)"),
1287
              bfd_get_filename (abfd), hdr->sh_link, name, shindex));
1288
            return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1289
          }
1290
 
1291
        /* For some incomprehensible reason Oracle distributes
1292
           libraries for Solaris in which some of the objects have
1293
           bogus sh_link fields.  It would be nice if we could just
1294
           reject them, but, unfortunately, some people need to use
1295
           them.  We scan through the section headers; if we find only
1296
           one suitable symbol table, we clobber the sh_link to point
1297
           to it.  I hope this doesn't break anything.  */
1298
        if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB
1299
            && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM)
1300
          {
1301
            int scan;
1302
            int found;
1303
 
1304
            found = 0;
1305
            for (scan = 1; scan < ehdr->e_shnum; scan++)
1306
              {
1307
                if (elf_elfsections (abfd)[scan]->sh_type == SHT_SYMTAB
1308
                    || elf_elfsections (abfd)[scan]->sh_type == SHT_DYNSYM)
1309
                  {
1310
                    if (found != 0)
1311
                      {
1312
                        found = 0;
1313
                        break;
1314
                      }
1315
                    found = scan;
1316
                  }
1317
              }
1318
            if (found != 0)
1319
              hdr->sh_link = found;
1320
          }
1321
 
1322
        /* Get the symbol table.  */
1323
        if (elf_elfsections (abfd)[hdr->sh_link]->sh_type == SHT_SYMTAB
1324
            && ! bfd_section_from_shdr (abfd, hdr->sh_link))
1325
          return false;
1326
 
1327
        /* If this reloc section does not use the main symbol table we
1328
           don't treat it as a reloc section.  BFD can't adequately
1329
           represent such a section, so at least for now, we don't
1330
           try.  We just present it as a normal section.  */
1331
        if (hdr->sh_link != elf_onesymtab (abfd))
1332
          return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1333
 
1334
        if (! bfd_section_from_shdr (abfd, hdr->sh_info))
1335
          return false;
1336
        target_sect = bfd_section_from_elf_index (abfd, hdr->sh_info);
1337
        if (target_sect == NULL)
1338
          return false;
1339
 
1340
        if ((target_sect->flags & SEC_RELOC) == 0
1341
            || target_sect->reloc_count == 0)
1342
          hdr2 = &elf_section_data (target_sect)->rel_hdr;
1343
        else
1344
          {
1345
            BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL);
1346
            hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, sizeof (*hdr2));
1347
            elf_section_data (target_sect)->rel_hdr2 = hdr2;
1348
          }
1349
        *hdr2 = *hdr;
1350
        elf_elfsections (abfd)[shindex] = hdr2;
1351
        target_sect->reloc_count += hdr->sh_size / hdr->sh_entsize;
1352
        target_sect->flags |= SEC_RELOC;
1353
        target_sect->relocation = NULL;
1354
        target_sect->rel_filepos = hdr->sh_offset;
1355
        /* In the section to which the relocations apply, mark whether
1356
           its relocations are of the REL or RELA variety.  */
1357
        elf_section_data (target_sect)->use_rela_p
1358
          = (hdr->sh_type == SHT_RELA);
1359
        abfd->flags |= HAS_RELOC;
1360
        return true;
1361
      }
1362
      break;
1363
 
1364
    case SHT_GNU_verdef:
1365
      elf_dynverdef (abfd) = shindex;
1366
      elf_tdata (abfd)->dynverdef_hdr = *hdr;
1367
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1368
      break;
1369
 
1370
    case SHT_GNU_versym:
1371
      elf_dynversym (abfd) = shindex;
1372
      elf_tdata (abfd)->dynversym_hdr = *hdr;
1373
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1374
      break;
1375
 
1376
    case SHT_GNU_verneed:
1377
      elf_dynverref (abfd) = shindex;
1378
      elf_tdata (abfd)->dynverref_hdr = *hdr;
1379
      return _bfd_elf_make_section_from_shdr (abfd, hdr, name);
1380
      break;
1381
 
1382
    case SHT_SHLIB:
1383
      return true;
1384
 
1385
    default:
1386
      /* Check for any processor-specific section types.  */
1387
      {
1388
        if (bed->elf_backend_section_from_shdr)
1389
          (*bed->elf_backend_section_from_shdr) (abfd, hdr, name);
1390
      }
1391
      break;
1392
    }
1393
 
1394
  return true;
1395
}
1396
 
1397
/* Given an ELF section number, retrieve the corresponding BFD
1398
   section.  */
1399
 
1400
asection *
1401
bfd_section_from_elf_index (abfd, index)
1402
     bfd *abfd;
1403
     unsigned int index;
1404
{
1405
  BFD_ASSERT (index > 0 && index < SHN_LORESERVE);
1406
  if (index >= elf_elfheader (abfd)->e_shnum)
1407
    return NULL;
1408
  return elf_elfsections (abfd)[index]->bfd_section;
1409
}
1410
 
1411
boolean
1412
_bfd_elf_new_section_hook (abfd, sec)
1413
     bfd *abfd;
1414
     asection *sec;
1415
{
1416
  struct bfd_elf_section_data *sdata;
1417
 
1418
  sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, sizeof (*sdata));
1419
  if (!sdata)
1420
    return false;
1421
  sec->used_by_bfd = (PTR) sdata;
1422
 
1423
  /* Indicate whether or not this section should use RELA relocations.  */
1424
  sdata->use_rela_p
1425
    = get_elf_backend_data (abfd)->default_use_rela_p;
1426
 
1427
  return true;
1428
}
1429
 
1430
/* Create a new bfd section from an ELF program header.
1431
 
1432
   Since program segments have no names, we generate a synthetic name
1433
   of the form segment<NUM>, where NUM is generally the index in the
1434
   program header table.  For segments that are split (see below) we
1435
   generate the names segment<NUM>a and segment<NUM>b.
1436
 
1437
   Note that some program segments may have a file size that is different than
1438
   (less than) the memory size.  All this means is that at execution the
1439
   system must allocate the amount of memory specified by the memory size,
1440
   but only initialize it with the first "file size" bytes read from the
1441
   file.  This would occur for example, with program segments consisting
1442
   of combined data+bss.
1443
 
1444
   To handle the above situation, this routine generates TWO bfd sections
1445
   for the single program segment.  The first has the length specified by
1446
   the file size of the segment, and the second has the length specified
1447
   by the difference between the two sizes.  In effect, the segment is split
1448
   into it's initialized and uninitialized parts.
1449
 
1450
 */
1451
 
1452
boolean
1453
_bfd_elf_make_section_from_phdr (abfd, hdr, index, typename)
1454
     bfd *abfd;
1455
     Elf_Internal_Phdr *hdr;
1456
     int index;
1457
     const char *typename;
1458
{
1459
  asection *newsect;
1460
  char *name;
1461
  char namebuf[64];
1462
  int split;
1463
 
1464
  split = ((hdr->p_memsz > 0)
1465
            && (hdr->p_filesz > 0)
1466
            && (hdr->p_memsz > hdr->p_filesz));
1467
  sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : "");
1468
  name = bfd_alloc (abfd, strlen (namebuf) + 1);
1469
  if (!name)
1470
    return false;
1471
  strcpy (name, namebuf);
1472
  newsect = bfd_make_section (abfd, name);
1473
  if (newsect == NULL)
1474
    return false;
1475
  newsect->vma = hdr->p_vaddr;
1476
  newsect->lma = hdr->p_paddr;
1477
  newsect->_raw_size = hdr->p_filesz;
1478
  newsect->filepos = hdr->p_offset;
1479
  newsect->flags |= SEC_HAS_CONTENTS;
1480
  if (hdr->p_type == PT_LOAD)
1481
    {
1482
      newsect->flags |= SEC_ALLOC;
1483
      newsect->flags |= SEC_LOAD;
1484
      if (hdr->p_flags & PF_X)
1485
        {
1486
          /* FIXME: all we known is that it has execute PERMISSION,
1487
             may be data. */
1488
          newsect->flags |= SEC_CODE;
1489
        }
1490
    }
1491
  if (!(hdr->p_flags & PF_W))
1492
    {
1493
      newsect->flags |= SEC_READONLY;
1494
    }
1495
 
1496
  if (split)
1497
    {
1498
      sprintf (namebuf, "%s%db", typename, index);
1499
      name = bfd_alloc (abfd, strlen (namebuf) + 1);
1500
      if (!name)
1501
        return false;
1502
      strcpy (name, namebuf);
1503
      newsect = bfd_make_section (abfd, name);
1504
      if (newsect == NULL)
1505
        return false;
1506
      newsect->vma = hdr->p_vaddr + hdr->p_filesz;
1507
      newsect->lma = hdr->p_paddr + hdr->p_filesz;
1508
      newsect->_raw_size = hdr->p_memsz - hdr->p_filesz;
1509
      if (hdr->p_type == PT_LOAD)
1510
        {
1511
          newsect->flags |= SEC_ALLOC;
1512
          if (hdr->p_flags & PF_X)
1513
            newsect->flags |= SEC_CODE;
1514
        }
1515
      if (!(hdr->p_flags & PF_W))
1516
        newsect->flags |= SEC_READONLY;
1517
    }
1518
 
1519
  return true;
1520
}
1521
 
1522
boolean
1523
bfd_section_from_phdr (abfd, hdr, index)
1524
     bfd *abfd;
1525
     Elf_Internal_Phdr *hdr;
1526
     int index;
1527
{
1528
  struct elf_backend_data *bed;
1529
 
1530
  switch (hdr->p_type)
1531
    {
1532
    case PT_NULL:
1533
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "null");
1534
 
1535
    case PT_LOAD:
1536
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "load");
1537
 
1538
    case PT_DYNAMIC:
1539
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "dynamic");
1540
 
1541
    case PT_INTERP:
1542
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "interp");
1543
 
1544
    case PT_NOTE:
1545
      if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note"))
1546
        return false;
1547
      if (! elfcore_read_notes (abfd, hdr->p_offset, hdr->p_filesz))
1548
        return false;
1549
      return true;
1550
 
1551
    case PT_SHLIB:
1552
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "shlib");
1553
 
1554
    case PT_PHDR:
1555
      return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "phdr");
1556
 
1557
    default:
1558
      /* Check for any processor-specific program segment types.
1559
         If no handler for them, default to making "segment" sections. */
1560
      bed = get_elf_backend_data (abfd);
1561
      if (bed->elf_backend_section_from_phdr)
1562
        return (*bed->elf_backend_section_from_phdr) (abfd, hdr, index);
1563
      else
1564
        return _bfd_elf_make_section_from_phdr (abfd, hdr, index, "segment");
1565
    }
1566
}
1567
 
1568
/* Initialize REL_HDR, the section-header for new section, containing
1569
   relocations against ASECT.  If USE_RELA_P is true, we use RELA
1570
   relocations; otherwise, we use REL relocations.  */
1571
 
1572
boolean
1573
_bfd_elf_init_reloc_shdr (abfd, rel_hdr, asect, use_rela_p)
1574
     bfd *abfd;
1575
     Elf_Internal_Shdr *rel_hdr;
1576
     asection *asect;
1577
     boolean use_rela_p;
1578
{
1579
  char *name;
1580
  struct elf_backend_data *bed;
1581
 
1582
  bed = get_elf_backend_data (abfd);
1583
  name = bfd_alloc (abfd, sizeof ".rela" + strlen (asect->name));
1584
  if (name == NULL)
1585
    return false;
1586
  sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name);
1587
  rel_hdr->sh_name =
1588
    (unsigned int) _bfd_stringtab_add (elf_shstrtab (abfd), name,
1589
                                       true, false);
1590
  if (rel_hdr->sh_name == (unsigned int) -1)
1591
    return false;
1592
  rel_hdr->sh_type = use_rela_p ? SHT_RELA : SHT_REL;
1593
  rel_hdr->sh_entsize = (use_rela_p
1594
                         ? bed->s->sizeof_rela
1595
                         : bed->s->sizeof_rel);
1596
  rel_hdr->sh_addralign = bed->s->file_align;
1597
  rel_hdr->sh_flags = 0;
1598
  rel_hdr->sh_addr = 0;
1599
  rel_hdr->sh_size = 0;
1600
  rel_hdr->sh_offset = 0;
1601
 
1602
  return true;
1603
}
1604
 
1605
/* Set up an ELF internal section header for a section.  */
1606
 
1607
/*ARGSUSED*/
1608
static void
1609
elf_fake_sections (abfd, asect, failedptrarg)
1610
     bfd *abfd;
1611
     asection *asect;
1612
     PTR failedptrarg;
1613
{
1614
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
1615
  boolean *failedptr = (boolean *) failedptrarg;
1616
  Elf_Internal_Shdr *this_hdr;
1617
 
1618
  if (*failedptr)
1619
    {
1620
      /* We already failed; just get out of the bfd_map_over_sections
1621
         loop.  */
1622
      return;
1623
    }
1624
 
1625
  this_hdr = &elf_section_data (asect)->this_hdr;
1626
 
1627
  this_hdr->sh_name = (unsigned long) _bfd_stringtab_add (elf_shstrtab (abfd),
1628
                                                          asect->name,
1629
                                                          true, false);
1630
  if (this_hdr->sh_name == (unsigned long) -1)
1631
    {
1632
      *failedptr = true;
1633
      return;
1634
    }
1635
 
1636
  this_hdr->sh_flags = 0;
1637
 
1638
  if ((asect->flags & SEC_ALLOC) != 0
1639
      || asect->user_set_vma)
1640
    this_hdr->sh_addr = asect->vma;
1641
  else
1642
    this_hdr->sh_addr = 0;
1643
 
1644
  this_hdr->sh_offset = 0;
1645
  this_hdr->sh_size = asect->_raw_size;
1646
  this_hdr->sh_link = 0;
1647
  this_hdr->sh_addralign = 1 << asect->alignment_power;
1648
  /* The sh_entsize and sh_info fields may have been set already by
1649
     copy_private_section_data.  */
1650
 
1651
  this_hdr->bfd_section = asect;
1652
  this_hdr->contents = NULL;
1653
 
1654
  /* FIXME: This should not be based on section names.  */
1655
  if (strcmp (asect->name, ".dynstr") == 0)
1656
    this_hdr->sh_type = SHT_STRTAB;
1657
  else if (strcmp (asect->name, ".hash") == 0)
1658
    {
1659
      this_hdr->sh_type = SHT_HASH;
1660
      this_hdr->sh_entsize = bed->s->sizeof_hash_entry;
1661
    }
1662
  else if (strcmp (asect->name, ".dynsym") == 0)
1663
    {
1664
      this_hdr->sh_type = SHT_DYNSYM;
1665
      this_hdr->sh_entsize = bed->s->sizeof_sym;
1666
    }
1667
  else if (strcmp (asect->name, ".dynamic") == 0)
1668
    {
1669
      this_hdr->sh_type = SHT_DYNAMIC;
1670
      this_hdr->sh_entsize = bed->s->sizeof_dyn;
1671
    }
1672
  else if (strncmp (asect->name, ".rela", 5) == 0
1673
           && get_elf_backend_data (abfd)->may_use_rela_p)
1674
    {
1675
      this_hdr->sh_type = SHT_RELA;
1676
      this_hdr->sh_entsize = bed->s->sizeof_rela;
1677
    }
1678
  else if (strncmp (asect->name, ".rel", 4) == 0
1679
           && get_elf_backend_data (abfd)->may_use_rel_p)
1680
    {
1681
      this_hdr->sh_type = SHT_REL;
1682
      this_hdr->sh_entsize = bed->s->sizeof_rel;
1683
    }
1684
  else if (strncmp (asect->name, ".note", 5) == 0)
1685
    this_hdr->sh_type = SHT_NOTE;
1686
  else if (strncmp (asect->name, ".stab", 5) == 0
1687
           && strcmp (asect->name + strlen (asect->name) - 3, "str") == 0)
1688
    this_hdr->sh_type = SHT_STRTAB;
1689
  else if (strcmp (asect->name, ".gnu.version") == 0)
1690
    {
1691
      this_hdr->sh_type = SHT_GNU_versym;
1692
      this_hdr->sh_entsize = sizeof (Elf_External_Versym);
1693
    }
1694
  else if (strcmp (asect->name, ".gnu.version_d") == 0)
1695
    {
1696
      this_hdr->sh_type = SHT_GNU_verdef;
1697
      this_hdr->sh_entsize = 0;
1698
      /* objcopy or strip will copy over sh_info, but may not set
1699
         cverdefs.  The linker will set cverdefs, but sh_info will be
1700
         zero.  */
1701
      if (this_hdr->sh_info == 0)
1702
        this_hdr->sh_info = elf_tdata (abfd)->cverdefs;
1703
      else
1704
        BFD_ASSERT (elf_tdata (abfd)->cverdefs == 0
1705
                    || this_hdr->sh_info == elf_tdata (abfd)->cverdefs);
1706
    }
1707
  else if (strcmp (asect->name, ".gnu.version_r") == 0)
1708
    {
1709
      this_hdr->sh_type = SHT_GNU_verneed;
1710
      this_hdr->sh_entsize = 0;
1711
      /* objcopy or strip will copy over sh_info, but may not set
1712
         cverrefs.  The linker will set cverrefs, but sh_info will be
1713
         zero.  */
1714
      if (this_hdr->sh_info == 0)
1715
        this_hdr->sh_info = elf_tdata (abfd)->cverrefs;
1716
      else
1717
        BFD_ASSERT (elf_tdata (abfd)->cverrefs == 0
1718
                    || this_hdr->sh_info == elf_tdata (abfd)->cverrefs);
1719
    }
1720
  else if ((asect->flags & SEC_ALLOC) != 0
1721
           && (asect->flags & SEC_LOAD) != 0)
1722
    this_hdr->sh_type = SHT_PROGBITS;
1723
  else if ((asect->flags & SEC_ALLOC) != 0
1724
           && ((asect->flags & SEC_LOAD) == 0))
1725
    this_hdr->sh_type = SHT_NOBITS;
1726
  else
1727
    {
1728
      /* Who knows?  */
1729
      this_hdr->sh_type = SHT_PROGBITS;
1730
    }
1731
 
1732
  if ((asect->flags & SEC_ALLOC) != 0)
1733
    this_hdr->sh_flags |= SHF_ALLOC;
1734
  if ((asect->flags & SEC_READONLY) == 0)
1735
    this_hdr->sh_flags |= SHF_WRITE;
1736
  if ((asect->flags & SEC_CODE) != 0)
1737
    this_hdr->sh_flags |= SHF_EXECINSTR;
1738
 
1739
  /* Check for processor-specific section types.  */
1740
  if (bed->elf_backend_fake_sections)
1741
    (*bed->elf_backend_fake_sections) (abfd, this_hdr, asect);
1742
 
1743
  /* If the section has relocs, set up a section header for the
1744
     SHT_REL[A] section.  If two relocation sections are required for
1745
     this section, it is up to the processor-specific back-end to
1746
     create the other.  */
1747
  if ((asect->flags & SEC_RELOC) != 0
1748
      && !_bfd_elf_init_reloc_shdr (abfd,
1749
                                    &elf_section_data (asect)->rel_hdr,
1750
                                    asect,
1751
                                    elf_section_data (asect)->use_rela_p))
1752
    *failedptr = true;
1753
}
1754
 
1755
/* Assign all ELF section numbers.  The dummy first section is handled here
1756
   too.  The link/info pointers for the standard section types are filled
1757
   in here too, while we're at it.  */
1758
 
1759
static boolean
1760
assign_section_numbers (abfd)
1761
     bfd *abfd;
1762
{
1763
  struct elf_obj_tdata *t = elf_tdata (abfd);
1764
  asection *sec;
1765
  unsigned int section_number;
1766
  Elf_Internal_Shdr **i_shdrp;
1767
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
1768
 
1769
  section_number = 1;
1770
 
1771
  for (sec = abfd->sections; sec; sec = sec->next)
1772
    {
1773
      struct bfd_elf_section_data *d = elf_section_data (sec);
1774
 
1775
      d->this_idx = section_number++;
1776
      if ((sec->flags & SEC_RELOC) == 0)
1777
        d->rel_idx = 0;
1778
      else
1779
        d->rel_idx = section_number++;
1780
 
1781
      if (d->rel_hdr2)
1782
        d->rel_idx2 = section_number++;
1783
      else
1784
        d->rel_idx2 = 0;
1785
    }
1786
 
1787
  t->shstrtab_section = section_number++;
1788
  elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
1789
  t->shstrtab_hdr.sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
1790
 
1791
  if (bfd_get_symcount (abfd) > 0)
1792
    {
1793
      t->symtab_section = section_number++;
1794
      t->strtab_section = section_number++;
1795
    }
1796
 
1797
  elf_elfheader (abfd)->e_shnum = section_number;
1798
 
1799
  /* Set up the list of section header pointers, in agreement with the
1800
     indices.  */
1801
  i_shdrp = ((Elf_Internal_Shdr **)
1802
             bfd_alloc (abfd, section_number * sizeof (Elf_Internal_Shdr *)));
1803
  if (i_shdrp == NULL)
1804
    return false;
1805
 
1806
  i_shdrp[0] = ((Elf_Internal_Shdr *)
1807
                bfd_alloc (abfd, sizeof (Elf_Internal_Shdr)));
1808
  if (i_shdrp[0] == NULL)
1809
    {
1810
      bfd_release (abfd, i_shdrp);
1811
      return false;
1812
    }
1813
  memset (i_shdrp[0], 0, sizeof (Elf_Internal_Shdr));
1814
 
1815
  elf_elfsections (abfd) = i_shdrp;
1816
 
1817
  i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
1818
  if (bfd_get_symcount (abfd) > 0)
1819
    {
1820
      i_shdrp[t->symtab_section] = &t->symtab_hdr;
1821
      i_shdrp[t->strtab_section] = &t->strtab_hdr;
1822
      t->symtab_hdr.sh_link = t->strtab_section;
1823
    }
1824
  for (sec = abfd->sections; sec; sec = sec->next)
1825
    {
1826
      struct bfd_elf_section_data *d = elf_section_data (sec);
1827
      asection *s;
1828
      const char *name;
1829
 
1830
      i_shdrp[d->this_idx] = &d->this_hdr;
1831
      if (d->rel_idx != 0)
1832
        i_shdrp[d->rel_idx] = &d->rel_hdr;
1833
      if (d->rel_idx2 != 0)
1834
        i_shdrp[d->rel_idx2] = d->rel_hdr2;
1835
 
1836
      /* Fill in the sh_link and sh_info fields while we're at it.  */
1837
 
1838
      /* sh_link of a reloc section is the section index of the symbol
1839
         table.  sh_info is the section index of the section to which
1840
         the relocation entries apply.  */
1841
      if (d->rel_idx != 0)
1842
        {
1843
          d->rel_hdr.sh_link = t->symtab_section;
1844
          d->rel_hdr.sh_info = d->this_idx;
1845
        }
1846
      if (d->rel_idx2 != 0)
1847
        {
1848
          d->rel_hdr2->sh_link = t->symtab_section;
1849
          d->rel_hdr2->sh_info = d->this_idx;
1850
        }
1851
 
1852
      switch (d->this_hdr.sh_type)
1853
        {
1854
        case SHT_REL:
1855
        case SHT_RELA:
1856
          /* A reloc section which we are treating as a normal BFD
1857
             section.  sh_link is the section index of the symbol
1858
             table.  sh_info is the section index of the section to
1859
             which the relocation entries apply.  We assume that an
1860
             allocated reloc section uses the dynamic symbol table.
1861
             FIXME: How can we be sure?  */
1862
          s = bfd_get_section_by_name (abfd, ".dynsym");
1863
          if (s != NULL)
1864
            d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1865
 
1866
          /* We look up the section the relocs apply to by name.  */
1867
          name = sec->name;
1868
          if (d->this_hdr.sh_type == SHT_REL)
1869
            name += 4;
1870
          else
1871
            name += 5;
1872
          s = bfd_get_section_by_name (abfd, name);
1873
          if (s != NULL)
1874
            d->this_hdr.sh_info = elf_section_data (s)->this_idx;
1875
          break;
1876
 
1877
        case SHT_STRTAB:
1878
          /* We assume that a section named .stab*str is a stabs
1879
             string section.  We look for a section with the same name
1880
             but without the trailing ``str'', and set its sh_link
1881
             field to point to this section.  */
1882
          if (strncmp (sec->name, ".stab", sizeof ".stab" - 1) == 0
1883
              && strcmp (sec->name + strlen (sec->name) - 3, "str") == 0)
1884
            {
1885
              size_t len;
1886
              char *alc;
1887
 
1888
              len = strlen (sec->name);
1889
              alc = (char *) bfd_malloc (len - 2);
1890
              if (alc == NULL)
1891
                return false;
1892
              strncpy (alc, sec->name, len - 3);
1893
              alc[len - 3] = '\0';
1894
              s = bfd_get_section_by_name (abfd, alc);
1895
              free (alc);
1896
              if (s != NULL)
1897
                {
1898
                  elf_section_data (s)->this_hdr.sh_link = d->this_idx;
1899
 
1900
                  /* This is a .stab section.  */
1901
                  elf_section_data (s)->this_hdr.sh_entsize =
1902
                    4 + 2 * (bed->s->arch_size / 8);
1903
                }
1904
            }
1905
          break;
1906
 
1907
        case SHT_DYNAMIC:
1908
        case SHT_DYNSYM:
1909
        case SHT_GNU_verneed:
1910
        case SHT_GNU_verdef:
1911
          /* sh_link is the section header index of the string table
1912
             used for the dynamic entries, or the symbol table, or the
1913
             version strings.  */
1914
          s = bfd_get_section_by_name (abfd, ".dynstr");
1915
          if (s != NULL)
1916
            d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1917
          break;
1918
 
1919
        case SHT_HASH:
1920
        case SHT_GNU_versym:
1921
          /* sh_link is the section header index of the symbol table
1922
             this hash table or version table is for.  */
1923
          s = bfd_get_section_by_name (abfd, ".dynsym");
1924
          if (s != NULL)
1925
            d->this_hdr.sh_link = elf_section_data (s)->this_idx;
1926
          break;
1927
        }
1928
    }
1929
 
1930
  return true;
1931
}
1932
 
1933
/* Map symbol from it's internal number to the external number, moving
1934
   all local symbols to be at the head of the list.  */
1935
 
1936
static INLINE int
1937
sym_is_global (abfd, sym)
1938
     bfd *abfd;
1939
     asymbol *sym;
1940
{
1941
  /* If the backend has a special mapping, use it.  */
1942
  if (get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1943
    return ((*get_elf_backend_data (abfd)->elf_backend_sym_is_global)
1944
            (abfd, sym));
1945
 
1946
  return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
1947
          || bfd_is_und_section (bfd_get_section (sym))
1948
          || bfd_is_com_section (bfd_get_section (sym)));
1949
}
1950
 
1951
static boolean
1952
elf_map_symbols (abfd)
1953
     bfd *abfd;
1954
{
1955
  int symcount = bfd_get_symcount (abfd);
1956
  asymbol **syms = bfd_get_outsymbols (abfd);
1957
  asymbol **sect_syms;
1958
  int num_locals = 0;
1959
  int num_globals = 0;
1960
  int num_locals2 = 0;
1961
  int num_globals2 = 0;
1962
  int max_index = 0;
1963
  int num_sections = 0;
1964
  int idx;
1965
  asection *asect;
1966
  asymbol **new_syms;
1967
  asymbol *sym;
1968
 
1969
#ifdef DEBUG
1970
  fprintf (stderr, "elf_map_symbols\n");
1971
  fflush (stderr);
1972
#endif
1973
 
1974
  /* Add a section symbol for each BFD section.  FIXME: Is this really
1975
     necessary?  */
1976
  for (asect = abfd->sections; asect; asect = asect->next)
1977
    {
1978
      if (max_index < asect->index)
1979
        max_index = asect->index;
1980
    }
1981
 
1982
  max_index++;
1983
  sect_syms = (asymbol **) bfd_zalloc (abfd, max_index * sizeof (asymbol *));
1984
  if (sect_syms == NULL)
1985
    return false;
1986
  elf_section_syms (abfd) = sect_syms;
1987
 
1988
  for (idx = 0; idx < symcount; idx++)
1989
    {
1990
      sym = syms[idx];
1991
 
1992
      if ((sym->flags & BSF_SECTION_SYM) != 0
1993
          && sym->value == 0)
1994
        {
1995
          asection *sec;
1996
 
1997
          sec = sym->section;
1998
 
1999
          if (sec->owner != NULL)
2000
            {
2001
              if (sec->owner != abfd)
2002
                {
2003
                  if (sec->output_offset != 0)
2004
                    continue;
2005
 
2006
                  sec = sec->output_section;
2007
 
2008
                  /* Empty sections in the input files may have had a section
2009
                     symbol created for them.  (See the comment near the end of
2010
                     _bfd_generic_link_output_symbols in linker.c).  If the linker
2011
                     script discards such sections then we will reach this point.
2012
                     Since we know that we cannot avoid this case, we detect it
2013
                     and skip the abort and the assignment to the sect_syms array.
2014
                     To reproduce this particular case try running the linker
2015
                     testsuite test ld-scripts/weak.exp for an ELF port that uses
2016
                     the generic linker.  */
2017
                  if (sec->owner == NULL)
2018
                    continue;
2019
 
2020
                  BFD_ASSERT (sec->owner == abfd);
2021
                }
2022
              sect_syms[sec->index] = syms[idx];
2023
            }
2024
        }
2025
    }
2026
 
2027
  for (asect = abfd->sections; asect; asect = asect->next)
2028
    {
2029
      if (sect_syms[asect->index] != NULL)
2030
        continue;
2031
 
2032
      sym = bfd_make_empty_symbol (abfd);
2033
      if (sym == NULL)
2034
        return false;
2035
      sym->the_bfd = abfd;
2036
      sym->name = asect->name;
2037
      sym->value = 0;
2038
      /* Set the flags to 0 to indicate that this one was newly added.  */
2039
      sym->flags = 0;
2040
      sym->section = asect;
2041
      sect_syms[asect->index] = sym;
2042
      num_sections++;
2043
#ifdef DEBUG
2044
      fprintf (stderr,
2045
 _("creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n"),
2046
               asect->name, (long) asect->vma, asect->index, (long) asect);
2047
#endif
2048
    }
2049
 
2050
  /* Classify all of the symbols.  */
2051
  for (idx = 0; idx < symcount; idx++)
2052
    {
2053
      if (!sym_is_global (abfd, syms[idx]))
2054
        num_locals++;
2055
      else
2056
        num_globals++;
2057
    }
2058
  for (asect = abfd->sections; asect; asect = asect->next)
2059
    {
2060
      if (sect_syms[asect->index] != NULL
2061
          && sect_syms[asect->index]->flags == 0)
2062
        {
2063
          sect_syms[asect->index]->flags = BSF_SECTION_SYM;
2064
          if (!sym_is_global (abfd, sect_syms[asect->index]))
2065
            num_locals++;
2066
          else
2067
            num_globals++;
2068
          sect_syms[asect->index]->flags = 0;
2069
        }
2070
    }
2071
 
2072
  /* Now sort the symbols so the local symbols are first.  */
2073
  new_syms = ((asymbol **)
2074
              bfd_alloc (abfd,
2075
                         (num_locals + num_globals) * sizeof (asymbol *)));
2076
  if (new_syms == NULL)
2077
    return false;
2078
 
2079
  for (idx = 0; idx < symcount; idx++)
2080
    {
2081
      asymbol *sym = syms[idx];
2082
      int i;
2083
 
2084
      if (!sym_is_global (abfd, sym))
2085
        i = num_locals2++;
2086
      else
2087
        i = num_locals + num_globals2++;
2088
      new_syms[i] = sym;
2089
      sym->udata.i = i + 1;
2090
    }
2091
  for (asect = abfd->sections; asect; asect = asect->next)
2092
    {
2093
      if (sect_syms[asect->index] != NULL
2094
          && sect_syms[asect->index]->flags == 0)
2095
        {
2096
          asymbol *sym = sect_syms[asect->index];
2097
          int i;
2098
 
2099
          sym->flags = BSF_SECTION_SYM;
2100
          if (!sym_is_global (abfd, sym))
2101
            i = num_locals2++;
2102
          else
2103
            i = num_locals + num_globals2++;
2104
          new_syms[i] = sym;
2105
          sym->udata.i = i + 1;
2106
        }
2107
    }
2108
 
2109
  bfd_set_symtab (abfd, new_syms, num_locals + num_globals);
2110
 
2111
  elf_num_locals (abfd) = num_locals;
2112
  elf_num_globals (abfd) = num_globals;
2113
  return true;
2114
}
2115
 
2116
/* Align to the maximum file alignment that could be required for any
2117
   ELF data structure.  */
2118
 
2119
static INLINE file_ptr align_file_position PARAMS ((file_ptr, int));
2120
static INLINE file_ptr
2121
align_file_position (off, align)
2122
     file_ptr off;
2123
     int align;
2124
{
2125
  return (off + align - 1) & ~(align - 1);
2126
}
2127
 
2128
/* Assign a file position to a section, optionally aligning to the
2129
   required section alignment.  */
2130
 
2131
INLINE file_ptr
2132
_bfd_elf_assign_file_position_for_section (i_shdrp, offset, align)
2133
     Elf_Internal_Shdr *i_shdrp;
2134
     file_ptr offset;
2135
     boolean align;
2136
{
2137
  if (align)
2138
    {
2139
      unsigned int al;
2140
 
2141
      al = i_shdrp->sh_addralign;
2142
      if (al > 1)
2143
        offset = BFD_ALIGN (offset, al);
2144
    }
2145
  i_shdrp->sh_offset = offset;
2146
  if (i_shdrp->bfd_section != NULL)
2147
    i_shdrp->bfd_section->filepos = offset;
2148
  if (i_shdrp->sh_type != SHT_NOBITS)
2149
    offset += i_shdrp->sh_size;
2150
  return offset;
2151
}
2152
 
2153
/* Compute the file positions we are going to put the sections at, and
2154
   otherwise prepare to begin writing out the ELF file.  If LINK_INFO
2155
   is not NULL, this is being called by the ELF backend linker.  */
2156
 
2157
boolean
2158
_bfd_elf_compute_section_file_positions (abfd, link_info)
2159
     bfd *abfd;
2160
     struct bfd_link_info *link_info;
2161
{
2162
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
2163
  boolean failed;
2164
  struct bfd_strtab_hash *strtab;
2165
  Elf_Internal_Shdr *shstrtab_hdr;
2166
 
2167
  if (abfd->output_has_begun)
2168
    return true;
2169
 
2170
  /* Do any elf backend specific processing first.  */
2171
  if (bed->elf_backend_begin_write_processing)
2172
    (*bed->elf_backend_begin_write_processing) (abfd, link_info);
2173
 
2174
  if (! prep_headers (abfd))
2175
    return false;
2176
 
2177
  /* Post process the headers if necessary.  */
2178
  if (bed->elf_backend_post_process_headers)
2179
    (*bed->elf_backend_post_process_headers) (abfd, link_info);
2180
 
2181
  failed = false;
2182
  bfd_map_over_sections (abfd, elf_fake_sections, &failed);
2183
  if (failed)
2184
    return false;
2185
 
2186
  if (!assign_section_numbers (abfd))
2187
    return false;
2188
 
2189
  /* The backend linker builds symbol table information itself.  */
2190
  if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2191
    {
2192
      /* Non-zero if doing a relocatable link.  */
2193
      int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
2194
 
2195
      if (! swap_out_syms (abfd, &strtab, relocatable_p))
2196
        return false;
2197
    }
2198
 
2199
  shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr;
2200
  /* sh_name was set in prep_headers.  */
2201
  shstrtab_hdr->sh_type = SHT_STRTAB;
2202
  shstrtab_hdr->sh_flags = 0;
2203
  shstrtab_hdr->sh_addr = 0;
2204
  shstrtab_hdr->sh_size = _bfd_stringtab_size (elf_shstrtab (abfd));
2205
  shstrtab_hdr->sh_entsize = 0;
2206
  shstrtab_hdr->sh_link = 0;
2207
  shstrtab_hdr->sh_info = 0;
2208
  /* sh_offset is set in assign_file_positions_except_relocs.  */
2209
  shstrtab_hdr->sh_addralign = 1;
2210
 
2211
  if (!assign_file_positions_except_relocs (abfd))
2212
    return false;
2213
 
2214
  if (link_info == NULL && bfd_get_symcount (abfd) > 0)
2215
    {
2216
      file_ptr off;
2217
      Elf_Internal_Shdr *hdr;
2218
 
2219
      off = elf_tdata (abfd)->next_file_pos;
2220
 
2221
      hdr = &elf_tdata (abfd)->symtab_hdr;
2222
      off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2223
 
2224
      hdr = &elf_tdata (abfd)->strtab_hdr;
2225
      off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
2226
 
2227
      elf_tdata (abfd)->next_file_pos = off;
2228
 
2229
      /* Now that we know where the .strtab section goes, write it
2230
         out.  */
2231
      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
2232
          || ! _bfd_stringtab_emit (abfd, strtab))
2233
        return false;
2234
      _bfd_stringtab_free (strtab);
2235
    }
2236
 
2237
  abfd->output_has_begun = true;
2238
 
2239
  return true;
2240
}
2241
 
2242
/* Create a mapping from a set of sections to a program segment.  */
2243
 
2244
static INLINE struct elf_segment_map *
2245
make_mapping (abfd, sections, from, to, phdr)
2246
     bfd *abfd;
2247
     asection **sections;
2248
     unsigned int from;
2249
     unsigned int to;
2250
     boolean phdr;
2251
{
2252
  struct elf_segment_map *m;
2253
  unsigned int i;
2254
  asection **hdrpp;
2255
 
2256
  m = ((struct elf_segment_map *)
2257
       bfd_zalloc (abfd,
2258
                   (sizeof (struct elf_segment_map)
2259
                    + (to - from - 1) * sizeof (asection *))));
2260
  if (m == NULL)
2261
    return NULL;
2262
  m->next = NULL;
2263
  m->p_type = PT_LOAD;
2264
  for (i = from, hdrpp = sections + from; i < to; i++, hdrpp++)
2265
    m->sections[i - from] = *hdrpp;
2266
  m->count = to - from;
2267
 
2268
  if (from == 0 && phdr)
2269
    {
2270
      /* Include the headers in the first PT_LOAD segment.  */
2271
      m->includes_filehdr = 1;
2272
      m->includes_phdrs = 1;
2273
    }
2274
 
2275
  return m;
2276
}
2277
 
2278
/* Set up a mapping from BFD sections to program segments.  */
2279
 
2280
static boolean
2281
map_sections_to_segments (abfd)
2282
     bfd *abfd;
2283
{
2284
  asection **sections = NULL;
2285
  asection *s;
2286
  unsigned int i;
2287
  unsigned int count;
2288
  struct elf_segment_map *mfirst;
2289
  struct elf_segment_map **pm;
2290
  struct elf_segment_map *m;
2291
  asection *last_hdr;
2292
  unsigned int phdr_index;
2293
  bfd_vma maxpagesize;
2294
  asection **hdrpp;
2295
  boolean phdr_in_segment = true;
2296
  boolean writable;
2297
  asection *dynsec;
2298
 
2299
  if (elf_tdata (abfd)->segment_map != NULL)
2300
    return true;
2301
 
2302
  if (bfd_count_sections (abfd) == 0)
2303
    return true;
2304
 
2305
  /* Select the allocated sections, and sort them.  */
2306
 
2307
  sections = (asection **) bfd_malloc (bfd_count_sections (abfd)
2308
                                       * sizeof (asection *));
2309
  if (sections == NULL)
2310
    goto error_return;
2311
 
2312
  i = 0;
2313
  for (s = abfd->sections; s != NULL; s = s->next)
2314
    {
2315
      if ((s->flags & SEC_ALLOC) != 0)
2316
        {
2317
          sections[i] = s;
2318
          ++i;
2319
        }
2320
    }
2321
  BFD_ASSERT (i <= bfd_count_sections (abfd));
2322
  count = i;
2323
 
2324
  qsort (sections, (size_t) count, sizeof (asection *), elf_sort_sections);
2325
 
2326
  /* Build the mapping.  */
2327
 
2328
  mfirst = NULL;
2329
  pm = &mfirst;
2330
 
2331
  /* If we have a .interp section, then create a PT_PHDR segment for
2332
     the program headers and a PT_INTERP segment for the .interp
2333
     section.  */
2334
  s = bfd_get_section_by_name (abfd, ".interp");
2335
  if (s != NULL && (s->flags & SEC_LOAD) != 0)
2336
    {
2337
      m = ((struct elf_segment_map *)
2338
           bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2339
      if (m == NULL)
2340
        goto error_return;
2341
      m->next = NULL;
2342
      m->p_type = PT_PHDR;
2343
      /* FIXME: UnixWare and Solaris set PF_X, Irix 5 does not.  */
2344
      m->p_flags = PF_R | PF_X;
2345
      m->p_flags_valid = 1;
2346
      m->includes_phdrs = 1;
2347
 
2348
      *pm = m;
2349
      pm = &m->next;
2350
 
2351
      m = ((struct elf_segment_map *)
2352
           bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2353
      if (m == NULL)
2354
        goto error_return;
2355
      m->next = NULL;
2356
      m->p_type = PT_INTERP;
2357
      m->count = 1;
2358
      m->sections[0] = s;
2359
 
2360
      *pm = m;
2361
      pm = &m->next;
2362
    }
2363
 
2364
  /* Look through the sections.  We put sections in the same program
2365
     segment when the start of the second section can be placed within
2366
     a few bytes of the end of the first section.  */
2367
  last_hdr = NULL;
2368
  phdr_index = 0;
2369
  maxpagesize = get_elf_backend_data (abfd)->maxpagesize;
2370
  writable = false;
2371
  dynsec = bfd_get_section_by_name (abfd, ".dynamic");
2372
  if (dynsec != NULL
2373
      && (dynsec->flags & SEC_LOAD) == 0)
2374
    dynsec = NULL;
2375
 
2376
  /* Deal with -Ttext or something similar such that the first section
2377
     is not adjacent to the program headers.  This is an
2378
     approximation, since at this point we don't know exactly how many
2379
     program headers we will need.  */
2380
  if (count > 0)
2381
    {
2382
      bfd_size_type phdr_size;
2383
 
2384
      phdr_size = elf_tdata (abfd)->program_header_size;
2385
      if (phdr_size == 0)
2386
        phdr_size = get_elf_backend_data (abfd)->s->sizeof_phdr;
2387
      if ((abfd->flags & D_PAGED) == 0
2388
          || sections[0]->lma < phdr_size
2389
          || sections[0]->lma % maxpagesize < phdr_size % maxpagesize)
2390
        phdr_in_segment = false;
2391
    }
2392
 
2393
  for (i = 0, hdrpp = sections; i < count; i++, hdrpp++)
2394
    {
2395
      asection *hdr;
2396
      boolean new_segment;
2397
 
2398
      hdr = *hdrpp;
2399
 
2400
      /* See if this section and the last one will fit in the same
2401
         segment.  */
2402
 
2403
      if (last_hdr == NULL)
2404
        {
2405
          /* If we don't have a segment yet, then we don't need a new
2406
             one (we build the last one after this loop).  */
2407
          new_segment = false;
2408
        }
2409
      else if (last_hdr->lma - last_hdr->vma != hdr->lma - hdr->vma)
2410
        {
2411
          /* If this section has a different relation between the
2412
             virtual address and the load address, then we need a new
2413
             segment.  */
2414
          new_segment = true;
2415
        }
2416
      else if (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2417
               < BFD_ALIGN (hdr->lma, maxpagesize))
2418
        {
2419
          /* If putting this section in this segment would force us to
2420
             skip a page in the segment, then we need a new segment.  */
2421
          new_segment = true;
2422
        }
2423
      else if ((last_hdr->flags & SEC_LOAD) == 0
2424
               && (hdr->flags & SEC_LOAD) != 0)
2425
        {
2426
          /* We don't want to put a loadable section after a
2427
             nonloadable section in the same segment.  */
2428
          new_segment = true;
2429
        }
2430
      else if ((abfd->flags & D_PAGED) == 0)
2431
        {
2432
          /* If the file is not demand paged, which means that we
2433
             don't require the sections to be correctly aligned in the
2434
             file, then there is no other reason for a new segment.  */
2435
          new_segment = false;
2436
        }
2437
      else if (! writable
2438
               && (hdr->flags & SEC_READONLY) == 0
2439
               && (BFD_ALIGN (last_hdr->lma + last_hdr->_raw_size, maxpagesize)
2440
                   == hdr->lma))
2441
        {
2442
          /* We don't want to put a writable section in a read only
2443
             segment, unless they are on the same page in memory
2444
             anyhow.  We already know that the last section does not
2445
             bring us past the current section on the page, so the
2446
             only case in which the new section is not on the same
2447
             page as the previous section is when the previous section
2448
             ends precisely on a page boundary.  */
2449
          new_segment = true;
2450
        }
2451
      else
2452
        {
2453
          /* Otherwise, we can use the same segment.  */
2454
          new_segment = false;
2455
        }
2456
 
2457
      if (! new_segment)
2458
        {
2459
          if ((hdr->flags & SEC_READONLY) == 0)
2460
            writable = true;
2461
          last_hdr = hdr;
2462
          continue;
2463
        }
2464
 
2465
      /* We need a new program segment.  We must create a new program
2466
         header holding all the sections from phdr_index until hdr.  */
2467
 
2468
      m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
2469
      if (m == NULL)
2470
        goto error_return;
2471
 
2472
      *pm = m;
2473
      pm = &m->next;
2474
 
2475
      if ((hdr->flags & SEC_READONLY) == 0)
2476
        writable = true;
2477
      else
2478
        writable = false;
2479
 
2480
      last_hdr = hdr;
2481
      phdr_index = i;
2482
      phdr_in_segment = false;
2483
    }
2484
 
2485
  /* Create a final PT_LOAD program segment.  */
2486
  if (last_hdr != NULL)
2487
    {
2488
      m = make_mapping (abfd, sections, phdr_index, i, phdr_in_segment);
2489
      if (m == NULL)
2490
        goto error_return;
2491
 
2492
      *pm = m;
2493
      pm = &m->next;
2494
    }
2495
 
2496
  /* If there is a .dynamic section, throw in a PT_DYNAMIC segment.  */
2497
  if (dynsec != NULL)
2498
    {
2499
      m = ((struct elf_segment_map *)
2500
           bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2501
      if (m == NULL)
2502
        goto error_return;
2503
      m->next = NULL;
2504
      m->p_type = PT_DYNAMIC;
2505
      m->count = 1;
2506
      m->sections[0] = dynsec;
2507
 
2508
      *pm = m;
2509
      pm = &m->next;
2510
    }
2511
 
2512
  /* For each loadable .note section, add a PT_NOTE segment.  We don't
2513
     use bfd_get_section_by_name, because if we link together
2514
     nonloadable .note sections and loadable .note sections, we will
2515
     generate two .note sections in the output file.  FIXME: Using
2516
     names for section types is bogus anyhow.  */
2517
  for (s = abfd->sections; s != NULL; s = s->next)
2518
    {
2519
      if ((s->flags & SEC_LOAD) != 0
2520
          && strncmp (s->name, ".note", 5) == 0)
2521
        {
2522
          m = ((struct elf_segment_map *)
2523
               bfd_zalloc (abfd, sizeof (struct elf_segment_map)));
2524
          if (m == NULL)
2525
            goto error_return;
2526
          m->next = NULL;
2527
          m->p_type = PT_NOTE;
2528
          m->count = 1;
2529
          m->sections[0] = s;
2530
 
2531
          *pm = m;
2532
          pm = &m->next;
2533
        }
2534
    }
2535
 
2536
  free (sections);
2537
  sections = NULL;
2538
 
2539
  elf_tdata (abfd)->segment_map = mfirst;
2540
  return true;
2541
 
2542
 error_return:
2543
  if (sections != NULL)
2544
    free (sections);
2545
  return false;
2546
}
2547
 
2548
/* Sort sections by address.  */
2549
 
2550
static int
2551
elf_sort_sections (arg1, arg2)
2552
     const PTR arg1;
2553
     const PTR arg2;
2554
{
2555
  const asection *sec1 = *(const asection **) arg1;
2556
  const asection *sec2 = *(const asection **) arg2;
2557
 
2558
  /* Sort by LMA first, since this is the address used to
2559
     place the section into a segment.  */
2560
  if (sec1->lma < sec2->lma)
2561
    return -1;
2562
  else if (sec1->lma > sec2->lma)
2563
    return 1;
2564
 
2565
  /* Then sort by VMA.  Normally the LMA and the VMA will be
2566
     the same, and this will do nothing.  */
2567
  if (sec1->vma < sec2->vma)
2568
    return -1;
2569
  else if (sec1->vma > sec2->vma)
2570
    return 1;
2571
 
2572
  /* Put !SEC_LOAD sections after SEC_LOAD ones.  */
2573
 
2574
#define TOEND(x) (((x)->flags & SEC_LOAD) == 0)
2575
 
2576
  if (TOEND (sec1))
2577
    {
2578
      if (TOEND (sec2))
2579
        return sec1->target_index - sec2->target_index;
2580
      else
2581
        return 1;
2582
    }
2583
 
2584
  if (TOEND (sec2))
2585
    return -1;
2586
 
2587
#undef TOEND
2588
 
2589
  /* Sort by size, to put zero sized sections before others at the
2590
     same address.  */
2591
 
2592
  if (sec1->_raw_size < sec2->_raw_size)
2593
    return -1;
2594
  if (sec1->_raw_size > sec2->_raw_size)
2595
    return 1;
2596
 
2597
  return sec1->target_index - sec2->target_index;
2598
}
2599
 
2600
/* Assign file positions to the sections based on the mapping from
2601
   sections to segments.  This function also sets up some fields in
2602
   the file header, and writes out the program headers.  */
2603
 
2604
static boolean
2605
assign_file_positions_for_segments (abfd)
2606
     bfd *abfd;
2607
{
2608
  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2609
  unsigned int count;
2610
  struct elf_segment_map *m;
2611
  unsigned int alloc;
2612
  Elf_Internal_Phdr *phdrs;
2613
  file_ptr off, voff;
2614
  bfd_vma filehdr_vaddr, filehdr_paddr;
2615
  bfd_vma phdrs_vaddr, phdrs_paddr;
2616
  Elf_Internal_Phdr *p;
2617
 
2618
  if (elf_tdata (abfd)->segment_map == NULL)
2619
    {
2620
      if (! map_sections_to_segments (abfd))
2621
        return false;
2622
    }
2623
 
2624
  if (bed->elf_backend_modify_segment_map)
2625
    {
2626
      if (! (*bed->elf_backend_modify_segment_map) (abfd))
2627
        return false;
2628
    }
2629
 
2630
  count = 0;
2631
  for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
2632
    ++count;
2633
 
2634
  elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr;
2635
  elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr;
2636
  elf_elfheader (abfd)->e_phnum = count;
2637
 
2638
  if (count == 0)
2639
    return true;
2640
 
2641
  /* If we already counted the number of program segments, make sure
2642
     that we allocated enough space.  This happens when SIZEOF_HEADERS
2643
     is used in a linker script.  */
2644
  alloc = elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr;
2645
  if (alloc != 0 && count > alloc)
2646
    {
2647
      ((*_bfd_error_handler)
2648
       (_("%s: Not enough room for program headers (allocated %u, need %u)"),
2649
        bfd_get_filename (abfd), alloc, count));
2650
      bfd_set_error (bfd_error_bad_value);
2651
      return false;
2652
    }
2653
 
2654
  if (alloc == 0)
2655
    alloc = count;
2656
 
2657
  phdrs = ((Elf_Internal_Phdr *)
2658
           bfd_alloc (abfd, alloc * sizeof (Elf_Internal_Phdr)));
2659
  if (phdrs == NULL)
2660
    return false;
2661
 
2662
  off = bed->s->sizeof_ehdr;
2663
  off += alloc * bed->s->sizeof_phdr;
2664
 
2665
  filehdr_vaddr = 0;
2666
  filehdr_paddr = 0;
2667
  phdrs_vaddr = 0;
2668
  phdrs_paddr = 0;
2669
 
2670
  for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2671
       m != NULL;
2672
       m = m->next, p++)
2673
    {
2674
      unsigned int i;
2675
      asection **secpp;
2676
 
2677
      /* If elf_segment_map is not from map_sections_to_segments, the
2678
         sections may not be correctly ordered.  */
2679
      if (m->count > 0)
2680
        qsort (m->sections, (size_t) m->count, sizeof (asection *),
2681
               elf_sort_sections);
2682
 
2683
      p->p_type = m->p_type;
2684
      p->p_flags = m->p_flags;
2685
 
2686
      if (p->p_type == PT_LOAD
2687
          && m->count > 0
2688
          && (m->sections[0]->flags & SEC_ALLOC) != 0)
2689
        {
2690
          if ((abfd->flags & D_PAGED) != 0)
2691
            off += (m->sections[0]->vma - off) % bed->maxpagesize;
2692
          else
2693
            {
2694
              bfd_size_type align;
2695
 
2696
              align = 0;
2697
              for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2698
                {
2699
                  bfd_size_type secalign;
2700
 
2701
                  secalign = bfd_get_section_alignment (abfd, *secpp);
2702
                  if (secalign > align)
2703
                    align = secalign;
2704
                }
2705
 
2706
              off += (m->sections[0]->vma - off) % (1 << align);
2707
            }
2708
        }
2709
 
2710
      if (m->count == 0)
2711
        p->p_vaddr = 0;
2712
      else
2713
        p->p_vaddr = m->sections[0]->vma;
2714
 
2715
      if (m->p_paddr_valid)
2716
        p->p_paddr = m->p_paddr;
2717
      else if (m->count == 0)
2718
        p->p_paddr = 0;
2719
      else
2720
        p->p_paddr = m->sections[0]->lma;
2721
 
2722
      if (p->p_type == PT_LOAD
2723
          && (abfd->flags & D_PAGED) != 0)
2724
        p->p_align = bed->maxpagesize;
2725
      else if (m->count == 0)
2726
        p->p_align = bed->s->file_align;
2727
      else
2728
        p->p_align = 0;
2729
 
2730
      p->p_offset = 0;
2731
      p->p_filesz = 0;
2732
      p->p_memsz = 0;
2733
 
2734
      if (m->includes_filehdr)
2735
        {
2736
          if (! m->p_flags_valid)
2737
            p->p_flags |= PF_R;
2738
          p->p_offset = 0;
2739
          p->p_filesz = bed->s->sizeof_ehdr;
2740
          p->p_memsz = bed->s->sizeof_ehdr;
2741
          if (m->count > 0)
2742
            {
2743
              BFD_ASSERT (p->p_type == PT_LOAD);
2744
 
2745
              if (p->p_vaddr < (bfd_vma) off)
2746
                {
2747
                  _bfd_error_handler (_("%s: Not enough room for program headers, try linking with -N"),
2748
                                      bfd_get_filename (abfd));
2749
                  bfd_set_error (bfd_error_bad_value);
2750
                  return false;
2751
                }
2752
 
2753
              p->p_vaddr -= off;
2754
              if (! m->p_paddr_valid)
2755
                p->p_paddr -= off;
2756
            }
2757
          if (p->p_type == PT_LOAD)
2758
            {
2759
              filehdr_vaddr = p->p_vaddr;
2760
              filehdr_paddr = p->p_paddr;
2761
            }
2762
        }
2763
 
2764
      if (m->includes_phdrs)
2765
        {
2766
          if (! m->p_flags_valid)
2767
            p->p_flags |= PF_R;
2768
 
2769
          if (m->includes_filehdr)
2770
            {
2771
              if (p->p_type == PT_LOAD)
2772
                {
2773
                  phdrs_vaddr = p->p_vaddr + bed->s->sizeof_ehdr;
2774
                  phdrs_paddr = p->p_paddr + bed->s->sizeof_ehdr;
2775
                }
2776
            }
2777
          else
2778
            {
2779
              p->p_offset = bed->s->sizeof_ehdr;
2780
 
2781
              if (m->count > 0)
2782
                {
2783
                  BFD_ASSERT (p->p_type == PT_LOAD);
2784
                  p->p_vaddr -= off - p->p_offset;
2785
                  if (! m->p_paddr_valid)
2786
                    p->p_paddr -= off - p->p_offset;
2787
                }
2788
 
2789
              if (p->p_type == PT_LOAD)
2790
                {
2791
                  phdrs_vaddr = p->p_vaddr;
2792
                  phdrs_paddr = p->p_paddr;
2793
                }
2794
              else
2795
                phdrs_vaddr = bed->maxpagesize + bed->s->sizeof_ehdr;
2796
            }
2797
 
2798
          p->p_filesz += alloc * bed->s->sizeof_phdr;
2799
          p->p_memsz += alloc * bed->s->sizeof_phdr;
2800
        }
2801
 
2802
      if (p->p_type == PT_LOAD
2803
          || (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core))
2804
        {
2805
          if (! m->includes_filehdr && ! m->includes_phdrs)
2806
            p->p_offset = off;
2807
          else
2808
            {
2809
              file_ptr adjust;
2810
 
2811
              adjust = off - (p->p_offset + p->p_filesz);
2812
              p->p_filesz += adjust;
2813
              p->p_memsz += adjust;
2814
            }
2815
        }
2816
 
2817
      voff = off;
2818
 
2819
      for (i = 0, secpp = m->sections; i < m->count; i++, secpp++)
2820
        {
2821
          asection *sec;
2822
          flagword flags;
2823
          bfd_size_type align;
2824
 
2825
          sec = *secpp;
2826
          flags = sec->flags;
2827
          align = 1 << bfd_get_section_alignment (abfd, sec);
2828
 
2829
          /* The section may have artificial alignment forced by a
2830
             link script.  Notice this case by the gap between the
2831
             cumulative phdr vma and the section's vma.  */
2832
          if (p->p_vaddr + p->p_memsz < sec->vma)
2833
            {
2834
              bfd_vma adjust = sec->vma - (p->p_vaddr + p->p_memsz);
2835
 
2836
              p->p_memsz += adjust;
2837
              off += adjust;
2838
              voff += adjust;
2839
              if ((flags & SEC_LOAD) != 0)
2840
                p->p_filesz += adjust;
2841
            }
2842
 
2843
          if (p->p_type == PT_LOAD)
2844
            {
2845
              bfd_signed_vma adjust;
2846
 
2847
              if ((flags & SEC_LOAD) != 0)
2848
                {
2849
                  adjust = sec->lma - (p->p_paddr + p->p_memsz);
2850
                  if (adjust < 0)
2851
                    adjust = 0;
2852
                }
2853
              else if ((flags & SEC_ALLOC) != 0)
2854
                {
2855
                  /* The section VMA must equal the file position
2856
                     modulo the page size.  FIXME: I'm not sure if
2857
                     this adjustment is really necessary.  We used to
2858
                     not have the SEC_LOAD case just above, and then
2859
                     this was necessary, but now I'm not sure.  */
2860
                  if ((abfd->flags & D_PAGED) != 0)
2861
                    adjust = (sec->vma - voff) % bed->maxpagesize;
2862
                  else
2863
                    adjust = (sec->vma - voff) % align;
2864
                }
2865
              else
2866
                adjust = 0;
2867
 
2868
              if (adjust != 0)
2869
                {
2870
                  if (i == 0)
2871
                    {
2872
                      (* _bfd_error_handler)
2873
                        (_("Error: First section in segment (%s) starts at 0x%x"),
2874
                         bfd_section_name (abfd, sec), sec->lma);
2875
                      (* _bfd_error_handler)
2876
                        (_("       whereas segment starts at 0x%x"),
2877
                         p->p_paddr);
2878
 
2879
                      return false;
2880
                    }
2881
                  p->p_memsz += adjust;
2882
                  off += adjust;
2883
                  voff += adjust;
2884
                  if ((flags & SEC_LOAD) != 0)
2885
                    p->p_filesz += adjust;
2886
                }
2887
 
2888
              sec->filepos = off;
2889
 
2890
              /* We check SEC_HAS_CONTENTS here because if NOLOAD is
2891
                 used in a linker script we may have a section with
2892
                 SEC_LOAD clear but which is supposed to have
2893
                 contents.  */
2894
              if ((flags & SEC_LOAD) != 0
2895
                  || (flags & SEC_HAS_CONTENTS) != 0)
2896
                off += sec->_raw_size;
2897
 
2898
              if ((flags & SEC_ALLOC) != 0)
2899
                voff += sec->_raw_size;
2900
            }
2901
 
2902
          if (p->p_type == PT_NOTE && bfd_get_format (abfd) == bfd_core)
2903
            {
2904
              if (i == 0)        /* the actual "note" segment */
2905
                {               /* this one actually contains everything. */
2906
                  sec->filepos = off;
2907
                  p->p_filesz = sec->_raw_size;
2908
                  off += sec->_raw_size;
2909
                  voff = off;
2910
                }
2911
              else      /* fake sections -- don't need to be written */
2912
                {
2913
                  sec->filepos = 0;
2914
                  sec->_raw_size = 0;
2915
                  flags = sec->flags = 0;        /* no contents */
2916
                }
2917
              p->p_memsz = 0;
2918
              p->p_align = 1;
2919
            }
2920
          else
2921
            {
2922
              p->p_memsz += sec->_raw_size;
2923
 
2924
              if ((flags & SEC_LOAD) != 0)
2925
                p->p_filesz += sec->_raw_size;
2926
 
2927
              if (align > p->p_align
2928
                  && (p->p_type != PT_LOAD || (abfd->flags & D_PAGED) == 0))
2929
                p->p_align = align;
2930
            }
2931
 
2932
          if (! m->p_flags_valid)
2933
            {
2934
              p->p_flags |= PF_R;
2935
              if ((flags & SEC_CODE) != 0)
2936
                p->p_flags |= PF_X;
2937
              if ((flags & SEC_READONLY) == 0)
2938
                p->p_flags |= PF_W;
2939
            }
2940
        }
2941
    }
2942
 
2943
  /* Now that we have set the section file positions, we can set up
2944
     the file positions for the non PT_LOAD segments.  */
2945
  for (m = elf_tdata (abfd)->segment_map, p = phdrs;
2946
       m != NULL;
2947
       m = m->next, p++)
2948
    {
2949
      if (p->p_type != PT_LOAD && m->count > 0)
2950
        {
2951
          BFD_ASSERT (! m->includes_filehdr && ! m->includes_phdrs);
2952
          p->p_offset = m->sections[0]->filepos;
2953
        }
2954
      if (m->count == 0)
2955
        {
2956
          if (m->includes_filehdr)
2957
            {
2958
              p->p_vaddr = filehdr_vaddr;
2959
              if (! m->p_paddr_valid)
2960
                p->p_paddr = filehdr_paddr;
2961
            }
2962
          else if (m->includes_phdrs)
2963
            {
2964
              p->p_vaddr = phdrs_vaddr;
2965
              if (! m->p_paddr_valid)
2966
                p->p_paddr = phdrs_paddr;
2967
            }
2968
        }
2969
    }
2970
 
2971
  /* Clear out any program headers we allocated but did not use.  */
2972
  for (; count < alloc; count++, p++)
2973
    {
2974
      memset (p, 0, sizeof *p);
2975
      p->p_type = PT_NULL;
2976
    }
2977
 
2978
  elf_tdata (abfd)->phdr = phdrs;
2979
 
2980
  elf_tdata (abfd)->next_file_pos = off;
2981
 
2982
  /* Write out the program headers.  */
2983
  if (bfd_seek (abfd, bed->s->sizeof_ehdr, SEEK_SET) != 0
2984
      || bed->s->write_out_phdrs (abfd, phdrs, alloc) != 0)
2985
    return false;
2986
 
2987
  return true;
2988
}
2989
 
2990
/* Get the size of the program header.
2991
 
2992
   If this is called by the linker before any of the section VMA's are set, it
2993
   can't calculate the correct value for a strange memory layout.  This only
2994
   happens when SIZEOF_HEADERS is used in a linker script.  In this case,
2995
   SORTED_HDRS is NULL and we assume the normal scenario of one text and one
2996
   data segment (exclusive of .interp and .dynamic).
2997
 
2998
   ??? User written scripts must either not use SIZEOF_HEADERS, or assume there
2999
   will be two segments.  */
3000
 
3001
static bfd_size_type
3002
get_program_header_size (abfd)
3003
     bfd *abfd;
3004
{
3005
  size_t segs;
3006
  asection *s;
3007
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
3008
 
3009
  /* We can't return a different result each time we're called.  */
3010
  if (elf_tdata (abfd)->program_header_size != 0)
3011
    return elf_tdata (abfd)->program_header_size;
3012
 
3013
  if (elf_tdata (abfd)->segment_map != NULL)
3014
    {
3015
      struct elf_segment_map *m;
3016
 
3017
      segs = 0;
3018
      for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
3019
        ++segs;
3020
      elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3021
      return elf_tdata (abfd)->program_header_size;
3022
    }
3023
 
3024
  /* Assume we will need exactly two PT_LOAD segments: one for text
3025
     and one for data.  */
3026
  segs = 2;
3027
 
3028
  s = bfd_get_section_by_name (abfd, ".interp");
3029
  if (s != NULL && (s->flags & SEC_LOAD) != 0)
3030
    {
3031
      /* If we have a loadable interpreter section, we need a
3032
         PT_INTERP segment.  In this case, assume we also need a
3033
         PT_PHDR segment, although that may not be true for all
3034
         targets.  */
3035
      segs += 2;
3036
    }
3037
 
3038
  if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
3039
    {
3040
      /* We need a PT_DYNAMIC segment.  */
3041
      ++segs;
3042
    }
3043
 
3044
  for (s = abfd->sections; s != NULL; s = s->next)
3045
    {
3046
      if ((s->flags & SEC_LOAD) != 0
3047
          && strncmp (s->name, ".note", 5) == 0)
3048
        {
3049
          /* We need a PT_NOTE segment.  */
3050
          ++segs;
3051
        }
3052
    }
3053
 
3054
  /* Let the backend count up any program headers it might need.  */
3055
  if (bed->elf_backend_additional_program_headers)
3056
    {
3057
      int a;
3058
 
3059
      a = (*bed->elf_backend_additional_program_headers) (abfd);
3060
      if (a == -1)
3061
        abort ();
3062
      segs += a;
3063
    }
3064
 
3065
  elf_tdata (abfd)->program_header_size = segs * bed->s->sizeof_phdr;
3066
  return elf_tdata (abfd)->program_header_size;
3067
}
3068
 
3069
/* Work out the file positions of all the sections.  This is called by
3070
   _bfd_elf_compute_section_file_positions.  All the section sizes and
3071
   VMAs must be known before this is called.
3072
 
3073
   We do not consider reloc sections at this point, unless they form
3074
   part of the loadable image.  Reloc sections are assigned file
3075
   positions in assign_file_positions_for_relocs, which is called by
3076
   write_object_contents and final_link.
3077
 
3078
   We also don't set the positions of the .symtab and .strtab here.  */
3079
 
3080
static boolean
3081
assign_file_positions_except_relocs (abfd)
3082
     bfd *abfd;
3083
{
3084
  struct elf_obj_tdata * const tdata = elf_tdata (abfd);
3085
  Elf_Internal_Ehdr * const i_ehdrp = elf_elfheader (abfd);
3086
  Elf_Internal_Shdr ** const i_shdrpp = elf_elfsections (abfd);
3087
  file_ptr off;
3088
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
3089
 
3090
  if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0
3091
      && bfd_get_format (abfd) != bfd_core)
3092
    {
3093
      Elf_Internal_Shdr **hdrpp;
3094
      unsigned int i;
3095
 
3096
      /* Start after the ELF header.  */
3097
      off = i_ehdrp->e_ehsize;
3098
 
3099
      /* We are not creating an executable, which means that we are
3100
         not creating a program header, and that the actual order of
3101
         the sections in the file is unimportant.  */
3102
      for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
3103
        {
3104
          Elf_Internal_Shdr *hdr;
3105
 
3106
          hdr = *hdrpp;
3107
          if (hdr->sh_type == SHT_REL || hdr->sh_type == SHT_RELA)
3108
            {
3109
              hdr->sh_offset = -1;
3110
              continue;
3111
            }
3112
          if (i == tdata->symtab_section
3113
              || i == tdata->strtab_section)
3114
            {
3115
              hdr->sh_offset = -1;
3116
              continue;
3117
            }
3118
 
3119
          off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
3120
        }
3121
    }
3122
  else
3123
    {
3124
      unsigned int i;
3125
      Elf_Internal_Shdr **hdrpp;
3126
 
3127
      /* Assign file positions for the loaded sections based on the
3128
         assignment of sections to segments.  */
3129
      if (! assign_file_positions_for_segments (abfd))
3130
        return false;
3131
 
3132
      /* Assign file positions for the other sections.  */
3133
 
3134
      off = elf_tdata (abfd)->next_file_pos;
3135
      for (i = 1, hdrpp = i_shdrpp + 1; i < i_ehdrp->e_shnum; i++, hdrpp++)
3136
        {
3137
          Elf_Internal_Shdr *hdr;
3138
 
3139
          hdr = *hdrpp;
3140
          if (hdr->bfd_section != NULL
3141
              && hdr->bfd_section->filepos != 0)
3142
            hdr->sh_offset = hdr->bfd_section->filepos;
3143
          else if ((hdr->sh_flags & SHF_ALLOC) != 0)
3144
            {
3145
              ((*_bfd_error_handler)
3146
               (_("%s: warning: allocated section `%s' not in segment"),
3147
                bfd_get_filename (abfd),
3148
                (hdr->bfd_section == NULL
3149
                 ? "*unknown*"
3150
                 : hdr->bfd_section->name)));
3151
              if ((abfd->flags & D_PAGED) != 0)
3152
                off += (hdr->sh_addr - off) % bed->maxpagesize;
3153
              else
3154
                off += (hdr->sh_addr - off) % hdr->sh_addralign;
3155
              off = _bfd_elf_assign_file_position_for_section (hdr, off,
3156
                                                               false);
3157
            }
3158
          else if (hdr->sh_type == SHT_REL
3159
                   || hdr->sh_type == SHT_RELA
3160
                   || hdr == i_shdrpp[tdata->symtab_section]
3161
                   || hdr == i_shdrpp[tdata->strtab_section])
3162
            hdr->sh_offset = -1;
3163
          else
3164
            off = _bfd_elf_assign_file_position_for_section (hdr, off, true);
3165
        }
3166
    }
3167
 
3168
  /* Place the section headers.  */
3169
  off = align_file_position (off, bed->s->file_align);
3170
  i_ehdrp->e_shoff = off;
3171
  off += i_ehdrp->e_shnum * i_ehdrp->e_shentsize;
3172
 
3173
  elf_tdata (abfd)->next_file_pos = off;
3174
 
3175
  return true;
3176
}
3177
 
3178
static boolean
3179
prep_headers (abfd)
3180
     bfd *abfd;
3181
{
3182
  Elf_Internal_Ehdr *i_ehdrp;   /* Elf file header, internal form */
3183
  Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */
3184
  Elf_Internal_Shdr **i_shdrp;  /* Section header table, internal form */
3185
  int count;
3186
  struct bfd_strtab_hash *shstrtab;
3187
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
3188
 
3189
  i_ehdrp = elf_elfheader (abfd);
3190
  i_shdrp = elf_elfsections (abfd);
3191
 
3192
  shstrtab = _bfd_elf_stringtab_init ();
3193
  if (shstrtab == NULL)
3194
    return false;
3195
 
3196
  elf_shstrtab (abfd) = shstrtab;
3197
 
3198
  i_ehdrp->e_ident[EI_MAG0] = ELFMAG0;
3199
  i_ehdrp->e_ident[EI_MAG1] = ELFMAG1;
3200
  i_ehdrp->e_ident[EI_MAG2] = ELFMAG2;
3201
  i_ehdrp->e_ident[EI_MAG3] = ELFMAG3;
3202
 
3203
  i_ehdrp->e_ident[EI_CLASS] = bed->s->elfclass;
3204
  i_ehdrp->e_ident[EI_DATA] =
3205
    bfd_big_endian (abfd) ? ELFDATA2MSB : ELFDATA2LSB;
3206
  i_ehdrp->e_ident[EI_VERSION] = bed->s->ev_current;
3207
 
3208
  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_SYSV;
3209
  i_ehdrp->e_ident[EI_ABIVERSION] = 0;
3210
 
3211
  for (count = EI_PAD; count < EI_NIDENT; count++)
3212
    i_ehdrp->e_ident[count] = 0;
3213
 
3214
  if ((abfd->flags & DYNAMIC) != 0)
3215
    i_ehdrp->e_type = ET_DYN;
3216
  else if ((abfd->flags & EXEC_P) != 0)
3217
    i_ehdrp->e_type = ET_EXEC;
3218
  else if (bfd_get_format (abfd) == bfd_core)
3219
    i_ehdrp->e_type = ET_CORE;
3220
  else
3221
    i_ehdrp->e_type = ET_REL;
3222
 
3223
  switch (bfd_get_arch (abfd))
3224
    {
3225
    case bfd_arch_unknown:
3226
      i_ehdrp->e_machine = EM_NONE;
3227
      break;
3228
    case bfd_arch_sparc:
3229
      if (bed->s->arch_size == 64)
3230
        i_ehdrp->e_machine = EM_SPARCV9;
3231
      else
3232
        i_ehdrp->e_machine = EM_SPARC;
3233
      break;
3234
    case bfd_arch_i370:
3235
      i_ehdrp->e_machine = EM_S370;
3236
      break;
3237
    case bfd_arch_i386:
3238
      i_ehdrp->e_machine = EM_386;
3239
      break;
3240
    case bfd_arch_m68k:
3241
      i_ehdrp->e_machine = EM_68K;
3242
      break;
3243
    case bfd_arch_m88k:
3244
      i_ehdrp->e_machine = EM_88K;
3245
      break;
3246
    case bfd_arch_i860:
3247
      i_ehdrp->e_machine = EM_860;
3248
      break;
3249
    case bfd_arch_i960:
3250
      i_ehdrp->e_machine = EM_960;
3251
      break;
3252
    case bfd_arch_mips: /* MIPS Rxxxx */
3253
      i_ehdrp->e_machine = EM_MIPS;     /* only MIPS R3000 */
3254
      break;
3255 839 markom
    case bfd_arch_or32:
3256
      i_ehdrp->e_machine = EM_OR32;
3257
      break;
3258 104 markom
    case bfd_arch_hppa:
3259
      i_ehdrp->e_machine = EM_PARISC;
3260
      break;
3261
    case bfd_arch_powerpc:
3262
      i_ehdrp->e_machine = EM_PPC;
3263
      break;
3264
    case bfd_arch_alpha:
3265
      i_ehdrp->e_machine = EM_ALPHA;
3266
      break;
3267
    case bfd_arch_sh:
3268
      i_ehdrp->e_machine = EM_SH;
3269
      break;
3270
    case bfd_arch_d10v:
3271
      i_ehdrp->e_machine = EM_CYGNUS_D10V;
3272
      break;
3273
    case bfd_arch_d30v:
3274
      i_ehdrp->e_machine = EM_CYGNUS_D30V;
3275
      break;
3276
    case bfd_arch_fr30:
3277
      i_ehdrp->e_machine = EM_CYGNUS_FR30;
3278
      break;
3279
    case bfd_arch_mcore:
3280
      i_ehdrp->e_machine = EM_MCORE;
3281
      break;
3282
    case bfd_arch_avr:
3283
      i_ehdrp->e_machine = EM_AVR;
3284
      break;
3285
    case bfd_arch_v850:
3286
      switch (bfd_get_mach (abfd))
3287
        {
3288
        default:
3289
        case 0:               i_ehdrp->e_machine = EM_CYGNUS_V850; break;
3290
        }
3291
      break;
3292
   case bfd_arch_arc:
3293
      i_ehdrp->e_machine = EM_CYGNUS_ARC;
3294
      break;
3295
   case bfd_arch_arm:
3296
      i_ehdrp->e_machine = EM_ARM;
3297
      break;
3298
    case bfd_arch_m32r:
3299
      i_ehdrp->e_machine = EM_CYGNUS_M32R;
3300
      break;
3301
    case bfd_arch_mn10200:
3302
      i_ehdrp->e_machine = EM_CYGNUS_MN10200;
3303
      break;
3304
    case bfd_arch_mn10300:
3305
      i_ehdrp->e_machine = EM_CYGNUS_MN10300;
3306
      break;
3307
    case bfd_arch_pj:
3308
      i_ehdrp->e_machine = EM_PJ;
3309
      break;
3310
      /* also note that EM_M32, AT&T WE32100 is unknown to bfd */
3311
    default:
3312
      i_ehdrp->e_machine = EM_NONE;
3313
    }
3314
  i_ehdrp->e_version = bed->s->ev_current;
3315
  i_ehdrp->e_ehsize = bed->s->sizeof_ehdr;
3316
 
3317
  /* no program header, for now. */
3318
  i_ehdrp->e_phoff = 0;
3319
  i_ehdrp->e_phentsize = 0;
3320
  i_ehdrp->e_phnum = 0;
3321
 
3322
  /* each bfd section is section header entry */
3323
  i_ehdrp->e_entry = bfd_get_start_address (abfd);
3324
  i_ehdrp->e_shentsize = bed->s->sizeof_shdr;
3325
 
3326
  /* if we're building an executable, we'll need a program header table */
3327
  if (abfd->flags & EXEC_P)
3328
    {
3329
      /* it all happens later */
3330
#if 0
3331
      i_ehdrp->e_phentsize = sizeof (Elf_External_Phdr);
3332
 
3333
      /* elf_build_phdrs() returns a (NULL-terminated) array of
3334
         Elf_Internal_Phdrs */
3335
      i_phdrp = elf_build_phdrs (abfd, i_ehdrp, i_shdrp, &i_ehdrp->e_phnum);
3336
      i_ehdrp->e_phoff = outbase;
3337
      outbase += i_ehdrp->e_phentsize * i_ehdrp->e_phnum;
3338
#endif
3339
    }
3340
  else
3341
    {
3342
      i_ehdrp->e_phentsize = 0;
3343
      i_phdrp = 0;
3344
      i_ehdrp->e_phoff = 0;
3345
    }
3346
 
3347
  elf_tdata (abfd)->symtab_hdr.sh_name =
3348
    (unsigned int) _bfd_stringtab_add (shstrtab, ".symtab", true, false);
3349
  elf_tdata (abfd)->strtab_hdr.sh_name =
3350
    (unsigned int) _bfd_stringtab_add (shstrtab, ".strtab", true, false);
3351
  elf_tdata (abfd)->shstrtab_hdr.sh_name =
3352
    (unsigned int) _bfd_stringtab_add (shstrtab, ".shstrtab", true, false);
3353
  if (elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
3354
      || elf_tdata (abfd)->symtab_hdr.sh_name == (unsigned int) -1
3355
      || elf_tdata (abfd)->shstrtab_hdr.sh_name == (unsigned int) -1)
3356
    return false;
3357
 
3358
  return true;
3359
}
3360
 
3361
/* Assign file positions for all the reloc sections which are not part
3362
   of the loadable file image.  */
3363
 
3364
void
3365
_bfd_elf_assign_file_positions_for_relocs (abfd)
3366
     bfd *abfd;
3367
{
3368
  file_ptr off;
3369
  unsigned int i;
3370
  Elf_Internal_Shdr **shdrpp;
3371
 
3372
  off = elf_tdata (abfd)->next_file_pos;
3373
 
3374
  for (i = 1, shdrpp = elf_elfsections (abfd) + 1;
3375
       i < elf_elfheader (abfd)->e_shnum;
3376
       i++, shdrpp++)
3377
    {
3378
      Elf_Internal_Shdr *shdrp;
3379
 
3380
      shdrp = *shdrpp;
3381
      if ((shdrp->sh_type == SHT_REL || shdrp->sh_type == SHT_RELA)
3382
          && shdrp->sh_offset == -1)
3383
        off = _bfd_elf_assign_file_position_for_section (shdrp, off, true);
3384
    }
3385
 
3386
  elf_tdata (abfd)->next_file_pos = off;
3387
}
3388
 
3389
boolean
3390
_bfd_elf_write_object_contents (abfd)
3391
     bfd *abfd;
3392
{
3393
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
3394
  Elf_Internal_Ehdr *i_ehdrp;
3395
  Elf_Internal_Shdr **i_shdrp;
3396
  boolean failed;
3397
  unsigned int count;
3398
 
3399
  if (! abfd->output_has_begun
3400
      && ! _bfd_elf_compute_section_file_positions
3401
             (abfd, (struct bfd_link_info *) NULL))
3402
    return false;
3403
 
3404
  i_shdrp = elf_elfsections (abfd);
3405
  i_ehdrp = elf_elfheader (abfd);
3406
 
3407
  failed = false;
3408
  bfd_map_over_sections (abfd, bed->s->write_relocs, &failed);
3409
  if (failed)
3410
    return false;
3411
 
3412
  _bfd_elf_assign_file_positions_for_relocs (abfd);
3413
 
3414
  /* After writing the headers, we need to write the sections too... */
3415
  for (count = 1; count < i_ehdrp->e_shnum; count++)
3416
    {
3417
      if (bed->elf_backend_section_processing)
3418
        (*bed->elf_backend_section_processing) (abfd, i_shdrp[count]);
3419
      if (i_shdrp[count]->contents)
3420
        {
3421
          if (bfd_seek (abfd, i_shdrp[count]->sh_offset, SEEK_SET) != 0
3422
              || (bfd_write (i_shdrp[count]->contents, i_shdrp[count]->sh_size,
3423
                             1, abfd)
3424
                  != i_shdrp[count]->sh_size))
3425
            return false;
3426
        }
3427
    }
3428
 
3429
  /* Write out the section header names.  */
3430
  if (bfd_seek (abfd, elf_tdata (abfd)->shstrtab_hdr.sh_offset, SEEK_SET) != 0
3431
      || ! _bfd_stringtab_emit (abfd, elf_shstrtab (abfd)))
3432
    return false;
3433
 
3434
  if (bed->elf_backend_final_write_processing)
3435
    (*bed->elf_backend_final_write_processing) (abfd,
3436
                                                elf_tdata (abfd)->linker);
3437
 
3438
  return bed->s->write_shdrs_and_ehdr (abfd);
3439
}
3440
 
3441
boolean
3442
_bfd_elf_write_corefile_contents (abfd)
3443
     bfd *abfd;
3444
{
3445
  /* Hopefully this can be done just like an object file. */
3446
  return _bfd_elf_write_object_contents (abfd);
3447
}
3448
/* given a section, search the header to find them... */
3449
int
3450
_bfd_elf_section_from_bfd_section (abfd, asect)
3451
     bfd *abfd;
3452
     struct sec *asect;
3453
{
3454
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
3455
  Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd);
3456
  int index;
3457
  Elf_Internal_Shdr *hdr;
3458
  int maxindex = elf_elfheader (abfd)->e_shnum;
3459
 
3460
  for (index = 0; index < maxindex; index++)
3461
    {
3462
      hdr = i_shdrp[index];
3463
      if (hdr->bfd_section == asect)
3464
        return index;
3465
    }
3466
 
3467
  if (bed->elf_backend_section_from_bfd_section)
3468
    {
3469
      for (index = 0; index < maxindex; index++)
3470
        {
3471
          int retval;
3472
 
3473
          hdr = i_shdrp[index];
3474
          retval = index;
3475
          if ((*bed->elf_backend_section_from_bfd_section)
3476
              (abfd, hdr, asect, &retval))
3477
            return retval;
3478
        }
3479
    }
3480
 
3481
  if (bfd_is_abs_section (asect))
3482
    return SHN_ABS;
3483
  if (bfd_is_com_section (asect))
3484
    return SHN_COMMON;
3485
  if (bfd_is_und_section (asect))
3486
    return SHN_UNDEF;
3487
 
3488
  bfd_set_error (bfd_error_nonrepresentable_section);
3489
 
3490
  return -1;
3491
}
3492
 
3493
/* Given a BFD symbol, return the index in the ELF symbol table, or -1
3494
   on error.  */
3495
 
3496
int
3497
_bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
3498
     bfd *abfd;
3499
     asymbol **asym_ptr_ptr;
3500
{
3501
  asymbol *asym_ptr = *asym_ptr_ptr;
3502
  int idx;
3503
  flagword flags = asym_ptr->flags;
3504
 
3505
  /* When gas creates relocations against local labels, it creates its
3506
     own symbol for the section, but does put the symbol into the
3507
     symbol chain, so udata is 0.  When the linker is generating
3508
     relocatable output, this section symbol may be for one of the
3509
     input sections rather than the output section.  */
3510
  if (asym_ptr->udata.i == 0
3511
      && (flags & BSF_SECTION_SYM)
3512
      && asym_ptr->section)
3513
    {
3514
      int indx;
3515
 
3516
      if (asym_ptr->section->output_section != NULL)
3517
        indx = asym_ptr->section->output_section->index;
3518
      else
3519
        indx = asym_ptr->section->index;
3520
      if (elf_section_syms (abfd)[indx])
3521
        asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;
3522
    }
3523
 
3524
  idx = asym_ptr->udata.i;
3525
 
3526
  if (idx == 0)
3527
    {
3528
      /* This case can occur when using --strip-symbol on a symbol
3529
         which is used in a relocation entry.  */
3530
      (*_bfd_error_handler)
3531
        (_("%s: symbol `%s' required but not present"),
3532
         bfd_get_filename (abfd), bfd_asymbol_name (asym_ptr));
3533
      bfd_set_error (bfd_error_no_symbols);
3534
      return -1;
3535
    }
3536
 
3537
#if DEBUG & 4
3538
  {
3539
    fprintf (stderr,
3540
             _("elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n"),
3541
             (long) asym_ptr, asym_ptr->name, idx, flags,
3542
             elf_symbol_flags (flags));
3543
    fflush (stderr);
3544
  }
3545
#endif
3546
 
3547
  return idx;
3548
}
3549
 
3550
/* Copy private BFD data.  This copies any program header information.  */
3551
 
3552
static boolean
3553
copy_private_bfd_data (ibfd, obfd)
3554
     bfd *ibfd;
3555
     bfd *obfd;
3556
{
3557
  Elf_Internal_Ehdr *iehdr;
3558
  struct elf_segment_map *mfirst;
3559
  struct elf_segment_map **pm;
3560
  struct elf_segment_map *m;
3561
  Elf_Internal_Phdr *p;
3562
  unsigned int i;
3563
  unsigned int num_segments;
3564
  boolean phdr_included = false;
3565
 
3566
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
3567
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
3568
    return true;
3569
 
3570
  if (elf_tdata (ibfd)->phdr == NULL)
3571
    return true;
3572
 
3573
  iehdr = elf_elfheader (ibfd);
3574
 
3575
  mfirst = NULL;
3576
  pm = &mfirst;
3577
 
3578
  num_segments = elf_elfheader (ibfd)->e_phnum;
3579
 
3580
#define IS_CONTAINED_BY(addr, len, bottom, phdr)                        \
3581
          ((addr) >= (bottom)                                           \
3582
           && (   ((addr) + (len)) <= ((bottom) + (phdr)->p_memsz)      \
3583
               || ((addr) + (len)) <= ((bottom) + (phdr)->p_filesz)))
3584
 
3585
  /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */
3586
 
3587
#define IS_COREFILE_NOTE(p, s)                                          \
3588
            (p->p_type == PT_NOTE                                       \
3589
             && bfd_get_format (ibfd) == bfd_core                       \
3590
             && s->vma == 0 && s->lma == 0                              \
3591
             && (bfd_vma) s->filepos >= p->p_offset                     \
3592
             && (bfd_vma) s->filepos + s->_raw_size                     \
3593
             <= p->p_offset + p->p_filesz)
3594
 
3595
  /* The complicated case when p_vaddr is 0 is to handle the Solaris
3596
     linker, which generates a PT_INTERP section with p_vaddr and
3597
     p_memsz set to 0.  */
3598
 
3599
#define IS_SOLARIS_PT_INTERP(p, s)                                      \
3600
            (p->p_vaddr == 0                                             \
3601
             && p->p_filesz > 0                                          \
3602
             && (s->flags & SEC_HAS_CONTENTS) != 0                       \
3603
             && s->_raw_size > 0                                 \
3604
             && (bfd_vma) s->filepos >= p->p_offset                     \
3605
             && ((bfd_vma) s->filepos + s->_raw_size                    \
3606
                     <= p->p_offset + p->p_filesz))
3607
 
3608
  /* Scan through the segments specified in the program header
3609
     of the input BFD.  */
3610
  for (i = 0, p = elf_tdata (ibfd)->phdr; i < num_segments; i++, p++)
3611
    {
3612
      unsigned int csecs;
3613
      asection *s;
3614
      asection **sections;
3615
      asection *os;
3616
      unsigned int isec;
3617
      bfd_vma matching_lma;
3618
      bfd_vma suggested_lma;
3619
      unsigned int j;
3620
 
3621
      /* For each section in the input BFD, decide if it should be
3622
         included in the current segment.  A section will be included
3623
         if it is within the address space of the segment, and it is
3624
         an allocated segment, and there is an output section
3625
         associated with it.  */
3626
      csecs = 0;
3627
      for (s = ibfd->sections; s != NULL; s = s->next)
3628
        if (s->output_section != NULL)
3629
          {
3630
            if ((IS_CONTAINED_BY (s->vma, s->_raw_size, p->p_vaddr, p)
3631
                 || IS_SOLARIS_PT_INTERP (p, s))
3632
                && (s->flags & SEC_ALLOC) != 0)
3633
              ++csecs;
3634
            else if (IS_COREFILE_NOTE (p, s))
3635
              ++csecs;
3636
          }
3637
 
3638
      /* Allocate a segment map big enough to contain all of the
3639
         sections we have selected.  */
3640
      m = ((struct elf_segment_map *)
3641
           bfd_alloc (obfd,
3642
                      (sizeof (struct elf_segment_map)
3643
                       + ((size_t) csecs - 1) * sizeof (asection *))));
3644
      if (m == NULL)
3645
        return false;
3646
 
3647
      /* Initialise the fields of the segment map.  Default to
3648
         using the physical address of the segment in the input BFD.  */
3649
      m->next          = NULL;
3650
      m->p_type        = p->p_type;
3651
      m->p_flags       = p->p_flags;
3652
      m->p_flags_valid = 1;
3653
      m->p_paddr       = p->p_paddr;
3654
      m->p_paddr_valid = 1;
3655
 
3656
      /* Determine if this segment contains the ELF file header
3657
         and if it contains the program headers themselves.  */
3658
      m->includes_filehdr = (p->p_offset == 0
3659
                             && p->p_filesz >= iehdr->e_ehsize);
3660
 
3661
      m->includes_phdrs = 0;
3662
 
3663
      if (! phdr_included || p->p_type != PT_LOAD)
3664
        {
3665
          m->includes_phdrs =
3666
            (p->p_offset <= (bfd_vma) iehdr->e_phoff
3667
             && (p->p_offset + p->p_filesz
3668
                 >= ((bfd_vma) iehdr->e_phoff
3669
                     + iehdr->e_phnum * iehdr->e_phentsize)));
3670
          if (p->p_type == PT_LOAD && m->includes_phdrs)
3671
            phdr_included = true;
3672
        }
3673
 
3674
      if (csecs == 0)
3675
        {
3676
          /* Special segments, such as the PT_PHDR segment, may contain
3677
             no sections, but ordinary, loadable segments should contain
3678
             something.  */
3679
 
3680
          if (p->p_type == PT_LOAD)
3681
              _bfd_error_handler
3682
                (_("%s: warning: Empty loadable segment detected\n"),
3683
                 bfd_get_filename (ibfd));
3684
 
3685
          m->count = 0;
3686
          *pm = m;
3687
          pm = &m->next;
3688
 
3689
          continue;
3690
        }
3691
 
3692
      /* Now scan the sections in the input BFD again and attempt
3693
         to add their corresponding output sections to the segment map.
3694
         The problem here is how to handle an output section which has
3695
         been moved (ie had its LMA changed).  There are four possibilities:
3696
 
3697
         1. None of the sections have been moved.
3698
            In this case we can continue to use the segment LMA from the
3699
            input BFD.
3700
 
3701
         2. All of the sections have been moved by the same amount.
3702
            In this case we can change the segment's LMA to match the LMA
3703
            of the first section.
3704
 
3705
         3. Some of the sections have been moved, others have not.
3706
            In this case those sections which have not been moved can be
3707
            placed in the current segment which will have to have its size,
3708
            and possibly its LMA changed, and a new segment or segments will
3709
            have to be created to contain the other sections.
3710
 
3711
         4. The sections have been moved, but not be the same amount.
3712
            In this case we can change the segment's LMA to match the LMA
3713
            of the first section and we will have to create a new segment
3714
            or segments to contain the other sections.
3715
 
3716
         In order to save time, we allocate an array to hold the section
3717
         pointers that we are interested in.  As these sections get assigned
3718
         to a segment, they are removed from this array.  */
3719
 
3720
      sections = (asection **) bfd_malloc (sizeof (asection *) * csecs);
3721
      if (sections == NULL)
3722
        return false;
3723
 
3724
      /* Step One: Scan for segment vs section LMA conflicts.
3725
         Also add the sections to the section array allocated above.
3726
         Also add the sections to the current segment.  In the common
3727
         case, where the sections have not been moved, this means that
3728
         we have completely filled the segment, and there is nothing
3729
         more to do.  */
3730
 
3731
      isec = 0;
3732
      matching_lma = false;
3733
      suggested_lma = 0;
3734
 
3735
      for (j = 0, s = ibfd->sections; s != NULL; s = s->next)
3736
        {
3737
          os = s->output_section;
3738
 
3739
          if ((((IS_CONTAINED_BY (s->vma, s->_raw_size, p->p_vaddr, p)
3740
                 || IS_SOLARIS_PT_INTERP (p, s))
3741
                && (s->flags & SEC_ALLOC) != 0)
3742
               || IS_COREFILE_NOTE (p, s))
3743
              && os != NULL)
3744
            {
3745
              sections[j++] = s;
3746
 
3747
              /* The Solaris native linker always sets p_paddr to 0.
3748
                 We try to catch that case here, and set it to the
3749
                 correct value.  */
3750
              if (p->p_paddr == 0
3751
                  && p->p_vaddr != 0
3752
                  && isec == 0
3753
                  && os->lma != 0
3754
                  && (os->vma == (p->p_vaddr
3755
                                  + (m->includes_filehdr
3756
                                     ? iehdr->e_ehsize
3757
                                     : 0)
3758
                                  + (m->includes_phdrs
3759
                                     ? iehdr->e_phnum * iehdr->e_phentsize
3760
                                     : 0))))
3761
                m->p_paddr = p->p_vaddr;
3762
 
3763
              /* Match up the physical address of the segment with the
3764
                 LMA address of the output section.  */
3765
              if (IS_CONTAINED_BY (os->lma, os->_raw_size, m->p_paddr, p)
3766
                  || IS_COREFILE_NOTE (p, s))
3767
                {
3768
                  if (matching_lma == 0)
3769
                    matching_lma = os->lma;
3770
 
3771
                  /* We assume that if the section fits within the segment
3772
                     that it does not overlap any other section within that
3773
                     segment.  */
3774
                  m->sections[isec++] = os;
3775
                }
3776
              else if (suggested_lma == 0)
3777
                suggested_lma = os->lma;
3778
            }
3779
        }
3780
 
3781
      BFD_ASSERT (j == csecs);
3782
 
3783
      /* Step Two: Adjust the physical address of the current segment,
3784
         if necessary.  */
3785
      if (isec == csecs)
3786
        {
3787
          /* All of the sections fitted within the segment as currently
3788
             specified.  This is the default case.  Add the segment to
3789
             the list of built segments and carry on to process the next
3790
             program header in the input BFD.  */
3791
          m->count = csecs;
3792
          *pm = m;
3793
          pm = &m->next;
3794
 
3795
          free (sections);
3796
          continue;
3797
        }
3798
      else if (matching_lma != 0)
3799
        {
3800
          /* At least one section fits inside the current segment.
3801
             Keep it, but modify its physical address to match the
3802
             LMA of the first section that fitted.  */
3803
 
3804
          m->p_paddr = matching_lma;
3805
        }
3806
      else
3807
        {
3808
          /* None of the sections fitted inside the current segment.
3809
             Change the current segment's physical address to match
3810
             the LMA of the first section.  */
3811
 
3812
          m->p_paddr = suggested_lma;
3813
        }
3814
 
3815
      /* Step Three: Loop over the sections again, this time assigning
3816
         those that fit to the current segment and remvoing them from the
3817
         sections array; but making sure not to leave large gaps.  Once all
3818
         possible sections have been assigned to the current segment it is
3819
         added to the list of built segments and if sections still remain
3820
         to be assigned, a new segment is constructed before repeating
3821
         the loop.  */
3822
      isec = 0;
3823
      do
3824
        {
3825
          m->count = 0;
3826
          suggested_lma = 0;
3827
 
3828
          /* Fill the current segment with sections that fit.  */
3829
          for (j = 0; j < csecs; j++)
3830
            {
3831
              s = sections[j];
3832
 
3833
              if (s == NULL)
3834
                continue;
3835
 
3836
              os = s->output_section;
3837
 
3838
              if (IS_CONTAINED_BY (os->lma, os->_raw_size, m->p_paddr, p)
3839
                  || IS_COREFILE_NOTE (p, s))
3840
                {
3841
                  if (m->count == 0)
3842
                    {
3843
                      /* If the first section in a segment does not start at
3844
                         the beginning of the segment, then something is wrong.  */
3845
                      if (os->lma != m->p_paddr)
3846
                        abort ();
3847
                    }
3848
                  else
3849
                    {
3850
                      asection * prev_sec;
3851
                      bfd_vma maxpagesize;
3852
 
3853
                      prev_sec = m->sections[m->count - 1];
3854
                      maxpagesize = get_elf_backend_data (obfd)->maxpagesize;
3855
 
3856
                      /* If the gap between the end of the previous section
3857
                         and the start of this section is more than maxpagesize
3858
                         then we need to start a new segment.  */
3859
                      if (BFD_ALIGN (prev_sec->lma + prev_sec->_raw_size, maxpagesize)
3860
                          < BFD_ALIGN (os->lma, maxpagesize))
3861
                        {
3862
                          if (suggested_lma == 0)
3863
                            suggested_lma = os->lma;
3864
 
3865
                          continue;
3866
                        }
3867
                    }
3868
 
3869
                  m->sections[m->count++] = os;
3870
                  ++isec;
3871
                  sections[j] = NULL;
3872
                }
3873
              else if (suggested_lma == 0)
3874
                suggested_lma = os->lma;
3875
            }
3876
 
3877
          BFD_ASSERT (m->count > 0);
3878
 
3879
          /* Add the current segment to the list of built segments.  */
3880
          *pm = m;
3881
          pm = &m->next;
3882
 
3883
          if (isec < csecs)
3884
            {
3885
              /* We still have not allocated all of the sections to
3886
                 segments.  Create a new segment here, initialise it
3887
                 and carry on looping.  */
3888
 
3889
              m = ((struct elf_segment_map *)
3890
                   bfd_alloc (obfd,
3891
                              (sizeof (struct elf_segment_map)
3892
                               + ((size_t) csecs - 1) * sizeof (asection *))));
3893
              if (m == NULL)
3894
                return false;
3895
 
3896
              /* Initialise the fields of the segment map.  Set the physical
3897
                 physical address to the LMA of the first section that has
3898
                 not yet been assigned.  */
3899
 
3900
              m->next             = NULL;
3901
              m->p_type           = p->p_type;
3902
              m->p_flags          = p->p_flags;
3903
              m->p_flags_valid    = 1;
3904
              m->p_paddr          = suggested_lma;
3905
              m->p_paddr_valid    = 1;
3906
              m->includes_filehdr = 0;
3907
              m->includes_phdrs   = 0;
3908
            }
3909
        }
3910
      while (isec < csecs);
3911
 
3912
      free (sections);
3913
    }
3914
 
3915
  /* The Solaris linker creates program headers in which all the
3916
     p_paddr fields are zero.  When we try to objcopy or strip such a
3917
     file, we get confused.  Check for this case, and if we find it
3918
     reset the p_paddr_valid fields.  */
3919
  for (m = mfirst; m != NULL; m = m->next)
3920
    if (m->p_paddr != 0)
3921
      break;
3922
  if (m == NULL)
3923
    {
3924
      for (m = mfirst; m != NULL; m = m->next)
3925
        m->p_paddr_valid = 0;
3926
    }
3927
 
3928
  elf_tdata (obfd)->segment_map = mfirst;
3929
 
3930
#if 0
3931
  /* Final Step: Sort the segments into ascending order of physical address. */
3932
  if (mfirst != NULL)
3933
    {
3934
      struct elf_segment_map* prev;
3935
 
3936
      prev = mfirst;
3937
      for (m = mfirst->next; m != NULL; prev = m, m = m->next)
3938
        {
3939
          /* Yes I know - its a bubble sort....*/
3940
          if (m->next != NULL && (m->next->p_paddr < m->p_paddr))
3941
            {
3942
              /* swap m and m->next */
3943
              prev->next = m->next;
3944
              m->next = m->next->next;
3945
              prev->next->next = m;
3946
 
3947
              /* restart loop. */
3948
              m = mfirst;
3949
            }
3950
        }
3951
    }
3952
#endif
3953
 
3954
#undef IS_CONTAINED_BY
3955
#undef IS_SOLARIS_PT_INTERP
3956
#undef IS_COREFILE_NOTE
3957
  return true;
3958
}
3959
 
3960
/* Copy private section information.  This copies over the entsize
3961
   field, and sometimes the info field.  */
3962
 
3963
boolean
3964
_bfd_elf_copy_private_section_data (ibfd, isec, obfd, osec)
3965
     bfd *ibfd;
3966
     asection *isec;
3967
     bfd *obfd;
3968
     asection *osec;
3969
{
3970
  Elf_Internal_Shdr *ihdr, *ohdr;
3971
 
3972
  if (ibfd->xvec->flavour != bfd_target_elf_flavour
3973
      || obfd->xvec->flavour != bfd_target_elf_flavour)
3974
    return true;
3975
 
3976
  /* Copy over private BFD data if it has not already been copied.
3977
     This must be done here, rather than in the copy_private_bfd_data
3978
     entry point, because the latter is called after the section
3979
     contents have been set, which means that the program headers have
3980
     already been worked out.  */
3981
  if (elf_tdata (obfd)->segment_map == NULL
3982
      && elf_tdata (ibfd)->phdr != NULL)
3983
    {
3984
      asection *s;
3985
 
3986
      /* Only set up the segments if there are no more SEC_ALLOC
3987
         sections.  FIXME: This won't do the right thing if objcopy is
3988
         used to remove the last SEC_ALLOC section, since objcopy
3989
         won't call this routine in that case.  */
3990
      for (s = isec->next; s != NULL; s = s->next)
3991
        if ((s->flags & SEC_ALLOC) != 0)
3992
          break;
3993
      if (s == NULL)
3994
        {
3995
          if (! copy_private_bfd_data (ibfd, obfd))
3996
            return false;
3997
        }
3998
    }
3999
 
4000
  ihdr = &elf_section_data (isec)->this_hdr;
4001
  ohdr = &elf_section_data (osec)->this_hdr;
4002
 
4003
  ohdr->sh_entsize = ihdr->sh_entsize;
4004
 
4005
  if (ihdr->sh_type == SHT_SYMTAB
4006
      || ihdr->sh_type == SHT_DYNSYM
4007
      || ihdr->sh_type == SHT_GNU_verneed
4008
      || ihdr->sh_type == SHT_GNU_verdef)
4009
    ohdr->sh_info = ihdr->sh_info;
4010
 
4011
  elf_section_data (osec)->use_rela_p
4012
    = elf_section_data (isec)->use_rela_p;
4013
 
4014
  return true;
4015
}
4016
 
4017
/* Copy private symbol information.  If this symbol is in a section
4018
   which we did not map into a BFD section, try to map the section
4019
   index correctly.  We use special macro definitions for the mapped
4020
   section indices; these definitions are interpreted by the
4021
   swap_out_syms function.  */
4022
 
4023
#define MAP_ONESYMTAB (SHN_LORESERVE - 1)
4024
#define MAP_DYNSYMTAB (SHN_LORESERVE - 2)
4025
#define MAP_STRTAB (SHN_LORESERVE - 3)
4026
#define MAP_SHSTRTAB (SHN_LORESERVE - 4)
4027
 
4028
boolean
4029
_bfd_elf_copy_private_symbol_data (ibfd, isymarg, obfd, osymarg)
4030
     bfd *ibfd;
4031
     asymbol *isymarg;
4032
     bfd *obfd;
4033
     asymbol *osymarg;
4034
{
4035
  elf_symbol_type *isym, *osym;
4036
 
4037
  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4038
      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4039
    return true;
4040
 
4041
  isym = elf_symbol_from (ibfd, isymarg);
4042
  osym = elf_symbol_from (obfd, osymarg);
4043
 
4044
  if (isym != NULL
4045
      && osym != NULL
4046
      && bfd_is_abs_section (isym->symbol.section))
4047
    {
4048
      unsigned int shndx;
4049
 
4050
      shndx = isym->internal_elf_sym.st_shndx;
4051
      if (shndx == elf_onesymtab (ibfd))
4052
        shndx = MAP_ONESYMTAB;
4053
      else if (shndx == elf_dynsymtab (ibfd))
4054
        shndx = MAP_DYNSYMTAB;
4055
      else if (shndx == elf_tdata (ibfd)->strtab_section)
4056
        shndx = MAP_STRTAB;
4057
      else if (shndx == elf_tdata (ibfd)->shstrtab_section)
4058
        shndx = MAP_SHSTRTAB;
4059
      osym->internal_elf_sym.st_shndx = shndx;
4060
    }
4061
 
4062
  return true;
4063
}
4064
 
4065
/* Swap out the symbols.  */
4066
 
4067
static boolean
4068
swap_out_syms (abfd, sttp, relocatable_p)
4069
     bfd *abfd;
4070
     struct bfd_strtab_hash **sttp;
4071
     int relocatable_p;
4072
{
4073
  struct elf_backend_data *bed = get_elf_backend_data (abfd);
4074
 
4075
  if (!elf_map_symbols (abfd))
4076
    return false;
4077
 
4078
  /* Dump out the symtabs. */
4079
  {
4080
    int symcount = bfd_get_symcount (abfd);
4081
    asymbol **syms = bfd_get_outsymbols (abfd);
4082
    struct bfd_strtab_hash *stt;
4083
    Elf_Internal_Shdr *symtab_hdr;
4084
    Elf_Internal_Shdr *symstrtab_hdr;
4085
    char *outbound_syms;
4086
    int idx;
4087
 
4088
    stt = _bfd_elf_stringtab_init ();
4089
    if (stt == NULL)
4090
      return false;
4091
 
4092
    symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4093
    symtab_hdr->sh_type = SHT_SYMTAB;
4094
    symtab_hdr->sh_entsize = bed->s->sizeof_sym;
4095
    symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1);
4096
    symtab_hdr->sh_info = elf_num_locals (abfd) + 1;
4097
    symtab_hdr->sh_addralign = bed->s->file_align;
4098
 
4099
    symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr;
4100
    symstrtab_hdr->sh_type = SHT_STRTAB;
4101
 
4102
    outbound_syms = bfd_alloc (abfd,
4103
                               (1 + symcount) * bed->s->sizeof_sym);
4104
    if (outbound_syms == NULL)
4105
      return false;
4106
    symtab_hdr->contents = (PTR) outbound_syms;
4107
 
4108
    /* now generate the data (for "contents") */
4109
    {
4110
      /* Fill in zeroth symbol and swap it out.  */
4111
      Elf_Internal_Sym sym;
4112
      sym.st_name = 0;
4113
      sym.st_value = 0;
4114
      sym.st_size = 0;
4115
      sym.st_info = 0;
4116
      sym.st_other = 0;
4117
      sym.st_shndx = SHN_UNDEF;
4118
      bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
4119
      outbound_syms += bed->s->sizeof_sym;
4120
    }
4121
    for (idx = 0; idx < symcount; idx++)
4122
      {
4123
        Elf_Internal_Sym sym;
4124
        bfd_vma value = syms[idx]->value;
4125
        elf_symbol_type *type_ptr;
4126
        flagword flags = syms[idx]->flags;
4127
        int type;
4128
 
4129
        if (flags & BSF_SECTION_SYM)
4130
          /* Section symbols have no names.  */
4131
          sym.st_name = 0;
4132
        else
4133
          {
4134
            sym.st_name = (unsigned long) _bfd_stringtab_add (stt,
4135
                                                              syms[idx]->name,
4136
                                                              true, false);
4137
            if (sym.st_name == (unsigned long) -1)
4138
              return false;
4139
          }
4140
 
4141
        type_ptr = elf_symbol_from (abfd, syms[idx]);
4142
 
4143
        if ((flags & BSF_SECTION_SYM) == 0
4144
            && bfd_is_com_section (syms[idx]->section))
4145
          {
4146
            /* ELF common symbols put the alignment into the `value' field,
4147
               and the size into the `size' field.  This is backwards from
4148
               how BFD handles it, so reverse it here.  */
4149
            sym.st_size = value;
4150
            if (type_ptr == NULL
4151
                || type_ptr->internal_elf_sym.st_value == 0)
4152
              sym.st_value = value >= 16 ? 16 : (1 << bfd_log2 (value));
4153
            else
4154
              sym.st_value = type_ptr->internal_elf_sym.st_value;
4155
            sym.st_shndx = _bfd_elf_section_from_bfd_section
4156
              (abfd, syms[idx]->section);
4157
          }
4158
        else
4159
          {
4160
            asection *sec = syms[idx]->section;
4161
            int shndx;
4162
 
4163
            if (sec->output_section)
4164
              {
4165
                value += sec->output_offset;
4166
                sec = sec->output_section;
4167
              }
4168
            /* Don't add in the section vma for relocatable output.  */
4169
            if (! relocatable_p)
4170
              value += sec->vma;
4171
            sym.st_value = value;
4172
            sym.st_size = type_ptr ? type_ptr->internal_elf_sym.st_size : 0;
4173
 
4174
            if (bfd_is_abs_section (sec)
4175
                && type_ptr != NULL
4176
                && type_ptr->internal_elf_sym.st_shndx != 0)
4177
              {
4178
                /* This symbol is in a real ELF section which we did
4179
                   not create as a BFD section.  Undo the mapping done
4180
                   by copy_private_symbol_data.  */
4181
                shndx = type_ptr->internal_elf_sym.st_shndx;
4182
                switch (shndx)
4183
                  {
4184
                  case MAP_ONESYMTAB:
4185
                    shndx = elf_onesymtab (abfd);
4186
                    break;
4187
                  case MAP_DYNSYMTAB:
4188
                    shndx = elf_dynsymtab (abfd);
4189
                    break;
4190
                  case MAP_STRTAB:
4191
                    shndx = elf_tdata (abfd)->strtab_section;
4192
                    break;
4193
                  case MAP_SHSTRTAB:
4194
                    shndx = elf_tdata (abfd)->shstrtab_section;
4195
                    break;
4196
                  default:
4197
                    break;
4198
                  }
4199
              }
4200
            else
4201
              {
4202
                shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
4203
 
4204
                if (shndx == -1)
4205
                  {
4206
                    asection *sec2;
4207
 
4208
                    /* Writing this would be a hell of a lot easier if
4209
                       we had some decent documentation on bfd, and
4210
                       knew what to expect of the library, and what to
4211
                       demand of applications.  For example, it
4212
                       appears that `objcopy' might not set the
4213
                       section of a symbol to be a section that is
4214
                       actually in the output file.  */
4215
                    sec2 = bfd_get_section_by_name (abfd, sec->name);
4216
                    BFD_ASSERT (sec2 != 0);
4217
                    shndx = _bfd_elf_section_from_bfd_section (abfd, sec2);
4218
                    BFD_ASSERT (shndx != -1);
4219
                  }
4220
              }
4221
 
4222
            sym.st_shndx = shndx;
4223
          }
4224
 
4225
        if ((flags & BSF_FUNCTION) != 0)
4226
          type = STT_FUNC;
4227
        else if ((flags & BSF_OBJECT) != 0)
4228
          type = STT_OBJECT;
4229
        else
4230
          type = STT_NOTYPE;
4231
 
4232
        /* Processor-specific types */
4233
        if (type_ptr != NULL
4234
            && bed->elf_backend_get_symbol_type)
4235
          type = (*bed->elf_backend_get_symbol_type) (&type_ptr->internal_elf_sym, type);
4236
 
4237
        if (flags & BSF_SECTION_SYM)
4238
          sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION);
4239
        else if (bfd_is_com_section (syms[idx]->section))
4240
          sym.st_info = ELF_ST_INFO (STB_GLOBAL, type);
4241
        else if (bfd_is_und_section (syms[idx]->section))
4242
          sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK)
4243
                                      ? STB_WEAK
4244
                                      : STB_GLOBAL),
4245
                                     type);
4246
        else if (flags & BSF_FILE)
4247
          sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FILE);
4248
        else
4249
          {
4250
            int bind = STB_LOCAL;
4251
 
4252
            if (flags & BSF_LOCAL)
4253
              bind = STB_LOCAL;
4254
            else if (flags & BSF_WEAK)
4255
              bind = STB_WEAK;
4256
            else if (flags & BSF_GLOBAL)
4257
              bind = STB_GLOBAL;
4258
 
4259
            sym.st_info = ELF_ST_INFO (bind, type);
4260
          }
4261
 
4262
        if (type_ptr != NULL)
4263
          sym.st_other = type_ptr->internal_elf_sym.st_other;
4264
        else
4265
          sym.st_other = 0;
4266
 
4267
        bed->s->swap_symbol_out (abfd, &sym, (PTR) outbound_syms);
4268
        outbound_syms += bed->s->sizeof_sym;
4269
      }
4270
 
4271
    *sttp = stt;
4272
    symstrtab_hdr->sh_size = _bfd_stringtab_size (stt);
4273
    symstrtab_hdr->sh_type = SHT_STRTAB;
4274
 
4275
    symstrtab_hdr->sh_flags = 0;
4276
    symstrtab_hdr->sh_addr = 0;
4277
    symstrtab_hdr->sh_entsize = 0;
4278
    symstrtab_hdr->sh_link = 0;
4279
    symstrtab_hdr->sh_info = 0;
4280
    symstrtab_hdr->sh_addralign = 1;
4281
  }
4282
 
4283
  return true;
4284
}
4285
 
4286
/* Return the number of bytes required to hold the symtab vector.
4287
 
4288
   Note that we base it on the count plus 1, since we will null terminate
4289
   the vector allocated based on this size.  However, the ELF symbol table
4290
   always has a dummy entry as symbol #0, so it ends up even.  */
4291
 
4292
long
4293
_bfd_elf_get_symtab_upper_bound (abfd)
4294
     bfd *abfd;
4295
{
4296
  long symcount;
4297
  long symtab_size;
4298
  Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
4299
 
4300
  symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4301
  symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4302
 
4303
  return symtab_size;
4304
}
4305
 
4306
long
4307
_bfd_elf_get_dynamic_symtab_upper_bound (abfd)
4308
     bfd *abfd;
4309
{
4310
  long symcount;
4311
  long symtab_size;
4312
  Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->dynsymtab_hdr;
4313
 
4314
  if (elf_dynsymtab (abfd) == 0)
4315
    {
4316
      bfd_set_error (bfd_error_invalid_operation);
4317
      return -1;
4318
    }
4319
 
4320
  symcount = hdr->sh_size / get_elf_backend_data (abfd)->s->sizeof_sym;
4321
  symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
4322
 
4323
  return symtab_size;
4324
}
4325
 
4326
long
4327
_bfd_elf_get_reloc_upper_bound (abfd, asect)
4328
     bfd *abfd ATTRIBUTE_UNUSED;
4329
     sec_ptr asect;
4330
{
4331
  return (asect->reloc_count + 1) * sizeof (arelent *);
4332
}
4333
 
4334
/* Canonicalize the relocs.  */
4335
 
4336
long
4337
_bfd_elf_canonicalize_reloc (abfd, section, relptr, symbols)
4338
     bfd *abfd;
4339
     sec_ptr section;
4340
     arelent **relptr;
4341
     asymbol **symbols;
4342
{
4343
  arelent *tblptr;
4344
  unsigned int i;
4345
 
4346
  if (! get_elf_backend_data (abfd)->s->slurp_reloc_table (abfd,
4347
                                                           section,
4348
                                                           symbols,
4349
                                                           false))
4350
    return -1;
4351
 
4352
  tblptr = section->relocation;
4353
  for (i = 0; i < section->reloc_count; i++)
4354
    *relptr++ = tblptr++;
4355
 
4356
  *relptr = NULL;
4357
 
4358
  return section->reloc_count;
4359
}
4360
 
4361
long
4362
_bfd_elf_get_symtab (abfd, alocation)
4363
     bfd *abfd;
4364
     asymbol **alocation;
4365
{
4366
  long symcount = get_elf_backend_data (abfd)->s->slurp_symbol_table
4367
    (abfd, alocation, false);
4368
 
4369
  if (symcount >= 0)
4370
    bfd_get_symcount (abfd) = symcount;
4371
  return symcount;
4372
}
4373
 
4374
long
4375
_bfd_elf_canonicalize_dynamic_symtab (abfd, alocation)
4376
     bfd *abfd;
4377
     asymbol **alocation;
4378
{
4379
  return get_elf_backend_data (abfd)->s->slurp_symbol_table
4380
    (abfd, alocation, true);
4381
}
4382
 
4383
/* Return the size required for the dynamic reloc entries.  Any
4384
   section that was actually installed in the BFD, and has type
4385
   SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
4386
   considered to be a dynamic reloc section.  */
4387
 
4388
long
4389
_bfd_elf_get_dynamic_reloc_upper_bound (abfd)
4390
     bfd *abfd;
4391
{
4392
  long ret;
4393
  asection *s;
4394
 
4395
  if (elf_dynsymtab (abfd) == 0)
4396
    {
4397
      bfd_set_error (bfd_error_invalid_operation);
4398
      return -1;
4399
    }
4400
 
4401
  ret = sizeof (arelent *);
4402
  for (s = abfd->sections; s != NULL; s = s->next)
4403
    if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4404
        && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4405
            || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4406
      ret += ((s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize)
4407
              * sizeof (arelent *));
4408
 
4409
  return ret;
4410
}
4411
 
4412
/* Canonicalize the dynamic relocation entries.  Note that we return
4413
   the dynamic relocations as a single block, although they are
4414
   actually associated with particular sections; the interface, which
4415
   was designed for SunOS style shared libraries, expects that there
4416
   is only one set of dynamic relocs.  Any section that was actually
4417
   installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
4418
   the dynamic symbol table, is considered to be a dynamic reloc
4419
   section.  */
4420
 
4421
long
4422
_bfd_elf_canonicalize_dynamic_reloc (abfd, storage, syms)
4423
     bfd *abfd;
4424
     arelent **storage;
4425
     asymbol **syms;
4426
{
4427
  boolean (*slurp_relocs) PARAMS ((bfd *, asection *, asymbol **, boolean));
4428
  asection *s;
4429
  long ret;
4430
 
4431
  if (elf_dynsymtab (abfd) == 0)
4432
    {
4433
      bfd_set_error (bfd_error_invalid_operation);
4434
      return -1;
4435
    }
4436
 
4437
  slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
4438
  ret = 0;
4439
  for (s = abfd->sections; s != NULL; s = s->next)
4440
    {
4441
      if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
4442
          && (elf_section_data (s)->this_hdr.sh_type == SHT_REL
4443
              || elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
4444
        {
4445
          arelent *p;
4446
          long count, i;
4447
 
4448
          if (! (*slurp_relocs) (abfd, s, syms, true))
4449
            return -1;
4450
          count = s->_raw_size / elf_section_data (s)->this_hdr.sh_entsize;
4451
          p = s->relocation;
4452
          for (i = 0; i < count; i++)
4453
            *storage++ = p++;
4454
          ret += count;
4455
        }
4456
    }
4457
 
4458
  *storage = NULL;
4459
 
4460
  return ret;
4461
}
4462
 
4463
/* Read in the version information.  */
4464
 
4465
boolean
4466
_bfd_elf_slurp_version_tables (abfd)
4467
     bfd *abfd;
4468
{
4469
  bfd_byte *contents = NULL;
4470
 
4471
  if (elf_dynverdef (abfd) != 0)
4472
    {
4473
      Elf_Internal_Shdr *hdr;
4474
      Elf_External_Verdef *everdef;
4475
      Elf_Internal_Verdef *iverdef;
4476
      unsigned int i;
4477
 
4478
      hdr = &elf_tdata (abfd)->dynverdef_hdr;
4479
 
4480
      elf_tdata (abfd)->verdef =
4481
        ((Elf_Internal_Verdef *)
4482
         bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verdef)));
4483
      if (elf_tdata (abfd)->verdef == NULL)
4484
        goto error_return;
4485
 
4486
      elf_tdata (abfd)->cverdefs = hdr->sh_info;
4487
 
4488
      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4489
      if (contents == NULL)
4490
        goto error_return;
4491
      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4492
          || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4493
        goto error_return;
4494
 
4495
      everdef = (Elf_External_Verdef *) contents;
4496
      iverdef = elf_tdata (abfd)->verdef;
4497
      for (i = 0; i < hdr->sh_info; i++, iverdef++)
4498
        {
4499
          Elf_External_Verdaux *everdaux;
4500
          Elf_Internal_Verdaux *iverdaux;
4501
          unsigned int j;
4502
 
4503
          _bfd_elf_swap_verdef_in (abfd, everdef, iverdef);
4504
 
4505
          iverdef->vd_bfd = abfd;
4506
 
4507
          iverdef->vd_auxptr = ((Elf_Internal_Verdaux *)
4508
                                bfd_alloc (abfd,
4509
                                           (iverdef->vd_cnt
4510
                                            * sizeof (Elf_Internal_Verdaux))));
4511
          if (iverdef->vd_auxptr == NULL)
4512
            goto error_return;
4513
 
4514
          everdaux = ((Elf_External_Verdaux *)
4515
                      ((bfd_byte *) everdef + iverdef->vd_aux));
4516
          iverdaux = iverdef->vd_auxptr;
4517
          for (j = 0; j < iverdef->vd_cnt; j++, iverdaux++)
4518
            {
4519
              _bfd_elf_swap_verdaux_in (abfd, everdaux, iverdaux);
4520
 
4521
              iverdaux->vda_nodename =
4522
                bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4523
                                                 iverdaux->vda_name);
4524
              if (iverdaux->vda_nodename == NULL)
4525
                goto error_return;
4526
 
4527
              if (j + 1 < iverdef->vd_cnt)
4528
                iverdaux->vda_nextptr = iverdaux + 1;
4529
              else
4530
                iverdaux->vda_nextptr = NULL;
4531
 
4532
              everdaux = ((Elf_External_Verdaux *)
4533
                          ((bfd_byte *) everdaux + iverdaux->vda_next));
4534
            }
4535
 
4536
          iverdef->vd_nodename = iverdef->vd_auxptr->vda_nodename;
4537
 
4538
          if (i + 1 < hdr->sh_info)
4539
            iverdef->vd_nextdef = iverdef + 1;
4540
          else
4541
            iverdef->vd_nextdef = NULL;
4542
 
4543
          everdef = ((Elf_External_Verdef *)
4544
                     ((bfd_byte *) everdef + iverdef->vd_next));
4545
        }
4546
 
4547
      free (contents);
4548
      contents = NULL;
4549
    }
4550
 
4551
  if (elf_dynverref (abfd) != 0)
4552
    {
4553
      Elf_Internal_Shdr *hdr;
4554
      Elf_External_Verneed *everneed;
4555
      Elf_Internal_Verneed *iverneed;
4556
      unsigned int i;
4557
 
4558
      hdr = &elf_tdata (abfd)->dynverref_hdr;
4559
 
4560
      elf_tdata (abfd)->verref =
4561
        ((Elf_Internal_Verneed *)
4562
         bfd_zalloc (abfd, hdr->sh_info * sizeof (Elf_Internal_Verneed)));
4563
      if (elf_tdata (abfd)->verref == NULL)
4564
        goto error_return;
4565
 
4566
      elf_tdata (abfd)->cverrefs = hdr->sh_info;
4567
 
4568
      contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
4569
      if (contents == NULL)
4570
        goto error_return;
4571
      if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0
4572
          || bfd_read ((PTR) contents, 1, hdr->sh_size, abfd) != hdr->sh_size)
4573
        goto error_return;
4574
 
4575
      everneed = (Elf_External_Verneed *) contents;
4576
      iverneed = elf_tdata (abfd)->verref;
4577
      for (i = 0; i < hdr->sh_info; i++, iverneed++)
4578
        {
4579
          Elf_External_Vernaux *evernaux;
4580
          Elf_Internal_Vernaux *ivernaux;
4581
          unsigned int j;
4582
 
4583
          _bfd_elf_swap_verneed_in (abfd, everneed, iverneed);
4584
 
4585
          iverneed->vn_bfd = abfd;
4586
 
4587
          iverneed->vn_filename =
4588
            bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4589
                                             iverneed->vn_file);
4590
          if (iverneed->vn_filename == NULL)
4591
            goto error_return;
4592
 
4593
          iverneed->vn_auxptr =
4594
            ((Elf_Internal_Vernaux *)
4595
             bfd_alloc (abfd,
4596
                        iverneed->vn_cnt * sizeof (Elf_Internal_Vernaux)));
4597
 
4598
          evernaux = ((Elf_External_Vernaux *)
4599
                      ((bfd_byte *) everneed + iverneed->vn_aux));
4600
          ivernaux = iverneed->vn_auxptr;
4601
          for (j = 0; j < iverneed->vn_cnt; j++, ivernaux++)
4602
            {
4603
              _bfd_elf_swap_vernaux_in (abfd, evernaux, ivernaux);
4604
 
4605
              ivernaux->vna_nodename =
4606
                bfd_elf_string_from_elf_section (abfd, hdr->sh_link,
4607
                                                 ivernaux->vna_name);
4608
              if (ivernaux->vna_nodename == NULL)
4609
                goto error_return;
4610
 
4611
              if (j + 1 < iverneed->vn_cnt)
4612
                ivernaux->vna_nextptr = ivernaux + 1;
4613
              else
4614
                ivernaux->vna_nextptr = NULL;
4615
 
4616
              evernaux = ((Elf_External_Vernaux *)
4617
                          ((bfd_byte *) evernaux + ivernaux->vna_next));
4618
            }
4619
 
4620
          if (i + 1 < hdr->sh_info)
4621
            iverneed->vn_nextref = iverneed + 1;
4622
          else
4623
            iverneed->vn_nextref = NULL;
4624
 
4625
          everneed = ((Elf_External_Verneed *)
4626
                      ((bfd_byte *) everneed + iverneed->vn_next));
4627
        }
4628
 
4629
      free (contents);
4630
      contents = NULL;
4631
    }
4632
 
4633
  return true;
4634
 
4635
 error_return:
4636
  if (contents == NULL)
4637
    free (contents);
4638
  return false;
4639
}
4640
 
4641
asymbol *
4642
_bfd_elf_make_empty_symbol (abfd)
4643
     bfd *abfd;
4644
{
4645
  elf_symbol_type *newsym;
4646
 
4647
  newsym = (elf_symbol_type *) bfd_zalloc (abfd, sizeof (elf_symbol_type));
4648
  if (!newsym)
4649
    return NULL;
4650
  else
4651
    {
4652
      newsym->symbol.the_bfd = abfd;
4653
      return &newsym->symbol;
4654
    }
4655
}
4656
 
4657
void
4658
_bfd_elf_get_symbol_info (ignore_abfd, symbol, ret)
4659
     bfd *ignore_abfd ATTRIBUTE_UNUSED;
4660
     asymbol *symbol;
4661
     symbol_info *ret;
4662
{
4663
  bfd_symbol_info (symbol, ret);
4664
}
4665
 
4666
/* Return whether a symbol name implies a local symbol.  Most targets
4667
   use this function for the is_local_label_name entry point, but some
4668
   override it.  */
4669
 
4670
boolean
4671
_bfd_elf_is_local_label_name (abfd, name)
4672
     bfd *abfd ATTRIBUTE_UNUSED;
4673
     const char *name;
4674
{
4675
  /* Normal local symbols start with ``.L''.  */
4676
  if (name[0] == '.' && name[1] == 'L')
4677
    return true;
4678
 
4679
  /* At least some SVR4 compilers (e.g., UnixWare 2.1 cc) generate
4680
     DWARF debugging symbols starting with ``..''.  */
4681
  if (name[0] == '.' && name[1] == '.')
4682
    return true;
4683
 
4684
  /* gcc will sometimes generate symbols beginning with ``_.L_'' when
4685
     emitting DWARF debugging output.  I suspect this is actually a
4686
     small bug in gcc (it calls ASM_OUTPUT_LABEL when it should call
4687
     ASM_GENERATE_INTERNAL_LABEL, and this causes the leading
4688
     underscore to be emitted on some ELF targets).  For ease of use,
4689
     we treat such symbols as local.  */
4690
  if (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')
4691
    return true;
4692
 
4693
  return false;
4694
}
4695
 
4696
alent *
4697
_bfd_elf_get_lineno (ignore_abfd, symbol)
4698
     bfd *ignore_abfd ATTRIBUTE_UNUSED;
4699
     asymbol *symbol ATTRIBUTE_UNUSED;
4700
{
4701
  abort ();
4702
  return NULL;
4703
}
4704
 
4705
boolean
4706
_bfd_elf_set_arch_mach (abfd, arch, machine)
4707
     bfd *abfd;
4708
     enum bfd_architecture arch;
4709
     unsigned long machine;
4710
{
4711
  /* If this isn't the right architecture for this backend, and this
4712
     isn't the generic backend, fail.  */
4713
  if (arch != get_elf_backend_data (abfd)->arch
4714
      && arch != bfd_arch_unknown
4715
      && get_elf_backend_data (abfd)->arch != bfd_arch_unknown)
4716
    return false;
4717
 
4718
  return bfd_default_set_arch_mach (abfd, arch, machine);
4719
}
4720
 
4721
/* Find the nearest line to a particular section and offset, for error
4722
   reporting.  */
4723
 
4724
boolean
4725
_bfd_elf_find_nearest_line (abfd,
4726
                            section,
4727
                            symbols,
4728
                            offset,
4729
                            filename_ptr,
4730
                            functionname_ptr,
4731
                            line_ptr)
4732
     bfd *abfd;
4733
     asection *section;
4734
     asymbol **symbols;
4735
     bfd_vma offset;
4736
     CONST char **filename_ptr;
4737
     CONST char **functionname_ptr;
4738
     unsigned int *line_ptr;
4739
{
4740
  boolean found;
4741
  const char *filename;
4742
  asymbol *func;
4743
  bfd_vma low_func;
4744
  asymbol **p;
4745
 
4746
  if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
4747
                                     filename_ptr, functionname_ptr,
4748
                                     line_ptr))
4749
    return true;
4750
 
4751
  if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
4752
                                     filename_ptr, functionname_ptr,
4753
                                     line_ptr, 0))
4754
    return true;
4755
 
4756
  if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset,
4757
                                             &found, filename_ptr,
4758
                                             functionname_ptr, line_ptr,
4759
                                             &elf_tdata (abfd)->line_info))
4760
    return false;
4761
  if (found)
4762
    return true;
4763
 
4764
  if (symbols == NULL)
4765
    return false;
4766
 
4767
  filename = NULL;
4768
  func = NULL;
4769
  low_func = 0;
4770
 
4771
  for (p = symbols; *p != NULL; p++)
4772
    {
4773
      elf_symbol_type *q;
4774
 
4775
      q = (elf_symbol_type *) *p;
4776
 
4777
      if (bfd_get_section (&q->symbol) != section)
4778
        continue;
4779
 
4780
      switch (ELF_ST_TYPE (q->internal_elf_sym.st_info))
4781
        {
4782
        default:
4783
          break;
4784
        case STT_FILE:
4785
          filename = bfd_asymbol_name (&q->symbol);
4786
          break;
4787
        case STT_NOTYPE:
4788
        case STT_FUNC:
4789
          if (q->symbol.section == section
4790
              && q->symbol.value >= low_func
4791
              && q->symbol.value <= offset)
4792
            {
4793
              func = (asymbol *) q;
4794
              low_func = q->symbol.value;
4795
            }
4796
          break;
4797
        }
4798
    }
4799
 
4800
  if (func == NULL)
4801
    return false;
4802
 
4803
  *filename_ptr = filename;
4804
  *functionname_ptr = bfd_asymbol_name (func);
4805
  *line_ptr = 0;
4806
  return true;
4807
}
4808
 
4809
int
4810
_bfd_elf_sizeof_headers (abfd, reloc)
4811
     bfd *abfd;
4812
     boolean reloc;
4813
{
4814
  int ret;
4815
 
4816
  ret = get_elf_backend_data (abfd)->s->sizeof_ehdr;
4817
  if (! reloc)
4818
    ret += get_program_header_size (abfd);
4819
  return ret;
4820
}
4821
 
4822
boolean
4823
_bfd_elf_set_section_contents (abfd, section, location, offset, count)
4824
     bfd *abfd;
4825
     sec_ptr section;
4826
     PTR location;
4827
     file_ptr offset;
4828
     bfd_size_type count;
4829
{
4830
  Elf_Internal_Shdr *hdr;
4831
 
4832
  if (! abfd->output_has_begun
4833
      && ! _bfd_elf_compute_section_file_positions
4834
      (abfd, (struct bfd_link_info *) NULL))
4835
    return false;
4836
 
4837
  hdr = &elf_section_data (section)->this_hdr;
4838
 
4839
  if (bfd_seek (abfd, hdr->sh_offset + offset, SEEK_SET) == -1)
4840
    return false;
4841
  if (bfd_write (location, 1, count, abfd) != count)
4842
    return false;
4843
 
4844
  return true;
4845
}
4846
 
4847
void
4848
_bfd_elf_no_info_to_howto (abfd, cache_ptr, dst)
4849
     bfd *abfd ATTRIBUTE_UNUSED;
4850
     arelent *cache_ptr ATTRIBUTE_UNUSED;
4851
     Elf_Internal_Rela *dst ATTRIBUTE_UNUSED;
4852
{
4853
  abort ();
4854
}
4855
 
4856
#if 0
4857
void
4858
_bfd_elf_no_info_to_howto_rel (abfd, cache_ptr, dst)
4859
     bfd *abfd;
4860
     arelent *cache_ptr;
4861
     Elf_Internal_Rel *dst;
4862
{
4863
  abort ();
4864
}
4865
#endif
4866
 
4867
/* Try to convert a non-ELF reloc into an ELF one.  */
4868
 
4869
boolean
4870
_bfd_elf_validate_reloc (abfd, areloc)
4871
     bfd *abfd;
4872
     arelent *areloc;
4873
{
4874
  /* Check whether we really have an ELF howto. */
4875
 
4876
  if ((*areloc->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec)
4877
    {
4878
      bfd_reloc_code_real_type code;
4879
      reloc_howto_type *howto;
4880
 
4881
      /* Alien reloc: Try to determine its type to replace it with an
4882
         equivalent ELF reloc. */
4883
 
4884
      if (areloc->howto->pc_relative)
4885
        {
4886
          switch (areloc->howto->bitsize)
4887
            {
4888
            case 8:
4889
              code = BFD_RELOC_8_PCREL;
4890
              break;
4891
            case 12:
4892
              code = BFD_RELOC_12_PCREL;
4893
              break;
4894
            case 16:
4895
              code = BFD_RELOC_16_PCREL;
4896
              break;
4897
            case 24:
4898
              code = BFD_RELOC_24_PCREL;
4899
              break;
4900
            case 32:
4901
              code = BFD_RELOC_32_PCREL;
4902
              break;
4903
            case 64:
4904
              code = BFD_RELOC_64_PCREL;
4905
              break;
4906
            default:
4907
              goto fail;
4908
            }
4909
 
4910
          howto = bfd_reloc_type_lookup (abfd, code);
4911
 
4912
          if (areloc->howto->pcrel_offset != howto->pcrel_offset)
4913
            {
4914
              if (howto->pcrel_offset)
4915
                areloc->addend += areloc->address;
4916
              else
4917
                areloc->addend -= areloc->address; /* addend is unsigned!! */
4918
            }
4919
        }
4920
      else
4921
        {
4922
          switch (areloc->howto->bitsize)
4923
            {
4924
            case 8:
4925
              code = BFD_RELOC_8;
4926
              break;
4927
            case 14:
4928
              code = BFD_RELOC_14;
4929
              break;
4930
            case 16:
4931
              code = BFD_RELOC_16;
4932
              break;
4933
            case 26:
4934
              code = BFD_RELOC_26;
4935
              break;
4936
            case 32:
4937
              code = BFD_RELOC_32;
4938
              break;
4939
            case 64:
4940
              code = BFD_RELOC_64;
4941
              break;
4942
            default:
4943
              goto fail;
4944
            }
4945
 
4946
          howto = bfd_reloc_type_lookup (abfd, code);
4947
        }
4948
 
4949
      if (howto)
4950
        areloc->howto = howto;
4951
      else
4952
        goto fail;
4953
    }
4954
 
4955
  return true;
4956
 
4957
 fail:
4958
  (*_bfd_error_handler)
4959
    (_("%s: unsupported relocation type %s"),
4960
     bfd_get_filename (abfd), areloc->howto->name);
4961
  bfd_set_error (bfd_error_bad_value);
4962
  return false;
4963
}
4964
 
4965
boolean
4966
_bfd_elf_close_and_cleanup (abfd)
4967
     bfd *abfd;
4968
{
4969
  if (bfd_get_format (abfd) == bfd_object)
4970
    {
4971
      if (elf_shstrtab (abfd) != NULL)
4972
        _bfd_stringtab_free (elf_shstrtab (abfd));
4973
    }
4974
 
4975
  return _bfd_generic_close_and_cleanup (abfd);
4976
}
4977
 
4978
/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
4979
   in the relocation's offset.  Thus we cannot allow any sort of sanity
4980
   range-checking to interfere.  There is nothing else to do in processing
4981
   this reloc.  */
4982
 
4983
bfd_reloc_status_type
4984
_bfd_elf_rel_vtable_reloc_fn (abfd, re, symbol, data, is, obfd, errmsg)
4985
     bfd *abfd ATTRIBUTE_UNUSED;
4986
     arelent *re ATTRIBUTE_UNUSED;
4987
     struct symbol_cache_entry *symbol ATTRIBUTE_UNUSED;
4988
     PTR data ATTRIBUTE_UNUSED;
4989
     asection *is ATTRIBUTE_UNUSED;
4990
     bfd *obfd ATTRIBUTE_UNUSED;
4991
     char **errmsg ATTRIBUTE_UNUSED;
4992
{
4993
  return bfd_reloc_ok;
4994
}
4995
 
4996
 
4997
/* Elf core file support.  Much of this only works on native
4998
   toolchains, since we rely on knowing the
4999
   machine-dependent procfs structure in order to pick
5000
   out details about the corefile. */
5001
 
5002
#ifdef HAVE_SYS_PROCFS_H
5003
# include <sys/procfs.h>
5004
#endif
5005
 
5006
 
5007
/* Define offsetof for those systems which lack it. */
5008
 
5009
#ifndef offsetof
5010
# define offsetof(TYPE, MEMBER) ((unsigned long) &((TYPE *)0)->MEMBER)
5011
#endif
5012
 
5013
 
5014
/* FIXME: this is kinda wrong, but it's what gdb wants. */
5015
 
5016
static int
5017
elfcore_make_pid (abfd)
5018
     bfd* abfd;
5019
{
5020
  return ((elf_tdata (abfd)->core_lwpid << 16)
5021
          + (elf_tdata (abfd)->core_pid));
5022
}
5023
 
5024
 
5025
/* If there isn't a section called NAME, make one, using
5026
   data from SECT.  Note, this function will generate a
5027
   reference to NAME, so you shouldn't deallocate or
5028
   overwrite it. */
5029
 
5030
static boolean
5031
elfcore_maybe_make_sect (abfd, name, sect)
5032
     bfd* abfd;
5033
     char* name;
5034
     asection* sect;
5035
{
5036
  asection* sect2;
5037
 
5038
  if (bfd_get_section_by_name (abfd, name) != NULL)
5039
    return true;
5040
 
5041
  sect2 = bfd_make_section (abfd, name);
5042
  if (sect2 == NULL)
5043
    return false;
5044
 
5045
  sect2->_raw_size = sect->_raw_size;
5046
  sect2->filepos = sect->filepos;
5047
  sect2->flags = sect->flags;
5048
  sect2->alignment_power = sect->alignment_power;
5049
  return true;
5050
}
5051
 
5052
 
5053
/* prstatus_t exists on:
5054
     solaris 2.[567]
5055
     linux 2.[01] + glibc
5056
     unixware 4.2
5057
*/
5058
 
5059
#if defined (HAVE_PRSTATUS_T)
5060
static boolean
5061
elfcore_grok_prstatus (abfd, note)
5062
     bfd* abfd;
5063
     Elf_Internal_Note* note;
5064
{
5065
  prstatus_t prstat;
5066
  char buf[100];
5067
  char* name;
5068
  asection* sect;
5069
 
5070
  if (note->descsz != sizeof (prstat))
5071
    return true;
5072
 
5073
  memcpy (&prstat, note->descdata, sizeof (prstat));
5074
 
5075
  elf_tdata (abfd)->core_signal = prstat.pr_cursig;
5076
  elf_tdata (abfd)->core_pid = prstat.pr_pid;
5077
 
5078
  /* pr_who exists on:
5079
       solaris 2.[567]
5080
       unixware 4.2
5081
     pr_who doesn't exist on:
5082
       linux 2.[01]
5083
  */
5084
#if defined (HAVE_PRSTATUS_T_PR_WHO)
5085
  elf_tdata (abfd)->core_lwpid = prstat.pr_who;
5086
#endif
5087
 
5088
  /* Make a ".reg/999" section. */
5089
 
5090
  sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5091
  name = bfd_alloc (abfd, strlen (buf) + 1);
5092
  if (name == NULL)
5093
    return false;
5094
  strcpy (name, buf);
5095
 
5096
  sect = bfd_make_section (abfd, name);
5097
  if (sect == NULL)
5098
    return false;
5099
  sect->_raw_size = sizeof (prstat.pr_reg);
5100
  sect->filepos = note->descpos + offsetof (prstatus_t, pr_reg);
5101
  sect->flags = SEC_HAS_CONTENTS;
5102
  sect->alignment_power = 2;
5103
 
5104
  if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5105
    return false;
5106
 
5107
  return true;
5108
}
5109
#endif /* defined (HAVE_PRSTATUS_T) */
5110
 
5111
 
5112
/* Create a pseudosection containing the exact contents of NOTE.  This
5113
   actually creates up to two pseudosections:
5114
   - For the single-threaded case, a section named NAME, unless
5115
     such a section already exists.
5116
   - For the multi-threaded case, a section named "NAME/PID", where
5117
     PID is elfcore_make_pid (abfd).
5118
   Both pseudosections have identical contents: the contents of NOTE.  */
5119
 
5120
static boolean
5121
elfcore_make_note_pseudosection (abfd, name, note)
5122
     bfd* abfd;
5123
     char *name;
5124
     Elf_Internal_Note* note;
5125
{
5126
  char buf[100];
5127
  char *threaded_name;
5128
  asection* sect;
5129
 
5130
  /* Build the section name.  */
5131
 
5132
  sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd));
5133
  threaded_name = bfd_alloc (abfd, strlen (buf) + 1);
5134
  if (threaded_name == NULL)
5135
    return false;
5136
  strcpy (threaded_name, buf);
5137
 
5138
  sect = bfd_make_section (abfd, threaded_name);
5139
  if (sect == NULL)
5140
    return false;
5141
  sect->_raw_size = note->descsz;
5142
  sect->filepos = note->descpos;
5143
  sect->flags = SEC_HAS_CONTENTS;
5144
  sect->alignment_power = 2;
5145
 
5146
  if (! elfcore_maybe_make_sect (abfd, name, sect))
5147
    return false;
5148
 
5149
  return true;
5150
}
5151
 
5152
 
5153
/* There isn't a consistent prfpregset_t across platforms,
5154
   but it doesn't matter, because we don't have to pick this
5155
   data structure apart. */
5156
static boolean
5157
elfcore_grok_prfpreg (abfd, note)
5158
     bfd* abfd;
5159
     Elf_Internal_Note* note;
5160
{
5161
  return elfcore_make_note_pseudosection (abfd, ".reg2", note);
5162
}
5163
 
5164
 
5165
/* Linux dumps the Intel SSE regs in a note named "LINUX" with a note
5166
   type of 5 (NT_PRXFPREG).  Just include the whole note's contents
5167
   literally.  */
5168
static boolean
5169
elfcore_grok_prxfpreg (abfd, note)
5170
     bfd* abfd;
5171
     Elf_Internal_Note* note;
5172
{
5173
  return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
5174
}
5175
 
5176
 
5177
#if defined (HAVE_PRPSINFO_T)
5178
# define elfcore_psinfo_t prpsinfo_t
5179
#endif
5180
 
5181
#if defined (HAVE_PSINFO_T)
5182
# define elfcore_psinfo_t psinfo_t
5183
#endif
5184
 
5185
 
5186
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5187
 
5188
/* return a malloc'ed copy of a string at START which is at
5189
   most MAX bytes long, possibly without a terminating '\0'.
5190
   the copy will always have a terminating '\0'. */
5191
 
5192
static char*
5193
elfcore_strndup (abfd, start, max)
5194
     bfd* abfd;
5195
     char* start;
5196
     int max;
5197
{
5198
  char* dup;
5199
  char* end = memchr (start, '\0', max);
5200
  int len;
5201
 
5202
  if (end == NULL)
5203
    len = max;
5204
  else
5205
    len = end - start;
5206
 
5207
  dup = bfd_alloc (abfd, len + 1);
5208
  if (dup == NULL)
5209
    return NULL;
5210
 
5211
  memcpy (dup, start, len);
5212
  dup[len] = '\0';
5213
 
5214
  return dup;
5215
}
5216
 
5217
static boolean
5218
elfcore_grok_psinfo (abfd, note)
5219
     bfd* abfd;
5220
     Elf_Internal_Note* note;
5221
{
5222
  elfcore_psinfo_t psinfo;
5223
 
5224
  if (note->descsz != sizeof (elfcore_psinfo_t))
5225
    return true;
5226
 
5227
  memcpy (&psinfo, note->descdata, note->descsz);
5228
 
5229
  elf_tdata (abfd)->core_program
5230
    = elfcore_strndup (abfd, psinfo.pr_fname, sizeof (psinfo.pr_fname));
5231
 
5232
  elf_tdata (abfd)->core_command
5233
    = elfcore_strndup (abfd, psinfo.pr_psargs, sizeof (psinfo.pr_psargs));
5234
 
5235
  /* Note that for some reason, a spurious space is tacked
5236
     onto the end of the args in some (at least one anyway)
5237
     implementations, so strip it off if it exists. */
5238
 
5239
  {
5240
    char* command = elf_tdata (abfd)->core_command;
5241
    int n = strlen (command);
5242
 
5243
    if (0 < n && command[n - 1] == ' ')
5244
      command[n - 1] = '\0';
5245
  }
5246
 
5247
  return true;
5248
}
5249
#endif /* defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T) */
5250
 
5251
 
5252
#if defined (HAVE_PSTATUS_T)
5253
static boolean
5254
elfcore_grok_pstatus (abfd, note)
5255
     bfd* abfd;
5256
     Elf_Internal_Note* note;
5257
{
5258
  pstatus_t pstat;
5259
 
5260
  if (note->descsz != sizeof (pstat))
5261
    return true;
5262
 
5263
  memcpy (&pstat, note->descdata, sizeof (pstat));
5264
 
5265
  elf_tdata (abfd)->core_pid = pstat.pr_pid;
5266
 
5267
  /* Could grab some more details from the "representative"
5268
     lwpstatus_t in pstat.pr_lwp, but we'll catch it all in an
5269
     NT_LWPSTATUS note, presumably. */
5270
 
5271
  return true;
5272
}
5273
#endif /* defined (HAVE_PSTATUS_T) */
5274
 
5275
 
5276
#if defined (HAVE_LWPSTATUS_T)
5277
static boolean
5278
elfcore_grok_lwpstatus (abfd, note)
5279
     bfd* abfd;
5280
     Elf_Internal_Note* note;
5281
{
5282
  lwpstatus_t lwpstat;
5283
  char buf[100];
5284
  char* name;
5285
  asection* sect;
5286
 
5287
  if (note->descsz != sizeof (lwpstat))
5288
    return true;
5289
 
5290
  memcpy (&lwpstat, note->descdata, sizeof (lwpstat));
5291
 
5292
  elf_tdata (abfd)->core_lwpid = lwpstat.pr_lwpid;
5293
  elf_tdata (abfd)->core_signal = lwpstat.pr_cursig;
5294
 
5295
  /* Make a ".reg/999" section. */
5296
 
5297
  sprintf (buf, ".reg/%d", elfcore_make_pid (abfd));
5298
  name = bfd_alloc (abfd, strlen (buf) + 1);
5299
  if (name == NULL)
5300
    return false;
5301
  strcpy (name, buf);
5302
 
5303
  sect = bfd_make_section (abfd, name);
5304
  if (sect == NULL)
5305
    return false;
5306
 
5307
#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5308
  sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.gregs);
5309
  sect->filepos = note->descpos
5310
    + offsetof (lwpstatus_t, pr_context.uc_mcontext.gregs);
5311
#endif
5312
 
5313
#if defined (HAVE_LWPSTATUS_T_PR_REG)
5314
  sect->_raw_size = sizeof (lwpstat.pr_reg);
5315
  sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_reg);
5316
#endif
5317
 
5318
  sect->flags = SEC_HAS_CONTENTS;
5319
  sect->alignment_power = 2;
5320
 
5321
  if (!elfcore_maybe_make_sect (abfd, ".reg", sect))
5322
    return false;
5323
 
5324
  /* Make a ".reg2/999" section */
5325
 
5326
  sprintf (buf, ".reg2/%d", elfcore_make_pid (abfd));
5327
  name = bfd_alloc (abfd, strlen (buf) + 1);
5328
  if (name == NULL)
5329
    return false;
5330
  strcpy (name, buf);
5331
 
5332
  sect = bfd_make_section (abfd, name);
5333
  if (sect == NULL)
5334
    return false;
5335
 
5336
#if defined (HAVE_LWPSTATUS_T_PR_CONTEXT)
5337
  sect->_raw_size = sizeof (lwpstat.pr_context.uc_mcontext.fpregs);
5338
  sect->filepos = note->descpos
5339
    + offsetof (lwpstatus_t, pr_context.uc_mcontext.fpregs);
5340
#endif
5341
 
5342
#if defined (HAVE_LWPSTATUS_T_PR_FPREG)
5343
  sect->_raw_size = sizeof (lwpstat.pr_fpreg);
5344
  sect->filepos = note->descpos + offsetof (lwpstatus_t, pr_fpreg);
5345
#endif
5346
 
5347
  sect->flags = SEC_HAS_CONTENTS;
5348
  sect->alignment_power = 2;
5349
 
5350
  if (!elfcore_maybe_make_sect (abfd, ".reg2", sect))
5351
    return false;
5352
 
5353
  return true;
5354
}
5355
#endif /* defined (HAVE_LWPSTATUS_T) */
5356
 
5357
#if defined (HAVE_WIN32_PSTATUS_T)
5358
static boolean
5359
elfcore_grok_win32pstatus (abfd, note)
5360
     bfd * abfd;
5361
     Elf_Internal_Note * note;
5362
{
5363
  char buf[30];
5364
  char * name;
5365
  asection * sect;
5366
  win32_pstatus_t pstatus;
5367
 
5368
  if (note->descsz < sizeof (pstatus))
5369
    return true;
5370
 
5371
  memcpy (& pstatus, note->descdata, note->descsz);
5372
 
5373
  switch (pstatus.data_type)
5374
    {
5375
    case NOTE_INFO_PROCESS:
5376
      /* FIXME: need to add ->core_command.  */
5377
      elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal;
5378
      elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid;
5379
      break ;
5380
 
5381
    case NOTE_INFO_THREAD:
5382
      /* Make a ".reg/999" section.  */
5383
      sprintf (buf, ".reg/%d", pstatus.data.thread_info.tid);
5384
 
5385
      name = bfd_alloc (abfd, strlen (buf) + 1);
5386
      if (name == NULL)
5387
        return false;
5388
 
5389
      strcpy (name, buf);
5390
 
5391
      sect = bfd_make_section (abfd, name);
5392
      if (sect == NULL)
5393
        return false;
5394
 
5395
      sect->_raw_size = sizeof (pstatus.data.thread_info.thread_context);
5396
      sect->filepos = note->descpos + offsetof (struct win32_pstatus,
5397
                                                data.thread_info.thread_context);
5398
      sect->flags = SEC_HAS_CONTENTS;
5399
      sect->alignment_power = 2;
5400
 
5401
      if (pstatus.data.thread_info.is_active_thread)
5402
        if (! elfcore_maybe_make_sect (abfd, ".reg", sect))
5403
          return false;
5404
      break;
5405
 
5406
    case NOTE_INFO_MODULE:
5407
      /* Make a ".module/xxxxxxxx" section.  */
5408
      sprintf (buf, ".module/%08x" , pstatus.data.module_info.base_address);
5409
 
5410
      name = bfd_alloc (abfd, strlen (buf) + 1);
5411
      if (name == NULL)
5412
        return false;
5413
 
5414
      strcpy (name, buf);
5415
 
5416
      sect = bfd_make_section (abfd, name);
5417
 
5418
      if (sect == NULL)
5419
        return false;
5420
 
5421
      sect->_raw_size = note->descsz;
5422
      sect->filepos = note->descpos;
5423
      sect->flags = SEC_HAS_CONTENTS;
5424
      sect->alignment_power = 2;
5425
      break;
5426
 
5427
    default:
5428
      return true;
5429
    }
5430
 
5431
  return true;
5432
}
5433
#endif /* HAVE_WIN32_PSTATUS_T */
5434
 
5435
static boolean
5436
elfcore_grok_note (abfd, note)
5437
     bfd* abfd;
5438
     Elf_Internal_Note* note;
5439
{
5440
  switch (note->type)
5441
    {
5442
    default:
5443
      return true;
5444
 
5445
#if defined (HAVE_PRSTATUS_T)
5446
    case NT_PRSTATUS:
5447
      return elfcore_grok_prstatus (abfd, note);
5448
#endif
5449
 
5450
#if defined (HAVE_PSTATUS_T)
5451
    case NT_PSTATUS:
5452
      return elfcore_grok_pstatus (abfd, note);
5453
#endif
5454
 
5455
#if defined (HAVE_LWPSTATUS_T)
5456
    case NT_LWPSTATUS:
5457
      return elfcore_grok_lwpstatus (abfd, note);
5458
#endif
5459
 
5460
    case NT_FPREGSET:           /* FIXME: rename to NT_PRFPREG */
5461
      return elfcore_grok_prfpreg (abfd, note);
5462
 
5463
#if defined (HAVE_WIN32_PSTATUS_T)
5464
    case NT_WIN32PSTATUS:
5465
      return elfcore_grok_win32pstatus (abfd, note);
5466
#endif
5467
 
5468
  case NT_PRXFPREG:             /* Linux SSE extension */
5469
      if (note->namesz == 5
5470
          && ! strcmp (note->namedata, "LINUX"))
5471
        return elfcore_grok_prxfpreg (abfd, note);
5472
      else
5473
        return true;
5474
 
5475
#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
5476
    case NT_PRPSINFO:
5477
    case NT_PSINFO:
5478
      return elfcore_grok_psinfo (abfd, note);
5479
#endif
5480
    }
5481
}
5482
 
5483
 
5484
static boolean
5485
elfcore_read_notes (abfd, offset, size)
5486
     bfd* abfd;
5487
     bfd_vma offset;
5488
     bfd_vma size;
5489
{
5490
  char* buf;
5491
  char* p;
5492
 
5493
  if (size <= 0)
5494
    return true;
5495
 
5496
  if (bfd_seek (abfd, offset, SEEK_SET) == -1)
5497
    return false;
5498
 
5499
  buf = bfd_malloc ((size_t) size);
5500
  if (buf == NULL)
5501
    return false;
5502
 
5503
  if (bfd_read (buf, size, 1, abfd) != size)
5504
    {
5505
    error:
5506
      free (buf);
5507
      return false;
5508
    }
5509
 
5510
  p = buf;
5511
  while (p < buf + size)
5512
    {
5513
      /* FIXME: bad alignment assumption. */
5514
      Elf_External_Note* xnp = (Elf_External_Note*) p;
5515
      Elf_Internal_Note in;
5516
 
5517
      in.type = bfd_h_get_32 (abfd, (bfd_byte *) xnp->type);
5518
 
5519
      in.namesz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->namesz);
5520
      in.namedata = xnp->name;
5521
 
5522
      in.descsz = bfd_h_get_32 (abfd, (bfd_byte *) xnp->descsz);
5523
      in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4);
5524
      in.descpos = offset + (in.descdata - buf);
5525
 
5526
      if (! elfcore_grok_note (abfd, &in))
5527
        goto error;
5528
 
5529
      p = in.descdata + BFD_ALIGN (in.descsz, 4);
5530
    }
5531
 
5532
  free (buf);
5533
  return true;
5534
}
5535
 
5536
 
5537
/* FIXME: This function is now unnecessary.  Callers can just call
5538
   bfd_section_from_phdr directly.  */
5539
 
5540
boolean
5541
_bfd_elfcore_section_from_phdr (abfd, phdr, sec_num)
5542
     bfd* abfd;
5543
     Elf_Internal_Phdr* phdr;
5544
     int sec_num;
5545
{
5546
  if (! bfd_section_from_phdr (abfd, phdr, sec_num))
5547
    return false;
5548
 
5549
  return true;
5550
}
5551
 
5552
 
5553
 
5554
/* Providing external access to the ELF program header table.  */
5555
 
5556
/* Return an upper bound on the number of bytes required to store a
5557
   copy of ABFD's program header table entries.  Return -1 if an error
5558
   occurs; bfd_get_error will return an appropriate code.  */
5559
long
5560
bfd_get_elf_phdr_upper_bound (abfd)
5561
     bfd *abfd;
5562
{
5563
  if (abfd->xvec->flavour != bfd_target_elf_flavour)
5564
    {
5565
      bfd_set_error (bfd_error_wrong_format);
5566
      return -1;
5567
    }
5568
 
5569
  return (elf_elfheader (abfd)->e_phnum
5570
          * sizeof (Elf_Internal_Phdr));
5571
}
5572
 
5573
 
5574
/* Copy ABFD's program header table entries to *PHDRS.  The entries
5575
   will be stored as an array of Elf_Internal_Phdr structures, as
5576
   defined in include/elf/internal.h.  To find out how large the
5577
   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
5578
 
5579
   Return the number of program header table entries read, or -1 if an
5580
   error occurs; bfd_get_error will return an appropriate code.  */
5581
int
5582
bfd_get_elf_phdrs (abfd, phdrs)
5583
     bfd *abfd;
5584
     void *phdrs;
5585
{
5586
  int num_phdrs;
5587
 
5588
  if (abfd->xvec->flavour != bfd_target_elf_flavour)
5589
    {
5590
      bfd_set_error (bfd_error_wrong_format);
5591
      return -1;
5592
    }
5593
 
5594
  num_phdrs = elf_elfheader (abfd)->e_phnum;
5595
  memcpy (phdrs, elf_tdata (abfd)->phdr,
5596
          num_phdrs * sizeof (Elf_Internal_Phdr));
5597
 
5598
  return num_phdrs;
5599
}

powered by: WebSVN 2.1.0

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