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

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gold/] [layout.cc] - Blame information for rev 163

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 khays
// layout.cc -- lay out output file sections for gold
2
 
3
// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4
// Written by Ian Lance Taylor <iant@google.com>.
5
 
6
// This file is part of gold.
7
 
8
// This program is free software; you can redistribute it and/or modify
9
// it under the terms of the GNU General Public License as published by
10
// the Free Software Foundation; either version 3 of the License, or
11
// (at your option) any later version.
12
 
13
// This program is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
// GNU General Public License for more details.
17
 
18
// You should have received a copy of the GNU General Public License
19
// along with this program; if not, write to the Free Software
20
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21
// MA 02110-1301, USA.
22
 
23
#include "gold.h"
24
 
25
#include <cerrno>
26
#include <cstring>
27
#include <algorithm>
28
#include <iostream>
29
#include <fstream>
30
#include <utility>
31
#include <fcntl.h>
32
#include <fnmatch.h>
33
#include <unistd.h>
34
#include "libiberty.h"
35
#include "md5.h"
36
#include "sha1.h"
37
 
38
#include "parameters.h"
39
#include "options.h"
40
#include "mapfile.h"
41
#include "script.h"
42
#include "script-sections.h"
43
#include "output.h"
44
#include "symtab.h"
45
#include "dynobj.h"
46
#include "ehframe.h"
47
#include "compressed_output.h"
48
#include "reduced_debug_output.h"
49 159 khays
#include "object.h"
50 27 khays
#include "reloc.h"
51
#include "descriptors.h"
52
#include "plugin.h"
53
#include "incremental.h"
54
#include "layout.h"
55
 
