OSDN Git Service

daily update
[pf3gnuchains/pf3gnuchains3x.git] / gold / output.cc
1 // output.cc -- manage the output file for gold
2
3 // Copyright 2006, 2007, 2008, 2009 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 <cstdlib>
26 #include <cstring>
27 #include <cerrno>
28 #include <fcntl.h>
29 #include <unistd.h>
30 #include <sys/mman.h>
31 #include <sys/stat.h>
32 #include <algorithm>
33 #include "libiberty.h"
34
35 #include "parameters.h"
36 #include "object.h"
37 #include "symtab.h"
38 #include "reloc.h"
39 #include "merge.h"
40 #include "descriptors.h"
41 #include "output.h"
42
43 // Some BSD systems still use MAP_ANON instead of MAP_ANONYMOUS
44 #ifndef MAP_ANONYMOUS
45 # define MAP_ANONYMOUS  MAP_ANON
46 #endif
47
48 #ifndef HAVE_POSIX_FALLOCATE
49 // A dummy, non general, version of posix_fallocate.  Here we just set
50 // the file size and hope that there is enough disk space.  FIXME: We
51 // could allocate disk space by walking block by block and writing a
52 // zero byte into each block.
53 static int
54 posix_fallocate(int o, off_t offset, off_t len)
55 {
56   return ftruncate(o, offset + len);
57 }
58 #endif // !defined(HAVE_POSIX_FALLOCATE)
59
60 namespace gold
61 {
62
63 // Output_data variables.
64
65 bool Output_data::allocated_sizes_are_fixed;
66
67 // Output_data methods.
68
69 Output_data::~Output_data()
70 {
71 }
72
73 // Return the default alignment for the target size.
74
75 uint64_t
76 Output_data::default_alignment()
77 {
78   return Output_data::default_alignment_for_size(
79       parameters->target().get_size());
80 }
81
82 // Return the default alignment for a size--32 or 64.
83
84 uint64_t
85 Output_data::default_alignment_for_size(int size)
86 {
87   if (size == 32)
88     return 4;
89   else if (size == 64)
90     return 8;
91   else
92     gold_unreachable();
93 }
94
95 // Output_section_header methods.  This currently assumes that the
96 // segment and section lists are complete at construction time.
97
98 Output_section_headers::Output_section_headers(
99     const Layout* layout,
100     const Layout::Segment_list* segment_list,
101     const Layout::Section_list* section_list,
102     const Layout::Section_list* unattached_section_list,
103     const Stringpool* secnamepool,
104     const Output_section* shstrtab_section)
105   : layout_(layout),
106     segment_list_(segment_list),
107     section_list_(section_list),
108     unattached_section_list_(unattached_section_list),
109     secnamepool_(secnamepool),
110     shstrtab_section_(shstrtab_section)
111 {
112 }
113
114 // Compute the current data size.
115
116 off_t
117 Output_section_headers::do_size() const
118 {
119   // Count all the sections.  Start with 1 for the null section.
120   off_t count = 1;
121   if (!parameters->options().relocatable())
122     {
123       for (Layout::Segment_list::const_iterator p =
124              this->segment_list_->begin();
125            p != this->segment_list_->end();
126            ++p)
127         if ((*p)->type() == elfcpp::PT_LOAD)
128           count += (*p)->output_section_count();
129     }
130   else
131     {
132       for (Layout::Section_list::const_iterator p =
133              this->section_list_->begin();
134            p != this->section_list_->end();
135            ++p)
136         if (((*p)->flags() & elfcpp::SHF_ALLOC) != 0)
137           ++count;
138     }
139   count += this->unattached_section_list_->size();
140
141   const int size = parameters->target().get_size();
142   int shdr_size;
143   if (size == 32)
144     shdr_size = elfcpp::Elf_sizes<32>::shdr_size;
145   else if (size == 64)
146     shdr_size = elfcpp::Elf_sizes<64>::shdr_size;
147   else
148     gold_unreachable();
149
150   return count * shdr_size;
151 }
152
153 // Write out the section headers.
154
155 void
156 Output_section_headers::do_write(Output_file* of)
157 {
158   switch (parameters->size_and_endianness())
159     {
160 #ifdef HAVE_TARGET_32_LITTLE
161     case Parameters::TARGET_32_LITTLE:
162       this->do_sized_write<32, false>(of);
163       break;
164 #endif
165 #ifdef HAVE_TARGET_32_BIG
166     case Parameters::TARGET_32_BIG:
167       this->do_sized_write<32, true>(of);
168       break;
169 #endif
170 #ifdef HAVE_TARGET_64_LITTLE
171     case Parameters::TARGET_64_LITTLE:
172       this->do_sized_write<64, false>(of);
173       break;
174 #endif
175 #ifdef HAVE_TARGET_64_BIG
176     case Parameters::TARGET_64_BIG:
177       this->do_sized_write<64, true>(of);
178       break;
179 #endif
180     default:
181       gold_unreachable();
182     }
183 }
184
185 template<int size, bool big_endian>
186 void
187 Output_section_headers::do_sized_write(Output_file* of)
188 {
189   off_t all_shdrs_size = this->data_size();
190   unsigned char* view = of->get_output_view(this->offset(), all_shdrs_size);
191
192   const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
193   unsigned char* v = view;
194
195   {
196     typename elfcpp::Shdr_write<size, big_endian> oshdr(v);
197     oshdr.put_sh_name(0);
198     oshdr.put_sh_type(elfcpp::SHT_NULL);
199     oshdr.put_sh_flags(0);
200     oshdr.put_sh_addr(0);
201     oshdr.put_sh_offset(0);
202
203     size_t section_count = (this->data_size()
204                             / elfcpp::Elf_sizes<size>::shdr_size);
205     if (section_count < elfcpp::SHN_LORESERVE)
206       oshdr.put_sh_size(0);
207     else
208       oshdr.put_sh_size(section_count);
209
210     unsigned int shstrndx = this->shstrtab_section_->out_shndx();
211     if (shstrndx < elfcpp::SHN_LORESERVE)
212       oshdr.put_sh_link(0);
213     else
214       oshdr.put_sh_link(shstrndx);
215
216     oshdr.put_sh_info(0);
217     oshdr.put_sh_addralign(0);
218     oshdr.put_sh_entsize(0);
219   }
220
221   v += shdr_size;
222
223   unsigned int shndx = 1;
224   if (!parameters->options().relocatable())
225     {
226       for (Layout::Segment_list::const_iterator p =
227              this->segment_list_->begin();
228            p != this->segment_list_->end();
229            ++p)
230         v = (*p)->write_section_headers<size, big_endian>(this->layout_,
231                                                           this->secnamepool_,
232                                                           v,
233                                                           &shndx);
234     }
235   else
236     {
237       for (Layout::Section_list::const_iterator p =
238              this->section_list_->begin();
239            p != this->section_list_->end();
240            ++p)
241         {
242           // We do unallocated sections below, except that group
243           // sections have to come first.
244           if (((*p)->flags() & elfcpp::SHF_ALLOC) == 0
245               && (*p)->type() != elfcpp::SHT_GROUP)
246             continue;
247           gold_assert(shndx == (*p)->out_shndx());
248           elfcpp::Shdr_write<size, big_endian> oshdr(v);
249           (*p)->write_header(this->layout_, this->secnamepool_, &oshdr);
250           v += shdr_size;
251           ++shndx;
252         }
253     }
254
255   for (Layout::Section_list::const_iterator p =
256          this->unattached_section_list_->begin();
257        p != this->unattached_section_list_->end();
258        ++p)
259     {
260       // For a relocatable link, we did unallocated group sections
261       // above, since they have to come first.
262       if ((*p)->type() == elfcpp::SHT_GROUP
263           && parameters->options().relocatable())
264         continue;
265       gold_assert(shndx == (*p)->out_shndx());
266       elfcpp::Shdr_write<size, big_endian> oshdr(v);
267       (*p)->write_header(this->layout_, this->secnamepool_, &oshdr);
268       v += shdr_size;
269       ++shndx;
270     }
271
272   of->write_output_view(this->offset(), all_shdrs_size, view);
273 }
274
275 // Output_segment_header methods.
276
277 Output_segment_headers::Output_segment_headers(
278     const Layout::Segment_list& segment_list)
279   : segment_list_(segment_list)
280 {
281 }
282
283 void
284 Output_segment_headers::do_write(Output_file* of)
285 {
286   switch (parameters->size_and_endianness())
287     {
288 #ifdef HAVE_TARGET_32_LITTLE
289     case Parameters::TARGET_32_LITTLE:
290       this->do_sized_write<32, false>(of);
291       break;
292 #endif
293 #ifdef HAVE_TARGET_32_BIG
294     case Parameters::TARGET_32_BIG:
295       this->do_sized_write<32, true>(of);
296       break;
297 #endif
298 #ifdef HAVE_TARGET_64_LITTLE
299     case Parameters::TARGET_64_LITTLE:
300       this->do_sized_write<64, false>(of);
301       break;
302 #endif
303 #ifdef HAVE_TARGET_64_BIG
304     case Parameters::TARGET_64_BIG:
305       this->do_sized_write<64, true>(of);
306       break;
307 #endif
308     default:
309       gold_unreachable();
310     }
311 }
312
313 template<int size, bool big_endian>
314 void
315 Output_segment_headers::do_sized_write(Output_file* of)
316 {
317   const int phdr_size = elfcpp::Elf_sizes<size>::phdr_size;
318   off_t all_phdrs_size = this->segment_list_.size() * phdr_size;
319   gold_assert(all_phdrs_size == this->data_size());
320   unsigned char* view = of->get_output_view(this->offset(),
321                                             all_phdrs_size);
322   unsigned char* v = view;
323   for (Layout::Segment_list::const_iterator p = this->segment_list_.begin();
324        p != this->segment_list_.end();
325        ++p)
326     {
327       elfcpp::Phdr_write<size, big_endian> ophdr(v);
328       (*p)->write_header(&ophdr);
329       v += phdr_size;
330     }
331
332   gold_assert(v - view == all_phdrs_size);
333
334   of->write_output_view(this->offset(), all_phdrs_size, view);
335 }
336
337 off_t
338 Output_segment_headers::do_size() const
339 {
340   const int size = parameters->target().get_size();
341   int phdr_size;
342   if (size == 32)
343     phdr_size = elfcpp::Elf_sizes<32>::phdr_size;
344   else if (size == 64)
345     phdr_size = elfcpp::Elf_sizes<64>::phdr_size;
346   else
347     gold_unreachable();
348
349   return this->segment_list_.size() * phdr_size;
350 }
351
352 // Output_file_header methods.
353
354 Output_file_header::Output_file_header(const Target* target,
355                                        const Symbol_table* symtab,
356                                        const Output_segment_headers* osh,
357                                        const char* entry)
358   : target_(target),
359     symtab_(symtab),
360     segment_header_(osh),
361     section_header_(NULL),
362     shstrtab_(NULL),
363     entry_(entry)
364 {
365   this->set_data_size(this->do_size());
366 }
367
368 // Set the section table information for a file header.
369
370 void
371 Output_file_header::set_section_info(const Output_section_headers* shdrs,
372                                      const Output_section* shstrtab)
373 {
374   this->section_header_ = shdrs;
375   this->shstrtab_ = shstrtab;
376 }
377
378 // Write out the file header.
379
380 void
381 Output_file_header::do_write(Output_file* of)
382 {
383   gold_assert(this->offset() == 0);
384
385   switch (parameters->size_and_endianness())
386     {
387 #ifdef HAVE_TARGET_32_LITTLE
388     case Parameters::TARGET_32_LITTLE:
389       this->do_sized_write<32, false>(of);
390       break;
391 #endif
392 #ifdef HAVE_TARGET_32_BIG
393     case Parameters::TARGET_32_BIG:
394       this->do_sized_write<32, true>(of);
395       break;
396 #endif
397 #ifdef HAVE_TARGET_64_LITTLE
398     case Parameters::TARGET_64_LITTLE:
399       this->do_sized_write<64, false>(of);
400       break;
401 #endif
402 #ifdef HAVE_TARGET_64_BIG
403     case Parameters::TARGET_64_BIG:
404       this->do_sized_write<64, true>(of);
405       break;
406 #endif
407     default:
408       gold_unreachable();
409     }
410 }
411
412 // Write out the file header with appropriate size and endianess.
413
414 template<int size, bool big_endian>
415 void
416 Output_file_header::do_sized_write(Output_file* of)
417 {
418   gold_assert(this->offset() == 0);
419
420   int ehdr_size = elfcpp::Elf_sizes<size>::ehdr_size;
421   unsigned char* view = of->get_output_view(0, ehdr_size);
422   elfcpp::Ehdr_write<size, big_endian> oehdr(view);
423
424   unsigned char e_ident[elfcpp::EI_NIDENT];
425   memset(e_ident, 0, elfcpp::EI_NIDENT);
426   e_ident[elfcpp::EI_MAG0] = elfcpp::ELFMAG0;
427   e_ident[elfcpp::EI_MAG1] = elfcpp::ELFMAG1;
428   e_ident[elfcpp::EI_MAG2] = elfcpp::ELFMAG2;
429   e_ident[elfcpp::EI_MAG3] = elfcpp::ELFMAG3;
430   if (size == 32)
431     e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS32;
432   else if (size == 64)
433     e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS64;
434   else
435     gold_unreachable();
436   e_ident[elfcpp::EI_DATA] = (big_endian
437                               ? elfcpp::ELFDATA2MSB
438                               : elfcpp::ELFDATA2LSB);
439   e_ident[elfcpp::EI_VERSION] = elfcpp::EV_CURRENT;
440   oehdr.put_e_ident(e_ident);
441
442   elfcpp::ET e_type;
443   if (parameters->options().relocatable())
444     e_type = elfcpp::ET_REL;
445   else if (parameters->options().output_is_position_independent())
446     e_type = elfcpp::ET_DYN;
447   else
448     e_type = elfcpp::ET_EXEC;
449   oehdr.put_e_type(e_type);
450
451   oehdr.put_e_machine(this->target_->machine_code());
452   oehdr.put_e_version(elfcpp::EV_CURRENT);
453
454   oehdr.put_e_entry(this->entry<size>());
455
456   if (this->segment_header_ == NULL)
457     oehdr.put_e_phoff(0);
458   else
459     oehdr.put_e_phoff(this->segment_header_->offset());
460
461   oehdr.put_e_shoff(this->section_header_->offset());
462   oehdr.put_e_flags(this->target_->processor_specific_flags());
463   oehdr.put_e_ehsize(elfcpp::Elf_sizes<size>::ehdr_size);
464
465   if (this->segment_header_ == NULL)
466     {
467       oehdr.put_e_phentsize(0);
468       oehdr.put_e_phnum(0);
469     }
470   else
471     {
472       oehdr.put_e_phentsize(elfcpp::Elf_sizes<size>::phdr_size);
473       oehdr.put_e_phnum(this->segment_header_->data_size()
474                         / elfcpp::Elf_sizes<size>::phdr_size);
475     }
476
477   oehdr.put_e_shentsize(elfcpp::Elf_sizes<size>::shdr_size);
478   size_t section_count = (this->section_header_->data_size()
479                           / elfcpp::Elf_sizes<size>::shdr_size);
480
481   if (section_count < elfcpp::SHN_LORESERVE)
482     oehdr.put_e_shnum(this->section_header_->data_size()
483                       / elfcpp::Elf_sizes<size>::shdr_size);
484   else
485     oehdr.put_e_shnum(0);
486
487   unsigned int shstrndx = this->shstrtab_->out_shndx();
488   if (shstrndx < elfcpp::SHN_LORESERVE)
489     oehdr.put_e_shstrndx(this->shstrtab_->out_shndx());
490   else
491     oehdr.put_e_shstrndx(elfcpp::SHN_XINDEX);
492
493   // Let the target adjust the ELF header, e.g., to set EI_OSABI in
494   // the e_ident field.
495   parameters->target().adjust_elf_header(view, ehdr_size);
496
497   of->write_output_view(0, ehdr_size, view);
498 }
499
500 // Return the value to use for the entry address.  THIS->ENTRY_ is the
501 // symbol specified on the command line, if any.
502
503 template<int size>
504 typename elfcpp::Elf_types<size>::Elf_Addr
505 Output_file_header::entry()
506 {
507   const bool should_issue_warning = (this->entry_ != NULL
508                                      && !parameters->options().relocatable()
509                                      && !parameters->options().shared());
510
511   // FIXME: Need to support target specific entry symbol.
512   const char* entry = this->entry_;
513   if (entry == NULL)
514     entry = "_start";
515
516   Symbol* sym = this->symtab_->lookup(entry);
517
518   typename Sized_symbol<size>::Value_type v;
519   if (sym != NULL)
520     {
521       Sized_symbol<size>* ssym;
522       ssym = this->symtab_->get_sized_symbol<size>(sym);
523       if (!ssym->is_defined() && should_issue_warning)
524         gold_warning("entry symbol '%s' exists but is not defined", entry);
525       v = ssym->value();
526     }
527   else
528     {
529       // We couldn't find the entry symbol.  See if we can parse it as
530       // a number.  This supports, e.g., -e 0x1000.
531       char* endptr;
532       v = strtoull(entry, &endptr, 0);
533       if (*endptr != '\0')
534         {
535           if (should_issue_warning)
536             gold_warning("cannot find entry symbol '%s'", entry);
537           v = 0;
538         }
539     }
540
541   return v;
542 }
543
544 // Compute the current data size.
545
546 off_t
547 Output_file_header::do_size() const
548 {
549   const int size = parameters->target().get_size();
550   if (size == 32)
551     return elfcpp::Elf_sizes<32>::ehdr_size;
552   else if (size == 64)
553     return elfcpp::Elf_sizes<64>::ehdr_size;
554   else
555     gold_unreachable();
556 }
557
558 // Output_data_const methods.
559
560 void
561 Output_data_const::do_write(Output_file* of)
562 {
563   of->write(this->offset(), this->data_.data(), this->data_.size());
564 }
565
566 // Output_data_const_buffer methods.
567
568 void
569 Output_data_const_buffer::do_write(Output_file* of)
570 {
571   of->write(this->offset(), this->p_, this->data_size());
572 }
573
574 // Output_section_data methods.
575
576 // Record the output section, and set the entry size and such.
577
578 void
579 Output_section_data::set_output_section(Output_section* os)
580 {
581   gold_assert(this->output_section_ == NULL);
582   this->output_section_ = os;
583   this->do_adjust_output_section(os);
584 }
585
586 // Return the section index of the output section.
587
588 unsigned int
589 Output_section_data::do_out_shndx() const
590 {
591   gold_assert(this->output_section_ != NULL);
592   return this->output_section_->out_shndx();
593 }
594
595 // Set the alignment, which means we may need to update the alignment
596 // of the output section.
597
598 void
599 Output_section_data::set_addralign(uint64_t addralign)
600 {
601   this->addralign_ = addralign;
602   if (this->output_section_ != NULL
603       && this->output_section_->addralign() < addralign)
604     this->output_section_->set_addralign(addralign);
605 }
606
607 // Output_data_strtab methods.
608
609 // Set the final data size.
610
611 void
612 Output_data_strtab::set_final_data_size()
613 {
614   this->strtab_->set_string_offsets();
615   this->set_data_size(this->strtab_->get_strtab_size());
616 }
617
618 // Write out a string table.
619
620 void
621 Output_data_strtab::do_write(Output_file* of)
622 {
623   this->strtab_->write(of, this->offset());
624 }
625
626 // Output_reloc methods.
627
628 // A reloc against a global symbol.
629
630 template<bool dynamic, int size, bool big_endian>
631 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
632     Symbol* gsym,
633     unsigned int type,
634     Output_data* od,
635     Address address,
636     bool is_relative)
637   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
638     is_relative_(is_relative), is_section_symbol_(false), shndx_(INVALID_CODE)
639 {
640   // this->type_ is a bitfield; make sure TYPE fits.
641   gold_assert(this->type_ == type);
642   this->u1_.gsym = gsym;
643   this->u2_.od = od;
644   if (dynamic)
645     this->set_needs_dynsym_index();
646 }
647
648 template<bool dynamic, int size, bool big_endian>
649 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
650     Symbol* gsym,
651     unsigned int type,
652     Sized_relobj<size, big_endian>* relobj,
653     unsigned int shndx,
654     Address address,
655     bool is_relative)
656   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
657     is_relative_(is_relative), is_section_symbol_(false), shndx_(shndx)
658 {
659   gold_assert(shndx != INVALID_CODE);
660   // this->type_ is a bitfield; make sure TYPE fits.
661   gold_assert(this->type_ == type);
662   this->u1_.gsym = gsym;
663   this->u2_.relobj = relobj;
664   if (dynamic)
665     this->set_needs_dynsym_index();
666 }
667
668 // A reloc against a local symbol.
669
670 template<bool dynamic, int size, bool big_endian>
671 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
672     Sized_relobj<size, big_endian>* relobj,
673     unsigned int local_sym_index,
674     unsigned int type,
675     Output_data* od,
676     Address address,
677     bool is_relative,
678     bool is_section_symbol)
679   : address_(address), local_sym_index_(local_sym_index), type_(type),
680     is_relative_(is_relative), is_section_symbol_(is_section_symbol),
681     shndx_(INVALID_CODE)
682 {
683   gold_assert(local_sym_index != GSYM_CODE
684               && local_sym_index != INVALID_CODE);
685   // this->type_ is a bitfield; make sure TYPE fits.
686   gold_assert(this->type_ == type);
687   this->u1_.relobj = relobj;
688   this->u2_.od = od;
689   if (dynamic)
690     this->set_needs_dynsym_index();
691 }
692
693 template<bool dynamic, int size, bool big_endian>
694 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
695     Sized_relobj<size, big_endian>* relobj,
696     unsigned int local_sym_index,
697     unsigned int type,
698     unsigned int shndx,
699     Address address,
700     bool is_relative,
701     bool is_section_symbol)
702   : address_(address), local_sym_index_(local_sym_index), type_(type),
703     is_relative_(is_relative), is_section_symbol_(is_section_symbol),
704     shndx_(shndx)
705 {
706   gold_assert(local_sym_index != GSYM_CODE
707               && local_sym_index != INVALID_CODE);
708   gold_assert(shndx != INVALID_CODE);
709   // this->type_ is a bitfield; make sure TYPE fits.
710   gold_assert(this->type_ == type);
711   this->u1_.relobj = relobj;
712   this->u2_.relobj = relobj;
713   if (dynamic)
714     this->set_needs_dynsym_index();
715 }
716
717 // A reloc against the STT_SECTION symbol of an output section.
718
719 template<bool dynamic, int size, bool big_endian>
720 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
721     Output_section* os,
722     unsigned int type,
723     Output_data* od,
724     Address address)
725   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
726     is_relative_(false), is_section_symbol_(true), shndx_(INVALID_CODE)
727 {
728   // this->type_ is a bitfield; make sure TYPE fits.
729   gold_assert(this->type_ == type);
730   this->u1_.os = os;
731   this->u2_.od = od;
732   if (dynamic)
733     this->set_needs_dynsym_index();
734   else
735     os->set_needs_symtab_index();
736 }
737
738 template<bool dynamic, int size, bool big_endian>
739 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
740     Output_section* os,
741     unsigned int type,
742     Sized_relobj<size, big_endian>* relobj,
743     unsigned int shndx,
744     Address address)
745   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
746     is_relative_(false), is_section_symbol_(true), shndx_(shndx)
747 {
748   gold_assert(shndx != INVALID_CODE);
749   // this->type_ is a bitfield; make sure TYPE fits.
750   gold_assert(this->type_ == type);
751   this->u1_.os = os;
752   this->u2_.relobj = relobj;
753   if (dynamic)
754     this->set_needs_dynsym_index();
755   else
756     os->set_needs_symtab_index();
757 }
758
759 // Record that we need a dynamic symbol index for this relocation.
760
761 template<bool dynamic, int size, bool big_endian>
762 void
763 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
764 set_needs_dynsym_index()
765 {
766   if (this->is_relative_)
767     return;
768   switch (this->local_sym_index_)
769     {
770     case INVALID_CODE:
771       gold_unreachable();
772
773     case GSYM_CODE:
774       this->u1_.gsym->set_needs_dynsym_entry();
775       break;
776
777     case SECTION_CODE:
778       this->u1_.os->set_needs_dynsym_index();
779       break;
780
781     case 0:
782       break;
783
784     default:
785       {
786         const unsigned int lsi = this->local_sym_index_;
787         if (!this->is_section_symbol_)
788           this->u1_.relobj->set_needs_output_dynsym_entry(lsi);
789         else
790           this->u1_.relobj->output_section(lsi)->set_needs_dynsym_index();
791       }
792       break;
793     }
794 }
795
796 // Get the symbol index of a relocation.
797
798 template<bool dynamic, int size, bool big_endian>
799 unsigned int
800 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::get_symbol_index()
801   const
802 {
803   unsigned int index;
804   switch (this->local_sym_index_)
805     {
806     case INVALID_CODE:
807       gold_unreachable();
808
809     case GSYM_CODE:
810       if (this->u1_.gsym == NULL)
811         index = 0;
812       else if (dynamic)
813         index = this->u1_.gsym->dynsym_index();
814       else
815         index = this->u1_.gsym->symtab_index();
816       break;
817
818     case SECTION_CODE:
819       if (dynamic)
820         index = this->u1_.os->dynsym_index();
821       else
822         index = this->u1_.os->symtab_index();
823       break;
824
825     case 0:
826       // Relocations without symbols use a symbol index of 0.
827       index = 0;
828       break;
829
830     default:
831       {
832         const unsigned int lsi = this->local_sym_index_;
833         if (!this->is_section_symbol_)
834           {
835             if (dynamic)
836               index = this->u1_.relobj->dynsym_index(lsi);
837             else
838               index = this->u1_.relobj->symtab_index(lsi);
839           }
840         else
841           {
842             Output_section* os = this->u1_.relobj->output_section(lsi);
843             gold_assert(os != NULL);
844             if (dynamic)
845               index = os->dynsym_index();
846             else
847               index = os->symtab_index();
848           }
849       }
850       break;
851     }
852   gold_assert(index != -1U);
853   return index;
854 }
855
856 // For a local section symbol, get the address of the offset ADDEND
857 // within the input section.
858
859 template<bool dynamic, int size, bool big_endian>
860 typename elfcpp::Elf_types<size>::Elf_Addr
861 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
862   local_section_offset(Addend addend) const
863 {
864   gold_assert(this->local_sym_index_ != GSYM_CODE
865               && this->local_sym_index_ != SECTION_CODE
866               && this->local_sym_index_ != INVALID_CODE
867               && this->is_section_symbol_);
868   const unsigned int lsi = this->local_sym_index_;
869   Output_section* os = this->u1_.relobj->output_section(lsi);
870   gold_assert(os != NULL);
871   Address offset = this->u1_.relobj->get_output_section_offset(lsi);
872   if (offset != invalid_address)
873     return offset + addend;
874   // This is a merge section.
875   offset = os->output_address(this->u1_.relobj, lsi, addend);
876   gold_assert(offset != invalid_address);
877   return offset;
878 }
879
880 // Get the output address of a relocation.
881
882 template<bool dynamic, int size, bool big_endian>
883 typename elfcpp::Elf_types<size>::Elf_Addr
884 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::get_address() const
885 {
886   Address address = this->address_;
887   if (this->shndx_ != INVALID_CODE)
888     {
889       Output_section* os = this->u2_.relobj->output_section(this->shndx_);
890       gold_assert(os != NULL);
891       Address off = this->u2_.relobj->get_output_section_offset(this->shndx_);
892       if (off != invalid_address)
893         address += os->address() + off;
894       else
895         {
896           address = os->output_address(this->u2_.relobj, this->shndx_,
897                                        address);
898           gold_assert(address != invalid_address);
899         }
900     }
901   else if (this->u2_.od != NULL)
902     address += this->u2_.od->address();
903   return address;
904 }
905
906 // Write out the offset and info fields of a Rel or Rela relocation
907 // entry.
908
909 template<bool dynamic, int size, bool big_endian>
910 template<typename Write_rel>
911 void
912 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write_rel(
913     Write_rel* wr) const
914 {
915   wr->put_r_offset(this->get_address());
916   unsigned int sym_index = this->is_relative_ ? 0 : this->get_symbol_index();
917   wr->put_r_info(elfcpp::elf_r_info<size>(sym_index, this->type_));
918 }
919
920 // Write out a Rel relocation.
921
922 template<bool dynamic, int size, bool big_endian>
923 void
924 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write(
925     unsigned char* pov) const
926 {
927   elfcpp::Rel_write<size, big_endian> orel(pov);
928   this->write_rel(&orel);
929 }
930
931 // Get the value of the symbol referred to by a Rel relocation.
932
933 template<bool dynamic, int size, bool big_endian>
934 typename elfcpp::Elf_types<size>::Elf_Addr
935 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::symbol_value(
936     Addend addend) const
937 {
938   if (this->local_sym_index_ == GSYM_CODE)
939     {
940       const Sized_symbol<size>* sym;
941       sym = static_cast<const Sized_symbol<size>*>(this->u1_.gsym);
942       return sym->value() + addend;
943     }
944   gold_assert(this->local_sym_index_ != SECTION_CODE
945               && this->local_sym_index_ != INVALID_CODE
946               && !this->is_section_symbol_);
947   const unsigned int lsi = this->local_sym_index_;
948   const Symbol_value<size>* symval = this->u1_.relobj->local_symbol(lsi);
949   return symval->value(this->u1_.relobj, addend);
950 }
951
952 // Reloc comparison.  This function sorts the dynamic relocs for the
953 // benefit of the dynamic linker.  First we sort all relative relocs
954 // to the front.  Among relative relocs, we sort by output address.
955 // Among non-relative relocs, we sort by symbol index, then by output
956 // address.
957
958 template<bool dynamic, int size, bool big_endian>
959 int
960 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
961   compare(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>& r2)
962     const
963 {
964   if (this->is_relative_)
965     {
966       if (!r2.is_relative_)
967         return -1;
968       // Otherwise sort by reloc address below.
969     }
970   else if (r2.is_relative_)
971     return 1;
972   else
973     {
974       unsigned int sym1 = this->get_symbol_index();
975       unsigned int sym2 = r2.get_symbol_index();
976       if (sym1 < sym2)
977         return -1;
978       else if (sym1 > sym2)
979         return 1;
980       // Otherwise sort by reloc address.
981     }
982
983   section_offset_type addr1 = this->get_address();
984   section_offset_type addr2 = r2.get_address();
985   if (addr1 < addr2)
986     return -1;
987   else if (addr1 > addr2)
988     return 1;
989
990   // Final tie breaker, in order to generate the same output on any
991   // host: reloc type.
992   unsigned int type1 = this->type_;
993   unsigned int type2 = r2.type_;
994   if (type1 < type2)
995     return -1;
996   else if (type1 > type2)
997     return 1;
998
999   // These relocs appear to be exactly the same.
1000   return 0;
1001 }
1002
1003 // Write out a Rela relocation.
1004
1005 template<bool dynamic, int size, bool big_endian>
1006 void
1007 Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>::write(
1008     unsigned char* pov) const
1009 {
1010   elfcpp::Rela_write<size, big_endian> orel(pov);
1011   this->rel_.write_rel(&orel);
1012   Addend addend = this->addend_;
1013   if (this->rel_.is_relative())
1014     addend = this->rel_.symbol_value(addend);
1015   else if (this->rel_.is_local_section_symbol())
1016     addend = this->rel_.local_section_offset(addend);
1017   orel.put_r_addend(addend);
1018 }
1019
1020 // Output_data_reloc_base methods.
1021
1022 // Adjust the output section.
1023
1024 template<int sh_type, bool dynamic, int size, bool big_endian>
1025 void
1026 Output_data_reloc_base<sh_type, dynamic, size, big_endian>
1027     ::do_adjust_output_section(Output_section* os)
1028 {
1029   if (sh_type == elfcpp::SHT_REL)
1030     os->set_entsize(elfcpp::Elf_sizes<size>::rel_size);
1031   else if (sh_type == elfcpp::SHT_RELA)
1032     os->set_entsize(elfcpp::Elf_sizes<size>::rela_size);
1033   else
1034     gold_unreachable();
1035   if (dynamic)
1036     os->set_should_link_to_dynsym();
1037   else
1038     os->set_should_link_to_symtab();
1039 }
1040
1041 // Write out relocation data.
1042
1043 template<int sh_type, bool dynamic, int size, bool big_endian>
1044 void
1045 Output_data_reloc_base<sh_type, dynamic, size, big_endian>::do_write(
1046     Output_file* of)
1047 {
1048   const off_t off = this->offset();
1049   const off_t oview_size = this->data_size();
1050   unsigned char* const oview = of->get_output_view(off, oview_size);
1051
1052   if (this->sort_relocs_)
1053     {
1054       gold_assert(dynamic);
1055       std::sort(this->relocs_.begin(), this->relocs_.end(),
1056                 Sort_relocs_comparison());
1057     }
1058
1059   unsigned char* pov = oview;
1060   for (typename Relocs::const_iterator p = this->relocs_.begin();
1061        p != this->relocs_.end();
1062        ++p)
1063     {
1064       p->write(pov);
1065       pov += reloc_size;
1066     }
1067
1068   gold_assert(pov - oview == oview_size);
1069
1070   of->write_output_view(off, oview_size, oview);
1071
1072   // We no longer need the relocation entries.
1073   this->relocs_.clear();
1074 }
1075
1076 // Class Output_relocatable_relocs.
1077
1078 template<int sh_type, int size, bool big_endian>
1079 void
1080 Output_relocatable_relocs<sh_type, size, big_endian>::set_final_data_size()
1081 {
1082   this->set_data_size(this->rr_->output_reloc_count()
1083                       * Reloc_types<sh_type, size, big_endian>::reloc_size);
1084 }
1085
1086 // class Output_data_group.
1087
1088 template<int size, bool big_endian>
1089 Output_data_group<size, big_endian>::Output_data_group(
1090     Sized_relobj<size, big_endian>* relobj,
1091     section_size_type entry_count,
1092     elfcpp::Elf_Word flags,
1093     std::vector<unsigned int>* input_shndxes)
1094   : Output_section_data(entry_count * 4, 4, false),
1095     relobj_(relobj),
1096     flags_(flags)
1097 {
1098   this->input_shndxes_.swap(*input_shndxes);
1099 }
1100
1101 // Write out the section group, which means translating the section
1102 // indexes to apply to the output file.
1103
1104 template<int size, bool big_endian>
1105 void
1106 Output_data_group<size, big_endian>::do_write(Output_file* of)
1107 {
1108   const off_t off = this->offset();
1109   const section_size_type oview_size =
1110     convert_to_section_size_type(this->data_size());
1111   unsigned char* const oview = of->get_output_view(off, oview_size);
1112
1113   elfcpp::Elf_Word* contents = reinterpret_cast<elfcpp::Elf_Word*>(oview);
1114   elfcpp::Swap<32, big_endian>::writeval(contents, this->flags_);
1115   ++contents;
1116
1117   for (std::vector<unsigned int>::const_iterator p =
1118          this->input_shndxes_.begin();
1119        p != this->input_shndxes_.end();
1120        ++p, ++contents)
1121     {
1122       Output_section* os = this->relobj_->output_section(*p);
1123
1124       unsigned int output_shndx;
1125       if (os != NULL)
1126         output_shndx = os->out_shndx();
1127       else
1128         {
1129           this->relobj_->error(_("section group retained but "
1130                                  "group element discarded"));
1131           output_shndx = 0;
1132         }
1133
1134       elfcpp::Swap<32, big_endian>::writeval(contents, output_shndx);
1135     }
1136
1137   size_t wrote = reinterpret_cast<unsigned char*>(contents) - oview;
1138   gold_assert(wrote == oview_size);
1139
1140   of->write_output_view(off, oview_size, oview);
1141
1142   // We no longer need this information.
1143   this->input_shndxes_.clear();
1144 }
1145
1146 // Output_data_got::Got_entry methods.
1147
1148 // Write out the entry.
1149
1150 template<int size, bool big_endian>
1151 void
1152 Output_data_got<size, big_endian>::Got_entry::write(unsigned char* pov) const
1153 {
1154   Valtype val = 0;
1155
1156   switch (this->local_sym_index_)
1157     {
1158     case GSYM_CODE:
1159       {
1160         // If the symbol is resolved locally, we need to write out the
1161         // link-time value, which will be relocated dynamically by a
1162         // RELATIVE relocation.
1163         Symbol* gsym = this->u_.gsym;
1164         Sized_symbol<size>* sgsym;
1165         // This cast is a bit ugly.  We don't want to put a
1166         // virtual method in Symbol, because we want Symbol to be
1167         // as small as possible.
1168         sgsym = static_cast<Sized_symbol<size>*>(gsym);
1169         val = sgsym->value();
1170       }
1171       break;
1172
1173     case CONSTANT_CODE:
1174       val = this->u_.constant;
1175       break;
1176
1177     default:
1178       {
1179         const unsigned int lsi = this->local_sym_index_;
1180         const Symbol_value<size>* symval = this->u_.object->local_symbol(lsi);
1181         val = symval->value(this->u_.object, 0);
1182       }
1183       break;
1184     }
1185
1186   elfcpp::Swap<size, big_endian>::writeval(pov, val);
1187 }
1188
1189 // Output_data_got methods.
1190
1191 // Add an entry for a global symbol to the GOT.  This returns true if
1192 // this is a new GOT entry, false if the symbol already had a GOT
1193 // entry.
1194
1195 template<int size, bool big_endian>
1196 bool
1197 Output_data_got<size, big_endian>::add_global(
1198     Symbol* gsym,
1199     unsigned int got_type)
1200 {
1201   if (gsym->has_got_offset(got_type))
1202     return false;
1203
1204   this->entries_.push_back(Got_entry(gsym));
1205   this->set_got_size();
1206   gsym->set_got_offset(got_type, this->last_got_offset());
1207   return true;
1208 }
1209
1210 // Add an entry for a global symbol to the GOT, and add a dynamic
1211 // relocation of type R_TYPE for the GOT entry.
1212 template<int size, bool big_endian>
1213 void
1214 Output_data_got<size, big_endian>::add_global_with_rel(
1215     Symbol* gsym,
1216     unsigned int got_type,
1217     Rel_dyn* rel_dyn,
1218     unsigned int r_type)
1219 {
1220   if (gsym->has_got_offset(got_type))
1221     return;
1222
1223   this->entries_.push_back(Got_entry());
1224   this->set_got_size();
1225   unsigned int got_offset = this->last_got_offset();
1226   gsym->set_got_offset(got_type, got_offset);
1227   rel_dyn->add_global(gsym, r_type, this, got_offset);
1228 }
1229
1230 template<int size, bool big_endian>
1231 void
1232 Output_data_got<size, big_endian>::add_global_with_rela(
1233     Symbol* gsym,
1234     unsigned int got_type,
1235     Rela_dyn* rela_dyn,
1236     unsigned int r_type)
1237 {
1238   if (gsym->has_got_offset(got_type))
1239     return;
1240
1241   this->entries_.push_back(Got_entry());
1242   this->set_got_size();
1243   unsigned int got_offset = this->last_got_offset();
1244   gsym->set_got_offset(got_type, got_offset);
1245   rela_dyn->add_global(gsym, r_type, this, got_offset, 0);
1246 }
1247
1248 // Add a pair of entries for a global symbol to the GOT, and add
1249 // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
1250 // If R_TYPE_2 == 0, add the second entry with no relocation.
1251 template<int size, bool big_endian>
1252 void
1253 Output_data_got<size, big_endian>::add_global_pair_with_rel(
1254     Symbol* gsym,
1255     unsigned int got_type,
1256     Rel_dyn* rel_dyn,
1257     unsigned int r_type_1,
1258     unsigned int r_type_2)
1259 {
1260   if (gsym->has_got_offset(got_type))
1261     return;
1262
1263   this->entries_.push_back(Got_entry());
1264   unsigned int got_offset = this->last_got_offset();
1265   gsym->set_got_offset(got_type, got_offset);
1266   rel_dyn->add_global(gsym, r_type_1, this, got_offset);
1267
1268   this->entries_.push_back(Got_entry());
1269   if (r_type_2 != 0)
1270     {
1271       got_offset = this->last_got_offset();
1272       rel_dyn->add_global(gsym, r_type_2, this, got_offset);
1273     }
1274
1275   this->set_got_size();
1276 }
1277
1278 template<int size, bool big_endian>
1279 void
1280 Output_data_got<size, big_endian>::add_global_pair_with_rela(
1281     Symbol* gsym,
1282     unsigned int got_type,
1283     Rela_dyn* rela_dyn,
1284     unsigned int r_type_1,
1285     unsigned int r_type_2)
1286 {
1287   if (gsym->has_got_offset(got_type))
1288     return;
1289
1290   this->entries_.push_back(Got_entry());
1291   unsigned int got_offset = this->last_got_offset();
1292   gsym->set_got_offset(got_type, got_offset);
1293   rela_dyn->add_global(gsym, r_type_1, this, got_offset, 0);
1294
1295   this->entries_.push_back(Got_entry());
1296   if (r_type_2 != 0)
1297     {
1298       got_offset = this->last_got_offset();
1299       rela_dyn->add_global(gsym, r_type_2, this, got_offset, 0);
1300     }
1301
1302   this->set_got_size();
1303 }
1304
1305 // Add an entry for a local symbol to the GOT.  This returns true if
1306 // this is a new GOT entry, false if the symbol already has a GOT
1307 // entry.
1308
1309 template<int size, bool big_endian>
1310 bool
1311 Output_data_got<size, big_endian>::add_local(
1312     Sized_relobj<size, big_endian>* object,
1313     unsigned int symndx,
1314     unsigned int got_type)
1315 {
1316   if (object->local_has_got_offset(symndx, got_type))
1317     return false;
1318
1319   this->entries_.push_back(Got_entry(object, symndx));
1320   this->set_got_size();
1321   object->set_local_got_offset(symndx, got_type, this->last_got_offset());
1322   return true;
1323 }
1324
1325 // Add an entry for a local symbol to the GOT, and add a dynamic
1326 // relocation of type R_TYPE for the GOT entry.
1327 template<int size, bool big_endian>
1328 void
1329 Output_data_got<size, big_endian>::add_local_with_rel(
1330     Sized_relobj<size, big_endian>* object,
1331     unsigned int symndx,
1332     unsigned int got_type,
1333     Rel_dyn* rel_dyn,
1334     unsigned int r_type)
1335 {
1336   if (object->local_has_got_offset(symndx, got_type))
1337     return;
1338
1339   this->entries_.push_back(Got_entry());
1340   this->set_got_size();
1341   unsigned int got_offset = this->last_got_offset();
1342   object->set_local_got_offset(symndx, got_type, got_offset);
1343   rel_dyn->add_local(object, symndx, r_type, this, got_offset);
1344 }
1345
1346 template<int size, bool big_endian>
1347 void
1348 Output_data_got<size, big_endian>::add_local_with_rela(
1349     Sized_relobj<size, big_endian>* object,
1350     unsigned int symndx,
1351     unsigned int got_type,
1352     Rela_dyn* rela_dyn,
1353     unsigned int r_type)
1354 {
1355   if (object->local_has_got_offset(symndx, got_type))
1356     return;
1357
1358   this->entries_.push_back(Got_entry());
1359   this->set_got_size();
1360   unsigned int got_offset = this->last_got_offset();
1361   object->set_local_got_offset(symndx, got_type, got_offset);
1362   rela_dyn->add_local(object, symndx, r_type, this, got_offset, 0);
1363 }
1364
1365 // Add a pair of entries for a local symbol to the GOT, and add
1366 // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
1367 // If R_TYPE_2 == 0, add the second entry with no relocation.
1368 template<int size, bool big_endian>
1369 void
1370 Output_data_got<size, big_endian>::add_local_pair_with_rel(
1371     Sized_relobj<size, big_endian>* object,
1372     unsigned int symndx,
1373     unsigned int shndx,
1374     unsigned int got_type,
1375     Rel_dyn* rel_dyn,
1376     unsigned int r_type_1,
1377     unsigned int r_type_2)
1378 {
1379   if (object->local_has_got_offset(symndx, got_type))
1380     return;
1381
1382   this->entries_.push_back(Got_entry());
1383   unsigned int got_offset = this->last_got_offset();
1384   object->set_local_got_offset(symndx, got_type, got_offset);
1385   Output_section* os = object->output_section(shndx);
1386   rel_dyn->add_output_section(os, r_type_1, this, got_offset);
1387
1388   this->entries_.push_back(Got_entry(object, symndx));
1389   if (r_type_2 != 0)
1390     {
1391       got_offset = this->last_got_offset();
1392       rel_dyn->add_output_section(os, r_type_2, this, got_offset);
1393     }
1394
1395   this->set_got_size();
1396 }
1397
1398 template<int size, bool big_endian>
1399 void
1400 Output_data_got<size, big_endian>::add_local_pair_with_rela(
1401     Sized_relobj<size, big_endian>* object,
1402     unsigned int symndx,
1403     unsigned int shndx,
1404     unsigned int got_type,
1405     Rela_dyn* rela_dyn,
1406     unsigned int r_type_1,
1407     unsigned int r_type_2)
1408 {
1409   if (object->local_has_got_offset(symndx, got_type))
1410     return;
1411
1412   this->entries_.push_back(Got_entry());
1413   unsigned int got_offset = this->last_got_offset();
1414   object->set_local_got_offset(symndx, got_type, got_offset);
1415   Output_section* os = object->output_section(shndx);
1416   rela_dyn->add_output_section(os, r_type_1, this, got_offset, 0);
1417
1418   this->entries_.push_back(Got_entry(object, symndx));
1419   if (r_type_2 != 0)
1420     {
1421       got_offset = this->last_got_offset();
1422       rela_dyn->add_output_section(os, r_type_2, this, got_offset, 0);
1423     }
1424
1425   this->set_got_size();
1426 }
1427
1428 // Write out the GOT.
1429
1430 template<int size, bool big_endian>
1431 void
1432 Output_data_got<size, big_endian>::do_write(Output_file* of)
1433 {
1434   const int add = size / 8;
1435
1436   const off_t off = this->offset();
1437   const off_t oview_size = this->data_size();
1438   unsigned char* const oview = of->get_output_view(off, oview_size);
1439
1440   unsigned char* pov = oview;
1441   for (typename Got_entries::const_iterator p = this->entries_.begin();
1442        p != this->entries_.end();
1443        ++p)
1444     {
1445       p->write(pov);
1446       pov += add;
1447     }
1448
1449   gold_assert(pov - oview == oview_size);
1450
1451   of->write_output_view(off, oview_size, oview);
1452
1453   // We no longer need the GOT entries.
1454   this->entries_.clear();
1455 }
1456
1457 // Output_data_dynamic::Dynamic_entry methods.
1458
1459 // Write out the entry.
1460
1461 template<int size, bool big_endian>
1462 void
1463 Output_data_dynamic::Dynamic_entry::write(
1464     unsigned char* pov,
1465     const Stringpool* pool) const
1466 {
1467   typename elfcpp::Elf_types<size>::Elf_WXword val;
1468   switch (this->offset_)
1469     {
1470     case DYNAMIC_NUMBER:
1471       val = this->u_.val;
1472       break;
1473
1474     case DYNAMIC_SECTION_SIZE:
1475       val = this->u_.od->data_size();
1476       break;
1477
1478     case DYNAMIC_SYMBOL:
1479       {
1480         const Sized_symbol<size>* s =
1481           static_cast<const Sized_symbol<size>*>(this->u_.sym);
1482         val = s->value();
1483       }
1484       break;
1485
1486     case DYNAMIC_STRING:
1487       val = pool->get_offset(this->u_.str);
1488       break;
1489
1490     default:
1491       val = this->u_.od->address() + this->offset_;
1492       break;
1493     }
1494
1495   elfcpp::Dyn_write<size, big_endian> dw(pov);
1496   dw.put_d_tag(this->tag_);
1497   dw.put_d_val(val);
1498 }
1499
1500 // Output_data_dynamic methods.
1501
1502 // Adjust the output section to set the entry size.
1503
1504 void
1505 Output_data_dynamic::do_adjust_output_section(Output_section* os)
1506 {
1507   if (parameters->target().get_size() == 32)
1508     os->set_entsize(elfcpp::Elf_sizes<32>::dyn_size);
1509   else if (parameters->target().get_size() == 64)
1510     os->set_entsize(elfcpp::Elf_sizes<64>::dyn_size);
1511   else
1512     gold_unreachable();
1513 }
1514
1515 // Set the final data size.
1516
1517 void
1518 Output_data_dynamic::set_final_data_size()
1519 {
1520   // Add the terminating entry if it hasn't been added.
1521   // Because of relaxation, we can run this multiple times.
1522   if (this->entries_.empty()
1523       || this->entries_.rbegin()->tag() != elfcpp::DT_NULL)
1524     this->add_constant(elfcpp::DT_NULL, 0);
1525
1526   int dyn_size;
1527   if (parameters->target().get_size() == 32)
1528     dyn_size = elfcpp::Elf_sizes<32>::dyn_size;
1529   else if (parameters->target().get_size() == 64)
1530     dyn_size = elfcpp::Elf_sizes<64>::dyn_size;
1531   else
1532     gold_unreachable();
1533   this->set_data_size(this->entries_.size() * dyn_size);
1534 }
1535
1536 // Write out the dynamic entries.
1537
1538 void
1539 Output_data_dynamic::do_write(Output_file* of)
1540 {
1541   switch (parameters->size_and_endianness())
1542     {
1543 #ifdef HAVE_TARGET_32_LITTLE
1544     case Parameters::TARGET_32_LITTLE:
1545       this->sized_write<32, false>(of);
1546       break;
1547 #endif
1548 #ifdef HAVE_TARGET_32_BIG
1549     case Parameters::TARGET_32_BIG:
1550       this->sized_write<32, true>(of);
1551       break;
1552 #endif
1553 #ifdef HAVE_TARGET_64_LITTLE
1554     case Parameters::TARGET_64_LITTLE:
1555       this->sized_write<64, false>(of);
1556       break;
1557 #endif
1558 #ifdef HAVE_TARGET_64_BIG
1559     case Parameters::TARGET_64_BIG:
1560       this->sized_write<64, true>(of);
1561       break;
1562 #endif
1563     default:
1564       gold_unreachable();
1565     }
1566 }
1567
1568 template<int size, bool big_endian>
1569 void
1570 Output_data_dynamic::sized_write(Output_file* of)
1571 {
1572   const int dyn_size = elfcpp::Elf_sizes<size>::dyn_size;
1573
1574   const off_t offset = this->offset();
1575   const off_t oview_size = this->data_size();
1576   unsigned char* const oview = of->get_output_view(offset, oview_size);
1577
1578   unsigned char* pov = oview;
1579   for (typename Dynamic_entries::const_iterator p = this->entries_.begin();
1580        p != this->entries_.end();
1581        ++p)
1582     {
1583       p->write<size, big_endian>(pov, this->pool_);
1584       pov += dyn_size;
1585     }
1586
1587   gold_assert(pov - oview == oview_size);
1588
1589   of->write_output_view(offset, oview_size, oview);
1590
1591   // We no longer need the dynamic entries.
1592   this->entries_.clear();
1593 }
1594
1595 // Class Output_symtab_xindex.
1596
1597 void
1598 Output_symtab_xindex::do_write(Output_file* of)
1599 {
1600   const off_t offset = this->offset();
1601   const off_t oview_size = this->data_size();
1602   unsigned char* const oview = of->get_output_view(offset, oview_size);
1603
1604   memset(oview, 0, oview_size);
1605
1606   if (parameters->target().is_big_endian())
1607     this->endian_do_write<true>(oview);
1608   else
1609     this->endian_do_write<false>(oview);
1610
1611   of->write_output_view(offset, oview_size, oview);
1612
1613   // We no longer need the data.
1614   this->entries_.clear();
1615 }
1616
1617 template<bool big_endian>
1618 void
1619 Output_symtab_xindex::endian_do_write(unsigned char* const oview)
1620 {
1621   for (Xindex_entries::const_iterator p = this->entries_.begin();
1622        p != this->entries_.end();
1623        ++p)
1624     {
1625       unsigned int symndx = p->first;
1626       gold_assert(symndx * 4 < this->data_size());
1627       elfcpp::Swap<32, big_endian>::writeval(oview + symndx * 4, p->second);
1628     }
1629 }
1630
1631 // Output_section::Input_section methods.
1632
1633 // Return the data size.  For an input section we store the size here.
1634 // For an Output_section_data, we have to ask it for the size.
1635
1636 off_t
1637 Output_section::Input_section::data_size() const
1638 {
1639   if (this->is_input_section())
1640     return this->u1_.data_size;
1641   else
1642     return this->u2_.posd->data_size();
1643 }
1644
1645 // Set the address and file offset.
1646
1647 void
1648 Output_section::Input_section::set_address_and_file_offset(
1649     uint64_t address,
1650     off_t file_offset,
1651     off_t section_file_offset)
1652 {
1653   if (this->is_input_section())
1654     this->u2_.object->set_section_offset(this->shndx_,
1655                                          file_offset - section_file_offset);
1656   else
1657     this->u2_.posd->set_address_and_file_offset(address, file_offset);
1658 }
1659
1660 // Reset the address and file offset.
1661
1662 void
1663 Output_section::Input_section::reset_address_and_file_offset()
1664 {
1665   if (!this->is_input_section())
1666     this->u2_.posd->reset_address_and_file_offset();
1667 }
1668
1669 // Finalize the data size.
1670
1671 void
1672 Output_section::Input_section::finalize_data_size()
1673 {
1674   if (!this->is_input_section())
1675     this->u2_.posd->finalize_data_size();
1676 }
1677
1678 // Try to turn an input offset into an output offset.  We want to
1679 // return the output offset relative to the start of this
1680 // Input_section in the output section.
1681
1682 inline bool
1683 Output_section::Input_section::output_offset(
1684     const Relobj* object,
1685     unsigned int shndx,
1686     section_offset_type offset,
1687     section_offset_type *poutput) const
1688 {
1689   if (!this->is_input_section())
1690     return this->u2_.posd->output_offset(object, shndx, offset, poutput);
1691   else
1692     {
1693       if (this->shndx_ != shndx || this->u2_.object != object)
1694         return false;
1695       *poutput = offset;
1696       return true;
1697     }
1698 }
1699
1700 // Return whether this is the merge section for the input section
1701 // SHNDX in OBJECT.
1702
1703 inline bool
1704 Output_section::Input_section::is_merge_section_for(const Relobj* object,
1705                                                     unsigned int shndx) const
1706 {
1707   if (this->is_input_section())
1708     return false;
1709   return this->u2_.posd->is_merge_section_for(object, shndx);
1710 }
1711
1712 // Write out the data.  We don't have to do anything for an input
1713 // section--they are handled via Object::relocate--but this is where
1714 // we write out the data for an Output_section_data.
1715
1716 void
1717 Output_section::Input_section::write(Output_file* of)
1718 {
1719   if (!this->is_input_section())
1720     this->u2_.posd->write(of);
1721 }
1722
1723 // Write the data to a buffer.  As for write(), we don't have to do
1724 // anything for an input section.
1725
1726 void
1727 Output_section::Input_section::write_to_buffer(unsigned char* buffer)
1728 {
1729   if (!this->is_input_section())
1730     this->u2_.posd->write_to_buffer(buffer);
1731 }
1732
1733 // Print to a map file.
1734
1735 void
1736 Output_section::Input_section::print_to_mapfile(Mapfile* mapfile) const
1737 {
1738   switch (this->shndx_)
1739     {
1740     case OUTPUT_SECTION_CODE:
1741     case MERGE_DATA_SECTION_CODE:
1742     case MERGE_STRING_SECTION_CODE:
1743       this->u2_.posd->print_to_mapfile(mapfile);
1744       break;
1745
1746     case RELAXED_INPUT_SECTION_CODE:
1747       {
1748         Output_relaxed_input_section* relaxed_section =
1749           this->relaxed_input_section();
1750         mapfile->print_input_section(relaxed_section->relobj(),
1751                                      relaxed_section->shndx());
1752       }
1753       break;
1754     default:
1755       mapfile->print_input_section(this->u2_.object, this->shndx_);
1756       break;
1757     }
1758 }
1759
1760 // Output_section methods.
1761
1762 // Construct an Output_section.  NAME will point into a Stringpool.
1763
1764 Output_section::Output_section(const char* name, elfcpp::Elf_Word type,
1765                                elfcpp::Elf_Xword flags)
1766   : name_(name),
1767     addralign_(0),
1768     entsize_(0),
1769     load_address_(0),
1770     link_section_(NULL),
1771     link_(0),
1772     info_section_(NULL),
1773     info_symndx_(NULL),
1774     info_(0),
1775     type_(type),
1776     flags_(flags),
1777     out_shndx_(-1U),
1778     symtab_index_(0),
1779     dynsym_index_(0),
1780     input_sections_(),
1781     first_input_offset_(0),
1782     fills_(),
1783     postprocessing_buffer_(NULL),
1784     needs_symtab_index_(false),
1785     needs_dynsym_index_(false),
1786     should_link_to_symtab_(false),
1787     should_link_to_dynsym_(false),
1788     after_input_sections_(false),
1789     requires_postprocessing_(false),
1790     found_in_sections_clause_(false),
1791     has_load_address_(false),
1792     info_uses_section_index_(false),
1793     may_sort_attached_input_sections_(false),
1794     must_sort_attached_input_sections_(false),
1795     attached_input_sections_are_sorted_(false),
1796     is_relro_(false),
1797     is_relro_local_(false),
1798     is_last_relro_(false),
1799     is_first_non_relro_(false),
1800     is_small_section_(false),
1801     is_large_section_(false),
1802     is_interp_(false),
1803     is_dynamic_linker_section_(false),
1804     generate_code_fills_at_write_(false),
1805     is_entsize_zero_(false),
1806     tls_offset_(0),
1807     checkpoint_(NULL),
1808     merge_section_map_(),
1809     merge_section_by_properties_map_(),
1810     relaxed_input_section_map_(),
1811     is_relaxed_input_section_map_valid_(true)
1812 {
1813   // An unallocated section has no address.  Forcing this means that
1814   // we don't need special treatment for symbols defined in debug
1815   // sections.
1816   if ((flags & elfcpp::SHF_ALLOC) == 0)
1817     this->set_address(0);
1818 }
1819
1820 Output_section::~Output_section()
1821 {
1822   delete this->checkpoint_;
1823 }
1824
1825 // Set the entry size.
1826
1827 void
1828 Output_section::set_entsize(uint64_t v)
1829 {
1830   if (this->is_entsize_zero_)
1831     ;
1832   else if (this->entsize_ == 0)
1833     this->entsize_ = v;
1834   else if (this->entsize_ != v)
1835     {
1836       this->entsize_ = 0;
1837       this->is_entsize_zero_ = 1;
1838     }
1839 }
1840
1841 // Add the input section SHNDX, with header SHDR, named SECNAME, in
1842 // OBJECT, to the Output_section.  RELOC_SHNDX is the index of a
1843 // relocation section which applies to this section, or 0 if none, or
1844 // -1U if more than one.  Return the offset of the input section
1845 // within the output section.  Return -1 if the input section will
1846 // receive special handling.  In the normal case we don't always keep
1847 // track of input sections for an Output_section.  Instead, each
1848 // Object keeps track of the Output_section for each of its input
1849 // sections.  However, if HAVE_SECTIONS_SCRIPT is true, we do keep
1850 // track of input sections here; this is used when SECTIONS appears in
1851 // a linker script.
1852
1853 template<int size, bool big_endian>
1854 off_t
1855 Output_section::add_input_section(Sized_relobj<size, big_endian>* object,
1856                                   unsigned int shndx,
1857                                   const char* secname,
1858                                   const elfcpp::Shdr<size, big_endian>& shdr,
1859                                   unsigned int reloc_shndx,
1860                                   bool have_sections_script)
1861 {
1862   elfcpp::Elf_Xword addralign = shdr.get_sh_addralign();
1863   if ((addralign & (addralign - 1)) != 0)
1864     {
1865       object->error(_("invalid alignment %lu for section \"%s\""),
1866                     static_cast<unsigned long>(addralign), secname);
1867       addralign = 1;
1868     }
1869
1870   if (addralign > this->addralign_)
1871     this->addralign_ = addralign;
1872
1873   typename elfcpp::Elf_types<size>::Elf_WXword sh_flags = shdr.get_sh_flags();
1874   uint64_t entsize = shdr.get_sh_entsize();
1875
1876   // .debug_str is a mergeable string section, but is not always so
1877   // marked by compilers.  Mark manually here so we can optimize.
1878   if (strcmp(secname, ".debug_str") == 0)
1879     {
1880       sh_flags |= (elfcpp::SHF_MERGE | elfcpp::SHF_STRINGS);
1881       entsize = 1;
1882     }
1883
1884   this->update_flags_for_input_section(sh_flags);
1885   this->set_entsize(entsize);
1886
1887   // If this is a SHF_MERGE section, we pass all the input sections to
1888   // a Output_data_merge.  We don't try to handle relocations for such
1889   // a section.  We don't try to handle empty merge sections--they
1890   // mess up the mappings, and are useless anyhow.
1891   if ((sh_flags & elfcpp::SHF_MERGE) != 0
1892       && reloc_shndx == 0
1893       && shdr.get_sh_size() > 0)
1894     {
1895       if (this->add_merge_input_section(object, shndx, sh_flags,
1896                                         entsize, addralign))
1897         {
1898           // Tell the relocation routines that they need to call the
1899           // output_offset method to determine the final address.
1900           return -1;
1901         }
1902     }
1903
1904   off_t offset_in_section = this->current_data_size_for_child();
1905   off_t aligned_offset_in_section = align_address(offset_in_section,
1906                                                   addralign);
1907
1908   // Determine if we want to delay code-fill generation until the output
1909   // section is written.  When the target is relaxing, we want to delay fill
1910   // generating to avoid adjusting them during relaxation.
1911   if (!this->generate_code_fills_at_write_
1912       && !have_sections_script
1913       && (sh_flags & elfcpp::SHF_EXECINSTR) != 0
1914       && parameters->target().has_code_fill()
1915       && parameters->target().may_relax())
1916     {
1917       gold_assert(this->fills_.empty());
1918       this->generate_code_fills_at_write_ = true;
1919     }
1920
1921   if (aligned_offset_in_section > offset_in_section
1922       && !this->generate_code_fills_at_write_
1923       && !have_sections_script
1924       && (sh_flags & elfcpp::SHF_EXECINSTR) != 0
1925       && parameters->target().has_code_fill())
1926     {
1927       // We need to add some fill data.  Using fill_list_ when
1928       // possible is an optimization, since we will often have fill
1929       // sections without input sections.
1930       off_t fill_len = aligned_offset_in_section - offset_in_section;
1931       if (this->input_sections_.empty())
1932         this->fills_.push_back(Fill(offset_in_section, fill_len));
1933       else
1934         {
1935           std::string fill_data(parameters->target().code_fill(fill_len));
1936           Output_data_const* odc = new Output_data_const(fill_data, 1);
1937           this->input_sections_.push_back(Input_section(odc));
1938         }
1939     }
1940
1941   this->set_current_data_size_for_child(aligned_offset_in_section
1942                                         + shdr.get_sh_size());
1943
1944   // We need to keep track of this section if we are already keeping
1945   // track of sections, or if we are relaxing.  Also, if this is a
1946   // section which requires sorting, or which may require sorting in
1947   // the future, we keep track of the sections.
1948   if (have_sections_script
1949       || !this->input_sections_.empty()
1950       || this->may_sort_attached_input_sections()
1951       || this->must_sort_attached_input_sections()
1952       || parameters->options().user_set_Map()
1953       || parameters->target().may_relax())
1954     this->input_sections_.push_back(Input_section(object, shndx,
1955                                                   shdr.get_sh_size(),
1956                                                   addralign));
1957
1958   return aligned_offset_in_section;
1959 }
1960
1961 // Add arbitrary data to an output section.
1962
1963 void
1964 Output_section::add_output_section_data(Output_section_data* posd)
1965 {
1966   Input_section inp(posd);
1967   this->add_output_section_data(&inp);
1968
1969   if (posd->is_data_size_valid())
1970     {
1971       off_t offset_in_section = this->current_data_size_for_child();
1972       off_t aligned_offset_in_section = align_address(offset_in_section,
1973                                                       posd->addralign());
1974       this->set_current_data_size_for_child(aligned_offset_in_section
1975                                             + posd->data_size());
1976     }
1977 }
1978
1979 // Add a relaxed input section.
1980
1981 void
1982 Output_section::add_relaxed_input_section(Output_relaxed_input_section* poris)
1983 {
1984   Input_section inp(poris);
1985   this->add_output_section_data(&inp);
1986   if (this->is_relaxed_input_section_map_valid_)
1987     {
1988       Input_section_specifier iss(poris->relobj(), poris->shndx());
1989       this->relaxed_input_section_map_[iss] = poris;
1990     }
1991
1992   // For a relaxed section, we use the current data size.  Linker scripts
1993   // get all the input sections, including relaxed one from an output
1994   // section and add them back to them same output section to compute the
1995   // output section size.  If we do not account for sizes of relaxed input
1996   // sections,  an output section would be incorrectly sized.
1997   off_t offset_in_section = this->current_data_size_for_child();
1998   off_t aligned_offset_in_section = align_address(offset_in_section,
1999                                                   poris->addralign());
2000   this->set_current_data_size_for_child(aligned_offset_in_section
2001                                         + poris->current_data_size());
2002 }
2003
2004 // Add arbitrary data to an output section by Input_section.
2005
2006 void
2007 Output_section::add_output_section_data(Input_section* inp)
2008 {
2009   if (this->input_sections_.empty())
2010     this->first_input_offset_ = this->current_data_size_for_child();
2011
2012   this->input_sections_.push_back(*inp);
2013
2014   uint64_t addralign = inp->addralign();
2015   if (addralign > this->addralign_)
2016     this->addralign_ = addralign;
2017
2018   inp->set_output_section(this);
2019 }
2020
2021 // Add a merge section to an output section.
2022
2023 void
2024 Output_section::add_output_merge_section(Output_section_data* posd,
2025                                          bool is_string, uint64_t entsize)
2026 {
2027   Input_section inp(posd, is_string, entsize);
2028   this->add_output_section_data(&inp);
2029 }
2030
2031 // Add an input section to a SHF_MERGE section.
2032
2033 bool
2034 Output_section::add_merge_input_section(Relobj* object, unsigned int shndx,
2035                                         uint64_t flags, uint64_t entsize,
2036                                         uint64_t addralign)
2037 {
2038   bool is_string = (flags & elfcpp::SHF_STRINGS) != 0;
2039
2040   // We only merge strings if the alignment is not more than the
2041   // character size.  This could be handled, but it's unusual.
2042   if (is_string && addralign > entsize)
2043     return false;
2044
2045   // We cannot restore merged input section states.
2046   gold_assert(this->checkpoint_ == NULL);
2047
2048   // Look up merge sections by required properties.
2049   Merge_section_properties msp(is_string, entsize, addralign);
2050   Merge_section_by_properties_map::const_iterator p =
2051     this->merge_section_by_properties_map_.find(msp);
2052   if (p != this->merge_section_by_properties_map_.end())
2053     {
2054       Output_merge_base* merge_section = p->second;
2055       merge_section->add_input_section(object, shndx);
2056       gold_assert(merge_section->is_string() == is_string
2057                   && merge_section->entsize() == entsize
2058                   && merge_section->addralign() == addralign);
2059
2060       // Link input section to found merge section.
2061       Input_section_specifier iss(object, shndx);
2062       this->merge_section_map_[iss] = merge_section;
2063       return true;
2064     }
2065
2066   // We handle the actual constant merging in Output_merge_data or
2067   // Output_merge_string_data.
2068   Output_merge_base* pomb;
2069   if (!is_string)
2070     pomb = new Output_merge_data(entsize, addralign);
2071   else
2072     {
2073       switch (entsize)
2074         {
2075         case 1:
2076           pomb = new Output_merge_string<char>(addralign);
2077           break;
2078         case 2:
2079           pomb = new Output_merge_string<uint16_t>(addralign);
2080           break;
2081         case 4:
2082           pomb = new Output_merge_string<uint32_t>(addralign);
2083           break;
2084         default:
2085           return false;
2086         }
2087     }
2088
2089   // Add new merge section to this output section and link merge section
2090   // properties to new merge section in map.
2091   this->add_output_merge_section(pomb, is_string, entsize);
2092   this->merge_section_by_properties_map_[msp] = pomb;
2093
2094   // Add input section to new merge section and link input section to new
2095   // merge section in map.
2096   pomb->add_input_section(object, shndx);
2097   Input_section_specifier iss(object, shndx);
2098   this->merge_section_map_[iss] = pomb;
2099
2100   return true;
2101 }
2102
2103 // Build a relaxation map to speed up relaxation of existing input sections.
2104 // Look up to the first LIMIT elements in INPUT_SECTIONS.
2105
2106 void
2107 Output_section::build_relaxation_map(
2108   const Input_section_list& input_sections,
2109   size_t limit,
2110   Relaxation_map* relaxation_map) const
2111 {
2112   for (size_t i = 0; i < limit; ++i)
2113     {
2114       const Input_section& is(input_sections[i]);
2115       if (is.is_input_section() || is.is_relaxed_input_section())
2116         {
2117           Input_section_specifier iss(is.relobj(), is.shndx());
2118           (*relaxation_map)[iss] = i;
2119         }
2120     }
2121 }
2122
2123 // Convert regular input sections in INPUT_SECTIONS into relaxed input
2124 // sections in RELAXED_SECTIONS.  MAP is a prebuilt map from input section
2125 // specifier to indices of INPUT_SECTIONS.
2126
2127 void
2128 Output_section::convert_input_sections_in_list_to_relaxed_sections(
2129   const std::vector<Output_relaxed_input_section*>& relaxed_sections,
2130   const Relaxation_map& map,
2131   Input_section_list* input_sections)
2132 {
2133   for (size_t i = 0; i < relaxed_sections.size(); ++i)
2134     {
2135       Output_relaxed_input_section* poris = relaxed_sections[i];
2136       Input_section_specifier iss(poris->relobj(), poris->shndx());
2137       Relaxation_map::const_iterator p = map.find(iss);
2138       gold_assert(p != map.end());
2139       gold_assert((*input_sections)[p->second].is_input_section());
2140       (*input_sections)[p->second] = Input_section(poris);
2141     }
2142 }
2143   
2144 // Convert regular input sections into relaxed input sections. RELAXED_SECTIONS
2145 // is a vector of pointers to Output_relaxed_input_section or its derived
2146 // classes.  The relaxed sections must correspond to existing input sections.
2147
2148 void
2149 Output_section::convert_input_sections_to_relaxed_sections(
2150   const std::vector<Output_relaxed_input_section*>& relaxed_sections)
2151 {
2152   gold_assert(parameters->target().may_relax());
2153
2154   // We want to make sure that restore_states does not undo the effect of
2155   // this.  If there is no checkpoint active, just search the current
2156   // input section list and replace the sections there.  If there is
2157   // a checkpoint, also replace the sections there.
2158   
2159   // By default, we look at the whole list.
2160   size_t limit = this->input_sections_.size();
2161
2162   if (this->checkpoint_ != NULL)
2163     {
2164       // Replace input sections with relaxed input section in the saved
2165       // copy of the input section list.
2166       if (this->checkpoint_->input_sections_saved())
2167         {
2168           Relaxation_map map;
2169           this->build_relaxation_map(
2170                     *(this->checkpoint_->input_sections()),
2171                     this->checkpoint_->input_sections()->size(),
2172                     &map);
2173           this->convert_input_sections_in_list_to_relaxed_sections(
2174                     relaxed_sections,
2175                     map,
2176                     this->checkpoint_->input_sections());
2177         }
2178       else
2179         {
2180           // We have not copied the input section list yet.  Instead, just
2181           // look at the portion that would be saved.
2182           limit = this->checkpoint_->input_sections_size();
2183         }
2184     }
2185
2186   // Convert input sections in input_section_list.
2187   Relaxation_map map;
2188   this->build_relaxation_map(this->input_sections_, limit, &map);
2189   this->convert_input_sections_in_list_to_relaxed_sections(
2190             relaxed_sections,
2191             map,
2192             &this->input_sections_);
2193 }
2194
2195 // Update the output section flags based on input section flags.
2196
2197 void
2198 Output_section::update_flags_for_input_section(elfcpp::Elf_Xword flags)
2199 {
2200   // If we created the section with SHF_ALLOC clear, we set the
2201   // address.  If we are now setting the SHF_ALLOC flag, we need to
2202   // undo that.
2203   if ((this->flags_ & elfcpp::SHF_ALLOC) == 0
2204       && (flags & elfcpp::SHF_ALLOC) != 0)
2205     this->mark_address_invalid();
2206
2207   this->flags_ |= (flags
2208                    & (elfcpp::SHF_WRITE
2209                       | elfcpp::SHF_ALLOC
2210                       | elfcpp::SHF_EXECINSTR));
2211
2212   if ((flags & elfcpp::SHF_MERGE) == 0)
2213     this->flags_ &=~ elfcpp::SHF_MERGE;
2214   else
2215     {
2216       if (this->current_data_size_for_child() == 0)
2217         this->flags_ |= elfcpp::SHF_MERGE;
2218     }
2219
2220   if ((flags & elfcpp::SHF_STRINGS) == 0)
2221     this->flags_ &=~ elfcpp::SHF_STRINGS;
2222   else
2223     {
2224       if (this->current_data_size_for_child() == 0)
2225         this->flags_ |= elfcpp::SHF_STRINGS;
2226     }
2227 }
2228
2229 // Find the merge section into which an input section with index SHNDX in
2230 // OBJECT has been added.  Return NULL if none found.
2231
2232 Output_section_data*
2233 Output_section::find_merge_section(const Relobj* object,
2234                                    unsigned int shndx) const
2235 {
2236   Input_section_specifier iss(object, shndx);
2237   Output_section_data_by_input_section_map::const_iterator p =
2238     this->merge_section_map_.find(iss);
2239   if (p != this->merge_section_map_.end())
2240     {
2241       Output_section_data* posd = p->second;
2242       gold_assert(posd->is_merge_section_for(object, shndx));
2243       return posd;
2244     }
2245   else
2246     return NULL;
2247 }
2248
2249 // Find an relaxed input section corresponding to an input section
2250 // in OBJECT with index SHNDX.
2251
2252 const Output_relaxed_input_section*
2253 Output_section::find_relaxed_input_section(const Relobj* object,
2254                                            unsigned int shndx) const
2255 {
2256   // Be careful that the map may not be valid due to input section export
2257   // to scripts or a check-point restore.
2258   if (!this->is_relaxed_input_section_map_valid_)
2259     {
2260       // Rebuild the map as needed.
2261       this->relaxed_input_section_map_.clear();
2262       for (Input_section_list::const_iterator p = this->input_sections_.begin();
2263            p != this->input_sections_.end();
2264            ++p)
2265         if (p->is_relaxed_input_section())
2266           {
2267             Input_section_specifier iss(p->relobj(), p->shndx());
2268             this->relaxed_input_section_map_[iss] =
2269               p->relaxed_input_section();
2270           }
2271       this->is_relaxed_input_section_map_valid_ = true;
2272     }
2273
2274   Input_section_specifier iss(object, shndx);
2275   Output_relaxed_input_section_by_input_section_map::const_iterator p =
2276     this->relaxed_input_section_map_.find(iss);
2277   if (p != this->relaxed_input_section_map_.end())
2278     return p->second;
2279   else
2280     return NULL;
2281 }
2282
2283 // Given an address OFFSET relative to the start of input section
2284 // SHNDX in OBJECT, return whether this address is being included in
2285 // the final link.  This should only be called if SHNDX in OBJECT has
2286 // a special mapping.
2287
2288 bool
2289 Output_section::is_input_address_mapped(const Relobj* object,
2290                                         unsigned int shndx,
2291                                         off_t offset) const
2292 {
2293   // Look at the Output_section_data_maps first.
2294   const Output_section_data* posd = this->find_merge_section(object, shndx);
2295   if (posd == NULL)
2296     posd = this->find_relaxed_input_section(object, shndx);
2297
2298   if (posd != NULL)
2299     {
2300       section_offset_type output_offset;
2301       bool found = posd->output_offset(object, shndx, offset, &output_offset);
2302       gold_assert(found);   
2303       return output_offset != -1;
2304     }
2305
2306   // Fall back to the slow look-up.
2307   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2308        p != this->input_sections_.end();
2309        ++p)
2310     {
2311       section_offset_type output_offset;
2312       if (p->output_offset(object, shndx, offset, &output_offset))
2313         return output_offset != -1;
2314     }
2315
2316   // By default we assume that the address is mapped.  This should
2317   // only be called after we have passed all sections to Layout.  At
2318   // that point we should know what we are discarding.
2319   return true;
2320 }
2321
2322 // Given an address OFFSET relative to the start of input section
2323 // SHNDX in object OBJECT, return the output offset relative to the
2324 // start of the input section in the output section.  This should only
2325 // be called if SHNDX in OBJECT has a special mapping.
2326
2327 section_offset_type
2328 Output_section::output_offset(const Relobj* object, unsigned int shndx,
2329                               section_offset_type offset) const
2330 {
2331   // This can only be called meaningfully when we know the data size
2332   // of this.
2333   gold_assert(this->is_data_size_valid());
2334
2335   // Look at the Output_section_data_maps first.
2336   const Output_section_data* posd = this->find_merge_section(object, shndx);
2337   if (posd == NULL) 
2338     posd = this->find_relaxed_input_section(object, shndx);
2339   if (posd != NULL)
2340     {
2341       section_offset_type output_offset;
2342       bool found = posd->output_offset(object, shndx, offset, &output_offset);
2343       gold_assert(found);   
2344       return output_offset;
2345     }
2346
2347   // Fall back to the slow look-up.
2348   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2349        p != this->input_sections_.end();
2350        ++p)
2351     {
2352       section_offset_type output_offset;
2353       if (p->output_offset(object, shndx, offset, &output_offset))
2354         return output_offset;
2355     }
2356   gold_unreachable();
2357 }
2358
2359 // Return the output virtual address of OFFSET relative to the start
2360 // of input section SHNDX in object OBJECT.
2361
2362 uint64_t
2363 Output_section::output_address(const Relobj* object, unsigned int shndx,
2364                                off_t offset) const
2365 {
2366   uint64_t addr = this->address() + this->first_input_offset_;
2367
2368   // Look at the Output_section_data_maps first.
2369   const Output_section_data* posd = this->find_merge_section(object, shndx);
2370   if (posd == NULL) 
2371     posd = this->find_relaxed_input_section(object, shndx);
2372   if (posd != NULL && posd->is_address_valid())
2373     {
2374       section_offset_type output_offset;
2375       bool found = posd->output_offset(object, shndx, offset, &output_offset);
2376       gold_assert(found);
2377       return posd->address() + output_offset;
2378     }
2379
2380   // Fall back to the slow look-up.
2381   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2382        p != this->input_sections_.end();
2383        ++p)
2384     {
2385       addr = align_address(addr, p->addralign());
2386       section_offset_type output_offset;
2387       if (p->output_offset(object, shndx, offset, &output_offset))
2388         {
2389           if (output_offset == -1)
2390             return -1ULL;
2391           return addr + output_offset;
2392         }
2393       addr += p->data_size();
2394     }
2395
2396   // If we get here, it means that we don't know the mapping for this
2397   // input section.  This might happen in principle if
2398   // add_input_section were called before add_output_section_data.
2399   // But it should never actually happen.
2400
2401   gold_unreachable();
2402 }
2403
2404 // Find the output address of the start of the merged section for
2405 // input section SHNDX in object OBJECT.
2406
2407 bool
2408 Output_section::find_starting_output_address(const Relobj* object,
2409                                              unsigned int shndx,
2410                                              uint64_t* paddr) const
2411 {
2412   // FIXME: This becomes a bottle-neck if we have many relaxed sections.
2413   // Looking up the merge section map does not always work as we sometimes
2414   // find a merge section without its address set.
2415   uint64_t addr = this->address() + this->first_input_offset_;
2416   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2417        p != this->input_sections_.end();
2418        ++p)
2419     {
2420       addr = align_address(addr, p->addralign());
2421
2422       // It would be nice if we could use the existing output_offset
2423       // method to get the output offset of input offset 0.
2424       // Unfortunately we don't know for sure that input offset 0 is
2425       // mapped at all.
2426       if (p->is_merge_section_for(object, shndx))
2427         {
2428           *paddr = addr;
2429           return true;
2430         }
2431
2432       addr += p->data_size();
2433     }
2434
2435   // We couldn't find a merge output section for this input section.
2436   return false;
2437 }
2438
2439 // Set the data size of an Output_section.  This is where we handle
2440 // setting the addresses of any Output_section_data objects.
2441
2442 void
2443 Output_section::set_final_data_size()
2444 {
2445   if (this->input_sections_.empty())
2446     {
2447       this->set_data_size(this->current_data_size_for_child());
2448       return;
2449     }
2450
2451   if (this->must_sort_attached_input_sections())
2452     this->sort_attached_input_sections();
2453
2454   uint64_t address = this->address();
2455   off_t startoff = this->offset();
2456   off_t off = startoff + this->first_input_offset_;
2457   for (Input_section_list::iterator p = this->input_sections_.begin();
2458        p != this->input_sections_.end();
2459        ++p)
2460     {
2461       off = align_address(off, p->addralign());
2462       p->set_address_and_file_offset(address + (off - startoff), off,
2463                                      startoff);
2464       off += p->data_size();
2465     }
2466
2467   this->set_data_size(off - startoff);
2468 }
2469
2470 // Reset the address and file offset.
2471
2472 void
2473 Output_section::do_reset_address_and_file_offset()
2474 {
2475   // An unallocated section has no address.  Forcing this means that
2476   // we don't need special treatment for symbols defined in debug
2477   // sections.  We do the same in the constructor.
2478   if ((this->flags_ & elfcpp::SHF_ALLOC) == 0)
2479      this->set_address(0);
2480
2481   for (Input_section_list::iterator p = this->input_sections_.begin();
2482        p != this->input_sections_.end();
2483        ++p)
2484     p->reset_address_and_file_offset();
2485 }
2486   
2487 // Return true if address and file offset have the values after reset.
2488
2489 bool
2490 Output_section::do_address_and_file_offset_have_reset_values() const
2491 {
2492   if (this->is_offset_valid())
2493     return false;
2494
2495   // An unallocated section has address 0 after its construction or a reset.
2496   if ((this->flags_ & elfcpp::SHF_ALLOC) == 0)
2497     return this->is_address_valid() && this->address() == 0;
2498   else
2499     return !this->is_address_valid();
2500 }
2501
2502 // Set the TLS offset.  Called only for SHT_TLS sections.
2503
2504 void
2505 Output_section::do_set_tls_offset(uint64_t tls_base)
2506 {
2507   this->tls_offset_ = this->address() - tls_base;
2508 }
2509
2510 // In a few cases we need to sort the input sections attached to an
2511 // output section.  This is used to implement the type of constructor
2512 // priority ordering implemented by the GNU linker, in which the
2513 // priority becomes part of the section name and the sections are
2514 // sorted by name.  We only do this for an output section if we see an
2515 // attached input section matching ".ctor.*", ".dtor.*",
2516 // ".init_array.*" or ".fini_array.*".
2517
2518 class Output_section::Input_section_sort_entry
2519 {
2520  public:
2521   Input_section_sort_entry()
2522     : input_section_(), index_(-1U), section_has_name_(false),
2523       section_name_()
2524   { }
2525
2526   Input_section_sort_entry(const Input_section& input_section,
2527                            unsigned int index)
2528     : input_section_(input_section), index_(index),
2529       section_has_name_(input_section.is_input_section()
2530                         || input_section.is_relaxed_input_section())
2531   {
2532     if (this->section_has_name_)
2533       {
2534         // This is only called single-threaded from Layout::finalize,
2535         // so it is OK to lock.  Unfortunately we have no way to pass
2536         // in a Task token.
2537         const Task* dummy_task = reinterpret_cast<const Task*>(-1);
2538         Object* obj = (input_section.is_input_section()
2539                        ? input_section.relobj()
2540                        : input_section.relaxed_input_section()->relobj());
2541         Task_lock_obj<Object> tl(dummy_task, obj);
2542
2543         // This is a slow operation, which should be cached in
2544         // Layout::layout if this becomes a speed problem.
2545         this->section_name_ = obj->section_name(input_section.shndx());
2546       }
2547   }
2548
2549   // Return the Input_section.
2550   const Input_section&
2551   input_section() const
2552   {
2553     gold_assert(this->index_ != -1U);
2554     return this->input_section_;
2555   }
2556
2557   // The index of this entry in the original list.  This is used to
2558   // make the sort stable.
2559   unsigned int
2560   index() const
2561   {
2562     gold_assert(this->index_ != -1U);
2563     return this->index_;
2564   }
2565
2566   // Whether there is a section name.
2567   bool
2568   section_has_name() const
2569   { return this->section_has_name_; }
2570
2571   // The section name.
2572   const std::string&
2573   section_name() const
2574   {
2575     gold_assert(this->section_has_name_);
2576     return this->section_name_;
2577   }
2578
2579   // Return true if the section name has a priority.  This is assumed
2580   // to be true if it has a dot after the initial dot.
2581   bool
2582   has_priority() const
2583   {
2584     gold_assert(this->section_has_name_);
2585     return this->section_name_.find('.', 1);
2586   }
2587
2588   // Return true if this an input file whose base name matches
2589   // FILE_NAME.  The base name must have an extension of ".o", and
2590   // must be exactly FILE_NAME.o or FILE_NAME, one character, ".o".
2591   // This is to match crtbegin.o as well as crtbeginS.o without
2592   // getting confused by other possibilities.  Overall matching the
2593   // file name this way is a dreadful hack, but the GNU linker does it
2594   // in order to better support gcc, and we need to be compatible.
2595   bool
2596   match_file_name(const char* match_file_name) const
2597   {
2598     const std::string& file_name(this->input_section_.relobj()->name());
2599     const char* base_name = lbasename(file_name.c_str());
2600     size_t match_len = strlen(match_file_name);
2601     if (strncmp(base_name, match_file_name, match_len) != 0)
2602       return false;
2603     size_t base_len = strlen(base_name);
2604     if (base_len != match_len + 2 && base_len != match_len + 3)
2605       return false;
2606     return memcmp(base_name + base_len - 2, ".o", 2) == 0;
2607   }
2608
2609  private:
2610   // The Input_section we are sorting.
2611   Input_section input_section_;
2612   // The index of this Input_section in the original list.
2613   unsigned int index_;
2614   // Whether this Input_section has a section name--it won't if this
2615   // is some random Output_section_data.
2616   bool section_has_name_;
2617   // The section name if there is one.
2618   std::string section_name_;
2619 };
2620
2621 // Return true if S1 should come before S2 in the output section.
2622
2623 bool
2624 Output_section::Input_section_sort_compare::operator()(
2625     const Output_section::Input_section_sort_entry& s1,
2626     const Output_section::Input_section_sort_entry& s2) const
2627 {
2628   // crtbegin.o must come first.
2629   bool s1_begin = s1.match_file_name("crtbegin");
2630   bool s2_begin = s2.match_file_name("crtbegin");
2631   if (s1_begin || s2_begin)
2632     {
2633       if (!s1_begin)
2634         return false;
2635       if (!s2_begin)
2636         return true;
2637       return s1.index() < s2.index();
2638     }
2639
2640   // crtend.o must come last.
2641   bool s1_end = s1.match_file_name("crtend");
2642   bool s2_end = s2.match_file_name("crtend");
2643   if (s1_end || s2_end)
2644     {
2645       if (!s1_end)
2646         return true;
2647       if (!s2_end)
2648         return false;
2649       return s1.index() < s2.index();
2650     }
2651
2652   // We sort all the sections with no names to the end.
2653   if (!s1.section_has_name() || !s2.section_has_name())
2654     {
2655       if (s1.section_has_name())
2656         return true;
2657       if (s2.section_has_name())
2658         return false;
2659       return s1.index() < s2.index();
2660     }
2661
2662   // A section with a priority follows a section without a priority.
2663   // The GNU linker does this for all but .init_array sections; until
2664   // further notice we'll assume that that is an mistake.
2665   bool s1_has_priority = s1.has_priority();
2666   bool s2_has_priority = s2.has_priority();
2667   if (s1_has_priority && !s2_has_priority)
2668     return false;
2669   if (!s1_has_priority && s2_has_priority)
2670     return true;
2671
2672   // Otherwise we sort by name.
2673   int compare = s1.section_name().compare(s2.section_name());
2674   if (compare != 0)
2675     return compare < 0;
2676
2677   // Otherwise we keep the input order.
2678   return s1.index() < s2.index();
2679 }
2680
2681 // Sort the input sections attached to an output section.
2682
2683 void
2684 Output_section::sort_attached_input_sections()
2685 {
2686   if (this->attached_input_sections_are_sorted_)
2687     return;
2688
2689   if (this->checkpoint_ != NULL
2690       && !this->checkpoint_->input_sections_saved())
2691     this->checkpoint_->save_input_sections();
2692
2693   // The only thing we know about an input section is the object and
2694   // the section index.  We need the section name.  Recomputing this
2695   // is slow but this is an unusual case.  If this becomes a speed
2696   // problem we can cache the names as required in Layout::layout.
2697
2698   // We start by building a larger vector holding a copy of each
2699   // Input_section, plus its current index in the list and its name.
2700   std::vector<Input_section_sort_entry> sort_list;
2701
2702   unsigned int i = 0;
2703   for (Input_section_list::iterator p = this->input_sections_.begin();
2704        p != this->input_sections_.end();
2705        ++p, ++i)
2706     sort_list.push_back(Input_section_sort_entry(*p, i));
2707
2708   // Sort the input sections.
2709   std::sort(sort_list.begin(), sort_list.end(), Input_section_sort_compare());
2710
2711   // Copy the sorted input sections back to our list.
2712   this->input_sections_.clear();
2713   for (std::vector<Input_section_sort_entry>::iterator p = sort_list.begin();
2714        p != sort_list.end();
2715        ++p)
2716     this->input_sections_.push_back(p->input_section());
2717
2718   // Remember that we sorted the input sections, since we might get
2719   // called again.
2720   this->attached_input_sections_are_sorted_ = true;
2721 }
2722
2723 // Write the section header to *OSHDR.
2724
2725 template<int size, bool big_endian>
2726 void
2727 Output_section::write_header(const Layout* layout,
2728                              const Stringpool* secnamepool,
2729                              elfcpp::Shdr_write<size, big_endian>* oshdr) const
2730 {
2731   oshdr->put_sh_name(secnamepool->get_offset(this->name_));
2732   oshdr->put_sh_type(this->type_);
2733
2734   elfcpp::Elf_Xword flags = this->flags_;
2735   if (this->info_section_ != NULL && this->info_uses_section_index_)
2736     flags |= elfcpp::SHF_INFO_LINK;
2737   oshdr->put_sh_flags(flags);
2738
2739   oshdr->put_sh_addr(this->address());
2740   oshdr->put_sh_offset(this->offset());
2741   oshdr->put_sh_size(this->data_size());
2742   if (this->link_section_ != NULL)
2743     oshdr->put_sh_link(this->link_section_->out_shndx());
2744   else if (this->should_link_to_symtab_)
2745     oshdr->put_sh_link(layout->symtab_section()->out_shndx());
2746   else if (this->should_link_to_dynsym_)
2747     oshdr->put_sh_link(layout->dynsym_section()->out_shndx());
2748   else
2749     oshdr->put_sh_link(this->link_);
2750
2751   elfcpp::Elf_Word info;
2752   if (this->info_section_ != NULL)
2753     {
2754       if (this->info_uses_section_index_)
2755         info = this->info_section_->out_shndx();
2756       else
2757         info = this->info_section_->symtab_index();
2758     }
2759   else if (this->info_symndx_ != NULL)
2760     info = this->info_symndx_->symtab_index();
2761   else
2762     info = this->info_;
2763   oshdr->put_sh_info(info);
2764
2765   oshdr->put_sh_addralign(this->addralign_);
2766   oshdr->put_sh_entsize(this->entsize_);
2767 }
2768
2769 // Write out the data.  For input sections the data is written out by
2770 // Object::relocate, but we have to handle Output_section_data objects
2771 // here.
2772
2773 void
2774 Output_section::do_write(Output_file* of)
2775 {
2776   gold_assert(!this->requires_postprocessing());
2777
2778   // If the target performs relaxation, we delay filler generation until now.
2779   gold_assert(!this->generate_code_fills_at_write_ || this->fills_.empty());
2780
2781   off_t output_section_file_offset = this->offset();
2782   for (Fill_list::iterator p = this->fills_.begin();
2783        p != this->fills_.end();
2784        ++p)
2785     {
2786       std::string fill_data(parameters->target().code_fill(p->length()));
2787       of->write(output_section_file_offset + p->section_offset(),
2788                 fill_data.data(), fill_data.size());
2789     }
2790
2791   off_t off = this->offset() + this->first_input_offset_;
2792   for (Input_section_list::iterator p = this->input_sections_.begin();
2793        p != this->input_sections_.end();
2794        ++p)
2795     {
2796       off_t aligned_off = align_address(off, p->addralign());
2797       if (this->generate_code_fills_at_write_ && (off != aligned_off))
2798         {
2799           size_t fill_len = aligned_off - off;
2800           std::string fill_data(parameters->target().code_fill(fill_len));
2801           of->write(off, fill_data.data(), fill_data.size());
2802         }
2803
2804       p->write(of);
2805       off = aligned_off + p->data_size();
2806     }
2807 }
2808
2809 // If a section requires postprocessing, create the buffer to use.
2810
2811 void
2812 Output_section::create_postprocessing_buffer()
2813 {
2814   gold_assert(this->requires_postprocessing());
2815
2816   if (this->postprocessing_buffer_ != NULL)
2817     return;
2818
2819   if (!this->input_sections_.empty())
2820     {
2821       off_t off = this->first_input_offset_;
2822       for (Input_section_list::iterator p = this->input_sections_.begin();
2823            p != this->input_sections_.end();
2824            ++p)
2825         {
2826           off = align_address(off, p->addralign());
2827           p->finalize_data_size();
2828           off += p->data_size();
2829         }
2830       this->set_current_data_size_for_child(off);
2831     }
2832
2833   off_t buffer_size = this->current_data_size_for_child();
2834   this->postprocessing_buffer_ = new unsigned char[buffer_size];
2835 }
2836
2837 // Write all the data of an Output_section into the postprocessing
2838 // buffer.  This is used for sections which require postprocessing,
2839 // such as compression.  Input sections are handled by
2840 // Object::Relocate.
2841
2842 void
2843 Output_section::write_to_postprocessing_buffer()
2844 {
2845   gold_assert(this->requires_postprocessing());
2846
2847   // If the target performs relaxation, we delay filler generation until now.
2848   gold_assert(!this->generate_code_fills_at_write_ || this->fills_.empty());
2849
2850   unsigned char* buffer = this->postprocessing_buffer();
2851   for (Fill_list::iterator p = this->fills_.begin();
2852        p != this->fills_.end();
2853        ++p)
2854     {
2855       std::string fill_data(parameters->target().code_fill(p->length()));
2856       memcpy(buffer + p->section_offset(), fill_data.data(),
2857              fill_data.size());
2858     }
2859
2860   off_t off = this->first_input_offset_;
2861   for (Input_section_list::iterator p = this->input_sections_.begin();
2862        p != this->input_sections_.end();
2863        ++p)
2864     {
2865       off_t aligned_off = align_address(off, p->addralign());
2866       if (this->generate_code_fills_at_write_ && (off != aligned_off))
2867         {
2868           size_t fill_len = aligned_off - off;
2869           std::string fill_data(parameters->target().code_fill(fill_len));
2870           memcpy(buffer + off, fill_data.data(), fill_data.size());
2871         }
2872
2873       p->write_to_buffer(buffer + aligned_off);
2874       off = aligned_off + p->data_size();
2875     }
2876 }
2877
2878 // Get the input sections for linker script processing.  We leave
2879 // behind the Output_section_data entries.  Note that this may be
2880 // slightly incorrect for merge sections.  We will leave them behind,
2881 // but it is possible that the script says that they should follow
2882 // some other input sections, as in:
2883 //    .rodata { *(.rodata) *(.rodata.cst*) }
2884 // For that matter, we don't handle this correctly:
2885 //    .rodata { foo.o(.rodata.cst*) *(.rodata.cst*) }
2886 // With luck this will never matter.
2887
2888 uint64_t
2889 Output_section::get_input_sections(
2890     uint64_t address,
2891     const std::string& fill,
2892     std::list<Simple_input_section>* input_sections)
2893 {
2894   if (this->checkpoint_ != NULL
2895       && !this->checkpoint_->input_sections_saved())
2896     this->checkpoint_->save_input_sections();
2897
2898   // Invalidate the relaxed input section map.
2899   this->is_relaxed_input_section_map_valid_ = false;
2900
2901   uint64_t orig_address = address;
2902
2903   address = align_address(address, this->addralign());
2904
2905   Input_section_list remaining;
2906   for (Input_section_list::iterator p = this->input_sections_.begin();
2907        p != this->input_sections_.end();
2908        ++p)
2909     {
2910       if (p->is_input_section())
2911         input_sections->push_back(Simple_input_section(p->relobj(),
2912                                                        p->shndx()));
2913       else if (p->is_relaxed_input_section())
2914         input_sections->push_back(
2915             Simple_input_section(p->relaxed_input_section()));
2916       else
2917         {
2918           uint64_t aligned_address = align_address(address, p->addralign());
2919           if (aligned_address != address && !fill.empty())
2920             {
2921               section_size_type length =
2922                 convert_to_section_size_type(aligned_address - address);
2923               std::string this_fill;
2924               this_fill.reserve(length);
2925               while (this_fill.length() + fill.length() <= length)
2926                 this_fill += fill;
2927               if (this_fill.length() < length)
2928                 this_fill.append(fill, 0, length - this_fill.length());
2929
2930               Output_section_data* posd = new Output_data_const(this_fill, 0);
2931               remaining.push_back(Input_section(posd));
2932             }
2933           address = aligned_address;
2934
2935           remaining.push_back(*p);
2936
2937           p->finalize_data_size();
2938           address += p->data_size();
2939         }
2940     }
2941
2942   this->input_sections_.swap(remaining);
2943   this->first_input_offset_ = 0;
2944
2945   uint64_t data_size = address - orig_address;
2946   this->set_current_data_size_for_child(data_size);
2947   return data_size;
2948 }
2949
2950 // Add an input section from a script.
2951
2952 void
2953 Output_section::add_input_section_for_script(const Simple_input_section& sis,
2954                                              off_t data_size,
2955                                              uint64_t addralign)
2956 {
2957   if (addralign > this->addralign_)
2958     this->addralign_ = addralign;
2959
2960   off_t offset_in_section = this->current_data_size_for_child();
2961   off_t aligned_offset_in_section = align_address(offset_in_section,
2962                                                   addralign);
2963
2964   this->set_current_data_size_for_child(aligned_offset_in_section
2965                                         + data_size);
2966
2967   Input_section is =
2968     (sis.is_relaxed_input_section()
2969      ? Input_section(sis.relaxed_input_section())
2970      : Input_section(sis.relobj(), sis.shndx(), data_size, addralign));
2971   this->input_sections_.push_back(is);
2972 }
2973
2974 //
2975
2976 void
2977 Output_section::save_states()
2978 {
2979   gold_assert(this->checkpoint_ == NULL);
2980   Checkpoint_output_section* checkpoint =
2981     new Checkpoint_output_section(this->addralign_, this->flags_,
2982                                   this->input_sections_,
2983                                   this->first_input_offset_,
2984                                   this->attached_input_sections_are_sorted_);
2985   this->checkpoint_ = checkpoint;
2986   gold_assert(this->fills_.empty());
2987 }
2988
2989 void
2990 Output_section::restore_states()
2991 {
2992   gold_assert(this->checkpoint_ != NULL);
2993   Checkpoint_output_section* checkpoint = this->checkpoint_;
2994
2995   this->addralign_ = checkpoint->addralign();
2996   this->flags_ = checkpoint->flags();
2997   this->first_input_offset_ = checkpoint->first_input_offset();
2998
2999   if (!checkpoint->input_sections_saved())
3000     {
3001       // If we have not copied the input sections, just resize it.
3002       size_t old_size = checkpoint->input_sections_size();
3003       gold_assert(this->input_sections_.size() >= old_size);
3004       this->input_sections_.resize(old_size);
3005     }
3006   else
3007     {
3008       // We need to copy the whole list.  This is not efficient for
3009       // extremely large output with hundreads of thousands of input
3010       // objects.  We may need to re-think how we should pass sections
3011       // to scripts.
3012       this->input_sections_ = *checkpoint->input_sections();
3013     }
3014
3015   this->attached_input_sections_are_sorted_ =
3016     checkpoint->attached_input_sections_are_sorted();
3017
3018   // Simply invalidate the relaxed input section map since we do not keep
3019   // track of it.
3020   this->is_relaxed_input_section_map_valid_ = false;
3021 }
3022
3023 // Print to the map file.
3024
3025 void
3026 Output_section::do_print_to_mapfile(Mapfile* mapfile) const
3027 {
3028   mapfile->print_output_section(this);
3029
3030   for (Input_section_list::const_iterator p = this->input_sections_.begin();
3031        p != this->input_sections_.end();
3032        ++p)
3033     p->print_to_mapfile(mapfile);
3034 }
3035
3036 // Print stats for merge sections to stderr.
3037
3038 void
3039 Output_section::print_merge_stats()
3040 {
3041   Input_section_list::iterator p;
3042   for (p = this->input_sections_.begin();
3043        p != this->input_sections_.end();
3044        ++p)
3045     p->print_merge_stats(this->name_);
3046 }
3047
3048 // Output segment methods.
3049
3050 Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
3051   : output_data_(),
3052     output_bss_(),
3053     vaddr_(0),
3054     paddr_(0),
3055     memsz_(0),
3056     max_align_(0),
3057     min_p_align_(0),
3058     offset_(0),
3059     filesz_(0),
3060     type_(type),
3061     flags_(flags),
3062     is_max_align_known_(false),
3063     are_addresses_set_(false),
3064     is_large_data_segment_(false)
3065 {
3066   // The ELF ABI specifies that a PT_TLS segment always has PF_R as
3067   // the flags.
3068   if (type == elfcpp::PT_TLS)
3069     this->flags_ = elfcpp::PF_R;
3070 }
3071
3072 // Add an Output_section to an Output_segment.
3073
3074 void
3075 Output_segment::add_output_section(Output_section* os,
3076                                    elfcpp::Elf_Word seg_flags,
3077                                    bool do_sort)
3078 {
3079   gold_assert((os->flags() & elfcpp::SHF_ALLOC) != 0);
3080   gold_assert(!this->is_max_align_known_);
3081   gold_assert(os->is_large_data_section() == this->is_large_data_segment());
3082   gold_assert(this->type() == elfcpp::PT_LOAD || !do_sort);
3083
3084   // Update the segment flags.  The ELF ABI specifies that a PT_TLS
3085   // segment should always have PF_R as the flags, regardless of the
3086   // associated sections.
3087   if (this->type() != elfcpp::PT_TLS)
3088     this->flags_ |= seg_flags;
3089
3090   Output_segment::Output_data_list* pdl;
3091   if (os->type() == elfcpp::SHT_NOBITS)
3092     pdl = &this->output_bss_;
3093   else
3094     pdl = &this->output_data_;
3095
3096   // Note that while there may be many input sections in an output
3097   // section, there are normally only a few output sections in an
3098   // output segment.  The loops below are expected to be fast.
3099
3100   // So that PT_NOTE segments will work correctly, we need to ensure
3101   // that all SHT_NOTE sections are adjacent.
3102   if (os->type() == elfcpp::SHT_NOTE && !pdl->empty())
3103     {
3104       Output_segment::Output_data_list::iterator p = pdl->end();
3105       do
3106         {
3107           --p;
3108           if ((*p)->is_section_type(elfcpp::SHT_NOTE))
3109             {
3110               ++p;
3111               pdl->insert(p, os);
3112               return;
3113             }
3114         }
3115       while (p != pdl->begin());
3116     }
3117
3118   // Similarly, so that PT_TLS segments will work, we need to group
3119   // SHF_TLS sections.  An SHF_TLS/SHT_NOBITS section is a special
3120   // case: we group the SHF_TLS/SHT_NOBITS sections right after the
3121   // SHF_TLS/SHT_PROGBITS sections.  This lets us set up PT_TLS
3122   // correctly.  SHF_TLS sections get added to both a PT_LOAD segment
3123   // and the PT_TLS segment; we do this grouping only for the PT_LOAD
3124   // segment.
3125   if (this->type_ != elfcpp::PT_TLS
3126       && (os->flags() & elfcpp::SHF_TLS) != 0)
3127     {
3128       pdl = &this->output_data_;
3129       if (!pdl->empty())
3130         {
3131           bool nobits = os->type() == elfcpp::SHT_NOBITS;
3132           bool sawtls = false;
3133           Output_segment::Output_data_list::iterator p = pdl->end();
3134           gold_assert(p != pdl->begin());
3135           do
3136             {
3137               --p;
3138               bool insert;
3139               if ((*p)->is_section_flag_set(elfcpp::SHF_TLS))
3140                 {
3141                   sawtls = true;
3142                   // Put a NOBITS section after the first TLS section.
3143                   // Put a PROGBITS section after the first
3144                   // TLS/PROGBITS section.
3145                   insert = nobits || !(*p)->is_section_type(elfcpp::SHT_NOBITS);
3146                 }
3147               else
3148                 {
3149                   // If we've gone past the TLS sections, but we've
3150                   // seen a TLS section, then we need to insert this
3151                   // section now.
3152                   insert = sawtls;
3153                 }
3154
3155               if (insert)
3156                 {
3157                   ++p;
3158                   pdl->insert(p, os);
3159                   return;
3160                 }
3161             }
3162           while (p != pdl->begin());
3163         }
3164
3165       // There are no TLS sections yet; put this one at the requested
3166       // location in the section list.
3167     }
3168
3169   if (do_sort)
3170     {
3171       // For the PT_GNU_RELRO segment, we need to group relro
3172       // sections, and we need to put them before any non-relro
3173       // sections.  Any relro local sections go before relro non-local
3174       // sections.  One section may be marked as the last relro
3175       // section.
3176       if (os->is_relro())
3177         {
3178           gold_assert(pdl == &this->output_data_);
3179           Output_segment::Output_data_list::iterator p;
3180           for (p = pdl->begin(); p != pdl->end(); ++p)
3181             {
3182               if (!(*p)->is_section())
3183                 break;
3184
3185               Output_section* pos = (*p)->output_section();
3186               if (!pos->is_relro()
3187                   || (os->is_relro_local() && !pos->is_relro_local())
3188                   || (!os->is_last_relro() && pos->is_last_relro()))
3189                 break;
3190             }
3191
3192           pdl->insert(p, os);
3193           return;
3194         }
3195
3196       // One section may be marked as the first section which follows
3197       // the relro sections.
3198       if (os->is_first_non_relro())
3199         {
3200           gold_assert(pdl == &this->output_data_);
3201           Output_segment::Output_data_list::iterator p;
3202           for (p = pdl->begin(); p != pdl->end(); ++p)
3203             {
3204               if (!(*p)->is_section())
3205                 break;
3206
3207               Output_section* pos = (*p)->output_section();
3208               if (!pos->is_relro())
3209                 break;
3210             }
3211
3212           pdl->insert(p, os);
3213           return;
3214         }
3215     }
3216
3217   // Small data sections go at the end of the list of data sections.
3218   // If OS is not small, and there are small sections, we have to
3219   // insert it before the first small section.
3220   if (os->type() != elfcpp::SHT_NOBITS
3221       && !os->is_small_section()
3222       && !pdl->empty()
3223       && pdl->back()->is_section()
3224       && pdl->back()->output_section()->is_small_section())
3225     {
3226       for (Output_segment::Output_data_list::iterator p = pdl->begin();
3227            p != pdl->end();
3228            ++p)
3229         {
3230           if ((*p)->is_section()
3231               && (*p)->output_section()->is_small_section())
3232             {
3233               pdl->insert(p, os);
3234               return;
3235             }
3236         }
3237       gold_unreachable();
3238     }
3239
3240   // A small BSS section goes at the start of the BSS sections, after
3241   // other small BSS sections.
3242   if (os->type() == elfcpp::SHT_NOBITS && os->is_small_section())
3243     {
3244       for (Output_segment::Output_data_list::iterator p = pdl->begin();
3245            p != pdl->end();
3246            ++p)
3247         {
3248           if (!(*p)->is_section()
3249               || !(*p)->output_section()->is_small_section())
3250             {
3251               pdl->insert(p, os);
3252               return;
3253             }
3254         }
3255     }
3256
3257   // A large BSS section goes at the end of the BSS sections, which
3258   // means that one that is not large must come before the first large
3259   // one.
3260   if (os->type() == elfcpp::SHT_NOBITS
3261       && !os->is_large_section()
3262       && !pdl->empty()
3263       && pdl->back()->is_section()
3264       && pdl->back()->output_section()->is_large_section())
3265     {
3266       for (Output_segment::Output_data_list::iterator p = pdl->begin();
3267            p != pdl->end();
3268            ++p)
3269         {
3270           if ((*p)->is_section()
3271               && (*p)->output_section()->is_large_section())
3272             {
3273               pdl->insert(p, os);
3274               return;
3275             }
3276         }
3277       gold_unreachable();
3278     }
3279
3280   // We do some further output section sorting in order to make the
3281   // generated program run more efficiently.  We should only do this
3282   // when not using a linker script, so it is controled by the DO_SORT
3283   // parameter.
3284   if (do_sort)
3285     {
3286       // FreeBSD requires the .interp section to be in the first page
3287       // of the executable.  That is a more efficient location anyhow
3288       // for any OS, since it means that the kernel will have the data
3289       // handy after it reads the program headers.
3290       if (os->is_interp() && !pdl->empty())
3291         {
3292           pdl->insert(pdl->begin(), os);
3293           return;
3294         }
3295
3296       // Put loadable non-writable notes immediately after the .interp
3297       // sections, so that the PT_NOTE segment is on the first page of
3298       // the executable.
3299       if (os->type() == elfcpp::SHT_NOTE
3300           && (os->flags() & elfcpp::SHF_WRITE) == 0
3301           && !pdl->empty())
3302         {
3303           Output_segment::Output_data_list::iterator p = pdl->begin();
3304           if ((*p)->is_section() && (*p)->output_section()->is_interp())
3305             ++p;
3306           pdl->insert(p, os);
3307           return;
3308         }
3309
3310       // If this section is used by the dynamic linker, and it is not
3311       // writable, then put it first, after the .interp section and
3312       // any loadable notes.  This makes it more likely that the
3313       // dynamic linker will have to read less data from the disk.
3314       if (os->is_dynamic_linker_section()
3315           && !pdl->empty()
3316           && (os->flags() & elfcpp::SHF_WRITE) == 0)
3317         {
3318           bool is_reloc = (os->type() == elfcpp::SHT_REL
3319                            || os->type() == elfcpp::SHT_RELA);
3320           Output_segment::Output_data_list::iterator p = pdl->begin();
3321           while (p != pdl->end()
3322                  && (*p)->is_section()
3323                  && ((*p)->output_section()->is_dynamic_linker_section()
3324                      || (*p)->output_section()->type() == elfcpp::SHT_NOTE))
3325             {
3326               // Put reloc sections after the other ones.  Putting the
3327               // dynamic reloc sections first confuses BFD, notably
3328               // objcopy and strip.
3329               if (!is_reloc
3330                   && ((*p)->output_section()->type() == elfcpp::SHT_REL
3331                       || (*p)->output_section()->type() == elfcpp::SHT_RELA))
3332                 break;
3333               ++p;
3334             }
3335           pdl->insert(p, os);
3336           return;
3337         }
3338     }
3339
3340   // If there were no constraints on the output section, just add it
3341   // to the end of the list.
3342   pdl->push_back(os);
3343 }
3344
3345 // Remove an Output_section from this segment.  It is an error if it
3346 // is not present.
3347
3348 void
3349 Output_segment::remove_output_section(Output_section* os)
3350 {
3351   // We only need this for SHT_PROGBITS.
3352   gold_assert(os->type() == elfcpp::SHT_PROGBITS);
3353   for (Output_data_list::iterator p = this->output_data_.begin();
3354        p != this->output_data_.end();
3355        ++p)
3356    {
3357      if (*p == os)
3358        {
3359          this->output_data_.erase(p);
3360          return;
3361        }
3362    }
3363   gold_unreachable();
3364 }
3365
3366 // Add an Output_data (which is not an Output_section) to the start of
3367 // a segment.
3368
3369 void
3370 Output_segment::add_initial_output_data(Output_data* od)
3371 {
3372   gold_assert(!this->is_max_align_known_);
3373   this->output_data_.push_front(od);
3374 }
3375
3376 // Return whether the first data section is a relro section.
3377
3378 bool
3379 Output_segment::is_first_section_relro() const
3380 {
3381   return (!this->output_data_.empty()
3382           && this->output_data_.front()->is_section()
3383           && this->output_data_.front()->output_section()->is_relro());
3384 }
3385
3386 // Return the maximum alignment of the Output_data in Output_segment.
3387
3388 uint64_t
3389 Output_segment::maximum_alignment()
3390 {
3391   if (!this->is_max_align_known_)
3392     {
3393       uint64_t addralign;
3394
3395       addralign = Output_segment::maximum_alignment_list(&this->output_data_);
3396       if (addralign > this->max_align_)
3397         this->max_align_ = addralign;
3398
3399       addralign = Output_segment::maximum_alignment_list(&this->output_bss_);
3400       if (addralign > this->max_align_)
3401         this->max_align_ = addralign;
3402
3403       this->is_max_align_known_ = true;
3404     }
3405
3406   return this->max_align_;
3407 }
3408
3409 // Return the maximum alignment of a list of Output_data.
3410
3411 uint64_t
3412 Output_segment::maximum_alignment_list(const Output_data_list* pdl)
3413 {
3414   uint64_t ret = 0;
3415   for (Output_data_list::const_iterator p = pdl->begin();
3416        p != pdl->end();
3417        ++p)
3418     {
3419       uint64_t addralign = (*p)->addralign();
3420       if (addralign > ret)
3421         ret = addralign;
3422     }
3423   return ret;
3424 }
3425
3426 // Return the number of dynamic relocs applied to this segment.
3427
3428 unsigned int
3429 Output_segment::dynamic_reloc_count() const
3430 {
3431   return (this->dynamic_reloc_count_list(&this->output_data_)
3432           + this->dynamic_reloc_count_list(&this->output_bss_));
3433 }
3434
3435 // Return the number of dynamic relocs applied to an Output_data_list.
3436
3437 unsigned int
3438 Output_segment::dynamic_reloc_count_list(const Output_data_list* pdl) const
3439 {
3440   unsigned int count = 0;
3441   for (Output_data_list::const_iterator p = pdl->begin();
3442        p != pdl->end();
3443        ++p)
3444     count += (*p)->dynamic_reloc_count();
3445   return count;
3446 }
3447
3448 // Set the section addresses for an Output_segment.  If RESET is true,
3449 // reset the addresses first.  ADDR is the address and *POFF is the
3450 // file offset.  Set the section indexes starting with *PSHNDX.
3451 // Return the address of the immediately following segment.  Update
3452 // *POFF and *PSHNDX.
3453
3454 uint64_t
3455 Output_segment::set_section_addresses(const Layout* layout, bool reset,
3456                                       uint64_t addr,
3457                                       unsigned int increase_relro,
3458                                       off_t* poff,
3459                                       unsigned int* pshndx)
3460 {
3461   gold_assert(this->type_ == elfcpp::PT_LOAD);
3462
3463   off_t orig_off = *poff;
3464
3465   // If we have relro sections, we need to pad forward now so that the
3466   // relro sections plus INCREASE_RELRO end on a common page boundary.
3467   if (parameters->options().relro()
3468       && this->is_first_section_relro()
3469       && (!this->are_addresses_set_ || reset))
3470     {
3471       uint64_t relro_size = 0;
3472       off_t off = *poff;
3473       for (Output_data_list::iterator p = this->output_data_.begin();
3474            p != this->output_data_.end();
3475            ++p)
3476         {
3477           if (!(*p)->is_section())
3478             break;
3479           Output_section* pos = (*p)->output_section();
3480           if (!pos->is_relro())
3481             break;
3482           gold_assert(!(*p)->is_section_flag_set(elfcpp::SHF_TLS));
3483           if ((*p)->is_address_valid())
3484             relro_size += (*p)->data_size();
3485           else
3486             {
3487               // FIXME: This could be faster.
3488               (*p)->set_address_and_file_offset(addr + relro_size,
3489                                                 off + relro_size);
3490               relro_size += (*p)->data_size();
3491               (*p)->reset_address_and_file_offset();
3492             }
3493         }
3494       relro_size += increase_relro;
3495
3496       uint64_t page_align = parameters->target().common_pagesize();
3497
3498       // Align to offset N such that (N + RELRO_SIZE) % PAGE_ALIGN == 0.
3499       uint64_t desired_align = page_align - (relro_size % page_align);
3500       if (desired_align < *poff % page_align)
3501         *poff += page_align - *poff % page_align;
3502       *poff += desired_align - *poff % page_align;
3503       addr += *poff - orig_off;
3504       orig_off = *poff;
3505     }
3506
3507   if (!reset && this->are_addresses_set_)
3508     {
3509       gold_assert(this->paddr_ == addr);
3510       addr = this->vaddr_;
3511     }
3512   else
3513     {
3514       this->vaddr_ = addr;
3515       this->paddr_ = addr;
3516       this->are_addresses_set_ = true;
3517     }
3518
3519   bool in_tls = false;
3520
3521   this->offset_ = orig_off;
3522
3523   addr = this->set_section_list_addresses(layout, reset, &this->output_data_,
3524                                           addr, poff, pshndx, &in_tls);
3525   this->filesz_ = *poff - orig_off;
3526
3527   off_t off = *poff;
3528
3529   uint64_t ret = this->set_section_list_addresses(layout, reset,
3530                                                   &this->output_bss_,
3531                                                   addr, poff, pshndx,
3532                                                   &in_tls);
3533
3534   // If the last section was a TLS section, align upward to the
3535   // alignment of the TLS segment, so that the overall size of the TLS
3536   // segment is aligned.
3537   if (in_tls)
3538     {
3539       uint64_t segment_align = layout->tls_segment()->maximum_alignment();
3540       *poff = align_address(*poff, segment_align);
3541     }
3542
3543   this->memsz_ = *poff - orig_off;
3544
3545   // Ignore the file offset adjustments made by the BSS Output_data
3546   // objects.
3547   *poff = off;
3548
3549   return ret;
3550 }
3551
3552 // Set the addresses and file offsets in a list of Output_data
3553 // structures.
3554
3555 uint64_t
3556 Output_segment::set_section_list_addresses(const Layout* layout, bool reset,
3557                                            Output_data_list* pdl,
3558                                            uint64_t addr, off_t* poff,
3559                                            unsigned int* pshndx,
3560                                            bool* in_tls)
3561 {
3562   off_t startoff = *poff;
3563
3564   off_t off = startoff;
3565   for (Output_data_list::iterator p = pdl->begin();
3566        p != pdl->end();
3567        ++p)
3568     {
3569       if (reset)
3570         (*p)->reset_address_and_file_offset();
3571
3572       // When using a linker script the section will most likely
3573       // already have an address.
3574       if (!(*p)->is_address_valid())
3575         {
3576           uint64_t align = (*p)->addralign();
3577
3578           if ((*p)->is_section_flag_set(elfcpp::SHF_TLS))
3579             {
3580               // Give the first TLS section the alignment of the
3581               // entire TLS segment.  Otherwise the TLS segment as a
3582               // whole may be misaligned.
3583               if (!*in_tls)
3584                 {
3585                   Output_segment* tls_segment = layout->tls_segment();
3586                   gold_assert(tls_segment != NULL);
3587                   uint64_t segment_align = tls_segment->maximum_alignment();
3588                   gold_assert(segment_align >= align);
3589                   align = segment_align;
3590
3591                   *in_tls = true;
3592                 }
3593             }
3594           else
3595             {
3596               // If this is the first section after the TLS segment,
3597               // align it to at least the alignment of the TLS
3598               // segment, so that the size of the overall TLS segment
3599               // is aligned.
3600               if (*in_tls)
3601                 {
3602                   uint64_t segment_align =
3603                       layout->tls_segment()->maximum_alignment();
3604                   if (segment_align > align)
3605                     align = segment_align;
3606
3607                   *in_tls = false;
3608                 }
3609             }
3610
3611           off = align_address(off, align);
3612           (*p)->set_address_and_file_offset(addr + (off - startoff), off);
3613         }
3614       else
3615         {
3616           // The script may have inserted a skip forward, but it
3617           // better not have moved backward.
3618           if ((*p)->address() >= addr + (off - startoff))
3619             off += (*p)->address() - (addr + (off - startoff));
3620           else
3621             {
3622               if (!layout->script_options()->saw_sections_clause())
3623                 gold_unreachable();
3624               else
3625                 {
3626                   Output_section* os = (*p)->output_section();
3627
3628                   // Cast to unsigned long long to avoid format warnings.
3629                   unsigned long long previous_dot =
3630                     static_cast<unsigned long long>(addr + (off - startoff));
3631                   unsigned long long dot =
3632                     static_cast<unsigned long long>((*p)->address());
3633
3634                   if (os == NULL)
3635                     gold_error(_("dot moves backward in linker script "
3636                                  "from 0x%llx to 0x%llx"), previous_dot, dot);
3637                   else
3638                     gold_error(_("address of section '%s' moves backward "
3639                                  "from 0x%llx to 0x%llx"),
3640                                os->name(), previous_dot, dot);
3641                 }
3642             }
3643           (*p)->set_file_offset(off);
3644           (*p)->finalize_data_size();
3645         }
3646
3647       // We want to ignore the size of a SHF_TLS or SHT_NOBITS
3648       // section.  Such a section does not affect the size of a
3649       // PT_LOAD segment.
3650       if (!(*p)->is_section_flag_set(elfcpp::SHF_TLS)
3651           || !(*p)->is_section_type(elfcpp::SHT_NOBITS))
3652         off += (*p)->data_size();
3653
3654       if ((*p)->is_section())
3655         {
3656           (*p)->set_out_shndx(*pshndx);
3657           ++*pshndx;
3658         }
3659     }
3660
3661   *poff = off;
3662   return addr + (off - startoff);
3663 }
3664
3665 // For a non-PT_LOAD segment, set the offset from the sections, if
3666 // any.  Add INCREASE to the file size and the memory size.
3667
3668 void
3669 Output_segment::set_offset(unsigned int increase)
3670 {
3671   gold_assert(this->type_ != elfcpp::PT_LOAD);
3672
3673   gold_assert(!this->are_addresses_set_);
3674
3675   if (this->output_data_.empty() && this->output_bss_.empty())
3676     {
3677       gold_assert(increase == 0);
3678       this->vaddr_ = 0;
3679       this->paddr_ = 0;
3680       this->are_addresses_set_ = true;
3681       this->memsz_ = 0;
3682       this->min_p_align_ = 0;
3683       this->offset_ = 0;
3684       this->filesz_ = 0;
3685       return;
3686     }
3687
3688   const Output_data* first;
3689   if (this->output_data_.empty())
3690     first = this->output_bss_.front();
3691   else
3692     first = this->output_data_.front();
3693   this->vaddr_ = first->address();
3694   this->paddr_ = (first->has_load_address()
3695                   ? first->load_address()
3696                   : this->vaddr_);
3697   this->are_addresses_set_ = true;
3698   this->offset_ = first->offset();
3699
3700   if (this->output_data_.empty())
3701     this->filesz_ = 0;
3702   else
3703     {
3704       const Output_data* last_data = this->output_data_.back();
3705       this->filesz_ = (last_data->address()
3706                        + last_data->data_size()
3707                        - this->vaddr_);
3708     }
3709
3710   const Output_data* last;
3711   if (this->output_bss_.empty())
3712     last = this->output_data_.back();
3713   else
3714     last = this->output_bss_.back();
3715   this->memsz_ = (last->address()
3716                   + last->data_size()
3717                   - this->vaddr_);
3718
3719   this->filesz_ += increase;
3720   this->memsz_ += increase;
3721
3722   // If this is a TLS segment, align the memory size.  The code in
3723   // set_section_list ensures that the section after the TLS segment
3724   // is aligned to give us room.
3725   if (this->type_ == elfcpp::PT_TLS)
3726     {
3727       uint64_t segment_align = this->maximum_alignment();
3728       gold_assert(this->vaddr_ == align_address(this->vaddr_, segment_align));
3729       this->memsz_ = align_address(this->memsz_, segment_align);
3730     }
3731 }
3732
3733 // Set the TLS offsets of the sections in the PT_TLS segment.
3734
3735 void
3736 Output_segment::set_tls_offsets()
3737 {
3738   gold_assert(this->type_ == elfcpp::PT_TLS);
3739
3740   for (Output_data_list::iterator p = this->output_data_.begin();
3741        p != this->output_data_.end();
3742        ++p)
3743     (*p)->set_tls_offset(this->vaddr_);
3744
3745   for (Output_data_list::iterator p = this->output_bss_.begin();
3746        p != this->output_bss_.end();
3747        ++p)
3748     (*p)->set_tls_offset(this->vaddr_);
3749 }
3750
3751 // Return the address of the first section.
3752
3753 uint64_t
3754 Output_segment::first_section_load_address() const
3755 {
3756   for (Output_data_list::const_iterator p = this->output_data_.begin();
3757        p != this->output_data_.end();
3758        ++p)
3759     if ((*p)->is_section())
3760       return (*p)->has_load_address() ? (*p)->load_address() : (*p)->address();
3761
3762   for (Output_data_list::const_iterator p = this->output_bss_.begin();
3763        p != this->output_bss_.end();
3764        ++p)
3765     if ((*p)->is_section())
3766       return (*p)->has_load_address() ? (*p)->load_address() : (*p)->address();
3767
3768   gold_unreachable();
3769 }
3770
3771 // Return the number of Output_sections in an Output_segment.
3772
3773 unsigned int
3774 Output_segment::output_section_count() const
3775 {
3776   return (this->output_section_count_list(&this->output_data_)
3777           + this->output_section_count_list(&this->output_bss_));
3778 }
3779
3780 // Return the number of Output_sections in an Output_data_list.
3781
3782 unsigned int
3783 Output_segment::output_section_count_list(const Output_data_list* pdl) const
3784 {
3785   unsigned int count = 0;
3786   for (Output_data_list::const_iterator p = pdl->begin();
3787        p != pdl->end();
3788        ++p)
3789     {
3790       if ((*p)->is_section())
3791         ++count;
3792     }
3793   return count;
3794 }
3795
3796 // Return the section attached to the list segment with the lowest
3797 // load address.  This is used when handling a PHDRS clause in a
3798 // linker script.
3799
3800 Output_section*
3801 Output_segment::section_with_lowest_load_address() const
3802 {
3803   Output_section* found = NULL;
3804   uint64_t found_lma = 0;
3805   this->lowest_load_address_in_list(&this->output_data_, &found, &found_lma);
3806
3807   Output_section* found_data = found;
3808   this->lowest_load_address_in_list(&this->output_bss_, &found, &found_lma);
3809   if (found != found_data && found_data != NULL)
3810     {
3811       gold_error(_("nobits section %s may not precede progbits section %s "
3812                    "in same segment"),
3813                  found->name(), found_data->name());
3814       return NULL;
3815     }
3816
3817   return found;
3818 }
3819
3820 // Look through a list for a section with a lower load address.
3821
3822 void
3823 Output_segment::lowest_load_address_in_list(const Output_data_list* pdl,
3824                                             Output_section** found,
3825                                             uint64_t* found_lma) const
3826 {
3827   for (Output_data_list::const_iterator p = pdl->begin();
3828        p != pdl->end();
3829        ++p)
3830     {
3831       if (!(*p)->is_section())
3832         continue;
3833       Output_section* os = static_cast<Output_section*>(*p);
3834       uint64_t lma = (os->has_load_address()
3835                       ? os->load_address()
3836                       : os->address());
3837       if (*found == NULL || lma < *found_lma)
3838         {
3839           *found = os;
3840           *found_lma = lma;
3841         }
3842     }
3843 }
3844
3845 // Write the segment data into *OPHDR.
3846
3847 template<int size, bool big_endian>
3848 void
3849 Output_segment::write_header(elfcpp::Phdr_write<size, big_endian>* ophdr)
3850 {
3851   ophdr->put_p_type(this->type_);
3852   ophdr->put_p_offset(this->offset_);
3853   ophdr->put_p_vaddr(this->vaddr_);
3854   ophdr->put_p_paddr(this->paddr_);
3855   ophdr->put_p_filesz(this->filesz_);
3856   ophdr->put_p_memsz(this->memsz_);
3857   ophdr->put_p_flags(this->flags_);
3858   ophdr->put_p_align(std::max(this->min_p_align_, this->maximum_alignment()));
3859 }
3860
3861 // Write the section headers into V.
3862
3863 template<int size, bool big_endian>
3864 unsigned char*
3865 Output_segment::write_section_headers(const Layout* layout,
3866                                       const Stringpool* secnamepool,
3867                                       unsigned char* v,
3868                                       unsigned int *pshndx) const
3869 {
3870   // Every section that is attached to a segment must be attached to a
3871   // PT_LOAD segment, so we only write out section headers for PT_LOAD
3872   // segments.
3873   if (this->type_ != elfcpp::PT_LOAD)
3874     return v;
3875
3876   v = this->write_section_headers_list<size, big_endian>(layout, secnamepool,
3877                                                          &this->output_data_,
3878                                                          v, pshndx);
3879   v = this->write_section_headers_list<size, big_endian>(layout, secnamepool,
3880                                                          &this->output_bss_,
3881                                                          v, pshndx);
3882   return v;
3883 }
3884
3885 template<int size, bool big_endian>
3886 unsigned char*
3887 Output_segment::write_section_headers_list(const Layout* layout,
3888                                            const Stringpool* secnamepool,
3889                                            const Output_data_list* pdl,
3890                                            unsigned char* v,
3891                                            unsigned int* pshndx) const
3892 {
3893   const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
3894   for (Output_data_list::const_iterator p = pdl->begin();
3895        p != pdl->end();
3896        ++p)
3897     {
3898       if ((*p)->is_section())
3899         {
3900           const Output_section* ps = static_cast<const Output_section*>(*p);
3901           gold_assert(*pshndx == ps->out_shndx());
3902           elfcpp::Shdr_write<size, big_endian> oshdr(v);
3903           ps->write_header(layout, secnamepool, &oshdr);
3904           v += shdr_size;
3905           ++*pshndx;
3906         }
3907     }
3908   return v;
3909 }
3910
3911 // Print the output sections to the map file.
3912
3913 void
3914 Output_segment::print_sections_to_mapfile(Mapfile* mapfile) const
3915 {
3916   if (this->type() != elfcpp::PT_LOAD)
3917     return;
3918   this->print_section_list_to_mapfile(mapfile, &this->output_data_);
3919   this->print_section_list_to_mapfile(mapfile, &this->output_bss_);
3920 }
3921
3922 // Print an output section list to the map file.
3923
3924 void
3925 Output_segment::print_section_list_to_mapfile(Mapfile* mapfile,
3926                                               const Output_data_list* pdl) const
3927 {
3928   for (Output_data_list::const_iterator p = pdl->begin();
3929        p != pdl->end();
3930        ++p)
3931     (*p)->print_to_mapfile(mapfile);
3932 }
3933
3934 // Output_file methods.
3935
3936 Output_file::Output_file(const char* name)
3937   : name_(name),
3938     o_(-1),
3939     file_size_(0),
3940     base_(NULL),
3941     map_is_anonymous_(false),
3942     is_temporary_(false)
3943 {
3944 }
3945
3946 // Try to open an existing file.  Returns false if the file doesn't
3947 // exist, has a size of 0 or can't be mmapped.
3948
3949 bool
3950 Output_file::open_for_modification()
3951 {
3952   // The name "-" means "stdout".
3953   if (strcmp(this->name_, "-") == 0)
3954     return false;
3955
3956   // Don't bother opening files with a size of zero.
3957   struct stat s;
3958   if (::stat(this->name_, &s) != 0 || s.st_size == 0)
3959     return false;
3960
3961   int o = open_descriptor(-1, this->name_, O_RDWR, 0);
3962   if (o < 0)
3963     gold_fatal(_("%s: open: %s"), this->name_, strerror(errno));
3964   this->o_ = o;
3965   this->file_size_ = s.st_size;
3966
3967   // If the file can't be mmapped, copying the content to an anonymous
3968   // map will probably negate the performance benefits of incremental
3969   // linking.  This could be helped by using views and loading only
3970   // the necessary parts, but this is not supported as of now.
3971   if (!this->map_no_anonymous())
3972     {
3973       release_descriptor(o, true);
3974       this->o_ = -1;
3975       this->file_size_ = 0;
3976       return false;
3977     }
3978
3979   return true;
3980 }
3981
3982 // Open the output file.
3983
3984 void
3985 Output_file::open(off_t file_size)
3986 {
3987   this->file_size_ = file_size;
3988
3989   // Unlink the file first; otherwise the open() may fail if the file
3990   // is busy (e.g. it's an executable that's currently being executed).
3991   //
3992   // However, the linker may be part of a system where a zero-length
3993   // file is created for it to write to, with tight permissions (gcc
3994   // 2.95 did something like this).  Unlinking the file would work
3995   // around those permission controls, so we only unlink if the file
3996   // has a non-zero size.  We also unlink only regular files to avoid
3997   // trouble with directories/etc.
3998   //
3999   // If we fail, continue; this command is merely a best-effort attempt
4000   // to improve the odds for open().
4001
4002   // We let the name "-" mean "stdout"
4003   if (!this->is_temporary_)
4004     {
4005       if (strcmp(this->name_, "-") == 0)
4006         this->o_ = STDOUT_FILENO;
4007       else
4008         {
4009           struct stat s;
4010           if (::stat(this->name_, &s) == 0
4011               && (S_ISREG (s.st_mode) || S_ISLNK (s.st_mode)))
4012             {
4013               if (s.st_size != 0)
4014                 ::unlink(this->name_);
4015               else if (!parameters->options().relocatable())
4016                 {
4017                   // If we don't unlink the existing file, add execute
4018                   // permission where read permissions already exist
4019                   // and where the umask permits.
4020                   int mask = ::umask(0);
4021                   ::umask(mask);
4022                   s.st_mode |= (s.st_mode & 0444) >> 2;
4023                   ::chmod(this->name_, s.st_mode & ~mask);
4024                 }
4025             }
4026
4027           int mode = parameters->options().relocatable() ? 0666 : 0777;
4028           int o = open_descriptor(-1, this->name_, O_RDWR | O_CREAT | O_TRUNC,
4029                                   mode);
4030           if (o < 0)
4031             gold_fatal(_("%s: open: %s"), this->name_, strerror(errno));
4032           this->o_ = o;
4033         }
4034     }
4035
4036   this->map();
4037 }
4038
4039 // Resize the output file.
4040
4041 void
4042 Output_file::resize(off_t file_size)
4043 {
4044   // If the mmap is mapping an anonymous memory buffer, this is easy:
4045   // just mremap to the new size.  If it's mapping to a file, we want
4046   // to unmap to flush to the file, then remap after growing the file.
4047   if (this->map_is_anonymous_)
4048     {
4049       void* base = ::mremap(this->base_, this->file_size_, file_size,
4050                             MREMAP_MAYMOVE);
4051       if (base == MAP_FAILED)
4052         gold_fatal(_("%s: mremap: %s"), this->name_, strerror(errno));
4053       this->base_ = static_cast<unsigned char*>(base);
4054       this->file_size_ = file_size;
4055     }
4056   else
4057     {
4058       this->unmap();
4059       this->file_size_ = file_size;
4060       if (!this->map_no_anonymous())
4061         gold_fatal(_("%s: mmap: %s"), this->name_, strerror(errno));
4062     }
4063 }
4064
4065 // Map an anonymous block of memory which will later be written to the
4066 // file.  Return whether the map succeeded.
4067
4068 bool
4069 Output_file::map_anonymous()
4070 {
4071   void* base = ::mmap(NULL, this->file_size_, PROT_READ | PROT_WRITE,
4072                       MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
4073   if (base != MAP_FAILED)
4074     {
4075       this->map_is_anonymous_ = true;
4076       this->base_ = static_cast<unsigned char*>(base);
4077       return true;
4078     }
4079   return false;
4080 }
4081
4082 // Map the file into memory.  Return whether the mapping succeeded.
4083
4084 bool
4085 Output_file::map_no_anonymous()
4086 {
4087   const int o = this->o_;
4088
4089   // If the output file is not a regular file, don't try to mmap it;
4090   // instead, we'll mmap a block of memory (an anonymous buffer), and
4091   // then later write the buffer to the file.
4092   void* base;
4093   struct stat statbuf;
4094   if (o == STDOUT_FILENO || o == STDERR_FILENO
4095       || ::fstat(o, &statbuf) != 0
4096       || !S_ISREG(statbuf.st_mode)
4097       || this->is_temporary_)
4098     return false;
4099
4100   // Ensure that we have disk space available for the file.  If we
4101   // don't do this, it is possible that we will call munmap, close,
4102   // and exit with dirty buffers still in the cache with no assigned
4103   // disk blocks.  If the disk is out of space at that point, the
4104   // output file will wind up incomplete, but we will have already
4105   // exited.  The alternative to fallocate would be to use fdatasync,
4106   // but that would be a more significant performance hit.
4107   if (::posix_fallocate(o, 0, this->file_size_) < 0)
4108     gold_fatal(_("%s: %s"), this->name_, strerror(errno));
4109
4110   // Map the file into memory.
4111   base = ::mmap(NULL, this->file_size_, PROT_READ | PROT_WRITE,
4112                 MAP_SHARED, o, 0);
4113
4114   // The mmap call might fail because of file system issues: the file
4115   // system might not support mmap at all, or it might not support
4116   // mmap with PROT_WRITE.
4117   if (base == MAP_FAILED)
4118     return false;
4119
4120   this->map_is_anonymous_ = false;
4121   this->base_ = static_cast<unsigned char*>(base);
4122   return true;
4123 }
4124
4125 // Map the file into memory.
4126
4127 void
4128 Output_file::map()
4129 {
4130   if (this->map_no_anonymous())
4131     return;
4132
4133   // The mmap call might fail because of file system issues: the file
4134   // system might not support mmap at all, or it might not support
4135   // mmap with PROT_WRITE.  I'm not sure which errno values we will
4136   // see in all cases, so if the mmap fails for any reason and we
4137   // don't care about file contents, try for an anonymous map.
4138   if (this->map_anonymous())
4139     return;
4140
4141   gold_fatal(_("%s: mmap: failed to allocate %lu bytes for output file: %s"),
4142              this->name_, static_cast<unsigned long>(this->file_size_),
4143              strerror(errno));
4144 }
4145
4146 // Unmap the file from memory.
4147
4148 void
4149 Output_file::unmap()
4150 {
4151   if (::munmap(this->base_, this->file_size_) < 0)
4152     gold_error(_("%s: munmap: %s"), this->name_, strerror(errno));
4153   this->base_ = NULL;
4154 }
4155
4156 // Close the output file.
4157
4158 void
4159 Output_file::close()
4160 {
4161   // If the map isn't file-backed, we need to write it now.
4162   if (this->map_is_anonymous_ && !this->is_temporary_)
4163     {
4164       size_t bytes_to_write = this->file_size_;
4165       size_t offset = 0;
4166       while (bytes_to_write > 0)
4167         {
4168           ssize_t bytes_written = ::write(this->o_, this->base_ + offset,
4169                                           bytes_to_write);
4170           if (bytes_written == 0)
4171             gold_error(_("%s: write: unexpected 0 return-value"), this->name_);
4172           else if (bytes_written < 0)
4173             gold_error(_("%s: write: %s"), this->name_, strerror(errno));
4174           else
4175             {
4176               bytes_to_write -= bytes_written;
4177               offset += bytes_written;
4178             }
4179         }
4180     }
4181   this->unmap();
4182
4183   // We don't close stdout or stderr
4184   if (this->o_ != STDOUT_FILENO
4185       && this->o_ != STDERR_FILENO
4186       && !this->is_temporary_)
4187     if (::close(this->o_) < 0)
4188       gold_error(_("%s: close: %s"), this->name_, strerror(errno));
4189   this->o_ = -1;
4190 }
4191
4192 // Instantiate the templates we need.  We could use the configure
4193 // script to restrict this to only the ones for implemented targets.
4194
4195 #ifdef HAVE_TARGET_32_LITTLE
4196 template
4197 off_t
4198 Output_section::add_input_section<32, false>(
4199     Sized_relobj<32, false>* object,
4200     unsigned int shndx,
4201     const char* secname,
4202     const elfcpp::Shdr<32, false>& shdr,
4203     unsigned int reloc_shndx,
4204     bool have_sections_script);
4205 #endif
4206
4207 #ifdef HAVE_TARGET_32_BIG
4208 template
4209 off_t
4210 Output_section::add_input_section<32, true>(
4211     Sized_relobj<32, true>* object,
4212     unsigned int shndx,
4213     const char* secname,
4214     const elfcpp::Shdr<32, true>& shdr,
4215     unsigned int reloc_shndx,
4216     bool have_sections_script);
4217 #endif
4218
4219 #ifdef HAVE_TARGET_64_LITTLE
4220 template
4221 off_t
4222 Output_section::add_input_section<64, false>(
4223     Sized_relobj<64, false>* object,
4224     unsigned int shndx,
4225     const char* secname,
4226     const elfcpp::Shdr<64, false>& shdr,
4227     unsigned int reloc_shndx,
4228     bool have_sections_script);
4229 #endif
4230
4231 #ifdef HAVE_TARGET_64_BIG
4232 template
4233 off_t
4234 Output_section::add_input_section<64, true>(
4235     Sized_relobj<64, true>* object,
4236     unsigned int shndx,
4237     const char* secname,
4238     const elfcpp::Shdr<64, true>& shdr,
4239     unsigned int reloc_shndx,
4240     bool have_sections_script);
4241 #endif
4242
4243 #ifdef HAVE_TARGET_32_LITTLE
4244 template
4245 class Output_reloc<elfcpp::SHT_REL, false, 32, false>;
4246 #endif
4247
4248 #ifdef HAVE_TARGET_32_BIG
4249 template
4250 class Output_reloc<elfcpp::SHT_REL, false, 32, true>;
4251 #endif
4252
4253 #ifdef HAVE_TARGET_64_LITTLE
4254 template
4255 class Output_reloc<elfcpp::SHT_REL, false, 64, false>;
4256 #endif
4257
4258 #ifdef HAVE_TARGET_64_BIG
4259 template
4260 class Output_reloc<elfcpp::SHT_REL, false, 64, true>;
4261 #endif
4262
4263 #ifdef HAVE_TARGET_32_LITTLE
4264 template
4265 class Output_reloc<elfcpp::SHT_REL, true, 32, false>;
4266 #endif
4267
4268 #ifdef HAVE_TARGET_32_BIG
4269 template
4270 class Output_reloc<elfcpp::SHT_REL, true, 32, true>;
4271 #endif
4272
4273 #ifdef HAVE_TARGET_64_LITTLE
4274 template
4275 class Output_reloc<elfcpp::SHT_REL, true, 64, false>;
4276 #endif
4277
4278 #ifdef HAVE_TARGET_64_BIG
4279 template
4280 class Output_reloc<elfcpp::SHT_REL, true, 64, true>;
4281 #endif
4282
4283 #ifdef HAVE_TARGET_32_LITTLE
4284 template
4285 class Output_reloc<elfcpp::SHT_RELA, false, 32, false>;
4286 #endif
4287
4288 #ifdef HAVE_TARGET_32_BIG
4289 template
4290 class Output_reloc<elfcpp::SHT_RELA, false, 32, true>;
4291 #endif
4292
4293 #ifdef HAVE_TARGET_64_LITTLE
4294 template
4295 class Output_reloc<elfcpp::SHT_RELA, false, 64, false>;
4296 #endif
4297
4298 #ifdef HAVE_TARGET_64_BIG
4299 template
4300 class Output_reloc<elfcpp::SHT_RELA, false, 64, true>;
4301 #endif
4302
4303 #ifdef HAVE_TARGET_32_LITTLE
4304 template
4305 class Output_reloc<elfcpp::SHT_RELA, true, 32, false>;
4306 #endif
4307
4308 #ifdef HAVE_TARGET_32_BIG
4309 template
4310 class Output_reloc<elfcpp::SHT_RELA, true, 32, true>;
4311 #endif
4312
4313 #ifdef HAVE_TARGET_64_LITTLE
4314 template
4315 class Output_reloc<elfcpp::SHT_RELA, true, 64, false>;
4316 #endif
4317
4318 #ifdef HAVE_TARGET_64_BIG
4319 template
4320 class Output_reloc<elfcpp::SHT_RELA, true, 64, true>;
4321 #endif
4322
4323 #ifdef HAVE_TARGET_32_LITTLE
4324 template
4325 class Output_data_reloc<elfcpp::SHT_REL, false, 32, false>;
4326 #endif
4327
4328 #ifdef HAVE_TARGET_32_BIG
4329 template
4330 class Output_data_reloc<elfcpp::SHT_REL, false, 32, true>;
4331 #endif
4332
4333 #ifdef HAVE_TARGET_64_LITTLE
4334 template
4335 class Output_data_reloc<elfcpp::SHT_REL, false, 64, false>;
4336 #endif
4337
4338 #ifdef HAVE_TARGET_64_BIG
4339 template
4340 class Output_data_reloc<elfcpp::SHT_REL, false, 64, true>;
4341 #endif
4342
4343 #ifdef HAVE_TARGET_32_LITTLE
4344 template
4345 class Output_data_reloc<elfcpp::SHT_REL, true, 32, false>;
4346 #endif
4347
4348 #ifdef HAVE_TARGET_32_BIG
4349 template
4350 class Output_data_reloc<elfcpp::SHT_REL, true, 32, true>;
4351 #endif
4352
4353 #ifdef HAVE_TARGET_64_LITTLE
4354 template
4355 class Output_data_reloc<elfcpp::SHT_REL, true, 64, false>;
4356 #endif
4357
4358 #ifdef HAVE_TARGET_64_BIG
4359 template
4360 class Output_data_reloc<elfcpp::SHT_REL, true, 64, true>;
4361 #endif
4362
4363 #ifdef HAVE_TARGET_32_LITTLE
4364 template
4365 class Output_data_reloc<elfcpp::SHT_RELA, false, 32, false>;
4366 #endif
4367
4368 #ifdef HAVE_TARGET_32_BIG
4369 template
4370 class Output_data_reloc<elfcpp::SHT_RELA, false, 32, true>;
4371 #endif
4372
4373 #ifdef HAVE_TARGET_64_LITTLE
4374 template
4375 class Output_data_reloc<elfcpp::SHT_RELA, false, 64, false>;
4376 #endif
4377
4378 #ifdef HAVE_TARGET_64_BIG
4379 template
4380 class Output_data_reloc<elfcpp::SHT_RELA, false, 64, true>;
4381 #endif
4382
4383 #ifdef HAVE_TARGET_32_LITTLE
4384 template
4385 class Output_data_reloc<elfcpp::SHT_RELA, true, 32, false>;
4386 #endif
4387
4388 #ifdef HAVE_TARGET_32_BIG
4389 template
4390 class Output_data_reloc<elfcpp::SHT_RELA, true, 32, true>;
4391 #endif
4392
4393 #ifdef HAVE_TARGET_64_LITTLE
4394 template
4395 class Output_data_reloc<elfcpp::SHT_RELA, true, 64, false>;
4396 #endif
4397
4398 #ifdef HAVE_TARGET_64_BIG
4399 template
4400 class Output_data_reloc<elfcpp::SHT_RELA, true, 64, true>;
4401 #endif
4402
4403 #ifdef HAVE_TARGET_32_LITTLE
4404 template
4405 class Output_relocatable_relocs<elfcpp::SHT_REL, 32, false>;
4406 #endif
4407
4408 #ifdef HAVE_TARGET_32_BIG
4409 template
4410 class Output_relocatable_relocs<elfcpp::SHT_REL, 32, true>;
4411 #endif
4412
4413 #ifdef HAVE_TARGET_64_LITTLE
4414 template
4415 class Output_relocatable_relocs<elfcpp::SHT_REL, 64, false>;
4416 #endif
4417
4418 #ifdef HAVE_TARGET_64_BIG
4419 template
4420 class Output_relocatable_relocs<elfcpp::SHT_REL, 64, true>;
4421 #endif
4422
4423 #ifdef HAVE_TARGET_32_LITTLE
4424 template
4425 class Output_relocatable_relocs<elfcpp::SHT_RELA, 32, false>;
4426 #endif
4427
4428 #ifdef HAVE_TARGET_32_BIG
4429 template
4430 class Output_relocatable_relocs<elfcpp::SHT_RELA, 32, true>;
4431 #endif
4432
4433 #ifdef HAVE_TARGET_64_LITTLE
4434 template
4435 class Output_relocatable_relocs<elfcpp::SHT_RELA, 64, false>;
4436 #endif
4437
4438 #ifdef HAVE_TARGET_64_BIG
4439 template
4440 class Output_relocatable_relocs<elfcpp::SHT_RELA, 64, true>;
4441 #endif
4442
4443 #ifdef HAVE_TARGET_32_LITTLE
4444 template
4445 class Output_data_group<32, false>;
4446 #endif
4447
4448 #ifdef HAVE_TARGET_32_BIG
4449 template
4450 class Output_data_group<32, true>;
4451 #endif
4452
4453 #ifdef HAVE_TARGET_64_LITTLE
4454 template
4455 class Output_data_group<64, false>;
4456 #endif
4457
4458 #ifdef HAVE_TARGET_64_BIG
4459 template
4460 class Output_data_group<64, true>;
4461 #endif
4462
4463 #ifdef HAVE_TARGET_32_LITTLE
4464 template
4465 class Output_data_got<32, false>;
4466 #endif
4467
4468 #ifdef HAVE_TARGET_32_BIG
4469 template
4470 class Output_data_got<32, true>;
4471 #endif
4472
4473 #ifdef HAVE_TARGET_64_LITTLE
4474 template
4475 class Output_data_got<64, false>;
4476 #endif
4477
4478 #ifdef HAVE_TARGET_64_BIG
4479 template
4480 class Output_data_got<64, true>;
4481 #endif
4482
4483 } // End namespace gold.