Refactor Output_data_reloc_base::do_write for MIPS-specific relocs.
[external/binutils.git] / gold / output.cc
1 // output.cc -- manage the output file for gold
2
3 // Copyright (C) 2006-2016 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/stat.h>
31 #include <algorithm>
32
33 #ifdef HAVE_SYS_MMAN_H
34 #include <sys/mman.h>
35 #endif
36
37 #include "libiberty.h"
38
39 #include "dwarf.h"
40 #include "parameters.h"
41 #include "object.h"
42 #include "symtab.h"
43 #include "reloc.h"
44 #include "merge.h"
45 #include "descriptors.h"
46 #include "layout.h"
47 #include "output.h"
48
49 // For systems without mmap support.
50 #ifndef HAVE_MMAP
51 # define mmap gold_mmap
52 # define munmap gold_munmap
53 # define mremap gold_mremap
54 # ifndef MAP_FAILED
55 #  define MAP_FAILED (reinterpret_cast<void*>(-1))
56 # endif
57 # ifndef PROT_READ
58 #  define PROT_READ 0
59 # endif
60 # ifndef PROT_WRITE
61 #  define PROT_WRITE 0
62 # endif
63 # ifndef MAP_PRIVATE
64 #  define MAP_PRIVATE 0
65 # endif
66 # ifndef MAP_ANONYMOUS
67 #  define MAP_ANONYMOUS 0
68 # endif
69 # ifndef MAP_SHARED
70 #  define MAP_SHARED 0
71 # endif
72
73 # ifndef ENOSYS
74 #  define ENOSYS EINVAL
75 # endif
76
77 static void *
78 gold_mmap(void *, size_t, int, int, int, off_t)
79 {
80   errno = ENOSYS;
81   return MAP_FAILED;
82 }
83
84 static int
85 gold_munmap(void *, size_t)
86 {
87   errno = ENOSYS;
88   return -1;
89 }
90
91 static void *
92 gold_mremap(void *, size_t, size_t, int)
93 {
94   errno = ENOSYS;
95   return MAP_FAILED;
96 }
97
98 #endif
99
100 #if defined(HAVE_MMAP) && !defined(HAVE_MREMAP)
101 # define mremap gold_mremap
102 extern "C" void *gold_mremap(void *, size_t, size_t, int);
103 #endif
104
105 // Some BSD systems still use MAP_ANON instead of MAP_ANONYMOUS
106 #ifndef MAP_ANONYMOUS
107 # define MAP_ANONYMOUS  MAP_ANON
108 #endif
109
110 #ifndef MREMAP_MAYMOVE
111 # define MREMAP_MAYMOVE 1
112 #endif
113
114 // Mingw does not have S_ISLNK.
115 #ifndef S_ISLNK
116 # define S_ISLNK(mode) 0
117 #endif
118
119 namespace gold
120 {
121
122 // A wrapper around posix_fallocate.  If we don't have posix_fallocate,
123 // or the --no-posix-fallocate option is set, we try the fallocate
124 // system call directly.  If that fails, we use ftruncate to set
125 // the file size and hope that there is enough disk space.
126
127 static int
128 gold_fallocate(int o, off_t offset, off_t len)
129 {
130 #ifdef HAVE_POSIX_FALLOCATE
131   if (parameters->options().posix_fallocate())
132     return ::posix_fallocate(o, offset, len);
133 #endif // defined(HAVE_POSIX_FALLOCATE)
134 #ifdef HAVE_FALLOCATE
135   if (::fallocate(o, 0, offset, len) == 0)
136     return 0;
137 #endif // defined(HAVE_FALLOCATE)
138   if (::ftruncate(o, offset + len) < 0)
139     return errno;
140   return 0;
141 }
142
143 // Output_data variables.
144
145 bool Output_data::allocated_sizes_are_fixed;
146
147 // Output_data methods.
148
149 Output_data::~Output_data()
150 {
151 }
152
153 // Return the default alignment for the target size.
154
155 uint64_t
156 Output_data::default_alignment()
157 {
158   return Output_data::default_alignment_for_size(
159       parameters->target().get_size());
160 }
161
162 // Return the default alignment for a size--32 or 64.
163
164 uint64_t
165 Output_data::default_alignment_for_size(int size)
166 {
167   if (size == 32)
168     return 4;
169   else if (size == 64)
170     return 8;
171   else
172     gold_unreachable();
173 }
174
175 // Output_section_header methods.  This currently assumes that the
176 // segment and section lists are complete at construction time.
177
178 Output_section_headers::Output_section_headers(
179     const Layout* layout,
180     const Layout::Segment_list* segment_list,
181     const Layout::Section_list* section_list,
182     const Layout::Section_list* unattached_section_list,
183     const Stringpool* secnamepool,
184     const Output_section* shstrtab_section)
185   : layout_(layout),
186     segment_list_(segment_list),
187     section_list_(section_list),
188     unattached_section_list_(unattached_section_list),
189     secnamepool_(secnamepool),
190     shstrtab_section_(shstrtab_section)
191 {
192 }
193
194 // Compute the current data size.
195
196 off_t
197 Output_section_headers::do_size() const
198 {
199   // Count all the sections.  Start with 1 for the null section.
200   off_t count = 1;
201   if (!parameters->options().relocatable())
202     {
203       for (Layout::Segment_list::const_iterator p =
204              this->segment_list_->begin();
205            p != this->segment_list_->end();
206            ++p)
207         if ((*p)->type() == elfcpp::PT_LOAD)
208           count += (*p)->output_section_count();
209     }
210   else
211     {
212       for (Layout::Section_list::const_iterator p =
213              this->section_list_->begin();
214            p != this->section_list_->end();
215            ++p)
216         if (((*p)->flags() & elfcpp::SHF_ALLOC) != 0)
217           ++count;
218     }
219   count += this->unattached_section_list_->size();
220
221   const int size = parameters->target().get_size();
222   int shdr_size;
223   if (size == 32)
224     shdr_size = elfcpp::Elf_sizes<32>::shdr_size;
225   else if (size == 64)
226     shdr_size = elfcpp::Elf_sizes<64>::shdr_size;
227   else
228     gold_unreachable();
229
230   return count * shdr_size;
231 }
232
233 // Write out the section headers.
234
235 void
236 Output_section_headers::do_write(Output_file* of)
237 {
238   switch (parameters->size_and_endianness())
239     {
240 #ifdef HAVE_TARGET_32_LITTLE
241     case Parameters::TARGET_32_LITTLE:
242       this->do_sized_write<32, false>(of);
243       break;
244 #endif
245 #ifdef HAVE_TARGET_32_BIG
246     case Parameters::TARGET_32_BIG:
247       this->do_sized_write<32, true>(of);
248       break;
249 #endif
250 #ifdef HAVE_TARGET_64_LITTLE
251     case Parameters::TARGET_64_LITTLE:
252       this->do_sized_write<64, false>(of);
253       break;
254 #endif
255 #ifdef HAVE_TARGET_64_BIG
256     case Parameters::TARGET_64_BIG:
257       this->do_sized_write<64, true>(of);
258       break;
259 #endif
260     default:
261       gold_unreachable();
262     }
263 }
264
265 template<int size, bool big_endian>
266 void
267 Output_section_headers::do_sized_write(Output_file* of)
268 {
269   off_t all_shdrs_size = this->data_size();
270   unsigned char* view = of->get_output_view(this->offset(), all_shdrs_size);
271
272   const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
273   unsigned char* v = view;
274
275   {
276     typename elfcpp::Shdr_write<size, big_endian> oshdr(v);
277     oshdr.put_sh_name(0);
278     oshdr.put_sh_type(elfcpp::SHT_NULL);
279     oshdr.put_sh_flags(0);
280     oshdr.put_sh_addr(0);
281     oshdr.put_sh_offset(0);
282
283     size_t section_count = (this->data_size()
284                             / elfcpp::Elf_sizes<size>::shdr_size);
285     if (section_count < elfcpp::SHN_LORESERVE)
286       oshdr.put_sh_size(0);
287     else
288       oshdr.put_sh_size(section_count);
289
290     unsigned int shstrndx = this->shstrtab_section_->out_shndx();
291     if (shstrndx < elfcpp::SHN_LORESERVE)
292       oshdr.put_sh_link(0);
293     else
294       oshdr.put_sh_link(shstrndx);
295
296     size_t segment_count = this->segment_list_->size();
297     oshdr.put_sh_info(segment_count >= elfcpp::PN_XNUM ? segment_count : 0);
298
299     oshdr.put_sh_addralign(0);
300     oshdr.put_sh_entsize(0);
301   }
302
303   v += shdr_size;
304
305   unsigned int shndx = 1;
306   if (!parameters->options().relocatable())
307     {
308       for (Layout::Segment_list::const_iterator p =
309              this->segment_list_->begin();
310            p != this->segment_list_->end();
311            ++p)
312         v = (*p)->write_section_headers<size, big_endian>(this->layout_,
313                                                           this->secnamepool_,
314                                                           v,
315                                                           &shndx);
316     }
317   else
318     {
319       for (Layout::Section_list::const_iterator p =
320              this->section_list_->begin();
321            p != this->section_list_->end();
322            ++p)
323         {
324           // We do unallocated sections below, except that group
325           // sections have to come first.
326           if (((*p)->flags() & elfcpp::SHF_ALLOC) == 0
327               && (*p)->type() != elfcpp::SHT_GROUP)
328             continue;
329           gold_assert(shndx == (*p)->out_shndx());
330           elfcpp::Shdr_write<size, big_endian> oshdr(v);
331           (*p)->write_header(this->layout_, this->secnamepool_, &oshdr);
332           v += shdr_size;
333           ++shndx;
334         }
335     }
336
337   for (Layout::Section_list::const_iterator p =
338          this->unattached_section_list_->begin();
339        p != this->unattached_section_list_->end();
340        ++p)
341     {
342       // For a relocatable link, we did unallocated group sections
343       // above, since they have to come first.
344       if ((*p)->type() == elfcpp::SHT_GROUP
345           && parameters->options().relocatable())
346         continue;
347       gold_assert(shndx == (*p)->out_shndx());
348       elfcpp::Shdr_write<size, big_endian> oshdr(v);
349       (*p)->write_header(this->layout_, this->secnamepool_, &oshdr);
350       v += shdr_size;
351       ++shndx;
352     }
353
354   of->write_output_view(this->offset(), all_shdrs_size, view);
355 }
356
357 // Output_segment_header methods.
358
359 Output_segment_headers::Output_segment_headers(
360     const Layout::Segment_list& segment_list)
361   : segment_list_(segment_list)
362 {
363   this->set_current_data_size_for_child(this->do_size());
364 }
365
366 void
367 Output_segment_headers::do_write(Output_file* of)
368 {
369   switch (parameters->size_and_endianness())
370     {
371 #ifdef HAVE_TARGET_32_LITTLE
372     case Parameters::TARGET_32_LITTLE:
373       this->do_sized_write<32, false>(of);
374       break;
375 #endif
376 #ifdef HAVE_TARGET_32_BIG
377     case Parameters::TARGET_32_BIG:
378       this->do_sized_write<32, true>(of);
379       break;
380 #endif
381 #ifdef HAVE_TARGET_64_LITTLE
382     case Parameters::TARGET_64_LITTLE:
383       this->do_sized_write<64, false>(of);
384       break;
385 #endif
386 #ifdef HAVE_TARGET_64_BIG
387     case Parameters::TARGET_64_BIG:
388       this->do_sized_write<64, true>(of);
389       break;
390 #endif
391     default:
392       gold_unreachable();
393     }
394 }
395
396 template<int size, bool big_endian>
397 void
398 Output_segment_headers::do_sized_write(Output_file* of)
399 {
400   const int phdr_size = elfcpp::Elf_sizes<size>::phdr_size;
401   off_t all_phdrs_size = this->segment_list_.size() * phdr_size;
402   gold_assert(all_phdrs_size == this->data_size());
403   unsigned char* view = of->get_output_view(this->offset(),
404                                             all_phdrs_size);
405   unsigned char* v = view;
406   for (Layout::Segment_list::const_iterator p = this->segment_list_.begin();
407        p != this->segment_list_.end();
408        ++p)
409     {
410       elfcpp::Phdr_write<size, big_endian> ophdr(v);
411       (*p)->write_header(&ophdr);
412       v += phdr_size;
413     }
414
415   gold_assert(v - view == all_phdrs_size);
416
417   of->write_output_view(this->offset(), all_phdrs_size, view);
418 }
419
420 off_t
421 Output_segment_headers::do_size() const
422 {
423   const int size = parameters->target().get_size();
424   int phdr_size;
425   if (size == 32)
426     phdr_size = elfcpp::Elf_sizes<32>::phdr_size;
427   else if (size == 64)
428     phdr_size = elfcpp::Elf_sizes<64>::phdr_size;
429   else
430     gold_unreachable();
431
432   return this->segment_list_.size() * phdr_size;
433 }
434
435 // Output_file_header methods.
436
437 Output_file_header::Output_file_header(Target* target,
438                                        const Symbol_table* symtab,
439                                        const Output_segment_headers* osh)
440   : target_(target),
441     symtab_(symtab),
442     segment_header_(osh),
443     section_header_(NULL),
444     shstrtab_(NULL)
445 {
446   this->set_data_size(this->do_size());
447 }
448
449 // Set the section table information for a file header.
450
451 void
452 Output_file_header::set_section_info(const Output_section_headers* shdrs,
453                                      const Output_section* shstrtab)
454 {
455   this->section_header_ = shdrs;
456   this->shstrtab_ = shstrtab;
457 }
458
459 // Write out the file header.
460
461 void
462 Output_file_header::do_write(Output_file* of)
463 {
464   gold_assert(this->offset() == 0);
465
466   switch (parameters->size_and_endianness())
467     {
468 #ifdef HAVE_TARGET_32_LITTLE
469     case Parameters::TARGET_32_LITTLE:
470       this->do_sized_write<32, false>(of);
471       break;
472 #endif
473 #ifdef HAVE_TARGET_32_BIG
474     case Parameters::TARGET_32_BIG:
475       this->do_sized_write<32, true>(of);
476       break;
477 #endif
478 #ifdef HAVE_TARGET_64_LITTLE
479     case Parameters::TARGET_64_LITTLE:
480       this->do_sized_write<64, false>(of);
481       break;
482 #endif
483 #ifdef HAVE_TARGET_64_BIG
484     case Parameters::TARGET_64_BIG:
485       this->do_sized_write<64, true>(of);
486       break;
487 #endif
488     default:
489       gold_unreachable();
490     }
491 }
492
493 // Write out the file header with appropriate size and endianness.
494
495 template<int size, bool big_endian>
496 void
497 Output_file_header::do_sized_write(Output_file* of)
498 {
499   gold_assert(this->offset() == 0);
500
501   int ehdr_size = elfcpp::Elf_sizes<size>::ehdr_size;
502   unsigned char* view = of->get_output_view(0, ehdr_size);
503   elfcpp::Ehdr_write<size, big_endian> oehdr(view);
504
505   unsigned char e_ident[elfcpp::EI_NIDENT];
506   memset(e_ident, 0, elfcpp::EI_NIDENT);
507   e_ident[elfcpp::EI_MAG0] = elfcpp::ELFMAG0;
508   e_ident[elfcpp::EI_MAG1] = elfcpp::ELFMAG1;
509   e_ident[elfcpp::EI_MAG2] = elfcpp::ELFMAG2;
510   e_ident[elfcpp::EI_MAG3] = elfcpp::ELFMAG3;
511   if (size == 32)
512     e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS32;
513   else if (size == 64)
514     e_ident[elfcpp::EI_CLASS] = elfcpp::ELFCLASS64;
515   else
516     gold_unreachable();
517   e_ident[elfcpp::EI_DATA] = (big_endian
518                               ? elfcpp::ELFDATA2MSB
519                               : elfcpp::ELFDATA2LSB);
520   e_ident[elfcpp::EI_VERSION] = elfcpp::EV_CURRENT;
521   oehdr.put_e_ident(e_ident);
522
523   elfcpp::ET e_type;
524   if (parameters->options().relocatable())
525     e_type = elfcpp::ET_REL;
526   else if (parameters->options().output_is_position_independent())
527     e_type = elfcpp::ET_DYN;
528   else
529     e_type = elfcpp::ET_EXEC;
530   oehdr.put_e_type(e_type);
531
532   oehdr.put_e_machine(this->target_->machine_code());
533   oehdr.put_e_version(elfcpp::EV_CURRENT);
534
535   oehdr.put_e_entry(this->entry<size>());
536
537   if (this->segment_header_ == NULL)
538     oehdr.put_e_phoff(0);
539   else
540     oehdr.put_e_phoff(this->segment_header_->offset());
541
542   oehdr.put_e_shoff(this->section_header_->offset());
543   oehdr.put_e_flags(this->target_->processor_specific_flags());
544   oehdr.put_e_ehsize(elfcpp::Elf_sizes<size>::ehdr_size);
545
546   if (this->segment_header_ == NULL)
547     {
548       oehdr.put_e_phentsize(0);
549       oehdr.put_e_phnum(0);
550     }
551   else
552     {
553       oehdr.put_e_phentsize(elfcpp::Elf_sizes<size>::phdr_size);
554       size_t phnum = (this->segment_header_->data_size()
555                       / elfcpp::Elf_sizes<size>::phdr_size);
556       if (phnum > elfcpp::PN_XNUM)
557         phnum = elfcpp::PN_XNUM;
558       oehdr.put_e_phnum(phnum);
559     }
560
561   oehdr.put_e_shentsize(elfcpp::Elf_sizes<size>::shdr_size);
562   size_t section_count = (this->section_header_->data_size()
563                           / elfcpp::Elf_sizes<size>::shdr_size);
564
565   if (section_count < elfcpp::SHN_LORESERVE)
566     oehdr.put_e_shnum(this->section_header_->data_size()
567                       / elfcpp::Elf_sizes<size>::shdr_size);
568   else
569     oehdr.put_e_shnum(0);
570
571   unsigned int shstrndx = this->shstrtab_->out_shndx();
572   if (shstrndx < elfcpp::SHN_LORESERVE)
573     oehdr.put_e_shstrndx(this->shstrtab_->out_shndx());
574   else
575     oehdr.put_e_shstrndx(elfcpp::SHN_XINDEX);
576
577   // Let the target adjust the ELF header, e.g., to set EI_OSABI in
578   // the e_ident field.
579   this->target_->adjust_elf_header(view, ehdr_size);
580
581   of->write_output_view(0, ehdr_size, view);
582 }
583
584 // Return the value to use for the entry address.
585
586 template<int size>
587 typename elfcpp::Elf_types<size>::Elf_Addr
588 Output_file_header::entry()
589 {
590   const bool should_issue_warning = (parameters->options().entry() != NULL
591                                      && !parameters->options().relocatable()
592                                      && !parameters->options().shared());
593   const char* entry = parameters->entry();
594   Symbol* sym = this->symtab_->lookup(entry);
595
596   typename Sized_symbol<size>::Value_type v;
597   if (sym != NULL)
598     {
599       Sized_symbol<size>* ssym;
600       ssym = this->symtab_->get_sized_symbol<size>(sym);
601       if (!ssym->is_defined() && should_issue_warning)
602         gold_warning("entry symbol '%s' exists but is not defined", entry);
603       v = ssym->value();
604     }
605   else
606     {
607       // We couldn't find the entry symbol.  See if we can parse it as
608       // a number.  This supports, e.g., -e 0x1000.
609       char* endptr;
610       v = strtoull(entry, &endptr, 0);
611       if (*endptr != '\0')
612         {
613           if (should_issue_warning)
614             gold_warning("cannot find entry symbol '%s'", entry);
615           v = 0;
616         }
617     }
618
619   return v;
620 }
621
622 // Compute the current data size.
623
624 off_t
625 Output_file_header::do_size() const
626 {
627   const int size = parameters->target().get_size();
628   if (size == 32)
629     return elfcpp::Elf_sizes<32>::ehdr_size;
630   else if (size == 64)
631     return elfcpp::Elf_sizes<64>::ehdr_size;
632   else
633     gold_unreachable();
634 }
635
636 // Output_data_const methods.
637
638 void
639 Output_data_const::do_write(Output_file* of)
640 {
641   of->write(this->offset(), this->data_.data(), this->data_.size());
642 }
643
644 // Output_data_const_buffer methods.
645
646 void
647 Output_data_const_buffer::do_write(Output_file* of)
648 {
649   of->write(this->offset(), this->p_, this->data_size());
650 }
651
652 // Output_section_data methods.
653
654 // Record the output section, and set the entry size and such.
655
656 void
657 Output_section_data::set_output_section(Output_section* os)
658 {
659   gold_assert(this->output_section_ == NULL);
660   this->output_section_ = os;
661   this->do_adjust_output_section(os);
662 }
663
664 // Return the section index of the output section.
665
666 unsigned int
667 Output_section_data::do_out_shndx() const
668 {
669   gold_assert(this->output_section_ != NULL);
670   return this->output_section_->out_shndx();
671 }
672
673 // Set the alignment, which means we may need to update the alignment
674 // of the output section.
675
676 void
677 Output_section_data::set_addralign(uint64_t addralign)
678 {
679   this->addralign_ = addralign;
680   if (this->output_section_ != NULL
681       && this->output_section_->addralign() < addralign)
682     this->output_section_->set_addralign(addralign);
683 }
684
685 // Output_data_strtab methods.
686
687 // Set the final data size.
688
689 void
690 Output_data_strtab::set_final_data_size()
691 {
692   this->strtab_->set_string_offsets();
693   this->set_data_size(this->strtab_->get_strtab_size());
694 }
695
696 // Write out a string table.
697
698 void
699 Output_data_strtab::do_write(Output_file* of)
700 {
701   this->strtab_->write(of, this->offset());
702 }
703
704 // Output_reloc methods.
705
706 // A reloc against a global symbol.
707
708 template<bool dynamic, int size, bool big_endian>
709 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
710     Symbol* gsym,
711     unsigned int type,
712     Output_data* od,
713     Address address,
714     bool is_relative,
715     bool is_symbolless,
716     bool use_plt_offset)
717   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
718     is_relative_(is_relative), is_symbolless_(is_symbolless),
719     is_section_symbol_(false), use_plt_offset_(use_plt_offset), shndx_(INVALID_CODE)
720 {
721   // this->type_ is a bitfield; make sure TYPE fits.
722   gold_assert(this->type_ == type);
723   this->u1_.gsym = gsym;
724   this->u2_.od = od;
725   if (dynamic)
726     this->set_needs_dynsym_index();
727 }
728
729 template<bool dynamic, int size, bool big_endian>
730 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
731     Symbol* gsym,
732     unsigned int type,
733     Sized_relobj<size, big_endian>* relobj,
734     unsigned int shndx,
735     Address address,
736     bool is_relative,
737     bool is_symbolless,
738     bool use_plt_offset)
739   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
740     is_relative_(is_relative), is_symbolless_(is_symbolless),
741     is_section_symbol_(false), use_plt_offset_(use_plt_offset), shndx_(shndx)
742 {
743   gold_assert(shndx != INVALID_CODE);
744   // this->type_ is a bitfield; make sure TYPE fits.
745   gold_assert(this->type_ == type);
746   this->u1_.gsym = gsym;
747   this->u2_.relobj = relobj;
748   if (dynamic)
749     this->set_needs_dynsym_index();
750 }
751
752 // A reloc against a local symbol.
753
754 template<bool dynamic, int size, bool big_endian>
755 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
756     Sized_relobj<size, big_endian>* relobj,
757     unsigned int local_sym_index,
758     unsigned int type,
759     Output_data* od,
760     Address address,
761     bool is_relative,
762     bool is_symbolless,
763     bool is_section_symbol,
764     bool use_plt_offset)
765   : address_(address), local_sym_index_(local_sym_index), type_(type),
766     is_relative_(is_relative), is_symbolless_(is_symbolless),
767     is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
768     shndx_(INVALID_CODE)
769 {
770   gold_assert(local_sym_index != GSYM_CODE
771               && local_sym_index != INVALID_CODE);
772   // this->type_ is a bitfield; make sure TYPE fits.
773   gold_assert(this->type_ == type);
774   this->u1_.relobj = relobj;
775   this->u2_.od = od;
776   if (dynamic)
777     this->set_needs_dynsym_index();
778 }
779
780 template<bool dynamic, int size, bool big_endian>
781 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
782     Sized_relobj<size, big_endian>* relobj,
783     unsigned int local_sym_index,
784     unsigned int type,
785     unsigned int shndx,
786     Address address,
787     bool is_relative,
788     bool is_symbolless,
789     bool is_section_symbol,
790     bool use_plt_offset)
791   : address_(address), local_sym_index_(local_sym_index), type_(type),
792     is_relative_(is_relative), is_symbolless_(is_symbolless),
793     is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
794     shndx_(shndx)
795 {
796   gold_assert(local_sym_index != GSYM_CODE
797               && local_sym_index != INVALID_CODE);
798   gold_assert(shndx != INVALID_CODE);
799   // this->type_ is a bitfield; make sure TYPE fits.
800   gold_assert(this->type_ == type);
801   this->u1_.relobj = relobj;
802   this->u2_.relobj = relobj;
803   if (dynamic)
804     this->set_needs_dynsym_index();
805 }
806
807 // A reloc against the STT_SECTION symbol of an output section.
808
809 template<bool dynamic, int size, bool big_endian>
810 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
811     Output_section* os,
812     unsigned int type,
813     Output_data* od,
814     Address address,
815     bool is_relative)
816   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
817     is_relative_(is_relative), is_symbolless_(is_relative),
818     is_section_symbol_(true), use_plt_offset_(false), shndx_(INVALID_CODE)
819 {
820   // this->type_ is a bitfield; make sure TYPE fits.
821   gold_assert(this->type_ == type);
822   this->u1_.os = os;
823   this->u2_.od = od;
824   if (dynamic)
825     this->set_needs_dynsym_index();
826   else
827     os->set_needs_symtab_index();
828 }
829
830 template<bool dynamic, int size, bool big_endian>
831 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
832     Output_section* os,
833     unsigned int type,
834     Sized_relobj<size, big_endian>* relobj,
835     unsigned int shndx,
836     Address address,
837     bool is_relative)
838   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
839     is_relative_(is_relative), is_symbolless_(is_relative),
840     is_section_symbol_(true), use_plt_offset_(false), shndx_(shndx)
841 {
842   gold_assert(shndx != INVALID_CODE);
843   // this->type_ is a bitfield; make sure TYPE fits.
844   gold_assert(this->type_ == type);
845   this->u1_.os = os;
846   this->u2_.relobj = relobj;
847   if (dynamic)
848     this->set_needs_dynsym_index();
849   else
850     os->set_needs_symtab_index();
851 }
852
853 // An absolute or relative relocation.
854
855 template<bool dynamic, int size, bool big_endian>
856 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
857     unsigned int type,
858     Output_data* od,
859     Address address,
860     bool is_relative)
861   : address_(address), local_sym_index_(0), type_(type),
862     is_relative_(is_relative), is_symbolless_(false),
863     is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
864 {
865   // this->type_ is a bitfield; make sure TYPE fits.
866   gold_assert(this->type_ == type);
867   this->u1_.relobj = NULL;
868   this->u2_.od = od;
869 }
870
871 template<bool dynamic, int size, bool big_endian>
872 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
873     unsigned int type,
874     Sized_relobj<size, big_endian>* relobj,
875     unsigned int shndx,
876     Address address,
877     bool is_relative)
878   : address_(address), local_sym_index_(0), type_(type),
879     is_relative_(is_relative), is_symbolless_(false),
880     is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
881 {
882   gold_assert(shndx != INVALID_CODE);
883   // this->type_ is a bitfield; make sure TYPE fits.
884   gold_assert(this->type_ == type);
885   this->u1_.relobj = NULL;
886   this->u2_.relobj = relobj;
887 }
888
889 // A target specific relocation.
890
891 template<bool dynamic, int size, bool big_endian>
892 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
893     unsigned int type,
894     void* arg,
895     Output_data* od,
896     Address address)
897   : address_(address), local_sym_index_(TARGET_CODE), type_(type),
898     is_relative_(false), is_symbolless_(false),
899     is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
900 {
901   // this->type_ is a bitfield; make sure TYPE fits.
902   gold_assert(this->type_ == type);
903   this->u1_.arg = arg;
904   this->u2_.od = od;
905 }
906
907 template<bool dynamic, int size, bool big_endian>
908 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
909     unsigned int type,
910     void* arg,
911     Sized_relobj<size, big_endian>* relobj,
912     unsigned int shndx,
913     Address address)
914   : address_(address), local_sym_index_(TARGET_CODE), type_(type),
915     is_relative_(false), is_symbolless_(false),
916     is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
917 {
918   gold_assert(shndx != INVALID_CODE);
919   // this->type_ is a bitfield; make sure TYPE fits.
920   gold_assert(this->type_ == type);
921   this->u1_.arg = arg;
922   this->u2_.relobj = relobj;
923 }
924
925 // Record that we need a dynamic symbol index for this relocation.
926
927 template<bool dynamic, int size, bool big_endian>
928 void
929 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
930 set_needs_dynsym_index()
931 {
932   if (this->is_symbolless_)
933     return;
934   switch (this->local_sym_index_)
935     {
936     case INVALID_CODE:
937       gold_unreachable();
938
939     case GSYM_CODE:
940       this->u1_.gsym->set_needs_dynsym_entry();
941       break;
942
943     case SECTION_CODE:
944       this->u1_.os->set_needs_dynsym_index();
945       break;
946
947     case TARGET_CODE:
948       // The target must take care of this if necessary.
949       break;
950
951     case 0:
952       break;
953
954     default:
955       {
956         const unsigned int lsi = this->local_sym_index_;
957         Sized_relobj_file<size, big_endian>* relobj =
958             this->u1_.relobj->sized_relobj();
959         gold_assert(relobj != NULL);
960         if (!this->is_section_symbol_)
961           relobj->set_needs_output_dynsym_entry(lsi);
962         else
963           relobj->output_section(lsi)->set_needs_dynsym_index();
964       }
965       break;
966     }
967 }
968
969 // Get the symbol index of a relocation.
970
971 template<bool dynamic, int size, bool big_endian>
972 unsigned int
973 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::get_symbol_index()
974   const
975 {
976   unsigned int index;
977   if (this->is_symbolless_)
978     return 0;
979   switch (this->local_sym_index_)
980     {
981     case INVALID_CODE:
982       gold_unreachable();
983
984     case GSYM_CODE:
985       if (this->u1_.gsym == NULL)
986         index = 0;
987       else if (dynamic)
988         index = this->u1_.gsym->dynsym_index();
989       else
990         index = this->u1_.gsym->symtab_index();
991       break;
992
993     case SECTION_CODE:
994       if (dynamic)
995         index = this->u1_.os->dynsym_index();
996       else
997         index = this->u1_.os->symtab_index();
998       break;
999
1000     case TARGET_CODE:
1001       index = parameters->target().reloc_symbol_index(this->u1_.arg,
1002                                                       this->type_);
1003       break;
1004
1005     case 0:
1006       // Relocations without symbols use a symbol index of 0.
1007       index = 0;
1008       break;
1009
1010     default:
1011       {
1012         const unsigned int lsi = this->local_sym_index_;
1013         Sized_relobj_file<size, big_endian>* relobj =
1014             this->u1_.relobj->sized_relobj();
1015         gold_assert(relobj != NULL);
1016         if (!this->is_section_symbol_)
1017           {
1018             if (dynamic)
1019               index = relobj->dynsym_index(lsi);
1020             else
1021               index = relobj->symtab_index(lsi);
1022           }
1023         else
1024           {
1025             Output_section* os = relobj->output_section(lsi);
1026             gold_assert(os != NULL);
1027             if (dynamic)
1028               index = os->dynsym_index();
1029             else
1030               index = os->symtab_index();
1031           }
1032       }
1033       break;
1034     }
1035   gold_assert(index != -1U);
1036   return index;
1037 }
1038
1039 // For a local section symbol, get the address of the offset ADDEND
1040 // within the input section.
1041
1042 template<bool dynamic, int size, bool big_endian>
1043 typename elfcpp::Elf_types<size>::Elf_Addr
1044 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
1045   local_section_offset(Addend addend) const
1046 {
1047   gold_assert(this->local_sym_index_ != GSYM_CODE
1048               && this->local_sym_index_ != SECTION_CODE
1049               && this->local_sym_index_ != TARGET_CODE
1050               && this->local_sym_index_ != INVALID_CODE
1051               && this->local_sym_index_ != 0
1052               && this->is_section_symbol_);
1053   const unsigned int lsi = this->local_sym_index_;
1054   Output_section* os = this->u1_.relobj->output_section(lsi);
1055   gold_assert(os != NULL);
1056   Address offset = this->u1_.relobj->get_output_section_offset(lsi);
1057   if (offset != invalid_address)
1058     return offset + addend;
1059   // This is a merge section.
1060   Sized_relobj_file<size, big_endian>* relobj =
1061       this->u1_.relobj->sized_relobj();
1062   gold_assert(relobj != NULL);
1063   offset = os->output_address(relobj, lsi, addend);
1064   gold_assert(offset != invalid_address);
1065   return offset;
1066 }
1067
1068 // Get the output address of a relocation.
1069
1070 template<bool dynamic, int size, bool big_endian>
1071 typename elfcpp::Elf_types<size>::Elf_Addr
1072 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::get_address() const
1073 {
1074   Address address = this->address_;
1075   if (this->shndx_ != INVALID_CODE)
1076     {
1077       Output_section* os = this->u2_.relobj->output_section(this->shndx_);
1078       gold_assert(os != NULL);
1079       Address off = this->u2_.relobj->get_output_section_offset(this->shndx_);
1080       if (off != invalid_address)
1081         address += os->address() + off;
1082       else
1083         {
1084           Sized_relobj_file<size, big_endian>* relobj =
1085               this->u2_.relobj->sized_relobj();
1086           gold_assert(relobj != NULL);
1087           address = os->output_address(relobj, this->shndx_, address);
1088           gold_assert(address != invalid_address);
1089         }
1090     }
1091   else if (this->u2_.od != NULL)
1092     address += this->u2_.od->address();
1093   return address;
1094 }
1095
1096 // Write out the offset and info fields of a Rel or Rela relocation
1097 // entry.
1098
1099 template<bool dynamic, int size, bool big_endian>
1100 template<typename Write_rel>
1101 void
1102 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write_rel(
1103     Write_rel* wr) const
1104 {
1105   wr->put_r_offset(this->get_address());
1106   unsigned int sym_index = this->get_symbol_index();
1107   wr->put_r_info(elfcpp::elf_r_info<size>(sym_index, this->type_));
1108 }
1109
1110 // Write out a Rel relocation.
1111
1112 template<bool dynamic, int size, bool big_endian>
1113 void
1114 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::write(
1115     unsigned char* pov) const
1116 {
1117   elfcpp::Rel_write<size, big_endian> orel(pov);
1118   this->write_rel(&orel);
1119 }
1120
1121 // Get the value of the symbol referred to by a Rel relocation.
1122
1123 template<bool dynamic, int size, bool big_endian>
1124 typename elfcpp::Elf_types<size>::Elf_Addr
1125 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::symbol_value(
1126     Addend addend) const
1127 {
1128   if (this->local_sym_index_ == GSYM_CODE)
1129     {
1130       const Sized_symbol<size>* sym;
1131       sym = static_cast<const Sized_symbol<size>*>(this->u1_.gsym);
1132       if (this->use_plt_offset_ && sym->has_plt_offset())
1133         return parameters->target().plt_address_for_global(sym);
1134       else
1135         return sym->value() + addend;
1136     }
1137   if (this->local_sym_index_ == SECTION_CODE)
1138     {
1139       gold_assert(!this->use_plt_offset_);
1140       return this->u1_.os->address() + addend;
1141     }
1142   gold_assert(this->local_sym_index_ != TARGET_CODE
1143               && this->local_sym_index_ != INVALID_CODE
1144               && this->local_sym_index_ != 0
1145               && !this->is_section_symbol_);
1146   const unsigned int lsi = this->local_sym_index_;
1147   Sized_relobj_file<size, big_endian>* relobj =
1148       this->u1_.relobj->sized_relobj();
1149   gold_assert(relobj != NULL);
1150   if (this->use_plt_offset_)
1151     return parameters->target().plt_address_for_local(relobj, lsi);
1152   const Symbol_value<size>* symval = relobj->local_symbol(lsi);
1153   return symval->value(relobj, addend);
1154 }
1155
1156 // Reloc comparison.  This function sorts the dynamic relocs for the
1157 // benefit of the dynamic linker.  First we sort all relative relocs
1158 // to the front.  Among relative relocs, we sort by output address.
1159 // Among non-relative relocs, we sort by symbol index, then by output
1160 // address.
1161
1162 template<bool dynamic, int size, bool big_endian>
1163 int
1164 Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::
1165   compare(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>& r2)
1166     const
1167 {
1168   if (this->is_relative_)
1169     {
1170       if (!r2.is_relative_)
1171         return -1;
1172       // Otherwise sort by reloc address below.
1173     }
1174   else if (r2.is_relative_)
1175     return 1;
1176   else
1177     {
1178       unsigned int sym1 = this->get_symbol_index();
1179       unsigned int sym2 = r2.get_symbol_index();
1180       if (sym1 < sym2)
1181         return -1;
1182       else if (sym1 > sym2)
1183         return 1;
1184       // Otherwise sort by reloc address.
1185     }
1186
1187   section_offset_type addr1 = this->get_address();
1188   section_offset_type addr2 = r2.get_address();
1189   if (addr1 < addr2)
1190     return -1;
1191   else if (addr1 > addr2)
1192     return 1;
1193
1194   // Final tie breaker, in order to generate the same output on any
1195   // host: reloc type.
1196   unsigned int type1 = this->type_;
1197   unsigned int type2 = r2.type_;
1198   if (type1 < type2)
1199     return -1;
1200   else if (type1 > type2)
1201     return 1;
1202
1203   // These relocs appear to be exactly the same.
1204   return 0;
1205 }
1206
1207 // Write out a Rela relocation.
1208
1209 template<bool dynamic, int size, bool big_endian>
1210 void
1211 Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>::write(
1212     unsigned char* pov) const
1213 {
1214   elfcpp::Rela_write<size, big_endian> orel(pov);
1215   this->rel_.write_rel(&orel);
1216   Addend addend = this->addend_;
1217   if (this->rel_.is_target_specific())
1218     addend = parameters->target().reloc_addend(this->rel_.target_arg(),
1219                                                this->rel_.type(), addend);
1220   else if (this->rel_.is_symbolless())
1221     addend = this->rel_.symbol_value(addend);
1222   else if (this->rel_.is_local_section_symbol())
1223     addend = this->rel_.local_section_offset(addend);
1224   orel.put_r_addend(addend);
1225 }
1226
1227 // Output_data_reloc_base methods.
1228
1229 // Adjust the output section.
1230
1231 template<int sh_type, bool dynamic, int size, bool big_endian>
1232 void
1233 Output_data_reloc_base<sh_type, dynamic, size, big_endian>
1234     ::do_adjust_output_section(Output_section* os)
1235 {
1236   if (sh_type == elfcpp::SHT_REL)
1237     os->set_entsize(elfcpp::Elf_sizes<size>::rel_size);
1238   else if (sh_type == elfcpp::SHT_RELA)
1239     os->set_entsize(elfcpp::Elf_sizes<size>::rela_size);
1240   else
1241     gold_unreachable();
1242
1243   // A STT_GNU_IFUNC symbol may require a IRELATIVE reloc when doing a
1244   // static link.  The backends will generate a dynamic reloc section
1245   // to hold this.  In that case we don't want to link to the dynsym
1246   // section, because there isn't one.
1247   if (!dynamic)
1248     os->set_should_link_to_symtab();
1249   else if (parameters->doing_static_link())
1250     ;
1251   else
1252     os->set_should_link_to_dynsym();
1253 }
1254
1255 // Standard relocation writer, which just calls Output_reloc::write().
1256
1257 template<int sh_type, bool dynamic, int size, bool big_endian>
1258 struct Output_reloc_writer
1259 {
1260   typedef Output_reloc<sh_type, dynamic, size, big_endian> Output_reloc_type;
1261   typedef std::vector<Output_reloc_type> Relocs;
1262
1263   static void
1264   write(typename Relocs::const_iterator p, unsigned char* pov)
1265   { p->write(pov); }
1266 };
1267
1268 // Write out relocation data.
1269
1270 template<int sh_type, bool dynamic, int size, bool big_endian>
1271 void
1272 Output_data_reloc_base<sh_type, dynamic, size, big_endian>::do_write(
1273     Output_file* of)
1274 {
1275   typedef Output_reloc_writer<sh_type, dynamic, size, big_endian> Writer;
1276   this->do_write_generic<Writer>(of);
1277 }
1278
1279 // Class Output_relocatable_relocs.
1280
1281 template<int sh_type, int size, bool big_endian>
1282 void
1283 Output_relocatable_relocs<sh_type, size, big_endian>::set_final_data_size()
1284 {
1285   this->set_data_size(this->rr_->output_reloc_count()
1286                       * Reloc_types<sh_type, size, big_endian>::reloc_size);
1287 }
1288
1289 // class Output_data_group.
1290
1291 template<int size, bool big_endian>
1292 Output_data_group<size, big_endian>::Output_data_group(
1293     Sized_relobj_file<size, big_endian>* relobj,
1294     section_size_type entry_count,
1295     elfcpp::Elf_Word flags,
1296     std::vector<unsigned int>* input_shndxes)
1297   : Output_section_data(entry_count * 4, 4, false),
1298     relobj_(relobj),
1299     flags_(flags)
1300 {
1301   this->input_shndxes_.swap(*input_shndxes);
1302 }
1303
1304 // Write out the section group, which means translating the section
1305 // indexes to apply to the output file.
1306
1307 template<int size, bool big_endian>
1308 void
1309 Output_data_group<size, big_endian>::do_write(Output_file* of)
1310 {
1311   const off_t off = this->offset();
1312   const section_size_type oview_size =
1313     convert_to_section_size_type(this->data_size());
1314   unsigned char* const oview = of->get_output_view(off, oview_size);
1315
1316   elfcpp::Elf_Word* contents = reinterpret_cast<elfcpp::Elf_Word*>(oview);
1317   elfcpp::Swap<32, big_endian>::writeval(contents, this->flags_);
1318   ++contents;
1319
1320   for (std::vector<unsigned int>::const_iterator p =
1321          this->input_shndxes_.begin();
1322        p != this->input_shndxes_.end();
1323        ++p, ++contents)
1324     {
1325       Output_section* os = this->relobj_->output_section(*p);
1326
1327       unsigned int output_shndx;
1328       if (os != NULL)
1329         output_shndx = os->out_shndx();
1330       else
1331         {
1332           this->relobj_->error(_("section group retained but "
1333                                  "group element discarded"));
1334           output_shndx = 0;
1335         }
1336
1337       elfcpp::Swap<32, big_endian>::writeval(contents, output_shndx);
1338     }
1339
1340   size_t wrote = reinterpret_cast<unsigned char*>(contents) - oview;
1341   gold_assert(wrote == oview_size);
1342
1343   of->write_output_view(off, oview_size, oview);
1344
1345   // We no longer need this information.
1346   this->input_shndxes_.clear();
1347 }
1348
1349 // Output_data_got::Got_entry methods.
1350
1351 // Write out the entry.
1352
1353 template<int got_size, bool big_endian>
1354 void
1355 Output_data_got<got_size, big_endian>::Got_entry::write(
1356     unsigned int got_indx,
1357     unsigned char* pov) const
1358 {
1359   Valtype val = 0;
1360
1361   switch (this->local_sym_index_)
1362     {
1363     case GSYM_CODE:
1364       {
1365         // If the symbol is resolved locally, we need to write out the
1366         // link-time value, which will be relocated dynamically by a
1367         // RELATIVE relocation.
1368         Symbol* gsym = this->u_.gsym;
1369         if (this->use_plt_or_tls_offset_ && gsym->has_plt_offset())
1370           val = parameters->target().plt_address_for_global(gsym);
1371         else
1372           {
1373             switch (parameters->size_and_endianness())
1374               {
1375 #if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
1376               case Parameters::TARGET_32_LITTLE:
1377               case Parameters::TARGET_32_BIG:
1378                 {
1379                   // This cast is ugly.  We don't want to put a
1380                   // virtual method in Symbol, because we want Symbol
1381                   // to be as small as possible.
1382                   Sized_symbol<32>::Value_type v;
1383                   v = static_cast<Sized_symbol<32>*>(gsym)->value();
1384                   val = convert_types<Valtype, Sized_symbol<32>::Value_type>(v);
1385                 }
1386                 break;
1387 #endif
1388 #if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
1389               case Parameters::TARGET_64_LITTLE:
1390               case Parameters::TARGET_64_BIG:
1391                 {
1392                   Sized_symbol<64>::Value_type v;
1393                   v = static_cast<Sized_symbol<64>*>(gsym)->value();
1394                   val = convert_types<Valtype, Sized_symbol<64>::Value_type>(v);
1395                 }
1396                 break;
1397 #endif
1398               default:
1399                 gold_unreachable();
1400               }
1401             if (this->use_plt_or_tls_offset_
1402                 && gsym->type() == elfcpp::STT_TLS)
1403               val += parameters->target().tls_offset_for_global(gsym,
1404                                                                 got_indx);
1405           }
1406       }
1407       break;
1408
1409     case CONSTANT_CODE:
1410       val = this->u_.constant;
1411       break;
1412
1413     case RESERVED_CODE:
1414       // If we're doing an incremental update, don't touch this GOT entry.
1415       if (parameters->incremental_update())
1416         return;
1417       val = this->u_.constant;
1418       break;
1419
1420     default:
1421       {
1422         const Relobj* object = this->u_.object;
1423         const unsigned int lsi = this->local_sym_index_;
1424         bool is_tls = object->local_is_tls(lsi);
1425         if (this->use_plt_or_tls_offset_ && !is_tls)
1426           val = parameters->target().plt_address_for_local(object, lsi);
1427         else
1428           {
1429             uint64_t lval = object->local_symbol_value(lsi, this->addend_);
1430             val = convert_types<Valtype, uint64_t>(lval);
1431             if (this->use_plt_or_tls_offset_ && is_tls)
1432               val += parameters->target().tls_offset_for_local(object, lsi,
1433                                                                got_indx);
1434           }
1435       }
1436       break;
1437     }
1438
1439   elfcpp::Swap<got_size, big_endian>::writeval(pov, val);
1440 }
1441
1442 // Output_data_got methods.
1443
1444 // Add an entry for a global symbol to the GOT.  This returns true if
1445 // this is a new GOT entry, false if the symbol already had a GOT
1446 // entry.
1447
1448 template<int got_size, bool big_endian>
1449 bool
1450 Output_data_got<got_size, big_endian>::add_global(
1451     Symbol* gsym,
1452     unsigned int got_type)
1453 {
1454   if (gsym->has_got_offset(got_type))
1455     return false;
1456
1457   unsigned int got_offset = this->add_got_entry(Got_entry(gsym, false));
1458   gsym->set_got_offset(got_type, got_offset);
1459   return true;
1460 }
1461
1462 // Like add_global, but use the PLT offset.
1463
1464 template<int got_size, bool big_endian>
1465 bool
1466 Output_data_got<got_size, big_endian>::add_global_plt(Symbol* gsym,
1467                                                       unsigned int got_type)
1468 {
1469   if (gsym->has_got_offset(got_type))
1470     return false;
1471
1472   unsigned int got_offset = this->add_got_entry(Got_entry(gsym, true));
1473   gsym->set_got_offset(got_type, got_offset);
1474   return true;
1475 }
1476
1477 // Add an entry for a global symbol to the GOT, and add a dynamic
1478 // relocation of type R_TYPE for the GOT entry.
1479
1480 template<int got_size, bool big_endian>
1481 void
1482 Output_data_got<got_size, big_endian>::add_global_with_rel(
1483     Symbol* gsym,
1484     unsigned int got_type,
1485     Output_data_reloc_generic* rel_dyn,
1486     unsigned int r_type)
1487 {
1488   if (gsym->has_got_offset(got_type))
1489     return;
1490
1491   unsigned int got_offset = this->add_got_entry(Got_entry());
1492   gsym->set_got_offset(got_type, got_offset);
1493   rel_dyn->add_global_generic(gsym, r_type, this, got_offset, 0);
1494 }
1495
1496 // Add a pair of entries for a global symbol to the GOT, and add
1497 // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
1498 // If R_TYPE_2 == 0, add the second entry with no relocation.
1499 template<int got_size, bool big_endian>
1500 void
1501 Output_data_got<got_size, big_endian>::add_global_pair_with_rel(
1502     Symbol* gsym,
1503     unsigned int got_type,
1504     Output_data_reloc_generic* rel_dyn,
1505     unsigned int r_type_1,
1506     unsigned int r_type_2)
1507 {
1508   if (gsym->has_got_offset(got_type))
1509     return;
1510
1511   unsigned int got_offset = this->add_got_entry_pair(Got_entry(), Got_entry());
1512   gsym->set_got_offset(got_type, got_offset);
1513   rel_dyn->add_global_generic(gsym, r_type_1, this, got_offset, 0);
1514
1515   if (r_type_2 != 0)
1516     rel_dyn->add_global_generic(gsym, r_type_2, this,
1517                                 got_offset + got_size / 8, 0);
1518 }
1519
1520 // Add an entry for a local symbol to the GOT.  This returns true if
1521 // this is a new GOT entry, false if the symbol already has a GOT
1522 // entry.
1523
1524 template<int got_size, bool big_endian>
1525 bool
1526 Output_data_got<got_size, big_endian>::add_local(
1527     Relobj* object,
1528     unsigned int symndx,
1529     unsigned int got_type)
1530 {
1531   if (object->local_has_got_offset(symndx, got_type))
1532     return false;
1533
1534   unsigned int got_offset = this->add_got_entry(Got_entry(object, symndx,
1535                                                           false));
1536   object->set_local_got_offset(symndx, got_type, got_offset);
1537   return true;
1538 }
1539
1540 // Add an entry for a local symbol plus ADDEND to the GOT.  This returns
1541 // true if this is a new GOT entry, false if the symbol already has a GOT
1542 // entry.
1543
1544 template<int got_size, bool big_endian>
1545 bool
1546 Output_data_got<got_size, big_endian>::add_local(
1547     Relobj* object,
1548     unsigned int symndx,
1549     unsigned int got_type,
1550     uint64_t addend)
1551 {
1552   if (object->local_has_got_offset(symndx, got_type, addend))
1553     return false;
1554
1555   unsigned int got_offset = this->add_got_entry(Got_entry(object, symndx,
1556                                                           false, addend));
1557   object->set_local_got_offset(symndx, got_type, got_offset, addend);
1558   return true;
1559 }
1560
1561 // Like add_local, but use the PLT offset.
1562
1563 template<int got_size, bool big_endian>
1564 bool
1565 Output_data_got<got_size, big_endian>::add_local_plt(
1566     Relobj* object,
1567     unsigned int symndx,
1568     unsigned int got_type)
1569 {
1570   if (object->local_has_got_offset(symndx, got_type))
1571     return false;
1572
1573   unsigned int got_offset = this->add_got_entry(Got_entry(object, symndx,
1574                                                           true));
1575   object->set_local_got_offset(symndx, got_type, got_offset);
1576   return true;
1577 }
1578
1579 // Add an entry for a local symbol to the GOT, and add a dynamic
1580 // relocation of type R_TYPE for the GOT entry.
1581
1582 template<int got_size, bool big_endian>
1583 void
1584 Output_data_got<got_size, big_endian>::add_local_with_rel(
1585     Relobj* object,
1586     unsigned int symndx,
1587     unsigned int got_type,
1588     Output_data_reloc_generic* rel_dyn,
1589     unsigned int r_type)
1590 {
1591   if (object->local_has_got_offset(symndx, got_type))
1592     return;
1593
1594   unsigned int got_offset = this->add_got_entry(Got_entry());
1595   object->set_local_got_offset(symndx, got_type, got_offset);
1596   rel_dyn->add_local_generic(object, symndx, r_type, this, got_offset, 0);
1597 }
1598
1599 // Add an entry for a local symbol plus ADDEND to the GOT, and add a dynamic
1600 // relocation of type R_TYPE for the GOT entry.
1601
1602 template<int got_size, bool big_endian>
1603 void
1604 Output_data_got<got_size, big_endian>::add_local_with_rel(
1605     Relobj* object,
1606     unsigned int symndx,
1607     unsigned int got_type,
1608     Output_data_reloc_generic* rel_dyn,
1609     unsigned int r_type, uint64_t addend)
1610 {
1611   if (object->local_has_got_offset(symndx, got_type, addend))
1612     return;
1613
1614   unsigned int got_offset = this->add_got_entry(Got_entry());
1615   object->set_local_got_offset(symndx, got_type, got_offset, addend);
1616   rel_dyn->add_local_generic(object, symndx, r_type, this, got_offset,
1617                              addend);
1618 }
1619
1620 // Add a pair of entries for a local symbol to the GOT, and add
1621 // a dynamic relocation of type R_TYPE using the section symbol of
1622 // the output section to which input section SHNDX maps, on the first.
1623 // The first got entry will have a value of zero, the second the
1624 // value of the local symbol.
1625 template<int got_size, bool big_endian>
1626 void
1627 Output_data_got<got_size, big_endian>::add_local_pair_with_rel(
1628     Relobj* object,
1629     unsigned int symndx,
1630     unsigned int shndx,
1631     unsigned int got_type,
1632     Output_data_reloc_generic* rel_dyn,
1633     unsigned int r_type)
1634 {
1635   if (object->local_has_got_offset(symndx, got_type))
1636     return;
1637
1638   unsigned int got_offset =
1639       this->add_got_entry_pair(Got_entry(),
1640                                Got_entry(object, symndx, false));
1641   object->set_local_got_offset(symndx, got_type, got_offset);
1642   Output_section* os = object->output_section(shndx);
1643   rel_dyn->add_output_section_generic(os, r_type, this, got_offset, 0);
1644 }
1645
1646 // Add a pair of entries for a local symbol plus ADDEND to the GOT, and add
1647 // a dynamic relocation of type R_TYPE using the section symbol of
1648 // the output section to which input section SHNDX maps, on the first.
1649 // The first got entry will have a value of zero, the second the
1650 // value of the local symbol.
1651 template<int got_size, bool big_endian>
1652 void
1653 Output_data_got<got_size, big_endian>::add_local_pair_with_rel(
1654     Relobj* object,
1655     unsigned int symndx,
1656     unsigned int shndx,
1657     unsigned int got_type,
1658     Output_data_reloc_generic* rel_dyn,
1659     unsigned int r_type, uint64_t addend)
1660 {
1661   if (object->local_has_got_offset(symndx, got_type, addend))
1662     return;
1663
1664   unsigned int got_offset =
1665       this->add_got_entry_pair(Got_entry(),
1666                                Got_entry(object, symndx, false, addend));
1667   object->set_local_got_offset(symndx, got_type, got_offset, addend);
1668   Output_section* os = object->output_section(shndx);
1669   rel_dyn->add_output_section_generic(os, r_type, this, got_offset, addend);
1670 }
1671
1672 // Add a pair of entries for a local symbol to the GOT, and add
1673 // a dynamic relocation of type R_TYPE using STN_UNDEF on the first.
1674 // The first got entry will have a value of zero, the second the
1675 // value of the local symbol offset by Target::tls_offset_for_local.
1676 template<int got_size, bool big_endian>
1677 void
1678 Output_data_got<got_size, big_endian>::add_local_tls_pair(
1679     Relobj* object,
1680     unsigned int symndx,
1681     unsigned int got_type,
1682     Output_data_reloc_generic* rel_dyn,
1683     unsigned int r_type)
1684 {
1685   if (object->local_has_got_offset(symndx, got_type))
1686     return;
1687
1688   unsigned int got_offset
1689     = this->add_got_entry_pair(Got_entry(),
1690                                Got_entry(object, symndx, true));
1691   object->set_local_got_offset(symndx, got_type, got_offset);
1692   rel_dyn->add_local_generic(object, 0, r_type, this, got_offset, 0);
1693 }
1694
1695 // Reserve a slot in the GOT for a local symbol or the second slot of a pair.
1696
1697 template<int got_size, bool big_endian>
1698 void
1699 Output_data_got<got_size, big_endian>::reserve_local(
1700     unsigned int i,
1701     Relobj* object,
1702     unsigned int sym_index,
1703     unsigned int got_type)
1704 {
1705   this->do_reserve_slot(i);
1706   object->set_local_got_offset(sym_index, got_type, this->got_offset(i));
1707 }
1708
1709 // Reserve a slot in the GOT for a global symbol.
1710
1711 template<int got_size, bool big_endian>
1712 void
1713 Output_data_got<got_size, big_endian>::reserve_global(
1714     unsigned int i,
1715     Symbol* gsym,
1716     unsigned int got_type)
1717 {
1718   this->do_reserve_slot(i);
1719   gsym->set_got_offset(got_type, this->got_offset(i));
1720 }
1721
1722 // Write out the GOT.
1723
1724 template<int got_size, bool big_endian>
1725 void
1726 Output_data_got<got_size, big_endian>::do_write(Output_file* of)
1727 {
1728   const int add = got_size / 8;
1729
1730   const off_t off = this->offset();
1731   const off_t oview_size = this->data_size();
1732   unsigned char* const oview = of->get_output_view(off, oview_size);
1733
1734   unsigned char* pov = oview;
1735   for (unsigned int i = 0; i < this->entries_.size(); ++i)
1736     {
1737       this->entries_[i].write(i, pov);
1738       pov += add;
1739     }
1740
1741   gold_assert(pov - oview == oview_size);
1742
1743   of->write_output_view(off, oview_size, oview);
1744
1745   // We no longer need the GOT entries.
1746   this->entries_.clear();
1747 }
1748
1749 // Create a new GOT entry and return its offset.
1750
1751 template<int got_size, bool big_endian>
1752 unsigned int
1753 Output_data_got<got_size, big_endian>::add_got_entry(Got_entry got_entry)
1754 {
1755   if (!this->is_data_size_valid())
1756     {
1757       this->entries_.push_back(got_entry);
1758       this->set_got_size();
1759       return this->last_got_offset();
1760     }
1761   else
1762     {
1763       // For an incremental update, find an available slot.
1764       off_t got_offset = this->free_list_.allocate(got_size / 8,
1765                                                    got_size / 8, 0);
1766       if (got_offset == -1)
1767         gold_fallback(_("out of patch space (GOT);"
1768                         " relink with --incremental-full"));
1769       unsigned int got_index = got_offset / (got_size / 8);
1770       gold_assert(got_index < this->entries_.size());
1771       this->entries_[got_index] = got_entry;
1772       return static_cast<unsigned int>(got_offset);
1773     }
1774 }
1775
1776 // Create a pair of new GOT entries and return the offset of the first.
1777
1778 template<int got_size, bool big_endian>
1779 unsigned int
1780 Output_data_got<got_size, big_endian>::add_got_entry_pair(
1781     Got_entry got_entry_1,
1782     Got_entry got_entry_2)
1783 {
1784   if (!this->is_data_size_valid())
1785     {
1786       unsigned int got_offset;
1787       this->entries_.push_back(got_entry_1);
1788       got_offset = this->last_got_offset();
1789       this->entries_.push_back(got_entry_2);
1790       this->set_got_size();
1791       return got_offset;
1792     }
1793   else
1794     {
1795       // For an incremental update, find an available pair of slots.
1796       off_t got_offset = this->free_list_.allocate(2 * got_size / 8,
1797                                                    got_size / 8, 0);
1798       if (got_offset == -1)
1799         gold_fallback(_("out of patch space (GOT);"
1800                         " relink with --incremental-full"));
1801       unsigned int got_index = got_offset / (got_size / 8);
1802       gold_assert(got_index < this->entries_.size());
1803       this->entries_[got_index] = got_entry_1;
1804       this->entries_[got_index + 1] = got_entry_2;
1805       return static_cast<unsigned int>(got_offset);
1806     }
1807 }
1808
1809 // Replace GOT entry I with a new value.
1810
1811 template<int got_size, bool big_endian>
1812 void
1813 Output_data_got<got_size, big_endian>::replace_got_entry(
1814     unsigned int i,
1815     Got_entry got_entry)
1816 {
1817   gold_assert(i < this->entries_.size());
1818   this->entries_[i] = got_entry;
1819 }
1820
1821 // Output_data_dynamic::Dynamic_entry methods.
1822
1823 // Write out the entry.
1824
1825 template<int size, bool big_endian>
1826 void
1827 Output_data_dynamic::Dynamic_entry::write(
1828     unsigned char* pov,
1829     const Stringpool* pool) const
1830 {
1831   typename elfcpp::Elf_types<size>::Elf_WXword val;
1832   switch (this->offset_)
1833     {
1834     case DYNAMIC_NUMBER:
1835       val = this->u_.val;
1836       break;
1837
1838     case DYNAMIC_SECTION_SIZE:
1839       val = this->u_.od->data_size();
1840       if (this->od2 != NULL)
1841         val += this->od2->data_size();
1842       break;
1843
1844     case DYNAMIC_SYMBOL:
1845       {
1846         const Sized_symbol<size>* s =
1847           static_cast<const Sized_symbol<size>*>(this->u_.sym);
1848         val = s->value();
1849       }
1850       break;
1851
1852     case DYNAMIC_STRING:
1853       val = pool->get_offset(this->u_.str);
1854       break;
1855
1856     case DYNAMIC_CUSTOM:
1857       val = parameters->target().dynamic_tag_custom_value(this->tag_);
1858       break;
1859
1860     default:
1861       val = this->u_.od->address() + this->offset_;
1862       break;
1863     }
1864
1865   elfcpp::Dyn_write<size, big_endian> dw(pov);
1866   dw.put_d_tag(this->tag_);
1867   dw.put_d_val(val);
1868 }
1869
1870 // Output_data_dynamic methods.
1871
1872 // Adjust the output section to set the entry size.
1873
1874 void
1875 Output_data_dynamic::do_adjust_output_section(Output_section* os)
1876 {
1877   if (parameters->target().get_size() == 32)
1878     os->set_entsize(elfcpp::Elf_sizes<32>::dyn_size);
1879   else if (parameters->target().get_size() == 64)
1880     os->set_entsize(elfcpp::Elf_sizes<64>::dyn_size);
1881   else
1882     gold_unreachable();
1883 }
1884
1885 // Set the final data size.
1886
1887 void
1888 Output_data_dynamic::set_final_data_size()
1889 {
1890   // Add the terminating entry if it hasn't been added.
1891   // Because of relaxation, we can run this multiple times.
1892   if (this->entries_.empty() || this->entries_.back().tag() != elfcpp::DT_NULL)
1893     {
1894       int extra = parameters->options().spare_dynamic_tags();
1895       for (int i = 0; i < extra; ++i)
1896         this->add_constant(elfcpp::DT_NULL, 0);
1897       this->add_constant(elfcpp::DT_NULL, 0);
1898     }
1899
1900   int dyn_size;
1901   if (parameters->target().get_size() == 32)
1902     dyn_size = elfcpp::Elf_sizes<32>::dyn_size;
1903   else if (parameters->target().get_size() == 64)
1904     dyn_size = elfcpp::Elf_sizes<64>::dyn_size;
1905   else
1906     gold_unreachable();
1907   this->set_data_size(this->entries_.size() * dyn_size);
1908 }
1909
1910 // Write out the dynamic entries.
1911
1912 void
1913 Output_data_dynamic::do_write(Output_file* of)
1914 {
1915   switch (parameters->size_and_endianness())
1916     {
1917 #ifdef HAVE_TARGET_32_LITTLE
1918     case Parameters::TARGET_32_LITTLE:
1919       this->sized_write<32, false>(of);
1920       break;
1921 #endif
1922 #ifdef HAVE_TARGET_32_BIG
1923     case Parameters::TARGET_32_BIG:
1924       this->sized_write<32, true>(of);
1925       break;
1926 #endif
1927 #ifdef HAVE_TARGET_64_LITTLE
1928     case Parameters::TARGET_64_LITTLE:
1929       this->sized_write<64, false>(of);
1930       break;
1931 #endif
1932 #ifdef HAVE_TARGET_64_BIG
1933     case Parameters::TARGET_64_BIG:
1934       this->sized_write<64, true>(of);
1935       break;
1936 #endif
1937     default:
1938       gold_unreachable();
1939     }
1940 }
1941
1942 template<int size, bool big_endian>
1943 void
1944 Output_data_dynamic::sized_write(Output_file* of)
1945 {
1946   const int dyn_size = elfcpp::Elf_sizes<size>::dyn_size;
1947
1948   const off_t offset = this->offset();
1949   const off_t oview_size = this->data_size();
1950   unsigned char* const oview = of->get_output_view(offset, oview_size);
1951
1952   unsigned char* pov = oview;
1953   for (typename Dynamic_entries::const_iterator p = this->entries_.begin();
1954        p != this->entries_.end();
1955        ++p)
1956     {
1957       p->write<size, big_endian>(pov, this->pool_);
1958       pov += dyn_size;
1959     }
1960
1961   gold_assert(pov - oview == oview_size);
1962
1963   of->write_output_view(offset, oview_size, oview);
1964
1965   // We no longer need the dynamic entries.
1966   this->entries_.clear();
1967 }
1968
1969 // Class Output_symtab_xindex.
1970
1971 void
1972 Output_symtab_xindex::do_write(Output_file* of)
1973 {
1974   const off_t offset = this->offset();
1975   const off_t oview_size = this->data_size();
1976   unsigned char* const oview = of->get_output_view(offset, oview_size);
1977
1978   memset(oview, 0, oview_size);
1979
1980   if (parameters->target().is_big_endian())
1981     this->endian_do_write<true>(oview);
1982   else
1983     this->endian_do_write<false>(oview);
1984
1985   of->write_output_view(offset, oview_size, oview);
1986
1987   // We no longer need the data.
1988   this->entries_.clear();
1989 }
1990
1991 template<bool big_endian>
1992 void
1993 Output_symtab_xindex::endian_do_write(unsigned char* const oview)
1994 {
1995   for (Xindex_entries::const_iterator p = this->entries_.begin();
1996        p != this->entries_.end();
1997        ++p)
1998     {
1999       unsigned int symndx = p->first;
2000       gold_assert(static_cast<off_t>(symndx) * 4 < this->data_size());
2001       elfcpp::Swap<32, big_endian>::writeval(oview + symndx * 4, p->second);
2002     }
2003 }
2004
2005 // Output_fill_debug_info methods.
2006
2007 // Return the minimum size needed for a dummy compilation unit header.
2008
2009 size_t
2010 Output_fill_debug_info::do_minimum_hole_size() const
2011 {
2012   // Compile unit header fields: unit_length, version, debug_abbrev_offset,
2013   // address_size.
2014   const size_t len = 4 + 2 + 4 + 1;
2015   // For type units, add type_signature, type_offset.
2016   if (this->is_debug_types_)
2017     return len + 8 + 4;
2018   return len;
2019 }
2020
2021 // Write a dummy compilation unit header to fill a hole in the
2022 // .debug_info or .debug_types section.
2023
2024 void
2025 Output_fill_debug_info::do_write(Output_file* of, off_t off, size_t len) const
2026 {
2027   gold_debug(DEBUG_INCREMENTAL, "fill_debug_info(%08lx, %08lx)",
2028              static_cast<long>(off), static_cast<long>(len));
2029
2030   gold_assert(len >= this->do_minimum_hole_size());
2031
2032   unsigned char* const oview = of->get_output_view(off, len);
2033   unsigned char* pov = oview;
2034
2035   // Write header fields: unit_length, version, debug_abbrev_offset,
2036   // address_size.
2037   if (this->is_big_endian())
2038     {
2039       elfcpp::Swap_unaligned<32, true>::writeval(pov, len - 4);
2040       elfcpp::Swap_unaligned<16, true>::writeval(pov + 4, this->version);
2041       elfcpp::Swap_unaligned<32, true>::writeval(pov + 6, 0);
2042     }
2043   else
2044     {
2045       elfcpp::Swap_unaligned<32, false>::writeval(pov, len - 4);
2046       elfcpp::Swap_unaligned<16, false>::writeval(pov + 4, this->version);
2047       elfcpp::Swap_unaligned<32, false>::writeval(pov + 6, 0);
2048     }
2049   pov += 4 + 2 + 4;
2050   *pov++ = 4;
2051
2052   // For type units, the additional header fields -- type_signature,
2053   // type_offset -- can be filled with zeroes.
2054
2055   // Fill the remainder of the free space with zeroes.  The first
2056   // zero should tell the consumer there are no DIEs to read in this
2057   // compilation unit.
2058   if (pov < oview + len)
2059     memset(pov, 0, oview + len - pov);
2060
2061   of->write_output_view(off, len, oview);
2062 }
2063
2064 // Output_fill_debug_line methods.
2065
2066 // Return the minimum size needed for a dummy line number program header.
2067
2068 size_t
2069 Output_fill_debug_line::do_minimum_hole_size() const
2070 {
2071   // Line number program header fields: unit_length, version, header_length,
2072   // minimum_instruction_length, default_is_stmt, line_base, line_range,
2073   // opcode_base, standard_opcode_lengths[], include_directories, filenames.
2074   const size_t len = 4 + 2 + 4 + this->header_length;
2075   return len;
2076 }
2077
2078 // Write a dummy line number program header to fill a hole in the
2079 // .debug_line section.
2080
2081 void
2082 Output_fill_debug_line::do_write(Output_file* of, off_t off, size_t len) const
2083 {
2084   gold_debug(DEBUG_INCREMENTAL, "fill_debug_line(%08lx, %08lx)",
2085              static_cast<long>(off), static_cast<long>(len));
2086
2087   gold_assert(len >= this->do_minimum_hole_size());
2088
2089   unsigned char* const oview = of->get_output_view(off, len);
2090   unsigned char* pov = oview;
2091
2092   // Write header fields: unit_length, version, header_length,
2093   // minimum_instruction_length, default_is_stmt, line_base, line_range,
2094   // opcode_base, standard_opcode_lengths[], include_directories, filenames.
2095   // We set the header_length field to cover the entire hole, so the
2096   // line number program is empty.
2097   if (this->is_big_endian())
2098     {
2099       elfcpp::Swap_unaligned<32, true>::writeval(pov, len - 4);
2100       elfcpp::Swap_unaligned<16, true>::writeval(pov + 4, this->version);
2101       elfcpp::Swap_unaligned<32, true>::writeval(pov + 6, len - (4 + 2 + 4));
2102     }
2103   else
2104     {
2105       elfcpp::Swap_unaligned<32, false>::writeval(pov, len - 4);
2106       elfcpp::Swap_unaligned<16, false>::writeval(pov + 4, this->version);
2107       elfcpp::Swap_unaligned<32, false>::writeval(pov + 6, len - (4 + 2 + 4));
2108     }
2109   pov += 4 + 2 + 4;
2110   *pov++ = 1;   // minimum_instruction_length
2111   *pov++ = 0;   // default_is_stmt
2112   *pov++ = 0;   // line_base
2113   *pov++ = 5;   // line_range
2114   *pov++ = 13;  // opcode_base
2115   *pov++ = 0;   // standard_opcode_lengths[1]
2116   *pov++ = 1;   // standard_opcode_lengths[2]
2117   *pov++ = 1;   // standard_opcode_lengths[3]
2118   *pov++ = 1;   // standard_opcode_lengths[4]
2119   *pov++ = 1;   // standard_opcode_lengths[5]
2120   *pov++ = 0;   // standard_opcode_lengths[6]
2121   *pov++ = 0;   // standard_opcode_lengths[7]
2122   *pov++ = 0;   // standard_opcode_lengths[8]
2123   *pov++ = 1;   // standard_opcode_lengths[9]
2124   *pov++ = 0;   // standard_opcode_lengths[10]
2125   *pov++ = 0;   // standard_opcode_lengths[11]
2126   *pov++ = 1;   // standard_opcode_lengths[12]
2127   *pov++ = 0;   // include_directories (empty)
2128   *pov++ = 0;   // filenames (empty)
2129
2130   // Some consumers don't check the header_length field, and simply
2131   // start reading the line number program immediately following the
2132   // header.  For those consumers, we fill the remainder of the free
2133   // space with DW_LNS_set_basic_block opcodes.  These are effectively
2134   // no-ops: the resulting line table program will not create any rows.
2135   if (pov < oview + len)
2136     memset(pov, elfcpp::DW_LNS_set_basic_block, oview + len - pov);
2137
2138   of->write_output_view(off, len, oview);
2139 }
2140
2141 // Output_section::Input_section methods.
2142
2143 // Return the current data size.  For an input section we store the size here.
2144 // For an Output_section_data, we have to ask it for the size.
2145
2146 off_t
2147 Output_section::Input_section::current_data_size() const
2148 {
2149   if (this->is_input_section())
2150     return this->u1_.data_size;
2151   else
2152     {
2153       this->u2_.posd->pre_finalize_data_size();
2154       return this->u2_.posd->current_data_size();
2155     }
2156 }
2157
2158 // Return the data size.  For an input section we store the size here.
2159 // For an Output_section_data, we have to ask it for the size.
2160
2161 off_t
2162 Output_section::Input_section::data_size() const
2163 {
2164   if (this->is_input_section())
2165     return this->u1_.data_size;
2166   else
2167     return this->u2_.posd->data_size();
2168 }
2169
2170 // Return the object for an input section.
2171
2172 Relobj*
2173 Output_section::Input_section::relobj() const
2174 {
2175   if (this->is_input_section())
2176     return this->u2_.object;
2177   else if (this->is_merge_section())
2178     {
2179       gold_assert(this->u2_.pomb->first_relobj() != NULL);
2180       return this->u2_.pomb->first_relobj();
2181     }
2182   else if (this->is_relaxed_input_section())
2183     return this->u2_.poris->relobj();
2184   else
2185     gold_unreachable();
2186 }
2187
2188 // Return the input section index for an input section.
2189
2190 unsigned int
2191 Output_section::Input_section::shndx() const
2192 {
2193   if (this->is_input_section())
2194     return this->shndx_;
2195   else if (this->is_merge_section())
2196     {
2197       gold_assert(this->u2_.pomb->first_relobj() != NULL);
2198       return this->u2_.pomb->first_shndx();
2199     }
2200   else if (this->is_relaxed_input_section())
2201     return this->u2_.poris->shndx();
2202   else
2203     gold_unreachable();
2204 }
2205
2206 // Set the address and file offset.
2207
2208 void
2209 Output_section::Input_section::set_address_and_file_offset(
2210     uint64_t address,
2211     off_t file_offset,
2212     off_t section_file_offset)
2213 {
2214   if (this->is_input_section())
2215     this->u2_.object->set_section_offset(this->shndx_,
2216                                          file_offset - section_file_offset);
2217   else
2218     this->u2_.posd->set_address_and_file_offset(address, file_offset);
2219 }
2220
2221 // Reset the address and file offset.
2222
2223 void
2224 Output_section::Input_section::reset_address_and_file_offset()
2225 {
2226   if (!this->is_input_section())
2227     this->u2_.posd->reset_address_and_file_offset();
2228 }
2229
2230 // Finalize the data size.
2231
2232 void
2233 Output_section::Input_section::finalize_data_size()
2234 {
2235   if (!this->is_input_section())
2236     this->u2_.posd->finalize_data_size();
2237 }
2238
2239 // Try to turn an input offset into an output offset.  We want to
2240 // return the output offset relative to the start of this
2241 // Input_section in the output section.
2242
2243 inline bool
2244 Output_section::Input_section::output_offset(
2245     const Relobj* object,
2246     unsigned int shndx,
2247     section_offset_type offset,
2248     section_offset_type* poutput) const
2249 {
2250   if (!this->is_input_section())
2251     return this->u2_.posd->output_offset(object, shndx, offset, poutput);
2252   else
2253     {
2254       if (this->shndx_ != shndx || this->u2_.object != object)
2255         return false;
2256       *poutput = offset;
2257       return true;
2258     }
2259 }
2260
2261 // Write out the data.  We don't have to do anything for an input
2262 // section--they are handled via Object::relocate--but this is where
2263 // we write out the data for an Output_section_data.
2264
2265 void
2266 Output_section::Input_section::write(Output_file* of)
2267 {
2268   if (!this->is_input_section())
2269     this->u2_.posd->write(of);
2270 }
2271
2272 // Write the data to a buffer.  As for write(), we don't have to do
2273 // anything for an input section.
2274
2275 void
2276 Output_section::Input_section::write_to_buffer(unsigned char* buffer)
2277 {
2278   if (!this->is_input_section())
2279     this->u2_.posd->write_to_buffer(buffer);
2280 }
2281
2282 // Print to a map file.
2283
2284 void
2285 Output_section::Input_section::print_to_mapfile(Mapfile* mapfile) const
2286 {
2287   switch (this->shndx_)
2288     {
2289     case OUTPUT_SECTION_CODE:
2290     case MERGE_DATA_SECTION_CODE:
2291     case MERGE_STRING_SECTION_CODE:
2292       this->u2_.posd->print_to_mapfile(mapfile);
2293       break;
2294
2295     case RELAXED_INPUT_SECTION_CODE:
2296       {
2297         Output_relaxed_input_section* relaxed_section =
2298           this->relaxed_input_section();
2299         mapfile->print_input_section(relaxed_section->relobj(),
2300                                      relaxed_section->shndx());
2301       }
2302       break;
2303     default:
2304       mapfile->print_input_section(this->u2_.object, this->shndx_);
2305       break;
2306     }
2307 }
2308
2309 // Output_section methods.
2310
2311 // Construct an Output_section.  NAME will point into a Stringpool.
2312
2313 Output_section::Output_section(const char* name, elfcpp::Elf_Word type,
2314                                elfcpp::Elf_Xword flags)
2315   : name_(name),
2316     addralign_(0),
2317     entsize_(0),
2318     load_address_(0),
2319     link_section_(NULL),
2320     link_(0),
2321     info_section_(NULL),
2322     info_symndx_(NULL),
2323     info_(0),
2324     type_(type),
2325     flags_(flags),
2326     order_(ORDER_INVALID),
2327     out_shndx_(-1U),
2328     symtab_index_(0),
2329     dynsym_index_(0),
2330     input_sections_(),
2331     first_input_offset_(0),
2332     fills_(),
2333     postprocessing_buffer_(NULL),
2334     needs_symtab_index_(false),
2335     needs_dynsym_index_(false),
2336     should_link_to_symtab_(false),
2337     should_link_to_dynsym_(false),
2338     after_input_sections_(false),
2339     requires_postprocessing_(false),
2340     found_in_sections_clause_(false),
2341     has_load_address_(false),
2342     info_uses_section_index_(false),
2343     input_section_order_specified_(false),
2344     may_sort_attached_input_sections_(false),
2345     must_sort_attached_input_sections_(false),
2346     attached_input_sections_are_sorted_(false),
2347     is_relro_(false),
2348     is_small_section_(false),
2349     is_large_section_(false),
2350     generate_code_fills_at_write_(false),
2351     is_entsize_zero_(false),
2352     section_offsets_need_adjustment_(false),
2353     is_noload_(false),
2354     always_keeps_input_sections_(false),
2355     has_fixed_layout_(false),
2356     is_patch_space_allowed_(false),
2357     is_unique_segment_(false),
2358     tls_offset_(0),
2359     extra_segment_flags_(0),
2360     segment_alignment_(0),
2361     checkpoint_(NULL),
2362     lookup_maps_(new Output_section_lookup_maps),
2363     free_list_(),
2364     free_space_fill_(NULL),
2365     patch_space_(0)
2366 {
2367   // An unallocated section has no address.  Forcing this means that
2368   // we don't need special treatment for symbols defined in debug
2369   // sections.
2370   if ((flags & elfcpp::SHF_ALLOC) == 0)
2371     this->set_address(0);
2372 }
2373
2374 Output_section::~Output_section()
2375 {
2376   delete this->checkpoint_;
2377 }
2378
2379 // Set the entry size.
2380
2381 void
2382 Output_section::set_entsize(uint64_t v)
2383 {
2384   if (this->is_entsize_zero_)
2385     ;
2386   else if (this->entsize_ == 0)
2387     this->entsize_ = v;
2388   else if (this->entsize_ != v)
2389     {
2390       this->entsize_ = 0;
2391       this->is_entsize_zero_ = 1;
2392     }
2393 }
2394
2395 // Add the input section SHNDX, with header SHDR, named SECNAME, in
2396 // OBJECT, to the Output_section.  RELOC_SHNDX is the index of a
2397 // relocation section which applies to this section, or 0 if none, or
2398 // -1U if more than one.  Return the offset of the input section
2399 // within the output section.  Return -1 if the input section will
2400 // receive special handling.  In the normal case we don't always keep
2401 // track of input sections for an Output_section.  Instead, each
2402 // Object keeps track of the Output_section for each of its input
2403 // sections.  However, if HAVE_SECTIONS_SCRIPT is true, we do keep
2404 // track of input sections here; this is used when SECTIONS appears in
2405 // a linker script.
2406
2407 template<int size, bool big_endian>
2408 off_t
2409 Output_section::add_input_section(Layout* layout,
2410                                   Sized_relobj_file<size, big_endian>* object,
2411                                   unsigned int shndx,
2412                                   const char* secname,
2413                                   const elfcpp::Shdr<size, big_endian>& shdr,
2414                                   unsigned int reloc_shndx,
2415                                   bool have_sections_script)
2416 {
2417   elfcpp::Elf_Xword addralign = shdr.get_sh_addralign();
2418   if ((addralign & (addralign - 1)) != 0)
2419     {
2420       object->error(_("invalid alignment %lu for section \"%s\""),
2421                     static_cast<unsigned long>(addralign), secname);
2422       addralign = 1;
2423     }
2424
2425   if (addralign > this->addralign_)
2426     this->addralign_ = addralign;
2427
2428   typename elfcpp::Elf_types<size>::Elf_WXword sh_flags = shdr.get_sh_flags();
2429   uint64_t entsize = shdr.get_sh_entsize();
2430
2431   // .debug_str is a mergeable string section, but is not always so
2432   // marked by compilers.  Mark manually here so we can optimize.
2433   if (strcmp(secname, ".debug_str") == 0)
2434     {
2435       sh_flags |= (elfcpp::SHF_MERGE | elfcpp::SHF_STRINGS);
2436       entsize = 1;
2437     }
2438
2439   this->update_flags_for_input_section(sh_flags);
2440   this->set_entsize(entsize);
2441
2442   // If this is a SHF_MERGE section, we pass all the input sections to
2443   // a Output_data_merge.  We don't try to handle relocations for such
2444   // a section.  We don't try to handle empty merge sections--they
2445   // mess up the mappings, and are useless anyhow.
2446   // FIXME: Need to handle merge sections during incremental update.
2447   if ((sh_flags & elfcpp::SHF_MERGE) != 0
2448       && reloc_shndx == 0
2449       && shdr.get_sh_size() > 0
2450       && !parameters->incremental())
2451     {
2452       // Keep information about merged input sections for rebuilding fast
2453       // lookup maps if we have sections-script or we do relaxation.
2454       bool keeps_input_sections = (this->always_keeps_input_sections_
2455                                    || have_sections_script
2456                                    || parameters->target().may_relax());
2457
2458       if (this->add_merge_input_section(object, shndx, sh_flags, entsize,
2459                                         addralign, keeps_input_sections))
2460         {
2461           // Tell the relocation routines that they need to call the
2462           // output_offset method to determine the final address.
2463           return -1;
2464         }
2465     }
2466
2467   section_size_type input_section_size = shdr.get_sh_size();
2468   section_size_type uncompressed_size;
2469   if (object->section_is_compressed(shndx, &uncompressed_size))
2470     input_section_size = uncompressed_size;
2471
2472   off_t offset_in_section;
2473
2474   if (this->has_fixed_layout())
2475     {
2476       // For incremental updates, find a chunk of unused space in the section.
2477       offset_in_section = this->free_list_.allocate(input_section_size,
2478                                                     addralign, 0);
2479       if (offset_in_section == -1)
2480         gold_fallback(_("out of patch space in section %s; "
2481                         "relink with --incremental-full"),
2482                       this->name());
2483       return offset_in_section;
2484     }
2485
2486   offset_in_section = this->current_data_size_for_child();
2487   off_t aligned_offset_in_section = align_address(offset_in_section,
2488                                                   addralign);
2489   this->set_current_data_size_for_child(aligned_offset_in_section
2490                                         + input_section_size);
2491
2492   // Determine if we want to delay code-fill generation until the output
2493   // section is written.  When the target is relaxing, we want to delay fill
2494   // generating to avoid adjusting them during relaxation.  Also, if we are
2495   // sorting input sections we must delay fill generation.
2496   if (!this->generate_code_fills_at_write_
2497       && !have_sections_script
2498       && (sh_flags & elfcpp::SHF_EXECINSTR) != 0
2499       && parameters->target().has_code_fill()
2500       && (parameters->target().may_relax()
2501           || layout->is_section_ordering_specified()))
2502     {
2503       gold_assert(this->fills_.empty());
2504       this->generate_code_fills_at_write_ = true;
2505     }
2506
2507   if (aligned_offset_in_section > offset_in_section
2508       && !this->generate_code_fills_at_write_
2509       && !have_sections_script
2510       && (sh_flags & elfcpp::SHF_EXECINSTR) != 0
2511       && parameters->target().has_code_fill())
2512     {
2513       // We need to add some fill data.  Using fill_list_ when
2514       // possible is an optimization, since we will often have fill
2515       // sections without input sections.
2516       off_t fill_len = aligned_offset_in_section - offset_in_section;
2517       if (this->input_sections_.empty())
2518         this->fills_.push_back(Fill(offset_in_section, fill_len));
2519       else
2520         {
2521           std::string fill_data(parameters->target().code_fill(fill_len));
2522           Output_data_const* odc = new Output_data_const(fill_data, 1);
2523           this->input_sections_.push_back(Input_section(odc));
2524         }
2525     }
2526
2527   // We need to keep track of this section if we are already keeping
2528   // track of sections, or if we are relaxing.  Also, if this is a
2529   // section which requires sorting, or which may require sorting in
2530   // the future, we keep track of the sections.  If the
2531   // --section-ordering-file option is used to specify the order of
2532   // sections, we need to keep track of sections.
2533   if (this->always_keeps_input_sections_
2534       || have_sections_script
2535       || !this->input_sections_.empty()
2536       || this->may_sort_attached_input_sections()
2537       || this->must_sort_attached_input_sections()
2538       || parameters->options().user_set_Map()
2539       || parameters->target().may_relax()
2540       || layout->is_section_ordering_specified())
2541     {
2542       Input_section isecn(object, shndx, input_section_size, addralign);
2543       /* If section ordering is requested by specifying a ordering file,
2544          using --section-ordering-file, match the section name with
2545          a pattern.  */
2546       if (parameters->options().section_ordering_file())
2547         {
2548           unsigned int section_order_index =
2549             layout->find_section_order_index(std::string(secname));
2550           if (section_order_index != 0)
2551             {
2552               isecn.set_section_order_index(section_order_index);
2553               this->set_input_section_order_specified();
2554             }
2555         }
2556       this->input_sections_.push_back(isecn);
2557     }
2558
2559   return aligned_offset_in_section;
2560 }
2561
2562 // Add arbitrary data to an output section.
2563
2564 void
2565 Output_section::add_output_section_data(Output_section_data* posd)
2566 {
2567   Input_section inp(posd);
2568   this->add_output_section_data(&inp);
2569
2570   if (posd->is_data_size_valid())
2571     {
2572       off_t offset_in_section;
2573       if (this->has_fixed_layout())
2574         {
2575           // For incremental updates, find a chunk of unused space.
2576           offset_in_section = this->free_list_.allocate(posd->data_size(),
2577                                                         posd->addralign(), 0);
2578           if (offset_in_section == -1)
2579             gold_fallback(_("out of patch space in section %s; "
2580                             "relink with --incremental-full"),
2581                           this->name());
2582           // Finalize the address and offset now.
2583           uint64_t addr = this->address();
2584           off_t offset = this->offset();
2585           posd->set_address_and_file_offset(addr + offset_in_section,
2586                                             offset + offset_in_section);
2587         }
2588       else
2589         {
2590           offset_in_section = this->current_data_size_for_child();
2591           off_t aligned_offset_in_section = align_address(offset_in_section,
2592                                                           posd->addralign());
2593           this->set_current_data_size_for_child(aligned_offset_in_section
2594                                                 + posd->data_size());
2595         }
2596     }
2597   else if (this->has_fixed_layout())
2598     {
2599       // For incremental updates, arrange for the data to have a fixed layout.
2600       // This will mean that additions to the data must be allocated from
2601       // free space within the containing output section.
2602       uint64_t addr = this->address();
2603       posd->set_address(addr);
2604       posd->set_file_offset(0);
2605       // FIXME: This should eventually be unreachable.
2606       // gold_unreachable();
2607     }
2608 }
2609
2610 // Add a relaxed input section.
2611
2612 void
2613 Output_section::add_relaxed_input_section(Layout* layout,
2614                                           Output_relaxed_input_section* poris,
2615                                           const std::string& name)
2616 {
2617   Input_section inp(poris);
2618
2619   // If the --section-ordering-file option is used to specify the order of
2620   // sections, we need to keep track of sections.
2621   if (layout->is_section_ordering_specified())
2622     {
2623       unsigned int section_order_index =
2624         layout->find_section_order_index(name);
2625       if (section_order_index != 0)
2626         {
2627           inp.set_section_order_index(section_order_index);
2628           this->set_input_section_order_specified();
2629         }
2630     }
2631
2632   this->add_output_section_data(&inp);
2633   if (this->lookup_maps_->is_valid())
2634     this->lookup_maps_->add_relaxed_input_section(poris->relobj(),
2635                                                   poris->shndx(), poris);
2636
2637   // For a relaxed section, we use the current data size.  Linker scripts
2638   // get all the input sections, including relaxed one from an output
2639   // section and add them back to the same output section to compute the
2640   // output section size.  If we do not account for sizes of relaxed input
2641   // sections, an output section would be incorrectly sized.
2642   off_t offset_in_section = this->current_data_size_for_child();
2643   off_t aligned_offset_in_section = align_address(offset_in_section,
2644                                                   poris->addralign());
2645   this->set_current_data_size_for_child(aligned_offset_in_section
2646                                         + poris->current_data_size());
2647 }
2648
2649 // Add arbitrary data to an output section by Input_section.
2650
2651 void
2652 Output_section::add_output_section_data(Input_section* inp)
2653 {
2654   if (this->input_sections_.empty())
2655     this->first_input_offset_ = this->current_data_size_for_child();
2656
2657   this->input_sections_.push_back(*inp);
2658
2659   uint64_t addralign = inp->addralign();
2660   if (addralign > this->addralign_)
2661     this->addralign_ = addralign;
2662
2663   inp->set_output_section(this);
2664 }
2665
2666 // Add a merge section to an output section.
2667
2668 void
2669 Output_section::add_output_merge_section(Output_section_data* posd,
2670                                          bool is_string, uint64_t entsize)
2671 {
2672   Input_section inp(posd, is_string, entsize);
2673   this->add_output_section_data(&inp);
2674 }
2675
2676 // Add an input section to a SHF_MERGE section.
2677
2678 bool
2679 Output_section::add_merge_input_section(Relobj* object, unsigned int shndx,
2680                                         uint64_t flags, uint64_t entsize,
2681                                         uint64_t addralign,
2682                                         bool keeps_input_sections)
2683 {
2684   // We cannot merge sections with entsize == 0.
2685   if (entsize == 0)
2686     return false;
2687
2688   bool is_string = (flags & elfcpp::SHF_STRINGS) != 0;
2689
2690   // We cannot restore merged input section states.
2691   gold_assert(this->checkpoint_ == NULL);
2692
2693   // Look up merge sections by required properties.
2694   // Currently, we only invalidate the lookup maps in script processing
2695   // and relaxation.  We should not have done either when we reach here.
2696   // So we assume that the lookup maps are valid to simply code.
2697   gold_assert(this->lookup_maps_->is_valid());
2698   Merge_section_properties msp(is_string, entsize, addralign);
2699   Output_merge_base* pomb = this->lookup_maps_->find_merge_section(msp);
2700   bool is_new = false;
2701   if (pomb != NULL)
2702     {
2703       gold_assert(pomb->is_string() == is_string
2704                   && pomb->entsize() == entsize
2705                   && pomb->addralign() == addralign);
2706     }
2707   else
2708     {
2709       // Create a new Output_merge_data or Output_merge_string_data.
2710       if (!is_string)
2711         pomb = new Output_merge_data(entsize, addralign);
2712       else
2713         {
2714           switch (entsize)
2715             {
2716             case 1:
2717               pomb = new Output_merge_string<char>(addralign);
2718               break;
2719             case 2:
2720               pomb = new Output_merge_string<uint16_t>(addralign);
2721               break;
2722             case 4:
2723               pomb = new Output_merge_string<uint32_t>(addralign);
2724               break;
2725             default:
2726               return false;
2727             }
2728         }
2729       // If we need to do script processing or relaxation, we need to keep
2730       // the original input sections to rebuild the fast lookup maps.
2731       if (keeps_input_sections)
2732         pomb->set_keeps_input_sections();
2733       is_new = true;
2734     }
2735
2736   if (pomb->add_input_section(object, shndx))
2737     {
2738       // Add new merge section to this output section and link merge
2739       // section properties to new merge section in map.
2740       if (is_new)
2741         {
2742           this->add_output_merge_section(pomb, is_string, entsize);
2743           this->lookup_maps_->add_merge_section(msp, pomb);
2744         }
2745
2746       return true;
2747     }
2748   else
2749     {
2750       // If add_input_section failed, delete new merge section to avoid
2751       // exporting empty merge sections in Output_section::get_input_section.
2752       if (is_new)
2753         delete pomb;
2754       return false;
2755     }
2756 }
2757
2758 // Build a relaxation map to speed up relaxation of existing input sections.
2759 // Look up to the first LIMIT elements in INPUT_SECTIONS.
2760
2761 void
2762 Output_section::build_relaxation_map(
2763   const Input_section_list& input_sections,
2764   size_t limit,
2765   Relaxation_map* relaxation_map) const
2766 {
2767   for (size_t i = 0; i < limit; ++i)
2768     {
2769       const Input_section& is(input_sections[i]);
2770       if (is.is_input_section() || is.is_relaxed_input_section())
2771         {
2772           Section_id sid(is.relobj(), is.shndx());
2773           (*relaxation_map)[sid] = i;
2774         }
2775     }
2776 }
2777
2778 // Convert regular input sections in INPUT_SECTIONS into relaxed input
2779 // sections in RELAXED_SECTIONS.  MAP is a prebuilt map from section id
2780 // indices of INPUT_SECTIONS.
2781
2782 void
2783 Output_section::convert_input_sections_in_list_to_relaxed_sections(
2784   const std::vector<Output_relaxed_input_section*>& relaxed_sections,
2785   const Relaxation_map& map,
2786   Input_section_list* input_sections)
2787 {
2788   for (size_t i = 0; i < relaxed_sections.size(); ++i)
2789     {
2790       Output_relaxed_input_section* poris = relaxed_sections[i];
2791       Section_id sid(poris->relobj(), poris->shndx());
2792       Relaxation_map::const_iterator p = map.find(sid);
2793       gold_assert(p != map.end());
2794       gold_assert((*input_sections)[p->second].is_input_section());
2795
2796       // Remember section order index of original input section
2797       // if it is set.  Copy it to the relaxed input section.
2798       unsigned int soi =
2799         (*input_sections)[p->second].section_order_index();
2800       (*input_sections)[p->second] = Input_section(poris);
2801       (*input_sections)[p->second].set_section_order_index(soi);
2802     }
2803 }
2804
2805 // Convert regular input sections into relaxed input sections. RELAXED_SECTIONS
2806 // is a vector of pointers to Output_relaxed_input_section or its derived
2807 // classes.  The relaxed sections must correspond to existing input sections.
2808
2809 void
2810 Output_section::convert_input_sections_to_relaxed_sections(
2811   const std::vector<Output_relaxed_input_section*>& relaxed_sections)
2812 {
2813   gold_assert(parameters->target().may_relax());
2814
2815   // We want to make sure that restore_states does not undo the effect of
2816   // this.  If there is no checkpoint active, just search the current
2817   // input section list and replace the sections there.  If there is
2818   // a checkpoint, also replace the sections there.
2819
2820   // By default, we look at the whole list.
2821   size_t limit = this->input_sections_.size();
2822
2823   if (this->checkpoint_ != NULL)
2824     {
2825       // Replace input sections with relaxed input section in the saved
2826       // copy of the input section list.
2827       if (this->checkpoint_->input_sections_saved())
2828         {
2829           Relaxation_map map;
2830           this->build_relaxation_map(
2831                     *(this->checkpoint_->input_sections()),
2832                     this->checkpoint_->input_sections()->size(),
2833                     &map);
2834           this->convert_input_sections_in_list_to_relaxed_sections(
2835                     relaxed_sections,
2836                     map,
2837                     this->checkpoint_->input_sections());
2838         }
2839       else
2840         {
2841           // We have not copied the input section list yet.  Instead, just
2842           // look at the portion that would be saved.
2843           limit = this->checkpoint_->input_sections_size();
2844         }
2845     }
2846
2847   // Convert input sections in input_section_list.
2848   Relaxation_map map;
2849   this->build_relaxation_map(this->input_sections_, limit, &map);
2850   this->convert_input_sections_in_list_to_relaxed_sections(
2851             relaxed_sections,
2852             map,
2853             &this->input_sections_);
2854
2855   // Update fast look-up map.
2856   if (this->lookup_maps_->is_valid())
2857     for (size_t i = 0; i < relaxed_sections.size(); ++i)
2858       {
2859         Output_relaxed_input_section* poris = relaxed_sections[i];
2860         this->lookup_maps_->add_relaxed_input_section(poris->relobj(),
2861                                                       poris->shndx(), poris);
2862       }
2863 }
2864
2865 // Update the output section flags based on input section flags.
2866
2867 void
2868 Output_section::update_flags_for_input_section(elfcpp::Elf_Xword flags)
2869 {
2870   // If we created the section with SHF_ALLOC clear, we set the
2871   // address.  If we are now setting the SHF_ALLOC flag, we need to
2872   // undo that.
2873   if ((this->flags_ & elfcpp::SHF_ALLOC) == 0
2874       && (flags & elfcpp::SHF_ALLOC) != 0)
2875     this->mark_address_invalid();
2876
2877   this->flags_ |= (flags
2878                    & (elfcpp::SHF_WRITE
2879                       | elfcpp::SHF_ALLOC
2880                       | elfcpp::SHF_EXECINSTR));
2881
2882   if ((flags & elfcpp::SHF_MERGE) == 0)
2883     this->flags_ &=~ elfcpp::SHF_MERGE;
2884   else
2885     {
2886       if (this->current_data_size_for_child() == 0)
2887         this->flags_ |= elfcpp::SHF_MERGE;
2888     }
2889
2890   if ((flags & elfcpp::SHF_STRINGS) == 0)
2891     this->flags_ &=~ elfcpp::SHF_STRINGS;
2892   else
2893     {
2894       if (this->current_data_size_for_child() == 0)
2895         this->flags_ |= elfcpp::SHF_STRINGS;
2896     }
2897 }
2898
2899 // Find the merge section into which an input section with index SHNDX in
2900 // OBJECT has been added.  Return NULL if none found.
2901
2902 const Output_section_data*
2903 Output_section::find_merge_section(const Relobj* object,
2904                                    unsigned int shndx) const
2905 {
2906   return object->find_merge_section(shndx);
2907 }
2908
2909 // Build the lookup maps for relaxed sections.  This needs
2910 // to be declared as a const method so that it is callable with a const
2911 // Output_section pointer.  The method only updates states of the maps.
2912
2913 void
2914 Output_section::build_lookup_maps() const
2915 {
2916   this->lookup_maps_->clear();
2917   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2918        p != this->input_sections_.end();
2919        ++p)
2920     {
2921       if (p->is_relaxed_input_section())
2922         {
2923           Output_relaxed_input_section* poris = p->relaxed_input_section();
2924           this->lookup_maps_->add_relaxed_input_section(poris->relobj(),
2925                                                         poris->shndx(), poris);
2926         }
2927     }
2928 }
2929
2930 // Find an relaxed input section corresponding to an input section
2931 // in OBJECT with index SHNDX.
2932
2933 const Output_relaxed_input_section*
2934 Output_section::find_relaxed_input_section(const Relobj* object,
2935                                            unsigned int shndx) const
2936 {
2937   if (!this->lookup_maps_->is_valid())
2938     this->build_lookup_maps();
2939   return this->lookup_maps_->find_relaxed_input_section(object, shndx);
2940 }
2941
2942 // Given an address OFFSET relative to the start of input section
2943 // SHNDX in OBJECT, return whether this address is being included in
2944 // the final link.  This should only be called if SHNDX in OBJECT has
2945 // a special mapping.
2946
2947 bool
2948 Output_section::is_input_address_mapped(const Relobj* object,
2949                                         unsigned int shndx,
2950                                         off_t offset) const
2951 {
2952   // Look at the Output_section_data_maps first.
2953   const Output_section_data* posd = this->find_merge_section(object, shndx);
2954   if (posd == NULL)
2955     posd = this->find_relaxed_input_section(object, shndx);
2956
2957   if (posd != NULL)
2958     {
2959       section_offset_type output_offset;
2960       bool found = posd->output_offset(object, shndx, offset, &output_offset);
2961       // By default we assume that the address is mapped. See comment at the
2962       // end.
2963       if (!found)
2964         return true;
2965       return output_offset != -1;
2966     }
2967
2968   // Fall back to the slow look-up.
2969   for (Input_section_list::const_iterator p = this->input_sections_.begin();
2970        p != this->input_sections_.end();
2971        ++p)
2972     {
2973       section_offset_type output_offset;
2974       if (p->output_offset(object, shndx, offset, &output_offset))
2975         return output_offset != -1;
2976     }
2977
2978   // By default we assume that the address is mapped.  This should
2979   // only be called after we have passed all sections to Layout.  At
2980   // that point we should know what we are discarding.
2981   return true;
2982 }
2983
2984 // Given an address OFFSET relative to the start of input section
2985 // SHNDX in object OBJECT, return the output offset relative to the
2986 // start of the input section in the output section.  This should only
2987 // be called if SHNDX in OBJECT has a special mapping.
2988
2989 section_offset_type
2990 Output_section::output_offset(const Relobj* object, unsigned int shndx,
2991                               section_offset_type offset) const
2992 {
2993   // This can only be called meaningfully when we know the data size
2994   // of this.
2995   gold_assert(this->is_data_size_valid());
2996
2997   // Look at the Output_section_data_maps first.
2998   const Output_section_data* posd = this->find_merge_section(object, shndx);
2999   if (posd == NULL)
3000     posd = this->find_relaxed_input_section(object, shndx);
3001   if (posd != NULL)
3002     {
3003       section_offset_type output_offset;
3004       bool found = posd->output_offset(object, shndx, offset, &output_offset);
3005       gold_assert(found);
3006       return output_offset;
3007     }
3008
3009   // Fall back to the slow look-up.
3010   for (Input_section_list::const_iterator p = this->input_sections_.begin();
3011        p != this->input_sections_.end();
3012        ++p)
3013     {
3014       section_offset_type output_offset;
3015       if (p->output_offset(object, shndx, offset, &output_offset))
3016         return output_offset;
3017     }
3018   gold_unreachable();
3019 }
3020
3021 // Return the output virtual address of OFFSET relative to the start
3022 // of input section SHNDX in object OBJECT.
3023
3024 uint64_t
3025 Output_section::output_address(const Relobj* object, unsigned int shndx,
3026                                off_t offset) const
3027 {
3028   uint64_t addr = this->address() + this->first_input_offset_;
3029
3030   // Look at the Output_section_data_maps first.
3031   const Output_section_data* posd = this->find_merge_section(object, shndx);
3032   if (posd == NULL)
3033     posd = this->find_relaxed_input_section(object, shndx);
3034   if (posd != NULL && posd->is_address_valid())
3035     {
3036       section_offset_type output_offset;
3037       bool found = posd->output_offset(object, shndx, offset, &output_offset);
3038       gold_assert(found);
3039       return posd->address() + output_offset;
3040     }
3041
3042   // Fall back to the slow look-up.
3043   for (Input_section_list::const_iterator p = this->input_sections_.begin();
3044        p != this->input_sections_.end();
3045        ++p)
3046     {
3047       addr = align_address(addr, p->addralign());
3048       section_offset_type output_offset;
3049       if (p->output_offset(object, shndx, offset, &output_offset))
3050         {
3051           if (output_offset == -1)
3052             return -1ULL;
3053           return addr + output_offset;
3054         }
3055       addr += p->data_size();
3056     }
3057
3058   // If we get here, it means that we don't know the mapping for this
3059   // input section.  This might happen in principle if
3060   // add_input_section were called before add_output_section_data.
3061   // But it should never actually happen.
3062
3063   gold_unreachable();
3064 }
3065
3066 // Find the output address of the start of the merged section for
3067 // input section SHNDX in object OBJECT.
3068
3069 bool
3070 Output_section::find_starting_output_address(const Relobj* object,
3071                                              unsigned int shndx,
3072                                              uint64_t* paddr) const
3073 {
3074   const Output_section_data* data = this->find_merge_section(object, shndx);
3075   if (data == NULL)
3076     return false;
3077
3078   // FIXME: This becomes a bottle-neck if we have many relaxed sections.
3079   // Looking up the merge section map does not always work as we sometimes
3080   // find a merge section without its address set.
3081   uint64_t addr = this->address() + this->first_input_offset_;
3082   for (Input_section_list::const_iterator p = this->input_sections_.begin();
3083        p != this->input_sections_.end();
3084        ++p)
3085     {
3086       addr = align_address(addr, p->addralign());
3087
3088       // It would be nice if we could use the existing output_offset
3089       // method to get the output offset of input offset 0.
3090       // Unfortunately we don't know for sure that input offset 0 is
3091       // mapped at all.
3092       if (!p->is_input_section() && p->output_section_data() == data)
3093         {
3094           *paddr = addr;
3095           return true;
3096         }
3097
3098       addr += p->data_size();
3099     }
3100
3101   // We couldn't find a merge output section for this input section.
3102   return false;
3103 }
3104
3105 // Update the data size of an Output_section.
3106
3107 void
3108 Output_section::update_data_size()
3109 {
3110   if (this->input_sections_.empty())
3111       return;
3112
3113   if (this->must_sort_attached_input_sections()
3114       || this->input_section_order_specified())
3115     this->sort_attached_input_sections();
3116
3117   off_t off = this->first_input_offset_;
3118   for (Input_section_list::iterator p = this->input_sections_.begin();
3119        p != this->input_sections_.end();
3120        ++p)
3121     {
3122       off = align_address(off, p->addralign());
3123       off += p->current_data_size();
3124     }
3125
3126   this->set_current_data_size_for_child(off);
3127 }
3128
3129 // Set the data size of an Output_section.  This is where we handle
3130 // setting the addresses of any Output_section_data objects.
3131
3132 void
3133 Output_section::set_final_data_size()
3134 {
3135   off_t data_size;
3136
3137   if (this->input_sections_.empty())
3138     data_size = this->current_data_size_for_child();
3139   else
3140     {
3141       if (this->must_sort_attached_input_sections()
3142           || this->input_section_order_specified())
3143         this->sort_attached_input_sections();
3144
3145       uint64_t address = this->address();
3146       off_t startoff = this->offset();
3147       off_t off = startoff + this->first_input_offset_;
3148       for (Input_section_list::iterator p = this->input_sections_.begin();
3149            p != this->input_sections_.end();
3150            ++p)
3151         {
3152           off = align_address(off, p->addralign());
3153           p->set_address_and_file_offset(address + (off - startoff), off,
3154                                          startoff);
3155           off += p->data_size();
3156         }
3157       data_size = off - startoff;
3158     }
3159
3160   // For full incremental links, we want to allocate some patch space
3161   // in most sections for subsequent incremental updates.
3162   if (this->is_patch_space_allowed_ && parameters->incremental_full())
3163     {
3164       double pct = parameters->options().incremental_patch();
3165       size_t extra = static_cast<size_t>(data_size * pct);
3166       if (this->free_space_fill_ != NULL
3167           && this->free_space_fill_->minimum_hole_size() > extra)
3168         extra = this->free_space_fill_->minimum_hole_size();
3169       off_t new_size = align_address(data_size + extra, this->addralign());
3170       this->patch_space_ = new_size - data_size;
3171       gold_debug(DEBUG_INCREMENTAL,
3172                  "set_final_data_size: %08lx + %08lx: section %s",
3173                  static_cast<long>(data_size),
3174                  static_cast<long>(this->patch_space_),
3175                  this->name());
3176       data_size = new_size;
3177     }
3178
3179   this->set_data_size(data_size);
3180 }
3181
3182 // Reset the address and file offset.
3183
3184 void
3185 Output_section::do_reset_address_and_file_offset()
3186 {
3187   // An unallocated section has no address.  Forcing this means that
3188   // we don't need special treatment for symbols defined in debug
3189   // sections.  We do the same in the constructor.  This does not
3190   // apply to NOLOAD sections though.
3191   if (((this->flags_ & elfcpp::SHF_ALLOC) == 0) && !this->is_noload_)
3192      this->set_address(0);
3193
3194   for (Input_section_list::iterator p = this->input_sections_.begin();
3195        p != this->input_sections_.end();
3196        ++p)
3197     p->reset_address_and_file_offset();
3198
3199   // Remove any patch space that was added in set_final_data_size.
3200   if (this->patch_space_ > 0)
3201     {
3202       this->set_current_data_size_for_child(this->current_data_size_for_child()
3203                                             - this->patch_space_);
3204       this->patch_space_ = 0;
3205     }
3206 }
3207
3208 // Return true if address and file offset have the values after reset.
3209
3210 bool
3211 Output_section::do_address_and_file_offset_have_reset_values() const
3212 {
3213   if (this->is_offset_valid())
3214     return false;
3215
3216   // An unallocated section has address 0 after its construction or a reset.
3217   if ((this->flags_ & elfcpp::SHF_ALLOC) == 0)
3218     return this->is_address_valid() && this->address() == 0;
3219   else
3220     return !this->is_address_valid();
3221 }
3222
3223 // Set the TLS offset.  Called only for SHT_TLS sections.
3224
3225 void
3226 Output_section::do_set_tls_offset(uint64_t tls_base)
3227 {
3228   this->tls_offset_ = this->address() - tls_base;
3229 }
3230
3231 // In a few cases we need to sort the input sections attached to an
3232 // output section.  This is used to implement the type of constructor
3233 // priority ordering implemented by the GNU linker, in which the
3234 // priority becomes part of the section name and the sections are
3235 // sorted by name.  We only do this for an output section if we see an
3236 // attached input section matching ".ctors.*", ".dtors.*",
3237 // ".init_array.*" or ".fini_array.*".
3238
3239 class Output_section::Input_section_sort_entry
3240 {
3241  public:
3242   Input_section_sort_entry()
3243     : input_section_(), index_(-1U), section_name_()
3244   { }
3245
3246   Input_section_sort_entry(const Input_section& input_section,
3247                            unsigned int index,
3248                            bool must_sort_attached_input_sections,
3249                            const char* output_section_name)
3250     : input_section_(input_section), index_(index), section_name_()
3251   {
3252     if ((input_section.is_input_section()
3253          || input_section.is_relaxed_input_section())
3254         && must_sort_attached_input_sections)
3255       {
3256         // This is only called single-threaded from Layout::finalize,
3257         // so it is OK to lock.  Unfortunately we have no way to pass
3258         // in a Task token.
3259         const Task* dummy_task = reinterpret_cast<const Task*>(-1);
3260         Object* obj = (input_section.is_input_section()
3261                        ? input_section.relobj()
3262                        : input_section.relaxed_input_section()->relobj());
3263         Task_lock_obj<Object> tl(dummy_task, obj);
3264
3265         // This is a slow operation, which should be cached in
3266         // Layout::layout if this becomes a speed problem.
3267         this->section_name_ = obj->section_name(input_section.shndx());
3268       }
3269     else if (input_section.is_output_section_data()
3270              && must_sort_attached_input_sections)
3271       {
3272         // For linker-generated sections, use the output section name.
3273         this->section_name_.assign(output_section_name);
3274       }
3275   }
3276
3277   // Return the Input_section.
3278   const Input_section&
3279   input_section() const
3280   {
3281     gold_assert(this->index_ != -1U);
3282     return this->input_section_;
3283   }
3284
3285   // The index of this entry in the original list.  This is used to
3286   // make the sort stable.
3287   unsigned int
3288   index() const
3289   {
3290     gold_assert(this->index_ != -1U);
3291     return this->index_;
3292   }
3293
3294   // The section name.
3295   const std::string&
3296   section_name() const
3297   {
3298     return this->section_name_;
3299   }
3300
3301   // Return true if the section name has a priority.  This is assumed
3302   // to be true if it has a dot after the initial dot.
3303   bool
3304   has_priority() const
3305   {
3306     return this->section_name_.find('.', 1) != std::string::npos;
3307   }
3308
3309   // Return the priority.  Believe it or not, gcc encodes the priority
3310   // differently for .ctors/.dtors and .init_array/.fini_array
3311   // sections.
3312   unsigned int
3313   get_priority() const
3314   {
3315     bool is_ctors;
3316     if (is_prefix_of(".ctors.", this->section_name_.c_str())
3317         || is_prefix_of(".dtors.", this->section_name_.c_str()))
3318       is_ctors = true;
3319     else if (is_prefix_of(".init_array.", this->section_name_.c_str())
3320              || is_prefix_of(".fini_array.", this->section_name_.c_str()))
3321       is_ctors = false;
3322     else
3323       return 0;
3324     char* end;
3325     unsigned long prio = strtoul((this->section_name_.c_str()
3326                                   + (is_ctors ? 7 : 12)),
3327                                  &end, 10);
3328     if (*end != '\0')
3329       return 0;
3330     else if (is_ctors)
3331       return 65535 - prio;
3332     else
3333       return prio;
3334   }
3335
3336   // Return true if this an input file whose base name matches
3337   // FILE_NAME.  The base name must have an extension of ".o", and
3338   // must be exactly FILE_NAME.o or FILE_NAME, one character, ".o".
3339   // This is to match crtbegin.o as well as crtbeginS.o without
3340   // getting confused by other possibilities.  Overall matching the
3341   // file name this way is a dreadful hack, but the GNU linker does it
3342   // in order to better support gcc, and we need to be compatible.
3343   bool
3344   match_file_name(const char* file_name) const
3345   {
3346     if (this->input_section_.is_output_section_data())
3347       return false;
3348     return Layout::match_file_name(this->input_section_.relobj(), file_name);
3349   }
3350
3351   // Returns 1 if THIS should appear before S in section order, -1 if S
3352   // appears before THIS and 0 if they are not comparable.
3353   int
3354   compare_section_ordering(const Input_section_sort_entry& s) const
3355   {
3356     unsigned int this_secn_index = this->input_section_.section_order_index();
3357     unsigned int s_secn_index = s.input_section().section_order_index();
3358     if (this_secn_index > 0 && s_secn_index > 0)
3359       {
3360         if (this_secn_index < s_secn_index)
3361           return 1;
3362         else if (this_secn_index > s_secn_index)
3363           return -1;
3364       }
3365     return 0;
3366   }
3367
3368  private:
3369   // The Input_section we are sorting.
3370   Input_section input_section_;
3371   // The index of this Input_section in the original list.
3372   unsigned int index_;
3373   // The section name if there is one.
3374   std::string section_name_;
3375 };
3376
3377 // Return true if S1 should come before S2 in the output section.
3378
3379 bool
3380 Output_section::Input_section_sort_compare::operator()(
3381     const Output_section::Input_section_sort_entry& s1,
3382     const Output_section::Input_section_sort_entry& s2) const
3383 {
3384   // crtbegin.o must come first.
3385   bool s1_begin = s1.match_file_name("crtbegin");
3386   bool s2_begin = s2.match_file_name("crtbegin");
3387   if (s1_begin || s2_begin)
3388     {
3389       if (!s1_begin)
3390         return false;
3391       if (!s2_begin)
3392         return true;
3393       return s1.index() < s2.index();
3394     }
3395
3396   // crtend.o must come last.
3397   bool s1_end = s1.match_file_name("crtend");
3398   bool s2_end = s2.match_file_name("crtend");
3399   if (s1_end || s2_end)
3400     {
3401       if (!s1_end)
3402         return true;
3403       if (!s2_end)
3404         return false;
3405       return s1.index() < s2.index();
3406     }
3407
3408   // A section with a priority follows a section without a priority.
3409   bool s1_has_priority = s1.has_priority();
3410   bool s2_has_priority = s2.has_priority();
3411   if (s1_has_priority && !s2_has_priority)
3412     return false;
3413   if (!s1_has_priority && s2_has_priority)
3414     return true;
3415
3416   // Check if a section order exists for these sections through a section
3417   // ordering file.  If sequence_num is 0, an order does not exist.
3418   int sequence_num = s1.compare_section_ordering(s2);
3419   if (sequence_num != 0)
3420     return sequence_num == 1;
3421
3422   // Otherwise we sort by name.
3423   int compare = s1.section_name().compare(s2.section_name());
3424   if (compare != 0)
3425     return compare < 0;
3426
3427   // Otherwise we keep the input order.
3428   return s1.index() < s2.index();
3429 }
3430
3431 // Return true if S1 should come before S2 in an .init_array or .fini_array
3432 // output section.
3433
3434 bool
3435 Output_section::Input_section_sort_init_fini_compare::operator()(
3436     const Output_section::Input_section_sort_entry& s1,
3437     const Output_section::Input_section_sort_entry& s2) const
3438 {
3439   // A section without a priority follows a section with a priority.
3440   // This is the reverse of .ctors and .dtors sections.
3441   bool s1_has_priority = s1.has_priority();
3442   bool s2_has_priority = s2.has_priority();
3443   if (s1_has_priority && !s2_has_priority)
3444     return true;
3445   if (!s1_has_priority && s2_has_priority)
3446     return false;
3447
3448   // .ctors and .dtors sections without priority come after
3449   // .init_array and .fini_array sections without priority.
3450   if (!s1_has_priority
3451       && (s1.section_name() == ".ctors" || s1.section_name() == ".dtors")
3452       && s1.section_name() != s2.section_name())
3453     return false;
3454   if (!s2_has_priority
3455       && (s2.section_name() == ".ctors" || s2.section_name() == ".dtors")
3456       && s2.section_name() != s1.section_name())
3457     return true;
3458
3459   // Sort by priority if we can.
3460   if (s1_has_priority)
3461     {
3462       unsigned int s1_prio = s1.get_priority();
3463       unsigned int s2_prio = s2.get_priority();
3464       if (s1_prio < s2_prio)
3465         return true;
3466       else if (s1_prio > s2_prio)
3467         return false;
3468     }
3469
3470   // Check if a section order exists for these sections through a section
3471   // ordering file.  If sequence_num is 0, an order does not exist.
3472   int sequence_num = s1.compare_section_ordering(s2);
3473   if (sequence_num != 0)
3474     return sequence_num == 1;
3475
3476   // Otherwise we sort by name.
3477   int compare = s1.section_name().compare(s2.section_name());
3478   if (compare != 0)
3479     return compare < 0;
3480
3481   // Otherwise we keep the input order.
3482   return s1.index() < s2.index();
3483 }
3484
3485 // Return true if S1 should come before S2.  Sections that do not match
3486 // any pattern in the section ordering file are placed ahead of the sections
3487 // that match some pattern.
3488
3489 bool
3490 Output_section::Input_section_sort_section_order_index_compare::operator()(
3491     const Output_section::Input_section_sort_entry& s1,
3492     const Output_section::Input_section_sort_entry& s2) const
3493 {
3494   unsigned int s1_secn_index = s1.input_section().section_order_index();
3495   unsigned int s2_secn_index = s2.input_section().section_order_index();
3496
3497   // Keep input order if section ordering cannot determine order.
3498   if (s1_secn_index == s2_secn_index)
3499     return s1.index() < s2.index();
3500
3501   return s1_secn_index < s2_secn_index;
3502 }
3503
3504 // Return true if S1 should come before S2.  This is the sort comparison
3505 // function for .text to sort sections with prefixes
3506 // .text.{unlikely,exit,startup,hot} before other sections.
3507
3508 bool
3509 Output_section::Input_section_sort_section_prefix_special_ordering_compare
3510   ::operator()(
3511     const Output_section::Input_section_sort_entry& s1,
3512     const Output_section::Input_section_sort_entry& s2) const
3513 {
3514   // Some input section names have special ordering requirements.
3515   int o1 = Layout::special_ordering_of_input_section(s1.section_name().c_str());
3516   int o2 = Layout::special_ordering_of_input_section(s2.section_name().c_str());
3517   if (o1 != o2)
3518     {
3519       if (o1 < 0)
3520         return false;
3521       else if (o2 < 0)
3522         return true;
3523       else
3524         return o1 < o2;
3525     }
3526
3527   // Keep input order otherwise.
3528   return s1.index() < s2.index();
3529 }
3530
3531 // Return true if S1 should come before S2.  This is the sort comparison
3532 // function for sections to sort them by name.
3533
3534 bool
3535 Output_section::Input_section_sort_section_name_compare
3536   ::operator()(
3537     const Output_section::Input_section_sort_entry& s1,
3538     const Output_section::Input_section_sort_entry& s2) const
3539 {
3540   // We sort by name.
3541   int compare = s1.section_name().compare(s2.section_name());
3542   if (compare != 0)
3543     return compare < 0;
3544
3545   // Keep input order otherwise.
3546   return s1.index() < s2.index();
3547 }
3548
3549 // This updates the section order index of input sections according to the
3550 // the order specified in the mapping from Section id to order index.
3551
3552 void
3553 Output_section::update_section_layout(
3554   const Section_layout_order* order_map)
3555 {
3556   for (Input_section_list::iterator p = this->input_sections_.begin();
3557        p != this->input_sections_.end();
3558        ++p)
3559     {
3560       if (p->is_input_section()
3561           || p->is_relaxed_input_section())
3562         {
3563           Relobj* obj = (p->is_input_section()
3564                          ? p->relobj()
3565                          : p->relaxed_input_section()->relobj());
3566           unsigned int shndx = p->shndx();
3567           Section_layout_order::const_iterator it
3568             = order_map->find(Section_id(obj, shndx));
3569           if (it == order_map->end())
3570             continue;
3571           unsigned int section_order_index = it->second;
3572           if (section_order_index != 0)
3573             {
3574               p->set_section_order_index(section_order_index);
3575               this->set_input_section_order_specified();
3576             }
3577         }
3578     }
3579 }
3580
3581 // Sort the input sections attached to an output section.
3582
3583 void
3584 Output_section::sort_attached_input_sections()
3585 {
3586   if (this->attached_input_sections_are_sorted_)
3587     return;
3588
3589   if (this->checkpoint_ != NULL
3590       && !this->checkpoint_->input_sections_saved())
3591     this->checkpoint_->save_input_sections();
3592
3593   // The only thing we know about an input section is the object and
3594   // the section index.  We need the section name.  Recomputing this
3595   // is slow but this is an unusual case.  If this becomes a speed
3596   // problem we can cache the names as required in Layout::layout.
3597
3598   // We start by building a larger vector holding a copy of each
3599   // Input_section, plus its current index in the list and its name.
3600   std::vector<Input_section_sort_entry> sort_list;
3601
3602   unsigned int i = 0;
3603   for (Input_section_list::iterator p = this->input_sections_.begin();
3604        p != this->input_sections_.end();
3605        ++p, ++i)
3606       sort_list.push_back(Input_section_sort_entry(*p, i,
3607                             this->must_sort_attached_input_sections(),
3608                             this->name()));
3609
3610   // Sort the input sections.
3611   if (this->must_sort_attached_input_sections())
3612     {
3613       if (this->type() == elfcpp::SHT_PREINIT_ARRAY
3614           || this->type() == elfcpp::SHT_INIT_ARRAY
3615           || this->type() == elfcpp::SHT_FINI_ARRAY)
3616         std::sort(sort_list.begin(), sort_list.end(),
3617                   Input_section_sort_init_fini_compare());
3618       else if (strcmp(parameters->options().sort_section(), "name") == 0)
3619         std::sort(sort_list.begin(), sort_list.end(),
3620                   Input_section_sort_section_name_compare());
3621       else if (strcmp(this->name(), ".text") == 0)
3622         std::sort(sort_list.begin(), sort_list.end(),
3623                   Input_section_sort_section_prefix_special_ordering_compare());
3624       else
3625         std::sort(sort_list.begin(), sort_list.end(),
3626                   Input_section_sort_compare());
3627     }
3628   else
3629     {
3630       gold_assert(this->input_section_order_specified());
3631       std::sort(sort_list.begin(), sort_list.end(),
3632                 Input_section_sort_section_order_index_compare());
3633     }
3634
3635   // Copy the sorted input sections back to our list.
3636   this->input_sections_.clear();
3637   for (std::vector<Input_section_sort_entry>::iterator p = sort_list.begin();
3638        p != sort_list.end();
3639        ++p)
3640     this->input_sections_.push_back(p->input_section());
3641   sort_list.clear();
3642
3643   // Remember that we sorted the input sections, since we might get
3644   // called again.
3645   this->attached_input_sections_are_sorted_ = true;
3646 }
3647
3648 // Write the section header to *OSHDR.
3649
3650 template<int size, bool big_endian>
3651 void
3652 Output_section::write_header(const Layout* layout,
3653                              const Stringpool* secnamepool,
3654                              elfcpp::Shdr_write<size, big_endian>* oshdr) const
3655 {
3656   oshdr->put_sh_name(secnamepool->get_offset(this->name_));
3657   oshdr->put_sh_type(this->type_);
3658
3659   elfcpp::Elf_Xword flags = this->flags_;
3660   if (this->info_section_ != NULL && this->info_uses_section_index_)
3661     flags |= elfcpp::SHF_INFO_LINK;
3662   oshdr->put_sh_flags(flags);
3663
3664   oshdr->put_sh_addr(this->address());
3665   oshdr->put_sh_offset(this->offset());
3666   oshdr->put_sh_size(this->data_size());
3667   if (this->link_section_ != NULL)
3668     oshdr->put_sh_link(this->link_section_->out_shndx());
3669   else if (this->should_link_to_symtab_)
3670     oshdr->put_sh_link(layout->symtab_section_shndx());
3671   else if (this->should_link_to_dynsym_)
3672     oshdr->put_sh_link(layout->dynsym_section()->out_shndx());
3673   else
3674     oshdr->put_sh_link(this->link_);
3675
3676   elfcpp::Elf_Word info;
3677   if (this->info_section_ != NULL)
3678     {
3679       if (this->info_uses_section_index_)
3680         info = this->info_section_->out_shndx();
3681       else
3682         info = this->info_section_->symtab_index();
3683     }
3684   else if (this->info_symndx_ != NULL)
3685     info = this->info_symndx_->symtab_index();
3686   else
3687     info = this->info_;
3688   oshdr->put_sh_info(info);
3689
3690   oshdr->put_sh_addralign(this->addralign_);
3691   oshdr->put_sh_entsize(this->entsize_);
3692 }
3693
3694 // Write out the data.  For input sections the data is written out by
3695 // Object::relocate, but we have to handle Output_section_data objects
3696 // here.
3697
3698 void
3699 Output_section::do_write(Output_file* of)
3700 {
3701   gold_assert(!this->requires_postprocessing());
3702
3703   // If the target performs relaxation, we delay filler generation until now.
3704   gold_assert(!this->generate_code_fills_at_write_ || this->fills_.empty());
3705
3706   off_t output_section_file_offset = this->offset();
3707   for (Fill_list::iterator p = this->fills_.begin();
3708        p != this->fills_.end();
3709        ++p)
3710     {
3711       std::string fill_data(parameters->target().code_fill(p->length()));
3712       of->write(output_section_file_offset + p->section_offset(),
3713                 fill_data.data(), fill_data.size());
3714     }
3715
3716   off_t off = this->offset() + this->first_input_offset_;
3717   for (Input_section_list::iterator p = this->input_sections_.begin();
3718        p != this->input_sections_.end();
3719        ++p)
3720     {
3721       off_t aligned_off = align_address(off, p->addralign());
3722       if (this->generate_code_fills_at_write_ && (off != aligned_off))
3723         {
3724           size_t fill_len = aligned_off - off;
3725           std::string fill_data(parameters->target().code_fill(fill_len));
3726           of->write(off, fill_data.data(), fill_data.size());
3727         }
3728
3729       p->write(of);
3730       off = aligned_off + p->data_size();
3731     }
3732
3733   // For incremental links, fill in unused chunks in debug sections
3734   // with dummy compilation unit headers.
3735   if (this->free_space_fill_ != NULL)
3736     {
3737       for (Free_list::Const_iterator p = this->free_list_.begin();
3738            p != this->free_list_.end();
3739            ++p)
3740         {
3741           off_t off = p->start_;
3742           size_t len = p->end_ - off;
3743           this->free_space_fill_->write(of, this->offset() + off, len);
3744         }
3745       if (this->patch_space_ > 0)
3746         {
3747           off_t off = this->current_data_size_for_child() - this->patch_space_;
3748           this->free_space_fill_->write(of, this->offset() + off,
3749                                         this->patch_space_);
3750         }
3751     }
3752 }
3753
3754 // If a section requires postprocessing, create the buffer to use.
3755
3756 void
3757 Output_section::create_postprocessing_buffer()
3758 {
3759   gold_assert(this->requires_postprocessing());
3760
3761   if (this->postprocessing_buffer_ != NULL)
3762     return;
3763
3764   if (!this->input_sections_.empty())
3765     {
3766       off_t off = this->first_input_offset_;
3767       for (Input_section_list::iterator p = this->input_sections_.begin();
3768            p != this->input_sections_.end();
3769            ++p)
3770         {
3771           off = align_address(off, p->addralign());
3772           p->finalize_data_size();
3773           off += p->data_size();
3774         }
3775       this->set_current_data_size_for_child(off);
3776     }
3777
3778   off_t buffer_size = this->current_data_size_for_child();
3779   this->postprocessing_buffer_ = new unsigned char[buffer_size];
3780 }
3781
3782 // Write all the data of an Output_section into the postprocessing
3783 // buffer.  This is used for sections which require postprocessing,
3784 // such as compression.  Input sections are handled by
3785 // Object::Relocate.
3786
3787 void
3788 Output_section::write_to_postprocessing_buffer()
3789 {
3790   gold_assert(this->requires_postprocessing());
3791
3792   // If the target performs relaxation, we delay filler generation until now.
3793   gold_assert(!this->generate_code_fills_at_write_ || this->fills_.empty());
3794
3795   unsigned char* buffer = this->postprocessing_buffer();
3796   for (Fill_list::iterator p = this->fills_.begin();
3797        p != this->fills_.end();
3798        ++p)
3799     {
3800       std::string fill_data(parameters->target().code_fill(p->length()));
3801       memcpy(buffer + p->section_offset(), fill_data.data(),
3802              fill_data.size());
3803     }
3804
3805   off_t off = this->first_input_offset_;
3806   for (Input_section_list::iterator p = this->input_sections_.begin();
3807        p != this->input_sections_.end();
3808        ++p)
3809     {
3810       off_t aligned_off = align_address(off, p->addralign());
3811       if (this->generate_code_fills_at_write_ && (off != aligned_off))
3812         {
3813           size_t fill_len = aligned_off - off;
3814           std::string fill_data(parameters->target().code_fill(fill_len));
3815           memcpy(buffer + off, fill_data.data(), fill_data.size());
3816         }
3817
3818       p->write_to_buffer(buffer + aligned_off);
3819       off = aligned_off + p->data_size();
3820     }
3821 }
3822
3823 // Get the input sections for linker script processing.  We leave
3824 // behind the Output_section_data entries.  Note that this may be
3825 // slightly incorrect for merge sections.  We will leave them behind,
3826 // but it is possible that the script says that they should follow
3827 // some other input sections, as in:
3828 //    .rodata { *(.rodata) *(.rodata.cst*) }
3829 // For that matter, we don't handle this correctly:
3830 //    .rodata { foo.o(.rodata.cst*) *(.rodata.cst*) }
3831 // With luck this will never matter.
3832
3833 uint64_t
3834 Output_section::get_input_sections(
3835     uint64_t address,
3836     const std::string& fill,
3837     std::list<Input_section>* input_sections)
3838 {
3839   if (this->checkpoint_ != NULL
3840       && !this->checkpoint_->input_sections_saved())
3841     this->checkpoint_->save_input_sections();
3842
3843   // Invalidate fast look-up maps.
3844   this->lookup_maps_->invalidate();
3845
3846   uint64_t orig_address = address;
3847
3848   address = align_address(address, this->addralign());
3849
3850   Input_section_list remaining;
3851   for (Input_section_list::iterator p = this->input_sections_.begin();
3852        p != this->input_sections_.end();
3853        ++p)
3854     {
3855       if (p->is_input_section()
3856           || p->is_relaxed_input_section()
3857           || p->is_merge_section())
3858         input_sections->push_back(*p);
3859       else
3860         {
3861           uint64_t aligned_address = align_address(address, p->addralign());
3862           if (aligned_address != address && !fill.empty())
3863             {
3864               section_size_type length =
3865                 convert_to_section_size_type(aligned_address - address);
3866               std::string this_fill;
3867               this_fill.reserve(length);
3868               while (this_fill.length() + fill.length() <= length)
3869                 this_fill += fill;
3870               if (this_fill.length() < length)
3871                 this_fill.append(fill, 0, length - this_fill.length());
3872
3873               Output_section_data* posd = new Output_data_const(this_fill, 0);
3874               remaining.push_back(Input_section(posd));
3875             }
3876           address = aligned_address;
3877
3878           remaining.push_back(*p);
3879
3880           p->finalize_data_size();
3881           address += p->data_size();
3882         }
3883     }
3884
3885   this->input_sections_.swap(remaining);
3886   this->first_input_offset_ = 0;
3887
3888   uint64_t data_size = address - orig_address;
3889   this->set_current_data_size_for_child(data_size);
3890   return data_size;
3891 }
3892
3893 // Add a script input section.  SIS is an Output_section::Input_section,
3894 // which can be either a plain input section or a special input section like
3895 // a relaxed input section.  For a special input section, its size must be
3896 // finalized.
3897
3898 void
3899 Output_section::add_script_input_section(const Input_section& sis)
3900 {
3901   uint64_t data_size = sis.data_size();
3902   uint64_t addralign = sis.addralign();
3903   if (addralign > this->addralign_)
3904     this->addralign_ = addralign;
3905
3906   off_t offset_in_section = this->current_data_size_for_child();
3907   off_t aligned_offset_in_section = align_address(offset_in_section,
3908                                                   addralign);
3909
3910   this->set_current_data_size_for_child(aligned_offset_in_section
3911                                         + data_size);
3912
3913   this->input_sections_.push_back(sis);
3914
3915   // Update fast lookup maps if necessary.
3916   if (this->lookup_maps_->is_valid())
3917     {
3918       if (sis.is_relaxed_input_section())
3919         {
3920           Output_relaxed_input_section* poris = sis.relaxed_input_section();
3921           this->lookup_maps_->add_relaxed_input_section(poris->relobj(),
3922                                                         poris->shndx(), poris);
3923         }
3924     }
3925 }
3926
3927 // Save states for relaxation.
3928
3929 void
3930 Output_section::save_states()
3931 {
3932   gold_assert(this->checkpoint_ == NULL);
3933   Checkpoint_output_section* checkpoint =
3934     new Checkpoint_output_section(this->addralign_, this->flags_,
3935                                   this->input_sections_,
3936                                   this->first_input_offset_,
3937                                   this->attached_input_sections_are_sorted_);
3938   this->checkpoint_ = checkpoint;
3939   gold_assert(this->fills_.empty());
3940 }
3941
3942 void
3943 Output_section::discard_states()
3944 {
3945   gold_assert(this->checkpoint_ != NULL);
3946   delete this->checkpoint_;
3947   this->checkpoint_ = NULL;
3948   gold_assert(this->fills_.empty());
3949
3950   // Simply invalidate the fast lookup maps since we do not keep
3951   // track of them.
3952   this->lookup_maps_->invalidate();
3953 }
3954
3955 void
3956 Output_section::restore_states()
3957 {
3958   gold_assert(this->checkpoint_ != NULL);
3959   Checkpoint_output_section* checkpoint = this->checkpoint_;
3960
3961   this->addralign_ = checkpoint->addralign();
3962   this->flags_ = checkpoint->flags();
3963   this->first_input_offset_ = checkpoint->first_input_offset();
3964
3965   if (!checkpoint->input_sections_saved())
3966     {
3967       // If we have not copied the input sections, just resize it.
3968       size_t old_size = checkpoint->input_sections_size();
3969       gold_assert(this->input_sections_.size() >= old_size);
3970       this->input_sections_.resize(old_size);
3971     }
3972   else
3973     {
3974       // We need to copy the whole list.  This is not efficient for
3975       // extremely large output with hundreads of thousands of input
3976       // objects.  We may need to re-think how we should pass sections
3977       // to scripts.
3978       this->input_sections_ = *checkpoint->input_sections();
3979     }
3980
3981   this->attached_input_sections_are_sorted_ =
3982     checkpoint->attached_input_sections_are_sorted();
3983
3984   // Simply invalidate the fast lookup maps since we do not keep
3985   // track of them.
3986   this->lookup_maps_->invalidate();
3987 }
3988
3989 // Update the section offsets of input sections in this.  This is required if
3990 // relaxation causes some input sections to change sizes.
3991
3992 void
3993 Output_section::adjust_section_offsets()
3994 {
3995   if (!this->section_offsets_need_adjustment_)
3996     return;
3997
3998   off_t off = 0;
3999   for (Input_section_list::iterator p = this->input_sections_.begin();
4000        p != this->input_sections_.end();
4001        ++p)
4002     {
4003       off = align_address(off, p->addralign());
4004       if (p->is_input_section())
4005         p->relobj()->set_section_offset(p->shndx(), off);
4006       off += p->data_size();
4007     }
4008
4009   this->section_offsets_need_adjustment_ = false;
4010 }
4011
4012 // Print to the map file.
4013
4014 void
4015 Output_section::do_print_to_mapfile(Mapfile* mapfile) const
4016 {
4017   mapfile->print_output_section(this);
4018
4019   for (Input_section_list::const_iterator p = this->input_sections_.begin();
4020        p != this->input_sections_.end();
4021        ++p)
4022     p->print_to_mapfile(mapfile);
4023 }
4024
4025 // Print stats for merge sections to stderr.
4026
4027 void
4028 Output_section::print_merge_stats()
4029 {
4030   Input_section_list::iterator p;
4031   for (p = this->input_sections_.begin();
4032        p != this->input_sections_.end();
4033        ++p)
4034     p->print_merge_stats(this->name_);
4035 }
4036
4037 // Set a fixed layout for the section.  Used for incremental update links.
4038
4039 void
4040 Output_section::set_fixed_layout(uint64_t sh_addr, off_t sh_offset,
4041                                  off_t sh_size, uint64_t sh_addralign)
4042 {
4043   this->addralign_ = sh_addralign;
4044   this->set_current_data_size(sh_size);
4045   if ((this->flags_ & elfcpp::SHF_ALLOC) != 0)
4046     this->set_address(sh_addr);
4047   this->set_file_offset(sh_offset);
4048   this->finalize_data_size();
4049   this->free_list_.init(sh_size, false);
4050   this->has_fixed_layout_ = true;
4051 }
4052
4053 // Reserve space within the fixed layout for the section.  Used for
4054 // incremental update links.
4055
4056 void
4057 Output_section::reserve(uint64_t sh_offset, uint64_t sh_size)
4058 {
4059   this->free_list_.remove(sh_offset, sh_offset + sh_size);
4060 }
4061
4062 // Allocate space from the free list for the section.  Used for
4063 // incremental update links.
4064
4065 off_t
4066 Output_section::allocate(off_t len, uint64_t addralign)
4067 {
4068   return this->free_list_.allocate(len, addralign, 0);
4069 }
4070
4071 // Output segment methods.
4072
4073 Output_segment::Output_segment(elfcpp::Elf_Word type, elfcpp::Elf_Word flags)
4074   : vaddr_(0),
4075     paddr_(0),
4076     memsz_(0),
4077     max_align_(0),
4078     min_p_align_(0),
4079     offset_(0),
4080     filesz_(0),
4081     type_(type),
4082     flags_(flags),
4083     is_max_align_known_(false),
4084     are_addresses_set_(false),
4085     is_large_data_segment_(false),
4086     is_unique_segment_(false)
4087 {
4088   // The ELF ABI specifies that a PT_TLS segment always has PF_R as
4089   // the flags.
4090   if (type == elfcpp::PT_TLS)
4091     this->flags_ = elfcpp::PF_R;
4092 }
4093
4094 // Add an Output_section to a PT_LOAD Output_segment.
4095
4096 void
4097 Output_segment::add_output_section_to_load(Layout* layout,
4098                                            Output_section* os,
4099                                            elfcpp::Elf_Word seg_flags)
4100 {
4101   gold_assert(this->type() == elfcpp::PT_LOAD);
4102   gold_assert((os->flags() & elfcpp::SHF_ALLOC) != 0);
4103   gold_assert(!this->is_max_align_known_);
4104   gold_assert(os->is_large_data_section() == this->is_large_data_segment());
4105
4106   this->update_flags_for_output_section(seg_flags);
4107
4108   // We don't want to change the ordering if we have a linker script
4109   // with a SECTIONS clause.
4110   Output_section_order order = os->order();
4111   if (layout->script_options()->saw_sections_clause())
4112     order = static_cast<Output_section_order>(0);
4113   else
4114     gold_assert(order != ORDER_INVALID);
4115
4116   this->output_lists_[order].push_back(os);
4117 }
4118
4119 // Add an Output_section to a non-PT_LOAD Output_segment.
4120
4121 void
4122 Output_segment::add_output_section_to_nonload(Output_section* os,
4123                                               elfcpp::Elf_Word seg_flags)
4124 {
4125   gold_assert(this->type() != elfcpp::PT_LOAD);
4126   gold_assert((os->flags() & elfcpp::SHF_ALLOC) != 0);
4127   gold_assert(!this->is_max_align_known_);
4128
4129   this->update_flags_for_output_section(seg_flags);
4130
4131   this->output_lists_[0].push_back(os);
4132 }
4133
4134 // Remove an Output_section from this segment.  It is an error if it
4135 // is not present.
4136
4137 void
4138 Output_segment::remove_output_section(Output_section* os)
4139 {
4140   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4141     {
4142       Output_data_list* pdl = &this->output_lists_[i];
4143       for (Output_data_list::iterator p = pdl->begin(); p != pdl->end(); ++p)
4144         {
4145           if (*p == os)
4146             {
4147               pdl->erase(p);
4148               return;
4149             }
4150         }
4151     }
4152   gold_unreachable();
4153 }
4154
4155 // Add an Output_data (which need not be an Output_section) to the
4156 // start of a segment.
4157
4158 void
4159 Output_segment::add_initial_output_data(Output_data* od)
4160 {
4161   gold_assert(!this->is_max_align_known_);
4162   Output_data_list::iterator p = this->output_lists_[0].begin();
4163   this->output_lists_[0].insert(p, od);
4164 }
4165
4166 // Return true if this segment has any sections which hold actual
4167 // data, rather than being a BSS section.
4168
4169 bool
4170 Output_segment::has_any_data_sections() const
4171 {
4172   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4173     {
4174       const Output_data_list* pdl = &this->output_lists_[i];
4175       for (Output_data_list::const_iterator p = pdl->begin();
4176            p != pdl->end();
4177            ++p)
4178         {
4179           if (!(*p)->is_section())
4180             return true;
4181           if ((*p)->output_section()->type() != elfcpp::SHT_NOBITS)
4182             return true;
4183         }
4184     }
4185   return false;
4186 }
4187
4188 // Return whether the first data section (not counting TLS sections)
4189 // is a relro section.
4190
4191 bool
4192 Output_segment::is_first_section_relro() const
4193 {
4194   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4195     {
4196       if (i == static_cast<int>(ORDER_TLS_BSS))
4197         continue;
4198       const Output_data_list* pdl = &this->output_lists_[i];
4199       if (!pdl->empty())
4200         {
4201           Output_data* p = pdl->front();
4202           return p->is_section() && p->output_section()->is_relro();
4203         }
4204     }
4205   return false;
4206 }
4207
4208 // Return the maximum alignment of the Output_data in Output_segment.
4209
4210 uint64_t
4211 Output_segment::maximum_alignment()
4212 {
4213   if (!this->is_max_align_known_)
4214     {
4215       for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4216         {
4217           const Output_data_list* pdl = &this->output_lists_[i];
4218           uint64_t addralign = Output_segment::maximum_alignment_list(pdl);
4219           if (addralign > this->max_align_)
4220             this->max_align_ = addralign;
4221         }
4222       this->is_max_align_known_ = true;
4223     }
4224
4225   return this->max_align_;
4226 }
4227
4228 // Return the maximum alignment of a list of Output_data.
4229
4230 uint64_t
4231 Output_segment::maximum_alignment_list(const Output_data_list* pdl)
4232 {
4233   uint64_t ret = 0;
4234   for (Output_data_list::const_iterator p = pdl->begin();
4235        p != pdl->end();
4236        ++p)
4237     {
4238       uint64_t addralign = (*p)->addralign();
4239       if (addralign > ret)
4240         ret = addralign;
4241     }
4242   return ret;
4243 }
4244
4245 // Return whether this segment has any dynamic relocs.
4246
4247 bool
4248 Output_segment::has_dynamic_reloc() const
4249 {
4250   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4251     if (this->has_dynamic_reloc_list(&this->output_lists_[i]))
4252       return true;
4253   return false;
4254 }
4255
4256 // Return whether this Output_data_list has any dynamic relocs.
4257
4258 bool
4259 Output_segment::has_dynamic_reloc_list(const Output_data_list* pdl) const
4260 {
4261   for (Output_data_list::const_iterator p = pdl->begin();
4262        p != pdl->end();
4263        ++p)
4264     if ((*p)->has_dynamic_reloc())
4265       return true;
4266   return false;
4267 }
4268
4269 // Set the section addresses for an Output_segment.  If RESET is true,
4270 // reset the addresses first.  ADDR is the address and *POFF is the
4271 // file offset.  Set the section indexes starting with *PSHNDX.
4272 // INCREASE_RELRO is the size of the portion of the first non-relro
4273 // section that should be included in the PT_GNU_RELRO segment.
4274 // If this segment has relro sections, and has been aligned for
4275 // that purpose, set *HAS_RELRO to TRUE.  Return the address of
4276 // the immediately following segment.  Update *HAS_RELRO, *POFF,
4277 // and *PSHNDX.
4278
4279 uint64_t
4280 Output_segment::set_section_addresses(const Target* target,
4281                                       Layout* layout, bool reset,
4282                                       uint64_t addr,
4283                                       unsigned int* increase_relro,
4284                                       bool* has_relro,
4285                                       off_t* poff,
4286                                       unsigned int* pshndx)
4287 {
4288   gold_assert(this->type_ == elfcpp::PT_LOAD);
4289
4290   uint64_t last_relro_pad = 0;
4291   off_t orig_off = *poff;
4292
4293   bool in_tls = false;
4294
4295   // If we have relro sections, we need to pad forward now so that the
4296   // relro sections plus INCREASE_RELRO end on an abi page boundary.
4297   if (parameters->options().relro()
4298       && this->is_first_section_relro()
4299       && (!this->are_addresses_set_ || reset))
4300     {
4301       uint64_t relro_size = 0;
4302       off_t off = *poff;
4303       uint64_t max_align = 0;
4304       for (int i = 0; i <= static_cast<int>(ORDER_RELRO_LAST); ++i)
4305         {
4306           Output_data_list* pdl = &this->output_lists_[i];
4307           Output_data_list::iterator p;
4308           for (p = pdl->begin(); p != pdl->end(); ++p)
4309             {
4310               if (!(*p)->is_section())
4311                 break;
4312               uint64_t align = (*p)->addralign();
4313               if (align > max_align)
4314                 max_align = align;
4315               if ((*p)->is_section_flag_set(elfcpp::SHF_TLS))
4316                 in_tls = true;
4317               else if (in_tls)
4318                 {
4319                   // Align the first non-TLS section to the alignment
4320                   // of the TLS segment.
4321                   align = max_align;
4322                   in_tls = false;
4323                 }
4324               // Ignore the size of the .tbss section.
4325               if ((*p)->is_section_flag_set(elfcpp::SHF_TLS)
4326                   && (*p)->is_section_type(elfcpp::SHT_NOBITS))
4327                 continue;
4328               relro_size = align_address(relro_size, align);
4329               if ((*p)->is_address_valid())
4330                 relro_size += (*p)->data_size();
4331               else
4332                 {
4333                   // FIXME: This could be faster.
4334                   (*p)->set_address_and_file_offset(relro_size,
4335                                                     relro_size);
4336                   relro_size += (*p)->data_size();
4337                   (*p)->reset_address_and_file_offset();
4338                 }
4339             }
4340           if (p != pdl->end())
4341             break;
4342         }
4343       relro_size += *increase_relro;
4344       // Pad the total relro size to a multiple of the maximum
4345       // section alignment seen.
4346       uint64_t aligned_size = align_address(relro_size, max_align);
4347       // Note the amount of padding added after the last relro section.
4348       last_relro_pad = aligned_size - relro_size;
4349       *has_relro = true;
4350
4351       uint64_t page_align = parameters->target().abi_pagesize();
4352
4353       // Align to offset N such that (N + RELRO_SIZE) % PAGE_ALIGN == 0.
4354       uint64_t desired_align = page_align - (aligned_size % page_align);
4355       if (desired_align < off % page_align)
4356         off += page_align;
4357       off += desired_align - off % page_align;
4358       addr += off - orig_off;
4359       orig_off = off;
4360       *poff = off;
4361     }
4362
4363   if (!reset && this->are_addresses_set_)
4364     {
4365       gold_assert(this->paddr_ == addr);
4366       addr = this->vaddr_;
4367     }
4368   else
4369     {
4370       this->vaddr_ = addr;
4371       this->paddr_ = addr;
4372       this->are_addresses_set_ = true;
4373     }
4374
4375   in_tls = false;
4376
4377   this->offset_ = orig_off;
4378
4379   off_t off = 0;
4380   uint64_t ret;
4381   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4382     {
4383       if (i == static_cast<int>(ORDER_RELRO_LAST))
4384         {
4385           *poff += last_relro_pad;
4386           addr += last_relro_pad;
4387           if (this->output_lists_[i].empty())
4388             {
4389               // If there is nothing in the ORDER_RELRO_LAST list,
4390               // the padding will occur at the end of the relro
4391               // segment, and we need to add it to *INCREASE_RELRO.
4392               *increase_relro += last_relro_pad;
4393             }
4394         }
4395       addr = this->set_section_list_addresses(layout, reset,
4396                                               &this->output_lists_[i],
4397                                               addr, poff, pshndx, &in_tls);
4398       if (i < static_cast<int>(ORDER_SMALL_BSS))
4399         {
4400           this->filesz_ = *poff - orig_off;
4401           off = *poff;
4402         }
4403
4404       ret = addr;
4405     }
4406
4407   // If the last section was a TLS section, align upward to the
4408   // alignment of the TLS segment, so that the overall size of the TLS
4409   // segment is aligned.
4410   if (in_tls)
4411     {
4412       uint64_t segment_align = layout->tls_segment()->maximum_alignment();
4413       *poff = align_address(*poff, segment_align);
4414     }
4415
4416   this->memsz_ = *poff - orig_off;
4417
4418   // Ignore the file offset adjustments made by the BSS Output_data
4419   // objects.
4420   *poff = off;
4421
4422   // If code segments must contain only code, and this code segment is
4423   // page-aligned in the file, then fill it out to a whole page with
4424   // code fill (the tail of the segment will not be within any section).
4425   // Thus the entire code segment can be mapped from the file as whole
4426   // pages and that mapping will contain only valid instructions.
4427   if (target->isolate_execinstr() && (this->flags() & elfcpp::PF_X) != 0)
4428     {
4429       uint64_t abi_pagesize = target->abi_pagesize();
4430       if (orig_off % abi_pagesize == 0 && off % abi_pagesize != 0)
4431         {
4432           size_t fill_size = abi_pagesize - (off % abi_pagesize);
4433
4434           std::string fill_data;
4435           if (target->has_code_fill())
4436             fill_data = target->code_fill(fill_size);
4437           else
4438             fill_data.resize(fill_size); // Zero fill.
4439
4440           Output_data_const* fill = new Output_data_const(fill_data, 0);
4441           fill->set_address(this->vaddr_ + this->memsz_);
4442           fill->set_file_offset(off);
4443           layout->add_relax_output(fill);
4444
4445           off += fill_size;
4446           gold_assert(off % abi_pagesize == 0);
4447           ret += fill_size;
4448           gold_assert(ret % abi_pagesize == 0);
4449
4450           gold_assert((uint64_t) this->filesz_ == this->memsz_);
4451           this->memsz_ = this->filesz_ += fill_size;
4452
4453           *poff = off;
4454         }
4455     }
4456
4457   return ret;
4458 }
4459
4460 // Set the addresses and file offsets in a list of Output_data
4461 // structures.
4462
4463 uint64_t
4464 Output_segment::set_section_list_addresses(Layout* layout, bool reset,
4465                                            Output_data_list* pdl,
4466                                            uint64_t addr, off_t* poff,
4467                                            unsigned int* pshndx,
4468                                            bool* in_tls)
4469 {
4470   off_t startoff = *poff;
4471   // For incremental updates, we may allocate non-fixed sections from
4472   // free space in the file.  This keeps track of the high-water mark.
4473   off_t maxoff = startoff;
4474
4475   off_t off = startoff;
4476   for (Output_data_list::iterator p = pdl->begin();
4477        p != pdl->end();
4478        ++p)
4479     {
4480       if (reset)
4481         (*p)->reset_address_and_file_offset();
4482
4483       // When doing an incremental update or when using a linker script,
4484       // the section will most likely already have an address.
4485       if (!(*p)->is_address_valid())
4486         {
4487           uint64_t align = (*p)->addralign();
4488
4489           if ((*p)->is_section_flag_set(elfcpp::SHF_TLS))
4490             {
4491               // Give the first TLS section the alignment of the
4492               // entire TLS segment.  Otherwise the TLS segment as a
4493               // whole may be misaligned.
4494               if (!*in_tls)
4495                 {
4496                   Output_segment* tls_segment = layout->tls_segment();
4497                   gold_assert(tls_segment != NULL);
4498                   uint64_t segment_align = tls_segment->maximum_alignment();
4499                   gold_assert(segment_align >= align);
4500                   align = segment_align;
4501
4502                   *in_tls = true;
4503                 }
4504             }
4505           else
4506             {
4507               // If this is the first section after the TLS segment,
4508               // align it to at least the alignment of the TLS
4509               // segment, so that the size of the overall TLS segment
4510               // is aligned.
4511               if (*in_tls)
4512                 {
4513                   uint64_t segment_align =
4514                       layout->tls_segment()->maximum_alignment();
4515                   if (segment_align > align)
4516                     align = segment_align;
4517
4518                   *in_tls = false;
4519                 }
4520             }
4521
4522           if (!parameters->incremental_update())
4523             {
4524               off = align_address(off, align);
4525               (*p)->set_address_and_file_offset(addr + (off - startoff), off);
4526             }
4527           else
4528             {
4529               // Incremental update: allocate file space from free list.
4530               (*p)->pre_finalize_data_size();
4531               off_t current_size = (*p)->current_data_size();
4532               off = layout->allocate(current_size, align, startoff);
4533               if (off == -1)
4534                 {
4535                   gold_assert((*p)->output_section() != NULL);
4536                   gold_fallback(_("out of patch space for section %s; "
4537                                   "relink with --incremental-full"),
4538                                 (*p)->output_section()->name());
4539                 }
4540               (*p)->set_address_and_file_offset(addr + (off - startoff), off);
4541               if ((*p)->data_size() > current_size)
4542                 {
4543                   gold_assert((*p)->output_section() != NULL);
4544                   gold_fallback(_("%s: section changed size; "
4545                                   "relink with --incremental-full"),
4546                                 (*p)->output_section()->name());
4547                 }
4548             }
4549         }
4550       else if (parameters->incremental_update())
4551         {
4552           // For incremental updates, use the fixed offset for the
4553           // high-water mark computation.
4554           off = (*p)->offset();
4555         }
4556       else
4557         {
4558           // The script may have inserted a skip forward, but it
4559           // better not have moved backward.
4560           if ((*p)->address() >= addr + (off - startoff))
4561             off += (*p)->address() - (addr + (off - startoff));
4562           else
4563             {
4564               if (!layout->script_options()->saw_sections_clause())
4565                 gold_unreachable();
4566               else
4567                 {
4568                   Output_section* os = (*p)->output_section();
4569
4570                   // Cast to unsigned long long to avoid format warnings.
4571                   unsigned long long previous_dot =
4572                     static_cast<unsigned long long>(addr + (off - startoff));
4573                   unsigned long long dot =
4574                     static_cast<unsigned long long>((*p)->address());
4575
4576                   if (os == NULL)
4577                     gold_error(_("dot moves backward in linker script "
4578                                  "from 0x%llx to 0x%llx"), previous_dot, dot);
4579                   else
4580                     gold_error(_("address of section '%s' moves backward "
4581                                  "from 0x%llx to 0x%llx"),
4582                                os->name(), previous_dot, dot);
4583                 }
4584             }
4585           (*p)->set_file_offset(off);
4586           (*p)->finalize_data_size();
4587         }
4588
4589       if (parameters->incremental_update())
4590         gold_debug(DEBUG_INCREMENTAL,
4591                    "set_section_list_addresses: %08lx %08lx %s",
4592                    static_cast<long>(off),
4593                    static_cast<long>((*p)->data_size()),
4594                    ((*p)->output_section() != NULL
4595                     ? (*p)->output_section()->name() : "(special)"));
4596
4597       // We want to ignore the size of a SHF_TLS SHT_NOBITS
4598       // section.  Such a section does not affect the size of a
4599       // PT_LOAD segment.
4600       if (!(*p)->is_section_flag_set(elfcpp::SHF_TLS)
4601           || !(*p)->is_section_type(elfcpp::SHT_NOBITS))
4602         off += (*p)->data_size();
4603
4604       if (off > maxoff)
4605         maxoff = off;
4606
4607       if ((*p)->is_section())
4608         {
4609           (*p)->set_out_shndx(*pshndx);
4610           ++*pshndx;
4611         }
4612     }
4613
4614   *poff = maxoff;
4615   return addr + (maxoff - startoff);
4616 }
4617
4618 // For a non-PT_LOAD segment, set the offset from the sections, if
4619 // any.  Add INCREASE to the file size and the memory size.
4620
4621 void
4622 Output_segment::set_offset(unsigned int increase)
4623 {
4624   gold_assert(this->type_ != elfcpp::PT_LOAD);
4625
4626   gold_assert(!this->are_addresses_set_);
4627
4628   // A non-load section only uses output_lists_[0].
4629
4630   Output_data_list* pdl = &this->output_lists_[0];
4631
4632   if (pdl->empty())
4633     {
4634       gold_assert(increase == 0);
4635       this->vaddr_ = 0;
4636       this->paddr_ = 0;
4637       this->are_addresses_set_ = true;
4638       this->memsz_ = 0;
4639       this->min_p_align_ = 0;
4640       this->offset_ = 0;
4641       this->filesz_ = 0;
4642       return;
4643     }
4644
4645   // Find the first and last section by address.
4646   const Output_data* first = NULL;
4647   const Output_data* last_data = NULL;
4648   const Output_data* last_bss = NULL;
4649   for (Output_data_list::const_iterator p = pdl->begin();
4650        p != pdl->end();
4651        ++p)
4652     {
4653       if (first == NULL
4654           || (*p)->address() < first->address()
4655           || ((*p)->address() == first->address()
4656               && (*p)->data_size() < first->data_size()))
4657         first = *p;
4658       const Output_data** plast;
4659       if ((*p)->is_section()
4660           && (*p)->output_section()->type() == elfcpp::SHT_NOBITS)
4661         plast = &last_bss;
4662       else
4663         plast = &last_data;
4664       if (*plast == NULL
4665           || (*p)->address() > (*plast)->address()
4666           || ((*p)->address() == (*plast)->address()
4667               && (*p)->data_size() > (*plast)->data_size()))
4668         *plast = *p;
4669     }
4670
4671   this->vaddr_ = first->address();
4672   this->paddr_ = (first->has_load_address()
4673                   ? first->load_address()
4674                   : this->vaddr_);
4675   this->are_addresses_set_ = true;
4676   this->offset_ = first->offset();
4677
4678   if (last_data == NULL)
4679     this->filesz_ = 0;
4680   else
4681     this->filesz_ = (last_data->address()
4682                      + last_data->data_size()
4683                      - this->vaddr_);
4684
4685   const Output_data* last = last_bss != NULL ? last_bss : last_data;
4686   this->memsz_ = (last->address()
4687                   + last->data_size()
4688                   - this->vaddr_);
4689
4690   this->filesz_ += increase;
4691   this->memsz_ += increase;
4692
4693   // If this is a RELRO segment, verify that the segment ends at a
4694   // page boundary.
4695   if (this->type_ == elfcpp::PT_GNU_RELRO)
4696     {
4697       uint64_t page_align = parameters->target().abi_pagesize();
4698       uint64_t segment_end = this->vaddr_ + this->memsz_;
4699       if (parameters->incremental_update())
4700         {
4701           // The INCREASE_RELRO calculation is bypassed for an incremental
4702           // update, so we need to adjust the segment size manually here.
4703           segment_end = align_address(segment_end, page_align);
4704           this->memsz_ = segment_end - this->vaddr_;
4705         }
4706       else
4707         gold_assert(segment_end == align_address(segment_end, page_align));
4708     }
4709
4710   // If this is a TLS segment, align the memory size.  The code in
4711   // set_section_list ensures that the section after the TLS segment
4712   // is aligned to give us room.
4713   if (this->type_ == elfcpp::PT_TLS)
4714     {
4715       uint64_t segment_align = this->maximum_alignment();
4716       gold_assert(this->vaddr_ == align_address(this->vaddr_, segment_align));
4717       this->memsz_ = align_address(this->memsz_, segment_align);
4718     }
4719 }
4720
4721 // Set the TLS offsets of the sections in the PT_TLS segment.
4722
4723 void
4724 Output_segment::set_tls_offsets()
4725 {
4726   gold_assert(this->type_ == elfcpp::PT_TLS);
4727
4728   for (Output_data_list::iterator p = this->output_lists_[0].begin();
4729        p != this->output_lists_[0].end();
4730        ++p)
4731     (*p)->set_tls_offset(this->vaddr_);
4732 }
4733
4734 // Return the first section.
4735
4736 Output_section*
4737 Output_segment::first_section() const
4738 {
4739   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4740     {
4741       const Output_data_list* pdl = &this->output_lists_[i];
4742       for (Output_data_list::const_iterator p = pdl->begin();
4743            p != pdl->end();
4744            ++p)
4745         {
4746           if ((*p)->is_section())
4747             return (*p)->output_section();
4748         }
4749     }
4750   gold_unreachable();
4751 }
4752
4753 // Return the number of Output_sections in an Output_segment.
4754
4755 unsigned int
4756 Output_segment::output_section_count() const
4757 {
4758   unsigned int ret = 0;
4759   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4760     ret += this->output_section_count_list(&this->output_lists_[i]);
4761   return ret;
4762 }
4763
4764 // Return the number of Output_sections in an Output_data_list.
4765
4766 unsigned int
4767 Output_segment::output_section_count_list(const Output_data_list* pdl) const
4768 {
4769   unsigned int count = 0;
4770   for (Output_data_list::const_iterator p = pdl->begin();
4771        p != pdl->end();
4772        ++p)
4773     {
4774       if ((*p)->is_section())
4775         ++count;
4776     }
4777   return count;
4778 }
4779
4780 // Return the section attached to the list segment with the lowest
4781 // load address.  This is used when handling a PHDRS clause in a
4782 // linker script.
4783
4784 Output_section*
4785 Output_segment::section_with_lowest_load_address() const
4786 {
4787   Output_section* found = NULL;
4788   uint64_t found_lma = 0;
4789   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4790     this->lowest_load_address_in_list(&this->output_lists_[i], &found,
4791                                       &found_lma);
4792   return found;
4793 }
4794
4795 // Look through a list for a section with a lower load address.
4796
4797 void
4798 Output_segment::lowest_load_address_in_list(const Output_data_list* pdl,
4799                                             Output_section** found,
4800                                             uint64_t* found_lma) const
4801 {
4802   for (Output_data_list::const_iterator p = pdl->begin();
4803        p != pdl->end();
4804        ++p)
4805     {
4806       if (!(*p)->is_section())
4807         continue;
4808       Output_section* os = static_cast<Output_section*>(*p);
4809       uint64_t lma = (os->has_load_address()
4810                       ? os->load_address()
4811                       : os->address());
4812       if (*found == NULL || lma < *found_lma)
4813         {
4814           *found = os;
4815           *found_lma = lma;
4816         }
4817     }
4818 }
4819
4820 // Write the segment data into *OPHDR.
4821
4822 template<int size, bool big_endian>
4823 void
4824 Output_segment::write_header(elfcpp::Phdr_write<size, big_endian>* ophdr)
4825 {
4826   ophdr->put_p_type(this->type_);
4827   ophdr->put_p_offset(this->offset_);
4828   ophdr->put_p_vaddr(this->vaddr_);
4829   ophdr->put_p_paddr(this->paddr_);
4830   ophdr->put_p_filesz(this->filesz_);
4831   ophdr->put_p_memsz(this->memsz_);
4832   ophdr->put_p_flags(this->flags_);
4833   ophdr->put_p_align(std::max(this->min_p_align_, this->maximum_alignment()));
4834 }
4835
4836 // Write the section headers into V.
4837
4838 template<int size, bool big_endian>
4839 unsigned char*
4840 Output_segment::write_section_headers(const Layout* layout,
4841                                       const Stringpool* secnamepool,
4842                                       unsigned char* v,
4843                                       unsigned int* pshndx) const
4844 {
4845   // Every section that is attached to a segment must be attached to a
4846   // PT_LOAD segment, so we only write out section headers for PT_LOAD
4847   // segments.
4848   if (this->type_ != elfcpp::PT_LOAD)
4849     return v;
4850
4851   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4852     {
4853       const Output_data_list* pdl = &this->output_lists_[i];
4854       v = this->write_section_headers_list<size, big_endian>(layout,
4855                                                              secnamepool,
4856                                                              pdl,
4857                                                              v, pshndx);
4858     }
4859
4860   return v;
4861 }
4862
4863 template<int size, bool big_endian>
4864 unsigned char*
4865 Output_segment::write_section_headers_list(const Layout* layout,
4866                                            const Stringpool* secnamepool,
4867                                            const Output_data_list* pdl,
4868                                            unsigned char* v,
4869                                            unsigned int* pshndx) const
4870 {
4871   const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
4872   for (Output_data_list::const_iterator p = pdl->begin();
4873        p != pdl->end();
4874        ++p)
4875     {
4876       if ((*p)->is_section())
4877         {
4878           const Output_section* ps = static_cast<const Output_section*>(*p);
4879           gold_assert(*pshndx == ps->out_shndx());
4880           elfcpp::Shdr_write<size, big_endian> oshdr(v);
4881           ps->write_header(layout, secnamepool, &oshdr);
4882           v += shdr_size;
4883           ++*pshndx;
4884         }
4885     }
4886   return v;
4887 }
4888
4889 // Print the output sections to the map file.
4890
4891 void
4892 Output_segment::print_sections_to_mapfile(Mapfile* mapfile) const
4893 {
4894   if (this->type() != elfcpp::PT_LOAD)
4895     return;
4896   for (int i = 0; i < static_cast<int>(ORDER_MAX); ++i)
4897     this->print_section_list_to_mapfile(mapfile, &this->output_lists_[i]);
4898 }
4899
4900 // Print an output section list to the map file.
4901
4902 void
4903 Output_segment::print_section_list_to_mapfile(Mapfile* mapfile,
4904                                               const Output_data_list* pdl) const
4905 {
4906   for (Output_data_list::const_iterator p = pdl->begin();
4907        p != pdl->end();
4908        ++p)
4909     (*p)->print_to_mapfile(mapfile);
4910 }
4911
4912 // Output_file methods.
4913
4914 Output_file::Output_file(const char* name)
4915   : name_(name),
4916     o_(-1),
4917     file_size_(0),
4918     base_(NULL),
4919     map_is_anonymous_(false),
4920     map_is_allocated_(false),
4921     is_temporary_(false)
4922 {
4923 }
4924
4925 // Try to open an existing file.  Returns false if the file doesn't
4926 // exist, has a size of 0 or can't be mmapped.  If BASE_NAME is not
4927 // NULL, open that file as the base for incremental linking, and
4928 // copy its contents to the new output file.  This routine can
4929 // be called for incremental updates, in which case WRITABLE should
4930 // be true, or by the incremental-dump utility, in which case
4931 // WRITABLE should be false.
4932
4933 bool
4934 Output_file::open_base_file(const char* base_name, bool writable)
4935 {
4936   // The name "-" means "stdout".
4937   if (strcmp(this->name_, "-") == 0)
4938     return false;
4939
4940   bool use_base_file = base_name != NULL;
4941   if (!use_base_file)
4942     base_name = this->name_;
4943   else if (strcmp(base_name, this->name_) == 0)
4944     gold_fatal(_("%s: incremental base and output file name are the same"),
4945                base_name);
4946
4947   // Don't bother opening files with a size of zero.
4948   struct stat s;
4949   if (::stat(base_name, &s) != 0)
4950     {
4951       gold_info(_("%s: stat: %s"), base_name, strerror(errno));
4952       return false;
4953     }
4954   if (s.st_size == 0)
4955     {
4956       gold_info(_("%s: incremental base file is empty"), base_name);
4957       return false;
4958     }
4959
4960   // If we're using a base file, we want to open it read-only.
4961   if (use_base_file)
4962     writable = false;
4963
4964   int oflags = writable ? O_RDWR : O_RDONLY;
4965   int o = open_descriptor(-1, base_name, oflags, 0);
4966   if (o < 0)
4967     {
4968       gold_info(_("%s: open: %s"), base_name, strerror(errno));
4969       return false;
4970     }
4971
4972   // If the base file and the output file are different, open a
4973   // new output file and read the contents from the base file into
4974   // the newly-mapped region.
4975   if (use_base_file)
4976     {
4977       this->open(s.st_size);
4978       ssize_t bytes_to_read = s.st_size;
4979       unsigned char* p = this->base_;
4980       while (bytes_to_read > 0)
4981         {
4982           ssize_t len = ::read(o, p, bytes_to_read);
4983           if (len < 0)
4984             {
4985               gold_info(_("%s: read failed: %s"), base_name, strerror(errno));
4986               return false;
4987             }
4988           if (len == 0)
4989             {
4990               gold_info(_("%s: file too short: read only %lld of %lld bytes"),
4991                         base_name,
4992                         static_cast<long long>(s.st_size - bytes_to_read),
4993                         static_cast<long long>(s.st_size));
4994               return false;
4995             }
4996           p += len;
4997           bytes_to_read -= len;
4998         }
4999       ::close(o);
5000       return true;
5001     }
5002
5003   this->o_ = o;
5004   this->file_size_ = s.st_size;
5005
5006   if (!this->map_no_anonymous(writable))
5007     {
5008       release_descriptor(o, true);
5009       this->o_ = -1;
5010       this->file_size_ = 0;
5011       return false;
5012     }
5013
5014   return true;
5015 }
5016
5017 // Open the output file.
5018
5019 void
5020 Output_file::open(off_t file_size)
5021 {
5022   this->file_size_ = file_size;
5023
5024   // Unlink the file first; otherwise the open() may fail if the file
5025   // is busy (e.g. it's an executable that's currently being executed).
5026   //
5027   // However, the linker may be part of a system where a zero-length
5028   // file is created for it to write to, with tight permissions (gcc
5029   // 2.95 did something like this).  Unlinking the file would work
5030   // around those permission controls, so we only unlink if the file
5031   // has a non-zero size.  We also unlink only regular files to avoid
5032   // trouble with directories/etc.
5033   //
5034   // If we fail, continue; this command is merely a best-effort attempt
5035   // to improve the odds for open().
5036
5037   // We let the name "-" mean "stdout"
5038   if (!this->is_temporary_)
5039     {
5040       if (strcmp(this->name_, "-") == 0)
5041         this->o_ = STDOUT_FILENO;
5042       else
5043         {
5044           struct stat s;
5045           if (::stat(this->name_, &s) == 0
5046               && (S_ISREG (s.st_mode) || S_ISLNK (s.st_mode)))
5047             {
5048               if (s.st_size != 0)
5049                 ::unlink(this->name_);
5050               else if (!parameters->options().relocatable())
5051                 {
5052                   // If we don't unlink the existing file, add execute
5053                   // permission where read permissions already exist
5054                   // and where the umask permits.
5055                   int mask = ::umask(0);
5056                   ::umask(mask);
5057                   s.st_mode |= (s.st_mode & 0444) >> 2;
5058                   ::chmod(this->name_, s.st_mode & ~mask);
5059                 }
5060             }
5061
5062           int mode = parameters->options().relocatable() ? 0666 : 0777;
5063           int o = open_descriptor(-1, this->name_, O_RDWR | O_CREAT | O_TRUNC,
5064                                   mode);
5065           if (o < 0)
5066             gold_fatal(_("%s: open: %s"), this->name_, strerror(errno));
5067           this->o_ = o;
5068         }
5069     }
5070
5071   this->map();
5072 }
5073
5074 // Resize the output file.
5075
5076 void
5077 Output_file::resize(off_t file_size)
5078 {
5079   // If the mmap is mapping an anonymous memory buffer, this is easy:
5080   // just mremap to the new size.  If it's mapping to a file, we want
5081   // to unmap to flush to the file, then remap after growing the file.
5082   if (this->map_is_anonymous_)
5083     {
5084       void* base;
5085       if (!this->map_is_allocated_)
5086         {
5087           base = ::mremap(this->base_, this->file_size_, file_size,
5088                           MREMAP_MAYMOVE);
5089           if (base == MAP_FAILED)
5090             gold_fatal(_("%s: mremap: %s"), this->name_, strerror(errno));
5091         }
5092       else
5093         {
5094           base = realloc(this->base_, file_size);
5095           if (base == NULL)
5096             gold_nomem();
5097           if (file_size > this->file_size_)
5098             memset(static_cast<char*>(base) + this->file_size_, 0,
5099                    file_size - this->file_size_);
5100         }
5101       this->base_ = static_cast<unsigned char*>(base);
5102       this->file_size_ = file_size;
5103     }
5104   else
5105     {
5106       this->unmap();
5107       this->file_size_ = file_size;
5108       if (!this->map_no_anonymous(true))
5109         gold_fatal(_("%s: mmap: %s"), this->name_, strerror(errno));
5110     }
5111 }
5112
5113 // Map an anonymous block of memory which will later be written to the
5114 // file.  Return whether the map succeeded.
5115
5116 bool
5117 Output_file::map_anonymous()
5118 {
5119   void* base = ::mmap(NULL, this->file_size_, PROT_READ | PROT_WRITE,
5120                       MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
5121   if (base == MAP_FAILED)
5122     {
5123       base = malloc(this->file_size_);
5124       if (base == NULL)
5125         return false;
5126       memset(base, 0, this->file_size_);
5127       this->map_is_allocated_ = true;
5128     }
5129   this->base_ = static_cast<unsigned char*>(base);
5130   this->map_is_anonymous_ = true;
5131   return true;
5132 }
5133
5134 // Map the file into memory.  Return whether the mapping succeeded.
5135 // If WRITABLE is true, map with write access.
5136
5137 bool
5138 Output_file::map_no_anonymous(bool writable)
5139 {
5140   const int o = this->o_;
5141
5142   // If the output file is not a regular file, don't try to mmap it;
5143   // instead, we'll mmap a block of memory (an anonymous buffer), and
5144   // then later write the buffer to the file.
5145   void* base;
5146   struct stat statbuf;
5147   if (o == STDOUT_FILENO || o == STDERR_FILENO
5148       || ::fstat(o, &statbuf) != 0
5149       || !S_ISREG(statbuf.st_mode)
5150       || this->is_temporary_)
5151     return false;
5152
5153   // Ensure that we have disk space available for the file.  If we
5154   // don't do this, it is possible that we will call munmap, close,
5155   // and exit with dirty buffers still in the cache with no assigned
5156   // disk blocks.  If the disk is out of space at that point, the
5157   // output file will wind up incomplete, but we will have already
5158   // exited.  The alternative to fallocate would be to use fdatasync,
5159   // but that would be a more significant performance hit.
5160   if (writable)
5161     {
5162       int err = gold_fallocate(o, 0, this->file_size_);
5163       if (err != 0)
5164        gold_fatal(_("%s: %s"), this->name_, strerror(err));
5165     }
5166
5167   // Map the file into memory.
5168   int prot = PROT_READ;
5169   if (writable)
5170     prot |= PROT_WRITE;
5171   base = ::mmap(NULL, this->file_size_, prot, MAP_SHARED, o, 0);
5172
5173   // The mmap call might fail because of file system issues: the file
5174   // system might not support mmap at all, or it might not support
5175   // mmap with PROT_WRITE.
5176   if (base == MAP_FAILED)
5177     return false;
5178
5179   this->map_is_anonymous_ = false;
5180   this->base_ = static_cast<unsigned char*>(base);
5181   return true;
5182 }
5183
5184 // Map the file into memory.
5185
5186 void
5187 Output_file::map()
5188 {
5189   if (parameters->options().mmap_output_file()
5190       && this->map_no_anonymous(true))
5191     return;
5192
5193   // The mmap call might fail because of file system issues: the file
5194   // system might not support mmap at all, or it might not support
5195   // mmap with PROT_WRITE.  I'm not sure which errno values we will
5196   // see in all cases, so if the mmap fails for any reason and we
5197   // don't care about file contents, try for an anonymous map.
5198   if (this->map_anonymous())
5199     return;
5200
5201   gold_fatal(_("%s: mmap: failed to allocate %lu bytes for output file: %s"),
5202              this->name_, static_cast<unsigned long>(this->file_size_),
5203              strerror(errno));
5204 }
5205
5206 // Unmap the file from memory.
5207
5208 void
5209 Output_file::unmap()
5210 {
5211   if (this->map_is_anonymous_)
5212     {
5213       // We've already written out the data, so there is no reason to
5214       // waste time unmapping or freeing the memory.
5215     }
5216   else
5217     {
5218       if (::munmap(this->base_, this->file_size_) < 0)
5219         gold_error(_("%s: munmap: %s"), this->name_, strerror(errno));
5220     }
5221   this->base_ = NULL;
5222 }
5223
5224 // Close the output file.
5225
5226 void
5227 Output_file::close()
5228 {
5229   // If the map isn't file-backed, we need to write it now.
5230   if (this->map_is_anonymous_ && !this->is_temporary_)
5231     {
5232       size_t bytes_to_write = this->file_size_;
5233       size_t offset = 0;
5234       while (bytes_to_write > 0)
5235         {
5236           ssize_t bytes_written = ::write(this->o_, this->base_ + offset,
5237                                           bytes_to_write);
5238           if (bytes_written == 0)
5239             gold_error(_("%s: write: unexpected 0 return-value"), this->name_);
5240           else if (bytes_written < 0)
5241             gold_error(_("%s: write: %s"), this->name_, strerror(errno));
5242           else
5243             {
5244               bytes_to_write -= bytes_written;
5245               offset += bytes_written;
5246             }
5247         }
5248     }
5249   this->unmap();
5250
5251   // We don't close stdout or stderr
5252   if (this->o_ != STDOUT_FILENO
5253       && this->o_ != STDERR_FILENO
5254       && !this->is_temporary_)
5255     if (::close(this->o_) < 0)
5256       gold_error(_("%s: close: %s"), this->name_, strerror(errno));
5257   this->o_ = -1;
5258 }
5259
5260 // Instantiate the templates we need.  We could use the configure
5261 // script to restrict this to only the ones for implemented targets.
5262
5263 #ifdef HAVE_TARGET_32_LITTLE
5264 template
5265 off_t
5266 Output_section::add_input_section<32, false>(
5267     Layout* layout,
5268     Sized_relobj_file<32, false>* object,
5269     unsigned int shndx,
5270     const char* secname,
5271     const elfcpp::Shdr<32, false>& shdr,
5272     unsigned int reloc_shndx,
5273     bool have_sections_script);
5274 #endif
5275
5276 #ifdef HAVE_TARGET_32_BIG
5277 template
5278 off_t
5279 Output_section::add_input_section<32, true>(
5280     Layout* layout,
5281     Sized_relobj_file<32, true>* object,
5282     unsigned int shndx,
5283     const char* secname,
5284     const elfcpp::Shdr<32, true>& shdr,
5285     unsigned int reloc_shndx,
5286     bool have_sections_script);
5287 #endif
5288
5289 #ifdef HAVE_TARGET_64_LITTLE
5290 template
5291 off_t
5292 Output_section::add_input_section<64, false>(
5293     Layout* layout,
5294     Sized_relobj_file<64, false>* object,
5295     unsigned int shndx,
5296     const char* secname,
5297     const elfcpp::Shdr<64, false>& shdr,
5298     unsigned int reloc_shndx,
5299     bool have_sections_script);
5300 #endif
5301
5302 #ifdef HAVE_TARGET_64_BIG
5303 template
5304 off_t
5305 Output_section::add_input_section<64, true>(
5306     Layout* layout,
5307     Sized_relobj_file<64, true>* object,
5308     unsigned int shndx,
5309     const char* secname,
5310     const elfcpp::Shdr<64, true>& shdr,
5311     unsigned int reloc_shndx,
5312     bool have_sections_script);
5313 #endif
5314
5315 #ifdef HAVE_TARGET_32_LITTLE
5316 template
5317 class Output_reloc<elfcpp::SHT_REL, false, 32, false>;
5318 #endif
5319
5320 #ifdef HAVE_TARGET_32_BIG
5321 template
5322 class Output_reloc<elfcpp::SHT_REL, false, 32, true>;
5323 #endif
5324
5325 #ifdef HAVE_TARGET_64_LITTLE
5326 template
5327 class Output_reloc<elfcpp::SHT_REL, false, 64, false>;
5328 #endif
5329
5330 #ifdef HAVE_TARGET_64_BIG
5331 template
5332 class Output_reloc<elfcpp::SHT_REL, false, 64, true>;
5333 #endif
5334
5335 #ifdef HAVE_TARGET_32_LITTLE
5336 template
5337 class Output_reloc<elfcpp::SHT_REL, true, 32, false>;
5338 #endif
5339
5340 #ifdef HAVE_TARGET_32_BIG
5341 template
5342 class Output_reloc<elfcpp::SHT_REL, true, 32, true>;
5343 #endif
5344
5345 #ifdef HAVE_TARGET_64_LITTLE
5346 template
5347 class Output_reloc<elfcpp::SHT_REL, true, 64, false>;
5348 #endif
5349
5350 #ifdef HAVE_TARGET_64_BIG
5351 template
5352 class Output_reloc<elfcpp::SHT_REL, true, 64, true>;
5353 #endif
5354
5355 #ifdef HAVE_TARGET_32_LITTLE
5356 template
5357 class Output_reloc<elfcpp::SHT_RELA, false, 32, false>;
5358 #endif
5359
5360 #ifdef HAVE_TARGET_32_BIG
5361 template
5362 class Output_reloc<elfcpp::SHT_RELA, false, 32, true>;
5363 #endif
5364
5365 #ifdef HAVE_TARGET_64_LITTLE
5366 template
5367 class Output_reloc<elfcpp::SHT_RELA, false, 64, false>;
5368 #endif
5369
5370 #ifdef HAVE_TARGET_64_BIG
5371 template
5372 class Output_reloc<elfcpp::SHT_RELA, false, 64, true>;
5373 #endif
5374
5375 #ifdef HAVE_TARGET_32_LITTLE
5376 template
5377 class Output_reloc<elfcpp::SHT_RELA, true, 32, false>;
5378 #endif
5379
5380 #ifdef HAVE_TARGET_32_BIG
5381 template
5382 class Output_reloc<elfcpp::SHT_RELA, true, 32, true>;
5383 #endif
5384
5385 #ifdef HAVE_TARGET_64_LITTLE
5386 template
5387 class Output_reloc<elfcpp::SHT_RELA, true, 64, false>;
5388 #endif
5389
5390 #ifdef HAVE_TARGET_64_BIG
5391 template
5392 class Output_reloc<elfcpp::SHT_RELA, true, 64, true>;
5393 #endif
5394
5395 #ifdef HAVE_TARGET_32_LITTLE
5396 template
5397 class Output_data_reloc<elfcpp::SHT_REL, false, 32, false>;
5398 #endif
5399
5400 #ifdef HAVE_TARGET_32_BIG
5401 template
5402 class Output_data_reloc<elfcpp::SHT_REL, false, 32, true>;
5403 #endif
5404
5405 #ifdef HAVE_TARGET_64_LITTLE
5406 template
5407 class Output_data_reloc<elfcpp::SHT_REL, false, 64, false>;
5408 #endif
5409
5410 #ifdef HAVE_TARGET_64_BIG
5411 template
5412 class Output_data_reloc<elfcpp::SHT_REL, false, 64, true>;
5413 #endif
5414
5415 #ifdef HAVE_TARGET_32_LITTLE
5416 template
5417 class Output_data_reloc<elfcpp::SHT_REL, true, 32, false>;
5418 #endif
5419
5420 #ifdef HAVE_TARGET_32_BIG
5421 template
5422 class Output_data_reloc<elfcpp::SHT_REL, true, 32, true>;
5423 #endif
5424
5425 #ifdef HAVE_TARGET_64_LITTLE
5426 template
5427 class Output_data_reloc<elfcpp::SHT_REL, true, 64, false>;
5428 #endif
5429
5430 #ifdef HAVE_TARGET_64_BIG
5431 template
5432 class Output_data_reloc<elfcpp::SHT_REL, true, 64, true>;
5433 #endif
5434
5435 #ifdef HAVE_TARGET_32_LITTLE
5436 template
5437 class Output_data_reloc<elfcpp::SHT_RELA, false, 32, false>;
5438 #endif
5439
5440 #ifdef HAVE_TARGET_32_BIG
5441 template
5442 class Output_data_reloc<elfcpp::SHT_RELA, false, 32, true>;
5443 #endif
5444
5445 #ifdef HAVE_TARGET_64_LITTLE
5446 template
5447 class Output_data_reloc<elfcpp::SHT_RELA, false, 64, false>;
5448 #endif
5449
5450 #ifdef HAVE_TARGET_64_BIG
5451 template
5452 class Output_data_reloc<elfcpp::SHT_RELA, false, 64, true>;
5453 #endif
5454
5455 #ifdef HAVE_TARGET_32_LITTLE
5456 template
5457 class Output_data_reloc<elfcpp::SHT_RELA, true, 32, false>;
5458 #endif
5459
5460 #ifdef HAVE_TARGET_32_BIG
5461 template
5462 class Output_data_reloc<elfcpp::SHT_RELA, true, 32, true>;
5463 #endif
5464
5465 #ifdef HAVE_TARGET_64_LITTLE
5466 template
5467 class Output_data_reloc<elfcpp::SHT_RELA, true, 64, false>;
5468 #endif
5469
5470 #ifdef HAVE_TARGET_64_BIG
5471 template
5472 class Output_data_reloc<elfcpp::SHT_RELA, true, 64, true>;
5473 #endif
5474
5475 #ifdef HAVE_TARGET_32_LITTLE
5476 template
5477 class Output_relocatable_relocs<elfcpp::SHT_REL, 32, false>;
5478 #endif
5479
5480 #ifdef HAVE_TARGET_32_BIG
5481 template
5482 class Output_relocatable_relocs<elfcpp::SHT_REL, 32, true>;
5483 #endif
5484
5485 #ifdef HAVE_TARGET_64_LITTLE
5486 template
5487 class Output_relocatable_relocs<elfcpp::SHT_REL, 64, false>;
5488 #endif
5489
5490 #ifdef HAVE_TARGET_64_BIG
5491 template
5492 class Output_relocatable_relocs<elfcpp::SHT_REL, 64, true>;
5493 #endif
5494
5495 #ifdef HAVE_TARGET_32_LITTLE
5496 template
5497 class Output_relocatable_relocs<elfcpp::SHT_RELA, 32, false>;
5498 #endif
5499
5500 #ifdef HAVE_TARGET_32_BIG
5501 template
5502 class Output_relocatable_relocs<elfcpp::SHT_RELA, 32, true>;
5503 #endif
5504
5505 #ifdef HAVE_TARGET_64_LITTLE
5506 template
5507 class Output_relocatable_relocs<elfcpp::SHT_RELA, 64, false>;
5508 #endif
5509
5510 #ifdef HAVE_TARGET_64_BIG
5511 template
5512 class Output_relocatable_relocs<elfcpp::SHT_RELA, 64, true>;
5513 #endif
5514
5515 #ifdef HAVE_TARGET_32_LITTLE
5516 template
5517 class Output_data_group<32, false>;
5518 #endif
5519
5520 #ifdef HAVE_TARGET_32_BIG
5521 template
5522 class Output_data_group<32, true>;
5523 #endif
5524
5525 #ifdef HAVE_TARGET_64_LITTLE
5526 template
5527 class Output_data_group<64, false>;
5528 #endif
5529
5530 #ifdef HAVE_TARGET_64_BIG
5531 template
5532 class Output_data_group<64, true>;
5533 #endif
5534
5535 template
5536 class Output_data_got<32, false>;
5537
5538 template
5539 class Output_data_got<32, true>;
5540
5541 template
5542 class Output_data_got<64, false>;
5543
5544 template
5545 class Output_data_got<64, true>;
5546
5547 } // End namespace gold.