56
namespace gold
57
{
58
 
59
// Class Free_list.
60
 
61
// The total number of free lists used.
62
unsigned int Free_list::num_lists = 0;
63
// The total number of free list nodes used.
64
unsigned int Free_list::num_nodes = 0;
65
// The total number of calls to Free_list::remove.
66
unsigned int Free_list::num_removes = 0;
67
// The total number of nodes visited during calls to Free_list::remove.
68
unsigned int Free_list::num_remove_visits = 0;
69
// The total number of calls to Free_list::allocate.
70
unsigned int Free_list::num_allocates = 0;
71
// The total number of nodes visited during calls to Free_list::allocate.
72
unsigned int Free_list::num_allocate_visits = 0;
73
 
74
// Initialize the free list.  Creates a single free list node that
75
// describes the entire region of length LEN.  If EXTEND is true,
76
// allocate() is allowed to extend the region beyond its initial
77
// length.
78
 
79
void
80
Free_list::init(off_t len, bool extend)
81
{
82
  this->list_.push_front(Free_list_node(0, len));
83
  this->last_remove_ = this->list_.begin();
84
  this->extend_ = extend;
85
  this->length_ = len;
86
  ++Free_list::num_lists;
87
  ++Free_list::num_nodes;
88
}
89
 
90
// Remove a chunk from the free list.  Because we start with a single
91
// node that covers the entire section, and remove chunks from it one
92
// at a time, we do not need to coalesce chunks or handle cases that
93
// span more than one free node.  We expect to remove chunks from the
94
// free list in order, and we expect to have only a few chunks of free
95
// space left (corresponding to files that have changed since the last
96
// incremental link), so a simple linear list should provide sufficient
97
// performance.
98
 
99
void
100
Free_list::remove(off_t start, off_t end)
101
{
102
  if (start == end)
103
    return;
104
  gold_assert(start < end);
105
 
106
  ++Free_list::num_removes;
107
 
108
  Iterator p = this->last_remove_;
109
  if (p->start_ > start)
110
    p = this->list_.begin();
111
 
112
  for (; p != this->list_.end(); ++p)
113
    {
114
      ++Free_list::num_remove_visits;
115
      // Find a node that wholly contains the indicated region.
116
      if (p->start_ <= start && p->end_ >= end)
117
        {
118
          // Case 1: the indicated region spans the whole node.
119
          // Add some fuzz to avoid creating tiny free chunks.
120
          if (p->start_ + 3 >= start && p->end_ <= end + 3)
121
            p = this->list_.erase(p);
122
          // Case 2: remove a chunk from the start of the node.
123
          else if (p->start_ + 3 >= start)
124
            p->start_ = end;
125
          // Case 3: remove a chunk from the end of the node.
126
          else if (p->end_ <= end + 3)
127
            p->end_ = start;
128
          // Case 4: remove a chunk from the middle, and split
129
          // the node into two.
130
          else
131
            {
132
              Free_list_node newnode(p->start_, start);
133
              p->start_ = end;
134
              this->list_.insert(p, newnode);
135
              ++Free_list::num_nodes;
136
            }
137
          this->last_remove_ = p;
138
          return;
139
        }
140
    }
141
 
142
  // Did not find a node containing the given chunk.  This could happen
143
  // because a small chunk was already removed due to the fuzz.
144
  gold_debug(DEBUG_INCREMENTAL,
145
             "Free_list::remove(%d,%d) not found",
146
             static_cast<int>(start), static_cast<int>(end));
147
}
148
 
149
// Allocate a chunk of size LEN from the free list.  Returns -1ULL
150
// if a sufficiently large chunk of free space is not found.
151
// We use a simple first-fit algorithm.
152
 
153
off_t
154
Free_list::allocate(off_t len, uint64_t align, off_t minoff)
155
{
156
  gold_debug(DEBUG_INCREMENTAL,
157
             "Free_list::allocate(%08lx, %d, %08lx)",
158
             static_cast<long>(len), static_cast<int>(align),
159
             static_cast<long>(minoff));
160
  if (len == 0)
161
    return align_address(minoff, align);
162
 
163
  ++Free_list::num_allocates;
164
 
165 159 khays
  // We usually want to drop free chunks smaller than 4 bytes.
166
  // If we need to guarantee a minimum hole size, though, we need
167
  // to keep track of all free chunks.
168
  const int fuzz = this->min_hole_ > 0 ? 0 : 3;
169
 
170 27 khays
  for (Iterator p = this->list_.begin(); p != this->list_.end(); ++p)
171
    {
172
      ++Free_list::num_allocate_visits;
173
      off_t start = p->start_ > minoff ? p->start_ : minoff;
174
      start = align_address(start, align);
175
      off_t end = start + len;
176 159 khays
      if (end > p->end_ && p->end_ == this->length_ && this->extend_)
177 27 khays
        {
178 159 khays
          this->length_ = end;
179
          p->end_ = end;
180
        }
181
      if (end == p->end_ || (end <= p->end_ - this->min_hole_))
182
        {
183
          if (p->start_ + fuzz >= start && p->end_ <= end + fuzz)
184 27 khays
            this->list_.erase(p);
185 159 khays
          else if (p->start_ + fuzz >= start)
186 27 khays
            p->start_ = end;
187 159 khays
          else if (p->end_ <= end + fuzz)
188 27 khays
            p->end_ = start;
189
          else
190
            {
191
              Free_list_node newnode(p->start_, start);
192
              p->start_ = end;
193
              this->list_.insert(p, newnode);
194
              ++Free_list::num_nodes;
195
            }
196
          return start;
197
        }
198
    }
199 159 khays
  if (this->extend_)
200
    {
201
      off_t start = align_address(this->length_, align);
202
      this->length_ = start + len;
203
      return start;
204
    }
205 27 khays
  return -1;
206
}
207
 
208
// Dump the free list (for debugging).
209
void
210
Free_list::dump()
211
{
212
  gold_info("Free list:\n     start      end   length\n");
213
  for (Iterator p = this->list_.begin(); p != this->list_.end(); ++p)
214
    gold_info("  %08lx %08lx %08lx", static_cast<long>(p->start_),
215
              static_cast<long>(p->end_),
216
              static_cast<long>(p->end_ - p->start_));
217
}
218
 
219
// Print the statistics for the free lists.
220
void
221
Free_list::print_stats()
222
{
223
  fprintf(stderr, _("%s: total free lists: %u\n"),
224
          program_name, Free_list::num_lists);
225
  fprintf(stderr, _("%s: total free list nodes: %u\n"),
226
          program_name, Free_list::num_nodes);
227
  fprintf(stderr, _("%s: calls to Free_list::remove: %u\n"),
228
          program_name, Free_list::num_removes);
229
  fprintf(stderr, _("%s: nodes visited: %u\n"),
230
          program_name, Free_list::num_remove_visits);
231
  fprintf(stderr, _("%s: calls to Free_list::allocate: %u\n"),
232
          program_name, Free_list::num_allocates);
233
  fprintf(stderr, _("%s: nodes visited: %u\n"),
234
          program_name, Free_list::num_allocate_visits);
235
}
236
 
237
// Layout::Relaxation_debug_check methods.
238
 
239
// Check that sections and special data are in reset states.
240
// We do not save states for Output_sections and special Output_data.
241
// So we check that they have not assigned any addresses or offsets.
242
// clean_up_after_relaxation simply resets their addresses and offsets.
243
void
244
Layout::Relaxation_debug_check::check_output_data_for_reset_values(
245
    const Layout::Section_list& sections,
246
    const Layout::Data_list& special_outputs)
247
{
248
  for(Layout::Section_list::const_iterator p = sections.begin();
249
      p != sections.end();
250
      ++p)
251
    gold_assert((*p)->address_and_file_offset_have_reset_values());
252
 
253
  for(Layout::Data_list::const_iterator p = special_outputs.begin();
254
      p != special_outputs.end();
255
      ++p)
256
    gold_assert((*p)->address_and_file_offset_have_reset_values());
257
}
258
 
259
// Save information of SECTIONS for checking later.
260
 
261
void
262
Layout::Relaxation_debug_check::read_sections(
263
    const Layout::Section_list& sections)
264
{
265
  for(Layout::Section_list::const_iterator p = sections.begin();
266
      p != sections.end();
267
      ++p)
268
    {
269
      Output_section* os = *p;
270
      Section_info info;
271
      info.output_section = os;
272
      info.address = os->is_address_valid() ? os->address() : 0;
273
      info.data_size = os->is_data_size_valid() ? os->data_size() : -1;
274
      info.offset = os->is_offset_valid()? os->offset() : -1 ;
275
      this->section_infos_.push_back(info);
276
    }
277
}
278
 
279
// Verify SECTIONS using previously recorded information.
280
 
281
void
282
Layout::Relaxation_debug_check::verify_sections(
283
    const Layout::Section_list& sections)
284
{
285
  size_t i = 0;
286
  for(Layout::Section_list::const_iterator p = sections.begin();
287
      p != sections.end();
288
      ++p, ++i)
289
    {
290
      Output_section* os = *p;
291
      uint64_t address = os->is_address_valid() ? os->address() : 0;
292
      off_t data_size = os->is_data_size_valid() ? os->data_size() : -1;
293
      off_t offset = os->is_offset_valid()? os->offset() : -1 ;
294
 
295
      if (i >= this->section_infos_.size())
296
        {
297
          gold_fatal("Section_info of %s missing.\n", os->name());
298
        }
299
      const Section_info& info = this->section_infos_[i];
300
      if (os != info.output_section)
301
        gold_fatal("Section order changed.  Expecting %s but see %s\n",
302
                   info.output_section->name(), os->name());
303
      if (address != info.address
304
          || data_size != info.data_size
305
          || offset != info.offset)
306
        gold_fatal("Section %s changed.\n", os->name());
307
    }
308
}
309
 
310
// Layout_task_runner methods.
311
 
312
// Lay out the sections.  This is called after all the input objects
313
// have been read.
314
 
315
void
316
Layout_task_runner::run(Workqueue* workqueue, const Task* task)
317
{
318
  Layout* layout = this->layout_;
319
  off_t file_size = layout->finalize(this->input_objects_,
320
                                     this->symtab_,
321
                                     this->target_,
322
                                     task);
323
 
324
  // Now we know the final size of the output file and we know where
325
  // each piece of information goes.
326
 
327
  if (this->mapfile_ != NULL)
328
    {
329
      this->mapfile_->print_discarded_sections(this->input_objects_);
330
      layout->print_to_mapfile(this->mapfile_);
331
    }
332
 
333
  Output_file* of;
334
  if (layout->incremental_base() == NULL)
335
    {
336
      of = new Output_file(parameters->options().output_file_name());
337
      if (this->options_.oformat_enum() != General_options::OBJECT_FORMAT_ELF)
338
        of->set_is_temporary();
339
      of->open(file_size);
340
    }
341
  else
342
    {
343
      of = layout->incremental_base()->output_file();
344
 
345
      // Apply the incremental relocations for symbols whose values
346
      // have changed.  We do this before we resize the file and start
347
      // writing anything else to it, so that we can read the old
348
      // incremental information from the file before (possibly)
349
      // overwriting it.
350
      if (parameters->incremental_update())
351
        layout->incremental_base()->apply_incremental_relocs(this->symtab_,
352
                                                             this->layout_,
353
                                                             of);
354
 
355
      of->resize(file_size);
356
    }
357
 
358
  // Queue up the final set of tasks.
359
  gold::queue_final_tasks(this->options_, this->input_objects_,
360
                          this->symtab_, layout, workqueue, of);
361
}
362
 
363
// Layout methods.
364
 
365
Layout::Layout(int number_of_input_files, Script_options* script_options)
366
  : number_of_input_files_(number_of_input_files),
367
    script_options_(script_options),
368
    namepool_(),
369
    sympool_(),
370
    dynpool_(),
371
    signatures_(),
372
    section_name_map_(),
373
    segment_list_(),
374
    section_list_(),
375
    unattached_section_list_(),
376
    special_output_list_(),
377
    section_headers_(NULL),
378
    tls_segment_(NULL),
379
    relro_segment_(NULL),
380 159 khays
    interp_segment_(NULL),
381 27 khays
    increase_relro_(0),
382
    symtab_section_(NULL),
383
    symtab_xindex_(NULL),
384
    dynsym_section_(NULL),
385
    dynsym_xindex_(NULL),
386
    dynamic_section_(NULL),
387
    dynamic_symbol_(NULL),
388
    dynamic_data_(NULL),
389
    eh_frame_section_(NULL),
390
    eh_frame_data_(NULL),
391
    added_eh_frame_data_(false),
392
    eh_frame_hdr_section_(NULL),
393
    build_id_note_(NULL),
394
    debug_abbrev_(NULL),
395
    debug_info_(NULL),
396
    group_signatures_(),
397
    output_file_size_(-1),
398
    have_added_input_section_(false),
399
    sections_are_attached_(false),
400
    input_requires_executable_stack_(false),
401
    input_with_gnu_stack_note_(false),
402
    input_without_gnu_stack_note_(false),
403
    has_static_tls_(false),
404
    any_postprocessing_sections_(false),
405
    resized_signatures_(false),
406
    have_stabstr_section_(false),
407 159 khays
    section_ordering_specified_(false),
408 27 khays
    incremental_inputs_(NULL),
409
    record_output_section_data_from_script_(false),
410
    script_output_section_data_list_(),
411
    segment_states_(NULL),
412
    relaxation_debug_check_(NULL),
413 163 khays
    section_order_map_(),
414 159 khays
    input_section_position_(),
415
    input_section_glob_(),
416 27 khays
    incremental_base_(NULL),
417
    free_list_()
418
{
419
  // Make space for more than enough segments for a typical file.
420
  // This is just for efficiency--it's OK if we wind up needing more.
421
  this->segment_list_.reserve(12);
422
 
423
  // We expect two unattached Output_data objects: the file header and
424
  // the segment headers.
425
  this->special_output_list_.reserve(2);
426
 
427
  // Initialize structure needed for an incremental build.
428
  if (parameters->incremental())
429
    this->incremental_inputs_ = new Incremental_inputs;
430
 
431
  // The section name pool is worth optimizing in all cases, because
432
  // it is small, but there are often overlaps due to .rel sections.
433
  this->namepool_.set_optimize();
434
}
435
 
436
// For incremental links, record the base file to be modified.
437
 
438
void
439
Layout::set_incremental_base(Incremental_binary* base)
440
{
441
  this->incremental_base_ = base;
442
  this->free_list_.init(base->output_file()->filesize(), true);
443
}
444
 
445
// Hash a key we use to look up an output section mapping.
446
 
447
size_t
448
Layout::Hash_key::operator()(const Layout::Key& k) const
449
{
450
 return k.first + k.second.first + k.second.second;
451
}
452
 
453
// Returns whether the given section is in the list of
454
// debug-sections-used-by-some-version-of-gdb.  Currently,
455
// we've checked versions of gdb up to and including 6.7.1.
456
 
457
static const char* gdb_sections[] =
458
{ ".debug_abbrev",
459
  // ".debug_aranges",   // not used by gdb as of 6.7.1
460
  ".debug_frame",
461
  ".debug_info",
462
  ".debug_types",
463
  ".debug_line",
464
  ".debug_loc",
465
  ".debug_macinfo",
466
  // ".debug_pubnames",  // not used by gdb as of 6.7.1
467
  ".debug_ranges",
468
  ".debug_str",
469
};
470
 
471
static const char* lines_only_debug_sections[] =
472
{ ".debug_abbrev",
473
  // ".debug_aranges",   // not used by gdb as of 6.7.1
474
  // ".debug_frame",
475
  ".debug_info",
476
  // ".debug_types",
477
  ".debug_line",
478
  // ".debug_loc",
479
  // ".debug_macinfo",
480
  // ".debug_pubnames",  // not used by gdb as of 6.7.1
481
  // ".debug_ranges",
482
  ".debug_str",
483
};
484
 
485
static inline bool
486
is_gdb_debug_section(const char* str)
487
{
488
  // We can do this faster: binary search or a hashtable.  But why bother?
489
  for (size_t i = 0; i < sizeof(gdb_sections)/sizeof(*gdb_sections); ++i)
490
    if (strcmp(str, gdb_sections[i]) == 0)
491
      return true;
492
  return false;
493
}
494
 
495
static inline bool
496
is_lines_only_debug_section(const char* str)
497
{
498
  // We can do this faster: binary search or a hashtable.  But why bother?
499
  for (size_t i = 0;
500
       i < sizeof(lines_only_debug_sections)/sizeof(*lines_only_debug_sections);
501
       ++i)
502
    if (strcmp(str, lines_only_debug_sections[i]) == 0)
503
      return true;
504
  return false;
505
}
506
 
507
// Sometimes we compress sections.  This is typically done for
508
// sections that are not part of normal program execution (such as
509
// .debug_* sections), and where the readers of these sections know
510
// how to deal with compressed sections.  This routine doesn't say for
511
// certain whether we'll compress -- it depends on commandline options
512
// as well -- just whether this section is a candidate for compression.
513
// (The Output_compressed_section class decides whether to compress
514
// a given section, and picks the name of the compressed section.)
515
 
516
static bool
517
is_compressible_debug_section(const char* secname)
518
{
519
  return (is_prefix_of(".debug", secname));
520
}
521
 
522
// We may see compressed debug sections in input files.  Return TRUE
523
// if this is the name of a compressed debug section.
524
 
525
bool
526
is_compressed_debug_section(const char* secname)
527
{
528
  return (is_prefix_of(".zdebug", secname));
529
}
530
 
531
// Whether to include this section in the link.
532
 
533
template<int size, bool big_endian>
534
bool
535
Layout::include_section(Sized_relobj_file<size, big_endian>*, const char* name,
536
                        const elfcpp::Shdr<size, big_endian>& shdr)
537
{
538
  if (shdr.get_sh_flags() & elfcpp::SHF_EXCLUDE)
539
    return false;
540
 
541
  switch (shdr.get_sh_type())
542
    {
543
    case elfcpp::SHT_NULL:
544
    case elfcpp::SHT_SYMTAB:
545
    case elfcpp::SHT_DYNSYM:
546
    case elfcpp::SHT_HASH:
547
    case elfcpp::SHT_DYNAMIC:
548
    case elfcpp::SHT_SYMTAB_SHNDX:
549
      return false;
550
 
551
    case elfcpp::SHT_STRTAB:
552
      // Discard the sections which have special meanings in the ELF
553
      // ABI.  Keep others (e.g., .stabstr).  We could also do this by
554
      // checking the sh_link fields of the appropriate sections.
555
      return (strcmp(name, ".dynstr") != 0
556
              && strcmp(name, ".strtab") != 0
557
              && strcmp(name, ".shstrtab") != 0);
558
 
559
    case elfcpp::SHT_RELA:
560
    case elfcpp::SHT_REL:
561
    case elfcpp::SHT_GROUP:
562
      // If we are emitting relocations these should be handled
563
      // elsewhere.
564
      gold_assert(!parameters->options().relocatable()
565
                  && !parameters->options().emit_relocs());
566
      return false;
567
 
568
    case elfcpp::SHT_PROGBITS:
569
      if (parameters->options().strip_debug()
570
          && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
571
        {
572
          if (is_debug_info_section(name))
573
            return false;
574
        }
575
      if (parameters->options().strip_debug_non_line()
576
          && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
577
        {
578
          // Debugging sections can only be recognized by name.
579
          if (is_prefix_of(".debug", name)
580
              && !is_lines_only_debug_section(name))
581
            return false;
582
        }
583
      if (parameters->options().strip_debug_gdb()
584
          && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
585
        {
586
          // Debugging sections can only be recognized by name.
587
          if (is_prefix_of(".debug", name)
588
              && !is_gdb_debug_section(name))
589
            return false;
590
        }
591
      if (parameters->options().strip_lto_sections()
592
          && !parameters->options().relocatable()
593
          && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) == 0)
594
        {
595
          // Ignore LTO sections containing intermediate code.
596
          if (is_prefix_of(".gnu.lto_", name))
597
            return false;
598
        }
599
      // The GNU linker strips .gnu_debuglink sections, so we do too.
600
      // This is a feature used to keep debugging information in
601
      // separate files.
602
      if (strcmp(name, ".gnu_debuglink") == 0)
603
        return false;
604
      return true;
605
 
606
    default:
607
      return true;
608
    }
609
}
610
 
611
// Return an output section named NAME, or NULL if there is none.
612
 
613
Output_section*
614
Layout::find_output_section(const char* name) const
615
{
616
  for (Section_list::const_iterator p = this->section_list_.begin();
617
       p != this->section_list_.end();
618
       ++p)
619
    if (strcmp((*p)->name(), name) == 0)
620
      return *p;
621
  return NULL;
622
}
623
 
624
// Return an output segment of type TYPE, with segment flags SET set
625
// and segment flags CLEAR clear.  Return NULL if there is none.
626
 
627
Output_segment*
628
Layout::find_output_segment(elfcpp::PT type, elfcpp::Elf_Word set,
629
                            elfcpp::Elf_Word clear) const
630
{
631
  for (Segment_list::const_iterator p = this->segment_list_.begin();
632
       p != this->segment_list_.end();
633
       ++p)
634
    if (static_cast<elfcpp::PT>((*p)->type()) == type
635
        && ((*p)->flags() & set) == set
636
        && ((*p)->flags() & clear) == 0)
637
      return *p;
638
  return NULL;
639
}
640
 
641 159 khays
// When we put a .ctors or .dtors section with more than one word into
642
// a .init_array or .fini_array section, we need to reverse the words
643
// in the .ctors/.dtors section.  This is because .init_array executes
644
// constructors front to back, where .ctors executes them back to
645
// front, and vice-versa for .fini_array/.dtors.  Although we do want
646
// to remap .ctors/.dtors into .init_array/.fini_array because it can
647
// be more efficient, we don't want to change the order in which
648
// constructors/destructors are run.  This set just keeps track of
649
// these sections which need to be reversed.  It is only changed by
650
// Layout::layout.  It should be a private member of Layout, but that
651
// would require layout.h to #include object.h to get the definition
652
// of Section_id.
653
static Unordered_set<Section_id, Section_id_hash> ctors_sections_in_init_array;
654
 
655
// Return whether OBJECT/SHNDX is a .ctors/.dtors section mapped to a
656
// .init_array/.fini_array section.
657
 
658
bool
659
Layout::is_ctors_in_init_array(Relobj* relobj, unsigned int shndx) const
660
{
661
  return (ctors_sections_in_init_array.find(Section_id(relobj, shndx))
662
          != ctors_sections_in_init_array.end());
663
}
664
 
665 27 khays
// Return the output section to use for section NAME with type TYPE
666
// and section flags FLAGS.  NAME must be canonicalized in the string
667 159 khays
// pool, and NAME_KEY is the key.  ORDER is where this should appear
668
// in the output sections.  IS_RELRO is true for a relro section.
669 27 khays
 
670
Output_section*
671
Layout::get_output_section(const char* name, Stringpool::Key name_key,
672
                           elfcpp::Elf_Word type, elfcpp::Elf_Xword flags,
673
                           Output_section_order order, bool is_relro)
674
{
675 159 khays
  elfcpp::Elf_Word lookup_type = type;
676
 
677
  // For lookup purposes, treat INIT_ARRAY, FINI_ARRAY, and
678
  // PREINIT_ARRAY like PROGBITS.  This ensures that we combine
679
  // .init_array, .fini_array, and .preinit_array sections by name
680
  // whatever their type in the input file.  We do this because the
681
  // types are not always right in the input files.
682
  if (lookup_type == elfcpp::SHT_INIT_ARRAY
683
      || lookup_type == elfcpp::SHT_FINI_ARRAY
684
      || lookup_type == elfcpp::SHT_PREINIT_ARRAY)
685
    lookup_type = elfcpp::SHT_PROGBITS;
686
 
687 27 khays
  elfcpp::Elf_Xword lookup_flags = flags;
688
 
689
  // Ignoring SHF_WRITE and SHF_EXECINSTR here means that we combine
690
  // read-write with read-only sections.  Some other ELF linkers do
691
  // not do this.  FIXME: Perhaps there should be an option
692
  // controlling this.
693
  lookup_flags &= ~(elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR);
694
 
695 159 khays
  const Key key(name_key, std::make_pair(lookup_type, lookup_flags));
696 27 khays
  const std::pair<Key, Output_section*> v(key, NULL);
697
  std::pair<Section_name_map::iterator, bool> ins(
698
    this->section_name_map_.insert(v));
699
 
700
  if (!ins.second)
701
    return ins.first->second;
702
  else
703
    {
704
      // This is the first time we've seen this name/type/flags
705
      // combination.  For compatibility with the GNU linker, we
706
      // combine sections with contents and zero flags with sections
707
      // with non-zero flags.  This is a workaround for cases where
708
      // assembler code forgets to set section flags.  FIXME: Perhaps
709
      // there should be an option to control this.
710
      Output_section* os = NULL;
711
 
712 159 khays
      if (lookup_type == elfcpp::SHT_PROGBITS)
713 27 khays
        {
714
          if (flags == 0)
715
            {
716
              Output_section* same_name = this->find_output_section(name);
717
              if (same_name != NULL
718 159 khays
                  && (same_name->type() == elfcpp::SHT_PROGBITS
719
                      || same_name->type() == elfcpp::SHT_INIT_ARRAY
720
                      || same_name->type() == elfcpp::SHT_FINI_ARRAY
721
                      || same_name->type() == elfcpp::SHT_PREINIT_ARRAY)
722 27 khays
                  && (same_name->flags() & elfcpp::SHF_TLS) == 0)
723
                os = same_name;
724
            }
725
          else if ((flags & elfcpp::SHF_TLS) == 0)
726
            {
727
              elfcpp::Elf_Xword zero_flags = 0;
728 159 khays
              const Key zero_key(name_key, std::make_pair(lookup_type,
729
                                                          zero_flags));
730 27 khays
              Section_name_map::iterator p =
731
                  this->section_name_map_.find(zero_key);
732
              if (p != this->section_name_map_.end())
733
                os = p->second;
734
            }
735
        }
736
 
737
      if (os == NULL)
738
        os = this->make_output_section(name, type, flags, order, is_relro);
739
 
740
      ins.first->second = os;
741
      return os;
742
    }
743
}
744
 
745
// Pick the output section to use for section NAME, in input file
746
// RELOBJ, with type TYPE and flags FLAGS.  RELOBJ may be NULL for a
747
// linker created section.  IS_INPUT_SECTION is true if we are
748
// choosing an output section for an input section found in a input
749 159 khays
// file.  ORDER is where this section should appear in the output
750
// sections.  IS_RELRO is true for a relro section.  This will return
751
// NULL if the input section should be discarded.
752 27 khays
 
753
Output_section*
754
Layout::choose_output_section(const Relobj* relobj, const char* name,
755
                              elfcpp::Elf_Word type, elfcpp::Elf_Xword flags,
756
                              bool is_input_section, Output_section_order order,
757
                              bool is_relro)
758
{
759
  // We should not see any input sections after we have attached
760
  // sections to segments.
761
  gold_assert(!is_input_section || !this->sections_are_attached_);
762
 
763
  // Some flags in the input section should not be automatically
764
  // copied to the output section.
765
  flags &= ~ (elfcpp::SHF_INFO_LINK
766
              | elfcpp::SHF_GROUP
767
              | elfcpp::SHF_MERGE
768
              | elfcpp::SHF_STRINGS);
769
 
770
  // We only clear the SHF_LINK_ORDER flag in for
771
  // a non-relocatable link.
772
  if (!parameters->options().relocatable())
773
    flags &= ~elfcpp::SHF_LINK_ORDER;
774
 
775
  if (this->script_options_->saw_sections_clause())
776
    {
777
      // We are using a SECTIONS clause, so the output section is
778
      // chosen based only on the name.
779
 
780
      Script_sections* ss = this->script_options_->script_sections();
781
      const char* file_name = relobj == NULL ? NULL : relobj->name().c_str();
782
      Output_section** output_section_slot;
783
      Script_sections::Section_type script_section_type;
784
      const char* orig_name = name;
785
      name = ss->output_section_name(file_name, name, &output_section_slot,
786
                                     &script_section_type);
787
      if (name == NULL)
788
        {
789
          gold_debug(DEBUG_SCRIPT, _("Unable to create output section '%s' "
790
                                     "because it is not allowed by the "
791
                                     "SECTIONS clause of the linker script"),
792
                     orig_name);
793
          // The SECTIONS clause says to discard this input section.
794
          return NULL;
795
        }
796
 
797
      // We can only handle script section types ST_NONE and ST_NOLOAD.
798
      switch (script_section_type)
799
        {
800
        case Script_sections::ST_NONE:
801
          break;
802
        case Script_sections::ST_NOLOAD:
803
          flags &= elfcpp::SHF_ALLOC;
804
          break;
805
        default:
806
          gold_unreachable();
807
        }
808
 
809
      // If this is an orphan section--one not mentioned in the linker
810
      // script--then OUTPUT_SECTION_SLOT will be NULL, and we do the
811
      // default processing below.
812
 
813
      if (output_section_slot != NULL)
814
        {
815
          if (*output_section_slot != NULL)
816
            {
817
              (*output_section_slot)->update_flags_for_input_section(flags);
818
              return *output_section_slot;
819
            }
820
 
821
          // We don't put sections found in the linker script into
822
          // SECTION_NAME_MAP_.  That keeps us from getting confused
823
          // if an orphan section is mapped to a section with the same
824
          // name as one in the linker script.
825
 
826
          name = this->namepool_.add(name, false, NULL);
827
 
828
          Output_section* os = this->make_output_section(name, type, flags,
829
                                                         order, is_relro);
830
 
831
          os->set_found_in_sections_clause();
832
 
833
          // Special handling for NOLOAD sections.
834
          if (script_section_type == Script_sections::ST_NOLOAD)
835
            {
836
              os->set_is_noload();
837
 
838
              // The constructor of Output_section sets addresses of non-ALLOC
839
              // sections to 0 by default.  We don't want that for NOLOAD
840
              // sections even if they have no SHF_ALLOC flag.
841
              if ((os->flags() & elfcpp::SHF_ALLOC) == 0
842
                  && os->is_address_valid())
843
                {
844
                  gold_assert(os->address() == 0
845
                              && !os->is_offset_valid()
846
                              && !os->is_data_size_valid());
847
                  os->reset_address_and_file_offset();
848
                }
849
            }
850
 
851
          *output_section_slot = os;
852
          return os;
853
        }
854
    }
855
 
856
  // FIXME: Handle SHF_OS_NONCONFORMING somewhere.
857
 
858
  size_t len = strlen(name);
859
  char* uncompressed_name = NULL;
860
 
861
  // Compressed debug sections should be mapped to the corresponding
862
  // uncompressed section.
863
  if (is_compressed_debug_section(name))
864
    {
865
      uncompressed_name = new char[len];
866
      uncompressed_name[0] = '.';
867
      gold_assert(name[0] == '.' && name[1] == 'z');
868
      strncpy(&uncompressed_name[1], &name[2], len - 2);
869
      uncompressed_name[len - 1] = '\0';
870
      len -= 1;
871
      name = uncompressed_name;
872
    }
873
 
874
  // Turn NAME from the name of the input section into the name of the
875
  // output section.
876
  if (is_input_section
877
      && !this->script_options_->saw_sections_clause()
878
      && !parameters->options().relocatable())
879 159 khays
    name = Layout::output_section_name(relobj, name, &len);
880 27 khays
 
881
  Stringpool::Key name_key;
882
  name = this->namepool_.add_with_length(name, len, true, &name_key);
883
 
884
  if (uncompressed_name != NULL)
885
    delete[] uncompressed_name;
886
 
887
  // Find or make the output section.  The output section is selected
888
  // based on the section name, type, and flags.
889
  return this->get_output_section(name, name_key, type, flags, order, is_relro);
890
}
891
 
892
// For incremental links, record the initial fixed layout of a section
893
// from the base file, and return a pointer to the Output_section.
894
 
895
template<int size, bool big_endian>
896
Output_section*
897
Layout::init_fixed_output_section(const char* name,
898
                                  elfcpp::Shdr<size, big_endian>& shdr)
899
{
900
  unsigned int sh_type = shdr.get_sh_type();
901
 
902 163 khays
  // We preserve the layout of PROGBITS, NOBITS, INIT_ARRAY, FINI_ARRAY,
903
  // PRE_INIT_ARRAY, and NOTE sections.
904 27 khays
  // All others will be created from scratch and reallocated.
905 163 khays
  if (!can_incremental_update(sh_type))
906 27 khays
    return NULL;
907
 
908
  typename elfcpp::Elf_types<size>::Elf_Addr sh_addr = shdr.get_sh_addr();
909
  typename elfcpp::Elf_types<size>::Elf_Off sh_offset = shdr.get_sh_offset();
910
  typename elfcpp::Elf_types<size>::Elf_WXword sh_size = shdr.get_sh_size();
911
  typename elfcpp::Elf_types<size>::Elf_WXword sh_flags = shdr.get_sh_flags();
912
  typename elfcpp::Elf_types<size>::Elf_WXword sh_addralign =
913
      shdr.get_sh_addralign();
914
 
915
  // Make the output section.
916
  Stringpool::Key name_key;
917
  name = this->namepool_.add(name, true, &name_key);
918
  Output_section* os = this->get_output_section(name, name_key, sh_type,
919
                                                sh_flags, ORDER_INVALID, false);
920
  os->set_fixed_layout(sh_addr, sh_offset, sh_size, sh_addralign);
921
  if (sh_type != elfcpp::SHT_NOBITS)
922
    this->free_list_.remove(sh_offset, sh_offset + sh_size);
923
  return os;
924
}
925
 
926
// Return the output section to use for input section SHNDX, with name
927
// NAME, with header HEADER, from object OBJECT.  RELOC_SHNDX is the
928
// index of a relocation section which applies to this section, or 0
929
// if none, or -1U if more than one.  RELOC_TYPE is the type of the
930
// relocation section if there is one.  Set *OFF to the offset of this
931
// input section without the output section.  Return NULL if the
932
// section should be discarded.  Set *OFF to -1 if the section
933
// contents should not be written directly to the output file, but
934
// will instead receive special handling.
935
 
936
template<int size, bool big_endian>
937
Output_section*
938
Layout::layout(Sized_relobj_file<size, big_endian>* object, unsigned int shndx,
939
               const char* name, const elfcpp::Shdr<size, big_endian>& shdr,
940
               unsigned int reloc_shndx, unsigned int, off_t* off)
941
{
942
  *off = 0;
943
 
944
  if (!this->include_section(object, name, shdr))
945
    return NULL;
946
 
947
  elfcpp::Elf_Word sh_type = shdr.get_sh_type();
948
 
949
  // In a relocatable link a grouped section must not be combined with
950
  // any other sections.
951 159 khays
  Output_section* os;
952 27 khays
  if (parameters->options().relocatable()
953
      && (shdr.get_sh_flags() & elfcpp::SHF_GROUP) != 0)
954
    {
955
      name = this->namepool_.add(name, true, NULL);
956
      os = this->make_output_section(name, sh_type, shdr.get_sh_flags(),
957
                                     ORDER_INVALID, false);
958
    }
959
  else
960
    {
961
      os = this->choose_output_section(object, name, sh_type,
962
                                       shdr.get_sh_flags(), true,
963
                                       ORDER_INVALID, false);
964
      if (os == NULL)
965
        return NULL;
966
    }
967
 
968
  // By default the GNU linker sorts input sections whose names match
969 159 khays
  // .ctors.*, .dtors.*, .init_array.*, or .fini_array.*.  The
970
  // sections are sorted by name.  This is used to implement
971
  // constructor priority ordering.  We are compatible.  When we put
972
  // .ctor sections in .init_array and .dtor sections in .fini_array,
973
  // we must also sort plain .ctor and .dtor sections.
974 27 khays
  if (!this->script_options_->saw_sections_clause()
975 159 khays
      && !parameters->options().relocatable()
976 27 khays
      && (is_prefix_of(".ctors.", name)
977
          || is_prefix_of(".dtors.", name)
978
          || is_prefix_of(".init_array.", name)
979 159 khays
          || is_prefix_of(".fini_array.", name)
980
          || (parameters->options().ctors_in_init_array()
981
              && (strcmp(name, ".ctors") == 0
982
                  || strcmp(name, ".dtors") == 0))))
983 27 khays
    os->set_must_sort_attached_input_sections();
984
 
985 159 khays
  // If this is a .ctors or .ctors.* section being mapped to a
986
  // .init_array section, or a .dtors or .dtors.* section being mapped
987
  // to a .fini_array section, we will need to reverse the words if
988
  // there is more than one.  Record this section for later.  See
989
  // ctors_sections_in_init_array above.
990
  if (!this->script_options_->saw_sections_clause()
991
      && !parameters->options().relocatable()
992
      && shdr.get_sh_size() > size / 8
993
      && (((strcmp(name, ".ctors") == 0
994
            || is_prefix_of(".ctors.", name))
995
           && strcmp(os->name(), ".init_array") == 0)
996
          || ((strcmp(name, ".dtors") == 0
997
               || is_prefix_of(".dtors.", name))
998
              && strcmp(os->name(), ".fini_array") == 0)))
999
    ctors_sections_in_init_array.insert(Section_id(object, shndx));
1000
 
1001 27 khays
  // FIXME: Handle SHF_LINK_ORDER somewhere.
1002
 
1003
  elfcpp::Elf_Xword orig_flags = os->flags();
1004
 
1005
  *off = os->add_input_section(this, object, shndx, name, shdr, reloc_shndx,
1006
                               this->script_options_->saw_sections_clause());
1007
 
1008
  // If the flags changed, we may have to change the order.
1009
  if ((orig_flags & elfcpp::SHF_ALLOC) != 0)
1010
    {
1011
      orig_flags &= (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR);
1012
      elfcpp::Elf_Xword new_flags =
1013
        os->flags() & (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR);
1014
      if (orig_flags != new_flags)
1015
        os->set_order(this->default_section_order(os, false));
1016
    }
1017
 
1018
  this->have_added_input_section_ = true;
1019
 
1020
  return os;
1021
}
1022
 
1023
// Handle a relocation section when doing a relocatable link.
1024
 
1025
template<int size, bool big_endian>
1026
Output_section*
1027
Layout::layout_reloc(Sized_relobj_file<size, big_endian>* object,
1028
                     unsigned int,
1029
                     const elfcpp::Shdr<size, big_endian>& shdr,
1030
                     Output_section* data_section,
1031
                     Relocatable_relocs* rr)
1032
{
1033
  gold_assert(parameters->options().relocatable()
1034
              || parameters->options().emit_relocs());
1035
 
1036
  int sh_type = shdr.get_sh_type();
1037
 
1038
  std::string name;
1039
  if (sh_type == elfcpp::SHT_REL)
1040
    name = ".rel";
1041
  else if (sh_type == elfcpp::SHT_RELA)
1042
    name = ".rela";
1043
  else
1044
    gold_unreachable();
1045
  name += data_section->name();
1046
 
1047
  // In a relocatable link relocs for a grouped section must not be
1048
  // combined with other reloc sections.
1049
  Output_section* os;
1050
  if (!parameters->options().relocatable()
1051
      || (data_section->flags() & elfcpp::SHF_GROUP) == 0)
1052
    os = this->choose_output_section(object, name.c_str(), sh_type,
1053
                                     shdr.get_sh_flags(), false,
1054
                                     ORDER_INVALID, false);
1055
  else
1056
    {
1057
      const char* n = this->namepool_.add(name.c_str(), true, NULL);
1058
      os = this->make_output_section(n, sh_type, shdr.get_sh_flags(),
1059
                                     ORDER_INVALID, false);
1060
    }
1061
 
1062
  os->set_should_link_to_symtab();
1063
  os->set_info_section(data_section);
1064
 
1065
  Output_section_data* posd;
1066
  if (sh_type == elfcpp::SHT_REL)
1067
    {
1068
      os->set_entsize(elfcpp::Elf_sizes<size>::rel_size);
1069
      posd = new Output_relocatable_relocs<elfcpp::SHT_REL,
1070
                                           size,
1071
                                           big_endian>(rr);
1072
    }
1073
  else if (sh_type == elfcpp::SHT_RELA)
1074
    {
1075
      os->set_entsize(elfcpp::Elf_sizes<size>::rela_size);
1076
      posd = new Output_relocatable_relocs<elfcpp::SHT_RELA,
1077
                                           size,
1078
                                           big_endian>(rr);
1079
    }
1080
  else
1081
    gold_unreachable();
1082
 
1083
  os->add_output_section_data(posd);
1084
  rr->set_output_data(posd);
1085
 
1086
  return os;
1087
}
1088
 
1089
// Handle a group section when doing a relocatable link.
1090
 
1091
template<int size, bool big_endian>
1092
void
1093
Layout::layout_group(Symbol_table* symtab,
1094
                     Sized_relobj_file<size, big_endian>* object,
1095
                     unsigned int,
1096
                     const char* group_section_name,
1097
                     const char* signature,
1098
                     const elfcpp::Shdr<size, big_endian>& shdr,
1099
                     elfcpp::Elf_Word flags,
1100
                     std::vector<unsigned int>* shndxes)
1101
{
1102
  gold_assert(parameters->options().relocatable());
1103
  gold_assert(shdr.get_sh_type() == elfcpp::SHT_GROUP);
1104
  group_section_name = this->namepool_.add(group_section_name, true, NULL);
1105
  Output_section* os = this->make_output_section(group_section_name,
1106
                                                 elfcpp::SHT_GROUP,
1107
                                                 shdr.get_sh_flags(),
1108
                                                 ORDER_INVALID, false);
1109
 
1110
  // We need to find a symbol with the signature in the symbol table.
1111
  // If we don't find one now, we need to look again later.
1112
  Symbol* sym = symtab->lookup(signature, NULL);
1113
  if (sym != NULL)
1114
    os->set_info_symndx(sym);
1115
  else
1116
    {
1117
      // Reserve some space to minimize reallocations.
1118
      if (this->group_signatures_.empty())
1119
        this->group_signatures_.reserve(this->number_of_input_files_ * 16);
1120
 
1121
      // We will wind up using a symbol whose name is the signature.
1122
      // So just put the signature in the symbol name pool to save it.
1123
      signature = symtab->canonicalize_name(signature);
1124
      this->group_signatures_.push_back(Group_signature(os, signature));
1125
    }
1126
 
1127
  os->set_should_link_to_symtab();
1128
  os->set_entsize(4);
1129
 
1130
  section_size_type entry_count =
1131
    convert_to_section_size_type(shdr.get_sh_size() / 4);
1132
  Output_section_data* posd =
1133
    new Output_data_group<size, big_endian>(object, entry_count, flags,
1134
                                            shndxes);
1135
  os->add_output_section_data(posd);
1136
}
1137
 
1138
// Special GNU handling of sections name .eh_frame.  They will
1139
// normally hold exception frame data as defined by the C++ ABI
1140
// (http://codesourcery.com/cxx-abi/).
1141
 
1142
template<int size, bool big_endian>
1143
Output_section*
1144
Layout::layout_eh_frame(Sized_relobj_file<size, big_endian>* object,
1145
                        const unsigned char* symbols,
1146
                        off_t symbols_size,
1147
                        const unsigned char* symbol_names,
1148
                        off_t symbol_names_size,
1149
                        unsigned int shndx,
1150
                        const elfcpp::Shdr<size, big_endian>& shdr,
1151
                        unsigned int reloc_shndx, unsigned int reloc_type,
1152
                        off_t* off)
1153
{
1154 159 khays
  gold_assert(shdr.get_sh_type() == elfcpp::SHT_PROGBITS
1155
              || shdr.get_sh_type() == elfcpp::SHT_X86_64_UNWIND);
1156 27 khays
  gold_assert((shdr.get_sh_flags() & elfcpp::SHF_ALLOC) != 0);
1157
 
1158 159 khays
  Output_section* os = this->make_eh_frame_section(object);
1159
  if (os == NULL)
1160
    return NULL;
1161
 
1162
  gold_assert(this->eh_frame_section_ == os);
1163
 
1164
  elfcpp::Elf_Xword orig_flags = os->flags();
1165
 
1166
  if (!parameters->incremental()
1167
      && this->eh_frame_data_->add_ehframe_input_section(object,
1168
                                                         symbols,
1169
                                                         symbols_size,
1170
                                                         symbol_names,
1171
                                                         symbol_names_size,
1172
                                                         shndx,
1173
                                                         reloc_shndx,
1174
                                                         reloc_type))
1175
    {
1176
      os->update_flags_for_input_section(shdr.get_sh_flags());
1177
 
1178
      // A writable .eh_frame section is a RELRO section.
1179
      if ((orig_flags & (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR))
1180
          != (os->flags() & (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR)))
1181
        {
1182
          os->set_is_relro();
1183
          os->set_order(ORDER_RELRO);
1184
        }
1185
 
1186
      // We found a .eh_frame section we are going to optimize, so now
1187
      // we can add the set of optimized sections to the output
1188
      // section.  We need to postpone adding this until we've found a
1189
      // section we can optimize so that the .eh_frame section in
1190
      // crtbegin.o winds up at the start of the output section.
1191
      if (!this->added_eh_frame_data_)
1192
        {
1193
          os->add_output_section_data(this->eh_frame_data_);
1194
          this->added_eh_frame_data_ = true;
1195
        }
1196
      *off = -1;
1197
    }
1198
  else
1199
    {
1200
      // We couldn't handle this .eh_frame section for some reason.
1201
      // Add it as a normal section.
1202
      bool saw_sections_clause = this->script_options_->saw_sections_clause();
1203
      *off = os->add_input_section(this, object, shndx, ".eh_frame", shdr,
1204
                                   reloc_shndx, saw_sections_clause);
1205
      this->have_added_input_section_ = true;
1206
 
1207
      if ((orig_flags & (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR))
1208
          != (os->flags() & (elfcpp::SHF_WRITE | elfcpp::SHF_EXECINSTR)))
1209
        os->set_order(this->default_section_order(os, false));
1210
    }
1211
 
1212
  return os;
1213
}
1214
 
1215
// Create and return the magic .eh_frame section.  Create
1216
// .eh_frame_hdr also if appropriate.  OBJECT is the object with the
1217
// input .eh_frame section; it may be NULL.
1218
 
1219
Output_section*
1220
Layout::make_eh_frame_section(const Relobj* object)
1221
{
1222
  // FIXME: On x86_64, this could use SHT_X86_64_UNWIND rather than
1223
  // SHT_PROGBITS.
1224
  Output_section* os = this->choose_output_section(object, ".eh_frame",
1225 27 khays
                                                   elfcpp::SHT_PROGBITS,
1226
                                                   elfcpp::SHF_ALLOC, false,
1227
                                                   ORDER_EHFRAME, false);
1228
  if (os == NULL)
1229
    return NULL;
1230
 
1231
  if (this->eh_frame_section_ == NULL)
1232
    {
1233
      this->eh_frame_section_ = os;
1234
      this->eh_frame_data_ = new Eh_frame();
1235
 
1236
      // For incremental linking, we do not optimize .eh_frame sections
1237
      // or create a .eh_frame_hdr section.
1238
      if (parameters->options().eh_frame_hdr() && !parameters->incremental())
1239
        {
1240
          Output_section* hdr_os =
1241
            this->choose_output_section(NULL, ".eh_frame_hdr",
1242
                                        elfcpp::SHT_PROGBITS,
1243
                                        elfcpp::SHF_ALLOC, false,
1244
                                        ORDER_EHFRAME, false);
1245
 
1246
          if (hdr_os != NULL)
1247
            {
1248
              Eh_frame_hdr* hdr_posd = new Eh_frame_hdr(os,
1249
                                                        this->eh_frame_data_);
1250
              hdr_os->add_output_section_data(hdr_posd);
1251
 
1252
              hdr_os->set_after_input_sections();
1253
 
1254
              if (!this->script_options_->saw_phdrs_clause())
1255
                {
1256
                  Output_segment* hdr_oseg;
1257
                  hdr_oseg = this->make_output_segment(elfcpp::PT_GNU_EH_FRAME,
1258
                                                       elfcpp::PF_R);
1259
                  hdr_oseg->add_output_section_to_nonload(hdr_os,
1260
                                                          elfcpp::PF_R);
1261
                }
1262
 
1263
              this->eh_frame_data_->set_eh_frame_hdr(hdr_posd);
1264
            }
1265
        }
1266
    }
1267
 
1268 159 khays
  return os;
1269
}
1270 27 khays
 
1271 159 khays
// Add an exception frame for a PLT.  This is called from target code.
1272
 
1273
void
1274
Layout::add_eh_frame_for_plt(Output_data* plt, const unsigned char* cie_data,
1275
                             size_t cie_length, const unsigned char* fde_data,
1276
                             size_t fde_length)
1277
{
1278
  if (parameters->incremental())
1279 27 khays
    {
1280 159 khays
      // FIXME: Maybe this could work some day....
1281
      return;
1282 27 khays
    }
1283 159 khays
  Output_section* os = this->make_eh_frame_section(NULL);
1284
  if (os == NULL)
1285
    return;
1286
  this->eh_frame_data_->add_ehframe_for_plt(plt, cie_data, cie_length,
1287
                                            fde_data, fde_length);
1288
  if (!this->added_eh_frame_data_)
1289 27 khays
    {
1290 159 khays
      os->add_output_section_data(this->eh_frame_data_);
1291
      this->added_eh_frame_data_ = true;
1292 27 khays
    }
1293
}
1294
 
1295
// Add POSD to an output section using NAME, TYPE, and FLAGS.  Return
1296
// the output section.
1297
 
1298
Output_section*
1299
Layout::add_output_section_data(const char* name, elfcpp::Elf_Word type,
1300
                                elfcpp::Elf_Xword flags,
1301
                                Output_section_data* posd,
1302
                                Output_section_order order, bool is_relro)
1303
{
1304
  Output_section* os = this->choose_output_section(NULL, name, type, flags,
1305
                                                   false, order, is_relro);
1306
  if (os != NULL)
1307
    os->add_output_section_data(posd);
1308
  return os;
1309
}
1310
 
1311
// Map section flags to segment flags.
1312
 
1313
elfcpp::Elf_Word
1314
Layout::section_flags_to_segment(elfcpp::Elf_Xword flags)
1315
{
1316
  elfcpp::Elf_Word ret = elfcpp::PF_R;
1317
  if ((flags & elfcpp::SHF_WRITE) != 0)
1318
    ret |= elfcpp::PF_W;
1319
  if ((flags & elfcpp::SHF_EXECINSTR) != 0)
1320
    ret |= elfcpp::PF_X;
1321
  return ret;
1322
}
1323
 
1324
// Make a new Output_section, and attach it to segments as
1325
// appropriate.  ORDER is the order in which this section should
1326
// appear in the output segment.  IS_RELRO is true if this is a relro
1327
// (read-only after relocations) section.
1328
 
1329
Output_section*
1330
Layout::make_output_section(const char* name, elfcpp::Elf_Word type,
1331
                            elfcpp::Elf_Xword flags,
1332
                            Output_section_order order, bool is_relro)
1333
{
1334
  Output_section* os;
1335
  if ((flags & elfcpp::SHF_ALLOC) == 0
1336
      && strcmp(parameters->options().compress_debug_sections(), "none") != 0
1337
      && is_compressible_debug_section(name))
1338
    os = new Output_compressed_section(&parameters->options(), name, type,
1339
                                       flags);
1340
  else if ((flags & elfcpp::SHF_ALLOC) == 0
1341
           && parameters->options().strip_debug_non_line()
1342
           && strcmp(".debug_abbrev", name) == 0)
1343
    {
1344
      os = this->debug_abbrev_ = new Output_reduced_debug_abbrev_section(
1345
          name, type, flags);
1346
      if (this->debug_info_)
1347
        this->debug_info_->set_abbreviations(this->debug_abbrev_);
1348
    }
1349
  else if ((flags & elfcpp::SHF_ALLOC) == 0
1350
           && parameters->options().strip_debug_non_line()
1351
           && strcmp(".debug_info", name) == 0)
1352
    {
1353
      os = this->debug_info_ = new Output_reduced_debug_info_section(
1354
          name, type, flags);
1355
      if (this->debug_abbrev_)
1356
        this->debug_info_->set_abbreviations(this->debug_abbrev_);
1357
    }
1358
  else
1359
    {
1360 159 khays
      // Sometimes .init_array*, .preinit_array* and .fini_array* do
1361
      // not have correct section types.  Force them here.
1362
      if (type == elfcpp::SHT_PROGBITS)
1363
        {
1364
          if (is_prefix_of(".init_array", name))
1365
            type = elfcpp::SHT_INIT_ARRAY;
1366
          else if (is_prefix_of(".preinit_array", name))
1367
            type = elfcpp::SHT_PREINIT_ARRAY;
1368
          else if (is_prefix_of(".fini_array", name))
1369
            type = elfcpp::SHT_FINI_ARRAY;
1370
        }
1371
 
1372 27 khays
      // FIXME: const_cast is ugly.
1373
      Target* target = const_cast<Target*>(&parameters->target());
1374
      os = target->make_output_section(name, type, flags);
1375
    }
1376
 
1377
  // With -z relro, we have to recognize the special sections by name.
1378
  // There is no other way.
1379
  bool is_relro_local = false;
1380
  if (!this->script_options_->saw_sections_clause()
1381
      && parameters->options().relro()
1382
      && type == elfcpp::SHT_PROGBITS
1383
      && (flags & elfcpp::SHF_ALLOC) != 0
1384
      && (flags & elfcpp::SHF_WRITE) != 0)
1385
    {
1386
      if (strcmp(name, ".data.rel.ro") == 0)
1387
        is_relro = true;
1388
      else if (strcmp(name, ".data.rel.ro.local") == 0)
1389
        {
1390
          is_relro = true;
1391
          is_relro_local = true;
1392
        }
1393
      else if (type == elfcpp::SHT_INIT_ARRAY
1394
               || type == elfcpp::SHT_FINI_ARRAY
1395
               || type == elfcpp::SHT_PREINIT_ARRAY)
1396
        is_relro = true;
1397
      else if (strcmp(name, ".ctors") == 0
1398
               || strcmp(name, ".dtors") == 0
1399
               || strcmp(name, ".jcr") == 0)
1400
        is_relro = true;
1401
    }
1402
 
1403
  if (is_relro)
1404
    os->set_is_relro();
1405
 
1406
  if (order == ORDER_INVALID && (flags & elfcpp::SHF_ALLOC) != 0)
1407
    order = this->default_section_order(os, is_relro_local);
1408
 
1409
  os->set_order(order);
1410
 
1411
  parameters->target().new_output_section(os);
1412
 
1413
  this->section_list_.push_back(os);
1414
 
1415
  // The GNU linker by default sorts some sections by priority, so we
1416
  // do the same.  We need to know that this might happen before we
1417
  // attach any input sections.
1418
  if (!this->script_options_->saw_sections_clause()
1419 159 khays
      && !parameters->options().relocatable()
1420
      && (strcmp(name, ".init_array") == 0
1421
          || strcmp(name, ".fini_array") == 0
1422
          || (!parameters->options().ctors_in_init_array()
1423
              && (strcmp(name, ".ctors") == 0
1424
                  || strcmp(name, ".dtors") == 0))))
1425 27 khays
    os->set_may_sort_attached_input_sections();
1426
 
1427
  // Check for .stab*str sections, as .stab* sections need to link to
1428
  // them.
1429
  if (type == elfcpp::SHT_STRTAB
1430
      && !this->have_stabstr_section_
1431
      && strncmp(name, ".stab", 5) == 0
1432
      && strcmp(name + strlen(name) - 3, "str") == 0)
1433
    this->have_stabstr_section_ = true;
1434
 
1435 159 khays
  // During a full incremental link, we add patch space to most
1436
  // PROGBITS and NOBITS sections.  Flag those that may be
1437
  // arbitrarily padded.
1438
  if ((type == elfcpp::SHT_PROGBITS || type == elfcpp::SHT_NOBITS)
1439
      && order != ORDER_INTERP
1440
      && order != ORDER_INIT
1441
      && order != ORDER_PLT
1442
      && order != ORDER_FINI
1443
      && order != ORDER_RELRO_LAST
1444
      && order != ORDER_NON_RELRO_FIRST
1445 163 khays
      && strcmp(name, ".eh_frame") != 0
1446 159 khays
      && strcmp(name, ".ctors") != 0
1447
      && strcmp(name, ".dtors") != 0
1448
      && strcmp(name, ".jcr") != 0)
1449
    {
1450
      os->set_is_patch_space_allowed();
1451
 
1452
      // Certain sections require "holes" to be filled with
1453
      // specific fill patterns.  These fill patterns may have
1454
      // a minimum size, so we must prevent allocations from the
1455
      // free list that leave a hole smaller than the minimum.
1456
      if (strcmp(name, ".debug_info") == 0)
1457
        os->set_free_space_fill(new Output_fill_debug_info(false));
1458
      else if (strcmp(name, ".debug_types") == 0)
1459
        os->set_free_space_fill(new Output_fill_debug_info(true));
1460
      else if (strcmp(name, ".debug_line") == 0)
1461
        os->set_free_space_fill(new Output_fill_debug_line());
1462
    }
1463
 
1464 27 khays
  // If we have already attached the sections to segments, then we
1465
  // need to attach this one now.  This happens for sections created
1466
  // directly by the linker.
1467
  if (this->sections_are_attached_)
1468
    this->attach_section_to_segment(os);
1469
 
1470
  return os;
1471
}
1472
 
1473
// Return the default order in which a section should be placed in an
1474
// output segment.  This function captures a lot of the ideas in
1475
// ld/scripttempl/elf.sc in the GNU linker.  Note that the order of a
1476
// linker created section is normally set when the section is created;
1477
// this function is used for input sections.
1478
 
1479
Output_section_order
1480
Layout::default_section_order(Output_section* os, bool is_relro_local)
1481
{
1482
  gold_assert((os->flags() & elfcpp::SHF_ALLOC) != 0);
1483
  bool is_write = (os->flags() & elfcpp::SHF_WRITE) != 0;
1484
  bool is_execinstr = (os->flags() & elfcpp::SHF_EXECINSTR) != 0;
1485
  bool is_bss = false;
1486
 
1487
  switch (os->type())
1488
    {
1489
    default:
1490
    case elfcpp::SHT_PROGBITS:
1491
      break;
1492
    case elfcpp::SHT_NOBITS:
1493
      is_bss = true;
1494
      break;
1495
    case elfcpp::SHT_RELA:
1496
    case elfcpp::SHT_REL:
1497
      if (!is_write)
1498
        return ORDER_DYNAMIC_RELOCS;
1499
      break;
1500
    case elfcpp::SHT_HASH:
1501
    case elfcpp::SHT_DYNAMIC:
1502
    case elfcpp::SHT_SHLIB:
1503
    case elfcpp::SHT_DYNSYM:
1504
    case elfcpp::SHT_GNU_HASH:
1505
    case elfcpp::SHT_GNU_verdef:
1506
    case elfcpp::SHT_GNU_verneed:
1507
    case elfcpp::SHT_GNU_versym:
1508
      if (!is_write)
1509
        return ORDER_DYNAMIC_LINKER;
1510
      break;
1511
    case elfcpp::SHT_NOTE:
1512
      return is_write ? ORDER_RW_NOTE : ORDER_RO_NOTE;
1513
    }
1514
 
1515
  if ((os->flags() & elfcpp::SHF_TLS) != 0)
1516
    return is_bss ? ORDER_TLS_BSS : ORDER_TLS_DATA;
1517
 
1518
  if (!is_bss && !is_write)
1519
    {
1520
      if (is_execinstr)
1521
        {
1522
          if (strcmp(os->name(), ".init") == 0)
1523
            return ORDER_INIT;
1524
          else if (strcmp(os->name(), ".fini") == 0)
1525
            return ORDER_FINI;
1526
        }
1527
      return is_execinstr ? ORDER_TEXT : ORDER_READONLY;
1528
    }
1529
 
1530
  if (os->is_relro())
1531
    return is_relro_local ? ORDER_RELRO_LOCAL : ORDER_RELRO;
1532
 
1533
  if (os->is_small_section())
1534
    return is_bss ? ORDER_SMALL_BSS : ORDER_SMALL_DATA;
1535
  if (os->is_large_section())
1536
    return is_bss ? ORDER_LARGE_BSS : ORDER_LARGE_DATA;
1537
 
1538
  return is_bss ? ORDER_BSS : ORDER_DATA;
1539
}
1540
 
1541
// Attach output sections to segments.  This is called after we have
1542
// seen all the input sections.
1543
 
1544
void
1545
Layout::attach_sections_to_segments()
1546
{
1547
  for (Section_list::iterator p = this->section_list_.begin();
1548
       p != this->section_list_.end();
1549
       ++p)
1550
    this->attach_section_to_segment(*p);
1551
 
1552
  this->sections_are_attached_ = true;
1553
}
1554
 
1555
// Attach an output section to a segment.
1556
 
1557
void
1558
Layout::attach_section_to_segment(Output_section* os)
1559
{
1560
  if ((os->flags() & elfcpp::SHF_ALLOC) == 0)
1561
    this->unattached_section_list_.push_back(os);
1562
  else
1563
    this->attach_allocated_section_to_segment(os);
1564
}
1565
 
1566
// Attach an allocated output section to a segment.
1567
 
1568
void
1569
Layout::attach_allocated_section_to_segment(Output_section* os)
1570
{
1571
  elfcpp::Elf_Xword flags = os->flags();
1572
  gold_assert((flags & elfcpp::SHF_ALLOC) != 0);
1573
 
1574
  if (parameters->options().relocatable())
1575
    return;
1576
 
1577
  // If we have a SECTIONS clause, we can't handle the attachment to
1578
  // segments until after we've seen all the sections.
1579
  if (this->script_options_->saw_sections_clause())
1580
    return;
1581
 
1582
  gold_assert(!this->script_options_->saw_phdrs_clause());
1583
 
1584
  // This output section goes into a PT_LOAD segment.
1585
 
1586
  elfcpp::Elf_Word seg_flags = Layout::section_flags_to_segment(flags);
1587
 
1588
  // Check for --section-start.
1589
  uint64_t addr;
1590
  bool is_address_set = parameters->options().section_start(os->name(), &addr);
1591
 
1592
  // In general the only thing we really care about for PT_LOAD
1593
  // segments is whether or not they are writable or executable,
1594
  // so that is how we search for them.
1595
  // Large data sections also go into their own PT_LOAD segment.
1596
  // People who need segments sorted on some other basis will
1597
  // have to use a linker script.
1598
 
1599
  Segment_list::const_iterator p;
1600
  for (p = this->segment_list_.begin();
1601
       p != this->segment_list_.end();
1602
       ++p)
1603
    {
1604
      if ((*p)->type() != elfcpp::PT_LOAD)
1605
        continue;
1606
      if (!parameters->options().omagic()
1607
          && ((*p)->flags() & elfcpp::PF_W) != (seg_flags & elfcpp::PF_W))
1608
        continue;
1609
      if (parameters->options().rosegment()
1610
          && ((*p)->flags() & elfcpp::PF_X) != (seg_flags & elfcpp::PF_X))
1611
        continue;
1612
      // If -Tbss was specified, we need to separate the data and BSS
1613
      // segments.
1614
      if (parameters->options().user_set_Tbss())
1615
        {
1616
          if ((os->type() == elfcpp::SHT_NOBITS)
1617
              == (*p)->has_any_data_sections())
1618
            continue;
1619
        }
1620
      if (os->is_large_data_section() && !(*p)->is_large_data_segment())
1621
        continue;
1622
 
1623
      if (is_address_set)
1624
        {
1625
          if ((*p)->are_addresses_set())
1626
            continue;
1627
 
1628
          (*p)->add_initial_output_data(os);
1629
          (*p)->update_flags_for_output_section(seg_flags);
1630
          (*p)->set_addresses(addr, addr);
1631
          break;
1632
        }
1633
 
1634
      (*p)->add_output_section_to_load(this, os, seg_flags);
1635
      break;
1636
    }
1637
 
1638
  if (p == this->segment_list_.end())
1639
    {
1640
      Output_segment* oseg = this->make_output_segment(elfcpp::PT_LOAD,
1641
                                                       seg_flags);
1642
      if (os->is_large_data_section())
1643
        oseg->set_is_large_data_segment();
1644
      oseg->add_output_section_to_load(this, os, seg_flags);
1645
      if (is_address_set)
1646
        oseg->set_addresses(addr, addr);
1647
    }
1648
 
1649
  // If we see a loadable SHT_NOTE section, we create a PT_NOTE
1650
  // segment.
1651
  if (os->type() == elfcpp::SHT_NOTE)
1652
    {
1653
      // See if we already have an equivalent PT_NOTE segment.
1654
      for (p = this->segment_list_.begin();
1655
           p != segment_list_.end();
1656
           ++p)
1657
        {
1658
          if ((*p)->type() == elfcpp::PT_NOTE
1659
              && (((*p)->flags() & elfcpp::PF_W)
1660
                  == (seg_flags & elfcpp::PF_W)))
1661
            {
1662
              (*p)->add_output_section_to_nonload(os, seg_flags);
1663
              break;
1664
            }
1665
        }
1666
 
1667
      if (p == this->segment_list_.end())
1668
        {
1669
          Output_segment* oseg = this->make_output_segment(elfcpp::PT_NOTE,
1670
                                                           seg_flags);
1671
          oseg->add_output_section_to_nonload(os, seg_flags);
1672
        }
1673
    }
1674
 
1675
  // If we see a loadable SHF_TLS section, we create a PT_TLS
1676
  // segment.  There can only be one such segment.
1677
  if ((flags & elfcpp::SHF_TLS) != 0)
1678
    {
1679
      if (this->tls_segment_ == NULL)
1680
        this->make_output_segment(elfcpp::PT_TLS, seg_flags);
1681
      this->tls_segment_->add_output_section_to_nonload(os, seg_flags);
1682
    }
1683
 
1684
  // If -z relro is in effect, and we see a relro section, we create a
1685
  // PT_GNU_RELRO segment.  There can only be one such segment.
1686
  if (os->is_relro() && parameters->options().relro())
1687
    {
1688
      gold_assert(seg_flags == (elfcpp::PF_R | elfcpp::PF_W));
1689
      if (this->relro_segment_ == NULL)
1690
        this->make_output_segment(elfcpp::PT_GNU_RELRO, seg_flags);
1691
      this->relro_segment_->add_output_section_to_nonload(os, seg_flags);
1692
    }
1693 159 khays
 
1694
  // If we see a section named .interp, put it into a PT_INTERP
1695
  // segment.  This seems broken to me, but this is what GNU ld does,
1696
  // and glibc expects it.
1697
  if (strcmp(os->name(), ".interp") == 0
1698
      && !this->script_options_->saw_phdrs_clause())
1699
    {
1700
      if (this->interp_segment_ == NULL)
1701
        this->make_output_segment(elfcpp::PT_INTERP, seg_flags);
1702
      else
1703
        gold_warning(_("multiple '.interp' sections in input files "
1704
                       "may cause confusing PT_INTERP segment"));
1705
      this->interp_segment_->add_output_section_to_nonload(os, seg_flags);
1706
    }
1707 27 khays
}
1708
 
1709
// Make an output section for a script.
1710
 
1711
Output_section*
1712
Layout::make_output_section_for_script(
1713
    const char* name,
1714
    Script_sections::Section_type section_type)
1715
{
1716
  name = this->namepool_.add(name, false, NULL);
1717
  elfcpp::Elf_Xword sh_flags = elfcpp::SHF_ALLOC;
1718
  if (section_type == Script_sections::ST_NOLOAD)
1719
    sh_flags = 0;
1720
  Output_section* os = this->make_output_section(name, elfcpp::SHT_PROGBITS,
1721
                                                 sh_flags, ORDER_INVALID,
1722
                                                 false);
1723
  os->set_found_in_sections_clause();
1724
  if (section_type == Script_sections::ST_NOLOAD)
1725
    os->set_is_noload();
1726
  return os;
1727
}
1728
 
1729
// Return the number of segments we expect to see.
1730
 
1731
size_t
1732
Layout::expected_segment_count() const
1733
{
1734
  size_t ret = this->segment_list_.size();
1735
 
1736
  // If we didn't see a SECTIONS clause in a linker script, we should
1737
  // already have the complete list of segments.  Otherwise we ask the
1738
  // SECTIONS clause how many segments it expects, and add in the ones
1739
  // we already have (PT_GNU_STACK, PT_GNU_EH_FRAME, etc.)
1740
 
1741
  if (!this->script_options_->saw_sections_clause())
1742
    return ret;
1743
  else
1744
    {
1745
      const Script_sections* ss = this->script_options_->script_sections();
1746
      return ret + ss->expected_segment_count(this);
1747
    }
1748
}
1749
 
1750
// Handle the .note.GNU-stack section at layout time.  SEEN_GNU_STACK
1751
// is whether we saw a .note.GNU-stack section in the object file.
1752
// GNU_STACK_FLAGS is the section flags.  The flags give the
1753
// protection required for stack memory.  We record this in an
1754
// executable as a PT_GNU_STACK segment.  If an object file does not
1755
// have a .note.GNU-stack segment, we must assume that it is an old
1756
// object.  On some targets that will force an executable stack.
1757
 
1758
void
1759
Layout::layout_gnu_stack(bool seen_gnu_stack, uint64_t gnu_stack_flags,
1760
                         const Object* obj)
1761
{
1762
  if (!seen_gnu_stack)
1763
    {
1764
      this->input_without_gnu_stack_note_ = true;
1765
      if (parameters->options().warn_execstack()
1766
          && parameters->target().is_default_stack_executable())
1767
        gold_warning(_("%s: missing .note.GNU-stack section"
1768
                       " implies executable stack"),
1769
                     obj->name().c_str());
1770
    }
1771
  else
1772
    {
1773
      this->input_with_gnu_stack_note_ = true;
1774
      if ((gnu_stack_flags & elfcpp::SHF_EXECINSTR) != 0)
1775
        {
1776
          this->input_requires_executable_stack_ = true;
1777
          if (parameters->options().warn_execstack()
1778
              || parameters->options().is_stack_executable())
1779
            gold_warning(_("%s: requires executable stack"),
1780
                         obj->name().c_str());
1781
        }
1782
    }
1783
}
1784
 
1785
// Create automatic note sections.
1786
 
1787
void
1788
Layout::create_notes()
1789
{
1790
  this->create_gold_note();
1791
  this->create_executable_stack_info();
1792
  this->create_build_id();
1793
}
1794
 
1795
// Create the dynamic sections which are needed before we read the
1796
// relocs.
1797
 
1798
void
1799
Layout::create_initial_dynamic_sections(Symbol_table* symtab)
1800
{
1801
  if (parameters->doing_static_link())
1802
    return;
1803
 
1804
  this->dynamic_section_ = this->choose_output_section(NULL, ".dynamic",
1805
                                                       elfcpp::SHT_DYNAMIC,
1806
                                                       (elfcpp::SHF_ALLOC
1807
                                                        | elfcpp::SHF_WRITE),
1808
                                                       false, ORDER_RELRO,
1809
                                                       true);
1810
 
1811 159 khays
  // A linker script may discard .dynamic, so check for NULL.
1812
  if (this->dynamic_section_ != NULL)
1813
    {
1814
      this->dynamic_symbol_ =
1815
        symtab->define_in_output_data("_DYNAMIC", NULL,
1816
                                      Symbol_table::PREDEFINED,
1817
                                      this->dynamic_section_, 0, 0,
1818
                                      elfcpp::STT_OBJECT, elfcpp::STB_LOCAL,
1819
                                      elfcpp::STV_HIDDEN, 0, false, false);
1820 27 khays
 
1821 159 khays
      this->dynamic_data_ =  new Output_data_dynamic(&this->dynpool_);
1822 27 khays
 
1823 159 khays
      this->dynamic_section_->add_output_section_data(this->dynamic_data_);
1824
    }
1825 27 khays
}
1826
 
1827
// For each output section whose name can be represented as C symbol,
1828
// define __start and __stop symbols for the section.  This is a GNU
1829
// extension.
1830
 
1831
void
1832
Layout::define_section_symbols(Symbol_table* symtab)
1833
{
1834
  for (Section_list::const_iterator p = this->section_list_.begin();
1835
       p != this->section_list_.end();
1836
       ++p)
1837
    {
1838
      const char* const name = (*p)->name();
1839
      if (is_cident(name))
1840
        {
1841
          const std::string name_string(name);
1842
          const std::string start_name(cident_section_start_prefix
1843
                                       + name_string);
1844
          const std::string stop_name(cident_section_stop_prefix
1845
                                      + name_string);
1846
 
1847
          symtab->define_in_output_data(start_name.c_str(),
1848
                                        NULL, // version
1849
                                        Symbol_table::PREDEFINED,
1850
                                        *p,
1851
                                        0, // value
1852
                                        0, // symsize
1853
                                        elfcpp::STT_NOTYPE,
1854
                                        elfcpp::STB_GLOBAL,
1855
                                        elfcpp::STV_DEFAULT,
1856
                                        0, // nonvis
1857
                                        false, // offset_is_from_end
1858
                                        true); // only_if_ref
1859
 
1860
          symtab->define_in_output_data(stop_name.c_str(),
1861
                                        NULL, // version
1862
                                        Symbol_table::PREDEFINED,
1863
                                        *p,
1864
                                        0, // value
1865
                                        0, // symsize
1866
                                        elfcpp::STT_NOTYPE,
1867
                                        elfcpp::STB_GLOBAL,
1868
                                        elfcpp::STV_DEFAULT,
1869
                                        0, // nonvis
1870
                                        true, // offset_is_from_end
1871
                                        true); // only_if_ref
1872
        }
1873
    }
1874
}
1875
 
1876
// Define symbols for group signatures.
1877
 
1878
void
1879
Layout::define_group_signatures(Symbol_table* symtab)
1880
{
1881
  for (Group_signatures::iterator p = this->group_signatures_.begin();
1882
       p != this->group_signatures_.end();
1883
       ++p)
1884
    {
1885
      Symbol* sym = symtab->lookup(p->signature, NULL);
1886
      if (sym != NULL)
1887
        p->section->set_info_symndx(sym);
1888
      else
1889
        {
1890
          // Force the name of the group section to the group
1891
          // signature, and use the group's section symbol as the
1892
          // signature symbol.
1893
          if (strcmp(p->section->name(), p->signature) != 0)
1894
            {
1895
              const char* name = this->namepool_.add(p->signature,
1896
                                                     true, NULL);
1897
              p->section->set_name(name);
1898
            }
1899
          p->section->set_needs_symtab_index();
1900
          p->section->set_info_section_symndx(p->section);
1901
        }
1902
    }
1903
 
1904
  this->group_signatures_.clear();
1905
}
1906
 
1907
// Find the first read-only PT_LOAD segment, creating one if
1908
// necessary.
1909
 
1910
Output_segment*
1911
Layout::find_first_load_seg()
1912
{
1913
  Output_segment* best = NULL;
1914
  for (Segment_list::const_iterator p = this->segment_list_.begin();
1915
       p != this->segment_list_.end();
1916
       ++p)
1917
    {
1918
      if ((*p)->type() == elfcpp::PT_LOAD
1919
          && ((*p)->flags() & elfcpp::PF_R) != 0
1920
          && (parameters->options().omagic()
1921
              || ((*p)->flags() & elfcpp::PF_W) == 0))
1922
        {
1923
          if (best == NULL || this->segment_precedes(*p, best))
1924
            best = *p;
1925
        }
1926
    }
1927
  if (best != NULL)
1928
    return best;
1929
 
1930
  gold_assert(!this->script_options_->saw_phdrs_clause());
1931
 
1932
  Output_segment* load_seg = this->make_output_segment(elfcpp::PT_LOAD,
1933
                                                       elfcpp::PF_R);
1934
  return load_seg;
1935
}
1936
 
1937
// Save states of all current output segments.  Store saved states
1938
// in SEGMENT_STATES.
1939
 
1940
void
1941
Layout::save_segments(Segment_states* segment_states)
1942
{
1943
  for (Segment_list::const_iterator p = this->segment_list_.begin();
1944
       p != this->segment_list_.end();
1945
       ++p)
1946
    {
1947
      Output_segment* segment = *p;
1948
      // Shallow copy.
1949
      Output_segment* copy = new Output_segment(*segment);
1950
      (*segment_states)[segment] = copy;
1951
    }
1952
}
1953
 
1954
// Restore states of output segments and delete any segment not found in
1955
// SEGMENT_STATES.
1956
 
1957
void
1958
Layout::restore_segments(const Segment_states* segment_states)
1959
{
1960
  // Go through the segment list and remove any segment added in the
1961
  // relaxation loop.
1962
  this->tls_segment_ = NULL;
1963
  this->relro_segment_ = NULL;
1964
  Segment_list::iterator list_iter = this->segment_list_.begin();
1965
  while (list_iter != this->segment_list_.end())
1966
    {
1967
      Output_segment* segment = *list_iter;
1968
      Segment_states::const_iterator states_iter =
1969
          segment_states->find(segment);
1970
      if (states_iter != segment_states->end())
1971
        {
1972
          const Output_segment* copy = states_iter->second;
1973
          // Shallow copy to restore states.
1974
          *segment = *copy;
1975
 
1976
          // Also fix up TLS and RELRO segment pointers as appropriate.
1977
          if (segment->type() == elfcpp::PT_TLS)
1978
            this->tls_segment_ = segment;
1979
          else if (segment->type() == elfcpp::PT_GNU_RELRO)
1980
            this->relro_segment_ = segment;
1981
 
1982
          ++list_iter;
1983
        }
1984
      else
1985
        {
1986
          list_iter = this->segment_list_.erase(list_iter);
1987
          // This is a segment created during section layout.  It should be
1988
          // safe to remove it since we should have removed all pointers to it.
1989
          delete segment;
1990
        }
1991
    }
1992
}
1993
 
1994
// Clean up after relaxation so that sections can be laid out again.
1995
 
1996
void
1997
Layout::clean_up_after_relaxation()
1998
{
1999
  // Restore the segments to point state just prior to the relaxation loop.
2000
  Script_sections* script_section = this->script_options_->script_sections();
2001
  script_section->release_segments();
2002
  this->restore_segments(this->segment_states_);
2003
 
2004
  // Reset section addresses and file offsets
2005
  for (Section_list::iterator p = this->section_list_.begin();
2006
       p != this->section_list_.end();
2007
       ++p)
2008
    {
2009
      (*p)->restore_states();
2010
 
2011
      // If an input section changes size because of relaxation,
2012
      // we need to adjust the section offsets of all input sections.
2013
      // after such a section.
2014
      if ((*p)->section_offsets_need_adjustment())
2015
        (*p)->adjust_section_offsets();
2016
 
2017
      (*p)->reset_address_and_file_offset();
2018
    }
2019
 
2020
  // Reset special output object address and file offsets.
2021
  for (Data_list::iterator p = this->special_output_list_.begin();
2022
       p != this->special_output_list_.end();
2023
       ++p)
2024
    (*p)->reset_address_and_file_offset();
2025
 
2026
  // A linker script may have created some output section data objects.
2027
  // They are useless now.
2028
  for (Output_section_data_list::const_iterator p =
2029
         this->script_output_section_data_list_.begin();
2030
       p != this->script_output_section_data_list_.end();
2031
       ++p)
2032
    delete *p;
2033
  this->script_output_section_data_list_.clear();
2034
}
2035
 
2036
// Prepare for relaxation.
2037
 
2038
void
2039
Layout::prepare_for_relaxation()
2040
{
2041
  // Create an relaxation debug check if in debugging mode.
2042
  if (is_debugging_enabled(DEBUG_RELAXATION))
2043
    this->relaxation_debug_check_ = new Relaxation_debug_check();
2044
 
2045
  // Save segment states.
2046
  this->segment_states_ = new Segment_states();
2047
  this->save_segments(this->segment_states_);
2048
 
2049
  for(Section_list::const_iterator p = this->section_list_.begin();
2050
      p != this->section_list_.end();
2051
      ++p)
2052
    (*p)->save_states();
2053
 
2054
  if (is_debugging_enabled(DEBUG_RELAXATION))
2055
    this->relaxation_debug_check_->check_output_data_for_reset_values(
2056
        this->section_list_, this->special_output_list_);
2057
 
2058
  // Also enable recording of output section data from scripts.
2059
  this->record_output_section_data_from_script_ = true;
2060
}
2061
 
2062
// Relaxation loop body:  If target has no relaxation, this runs only once
2063
// Otherwise, the target relaxation hook is called at the end of
2064
// each iteration.  If the hook returns true, it means re-layout of
2065
// section is required.  
2066
//
2067
// The number of segments created by a linking script without a PHDRS
2068
// clause may be affected by section sizes and alignments.  There is
2069
// a remote chance that relaxation causes different number of PT_LOAD
2070
// segments are created and sections are attached to different segments.
2071
// Therefore, we always throw away all segments created during section
2072
// layout.  In order to be able to restart the section layout, we keep
2073
// a copy of the segment list right before the relaxation loop and use
2074
// that to restore the segments.
2075
// 
2076
// PASS is the current relaxation pass number. 
2077
// SYMTAB is a symbol table.
2078
// PLOAD_SEG is the address of a pointer for the load segment.
2079
// PHDR_SEG is a pointer to the PHDR segment.
2080
// SEGMENT_HEADERS points to the output segment header.
2081
// FILE_HEADER points to the output file header.
2082
// PSHNDX is the address to store the output section index.
2083
 
2084
off_t inline
2085
Layout::relaxation_loop_body(
2086
    int pass,
2087
    Target* target,
2088
    Symbol_table* symtab,
2089
    Output_segment** pload_seg,
2090
    Output_segment* phdr_seg,
2091
    Output_segment_headers* segment_headers,
2092
    Output_file_header* file_header,
2093
    unsigned int* pshndx)
2094
{
2095
  // If this is not the first iteration, we need to clean up after
2096
  // relaxation so that we can lay out the sections again.
2097
  if (pass != 0)
2098
    this->clean_up_after_relaxation();
2099
 
2100
  // If there is a SECTIONS clause, put all the input sections into
2101
  // the required order.
2102
  Output_segment* load_seg;
2103
  if (this->script_options_->saw_sections_clause())
2104
    load_seg = this->set_section_addresses_from_script(symtab);
2105
  else if (parameters->options().relocatable())
2106
    load_seg = NULL;
2107
  else
2108
    load_seg = this->find_first_load_seg();
2109
 
2110
  if (parameters->options().oformat_enum()
2111
      != General_options::OBJECT_FORMAT_ELF)
2112
    load_seg = NULL;
2113
 
2114
  // If the user set the address of the text segment, that may not be
2115
  // compatible with putting the segment headers and file headers into
2116
  // that segment.
2117 159 khays
  if (parameters->options().user_set_Ttext()
2118
      && parameters->options().Ttext() % target->common_pagesize() != 0)
2119
    {
2120
      load_seg = NULL;
2121
      phdr_seg = NULL;
2122
    }
2123 27 khays
 
2124
  gold_assert(phdr_seg == NULL
2125
              || load_seg != NULL
2126
              || this->script_options_->saw_sections_clause());
2127
 
2128
  // If the address of the load segment we found has been set by
2129
  // --section-start rather than by a script, then adjust the VMA and
2130
  // LMA downward if possible to include the file and section headers.
2131
  uint64_t header_gap = 0;
2132
  if (load_seg != NULL
2133
      && load_seg->are_addresses_set()
2134
      && !this->script_options_->saw_sections_clause()
2135
      && !parameters->options().relocatable())
2136
    {
2137
      file_header->finalize_data_size();
2138
      segment_headers->finalize_data_size();
2139
      size_t sizeof_headers = (file_header->data_size()
2140
                               + segment_headers->data_size());
2141
      const uint64_t abi_pagesize = target->abi_pagesize();
2142
      uint64_t hdr_paddr = load_seg->paddr() - sizeof_headers;
2143
      hdr_paddr &= ~(abi_pagesize - 1);
2144
      uint64_t subtract = load_seg->paddr() - hdr_paddr;
2145
      if (load_seg->paddr() < subtract || load_seg->vaddr() < subtract)
2146
        load_seg = NULL;
2147
      else
2148
        {
2149
          load_seg->set_addresses(load_seg->vaddr() - subtract,
2150
                                  load_seg->paddr() - subtract);
2151
          header_gap = subtract - sizeof_headers;
2152
        }
2153
    }
2154
 
2155
  // Lay out the segment headers.
2156
  if (!parameters->options().relocatable())
2157
    {
2158
      gold_assert(segment_headers != NULL);
2159
      if (header_gap != 0 && load_seg != NULL)
2160
        {
2161
          Output_data_zero_fill* z = new Output_data_zero_fill(header_gap, 1);
2162
          load_seg->add_initial_output_data(z);
2163
        }
2164
      if (load_seg != NULL)
2165
        load_seg->add_initial_output_data(segment_headers);
2166
      if (phdr_seg != NULL)
2167
        phdr_seg->add_initial_output_data(segment_headers);
2168
    }
2169
 
2170
  // Lay out the file header.
2171
  if (load_seg != NULL)
2172
    load_seg->add_initial_output_data(file_header);
2173
 
2174
  if (this->script_options_->saw_phdrs_clause()
2175
      && !parameters->options().relocatable())
2176
    {
2177
      // Support use of FILEHDRS and PHDRS attachments in a PHDRS
2178
      // clause in a linker script.
2179
      Script_sections* ss = this->script_options_->script_sections();
2180
      ss->put_headers_in_phdrs(file_header, segment_headers);
2181
    }
2182
 
2183
  // We set the output section indexes in set_segment_offsets and
2184
  // set_section_indexes.
2185
  *pshndx = 1;
2186
 
2187
  // Set the file offsets of all the segments, and all the sections
2188
  // they contain.
2189
  off_t off;
2190
  if (!parameters->options().relocatable())
2191
    off = this->set_segment_offsets(target, load_seg, pshndx);
2192
  else
2193
    off = this->set_relocatable_section_offsets(file_header, pshndx);
2194
 
2195
   // Verify that the dummy relaxation does not change anything.
2196
  if (is_debugging_enabled(DEBUG_RELAXATION))
2197
    {
2198
      if (pass == 0)
2199
        this->relaxation_debug_check_->read_sections(this->section_list_);
2200
      else
2201
        this->relaxation_debug_check_->verify_sections(this->section_list_);
2202
    }
2203
 
2204
  *pload_seg = load_seg;
2205
  return off;
2206
}
2207
 
2208
// Search the list of patterns and find the postion of the given section
2209
// name in the output section.  If the section name matches a glob
2210
// pattern and a non-glob name, then the non-glob position takes
2211
// precedence.  Return 0 if no match is found.
2212
 
2213
unsigned int
2214
Layout::find_section_order_index(const std::string& section_name)
2215
{
2216
  Unordered_map<std::string, unsigned int>::iterator map_it;
2217
  map_it = this->input_section_position_.find(section_name);
2218
  if (map_it != this->input_section_position_.end())
2219
    return map_it->second;
2220
 
2221
  // Absolute match failed.  Linear search the glob patterns.
2222
  std::vector<std::string>::iterator it;
2223
  for (it = this->input_section_glob_.begin();
2224
       it != this->input_section_glob_.end();
2225
       ++it)
2226
    {
2227
       if (fnmatch((*it).c_str(), section_name.c_str(), FNM_NOESCAPE) == 0)
2228
         {
2229
           map_it = this->input_section_position_.find(*it);
2230
           gold_assert(map_it != this->input_section_position_.end());
2231
           return map_it->second;
2232
         }
2233
    }
2234
  return 0;
2235
}
2236
 
2237
// Read the sequence of input sections from the file specified with
2238 159 khays
// option --section-ordering-file.
2239 27 khays
 
2240
void
2241
Layout::read_layout_from_file()
2242
{
2243
  const char* filename = parameters->options().section_ordering_file();
2244
  std::ifstream in;
2245
  std::string line;
2246
 
2247
  in.open(filename);
2248
  if (!in)
2249
    gold_fatal(_("unable to open --section-ordering-file file %s: %s"),
2250
               filename, strerror(errno));
2251
 
2252
  std::getline(in, line);   // this chops off the trailing \n, if any
2253
  unsigned int position = 1;
2254 159 khays
  this->set_section_ordering_specified();
2255 27 khays
 
2256
  while (in)
2257
    {
2258
      if (!line.empty() && line[line.length() - 1] == '\r')   // Windows
2259
        line.resize(line.length() - 1);
2260
      // Ignore comments, beginning with '#'
2261
      if (line[0] == '#')
2262
        {
2263
          std::getline(in, line);
2264
          continue;
2265
        }
2266
      this->input_section_position_[line] = position;
2267
      // Store all glob patterns in a vector.
2268
      if (is_wildcard_string(line.c_str()))
2269
        this->input_section_glob_.push_back(line);
2270
      position++;
2271
      std::getline(in, line);
2272
    }
2273
}
2274
 
2275
// Finalize the layout.  When this is called, we have created all the
2276
// output sections and all the output segments which are based on
2277
// input sections.  We have several things to do, and we have to do
2278
// them in the right order, so that we get the right results correctly
2279
// and efficiently.
2280
 
2281
// 1) Finalize the list of output segments and create the segment
2282
// table header.
2283
 
2284
// 2) Finalize the dynamic symbol table and associated sections.
2285
 
2286
// 3) Determine the final file offset of all the output segments.
2287
 
2288
// 4) Determine the final file offset of all the SHF_ALLOC output
2289
// sections.
2290
 
2291
// 5) Create the symbol table sections and the section name table
2292
// section.
2293
 
2294
// 6) Finalize the symbol table: set symbol values to their final
2295
// value and make a final determination of which symbols are going
2296
// into the output symbol table.
2297
 
2298
// 7) Create the section table header.
2299
 
2300
// 8) Determine the final file offset of all the output sections which
2301
// are not SHF_ALLOC, including the section table header.
2302
 
2303
// 9) Finalize the ELF file header.
2304
 
2305
// This function returns the size of the output file.
2306
 
2307
off_t
2308
Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab,
2309
                 Target* target, const Task* task)
2310
{
2311
  target->finalize_sections(this, input_objects, symtab);
2312
 
2313
  this->count_local_symbols(task, input_objects);
2314
 
2315
  this->link_stabs_sections();
2316
 
2317
  Output_segment* phdr_seg = NULL;
2318
  if (!parameters->options().relocatable() && !parameters->doing_static_link())
2319
    {
2320
      // There was a dynamic object in the link.  We need to create
2321
      // some information for the dynamic linker.
2322
 
2323
      // Create the PT_PHDR segment which will hold the program
2324
      // headers.
2325
      if (!this->script_options_->saw_phdrs_clause())
2326
        phdr_seg = this->make_output_segment(elfcpp::PT_PHDR, elfcpp::PF_R);
2327
 
2328
      // Create the dynamic symbol table, including the hash table.
2329
      Output_section* dynstr;
2330
      std::vector<Symbol*> dynamic_symbols;
2331
      unsigned int local_dynamic_count;
2332
      Versions versions(*this->script_options()->version_script_info(),
2333
                        &this->dynpool_);
2334
      this->create_dynamic_symtab(input_objects, symtab, &dynstr,
2335
                                  &local_dynamic_count, &dynamic_symbols,
2336
                                  &versions);
2337
 
2338
      // Create the .interp section to hold the name of the
2339 159 khays
      // interpreter, and put it in a PT_INTERP segment.  Don't do it
2340
      // if we saw a .interp section in an input file.
2341
      if ((!parameters->options().shared()
2342
           || parameters->options().dynamic_linker() != NULL)
2343
          && this->interp_segment_ == NULL)
2344 27 khays
        this->create_interp(target);
2345
 
2346
      // Finish the .dynamic section to hold the dynamic data, and put
2347
      // it in a PT_DYNAMIC segment.
2348
      this->finish_dynamic_section(input_objects, symtab);
2349
 
2350
      // We should have added everything we need to the dynamic string
2351
      // table.
2352
      this->dynpool_.set_string_offsets();
2353
 
2354
      // Create the version sections.  We can't do this until the
2355
      // dynamic string table is complete.
2356
      this->create_version_sections(&versions, symtab, local_dynamic_count,
2357
                                    dynamic_symbols, dynstr);
2358
 
2359
      // Set the size of the _DYNAMIC symbol.  We can't do this until
2360
      // after we call create_version_sections.
2361
      this->set_dynamic_symbol_size(symtab);
2362
    }
2363
 
2364
  // Create segment headers.
2365
  Output_segment_headers* segment_headers =
2366
    (parameters->options().relocatable()
2367
     ? NULL
2368
     : new Output_segment_headers(this->segment_list_));
2369
 
2370
  // Lay out the file header.
2371
  Output_file_header* file_header = new Output_file_header(target, symtab,
2372
                                                           segment_headers);
2373
 
2374
  this->special_output_list_.push_back(file_header);
2375
  if (segment_headers != NULL)
2376
    this->special_output_list_.push_back(segment_headers);
2377
 
2378
  // Find approriate places for orphan output sections if we are using
2379
  // a linker script.
2380
  if (this->script_options_->saw_sections_clause())
2381
    this->place_orphan_sections_in_script();
2382
 
2383
  Output_segment* load_seg;
2384
  off_t off;
2385
  unsigned int shndx;
2386
  int pass = 0;
2387
 
2388
  // Take a snapshot of the section layout as needed.
2389
  if (target->may_relax())
2390
    this->prepare_for_relaxation();
2391
 
2392
  // Run the relaxation loop to lay out sections.
2393
  do
2394
    {
2395
      off = this->relaxation_loop_body(pass, target, symtab, &load_seg,
2396
                                       phdr_seg, segment_headers, file_header,
2397
                                       &shndx);
2398
      pass++;
2399
    }
2400
  while (target->may_relax()
2401
         && target->relax(pass, input_objects, symtab, this, task));
2402
 
2403
  // Set the file offsets of all the non-data sections we've seen so
2404
  // far which don't have to wait for the input sections.  We need
2405
  // this in order to finalize local symbols in non-allocated
2406
  // sections.
2407
  off = this->set_section_offsets(off, BEFORE_INPUT_SECTIONS_PASS);
2408
 
2409
  // Set the section indexes of all unallocated sections seen so far,
2410
  // in case any of them are somehow referenced by a symbol.
2411
  shndx = this->set_section_indexes(shndx);
2412
 
2413
  // Create the symbol table sections.
2414
  this->create_symtab_sections(input_objects, symtab, shndx, &off);
2415
  if (!parameters->doing_static_link())
2416
    this->assign_local_dynsym_offsets(input_objects);
2417
 
2418
  // Process any symbol assignments from a linker script.  This must
2419
  // be called after the symbol table has been finalized.
2420
  this->script_options_->finalize_symbols(symtab, this);
2421
 
2422
  // Create the incremental inputs sections.
2423
  if (this->incremental_inputs_)
2424
    {
2425
      this->incremental_inputs_->finalize();
2426
      this->create_incremental_info_sections(symtab);
2427
    }
2428
 
2429
  // Create the .shstrtab section.
2430
  Output_section* shstrtab_section = this->create_shstrtab();
2431
 
2432
  // Set the file offsets of the rest of the non-data sections which
2433
  // don't have to wait for the input sections.
2434
  off = this->set_section_offsets(off, BEFORE_INPUT_SECTIONS_PASS);
2435
 
2436
  // Now that all sections have been created, set the section indexes
2437
  // for any sections which haven't been done yet.
2438
  shndx = this->set_section_indexes(shndx);
2439
 
2440
  // Create the section table header.
2441
  this->create_shdrs(shstrtab_section, &off);
2442
 
2443
  // If there are no sections which require postprocessing, we can
2444
  // handle the section names now, and avoid a resize later.
2445
  if (!this->any_postprocessing_sections_)
2446
    {
2447
      off = this->set_section_offsets(off,
2448
                                      POSTPROCESSING_SECTIONS_PASS);
2449
      off =
2450
          this->set_section_offsets(off,
2451
                                    STRTAB_AFTER_POSTPROCESSING_SECTIONS_PASS);
2452
    }
2453
 
2454
  file_header->set_section_info(this->section_headers_, shstrtab_section);
2455
 
2456
  // Now we know exactly where everything goes in the output file
2457
  // (except for non-allocated sections which require postprocessing).
2458
  Output_data::layout_complete();
2459
 
2460
  this->output_file_size_ = off;
2461
 
2462
  return off;
2463
}
2464
 
2465
// Create a note header following the format defined in the ELF ABI.
2466
// NAME is the name, NOTE_TYPE is the type, SECTION_NAME is the name
2467
// of the section to create, DESCSZ is the size of the descriptor.
2468
// ALLOCATE is true if the section should be allocated in memory.
2469
// This returns the new note section.  It sets *TRAILING_PADDING to
2470
// the number of trailing zero bytes required.
2471
 
2472
Output_section*
2473
Layout::create_note(const char* name, int note_type,
2474
                    const char* section_name, size_t descsz,
2475
                    bool allocate, size_t* trailing_padding)
2476
{
2477
  // Authorities all agree that the values in a .note field should
2478
  // be aligned on 4-byte boundaries for 32-bit binaries.  However,
2479
  // they differ on what the alignment is for 64-bit binaries.
2480
  // The GABI says unambiguously they take 8-byte alignment:
2481
  //    http://sco.com/developers/gabi/latest/ch5.pheader.html#note_section
2482
  // Other documentation says alignment should always be 4 bytes:
2483
  //    http://www.netbsd.org/docs/kernel/elf-notes.html#note-format
2484
  // GNU ld and GNU readelf both support the latter (at least as of
2485
  // version 2.16.91), and glibc always generates the latter for
2486
  // .note.ABI-tag (as of version 1.6), so that's the one we go with
2487
  // here.
2488
#ifdef GABI_FORMAT_FOR_DOTNOTE_SECTION   // This is not defined by default.
2489
  const int size = parameters->target().get_size();
2490
#else
2491
  const int size = 32;
2492
#endif
2493
 
2494
  // The contents of the .note section.
2495
  size_t namesz = strlen(name) + 1;
2496
  size_t aligned_namesz = align_address(namesz, size / 8);
2497
  size_t aligned_descsz = align_address(descsz, size / 8);
2498
 
2499
  size_t notehdrsz = 3 * (size / 8) + aligned_namesz;
2500
 
2501
  unsigned char* buffer = new unsigned char[notehdrsz];
2502
  memset(buffer, 0, notehdrsz);
2503
 
2504
  bool is_big_endian = parameters->target().is_big_endian();
2505
 
2506
  if (size == 32)
2507
    {
2508
      if (!is_big_endian)
2509
        {
2510
          elfcpp::Swap<32, false>::writeval(buffer, namesz);
2511
          elfcpp::Swap<32, false>::writeval(buffer + 4, descsz);
2512
          elfcpp::Swap<32, false>::writeval(buffer + 8, note_type);
2513
        }
2514
      else
2515
        {
2516
          elfcpp::Swap<32, true>::writeval(buffer, namesz);
2517
          elfcpp::Swap<32, true>::writeval(buffer + 4, descsz);
2518
          elfcpp::Swap<32, true>::writeval(buffer + 8, note_type);
2519
        }
2520
    }
2521
  else if (size == 64)
2522
    {
2523
      if (!is_big_endian)
2524
        {
2525
          elfcpp::Swap<64, false>::writeval(buffer, namesz);
2526
          elfcpp::Swap<64, false>::writeval(buffer + 8, descsz);
2527
          elfcpp::Swap<64, false>::writeval(buffer + 16, note_type);
2528
        }
2529
      else
2530
        {
2531
          elfcpp::Swap<64, true>::writeval(buffer, namesz);
2532
          elfcpp::Swap<64, true>::writeval(buffer + 8, descsz);
2533
          elfcpp::Swap<64, true>::writeval(buffer + 16, note_type);
2534
        }
2535
    }
2536
  else
2537
    gold_unreachable();
2538
 
2539
  memcpy(buffer + 3 * (size / 8), name, namesz);
2540
 
2541
  elfcpp::Elf_Xword flags = 0;
2542
  Output_section_order order = ORDER_INVALID;
2543
  if (allocate)
2544
    {
2545
      flags = elfcpp::SHF_ALLOC;
2546
      order = ORDER_RO_NOTE;
2547
    }
2548
  Output_section* os = this->choose_output_section(NULL, section_name,
2549
                                                   elfcpp::SHT_NOTE,
2550
                                                   flags, false, order, false);
2551
  if (os == NULL)
2552
    return NULL;
2553
 
2554
  Output_section_data* posd = new Output_data_const_buffer(buffer, notehdrsz,
2555
                                                           size / 8,
2556
                                                           "** note header");
2557
  os->add_output_section_data(posd);
2558
 
2559
  *trailing_padding = aligned_descsz - descsz;
2560
 
2561
  return os;
2562
}
2563
 
2564
// For an executable or shared library, create a note to record the
2565
// version of gold used to create the binary.
2566
 
2567
void
2568
Layout::create_gold_note()
2569
{
2570
  if (parameters->options().relocatable()
2571
      || parameters->incremental_update())
2572
    return;
2573
 
2574
  std::string desc = std::string("gold ") + gold::get_version_string();
2575
 
2576
  size_t trailing_padding;
2577
  Output_section* os = this->create_note("GNU", elfcpp::NT_GNU_GOLD_VERSION,
2578
                                         ".note.gnu.gold-version", desc.size(),
2579
                                         false, &trailing_padding);
2580
  if (os == NULL)
2581
    return;
2582
 
2583
  Output_section_data* posd = new Output_data_const(desc, 4);
2584
  os->add_output_section_data(posd);
2585
 
2586
  if (trailing_padding > 0)
2587
    {
2588
      posd = new Output_data_zero_fill(trailing_padding, 0);
2589
      os->add_output_section_data(posd);
2590
    }
2591
}
2592
 
2593
// Record whether the stack should be executable.  This can be set
2594
// from the command line using the -z execstack or -z noexecstack
2595
// options.  Otherwise, if any input file has a .note.GNU-stack
2596
// section with the SHF_EXECINSTR flag set, the stack should be
2597
// executable.  Otherwise, if at least one input file a
2598
// .note.GNU-stack section, and some input file has no .note.GNU-stack
2599
// section, we use the target default for whether the stack should be
2600
// executable.  Otherwise, we don't generate a stack note.  When
2601
// generating a object file, we create a .note.GNU-stack section with
2602
// the appropriate marking.  When generating an executable or shared
2603
// library, we create a PT_GNU_STACK segment.
2604
 
2605
void
2606
Layout::create_executable_stack_info()
2607
{
2608
  bool is_stack_executable;
2609
  if (parameters->options().is_execstack_set())
2610
    is_stack_executable = parameters->options().is_stack_executable();
2611
  else if (!this->input_with_gnu_stack_note_)
2612
    return;
2613
  else
2614
    {
2615
      if (this->input_requires_executable_stack_)
2616
        is_stack_executable = true;
2617
      else if (this->input_without_gnu_stack_note_)
2618
        is_stack_executable =
2619
          parameters->target().is_default_stack_executable();
2620
      else
2621
        is_stack_executable = false;
2622
    }
2623
 
2624
  if (parameters->options().relocatable())
2625
    {
2626
      const char* name = this->namepool_.add(".note.GNU-stack", false, NULL);
2627
      elfcpp::Elf_Xword flags = 0;
2628
      if (is_stack_executable)
2629
        flags |= elfcpp::SHF_EXECINSTR;
2630
      this->make_output_section(name, elfcpp::SHT_PROGBITS, flags,
2631
                                ORDER_INVALID, false);
2632
    }
2633
  else
2634
    {
2635
      if (this->script_options_->saw_phdrs_clause())
2636
        return;
2637
      int flags = elfcpp::PF_R | elfcpp::PF_W;
2638
      if (is_stack_executable)
2639
        flags |= elfcpp::PF_X;
2640
      this->make_output_segment(elfcpp::PT_GNU_STACK, flags);
2641
    }
2642
}
2643
 
2644
// If --build-id was used, set up the build ID note.
2645
 
2646
void
2647
Layout::create_build_id()
2648
{
2649
  if (!parameters->options().user_set_build_id())
2650
    return;
2651
 
2652
  const char* style = parameters->options().build_id();
2653
  if (strcmp(style, "none") == 0)
2654
    return;
2655
 
2656
  // Set DESCSZ to the size of the note descriptor.  When possible,
2657
  // set DESC to the note descriptor contents.
2658
  size_t descsz;
2659
  std::string desc;
2660
  if (strcmp(style, "md5") == 0)
2661
    descsz = 128 / 8;
2662
  else if (strcmp(style, "sha1") == 0)
2663
    descsz = 160 / 8;
2664
  else if (strcmp(style, "uuid") == 0)
2665
    {
2666
      const size_t uuidsz = 128 / 8;
2667
 
2668
      char buffer[uuidsz];
2669
      memset(buffer, 0, uuidsz);
2670
 
2671
      int descriptor = open_descriptor(-1, "/dev/urandom", O_RDONLY);
2672
      if (descriptor < 0)
2673
        gold_error(_("--build-id=uuid failed: could not open /dev/urandom: %s"),
2674
                   strerror(errno));
2675
      else
2676
        {
2677
          ssize_t got = ::read(descriptor, buffer, uuidsz);
2678
          release_descriptor(descriptor, true);
2679
          if (got < 0)
2680
            gold_error(_("/dev/urandom: read failed: %s"), strerror(errno));
2681
          else if (static_cast<size_t>(got) != uuidsz)
2682
            gold_error(_("/dev/urandom: expected %zu bytes, got %zd bytes"),
2683
                       uuidsz, got);
2684
        }
2685
 
2686
      desc.assign(buffer, uuidsz);
2687
      descsz = uuidsz;
2688
    }
2689
  else if (strncmp(style, "0x", 2) == 0)
2690
    {
2691
      hex_init();
2692
      const char* p = style + 2;
2693
      while (*p != '\0')
2694
        {
2695
          if (hex_p(p[0]) && hex_p(p[1]))
2696
            {
2697
              char c = (hex_value(p[0]) << 4) | hex_value(p[1]);
2698
              desc += c;
2699
              p += 2;
2700
            }
2701
          else if (*p == '-' || *p == ':')
2702
            ++p;
2703
          else
2704
            gold_fatal(_("--build-id argument '%s' not a valid hex number"),
2705
                       style);
2706
        }
2707
      descsz = desc.size();
2708
    }
2709
  else
2710
    gold_fatal(_("unrecognized --build-id argument '%s'"), style);
2711
 
2712
  // Create the note.
2713
  size_t trailing_padding;
2714
  Output_section* os = this->create_note("GNU", elfcpp::NT_GNU_BUILD_ID,
2715
                                         ".note.gnu.build-id", descsz, true,
2716
                                         &trailing_padding);
2717
  if (os == NULL)
2718
    return;
2719
 
2720
  if (!desc.empty())
2721
    {
2722
      // We know the value already, so we fill it in now.
2723
      gold_assert(desc.size() == descsz);
2724
 
2725
      Output_section_data* posd = new Output_data_const(desc, 4);
2726
      os->add_output_section_data(posd);
2727
 
2728
      if (trailing_padding != 0)
2729
        {
2730
          posd = new Output_data_zero_fill(trailing_padding, 0);
2731
          os->add_output_section_data(posd);
2732
        }
2733
    }
2734
  else
2735
    {
2736
      // We need to compute a checksum after we have completed the
2737
      // link.
2738
      gold_assert(trailing_padding == 0);
2739
      this->build_id_note_ = new Output_data_zero_fill(descsz, 4);
2740
      os->add_output_section_data(this->build_id_note_);
2741
    }
2742
}
2743
 
2744
// If we have both .stabXX and .stabXXstr sections, then the sh_link
2745
// field of the former should point to the latter.  I'm not sure who
2746
// started this, but the GNU linker does it, and some tools depend
2747
// upon it.
2748
 
2749
void
2750
Layout::link_stabs_sections()
2751
{
2752
  if (!this->have_stabstr_section_)
2753
    return;
2754
 
2755
  for (Section_list::iterator p = this->section_list_.begin();
2756
       p != this->section_list_.end();
2757
       ++p)
2758
    {
2759
      if ((*p)->type() != elfcpp::SHT_STRTAB)
2760
        continue;
2761
 
2762
      const char* name = (*p)->name();
2763
      if (strncmp(name, ".stab", 5) != 0)
2764
        continue;
2765
 
2766
      size_t len = strlen(name);
2767
      if (strcmp(name + len - 3, "str") != 0)
2768
        continue;
2769
 
2770
      std::string stab_name(name, len - 3);
2771
      Output_section* stab_sec;
2772
      stab_sec = this->find_output_section(stab_name.c_str());
2773
      if (stab_sec != NULL)
2774
        stab_sec->set_link_section(*p);
2775
    }
2776
}
2777
 
2778
// Create .gnu_incremental_inputs and related sections needed
2779
// for the next run of incremental linking to check what has changed.
2780
 
2781
void
2782
Layout::create_incremental_info_sections(Symbol_table* symtab)
2783
{
2784
  Incremental_inputs* incr = this->incremental_inputs_;
2785
 
2786
  gold_assert(incr != NULL);
2787
 
2788
  // Create the .gnu_incremental_inputs, _symtab, and _relocs input sections.
2789
  incr->create_data_sections(symtab);
2790
 
2791
  // Add the .gnu_incremental_inputs section.
2792
  const char* incremental_inputs_name =
2793
    this->namepool_.add(".gnu_incremental_inputs", false, NULL);
2794
  Output_section* incremental_inputs_os =
2795
    this->make_output_section(incremental_inputs_name,
2796
                              elfcpp::SHT_GNU_INCREMENTAL_INPUTS, 0,
2797
                              ORDER_INVALID, false);
2798
  incremental_inputs_os->add_output_section_data(incr->inputs_section());
2799
 
2800
  // Add the .gnu_incremental_symtab section.
2801
  const char* incremental_symtab_name =
2802
    this->namepool_.add(".gnu_incremental_symtab", false, NULL);
2803
  Output_section* incremental_symtab_os =
2804
    this->make_output_section(incremental_symtab_name,
2805
                              elfcpp::SHT_GNU_INCREMENTAL_SYMTAB, 0,
2806
                              ORDER_INVALID, false);
2807
  incremental_symtab_os->add_output_section_data(incr->symtab_section());
2808
  incremental_symtab_os->set_entsize(4);
2809
 
2810
  // Add the .gnu_incremental_relocs section.
2811
  const char* incremental_relocs_name =
2812
    this->namepool_.add(".gnu_incremental_relocs", false, NULL);
2813
  Output_section* incremental_relocs_os =
2814
    this->make_output_section(incremental_relocs_name,
2815
                              elfcpp::SHT_GNU_INCREMENTAL_RELOCS, 0,
2816
                              ORDER_INVALID, false);
2817
  incremental_relocs_os->add_output_section_data(incr->relocs_section());
2818
  incremental_relocs_os->set_entsize(incr->relocs_entsize());
2819
 
2820
  // Add the .gnu_incremental_got_plt section.
2821
  const char* incremental_got_plt_name =
2822
    this->namepool_.add(".gnu_incremental_got_plt", false, NULL);
2823
  Output_section* incremental_got_plt_os =
2824
    this->make_output_section(incremental_got_plt_name,
2825
                              elfcpp::SHT_GNU_INCREMENTAL_GOT_PLT, 0,
2826
                              ORDER_INVALID, false);
2827
  incremental_got_plt_os->add_output_section_data(incr->got_plt_section());
2828
 
2829
  // Add the .gnu_incremental_strtab section.
2830
  const char* incremental_strtab_name =
2831
    this->namepool_.add(".gnu_incremental_strtab", false, NULL);
2832
  Output_section* incremental_strtab_os = this->make_output_section(incremental_strtab_name,
2833
                                                        elfcpp::SHT_STRTAB, 0,
2834
                                                        ORDER_INVALID, false);
2835
  Output_data_strtab* strtab_data =
2836
      new Output_data_strtab(incr->get_stringpool());
2837
  incremental_strtab_os->add_output_section_data(strtab_data);
2838
 
2839
  incremental_inputs_os->set_after_input_sections();
2840
  incremental_symtab_os->set_after_input_sections();
2841
  incremental_relocs_os->set_after_input_sections();
2842
  incremental_got_plt_os->set_after_input_sections();
2843
 
2844
  incremental_inputs_os->set_link_section(incremental_strtab_os);
2845
  incremental_symtab_os->set_link_section(incremental_inputs_os);
2846
  incremental_relocs_os->set_link_section(incremental_inputs_os);
2847
  incremental_got_plt_os->set_link_section(incremental_inputs_os);
2848
}
2849
 
2850
// Return whether SEG1 should be before SEG2 in the output file.  This
2851
// is based entirely on the segment type and flags.  When this is
2852 159 khays
// called the segment addresses have normally not yet been set.
2853 27 khays
 
2854
bool
2855
Layout::segment_precedes(const Output_segment* seg1,
2856
                         const Output_segment* seg2)
2857
{
2858
  elfcpp::Elf_Word type1 = seg1->type();
2859
  elfcpp::Elf_Word type2 = seg2->type();
2860
 
2861
  // The single PT_PHDR segment is required to precede any loadable
2862
  // segment.  We simply make it always first.
2863
  if (type1 == elfcpp::PT_PHDR)
2864
    {
2865
      gold_assert(type2 != elfcpp::PT_PHDR);
2866
      return true;
2867
    }
2868
  if (type2 == elfcpp::PT_PHDR)
2869
    return false;
2870
 
2871
  // The single PT_INTERP segment is required to precede any loadable
2872
  // segment.  We simply make it always second.
2873
  if (type1 == elfcpp::PT_INTERP)
2874
    {
2875
      gold_assert(type2 != elfcpp::PT_INTERP);
2876
      return true;
2877
    }
2878
  if (type2 == elfcpp::PT_INTERP)
2879
    return false;
2880
 
2881
  // We then put PT_LOAD segments before any other segments.
2882
  if (type1 == elfcpp::PT_LOAD && type2 != elfcpp::PT_LOAD)
2883
    return true;
2884
  if (type2 == elfcpp::PT_LOAD && type1 != elfcpp::PT_LOAD)
2885
    return false;
2886
 
2887
  // We put the PT_TLS segment last except for the PT_GNU_RELRO
2888
  // segment, because that is where the dynamic linker expects to find
2889
  // it (this is just for efficiency; other positions would also work
2890
  // correctly).
2891
  if (type1 == elfcpp::PT_TLS
2892
      && type2 != elfcpp::PT_TLS
2893
      && type2 != elfcpp::PT_GNU_RELRO)
2894
    return false;
2895
  if (type2 == elfcpp::PT_TLS
2896
      && type1 != elfcpp::PT_TLS
2897
      && type1 != elfcpp::PT_GNU_RELRO)
2898
    return true;
2899
 
2900
  // We put the PT_GNU_RELRO segment last, because that is where the
2901
  // dynamic linker expects to find it (as with PT_TLS, this is just
2902
  // for efficiency).
2903
  if (type1 == elfcpp::PT_GNU_RELRO && type2 != elfcpp::PT_GNU_RELRO)
2904
    return false;
2905
  if (type2 == elfcpp::PT_GNU_RELRO && type1 != elfcpp::PT_GNU_RELRO)
2906
    return true;
2907
 
2908
  const elfcpp::Elf_Word flags1 = seg1->flags();
2909
  const elfcpp::Elf_Word flags2 = seg2->flags();
2910
 
2911
  // The order of non-PT_LOAD segments is unimportant.  We simply sort
2912
  // by the numeric segment type and flags values.  There should not
2913
  // be more than one segment with the same type and flags.
2914
  if (type1 != elfcpp::PT_LOAD)
2915
    {
2916
      if (type1 != type2)
2917
        return type1 < type2;
2918
      gold_assert(flags1 != flags2);
2919
      return flags1 < flags2;
2920
    }
2921
 
2922
  // If the addresses are set already, sort by load address.
2923
  if (seg1->are_addresses_set())
2924
    {
2925
      if (!seg2->are_addresses_set())
2926
        return true;
2927
 
2928
      unsigned int section_count1 = seg1->output_section_count();
2929
      unsigned int section_count2 = seg2->output_section_count();
2930
      if (section_count1 == 0 && section_count2 > 0)
2931
        return true;
2932
      if (section_count1 > 0 && section_count2 == 0)
2933
        return false;
2934
 
2935
      uint64_t paddr1 = (seg1->are_addresses_set()
2936
                         ? seg1->paddr()
2937
                         : seg1->first_section_load_address());
2938
      uint64_t paddr2 = (seg2->are_addresses_set()
2939
                         ? seg2->paddr()
2940
                         : seg2->first_section_load_address());
2941
 
2942
      if (paddr1 != paddr2)
2943
        return paddr1 < paddr2;
2944
    }
2945
  else if (seg2->are_addresses_set())
2946
    return false;
2947
 
2948
  // A segment which holds large data comes after a segment which does
2949
  // not hold large data.
2950
  if (seg1->is_large_data_segment())
2951
    {
2952
      if (!seg2->is_large_data_segment())
2953
        return false;
2954
    }
2955
  else if (seg2->is_large_data_segment())
2956
    return true;
2957
 
2958
  // Otherwise, we sort PT_LOAD segments based on the flags.  Readonly
2959
  // segments come before writable segments.  Then writable segments
2960
  // with data come before writable segments without data.  Then
2961
  // executable segments come before non-executable segments.  Then
2962
  // the unlikely case of a non-readable segment comes before the
2963
  // normal case of a readable segment.  If there are multiple
2964
  // segments with the same type and flags, we require that the
2965
  // address be set, and we sort by virtual address and then physical
2966
  // address.
2967
  if ((flags1 & elfcpp::PF_W) != (flags2 & elfcpp::PF_W))
2968
    return (flags1 & elfcpp::PF_W) == 0;
2969
  if ((flags1 & elfcpp::PF_W) != 0
2970
      && seg1->has_any_data_sections() != seg2->has_any_data_sections())
2971
    return seg1->has_any_data_sections();
2972
  if ((flags1 & elfcpp::PF_X) != (flags2 & elfcpp::PF_X))
2973
    return (flags1 & elfcpp::PF_X) != 0;
2974
  if ((flags1 & elfcpp::PF_R) != (flags2 & elfcpp::PF_R))
2975
    return (flags1 & elfcpp::PF_R) == 0;
2976
 
2977
  // We shouldn't get here--we shouldn't create segments which we
2978 159 khays
  // can't distinguish.  Unless of course we are using a weird linker
2979 163 khays
  // script or overlapping --section-start options.
2980
  gold_assert(this->script_options_->saw_phdrs_clause()
2981
              || parameters->options().any_section_start());
2982 159 khays
  return false;
2983 27 khays
}
2984
 
2985
// Increase OFF so that it is congruent to ADDR modulo ABI_PAGESIZE.
2986
 
2987
static off_t
2988
align_file_offset(off_t off, uint64_t addr, uint64_t abi_pagesize)
2989
{
2990
  uint64_t unsigned_off = off;
2991
  uint64_t aligned_off = ((unsigned_off & ~(abi_pagesize - 1))
2992
                          | (addr & (abi_pagesize - 1)));
2993
  if (aligned_off < unsigned_off)
2994
    aligned_off += abi_pagesize;
2995
  return aligned_off;
2996
}
2997
 
2998
// Set the file offsets of all the segments, and all the sections they
2999
// contain.  They have all been created.  LOAD_SEG must be be laid out
3000
// first.  Return the offset of the data to follow.
3001
 
3002
off_t
3003
Layout::set_segment_offsets(const Target* target, Output_segment* load_seg,
3004
                            unsigned int* pshndx)
3005
{
3006 159 khays
  // Sort them into the final order.  We use a stable sort so that we
3007
  // don't randomize the order of indistinguishable segments created
3008
  // by linker scripts.
3009
  std::stable_sort(this->segment_list_.begin(), this->segment_list_.end(),
3010
                   Layout::Compare_segments(this));
3011 27 khays
 
3012
  // Find the PT_LOAD segments, and set their addresses and offsets
3013
  // and their section's addresses and offsets.
3014
  uint64_t addr;
3015
  if (parameters->options().user_set_Ttext())
3016
    addr = parameters->options().Ttext();
3017
  else if (parameters->options().output_is_position_independent())
3018
    addr = 0;
3019
  else
3020
    addr = target->default_text_segment_address();
3021
  off_t off = 0;
3022
 
3023
  // If LOAD_SEG is NULL, then the file header and segment headers
3024
  // will not be loadable.  But they still need to be at offset 0 in
3025
  // the file.  Set their offsets now.
3026
  if (load_seg == NULL)
3027
    {
3028
      for (Data_list::iterator p = this->special_output_list_.begin();
3029
           p != this->special_output_list_.end();
3030
           ++p)
3031
        {
3032
          off = align_address(off, (*p)->addralign());
3033
          (*p)->set_address_and_file_offset(0, off);
3034
          off += (*p)->data_size();
3035
        }
3036
    }
3037
 
3038
  unsigned int increase_relro = this->increase_relro_;
3039
  if (this->script_options_->saw_sections_clause())
3040
    increase_relro = 0;
3041
 
3042
  const bool check_sections = parameters->options().check_sections();
3043
  Output_segment* last_load_segment = NULL;
3044
 
3045
  for (Segment_list::iterator p = this->segment_list_.begin();
3046
       p != this->segment_list_.end();
3047
       ++p)
3048
    {
3049
      if ((*p)->type() == elfcpp::PT_LOAD)
3050
        {
3051
          if (load_seg != NULL && load_seg != *p)
3052
            gold_unreachable();
3053
          load_seg = NULL;
3054
 
3055
          bool are_addresses_set = (*p)->are_addresses_set();
3056
          if (are_addresses_set)
3057
            {
3058
              // When it comes to setting file offsets, we care about
3059
              // the physical address.
3060
              addr = (*p)->paddr();
3061
            }
3062 159 khays
          else if (parameters->options().user_set_Ttext()
3063
                   && ((*p)->flags() & elfcpp::PF_W) == 0)
3064
            {
3065
              are_addresses_set = true;
3066
            }
3067 27 khays
          else if (parameters->options().user_set_Tdata()
3068
                   && ((*p)->flags() & elfcpp::PF_W) != 0
3069
                   && (!parameters->options().user_set_Tbss()
3070
                       || (*p)->has_any_data_sections()))
3071
            {
3072
              addr = parameters->options().Tdata();
3073
              are_addresses_set = true;
3074
            }
3075
          else if (parameters->options().user_set_Tbss()
3076
                   && ((*p)->flags() & elfcpp::PF_W) != 0
3077
                   && !(*p)->has_any_data_sections())
3078
            {
3079
              addr = parameters->options().Tbss();
3080
              are_addresses_set = true;
3081
            }
3082
 
3083
          uint64_t orig_addr = addr;
3084
          uint64_t orig_off = off;
3085
 
3086
          uint64_t aligned_addr = 0;
3087
          uint64_t abi_pagesize = target->abi_pagesize();
3088
          uint64_t common_pagesize = target->common_pagesize();
3089
 
3090
          if (!parameters->options().nmagic()
3091
              && !parameters->options().omagic())
3092
            (*p)->set_minimum_p_align(common_pagesize);
3093
 
3094
          if (!are_addresses_set)
3095
            {
3096
              // Skip the address forward one page, maintaining the same
3097
              // position within the page.  This lets us store both segments
3098
              // overlapping on a single page in the file, but the loader will
3099
              // put them on different pages in memory. We will revisit this
3100
              // decision once we know the size of the segment.
3101
 
3102
              addr = align_address(addr, (*p)->maximum_alignment());
3103
              aligned_addr = addr;
3104
 
3105
              if ((addr & (abi_pagesize - 1)) != 0)
3106
                addr = addr + abi_pagesize;
3107
 
3108
              off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
3109
            }
3110
 
3111
          if (!parameters->options().nmagic()
3112
              && !parameters->options().omagic())
3113
            off = align_file_offset(off, addr, abi_pagesize);
3114
          else if (load_seg == NULL)
3115
            {
3116
              // This is -N or -n with a section script which prevents
3117
              // us from using a load segment.  We need to ensure that
3118
              // the file offset is aligned to the alignment of the
3119
              // segment.  This is because the linker script
3120
              // implicitly assumed a zero offset.  If we don't align
3121
              // here, then the alignment of the sections in the
3122
              // linker script may not match the alignment of the
3123
              // sections in the set_section_addresses call below,
3124
              // causing an error about dot moving backward.
3125
              off = align_address(off, (*p)->maximum_alignment());
3126
            }
3127
 
3128
          unsigned int shndx_hold = *pshndx;
3129
          bool has_relro = false;
3130
          uint64_t new_addr = (*p)->set_section_addresses(this, false, addr,
3131
                                                          &increase_relro,
3132
                                                          &has_relro,
3133
                                                          &off, pshndx);
3134
 
3135
          // Now that we know the size of this segment, we may be able
3136
          // to save a page in memory, at the cost of wasting some
3137
          // file space, by instead aligning to the start of a new
3138
          // page.  Here we use the real machine page size rather than
3139
          // the ABI mandated page size.  If the segment has been
3140
          // aligned so that the relro data ends at a page boundary,
3141
          // we do not try to realign it.
3142
 
3143
          if (!are_addresses_set
3144
              && !has_relro
3145
              && aligned_addr != addr
3146 148 khays
              && !parameters->incremental())
3147 27 khays
            {
3148
              uint64_t first_off = (common_pagesize
3149
                                    - (aligned_addr
3150
                                       & (common_pagesize - 1)));
3151
              uint64_t last_off = new_addr & (common_pagesize - 1);
3152
              if (first_off > 0
3153
                  && last_off > 0
3154
                  && ((aligned_addr & ~ (common_pagesize - 1))
3155
                      != (new_addr & ~ (common_pagesize - 1)))
3156
                  && first_off + last_off <= common_pagesize)
3157
                {
3158
                  *pshndx = shndx_hold;
3159
                  addr = align_address(aligned_addr, common_pagesize);
3160
                  addr = align_address(addr, (*p)->maximum_alignment());
3161
                  off = orig_off + ((addr - orig_addr) & (abi_pagesize - 1));
3162
                  off = align_file_offset(off, addr, abi_pagesize);
3163
 
3164
                  increase_relro = this->increase_relro_;
3165
                  if (this->script_options_->saw_sections_clause())
3166
                    increase_relro = 0;
3167
                  has_relro = false;
3168
 
3169
                  new_addr = (*p)->set_section_addresses(this, true, addr,
3170
                                                         &increase_relro,
3171
                                                         &has_relro,
3172
                                                         &off, pshndx);
3173
                }
3174
            }
3175
 
3176
          addr = new_addr;
3177
 
3178
          // Implement --check-sections.  We know that the segments
3179
          // are sorted by LMA.
3180
          if (check_sections && last_load_segment != NULL)
3181
            {
3182
              gold_assert(last_load_segment->paddr() <= (*p)->paddr());
3183
              if (last_load_segment->paddr() + last_load_segment->memsz()
3184
                  > (*p)->paddr())
3185
                {
3186
                  unsigned long long lb1 = last_load_segment->paddr();
3187
                  unsigned long long le1 = lb1 + last_load_segment->memsz();
3188
                  unsigned long long lb2 = (*p)->paddr();
3189
                  unsigned long long le2 = lb2 + (*p)->memsz();
3190
                  gold_error(_("load segment overlap [0x%llx -> 0x%llx] and "
3191
                               "[0x%llx -> 0x%llx]"),
3192
                             lb1, le1, lb2, le2);
3193
                }
3194
            }
3195
          last_load_segment = *p;
3196
        }
3197
    }
3198
 
3199
  // Handle the non-PT_LOAD segments, setting their offsets from their
3200
  // section's offsets.
3201
  for (Segment_list::iterator p = this->segment_list_.begin();
3202
       p != this->segment_list_.end();
3203
       ++p)
3204
    {
3205
      if ((*p)->type() != elfcpp::PT_LOAD)
3206
        (*p)->set_offset((*p)->type() == elfcpp::PT_GNU_RELRO
3207
                         ? increase_relro
3208
                         : 0);
3209
    }
3210
 
3211
  // Set the TLS offsets for each section in the PT_TLS segment.
3212
  if (this->tls_segment_ != NULL)
3213
    this->tls_segment_->set_tls_offsets();
3214
 
3215
  return off;
3216
}
3217
 
3218
// Set the offsets of all the allocated sections when doing a
3219
// relocatable link.  This does the same jobs as set_segment_offsets,
3220
// only for a relocatable link.
3221
 
3222
off_t
3223
Layout::set_relocatable_section_offsets(Output_data* file_header,
3224
                                        unsigned int* pshndx)
3225
{
3226
  off_t off = 0;
3227
 
3228
  file_header->set_address_and_file_offset(0, 0);
3229
  off += file_header->data_size();
3230
 
3231
  for (Section_list::iterator p = this->section_list_.begin();
3232
       p != this->section_list_.end();
3233
       ++p)
3234
    {
3235
      // We skip unallocated sections here, except that group sections
3236
      // have to come first.
3237
      if (((*p)->flags() & elfcpp::SHF_ALLOC) == 0
3238
          && (*p)->type() != elfcpp::SHT_GROUP)
3239
        continue;
3240
 
3241
      off = align_address(off, (*p)->addralign());
3242
 
3243
      // The linker script might have set the address.
3244
      if (!(*p)->is_address_valid())
3245
        (*p)->set_address(0);
3246
      (*p)->set_file_offset(off);
3247
      (*p)->finalize_data_size();
3248
      off += (*p)->data_size();
3249
 
3250
      (*p)->set_out_shndx(*pshndx);
3251
      ++*pshndx;
3252
    }
3253
 
3254
  return off;
3255
}
3256
 
3257
// Set the file offset of all the sections not associated with a
3258
// segment.
3259
 
3260
off_t
3261
Layout::set_section_offsets(off_t off, Layout::Section_offset_pass pass)
3262
{
3263
  off_t startoff = off;
3264
  off_t maxoff = off;
3265
 
3266
  for (Section_list::iterator p = this->unattached_section_list_.begin();
3267
       p != this->unattached_section_list_.end();
3268
       ++p)
3269
    {
3270
      // The symtab section is handled in create_symtab_sections.
3271
      if (*p == this->symtab_section_)
3272
        continue;
3273
 
3274
      // If we've already set the data size, don't set it again.
3275
      if ((*p)->is_offset_valid() && (*p)->is_data_size_valid())
3276
        continue;
3277
 
3278
      if (pass == BEFORE_INPUT_SECTIONS_PASS
3279
          && (*p)->requires_postprocessing())
3280
        {
3281
          (*p)->create_postprocessing_buffer();
3282
          this->any_postprocessing_sections_ = true;
3283
        }
3284
 
3285
      if (pass == BEFORE_INPUT_SECTIONS_PASS
3286
          && (*p)->after_input_sections())
3287
        continue;
3288
      else if (pass == POSTPROCESSING_SECTIONS_PASS
3289
               && (!(*p)->after_input_sections()
3290
                   || (*p)->type() == elfcpp::SHT_STRTAB))
3291
        continue;
3292
      else if (pass == STRTAB_AFTER_POSTPROCESSING_SECTIONS_PASS
3293
               && (!(*p)->after_input_sections()
3294
                   || (*p)->type() != elfcpp::SHT_STRTAB))
3295
        continue;
3296
 
3297
      if (!parameters->incremental_update())
3298
        {
3299
          off = align_address(off, (*p)->addralign());
3300
          (*p)->set_file_offset(off);
3301
          (*p)->finalize_data_size();
3302
        }
3303
      else
3304
        {
3305
          // Incremental update: allocate file space from free list.
3306
          (*p)->pre_finalize_data_size();
3307
          off_t current_size = (*p)->current_data_size();
3308
          off = this->allocate(current_size, (*p)->addralign(), startoff);
3309
          if (off == -1)
3310
            {
3311
              if (is_debugging_enabled(DEBUG_INCREMENTAL))
3312
                this->free_list_.dump();
3313
              gold_assert((*p)->output_section() != NULL);
3314 148 khays
              gold_fallback(_("out of patch space for section %s; "
3315
                              "relink with --incremental-full"),
3316
                            (*p)->output_section()->name());
3317 27 khays
            }
3318
          (*p)->set_file_offset(off);
3319
          (*p)->finalize_data_size();
3320
          if ((*p)->data_size() > current_size)
3321
            {
3322
              gold_assert((*p)->output_section() != NULL);
3323 148 khays
              gold_fallback(_("%s: section changed size; "
3324
                              "relink with --incremental-full"),
3325
                            (*p)->output_section()->name());
3326 27 khays
            }
3327
          gold_debug(DEBUG_INCREMENTAL,
3328
                     "set_section_offsets: %08lx %08lx %s",
3329
                     static_cast<long>(off),
3330
                     static_cast<long>((*p)->data_size()),
3331
                     ((*p)->output_section() != NULL
3332
                      ? (*p)->output_section()->name() : "(special)"));
3333
        }
3334
 
3335
      off += (*p)->data_size();
3336
      if (off > maxoff)
3337
        maxoff = off;
3338
 
3339
      // At this point the name must be set.
3340
      if (pass != STRTAB_AFTER_POSTPROCESSING_SECTIONS_PASS)
3341
        this->namepool_.add((*p)->name(), false, NULL);
3342
    }
3343
  return maxoff;
3344
}
3345
 
3346
// Set the section indexes of all the sections not associated with a
3347
// segment.
3348
 
3349
unsigned int
3350
Layout::set_section_indexes(unsigned int shndx)
3351
{
3352
  for (Section_list::iterator p = this->unattached_section_list_.begin();
3353
       p != this->unattached_section_list_.end();
3354
       ++p)
3355
    {
3356
      if (!(*p)->has_out_shndx())
3357
        {
3358
          (*p)->set_out_shndx(shndx);
3359
          ++shndx;
3360
        }
3361
    }
3362
  return shndx;
3363
}
3364
 
3365
// Set the section addresses according to the linker script.  This is
3366
// only called when we see a SECTIONS clause.  This returns the
3367
// program segment which should hold the file header and segment
3368
// headers, if any.  It will return NULL if they should not be in a
3369
// segment.
3370
 
3371
Output_segment*
3372
Layout::set_section_addresses_from_script(Symbol_table* symtab)
3373
{
3374
  Script_sections* ss = this->script_options_->script_sections();
3375
  gold_assert(ss->saw_sections_clause());
3376
  return this->script_options_->set_section_addresses(symtab, this);
3377
}
3378
 
3379
// Place the orphan sections in the linker script.
3380
 
3381
void
3382
Layout::place_orphan_sections_in_script()
3383
{
3384
  Script_sections* ss = this->script_options_->script_sections();
3385
  gold_assert(ss->saw_sections_clause());
3386
 
3387
  // Place each orphaned output section in the script.
3388
  for (Section_list::iterator p = this->section_list_.begin();
3389
       p != this->section_list_.end();
3390
       ++p)
3391
    {
3392
      if (!(*p)->found_in_sections_clause())
3393
        ss->place_orphan(*p);
3394
    }
3395
}
3396
 
3397
// Count the local symbols in the regular symbol table and the dynamic
3398
// symbol table, and build the respective string pools.
3399
 
3400
void
3401
Layout::count_local_symbols(const Task* task,
3402
                            const Input_objects* input_objects)
3403
{
3404
  // First, figure out an upper bound on the number of symbols we'll
3405
  // be inserting into each pool.  This helps us create the pools with
3406
  // the right size, to avoid unnecessary hashtable resizing.
3407
  unsigned int symbol_count = 0;
3408
  for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
3409
       p != input_objects->relobj_end();
3410
       ++p)
3411
    symbol_count += (*p)->local_symbol_count();
3412
 
3413
  // Go from "upper bound" to "estimate."  We overcount for two
3414
  // reasons: we double-count symbols that occur in more than one
3415
  // object file, and we count symbols that are dropped from the
3416
  // output.  Add it all together and assume we overcount by 100%.
3417
  symbol_count /= 2;
3418
 
3419
  // We assume all symbols will go into both the sympool and dynpool.
3420
  this->sympool_.reserve(symbol_count);
3421
  this->dynpool_.reserve(symbol_count);
3422
 
3423
  for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
3424
       p != input_objects->relobj_end();
3425
       ++p)
3426
    {
3427
      Task_lock_obj<Object> tlo(task, *p);
3428
      (*p)->count_local_symbols(&this->sympool_, &this->dynpool_);
3429
    }
3430
}
3431
 
3432
// Create the symbol table sections.  Here we also set the final
3433
// values of the symbols.  At this point all the loadable sections are
3434
// fully laid out.  SHNUM is the number of sections so far.
3435
 
3436
void
3437
Layout::create_symtab_sections(const Input_objects* input_objects,
3438
                               Symbol_table* symtab,
3439
                               unsigned int shnum,
3440
                               off_t* poff)
3441
{
3442
  int symsize;
3443
  unsigned int align;
3444
  if (parameters->target().get_size() == 32)
3445
    {
3446
      symsize = elfcpp::Elf_sizes<32>::sym_size;
3447
      align = 4;
3448
    }
3449
  else if (parameters->target().get_size() == 64)
3450
    {
3451
      symsize = elfcpp::Elf_sizes<64>::sym_size;
3452
      align = 8;
3453
    }
3454
  else
3455
    gold_unreachable();
3456
 
3457
  // Compute file offsets relative to the start of the symtab section.
3458
  off_t off = 0;
3459
 
3460
  // Save space for the dummy symbol at the start of the section.  We
3461
  // never bother to write this out--it will just be left as zero.
3462
  off += symsize;
3463
  unsigned int local_symbol_index = 1;
3464
 
3465
  // Add STT_SECTION symbols for each Output section which needs one.
3466
  for (Section_list::iterator p = this->section_list_.begin();
3467
       p != this->section_list_.end();
3468
       ++p)
3469
    {
3470
      if (!(*p)->needs_symtab_index())
3471
        (*p)->set_symtab_index(-1U);
3472
      else
3473
        {
3474
          (*p)->set_symtab_index(local_symbol_index);
3475
          ++local_symbol_index;
3476
          off += symsize;
3477
        }
3478
    }
3479
 
3480
  for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
3481
       p != input_objects->relobj_end();
3482
       ++p)
3483
    {
3484
      unsigned int index = (*p)->finalize_local_symbols(local_symbol_index,
3485
                                                        off, symtab);
3486
      off += (index - local_symbol_index) * symsize;
3487
      local_symbol_index = index;
3488
    }
3489
 
3490
  unsigned int local_symcount = local_symbol_index;
3491
  gold_assert(static_cast<off_t>(local_symcount * symsize) == off);
3492
 
3493
  off_t dynoff;
3494
  size_t dyn_global_index;
3495
  size_t dyncount;
3496
  if (this->dynsym_section_ == NULL)
3497
    {
3498
      dynoff = 0;
3499
      dyn_global_index = 0;
3500
      dyncount = 0;
3501
    }
3502
  else
3503
    {
3504
      dyn_global_index = this->dynsym_section_->info();
3505
      off_t locsize = dyn_global_index * this->dynsym_section_->entsize();
3506
      dynoff = this->dynsym_section_->offset() + locsize;
3507
      dyncount = (this->dynsym_section_->data_size() - locsize) / symsize;
3508
      gold_assert(static_cast<off_t>(dyncount * symsize)
3509
                  == this->dynsym_section_->data_size() - locsize);
3510
    }
3511
 
3512
  off_t global_off = off;
3513
  off = symtab->finalize(off, dynoff, dyn_global_index, dyncount,
3514
                         &this->sympool_, &local_symcount);
3515
 
3516
  if (!parameters->options().strip_all())
3517
    {
3518
      this->sympool_.set_string_offsets();
3519
 
3520
      const char* symtab_name = this->namepool_.add(".symtab", false, NULL);
3521
      Output_section* osymtab = this->make_output_section(symtab_name,
3522
                                                          elfcpp::SHT_SYMTAB,
3523
                                                          0, ORDER_INVALID,
3524
                                                          false);
3525
      this->symtab_section_ = osymtab;
3526
 
3527
      Output_section_data* pos = new Output_data_fixed_space(off, align,
3528
                                                             "** symtab");
3529
      osymtab->add_output_section_data(pos);
3530
 
3531
      // We generate a .symtab_shndx section if we have more than
3532
      // SHN_LORESERVE sections.  Technically it is possible that we
3533
      // don't need one, because it is possible that there are no
3534
      // symbols in any of sections with indexes larger than
3535
      // SHN_LORESERVE.  That is probably unusual, though, and it is
3536
      // easier to always create one than to compute section indexes
3537
      // twice (once here, once when writing out the symbols).
3538
      if (shnum >= elfcpp::SHN_LORESERVE)
3539
        {
3540
          const char* symtab_xindex_name = this->namepool_.add(".symtab_shndx",
3541
                                                               false, NULL);
3542
          Output_section* osymtab_xindex =
3543
            this->make_output_section(symtab_xindex_name,
3544
                                      elfcpp::SHT_SYMTAB_SHNDX, 0,
3545
                                      ORDER_INVALID, false);
3546
 
3547
          size_t symcount = off / symsize;
3548
          this->symtab_xindex_ = new Output_symtab_xindex(symcount);
3549
 
3550
          osymtab_xindex->add_output_section_data(this->symtab_xindex_);
3551
 
3552
          osymtab_xindex->set_link_section(osymtab);
3553
          osymtab_xindex->set_addralign(4);
3554
          osymtab_xindex->set_entsize(4);
3555
 
3556
          osymtab_xindex->set_after_input_sections();
3557
 
3558
          // This tells the driver code to wait until the symbol table
3559
          // has written out before writing out the postprocessing
3560
          // sections, including the .symtab_shndx section.
3561
          this->any_postprocessing_sections_ = true;
3562
        }
3563
 
3564
      const char* strtab_name = this->namepool_.add(".strtab", false, NULL);
3565
      Output_section* ostrtab = this->make_output_section(strtab_name,
3566
                                                          elfcpp::SHT_STRTAB,
3567
                                                          0, ORDER_INVALID,
3568
                                                          false);
3569
 
3570
      Output_section_data* pstr = new Output_data_strtab(&this->sympool_);
3571
      ostrtab->add_output_section_data(pstr);
3572
 
3573
      off_t symtab_off;
3574
      if (!parameters->incremental_update())
3575
        symtab_off = align_address(*poff, align);
3576
      else
3577
        {
3578
          symtab_off = this->allocate(off, align, *poff);
3579
          if (off == -1)
3580 148 khays
            gold_fallback(_("out of patch space for symbol table; "
3581
                            "relink with --incremental-full"));
3582 27 khays
          gold_debug(DEBUG_INCREMENTAL,
3583
                     "create_symtab_sections: %08lx %08lx .symtab",
3584
                     static_cast<long>(symtab_off),
3585
                     static_cast<long>(off));
3586
        }
3587
 
3588
      symtab->set_file_offset(symtab_off + global_off);
3589
      osymtab->set_file_offset(symtab_off);
3590
      osymtab->finalize_data_size();
3591
      osymtab->set_link_section(ostrtab);
3592
      osymtab->set_info(local_symcount);
3593
      osymtab->set_entsize(symsize);
3594
 
3595
      if (symtab_off + off > *poff)
3596
        *poff = symtab_off + off;
3597
    }
3598
}
3599
 
3600
// Create the .shstrtab section, which holds the names of the
3601
// sections.  At the time this is called, we have created all the
3602
// output sections except .shstrtab itself.
3603
 
3604
Output_section*
3605
Layout::create_shstrtab()
3606
{
3607
  // FIXME: We don't need to create a .shstrtab section if we are
3608
  // stripping everything.
3609
 
3610
  const char* name = this->namepool_.add(".shstrtab", false, NULL);
3611
 
3612
  Output_section* os = this->make_output_section(name, elfcpp::SHT_STRTAB, 0,
3613
                                                 ORDER_INVALID, false);
3614
 
3615
  if (strcmp(parameters->options().compress_debug_sections(), "none") != 0)
3616
    {
3617
      // We can't write out this section until we've set all the
3618
      // section names, and we don't set the names of compressed
3619
      // output sections until relocations are complete.  FIXME: With
3620
      // the current names we use, this is unnecessary.
3621
      os->set_after_input_sections();
3622
    }
3623
 
3624
  Output_section_data* posd = new Output_data_strtab(&this->namepool_);
3625
  os->add_output_section_data(posd);
3626
 
3627
  return os;
3628
}
3629
 
3630
// Create the section headers.  SIZE is 32 or 64.  OFF is the file
3631
// offset.
3632
 
3633
void
3634
Layout::create_shdrs(const Output_section* shstrtab_section, off_t* poff)
3635
{
3636
  Output_section_headers* oshdrs;
3637
  oshdrs = new Output_section_headers(this,
3638
                                      &this->segment_list_,
3639
                                      &this->section_list_,
3640
                                      &this->unattached_section_list_,
3641
                                      &this->namepool_,
3642
                                      shstrtab_section);
3643
  off_t off;
3644
  if (!parameters->incremental_update())
3645
    off = align_address(*poff, oshdrs->addralign());
3646
  else
3647
    {
3648
      oshdrs->pre_finalize_data_size();
3649
      off = this->allocate(oshdrs->data_size(), oshdrs->addralign(), *poff);
3650
      if (off == -1)
3651 148 khays
          gold_fallback(_("out of patch space for section header table; "
3652
                          "relink with --incremental-full"));
3653 27 khays
      gold_debug(DEBUG_INCREMENTAL,
3654
                 "create_shdrs: %08lx %08lx (section header table)",
3655
                 static_cast<long>(off),
3656
                 static_cast<long>(off + oshdrs->data_size()));
3657
    }
3658
  oshdrs->set_address_and_file_offset(0, off);
3659
  off += oshdrs->data_size();
3660
  if (off > *poff)
3661
    *poff = off;
3662
  this->section_headers_ = oshdrs;
3663
}
3664
 
3665
// Count the allocated sections.
3666
 
3667
size_t
3668
Layout::allocated_output_section_count() const
3669
{
3670
  size_t section_count = 0;
3671
  for (Segment_list::const_iterator p = this->segment_list_.begin();
3672
       p != this->segment_list_.end();
3673
       ++p)
3674
    section_count += (*p)->output_section_count();
3675
  return section_count;
3676
}
3677
 
3678
// Create the dynamic symbol table.
3679
 
3680
void
3681
Layout::create_dynamic_symtab(const Input_objects* input_objects,
3682
                              Symbol_table* symtab,
3683
                              Output_section** pdynstr,
3684
                              unsigned int* plocal_dynamic_count,
3685
                              std::vector<Symbol*>* pdynamic_symbols,
3686
                              Versions* pversions)
3687
{
3688
  // Count all the symbols in the dynamic symbol table, and set the
3689
  // dynamic symbol indexes.
3690
 
3691
  // Skip symbol 0, which is always all zeroes.
3692
  unsigned int index = 1;
3693
 
3694
  // Add STT_SECTION symbols for each Output section which needs one.
3695
  for (Section_list::iterator p = this->section_list_.begin();
3696
       p != this->section_list_.end();
3697
       ++p)
3698
    {
3699
      if (!(*p)->needs_dynsym_index())
3700
        (*p)->set_dynsym_index(-1U);
3701
      else
3702
        {
3703
          (*p)->set_dynsym_index(index);
3704
          ++index;
3705
        }
3706
    }
3707
 
3708
  // Count the local symbols that need to go in the dynamic symbol table,
3709
  // and set the dynamic symbol indexes.
3710
  for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
3711
       p != input_objects->relobj_end();
3712
       ++p)
3713
    {
3714
      unsigned int new_index = (*p)->set_local_dynsym_indexes(index);
3715
      index = new_index;
3716
    }
3717
 
3718
  unsigned int local_symcount = index;
3719
  *plocal_dynamic_count = local_symcount;
3720
 
3721
  index = symtab->set_dynsym_indexes(index, pdynamic_symbols,
3722
                                     &this->dynpool_, pversions);
3723
 
3724
  int symsize;
3725
  unsigned int align;
3726
  const int size = parameters->target().get_size();
3727
  if (size == 32)
3728
    {
3729
      symsize = elfcpp::Elf_sizes<32>::sym_size;
3730
      align = 4;
3731
    }
3732
  else if (size == 64)
3733
    {
3734
      symsize = elfcpp::Elf_sizes<64>::sym_size;
3735
      align = 8;
3736
    }
3737
  else
3738
    gold_unreachable();
3739
 
3740
  // Create the dynamic symbol table section.
3741
 
3742
  Output_section* dynsym = this->choose_output_section(NULL, ".dynsym",
3743
                                                       elfcpp::SHT_DYNSYM,
3744
                                                       elfcpp::SHF_ALLOC,
3745
                                                       false,
3746
                                                       ORDER_DYNAMIC_LINKER,
3747
                                                       false);
3748
 
3749 159 khays
  // Check for NULL as a linker script may discard .dynsym.
3750
  if (dynsym != NULL)
3751
    {
3752
      Output_section_data* odata = new Output_data_fixed_space(index * symsize,
3753
                                                               align,
3754
                                                               "** dynsym");
3755
      dynsym->add_output_section_data(odata);
3756 27 khays
 
3757 159 khays
      dynsym->set_info(local_symcount);
3758
      dynsym->set_entsize(symsize);
3759
      dynsym->set_addralign(align);
3760 27 khays
 
3761 159 khays
      this->dynsym_section_ = dynsym;
3762
    }
3763 27 khays
 
3764
  Output_data_dynamic* const odyn = this->dynamic_data_;
3765 159 khays
  if (odyn != NULL)
3766
    {
3767
      odyn->add_section_address(elfcpp::DT_SYMTAB, dynsym);
3768
      odyn->add_constant(elfcpp::DT_SYMENT, symsize);
3769
    }
3770 27 khays
 
3771
  // If there are more than SHN_LORESERVE allocated sections, we
3772
  // create a .dynsym_shndx section.  It is possible that we don't
3773
  // need one, because it is possible that there are no dynamic
3774
  // symbols in any of the sections with indexes larger than
3775
  // SHN_LORESERVE.  This is probably unusual, though, and at this
3776
  // time we don't know the actual section indexes so it is
3777
  // inconvenient to check.
3778
  if (this->allocated_output_section_count() >= elfcpp::SHN_LORESERVE)
3779
    {
3780
      Output_section* dynsym_xindex =
3781
        this->choose_output_section(NULL, ".dynsym_shndx",
3782
                                    elfcpp::SHT_SYMTAB_SHNDX,
3783
                                    elfcpp::SHF_ALLOC,
3784
                                    false, ORDER_DYNAMIC_LINKER, false);
3785
 
3786 159 khays
      if (dynsym_xindex != NULL)
3787
        {
3788
          this->dynsym_xindex_ = new Output_symtab_xindex(index);
3789 27 khays
 
3790 159 khays
          dynsym_xindex->add_output_section_data(this->dynsym_xindex_);
3791 27 khays
 
3792 159 khays
          dynsym_xindex->set_link_section(dynsym);
3793
          dynsym_xindex->set_addralign(4);
3794
          dynsym_xindex->set_entsize(4);
3795 27 khays
 
3796 159 khays
          dynsym_xindex->set_after_input_sections();
3797 27 khays
 
3798 159 khays
          // This tells the driver code to wait until the symbol table
3799
          // has written out before writing out the postprocessing
3800
          // sections, including the .dynsym_shndx section.
3801
          this->any_postprocessing_sections_ = true;
3802
        }
3803 27 khays
    }
3804
 
3805
  // Create the dynamic string table section.
3806
 
3807
  Output_section* dynstr = this->choose_output_section(NULL, ".dynstr",
3808
                                                       elfcpp::SHT_STRTAB,
3809
                                                       elfcpp::SHF_ALLOC,
3810
                                                       false,
3811
                                                       ORDER_DYNAMIC_LINKER,
3812
                                                       false);
3813
 
3814 159 khays
  if (dynstr != NULL)
3815
    {
3816
      Output_section_data* strdata = new Output_data_strtab(&this->dynpool_);
3817
      dynstr->add_output_section_data(strdata);
3818 27 khays
 
3819 159 khays
      if (dynsym != NULL)
3820
        dynsym->set_link_section(dynstr);
3821
      if (this->dynamic_section_ != NULL)
3822
        this->dynamic_section_->set_link_section(dynstr);
3823 27 khays
 
3824 159 khays
      if (odyn != NULL)
3825
        {
3826
          odyn->add_section_address(elfcpp::DT_STRTAB, dynstr);
3827
          odyn->add_section_size(elfcpp::DT_STRSZ, dynstr);
3828
        }
3829 27 khays
 
3830 159 khays
      *pdynstr = dynstr;
3831
    }
3832 27 khays
 
3833
  // Create the hash tables.
3834
 
3835
  if (strcmp(parameters->options().hash_style(), "sysv") == 0
3836
      || strcmp(parameters->options().hash_style(), "both") == 0)
3837
    {
3838
      unsigned char* phash;
3839
      unsigned int hashlen;
3840
      Dynobj::create_elf_hash_table(*pdynamic_symbols, local_symcount,
3841
                                    &phash, &hashlen);
3842
 
3843
      Output_section* hashsec =
3844
        this->choose_output_section(NULL, ".hash", elfcpp::SHT_HASH,
3845
                                    elfcpp::SHF_ALLOC, false,
3846
                                    ORDER_DYNAMIC_LINKER, false);
3847
 
3848
      Output_section_data* hashdata = new Output_data_const_buffer(phash,
3849
                                                                   hashlen,
3850
                                                                   align,
3851
                                                                   "** hash");
3852 159 khays
      if (hashsec != NULL && hashdata != NULL)
3853
        hashsec->add_output_section_data(hashdata);
3854 27 khays
 
3855 159 khays
      if (hashsec != NULL)
3856
        {
3857
          if (dynsym != NULL)
3858
            hashsec->set_link_section(dynsym);
3859
          hashsec->set_entsize(4);
3860
        }
3861 27 khays
 
3862 159 khays
      if (odyn != NULL)
3863
        odyn->add_section_address(elfcpp::DT_HASH, hashsec);
3864 27 khays
    }
3865
 
3866
  if (strcmp(parameters->options().hash_style(), "gnu") == 0
3867
      || strcmp(parameters->options().hash_style(), "both") == 0)
3868
    {
3869
      unsigned char* phash;
3870
      unsigned int hashlen;
3871
      Dynobj::create_gnu_hash_table(*pdynamic_symbols, local_symcount,
3872
                                    &phash, &hashlen);
3873
 
3874
      Output_section* hashsec =
3875
        this->choose_output_section(NULL, ".gnu.hash", elfcpp::SHT_GNU_HASH,
3876
                                    elfcpp::SHF_ALLOC, false,
3877
                                    ORDER_DYNAMIC_LINKER, false);
3878
 
3879
      Output_section_data* hashdata = new Output_data_const_buffer(phash,
3880
                                                                   hashlen,
3881
                                                                   align,
3882
                                                                   "** hash");
3883 159 khays
      if (hashsec != NULL && hashdata != NULL)
3884
        hashsec->add_output_section_data(hashdata);
3885 27 khays
 
3886 159 khays
      if (hashsec != NULL)
3887
        {
3888
          if (dynsym != NULL)
3889
            hashsec->set_link_section(dynsym);
3890 27 khays
 
3891 159 khays
          // For a 64-bit target, the entries in .gnu.hash do not have
3892
          // a uniform size, so we only set the entry size for a
3893
          // 32-bit target.
3894
          if (parameters->target().get_size() == 32)
3895
            hashsec->set_entsize(4);
3896 27 khays
 
3897 159 khays
          if (odyn != NULL)
3898
            odyn->add_section_address(elfcpp::DT_GNU_HASH, hashsec);
3899
        }
3900 27 khays
    }
3901
}
3902
 
3903
// Assign offsets to each local portion of the dynamic symbol table.
3904
 
3905
void
3906
Layout::assign_local_dynsym_offsets(const Input_objects* input_objects)
3907
{
3908
  Output_section* dynsym = this->dynsym_section_;
3909 159 khays
  if (dynsym == NULL)
3910
    return;
3911 27 khays
 
3912
  off_t off = dynsym->offset();
3913
 
3914
  // Skip the dummy symbol at the start of the section.
3915
  off += dynsym->entsize();
3916
 
3917
  for (Input_objects::Relobj_iterator p = input_objects->relobj_begin();
3918
       p != input_objects->relobj_end();
3919
       ++p)
3920
    {
3921
      unsigned int count = (*p)->set_local_dynsym_offset(off);
3922
      off += count * dynsym->entsize();
3923
    }
3924
}
3925
 
3926
// Create the version sections.
3927
 
3928
void
3929
Layout::create_version_sections(const Versions* versions,
3930
                                const Symbol_table* symtab,
3931
                                unsigned int local_symcount,
3932
                                const std::vector<Symbol*>& dynamic_symbols,
3933
                                const Output_section* dynstr)
3934
{
3935
  if (!versions->any_defs() && !versions->any_needs())
3936
    return;
3937
 
3938
  switch (parameters->size_and_endianness())
3939
    {
3940
#ifdef HAVE_TARGET_32_LITTLE
3941
    case Parameters::TARGET_32_LITTLE:
3942
      this->sized_create_version_sections<32, false>(versions, symtab,
3943
                                                     local_symcount,
3944
                                                     dynamic_symbols, dynstr);
3945
      break;
3946
#endif
3947
#ifdef HAVE_TARGET_32_BIG
3948
    case Parameters::TARGET_32_BIG:
3949
      this->sized_create_version_sections<32, true>(versions, symtab,
3950
                                                    local_symcount,
3951
                                                    dynamic_symbols, dynstr);
3952
      break;
3953
#endif
3954
#ifdef HAVE_TARGET_64_LITTLE
3955
    case Parameters::TARGET_64_LITTLE:
3956
      this->sized_create_version_sections<64, false>(versions, symtab,
3957
                                                     local_symcount,
3958
                                                     dynamic_symbols, dynstr);
3959
      break;
3960
#endif
3961
#ifdef HAVE_TARGET_64_BIG
3962
    case Parameters::TARGET_64_BIG:
3963
      this->sized_create_version_sections<64, true>(versions, symtab,
3964
                                                    local_symcount,
3965
                                                    dynamic_symbols, dynstr);
3966
      break;
3967
#endif
3968
    default:
3969
      gold_unreachable();
3970
    }
3971
}
3972
 
3973
// Create the version sections, sized version.
3974
 
3975
template<int size, bool big_endian>
3976
void
3977
Layout::sized_create_version_sections(
3978
    const Versions* versions,
3979
    const Symbol_table* symtab,
3980
    unsigned int local_symcount,
3981
    const std::vector<Symbol*>& dynamic_symbols,
3982
    const Output_section* dynstr)
3983
{
3984
  Output_section* vsec = this->choose_output_section(NULL, ".gnu.version",
3985
                                                     elfcpp::SHT_GNU_versym,
3986
                                                     elfcpp::SHF_ALLOC,
3987
                                                     false,
3988
                                                     ORDER_DYNAMIC_LINKER,
3989
                                                     false);
3990
 
3991 159 khays
  // Check for NULL since a linker script may discard this section.
3992
  if (vsec != NULL)
3993
    {
3994
      unsigned char* vbuf;
3995
      unsigned int vsize;
3996
      versions->symbol_section_contents<size, big_endian>(symtab,
3997
                                                          &this->dynpool_,
3998
                                                          local_symcount,
3999
                                                          dynamic_symbols,
4000
                                                          &vbuf, &vsize);
4001 27 khays
 
4002 159 khays
      Output_section_data* vdata = new Output_data_const_buffer(vbuf, vsize, 2,
4003
                                                                "** versions");
4004 27 khays
 
4005 159 khays
      vsec->add_output_section_data(vdata);
4006
      vsec->set_entsize(2);
4007
      vsec->set_link_section(this->dynsym_section_);
4008
    }
4009 27 khays
 
4010
  Output_data_dynamic* const odyn = this->dynamic_data_;
4011 159 khays
  if (odyn != NULL && vsec != NULL)
4012
    odyn->add_section_address(elfcpp::DT_VERSYM, vsec);
4013 27 khays
 
4014
  if (versions->any_defs())
4015
    {
4016
      Output_section* vdsec;
4017 159 khays
      vdsec = this->choose_output_section(NULL, ".gnu.version_d",
4018
                                          elfcpp::SHT_GNU_verdef,
4019
                                          elfcpp::SHF_ALLOC,
4020
                                          false, ORDER_DYNAMIC_LINKER, false);
4021 27 khays
 
4022 159 khays
      if (vdsec != NULL)
4023
        {
4024
          unsigned char* vdbuf;
4025
          unsigned int vdsize;
4026
          unsigned int vdentries;
4027
          versions->def_section_contents<size, big_endian>(&this->dynpool_,
4028
                                                           &vdbuf, &vdsize,
4029
                                                           &vdentries);
4030 27 khays
 
4031 159 khays
          Output_section_data* vddata =
4032
            new Output_data_const_buffer(vdbuf, vdsize, 4, "** version defs");
4033 27 khays
 
4034 159 khays
          vdsec->add_output_section_data(vddata);
4035
          vdsec->set_link_section(dynstr);
4036
          vdsec->set_info(vdentries);
4037 27 khays
 
4038 159 khays
          if (odyn != NULL)
4039
            {
4040
              odyn->add_section_address(elfcpp::DT_VERDEF, vdsec);
4041
              odyn->add_constant(elfcpp::DT_VERDEFNUM, vdentries);
4042
            }
4043
        }
4044 27 khays
    }
4045
 
4046
  if (versions->any_needs())
4047
    {
4048
      Output_section* vnsec;
4049
      vnsec = this->choose_output_section(NULL, ".gnu.version_r",
4050
                                          elfcpp::SHT_GNU_verneed,
4051
                                          elfcpp::SHF_ALLOC,
4052
                                          false, ORDER_DYNAMIC_LINKER, false);
4053
 
4054 159 khays
      if (vnsec != NULL)
4055
        {
4056
          unsigned char* vnbuf;
4057
          unsigned int vnsize;
4058
          unsigned int vnentries;
4059
          versions->need_section_contents<size, big_endian>(&this->dynpool_,
4060
                                                            &vnbuf, &vnsize,
4061
                                                            &vnentries);
4062 27 khays
 
4063 159 khays
          Output_section_data* vndata =
4064
            new Output_data_const_buffer(vnbuf, vnsize, 4, "** version refs");
4065 27 khays
 
4066 159 khays
          vnsec->add_output_section_data(vndata);
4067
          vnsec->set_link_section(dynstr);
4068
          vnsec->set_info(vnentries);
4069 27 khays
 
4070 159 khays
          if (odyn != NULL)
4071
            {
4072
              odyn->add_section_address(elfcpp::DT_VERNEED, vnsec);
4073
              odyn->add_constant(elfcpp::DT_VERNEEDNUM, vnentries);
4074
            }
4075
        }
4076 27 khays
    }
4077
}
4078
 
4079
// Create the .interp section and PT_INTERP segment.
4080
 
4081
void
4082
Layout::create_interp(const Target* target)
4083
{
4084 159 khays
  gold_assert(this->interp_segment_ == NULL);
4085
 
4086 27 khays
  const char* interp = parameters->options().dynamic_linker();
4087
  if (interp == NULL)
4088
    {
4089
      interp = target->dynamic_linker();
4090
      gold_assert(interp != NULL);
4091
    }
4092
 
4093
  size_t len = strlen(interp) + 1;
4094
 
4095
  Output_section_data* odata = new Output_data_const(interp, len, 1);
4096
 
4097
  Output_section* osec = this->choose_output_section(NULL, ".interp",
4098
                                                     elfcpp::SHT_PROGBITS,
4099
                                                     elfcpp::SHF_ALLOC,
4100
                                                     false, ORDER_INTERP,
4101
                                                     false);
4102 159 khays
  if (osec != NULL)
4103
    osec->add_output_section_data(odata);
4104 27 khays
}
4105
 
4106
// Add dynamic tags for the PLT and the dynamic relocs.  This is
4107
// called by the target-specific code.  This does nothing if not doing
4108
// a dynamic link.
4109
 
4110
// USE_REL is true for REL relocs rather than RELA relocs.
4111
 
4112
// If PLT_GOT is not NULL, then DT_PLTGOT points to it.
4113
 
4114
// If PLT_REL is not NULL, it is used for DT_PLTRELSZ, and DT_JMPREL,
4115
// and we also set DT_PLTREL.  We use PLT_REL's output section, since
4116
// some targets have multiple reloc sections in PLT_REL.
4117
 
4118
// If DYN_REL is not NULL, it is used for DT_REL/DT_RELA,
4119 159 khays
// DT_RELSZ/DT_RELASZ, DT_RELENT/DT_RELAENT.  Again we use the output
4120
// section.
4121 27 khays
 
4122
// If ADD_DEBUG is true, we add a DT_DEBUG entry when generating an
4123
// executable.
4124
 
4125
void
4126
Layout::add_target_dynamic_tags(bool use_rel, const Output_data* plt_got,
4127
                                const Output_data* plt_rel,
4128
                                const Output_data_reloc_generic* dyn_rel,
4129
                                bool add_debug, bool dynrel_includes_plt)
4130
{
4131
  Output_data_dynamic* odyn = this->dynamic_data_;
4132
  if (odyn == NULL)
4133
    return;
4134
 
4135
  if (plt_got != NULL && plt_got->output_section() != NULL)
4136
    odyn->add_section_address(elfcpp::DT_PLTGOT, plt_got);
4137
 
4138
  if (plt_rel != NULL && plt_rel->output_section() != NULL)
4139
    {
4140
      odyn->add_section_size(elfcpp::DT_PLTRELSZ, plt_rel->output_section());
4141
      odyn->add_section_address(elfcpp::DT_JMPREL, plt_rel->output_section());
4142
      odyn->add_constant(elfcpp::DT_PLTREL,
4143
                         use_rel ? elfcpp::DT_REL : elfcpp::DT_RELA);
4144
    }
4145
 
4146
  if (dyn_rel != NULL && dyn_rel->output_section() != NULL)
4147
    {
4148
      odyn->add_section_address(use_rel ? elfcpp::DT_REL : elfcpp::DT_RELA,
4149 159 khays
                                dyn_rel->output_section());
4150
      if (plt_rel != NULL
4151
          && plt_rel->output_section() != NULL
4152
          && dynrel_includes_plt)
4153 27 khays
        odyn->add_section_size(use_rel ? elfcpp::DT_RELSZ : elfcpp::DT_RELASZ,
4154 159 khays
                               dyn_rel->output_section(),
4155
                               plt_rel->output_section());
4156 27 khays
      else
4157
        odyn->add_section_size(use_rel ? elfcpp::DT_RELSZ : elfcpp::DT_RELASZ,
4158 159 khays
                               dyn_rel->output_section());
4159 27 khays
      const int size = parameters->target().get_size();
4160
      elfcpp::DT rel_tag;
4161
      int rel_size;
4162
      if (use_rel)
4163
        {
4164
          rel_tag = elfcpp::DT_RELENT;
4165
          if (size == 32)
4166
            rel_size = Reloc_types<elfcpp::SHT_REL, 32, false>::reloc_size;
4167
          else if (size == 64)
4168
            rel_size = Reloc_types<elfcpp::SHT_REL, 64, false>::reloc_size;
4169
          else
4170
            gold_unreachable();
4171
        }
4172
      else
4173
        {
4174
          rel_tag = elfcpp::DT_RELAENT;
4175
          if (size == 32)
4176
            rel_size = Reloc_types<elfcpp::SHT_RELA, 32, false>::reloc_size;
4177
          else if (size == 64)
4178
            rel_size = Reloc_types<elfcpp::SHT_RELA, 64, false>::reloc_size;
4179
          else
4180
            gold_unreachable();
4181
        }
4182
      odyn->add_constant(rel_tag, rel_size);
4183
 
4184
      if (parameters->options().combreloc())
4185
        {
4186
          size_t c = dyn_rel->relative_reloc_count();
4187
          if (c > 0)
4188
            odyn->add_constant((use_rel
4189
                                ? elfcpp::DT_RELCOUNT
4190
                                : elfcpp::DT_RELACOUNT),
4191
                               c);
4192
        }
4193
    }
4194
 
4195
  if (add_debug && !parameters->options().shared())
4196
    {
4197
      // The value of the DT_DEBUG tag is filled in by the dynamic
4198
      // linker at run time, and used by the debugger.
4199
      odyn->add_constant(elfcpp::DT_DEBUG, 0);
4200
    }
4201
}
4202
 
4203
// Finish the .dynamic section and PT_DYNAMIC segment.
4204
 
4205
void
4206
Layout::finish_dynamic_section(const Input_objects* input_objects,
4207
                               const Symbol_table* symtab)
4208
{
4209 159 khays
  if (!this->script_options_->saw_phdrs_clause()
4210
      && this->dynamic_section_ != NULL)
4211 27 khays
    {
4212
      Output_segment* oseg = this->make_output_segment(elfcpp::PT_DYNAMIC,
4213
                                                       (elfcpp::PF_R
4214
                                                        | elfcpp::PF_W));
4215
      oseg->add_output_section_to_nonload(this->dynamic_section_,
4216
                                          elfcpp::PF_R | elfcpp::PF_W);
4217
    }
4218
 
4219
  Output_data_dynamic* const odyn = this->dynamic_data_;
4220 159 khays
  if (odyn == NULL)
4221
    return;
4222 27 khays
 
4223
  for (Input_objects::Dynobj_iterator p = input_objects->dynobj_begin();
4224
       p != input_objects->dynobj_end();
4225
       ++p)
4226
    {
4227
      if (!(*p)->is_needed() && (*p)->as_needed())
4228
        {
4229
          // This dynamic object was linked with --as-needed, but it
4230
          // is not needed.
4231
          continue;
4232
        }
4233
 
4234
      odyn->add_string(elfcpp::DT_NEEDED, (*p)->soname());
4235
    }
4236
 
4237
  if (parameters->options().shared())
4238
    {
4239
      const char* soname = parameters->options().soname();
4240
      if (soname != NULL)
4241
        odyn->add_string(elfcpp::DT_SONAME, soname);
4242
    }
4243
 
4244
  Symbol* sym = symtab->lookup(parameters->options().init());
4245
  if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
4246
    odyn->add_symbol(elfcpp::DT_INIT, sym);
4247
 
4248
  sym = symtab->lookup(parameters->options().fini());
4249
  if (sym != NULL && sym->is_defined() && !sym->is_from_dynobj())
4250
    odyn->add_symbol(elfcpp::DT_FINI, sym);
4251
 
4252
  // Look for .init_array, .preinit_array and .fini_array by checking
4253
  // section types.
4254
  for(Layout::Section_list::const_iterator p = this->section_list_.begin();
4255
      p != this->section_list_.end();
4256
      ++p)
4257
    switch((*p)->type())
4258
      {
4259
      case elfcpp::SHT_FINI_ARRAY:
4260
        odyn->add_section_address(elfcpp::DT_FINI_ARRAY, *p);
4261
        odyn->add_section_size(elfcpp::DT_FINI_ARRAYSZ, *p);
4262
        break;
4263
      case elfcpp::SHT_INIT_ARRAY:
4264
        odyn->add_section_address(elfcpp::DT_INIT_ARRAY, *p);
4265
        odyn->add_section_size(elfcpp::DT_INIT_ARRAYSZ, *p);
4266
        break;
4267
      case elfcpp::SHT_PREINIT_ARRAY:
4268
        odyn->add_section_address(elfcpp::DT_PREINIT_ARRAY, *p);
4269
        odyn->add_section_size(elfcpp::DT_PREINIT_ARRAYSZ, *p);
4270
        break;
4271
      default:
4272
        break;
4273
      }
4274
 
4275
  // Add a DT_RPATH entry if needed.
4276
  const General_options::Dir_list& rpath(parameters->options().rpath());
4277
  if (!rpath.empty())
4278
    {
4279
      std::string rpath_val;
4280
      for (General_options::Dir_list::const_iterator p = rpath.begin();
4281
           p != rpath.end();
4282
           ++p)
4283
        {
4284
          if (rpath_val.empty())
4285
            rpath_val = p->name();
4286
          else
4287
            {
4288
              // Eliminate duplicates.
4289
              General_options::Dir_list::const_iterator q;
4290
              for (q = rpath.begin(); q != p; ++q)
4291
                if (q->name() == p->name())
4292
                  break;
4293
              if (q == p)
4294
                {
4295
                  rpath_val += ':';
4296
                  rpath_val += p->name();
4297
                }
4298
            }
4299
        }
4300
 
4301
      odyn->add_string(elfcpp::DT_RPATH, rpath_val);
4302
      if (parameters->options().enable_new_dtags())
4303
        odyn->add_string(elfcpp::DT_RUNPATH, rpath_val);
4304
    }
4305
 
4306
  // Look for text segments that have dynamic relocations.
4307
  bool have_textrel = false;
4308
  if (!this->script_options_->saw_sections_clause())
4309
    {
4310
      for (Segment_list::const_iterator p = this->segment_list_.begin();
4311
           p != this->segment_list_.end();
4312
           ++p)
4313
        {
4314 159 khays
          if ((*p)->type() == elfcpp::PT_LOAD
4315
              && ((*p)->flags() & elfcpp::PF_W) == 0
4316 27 khays
              && (*p)->has_dynamic_reloc())
4317
            {
4318
              have_textrel = true;
4319
              break;
4320
            }
4321
        }
4322
    }
4323
  else
4324
    {
4325
      // We don't know the section -> segment mapping, so we are
4326
      // conservative and just look for readonly sections with
4327
      // relocations.  If those sections wind up in writable segments,
4328
      // then we have created an unnecessary DT_TEXTREL entry.
4329
      for (Section_list::const_iterator p = this->section_list_.begin();
4330
           p != this->section_list_.end();
4331
           ++p)
4332
        {
4333
          if (((*p)->flags() & elfcpp::SHF_ALLOC) != 0
4334
              && ((*p)->flags() & elfcpp::SHF_WRITE) == 0
4335 159 khays
              && (*p)->has_dynamic_reloc())
4336 27 khays
            {
4337
              have_textrel = true;
4338
              break;
4339
            }
4340
        }
4341
    }
4342
 
4343 159 khays
  if (parameters->options().filter() != NULL)
4344
    odyn->add_string(elfcpp::DT_FILTER, parameters->options().filter());
4345
  if (parameters->options().any_auxiliary())
4346
    {
4347
      for (options::String_set::const_iterator p =
4348
             parameters->options().auxiliary_begin();
4349
           p != parameters->options().auxiliary_end();
4350
           ++p)
4351
        odyn->add_string(elfcpp::DT_AUXILIARY, *p);
4352
    }
4353
 
4354
  // Add a DT_FLAGS entry if necessary.
4355 27 khays
  unsigned int flags = 0;
4356
  if (have_textrel)
4357
    {
4358
      // Add a DT_TEXTREL for compatibility with older loaders.
4359
      odyn->add_constant(elfcpp::DT_TEXTREL, 0);
4360
      flags |= elfcpp::DF_TEXTREL;
4361
 
4362
      if (parameters->options().text())
4363
        gold_error(_("read-only segment has dynamic relocations"));
4364
      else if (parameters->options().warn_shared_textrel()
4365
               && parameters->options().shared())
4366
        gold_warning(_("shared library text segment is not shareable"));
4367
    }
4368
  if (parameters->options().shared() && this->has_static_tls())
4369
    flags |= elfcpp::DF_STATIC_TLS;
4370
  if (parameters->options().origin())
4371
    flags |= elfcpp::DF_ORIGIN;
4372
  if (parameters->options().Bsymbolic())
4373
    {
4374
      flags |= elfcpp::DF_SYMBOLIC;
4375
      // Add DT_SYMBOLIC for compatibility with older loaders.
4376
      odyn->add_constant(elfcpp::DT_SYMBOLIC, 0);
4377
    }
4378
  if (parameters->options().now())
4379
    flags |= elfcpp::DF_BIND_NOW;
4380 159 khays
  if (flags != 0)
4381
    odyn->add_constant(elfcpp::DT_FLAGS, flags);
4382 27 khays
 
4383
  flags = 0;
4384
  if (parameters->options().initfirst())
4385
    flags |= elfcpp::DF_1_INITFIRST;
4386
  if (parameters->options().interpose())
4387
    flags |= elfcpp::DF_1_INTERPOSE;
4388
  if (parameters->options().loadfltr())
4389
    flags |= elfcpp::DF_1_LOADFLTR;
4390
  if (parameters->options().nodefaultlib())
4391
    flags |= elfcpp::DF_1_NODEFLIB;
4392
  if (parameters->options().nodelete())
4393
    flags |= elfcpp::DF_1_NODELETE;
4394
  if (parameters->options().nodlopen())
4395
    flags |= elfcpp::DF_1_NOOPEN;
4396
  if (parameters->options().nodump())
4397
    flags |= elfcpp::DF_1_NODUMP;
4398
  if (!parameters->options().shared())
4399
    flags &= ~(elfcpp::DF_1_INITFIRST
4400
               | elfcpp::DF_1_NODELETE
4401
               | elfcpp::DF_1_NOOPEN);
4402
  if (parameters->options().origin())
4403
    flags |= elfcpp::DF_1_ORIGIN;
4404
  if (parameters->options().now())
4405
    flags |= elfcpp::DF_1_NOW;
4406 159 khays
  if (parameters->options().Bgroup())
4407
    flags |= elfcpp::DF_1_GROUP;
4408
  if (flags != 0)
4409 27 khays
    odyn->add_constant(elfcpp::DT_FLAGS_1, flags);
4410
}
4411
 
4412
// Set the size of the _DYNAMIC symbol table to be the size of the
4413
// dynamic data.
4414
 
4415
void
4416
Layout::set_dynamic_symbol_size(const Symbol_table* symtab)
4417
{
4418
  Output_data_dynamic* const odyn = this->dynamic_data_;
4419 159 khays
  if (odyn == NULL)
4420
    return;
4421 27 khays
  odyn->finalize_data_size();
4422 159 khays
  if (this->dynamic_symbol_ == NULL)
4423
    return;
4424 27 khays
  off_t data_size = odyn->data_size();
4425
  const int size = parameters->target().get_size();
4426
  if (size == 32)
4427
    symtab->get_sized_symbol<32>(this->dynamic_symbol_)->set_symsize(data_size);
4428
  else if (size == 64)
4429
    symtab->get_sized_symbol<64>(this->dynamic_symbol_)->set_symsize(data_size);
4430
  else
4431
    gold_unreachable();
4432
}
4433
 
4434
// The mapping of input section name prefixes to output section names.
4435
// In some cases one prefix is itself a prefix of another prefix; in
4436
// such a case the longer prefix must come first.  These prefixes are
4437
// based on the GNU linker default ELF linker script.
4438
 
4439
#define MAPPING_INIT(f, t) { f, sizeof(f) - 1, t, sizeof(t) - 1 }
4440
const Layout::Section_name_mapping Layout::section_name_mapping[] =
4441
{
4442
  MAPPING_INIT(".text.", ".text"),
4443
  MAPPING_INIT(".rodata.", ".rodata"),
4444
  MAPPING_INIT(".data.rel.ro.local", ".data.rel.ro.local"),
4445
  MAPPING_INIT(".data.rel.ro", ".data.rel.ro"),
4446
  MAPPING_INIT(".data.", ".data"),
4447
  MAPPING_INIT(".bss.", ".bss"),
4448
  MAPPING_INIT(".tdata.", ".tdata"),
4449
  MAPPING_INIT(".tbss.", ".tbss"),
4450
  MAPPING_INIT(".init_array.", ".init_array"),
4451
  MAPPING_INIT(".fini_array.", ".fini_array"),
4452
  MAPPING_INIT(".sdata.", ".sdata"),
4453
  MAPPING_INIT(".sbss.", ".sbss"),
4454
  // FIXME: In the GNU linker, .sbss2 and .sdata2 are handled
4455
  // differently depending on whether it is creating a shared library.
4456
  MAPPING_INIT(".sdata2.", ".sdata"),
4457
  MAPPING_INIT(".sbss2.", ".sbss"),
4458
  MAPPING_INIT(".lrodata.", ".lrodata"),
4459
  MAPPING_INIT(".ldata.", ".ldata"),
4460
  MAPPING_INIT(".lbss.", ".lbss"),
4461
  MAPPING_INIT(".gcc_except_table.", ".gcc_except_table"),
4462
  MAPPING_INIT(".gnu.linkonce.d.rel.ro.local.", ".data.rel.ro.local"),
4463
  MAPPING_INIT(".gnu.linkonce.d.rel.ro.", ".data.rel.ro"),
4464
  MAPPING_INIT(".gnu.linkonce.t.", ".text"),
4465
  MAPPING_INIT(".gnu.linkonce.r.", ".rodata"),
4466
  MAPPING_INIT(".gnu.linkonce.d.", ".data"),
4467
  MAPPING_INIT(".gnu.linkonce.b.", ".bss"),
4468
  MAPPING_INIT(".gnu.linkonce.s.", ".sdata"),
4469
  MAPPING_INIT(".gnu.linkonce.sb.", ".sbss"),
4470
  MAPPING_INIT(".gnu.linkonce.s2.", ".sdata"),
4471
  MAPPING_INIT(".gnu.linkonce.sb2.", ".sbss"),
4472
  MAPPING_INIT(".gnu.linkonce.wi.", ".debug_info"),
4473
  MAPPING_INIT(".gnu.linkonce.td.", ".tdata"),
4474
  MAPPING_INIT(".gnu.linkonce.tb.", ".tbss"),
4475
  MAPPING_INIT(".gnu.linkonce.lr.", ".lrodata"),
4476
  MAPPING_INIT(".gnu.linkonce.l.", ".ldata"),
4477
  MAPPING_INIT(".gnu.linkonce.lb.", ".lbss"),
4478
  MAPPING_INIT(".ARM.extab", ".ARM.extab"),
4479
  MAPPING_INIT(".gnu.linkonce.armextab.", ".ARM.extab"),
4480
  MAPPING_INIT(".ARM.exidx", ".ARM.exidx"),
4481
  MAPPING_INIT(".gnu.linkonce.armexidx.", ".ARM.exidx"),
4482
};
4483
#undef MAPPING_INIT
4484
 
4485
const int Layout::section_name_mapping_count =
4486
  (sizeof(Layout::section_name_mapping)
4487
   / sizeof(Layout::section_name_mapping[0]));
4488
 
4489
// Choose the output section name to use given an input section name.
4490
// Set *PLEN to the length of the name.  *PLEN is initialized to the
4491
// length of NAME.
4492
 
4493
const char*
4494 159 khays
Layout::output_section_name(const Relobj* relobj, const char* name,
4495
                            size_t* plen)
4496 27 khays
{
4497
  // gcc 4.3 generates the following sorts of section names when it
4498
  // needs a section name specific to a function:
4499
  //   .text.FN
4500
  //   .rodata.FN
4501
  //   .sdata2.FN
4502
  //   .data.FN
4503
  //   .data.rel.FN
4504
  //   .data.rel.local.FN
4505
  //   .data.rel.ro.FN
4506
  //   .data.rel.ro.local.FN
4507
  //   .sdata.FN
4508
  //   .bss.FN
4509
  //   .sbss.FN
4510
  //   .tdata.FN
4511
  //   .tbss.FN
4512
 
4513
  // The GNU linker maps all of those to the part before the .FN,
4514
  // except that .data.rel.local.FN is mapped to .data, and
4515
  // .data.rel.ro.local.FN is mapped to .data.rel.ro.  The sections
4516
  // beginning with .data.rel.ro.local are grouped together.
4517
 
4518
  // For an anonymous namespace, the string FN can contain a '.'.
4519
 
4520
  // Also of interest: .rodata.strN.N, .rodata.cstN, both of which the
4521
  // GNU linker maps to .rodata.
4522
 
4523
  // The .data.rel.ro sections are used with -z relro.  The sections
4524
  // are recognized by name.  We use the same names that the GNU
4525
  // linker does for these sections.
4526
 
4527
  // It is hard to handle this in a principled way, so we don't even
4528
  // try.  We use a table of mappings.  If the input section name is
4529
  // not found in the table, we simply use it as the output section
4530
  // name.
4531
 
4532
  const Section_name_mapping* psnm = section_name_mapping;
4533
  for (int i = 0; i < section_name_mapping_count; ++i, ++psnm)
4534
    {
4535
      if (strncmp(name, psnm->from, psnm->fromlen) == 0)
4536
        {
4537
          *plen = psnm->tolen;
4538
          return psnm->to;
4539
        }
4540
    }
4541
 
4542 159 khays
  // As an additional complication, .ctors sections are output in
4543
  // either .ctors or .init_array sections, and .dtors sections are
4544
  // output in either .dtors or .fini_array sections.
4545
  if (is_prefix_of(".ctors.", name) || is_prefix_of(".dtors.", name))
4546
    {
4547
      if (parameters->options().ctors_in_init_array())
4548
        {
4549
          *plen = 11;
4550
          return name[1] == 'c' ? ".init_array" : ".fini_array";
4551
        }
4552
      else
4553
        {
4554
          *plen = 6;
4555
          return name[1] == 'c' ? ".ctors" : ".dtors";
4556
        }
4557
    }
4558
  if (parameters->options().ctors_in_init_array()
4559
      && (strcmp(name, ".ctors") == 0 || strcmp(name, ".dtors") == 0))
4560
    {
4561
      // To make .init_array/.fini_array work with gcc we must exclude
4562
      // .ctors and .dtors sections from the crtbegin and crtend
4563
      // files.
4564
      if (relobj == NULL
4565
          || (!Layout::match_file_name(relobj, "crtbegin")
4566
              && !Layout::match_file_name(relobj, "crtend")))
4567
        {
4568
          *plen = 11;
4569
          return name[1] == 'c' ? ".init_array" : ".fini_array";
4570
        }
4571
    }
4572
 
4573 27 khays
  return name;
4574
}
4575
 
4576 159 khays
// Return true if RELOBJ is an input file whose base name matches
4577
// FILE_NAME.  The base name must have an extension of ".o", and must
4578
// be exactly FILE_NAME.o or FILE_NAME, one character, ".o".  This is
4579
// to match crtbegin.o as well as crtbeginS.o without getting confused
4580
// by other possibilities.  Overall matching the file name this way is
4581
// a dreadful hack, but the GNU linker does it in order to better
4582
// support gcc, and we need to be compatible.
4583
 
4584
bool
4585
Layout::match_file_name(const Relobj* relobj, const char* match)
4586
{
4587
  const std::string& file_name(relobj->name());
4588
  const char* base_name = lbasename(file_name.c_str());
4589
  size_t match_len = strlen(match);
4590
  if (strncmp(base_name, match, match_len) != 0)
4591
    return false;
4592
  size_t base_len = strlen(base_name);
4593
  if (base_len != match_len + 2 && base_len != match_len + 3)
4594
    return false;
4595
  return memcmp(base_name + base_len - 2, ".o", 2) == 0;
4596
}
4597
 
4598 27 khays
// Check if a comdat group or .gnu.linkonce section with the given
4599
// NAME is selected for the link.  If there is already a section,
4600
// *KEPT_SECTION is set to point to the existing section and the
4601
// function returns false.  Otherwise, OBJECT, SHNDX, IS_COMDAT, and
4602
// IS_GROUP_NAME are recorded for this NAME in the layout object,
4603
// *KEPT_SECTION is set to the internal copy and the function returns
4604
// true.
4605
 
4606
bool
4607
Layout::find_or_add_kept_section(const std::string& name,
4608
                                 Relobj* object,
4609
                                 unsigned int shndx,
4610
                                 bool is_comdat,
4611
                                 bool is_group_name,
4612
                                 Kept_section** kept_section)
4613
{
4614
  // It's normal to see a couple of entries here, for the x86 thunk
4615
  // sections.  If we see more than a few, we're linking a C++
4616
  // program, and we resize to get more space to minimize rehashing.
4617
  if (this->signatures_.size() > 4
4618
      && !this->resized_signatures_)
4619
    {
4620
      reserve_unordered_map(&this->signatures_,
4621
                            this->number_of_input_files_ * 64);
4622
      this->resized_signatures_ = true;
4623
    }
4624
 
4625
  Kept_section candidate;
4626
  std::pair<Signatures::iterator, bool> ins =
4627
    this->signatures_.insert(std::make_pair(name, candidate));
4628
 
4629
  if (kept_section != NULL)
4630
    *kept_section = &ins.first->second;
4631
  if (ins.second)
4632
    {
4633
      // This is the first time we've seen this signature.
4634
      ins.first->second.set_object(object);
4635
      ins.first->second.set_shndx(shndx);
4636
      if (is_comdat)
4637
        ins.first->second.set_is_comdat();
4638
      if (is_group_name)
4639
        ins.first->second.set_is_group_name();
4640
      return true;
4641
    }
4642
 
4643
  // We have already seen this signature.
4644
 
4645
  if (ins.first->second.is_group_name())
4646
    {
4647
      // We've already seen a real section group with this signature.
4648
      // If the kept group is from a plugin object, and we're in the
4649
      // replacement phase, accept the new one as a replacement.
4650
      if (ins.first->second.object() == NULL
4651
          && parameters->options().plugins()->in_replacement_phase())
4652
        {
4653
          ins.first->second.set_object(object);
4654
          ins.first->second.set_shndx(shndx);
4655
          return true;
4656
        }
4657
      return false;
4658
    }
4659
  else if (is_group_name)
4660
    {
4661
      // This is a real section group, and we've already seen a
4662
      // linkonce section with this signature.  Record that we've seen
4663
      // a section group, and don't include this section group.
4664
      ins.first->second.set_is_group_name();
4665
      return false;
4666
    }
4667
  else
4668
    {
4669
      // We've already seen a linkonce section and this is a linkonce
4670
      // section.  These don't block each other--this may be the same
4671
      // symbol name with different section types.
4672
      return true;
4673
    }
4674
}
4675
 
4676
// Store the allocated sections into the section list.
4677
 
4678
void
4679
Layout::get_allocated_sections(Section_list* section_list) const
4680
{
4681
  for (Section_list::const_iterator p = this->section_list_.begin();
4682
       p != this->section_list_.end();
4683
       ++p)
4684
    if (((*p)->flags() & elfcpp::SHF_ALLOC) != 0)
4685
      section_list->push_back(*p);
4686
}
4687
 
4688
// Create an output segment.
4689
 
4690
Output_segment*
4691
Layout::make_output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
4692
{
4693
  gold_assert(!parameters->options().relocatable());
4694
  Output_segment* oseg = new Output_segment(type, flags);
4695
  this->segment_list_.push_back(oseg);
4696
 
4697
  if (type == elfcpp::PT_TLS)
4698
    this->tls_segment_ = oseg;
4699
  else if (type == elfcpp::PT_GNU_RELRO)
4700
    this->relro_segment_ = oseg;
4701 159 khays
  else if (type == elfcpp::PT_INTERP)
4702
    this->interp_segment_ = oseg;
4703 27 khays
 
4704
  return oseg;
4705
}
4706
 
4707
// Return the file offset of the normal symbol table.
4708
 
4709
off_t
4710
Layout::symtab_section_offset() const
4711
{
4712
  if (this->symtab_section_ != NULL)
4713
    return this->symtab_section_->offset();
4714
  return 0;
4715
}
4716
 
4717 159 khays
// Return the section index of the normal symbol table.  It may have
4718
// been stripped by the -s/--strip-all option.
4719
 
4720
unsigned int
4721
Layout::symtab_section_shndx() const
4722
{
4723
  if (this->symtab_section_ != NULL)
4724
    return this->symtab_section_->out_shndx();
4725
  return 0;
4726
}
4727
 
4728 27 khays
// Write out the Output_sections.  Most won't have anything to write,
4729
// since most of the data will come from input sections which are
4730
// handled elsewhere.  But some Output_sections do have Output_data.
4731
 
4732
void
4733
Layout::write_output_sections(Output_file* of) const
4734
{
4735
  for (Section_list::const_iterator p = this->section_list_.begin();
4736
       p != this->section_list_.end();
4737
       ++p)
4738
    {
4739
      if (!(*p)->after_input_sections())
4740
        (*p)->write(of);
4741
    }
4742
}
4743
 
4744
// Write out data not associated with a section or the symbol table.
4745
 
4746
void
4747
Layout::write_data(const Symbol_table* symtab, Output_file* of) const
4748
{
4749
  if (!parameters->options().strip_all())
4750
    {
4751
      const Output_section* symtab_section = this->symtab_section_;
4752
      for (Section_list::const_iterator p = this->section_list_.begin();
4753
           p != this->section_list_.end();
4754
           ++p)
4755
        {
4756
          if ((*p)->needs_symtab_index())
4757
            {
4758
              gold_assert(symtab_section != NULL);
4759
              unsigned int index = (*p)->symtab_index();
4760
              gold_assert(index > 0 && index != -1U);
4761
              off_t off = (symtab_section->offset()
4762
                           + index * symtab_section->entsize());
4763
              symtab->write_section_symbol(*p, this->symtab_xindex_, of, off);
4764
            }
4765
        }
4766
    }
4767
 
4768
  const Output_section* dynsym_section = this->dynsym_section_;
4769
  for (Section_list::const_iterator p = this->section_list_.begin();
4770
       p != this->section_list_.end();
4771
       ++p)
4772
    {
4773
      if ((*p)->needs_dynsym_index())
4774
        {
4775
          gold_assert(dynsym_section != NULL);
4776
          unsigned int index = (*p)->dynsym_index();
4777
          gold_assert(index > 0 && index != -1U);
4778
          off_t off = (dynsym_section->offset()
4779
                       + index * dynsym_section->entsize());
4780
          symtab->write_section_symbol(*p, this->dynsym_xindex_, of, off);
4781
        }
4782
    }
4783
 
4784
  // Write out the Output_data which are not in an Output_section.
4785
  for (Data_list::const_iterator p = this->special_output_list_.begin();
4786
       p != this->special_output_list_.end();
4787
       ++p)
4788
    (*p)->write(of);
4789
}
4790
 
4791
// Write out the Output_sections which can only be written after the
4792
// input sections are complete.
4793
 
4794
void
4795
Layout::write_sections_after_input_sections(Output_file* of)
4796
{
4797
  // Determine the final section offsets, and thus the final output
4798
  // file size.  Note we finalize the .shstrab last, to allow the
4799
  // after_input_section sections to modify their section-names before
4800
  // writing.
4801
  if (this->any_postprocessing_sections_)
4802
    {
4803
      off_t off = this->output_file_size_;
4804
      off = this->set_section_offsets(off, POSTPROCESSING_SECTIONS_PASS);
4805
 
4806
      // Now that we've finalized the names, we can finalize the shstrab.
4807
      off =
4808
        this->set_section_offsets(off,
4809
                                  STRTAB_AFTER_POSTPROCESSING_SECTIONS_PASS);
4810
 
4811
      if (off > this->output_file_size_)
4812
        {
4813
          of->resize(off);
4814
          this->output_file_size_ = off;
4815
        }
4816
    }
4817
 
4818
  for (Section_list::const_iterator p = this->section_list_.begin();
4819
       p != this->section_list_.end();
4820
       ++p)
4821
    {
4822
      if ((*p)->after_input_sections())
4823
        (*p)->write(of);
4824
    }
4825
 
4826
  this->section_headers_->write(of);
4827
}
4828
 
4829
// If the build ID requires computing a checksum, do so here, and
4830
// write it out.  We compute a checksum over the entire file because
4831
// that is simplest.
4832
 
4833
void
4834
Layout::write_build_id(Output_file* of) const
4835
{
4836
  if (this->build_id_note_ == NULL)
4837
    return;
4838
 
4839
  const unsigned char* iv = of->get_input_view(0, this->output_file_size_);
4840
 
4841
  unsigned char* ov = of->get_output_view(this->build_id_note_->offset(),
4842
                                          this->build_id_note_->data_size());
4843
 
4844
  const char* style = parameters->options().build_id();
4845
  if (strcmp(style, "sha1") == 0)
4846
    {
4847
      sha1_ctx ctx;
4848
      sha1_init_ctx(&ctx);
4849
      sha1_process_bytes(iv, this->output_file_size_, &ctx);
4850
      sha1_finish_ctx(&ctx, ov);
4851
    }
4852
  else if (strcmp(style, "md5") == 0)
4853
    {
4854
      md5_ctx ctx;
4855
      md5_init_ctx(&ctx);
4856
      md5_process_bytes(iv, this->output_file_size_, &ctx);
4857
      md5_finish_ctx(&ctx, ov);
4858
    }
4859
  else
4860
    gold_unreachable();
4861
 
4862
  of->write_output_view(this->build_id_note_->offset(),
4863
                        this->build_id_note_->data_size(),
4864
                        ov);
4865
 
4866
  of->free_input_view(0, this->output_file_size_, iv);
4867
}
4868
 
4869
// Write out a binary file.  This is called after the link is
4870
// complete.  IN is the temporary output file we used to generate the
4871
// ELF code.  We simply walk through the segments, read them from
4872
// their file offset in IN, and write them to their load address in
4873
// the output file.  FIXME: with a bit more work, we could support
4874
// S-records and/or Intel hex format here.
4875
 
4876
void
4877
Layout::write_binary(Output_file* in) const
4878
{
4879
  gold_assert(parameters->options().oformat_enum()
4880
              == General_options::OBJECT_FORMAT_BINARY);
4881
 
4882
  // Get the size of the binary file.
4883
  uint64_t max_load_address = 0;
4884
  for (Segment_list::const_iterator p = this->segment_list_.begin();
4885
       p != this->segment_list_.end();
4886
       ++p)
4887
    {
4888
      if ((*p)->type() == elfcpp::PT_LOAD && (*p)->filesz() > 0)
4889
        {
4890
          uint64_t max_paddr = (*p)->paddr() + (*p)->filesz();
4891
          if (max_paddr > max_load_address)
4892
            max_load_address = max_paddr;
4893
        }
4894
    }
4895
 
4896
  Output_file out(parameters->options().output_file_name());
4897
  out.open(max_load_address);
4898
 
4899
  for (Segment_list::const_iterator p = this->segment_list_.begin();
4900
       p != this->segment_list_.end();
4901
       ++p)
4902
    {
4903
      if ((*p)->type() == elfcpp::PT_LOAD && (*p)->filesz() > 0)
4904
        {
4905
          const unsigned char* vin = in->get_input_view((*p)->offset(),
4906
                                                        (*p)->filesz());
4907
          unsigned char* vout = out.get_output_view((*p)->paddr(),
4908
                                                    (*p)->filesz());
4909
          memcpy(vout, vin, (*p)->filesz());
4910
          out.write_output_view((*p)->paddr(), (*p)->filesz(), vout);
4911
          in->free_input_view((*p)->offset(), (*p)->filesz(), vin);
4912
        }
4913
    }
4914
 
4915
  out.close();
4916
}
4917
 
4918
// Print the output sections to the map file.
4919
 
4920
void
4921
Layout::print_to_mapfile(Mapfile* mapfile) const
4922
{
4923
  for (Segment_list::const_iterator p = this->segment_list_.begin();
4924
       p != this->segment_list_.end();
4925
       ++p)
4926
    (*p)->print_sections_to_mapfile(mapfile);
4927
}
4928
 
4929
// Print statistical information to stderr.  This is used for --stats.
4930
 
4931
void
4932
Layout::print_stats() const
4933
{
4934
  this->namepool_.print_stats("section name pool");
4935
  this->sympool_.print_stats("output symbol name pool");
4936
  this->dynpool_.print_stats("dynamic name pool");
4937
 
4938
  for (Section_list::const_iterator p = this->section_list_.begin();
4939
       p != this->section_list_.end();
4940
       ++p)
4941
    (*p)->print_merge_stats();
4942
}
4943
 
4944
// Write_sections_task methods.
4945
 
4946
// We can always run this task.
4947
 
4948
Task_token*
4949
Write_sections_task::is_runnable()
4950
{
4951
  return NULL;
4952
}
4953
 
4954
// We need to unlock both OUTPUT_SECTIONS_BLOCKER and FINAL_BLOCKER
4955
// when finished.
4956
 
4957
void
4958
Write_sections_task::locks(Task_locker* tl)
4959
{
4960
  tl->add(this, this->output_sections_blocker_);
4961
  tl->add(this, this->final_blocker_);
4962
}
4963
 
4964
// Run the task--write out the data.
4965
 
4966
void
4967
Write_sections_task::run(Workqueue*)
4968
{
4969
  this->layout_->write_output_sections(this->of_);
4970
}
4971
 
4972
// Write_data_task methods.
4973
 
4974
// We can always run this task.
4975
 
4976
Task_token*
4977
Write_data_task::is_runnable()
4978
{
4979
  return NULL;
4980
}
4981
 
4982
// We need to unlock FINAL_BLOCKER when finished.
4983
 
4984
void
4985
Write_data_task::locks(Task_locker* tl)
4986
{
4987
  tl->add(this, this->final_blocker_);
4988
}
4989
 
4990
// Run the task--write out the data.
4991
 
4992
void
4993
Write_data_task::run(Workqueue*)
4994
{
4995
  this->layout_->write_data(this->symtab_, this->of_);
4996
}
4997
 
4998
// Write_symbols_task methods.
4999
 
5000
// We can always run this task.
5001
 
5002
Task_token*
5003
Write_symbols_task::is_runnable()
5004
{
5005
  return NULL;
5006
}
5007
 
5008
// We need to unlock FINAL_BLOCKER when finished.
5009
 
5010
void
5011
Write_symbols_task::locks(Task_locker* tl)
5012
{
5013
  tl->add(this, this->final_blocker_);
5014
}
5015
 
5016
// Run the task--write out the symbols.
5017
 
5018
void
5019
Write_symbols_task::run(Workqueue*)
5020
{
5021
  this->symtab_->write_globals(this->sympool_, this->dynpool_,
5022
                               this->layout_->symtab_xindex(),
5023
                               this->layout_->dynsym_xindex(), this->of_);
5024
}
5025
 
5026
// Write_after_input_sections_task methods.
5027
 
5028
// We can only run this task after the input sections have completed.
5029
 
5030
Task_token*
5031
Write_after_input_sections_task::is_runnable()
5032
{
5033
  if (this->input_sections_blocker_->is_blocked())
5034
    return this->input_sections_blocker_;
5035
  return NULL;
5036
}
5037
 
5038
// We need to unlock FINAL_BLOCKER when finished.
5039
 
5040
void
5041
Write_after_input_sections_task::locks(Task_locker* tl)
5042
{
5043
  tl->add(this, this->final_blocker_);
5044
}
5045
 
5046
// Run the task.
5047
 
5048
void
5049
Write_after_input_sections_task::run(Workqueue*)
5050
{
5051
  this->layout_->write_sections_after_input_sections(this->of_);
5052
}
5053
 
5054
// Close_task_runner methods.
5055
 
5056
// Run the task--close the file.
5057
 
5058
void
5059
Close_task_runner::run(Workqueue*, const Task*)
5060
{
5061
  // If we need to compute a checksum for the BUILD if, we do so here.
5062
  this->layout_->write_build_id(this->of_);
5063
 
5064
  // If we've been asked to create a binary file, we do so here.
5065
  if (this->options_->oformat_enum() != General_options::OBJECT_FORMAT_ELF)
5066
    this->layout_->write_binary(this->of_);
5067
 
5068
  this->of_->close();
5069
}
5070
 
5071
// Instantiate the templates we need.  We could use the configure
5072
// script to restrict this to only the ones for implemented targets.
5073
 
5074
#ifdef HAVE_TARGET_32_LITTLE
5075
template
5076
Output_section*
5077
Layout::init_fixed_output_section<32, false>(
5078
    const char* name,
5079
    elfcpp::Shdr<32, false>& shdr);
5080
#endif
5081
 
5082
#ifdef HAVE_TARGET_32_BIG
5083
template
5084
Output_section*
5085
Layout::init_fixed_output_section<32, true>(
5086
    const char* name,
5087
    elfcpp::Shdr<32, true>& shdr);
5088
#endif
5089
 
5090
#ifdef HAVE_TARGET_64_LITTLE
5091
template
5092
Output_section*
5093
Layout::init_fixed_output_section<64, false>(
5094
    const char* name,
5095
    elfcpp::Shdr<64, false>& shdr);
5096
#endif
5097
 
5098
#ifdef HAVE_TARGET_64_BIG
5099
template
5100
Output_section*
5101
Layout::init_fixed_output_section<64, true>(
5102
    const char* name,
5103
    elfcpp::Shdr<64, true>& shdr);
5104
#endif
5105
 
5106
#ifdef HAVE_TARGET_32_LITTLE
5107
template
5108
Output_section*
5109
Layout::layout<32, false>(Sized_relobj_file<32, false>* object,
5110
                          unsigned int shndx,
5111
                          const char* name,
5112
                          const elfcpp::Shdr<32, false>& shdr,
5113
                          unsigned int, unsigned int, off_t*);
5114
#endif
5115
 
5116
#ifdef HAVE_TARGET_32_BIG
5117
template
5118
Output_section*
5119
Layout::layout<32, true>(Sized_relobj_file<32, true>* object,
5120
                         unsigned int shndx,
5121
                         const char* name,
5122
                         const elfcpp::Shdr<32, true>& shdr,
5123
                         unsigned int, unsigned int, off_t*);
5124
#endif
5125
 
5126
#ifdef HAVE_TARGET_64_LITTLE
5127
template
5128
Output_section*
5129
Layout::layout<64, false>(Sized_relobj_file<64, false>* object,
5130
                          unsigned int shndx,
5131
                          const char* name,
5132
                          const elfcpp::Shdr<64, false>& shdr,
5133
                          unsigned int, unsigned int, off_t*);
5134
#endif
5135
 
5136
#ifdef HAVE_TARGET_64_BIG
5137
template
5138
Output_section*
5139
Layout::layout<64, true>(Sized_relobj_file<64, true>* object,
5140
                         unsigned int shndx,
5141
                         const char* name,
5142
                         const elfcpp::Shdr<64, true>& shdr,
5143
                         unsigned int, unsigned int, off_t*);
5144
#endif
5145
 
5146
#ifdef HAVE_TARGET_32_LITTLE
5147
template
5148
Output_section*
5149
Layout::layout_reloc<32, false>(Sized_relobj_file<32, false>* object,
5150
                                unsigned int reloc_shndx,
5151
                                const elfcpp::Shdr<32, false>& shdr,
5152
                                Output_section* data_section,
5153
                                Relocatable_relocs* rr);
5154
#endif
5155
 
5156
#ifdef HAVE_TARGET_32_BIG
5157
template
5158
Output_section*
5159
Layout::layout_reloc<32, true>(Sized_relobj_file<32, true>* object,
5160
                               unsigned int reloc_shndx,
5161
                               const elfcpp::Shdr<32, true>& shdr,
5162
                               Output_section* data_section,
5163
                               Relocatable_relocs* rr);
5164
#endif
5165
 
5166
#ifdef HAVE_TARGET_64_LITTLE
5167
template
5168
Output_section*
5169
Layout::layout_reloc<64, false>(Sized_relobj_file<64, false>* object,
5170
                                unsigned int reloc_shndx,
5171
                                const elfcpp::Shdr<64, false>& shdr,
5172
                                Output_section* data_section,
5173
                                Relocatable_relocs* rr);
5174
#endif
5175
 
5176
#ifdef HAVE_TARGET_64_BIG
5177
template
5178
Output_section*
5179
Layout::layout_reloc<64, true>(Sized_relobj_file<64, true>* object,
5180
                               unsigned int reloc_shndx,
5181
                               const elfcpp::Shdr<64, true>& shdr,
5182
                               Output_section* data_section,
5183
                               Relocatable_relocs* rr);
5184
#endif
5185
 
5186
#ifdef HAVE_TARGET_32_LITTLE
5187
template
5188
void
5189
Layout::layout_group<32, false>(Symbol_table* symtab,
5190
                                Sized_relobj_file<32, false>* object,
5191
                                unsigned int,
5192
                                const char* group_section_name,
5193
                                const char* signature,
5194
                                const elfcpp::Shdr<32, false>& shdr,
5195
                                elfcpp::Elf_Word flags,
5196
                                std::vector<unsigned int>* shndxes);
5197
#endif
5198
 
5199
#ifdef HAVE_TARGET_32_BIG
5200
template
5201
void
5202
Layout::layout_group<32, true>(Symbol_table* symtab,
5203
                               Sized_relobj_file<32, true>* object,
5204
                               unsigned int,
5205
                               const char* group_section_name,
5206
                               const char* signature,
5207
                               const elfcpp::Shdr<32, true>& shdr,
5208
                               elfcpp::Elf_Word flags,
5209
                               std::vector<unsigned int>* shndxes);
5210
#endif
5211
 
5212
#ifdef HAVE_TARGET_64_LITTLE
5213
template
5214
void
5215
Layout::layout_group<64, false>(Symbol_table* symtab,
5216
                                Sized_relobj_file<64, false>* object,
5217
                                unsigned int,
5218
                                const char* group_section_name,
5219
                                const char* signature,
5220
                                const elfcpp::Shdr<64, false>& shdr,
5221
                                elfcpp::Elf_Word flags,
5222
                                std::vector<unsigned int>* shndxes);
5223
#endif
5224
 
5225
#ifdef HAVE_TARGET_64_BIG
5226
template
5227
void
5228
Layout::layout_group<64, true>(Symbol_table* symtab,
5229
                               Sized_relobj_file<64, true>* object,
5230
                               unsigned int,
5231
                               const char* group_section_name,
5232
                               const char* signature,
5233
                               const elfcpp::Shdr<64, true>& shdr,
5234
                               elfcpp::Elf_Word flags,
5235
                               std::vector<unsigned int>* shndxes);
5236
#endif
5237
 
5238
#ifdef HAVE_TARGET_32_LITTLE
5239
template
5240
Output_section*
5241
Layout::layout_eh_frame<32, false>(Sized_relobj_file<32, false>* object,
5242
                                   const unsigned char* symbols,
5243
                                   off_t symbols_size,
5244
                                   const unsigned char* symbol_names,
5245
                                   off_t symbol_names_size,
5246
                                   unsigned int shndx,
5247
                                   const elfcpp::Shdr<32, false>& shdr,
5248
                                   unsigned int reloc_shndx,
5249
                                   unsigned int reloc_type,
5250
                                   off_t* off);
5251
#endif
5252
 
5253
#ifdef HAVE_TARGET_32_BIG
5254
template
5255
Output_section*
5256
Layout::layout_eh_frame<32, true>(Sized_relobj_file<32, true>* object,
5257
                                  const unsigned char* symbols,
5258
                                  off_t symbols_size,
5259
                                  const unsigned char* symbol_names,
5260
                                  off_t symbol_names_size,
5261
                                  unsigned int shndx,
5262
                                  const elfcpp::Shdr<32, true>& shdr,
5263
                                  unsigned int reloc_shndx,
5264
                                  unsigned int reloc_type,
5265
                                  off_t* off);
5266
#endif
5267
 
5268
#ifdef HAVE_TARGET_64_LITTLE
5269
template
5270
Output_section*
5271
Layout::layout_eh_frame<64, false>(Sized_relobj_file<64, false>* object,
5272
                                   const unsigned char* symbols,
5273
                                   off_t symbols_size,
5274
                                   const unsigned char* symbol_names,
5275
                                   off_t symbol_names_size,
5276
                                   unsigned int shndx,
5277
                                   const elfcpp::Shdr<64, false>& shdr,
5278
                                   unsigned int reloc_shndx,
5279
                                   unsigned int reloc_type,
5280
                                   off_t* off);
5281
#endif
5282
 
5283
#ifdef HAVE_TARGET_64_BIG
5284
template
5285
Output_section*
5286
Layout::layout_eh_frame<64, true>(Sized_relobj_file<64, true>* object,
5287
                                  const unsigned char* symbols,
5288
                                  off_t symbols_size,
5289
                                  const unsigned char* symbol_names,
5290
                                  off_t symbol_names_size,
5291
                                  unsigned int shndx,
5292
                                  const elfcpp::Shdr<64, true>& shdr,
5293
                                  unsigned int reloc_shndx,
5294
                                  unsigned int reloc_type,
5295
                                  off_t* off);
5296
#endif
5297
 
5298
} // End namespace gold.

powered by: WebSVN 2.1.0

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