2010-04-09 Doug Kwan <dougkwan@google.com>
[external/binutils.git] / gold / output.h
1 // output.h -- manage the output file for gold   -*- C++ -*-
2
3 // Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>.
5
6 // This file is part of gold.
7
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 3 of the License, or
11 // (at your option) any later version.
12
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 // MA 02110-1301, USA.
22
23 #ifndef GOLD_OUTPUT_H
24 #define GOLD_OUTPUT_H
25
26 #include <list>
27 #include <vector>
28
29 #include "elfcpp.h"
30 #include "mapfile.h"
31 #include "layout.h"
32 #include "reloc-types.h"
33
34 namespace gold
35 {
36
37 class General_options;
38 class Object;
39 class Symbol;
40 class Output_file;
41 class Output_merge_base;
42 class Output_section;
43 class Relocatable_relocs;
44 class Target;
45 template<int size, bool big_endian>
46 class Sized_target;
47 template<int size, bool big_endian>
48 class Sized_relobj;
49
50 // An abtract class for data which has to go into the output file.
51
52 class Output_data
53 {
54  public:
55   explicit Output_data()
56     : address_(0), data_size_(0), offset_(-1),
57       is_address_valid_(false), is_data_size_valid_(false),
58       is_offset_valid_(false), is_data_size_fixed_(false),
59       dynamic_reloc_count_(0)
60   { }
61
62   virtual
63   ~Output_data();
64
65   // Return the address.  For allocated sections, this is only valid
66   // after Layout::finalize is finished.
67   uint64_t
68   address() const
69   {
70     gold_assert(this->is_address_valid_);
71     return this->address_;
72   }
73
74   // Return the size of the data.  For allocated sections, this must
75   // be valid after Layout::finalize calls set_address, but need not
76   // be valid before then.
77   off_t
78   data_size() const
79   {
80     gold_assert(this->is_data_size_valid_);
81     return this->data_size_;
82   }
83
84   // Return true if data size is fixed.
85   bool
86   is_data_size_fixed() const
87   { return this->is_data_size_fixed_; }
88   
89   // Return the file offset.  This is only valid after
90   // Layout::finalize is finished.  For some non-allocated sections,
91   // it may not be valid until near the end of the link.
92   off_t
93   offset() const
94   {
95     gold_assert(this->is_offset_valid_);
96     return this->offset_;
97   }
98
99   // Reset the address and file offset.  This essentially disables the
100   // sanity testing about duplicate and unknown settings.
101   void
102   reset_address_and_file_offset()
103   {
104     this->is_address_valid_ = false;
105     this->is_offset_valid_ = false;
106     if (!this->is_data_size_fixed_)
107       this->is_data_size_valid_ = false;
108     this->do_reset_address_and_file_offset();
109   }
110
111   // Return true if address and file offset already have reset values. In
112   // other words, calling reset_address_and_file_offset will not change them.
113   bool
114   address_and_file_offset_have_reset_values() const
115   { return this->do_address_and_file_offset_have_reset_values(); }
116
117   // Return the required alignment.
118   uint64_t
119   addralign() const
120   { return this->do_addralign(); }
121
122   // Return whether this has a load address.
123   bool
124   has_load_address() const
125   { return this->do_has_load_address(); }
126
127   // Return the load address.
128   uint64_t
129   load_address() const
130   { return this->do_load_address(); }
131
132   // Return whether this is an Output_section.
133   bool
134   is_section() const
135   { return this->do_is_section(); }
136
137   // Return whether this is an Output_section of the specified type.
138   bool
139   is_section_type(elfcpp::Elf_Word stt) const
140   { return this->do_is_section_type(stt); }
141
142   // Return whether this is an Output_section with the specified flag
143   // set.
144   bool
145   is_section_flag_set(elfcpp::Elf_Xword shf) const
146   { return this->do_is_section_flag_set(shf); }
147
148   // Return the output section that this goes in, if there is one.
149   Output_section*
150   output_section()
151   { return this->do_output_section(); }
152
153   const Output_section*
154   output_section() const
155   { return this->do_output_section(); }
156
157   // Return the output section index, if there is an output section.
158   unsigned int
159   out_shndx() const
160   { return this->do_out_shndx(); }
161
162   // Set the output section index, if this is an output section.
163   void
164   set_out_shndx(unsigned int shndx)
165   { this->do_set_out_shndx(shndx); }
166
167   // Set the address and file offset of this data, and finalize the
168   // size of the data.  This is called during Layout::finalize for
169   // allocated sections.
170   void
171   set_address_and_file_offset(uint64_t addr, off_t off)
172   {
173     this->set_address(addr);
174     this->set_file_offset(off);
175     this->finalize_data_size();
176   }
177
178   // Set the address.
179   void
180   set_address(uint64_t addr)
181   {
182     gold_assert(!this->is_address_valid_);
183     this->address_ = addr;
184     this->is_address_valid_ = true;
185   }
186
187   // Set the file offset.
188   void
189   set_file_offset(off_t off)
190   {
191     gold_assert(!this->is_offset_valid_);
192     this->offset_ = off;
193     this->is_offset_valid_ = true;
194   }
195
196   // Finalize the data size.
197   void
198   finalize_data_size()
199   {
200     if (!this->is_data_size_valid_)
201       {
202         // Tell the child class to set the data size.
203         this->set_final_data_size();
204         gold_assert(this->is_data_size_valid_);
205       }
206   }
207
208   // Set the TLS offset.  Called only for SHT_TLS sections.
209   void
210   set_tls_offset(uint64_t tls_base)
211   { this->do_set_tls_offset(tls_base); }
212
213   // Return the TLS offset, relative to the base of the TLS segment.
214   // Valid only for SHT_TLS sections.
215   uint64_t
216   tls_offset() const
217   { return this->do_tls_offset(); }
218
219   // Write the data to the output file.  This is called after
220   // Layout::finalize is complete.
221   void
222   write(Output_file* file)
223   { this->do_write(file); }
224
225   // This is called by Layout::finalize to note that the sizes of
226   // allocated sections must now be fixed.
227   static void
228   layout_complete()
229   { Output_data::allocated_sizes_are_fixed = true; }
230
231   // Used to check that layout has been done.
232   static bool
233   is_layout_complete()
234   { return Output_data::allocated_sizes_are_fixed; }
235
236   // Count the number of dynamic relocations applied to this section.
237   void
238   add_dynamic_reloc()
239   { ++this->dynamic_reloc_count_; }
240
241   // Return the number of dynamic relocations applied to this section.
242   unsigned int
243   dynamic_reloc_count() const
244   { return this->dynamic_reloc_count_; }
245
246   // Whether the address is valid.
247   bool
248   is_address_valid() const
249   { return this->is_address_valid_; }
250
251   // Whether the file offset is valid.
252   bool
253   is_offset_valid() const
254   { return this->is_offset_valid_; }
255
256   // Whether the data size is valid.
257   bool
258   is_data_size_valid() const
259   { return this->is_data_size_valid_; }
260
261   // Print information to the map file.
262   void
263   print_to_mapfile(Mapfile* mapfile) const
264   { return this->do_print_to_mapfile(mapfile); }
265
266  protected:
267   // Functions that child classes may or in some cases must implement.
268
269   // Write the data to the output file.
270   virtual void
271   do_write(Output_file*) = 0;
272
273   // Return the required alignment.
274   virtual uint64_t
275   do_addralign() const = 0;
276
277   // Return whether this has a load address.
278   virtual bool
279   do_has_load_address() const
280   { return false; }
281
282   // Return the load address.
283   virtual uint64_t
284   do_load_address() const
285   { gold_unreachable(); }
286
287   // Return whether this is an Output_section.
288   virtual bool
289   do_is_section() const
290   { return false; }
291
292   // Return whether this is an Output_section of the specified type.
293   // This only needs to be implement by Output_section.
294   virtual bool
295   do_is_section_type(elfcpp::Elf_Word) const
296   { return false; }
297
298   // Return whether this is an Output_section with the specific flag
299   // set.  This only needs to be implemented by Output_section.
300   virtual bool
301   do_is_section_flag_set(elfcpp::Elf_Xword) const
302   { return false; }
303
304   // Return the output section, if there is one.
305   virtual Output_section*
306   do_output_section()
307   { return NULL; }
308
309   virtual const Output_section*
310   do_output_section() const
311   { return NULL; }
312
313   // Return the output section index, if there is an output section.
314   virtual unsigned int
315   do_out_shndx() const
316   { gold_unreachable(); }
317
318   // Set the output section index, if this is an output section.
319   virtual void
320   do_set_out_shndx(unsigned int)
321   { gold_unreachable(); }
322
323   // This is a hook for derived classes to set the data size.  This is
324   // called by finalize_data_size, normally called during
325   // Layout::finalize, when the section address is set.
326   virtual void
327   set_final_data_size()
328   { gold_unreachable(); }
329
330   // A hook for resetting the address and file offset.
331   virtual void
332   do_reset_address_and_file_offset()
333   { }
334
335   // Return true if address and file offset already have reset values. In
336   // other words, calling reset_address_and_file_offset will not change them.
337   // A child class overriding do_reset_address_and_file_offset may need to
338   // also override this.
339   virtual bool
340   do_address_and_file_offset_have_reset_values() const
341   { return !this->is_address_valid_ && !this->is_offset_valid_; }
342
343   // Set the TLS offset.  Called only for SHT_TLS sections.
344   virtual void
345   do_set_tls_offset(uint64_t)
346   { gold_unreachable(); }
347
348   // Return the TLS offset, relative to the base of the TLS segment.
349   // Valid only for SHT_TLS sections.
350   virtual uint64_t
351   do_tls_offset() const
352   { gold_unreachable(); }
353
354   // Print to the map file.  This only needs to be implemented by
355   // classes which may appear in a PT_LOAD segment.
356   virtual void
357   do_print_to_mapfile(Mapfile*) const
358   { gold_unreachable(); }
359
360   // Functions that child classes may call.
361
362   // Reset the address.  The Output_section class needs this when an
363   // SHF_ALLOC input section is added to an output section which was
364   // formerly not SHF_ALLOC.
365   void
366   mark_address_invalid()
367   { this->is_address_valid_ = false; }
368
369   // Set the size of the data.
370   void
371   set_data_size(off_t data_size)
372   {
373     gold_assert(!this->is_data_size_valid_
374                 && !this->is_data_size_fixed_);
375     this->data_size_ = data_size;
376     this->is_data_size_valid_ = true;
377   }
378
379   // Fix the data size.  Once it is fixed, it cannot be changed
380   // and the data size remains always valid. 
381   void
382   fix_data_size()
383   {
384     gold_assert(this->is_data_size_valid_);
385     this->is_data_size_fixed_ = true;
386   }
387
388   // Get the current data size--this is for the convenience of
389   // sections which build up their size over time.
390   off_t
391   current_data_size_for_child() const
392   { return this->data_size_; }
393
394   // Set the current data size--this is for the convenience of
395   // sections which build up their size over time.
396   void
397   set_current_data_size_for_child(off_t data_size)
398   {
399     gold_assert(!this->is_data_size_valid_);
400     this->data_size_ = data_size;
401   }
402
403   // Return default alignment for the target size.
404   static uint64_t
405   default_alignment();
406
407   // Return default alignment for a specified size--32 or 64.
408   static uint64_t
409   default_alignment_for_size(int size);
410
411  private:
412   Output_data(const Output_data&);
413   Output_data& operator=(const Output_data&);
414
415   // This is used for verification, to make sure that we don't try to
416   // change any sizes of allocated sections after we set the section
417   // addresses.
418   static bool allocated_sizes_are_fixed;
419
420   // Memory address in output file.
421   uint64_t address_;
422   // Size of data in output file.
423   off_t data_size_;
424   // File offset of contents in output file.
425   off_t offset_;
426   // Whether address_ is valid.
427   bool is_address_valid_;
428   // Whether data_size_ is valid.
429   bool is_data_size_valid_;
430   // Whether offset_ is valid.
431   bool is_offset_valid_;
432   // Whether data size is fixed.
433   bool is_data_size_fixed_;
434   // Count of dynamic relocations applied to this section.
435   unsigned int dynamic_reloc_count_;
436 };
437
438 // Output the section headers.
439
440 class Output_section_headers : public Output_data
441 {
442  public:
443   Output_section_headers(const Layout*,
444                          const Layout::Segment_list*,
445                          const Layout::Section_list*,
446                          const Layout::Section_list*,
447                          const Stringpool*,
448                          const Output_section*);
449
450  protected:
451   // Write the data to the file.
452   void
453   do_write(Output_file*);
454
455   // Return the required alignment.
456   uint64_t
457   do_addralign() const
458   { return Output_data::default_alignment(); }
459
460   // Write to a map file.
461   void
462   do_print_to_mapfile(Mapfile* mapfile) const
463   { mapfile->print_output_data(this, _("** section headers")); }
464
465   // Set final data size.
466   void
467   set_final_data_size()
468   { this->set_data_size(this->do_size()); }
469
470  private:
471   // Write the data to the file with the right size and endianness.
472   template<int size, bool big_endian>
473   void
474   do_sized_write(Output_file*);
475
476   // Compute data size.
477   off_t
478   do_size() const;
479
480   const Layout* layout_;
481   const Layout::Segment_list* segment_list_;
482   const Layout::Section_list* section_list_;
483   const Layout::Section_list* unattached_section_list_;
484   const Stringpool* secnamepool_;
485   const Output_section* shstrtab_section_;
486 };
487
488 // Output the segment headers.
489
490 class Output_segment_headers : public Output_data
491 {
492  public:
493   Output_segment_headers(const Layout::Segment_list& segment_list);
494
495  protected:
496   // Write the data to the file.
497   void
498   do_write(Output_file*);
499
500   // Return the required alignment.
501   uint64_t
502   do_addralign() const
503   { return Output_data::default_alignment(); }
504
505   // Write to a map file.
506   void
507   do_print_to_mapfile(Mapfile* mapfile) const
508   { mapfile->print_output_data(this, _("** segment headers")); }
509
510   // Set final data size.
511   void
512   set_final_data_size()
513   { this->set_data_size(this->do_size()); }
514
515  private:
516   // Write the data to the file with the right size and endianness.
517   template<int size, bool big_endian>
518   void
519   do_sized_write(Output_file*);
520
521   // Compute the current size.
522   off_t
523   do_size() const;
524
525   const Layout::Segment_list& segment_list_;
526 };
527
528 // Output the ELF file header.
529
530 class Output_file_header : public Output_data
531 {
532  public:
533   Output_file_header(const Target*,
534                      const Symbol_table*,
535                      const Output_segment_headers*,
536                      const char* entry);
537
538   // Add information about the section headers.  We lay out the ELF
539   // file header before we create the section headers.
540   void set_section_info(const Output_section_headers*,
541                         const Output_section* shstrtab);
542
543  protected:
544   // Write the data to the file.
545   void
546   do_write(Output_file*);
547
548   // Return the required alignment.
549   uint64_t
550   do_addralign() const
551   { return Output_data::default_alignment(); }
552
553   // Write to a map file.
554   void
555   do_print_to_mapfile(Mapfile* mapfile) const
556   { mapfile->print_output_data(this, _("** file header")); }
557
558   // Set final data size.
559   void
560   set_final_data_size(void)
561   { this->set_data_size(this->do_size()); }
562
563  private:
564   // Write the data to the file with the right size and endianness.
565   template<int size, bool big_endian>
566   void
567   do_sized_write(Output_file*);
568
569   // Return the value to use for the entry address.
570   template<int size>
571   typename elfcpp::Elf_types<size>::Elf_Addr
572   entry();
573
574   // Compute the current data size.
575   off_t
576   do_size() const;
577
578   const Target* target_;
579   const Symbol_table* symtab_;
580   const Output_segment_headers* segment_header_;
581   const Output_section_headers* section_header_;
582   const Output_section* shstrtab_;
583   const char* entry_;
584 };
585
586 // Output sections are mainly comprised of input sections.  However,
587 // there are cases where we have data to write out which is not in an
588 // input section.  Output_section_data is used in such cases.  This is
589 // an abstract base class.
590
591 class Output_section_data : public Output_data
592 {
593  public:
594   Output_section_data(off_t data_size, uint64_t addralign,
595                       bool is_data_size_fixed)
596     : Output_data(), output_section_(NULL), addralign_(addralign)
597   {
598     this->set_data_size(data_size);
599     if (is_data_size_fixed)
600       this->fix_data_size();
601   }
602
603   Output_section_data(uint64_t addralign)
604     : Output_data(), output_section_(NULL), addralign_(addralign)
605   { }
606
607   // Return the output section.
608   const Output_section*
609   output_section() const
610   { return this->output_section_; }
611
612   // Record the output section.
613   void
614   set_output_section(Output_section* os);
615
616   // Add an input section, for SHF_MERGE sections.  This returns true
617   // if the section was handled.
618   bool
619   add_input_section(Relobj* object, unsigned int shndx)
620   { return this->do_add_input_section(object, shndx); }
621
622   // Given an input OBJECT, an input section index SHNDX within that
623   // object, and an OFFSET relative to the start of that input
624   // section, return whether or not the corresponding offset within
625   // the output section is known.  If this function returns true, it
626   // sets *POUTPUT to the output offset.  The value -1 indicates that
627   // this input offset is being discarded.
628   bool
629   output_offset(const Relobj* object, unsigned int shndx,
630                 section_offset_type offset,
631                 section_offset_type *poutput) const
632   { return this->do_output_offset(object, shndx, offset, poutput); }
633
634   // Return whether this is the merge section for the input section
635   // SHNDX in OBJECT.  This should return true when output_offset
636   // would return true for some values of OFFSET.
637   bool
638   is_merge_section_for(const Relobj* object, unsigned int shndx) const
639   { return this->do_is_merge_section_for(object, shndx); }
640
641   // Write the contents to a buffer.  This is used for sections which
642   // require postprocessing, such as compression.
643   void
644   write_to_buffer(unsigned char* buffer)
645   { this->do_write_to_buffer(buffer); }
646
647   // Print merge stats to stderr.  This should only be called for
648   // SHF_MERGE sections.
649   void
650   print_merge_stats(const char* section_name)
651   { this->do_print_merge_stats(section_name); }
652
653  protected:
654   // The child class must implement do_write.
655
656   // The child class may implement specific adjustments to the output
657   // section.
658   virtual void
659   do_adjust_output_section(Output_section*)
660   { }
661
662   // May be implemented by child class.  Return true if the section
663   // was handled.
664   virtual bool
665   do_add_input_section(Relobj*, unsigned int)
666   { gold_unreachable(); }
667
668   // The child class may implement output_offset.
669   virtual bool
670   do_output_offset(const Relobj*, unsigned int, section_offset_type,
671                    section_offset_type*) const
672   { return false; }
673
674   // The child class may implement is_merge_section_for.
675   virtual bool
676   do_is_merge_section_for(const Relobj*, unsigned int) const
677   { return false; }
678
679   // The child class may implement write_to_buffer.  Most child
680   // classes can not appear in a compressed section, and they do not
681   // implement this.
682   virtual void
683   do_write_to_buffer(unsigned char*)
684   { gold_unreachable(); }
685
686   // Print merge statistics.
687   virtual void
688   do_print_merge_stats(const char*)
689   { gold_unreachable(); }
690
691   // Return the required alignment.
692   uint64_t
693   do_addralign() const
694   { return this->addralign_; }
695
696   // Return the output section.
697   Output_section*
698   do_output_section()
699   { return this->output_section_; }
700
701   const Output_section*
702   do_output_section() const
703   { return this->output_section_; }
704
705   // Return the section index of the output section.
706   unsigned int
707   do_out_shndx() const;
708
709   // Set the alignment.
710   void
711   set_addralign(uint64_t addralign);
712
713  private:
714   // The output section for this section.
715   Output_section* output_section_;
716   // The required alignment.
717   uint64_t addralign_;
718 };
719
720 // Some Output_section_data classes build up their data step by step,
721 // rather than all at once.  This class provides an interface for
722 // them.
723
724 class Output_section_data_build : public Output_section_data
725 {
726  public:
727   Output_section_data_build(uint64_t addralign)
728     : Output_section_data(addralign)
729   { }
730
731   // Get the current data size.
732   off_t
733   current_data_size() const
734   { return this->current_data_size_for_child(); }
735
736   // Set the current data size.
737   void
738   set_current_data_size(off_t data_size)
739   { this->set_current_data_size_for_child(data_size); }
740
741  protected:
742   // Set the final data size.
743   virtual void
744   set_final_data_size()
745   { this->set_data_size(this->current_data_size_for_child()); }
746 };
747
748 // A simple case of Output_data in which we have constant data to
749 // output.
750
751 class Output_data_const : public Output_section_data
752 {
753  public:
754   Output_data_const(const std::string& data, uint64_t addralign)
755     : Output_section_data(data.size(), addralign, true), data_(data)
756   { }
757
758   Output_data_const(const char* p, off_t len, uint64_t addralign)
759     : Output_section_data(len, addralign, true), data_(p, len)
760   { }
761
762   Output_data_const(const unsigned char* p, off_t len, uint64_t addralign)
763     : Output_section_data(len, addralign, true),
764       data_(reinterpret_cast<const char*>(p), len)
765   { }
766
767  protected:
768   // Write the data to the output file.
769   void
770   do_write(Output_file*);
771
772   // Write the data to a buffer.
773   void
774   do_write_to_buffer(unsigned char* buffer)
775   { memcpy(buffer, this->data_.data(), this->data_.size()); }
776
777   // Write to a map file.
778   void
779   do_print_to_mapfile(Mapfile* mapfile) const
780   { mapfile->print_output_data(this, _("** fill")); }
781
782  private:
783   std::string data_;
784 };
785
786 // Another version of Output_data with constant data, in which the
787 // buffer is allocated by the caller.
788
789 class Output_data_const_buffer : public Output_section_data
790 {
791  public:
792   Output_data_const_buffer(const unsigned char* p, off_t len,
793                            uint64_t addralign, const char* map_name)
794     : Output_section_data(len, addralign, true),
795       p_(p), map_name_(map_name)
796   { }
797
798  protected:
799   // Write the data the output file.
800   void
801   do_write(Output_file*);
802
803   // Write the data to a buffer.
804   void
805   do_write_to_buffer(unsigned char* buffer)
806   { memcpy(buffer, this->p_, this->data_size()); }
807
808   // Write to a map file.
809   void
810   do_print_to_mapfile(Mapfile* mapfile) const
811   { mapfile->print_output_data(this, _(this->map_name_)); }
812
813  private:
814   // The data to output.
815   const unsigned char* p_;
816   // Name to use in a map file.  Maps are a rarely used feature, but
817   // the space usage is minor as aren't very many of these objects.
818   const char* map_name_;
819 };
820
821 // A place holder for a fixed amount of data written out via some
822 // other mechanism.
823
824 class Output_data_fixed_space : public Output_section_data
825 {
826  public:
827   Output_data_fixed_space(off_t data_size, uint64_t addralign,
828                           const char* map_name)
829     : Output_section_data(data_size, addralign, true),
830       map_name_(map_name)
831   { }
832
833  protected:
834   // Write out the data--the actual data must be written out
835   // elsewhere.
836   void
837   do_write(Output_file*)
838   { }
839
840   // Write to a map file.
841   void
842   do_print_to_mapfile(Mapfile* mapfile) const
843   { mapfile->print_output_data(this, _(this->map_name_)); }
844
845  private:
846   // Name to use in a map file.  Maps are a rarely used feature, but
847   // the space usage is minor as aren't very many of these objects.
848   const char* map_name_;
849 };
850
851 // A place holder for variable sized data written out via some other
852 // mechanism.
853
854 class Output_data_space : public Output_section_data_build
855 {
856  public:
857   explicit Output_data_space(uint64_t addralign, const char* map_name)
858     : Output_section_data_build(addralign),
859       map_name_(map_name)
860   { }
861
862   // Set the alignment.
863   void
864   set_space_alignment(uint64_t align)
865   { this->set_addralign(align); }
866
867  protected:
868   // Write out the data--the actual data must be written out
869   // elsewhere.
870   void
871   do_write(Output_file*)
872   { }
873
874   // Write to a map file.
875   void
876   do_print_to_mapfile(Mapfile* mapfile) const
877   { mapfile->print_output_data(this, _(this->map_name_)); }
878
879  private:
880   // Name to use in a map file.  Maps are a rarely used feature, but
881   // the space usage is minor as aren't very many of these objects.
882   const char* map_name_;
883 };
884
885 // Fill fixed space with zeroes.  This is just like
886 // Output_data_fixed_space, except that the map name is known.
887
888 class Output_data_zero_fill : public Output_section_data
889 {
890  public:
891   Output_data_zero_fill(off_t data_size, uint64_t addralign)
892     : Output_section_data(data_size, addralign, true)
893   { }
894
895  protected:
896   // There is no data to write out.
897   void
898   do_write(Output_file*)
899   { }
900
901   // Write to a map file.
902   void
903   do_print_to_mapfile(Mapfile* mapfile) const
904   { mapfile->print_output_data(this, "** zero fill"); }
905 };
906
907 // A string table which goes into an output section.
908
909 class Output_data_strtab : public Output_section_data
910 {
911  public:
912   Output_data_strtab(Stringpool* strtab)
913     : Output_section_data(1), strtab_(strtab)
914   { }
915
916  protected:
917   // This is called to set the address and file offset.  Here we make
918   // sure that the Stringpool is finalized.
919   void
920   set_final_data_size();
921
922   // Write out the data.
923   void
924   do_write(Output_file*);
925
926   // Write the data to a buffer.
927   void
928   do_write_to_buffer(unsigned char* buffer)
929   { this->strtab_->write_to_buffer(buffer, this->data_size()); }
930
931   // Write to a map file.
932   void
933   do_print_to_mapfile(Mapfile* mapfile) const
934   { mapfile->print_output_data(this, _("** string table")); }
935
936  private:
937   Stringpool* strtab_;
938 };
939
940 // This POD class is used to represent a single reloc in the output
941 // file.  This could be a private class within Output_data_reloc, but
942 // the templatization is complex enough that I broke it out into a
943 // separate class.  The class is templatized on either elfcpp::SHT_REL
944 // or elfcpp::SHT_RELA, and also on whether this is a dynamic
945 // relocation or an ordinary relocation.
946
947 // A relocation can be against a global symbol, a local symbol, a
948 // local section symbol, an output section, or the undefined symbol at
949 // index 0.  We represent the latter by using a NULL global symbol.
950
951 template<int sh_type, bool dynamic, int size, bool big_endian>
952 class Output_reloc;
953
954 template<bool dynamic, int size, bool big_endian>
955 class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
956 {
957  public:
958   typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
959   typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
960
961   static const Address invalid_address = static_cast<Address>(0) - 1;
962
963   // An uninitialized entry.  We need this because we want to put
964   // instances of this class into an STL container.
965   Output_reloc()
966     : local_sym_index_(INVALID_CODE)
967   { }
968
969   // We have a bunch of different constructors.  They come in pairs
970   // depending on how the address of the relocation is specified.  It
971   // can either be an offset in an Output_data or an offset in an
972   // input section.
973
974   // A reloc against a global symbol.
975
976   Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
977                Address address, bool is_relative, bool is_symbolless);
978
979   Output_reloc(Symbol* gsym, unsigned int type,
980                Sized_relobj<size, big_endian>* relobj,
981                unsigned int shndx, Address address, bool is_relative,
982                bool is_symbolless);
983
984   // A reloc against a local symbol or local section symbol.
985
986   Output_reloc(Sized_relobj<size, big_endian>* relobj,
987                unsigned int local_sym_index, unsigned int type,
988                Output_data* od, Address address, bool is_relative,
989                bool is_symbolless, bool is_section_symbol);
990
991   Output_reloc(Sized_relobj<size, big_endian>* relobj,
992                unsigned int local_sym_index, unsigned int type,
993                unsigned int shndx, Address address, bool is_relative,
994                bool is_symbolless, bool is_section_symbol);
995
996   // A reloc against the STT_SECTION symbol of an output section.
997
998   Output_reloc(Output_section* os, unsigned int type, Output_data* od,
999                Address address);
1000
1001   Output_reloc(Output_section* os, unsigned int type,
1002                Sized_relobj<size, big_endian>* relobj,
1003                unsigned int shndx, Address address);
1004
1005   // An absolute relocation with no symbol.
1006
1007   Output_reloc(unsigned int type, Output_data* od, Address address);
1008
1009   Output_reloc(unsigned int type, Sized_relobj<size, big_endian>* relobj,
1010                unsigned int shndx, Address address);
1011
1012   // A target specific relocation.  The target will be called to get
1013   // the symbol index, passing ARG.  The type and offset will be set
1014   // as for other relocation types.
1015
1016   Output_reloc(unsigned int type, void* arg, Output_data* od,
1017                Address address);
1018
1019   Output_reloc(unsigned int type, void* arg,
1020                Sized_relobj<size, big_endian>* relobj,
1021                unsigned int shndx, Address address);
1022
1023   // Return the reloc type.
1024   unsigned int
1025   type() const
1026   { return this->type_; }
1027
1028   // Return whether this is a RELATIVE relocation.
1029   bool
1030   is_relative() const
1031   { return this->is_relative_; }
1032
1033   // Return whether this is a relocation which should not use
1034   // a symbol, but which obtains its addend from a symbol.
1035   bool
1036   is_symbolless() const
1037   { return this->is_symbolless_; }
1038
1039   // Return whether this is against a local section symbol.
1040   bool
1041   is_local_section_symbol() const
1042   {
1043     return (this->local_sym_index_ != GSYM_CODE
1044             && this->local_sym_index_ != SECTION_CODE
1045             && this->local_sym_index_ != INVALID_CODE
1046             && this->local_sym_index_ != TARGET_CODE
1047             && this->is_section_symbol_);
1048   }
1049
1050   // Return whether this is a target specific relocation.
1051   bool
1052   is_target_specific() const
1053   { return this->local_sym_index_ == TARGET_CODE; }
1054
1055   // Return the argument to pass to the target for a target specific
1056   // relocation.
1057   void*
1058   target_arg() const
1059   {
1060     gold_assert(this->local_sym_index_ == TARGET_CODE);
1061     return this->u1_.arg;
1062   }
1063
1064   // For a local section symbol, return the offset of the input
1065   // section within the output section.  ADDEND is the addend being
1066   // applied to the input section.
1067   Address
1068   local_section_offset(Addend addend) const;
1069
1070   // Get the value of the symbol referred to by a Rel relocation when
1071   // we are adding the given ADDEND.
1072   Address
1073   symbol_value(Addend addend) const;
1074
1075   // Write the reloc entry to an output view.
1076   void
1077   write(unsigned char* pov) const;
1078
1079   // Write the offset and info fields to Write_rel.
1080   template<typename Write_rel>
1081   void write_rel(Write_rel*) const;
1082
1083   // This is used when sorting dynamic relocs.  Return -1 to sort this
1084   // reloc before R2, 0 to sort the same as R2, 1 to sort after R2.
1085   int
1086   compare(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>& r2)
1087     const;
1088
1089   // Return whether this reloc should be sorted before the argument
1090   // when sorting dynamic relocs.
1091   bool
1092   sort_before(const Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>&
1093               r2) const
1094   { return this->compare(r2) < 0; }
1095
1096  private:
1097   // Record that we need a dynamic symbol index.
1098   void
1099   set_needs_dynsym_index();
1100
1101   // Return the symbol index.
1102   unsigned int
1103   get_symbol_index() const;
1104
1105   // Return the output address.
1106   Address
1107   get_address() const;
1108
1109   // Codes for local_sym_index_.
1110   enum
1111   {
1112     // Global symbol.
1113     GSYM_CODE = -1U,
1114     // Output section.
1115     SECTION_CODE = -2U,
1116     // Target specific.
1117     TARGET_CODE = -3U,
1118     // Invalid uninitialized entry.
1119     INVALID_CODE = -4U
1120   };
1121
1122   union
1123   {
1124     // For a local symbol or local section symbol
1125     // (this->local_sym_index_ >= 0), the object.  We will never
1126     // generate a relocation against a local symbol in a dynamic
1127     // object; that doesn't make sense.  And our callers will always
1128     // be templatized, so we use Sized_relobj here.
1129     Sized_relobj<size, big_endian>* relobj;
1130     // For a global symbol (this->local_sym_index_ == GSYM_CODE, the
1131     // symbol.  If this is NULL, it indicates a relocation against the
1132     // undefined 0 symbol.
1133     Symbol* gsym;
1134     // For a relocation against an output section
1135     // (this->local_sym_index_ == SECTION_CODE), the output section.
1136     Output_section* os;
1137     // For a target specific relocation, an argument to pass to the
1138     // target.
1139     void* arg;
1140   } u1_;
1141   union
1142   {
1143     // If this->shndx_ is not INVALID CODE, the object which holds the
1144     // input section being used to specify the reloc address.
1145     Sized_relobj<size, big_endian>* relobj;
1146     // If this->shndx_ is INVALID_CODE, the output data being used to
1147     // specify the reloc address.  This may be NULL if the reloc
1148     // address is absolute.
1149     Output_data* od;
1150   } u2_;
1151   // The address offset within the input section or the Output_data.
1152   Address address_;
1153   // This is GSYM_CODE for a global symbol, or SECTION_CODE for a
1154   // relocation against an output section, or TARGET_CODE for a target
1155   // specific relocation, or INVALID_CODE for an uninitialized value.
1156   // Otherwise, for a local symbol (this->is_section_symbol_ is
1157   // false), the local symbol index.  For a local section symbol
1158   // (this->is_section_symbol_ is true), the section index in the
1159   // input file.
1160   unsigned int local_sym_index_;
1161   // The reloc type--a processor specific code.
1162   unsigned int type_ : 29;
1163   // True if the relocation is a RELATIVE relocation.
1164   bool is_relative_ : 1;
1165   // True if the relocation is one which should not use
1166   // a symbol, but which obtains its addend from a symbol.
1167   bool is_symbolless_ : 1;
1168   // True if the relocation is against a section symbol.
1169   bool is_section_symbol_ : 1;
1170   // If the reloc address is an input section in an object, the
1171   // section index.  This is INVALID_CODE if the reloc address is
1172   // specified in some other way.
1173   unsigned int shndx_;
1174 };
1175
1176 // The SHT_RELA version of Output_reloc<>.  This is just derived from
1177 // the SHT_REL version of Output_reloc, but it adds an addend.
1178
1179 template<bool dynamic, int size, bool big_endian>
1180 class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
1181 {
1182  public:
1183   typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
1184   typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
1185
1186   // An uninitialized entry.
1187   Output_reloc()
1188     : rel_()
1189   { }
1190
1191   // A reloc against a global symbol.
1192
1193   Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
1194                Address address, Addend addend, bool is_relative,
1195                bool is_symbolless)
1196     : rel_(gsym, type, od, address, is_relative, is_symbolless),
1197       addend_(addend)
1198   { }
1199
1200   Output_reloc(Symbol* gsym, unsigned int type,
1201                Sized_relobj<size, big_endian>* relobj,
1202                unsigned int shndx, Address address, Addend addend,
1203                bool is_relative, bool is_symbolless)
1204     : rel_(gsym, type, relobj, shndx, address, is_relative,
1205            is_symbolless), addend_(addend)
1206   { }
1207
1208   // A reloc against a local symbol.
1209
1210   Output_reloc(Sized_relobj<size, big_endian>* relobj,
1211                unsigned int local_sym_index, unsigned int type,
1212                Output_data* od, Address address,
1213                Addend addend, bool is_relative,
1214                bool is_symbolless, bool is_section_symbol)
1215     : rel_(relobj, local_sym_index, type, od, address, is_relative,
1216            is_symbolless, is_section_symbol),
1217       addend_(addend)
1218   { }
1219
1220   Output_reloc(Sized_relobj<size, big_endian>* relobj,
1221                unsigned int local_sym_index, unsigned int type,
1222                unsigned int shndx, Address address,
1223                Addend addend, bool is_relative,
1224                bool is_symbolless, bool is_section_symbol)
1225     : rel_(relobj, local_sym_index, type, shndx, address, is_relative,
1226            is_symbolless, is_section_symbol),
1227       addend_(addend)
1228   { }
1229
1230   // A reloc against the STT_SECTION symbol of an output section.
1231
1232   Output_reloc(Output_section* os, unsigned int type, Output_data* od,
1233                Address address, Addend addend)
1234     : rel_(os, type, od, address), addend_(addend)
1235   { }
1236
1237   Output_reloc(Output_section* os, unsigned int type,
1238                Sized_relobj<size, big_endian>* relobj,
1239                unsigned int shndx, Address address, Addend addend)
1240     : rel_(os, type, relobj, shndx, address), addend_(addend)
1241   { }
1242
1243   // An absolute relocation with no symbol.
1244
1245   Output_reloc(unsigned int type, Output_data* od, Address address,
1246                Addend addend)
1247     : rel_(type, od, address), addend_(addend)
1248   { }
1249
1250   Output_reloc(unsigned int type, Sized_relobj<size, big_endian>* relobj,
1251                unsigned int shndx, Address address, Addend addend)
1252     : rel_(type, relobj, shndx, address), addend_(addend)
1253   { }
1254
1255   // A target specific relocation.  The target will be called to get
1256   // the symbol index and the addend, passing ARG.  The type and
1257   // offset will be set as for other relocation types.
1258
1259   Output_reloc(unsigned int type, void* arg, Output_data* od,
1260                Address address, Addend addend)
1261     : rel_(type, arg, od, address), addend_(addend)
1262   { }
1263
1264   Output_reloc(unsigned int type, void* arg,
1265                Sized_relobj<size, big_endian>* relobj,
1266                unsigned int shndx, Address address, Addend addend)
1267     : rel_(type, arg, relobj, shndx, address), addend_(addend)
1268   { }
1269
1270   // Return whether this is a RELATIVE relocation.
1271   bool
1272   is_relative() const
1273   { return this->rel_.is_relative(); }
1274
1275   // Return whether this is a relocation which should not use
1276   // a symbol, but which obtains its addend from a symbol.
1277   bool
1278   is_symbolless() const
1279   { return this->rel_.is_symbolless(); }
1280
1281   // Write the reloc entry to an output view.
1282   void
1283   write(unsigned char* pov) const;
1284
1285   // Return whether this reloc should be sorted before the argument
1286   // when sorting dynamic relocs.
1287   bool
1288   sort_before(const Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>&
1289               r2) const
1290   {
1291     int i = this->rel_.compare(r2.rel_);
1292     if (i < 0)
1293       return true;
1294     else if (i > 0)
1295       return false;
1296     else
1297       return this->addend_ < r2.addend_;
1298   }
1299
1300  private:
1301   // The basic reloc.
1302   Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> rel_;
1303   // The addend.
1304   Addend addend_;
1305 };
1306
1307 // Output_data_reloc_generic is a non-template base class for
1308 // Output_data_reloc_base.  This gives the generic code a way to hold
1309 // a pointer to a reloc section.
1310
1311 class Output_data_reloc_generic : public Output_section_data_build
1312 {
1313  public:
1314   Output_data_reloc_generic(int size, bool sort_relocs)
1315     : Output_section_data_build(Output_data::default_alignment_for_size(size)),
1316       relative_reloc_count_(0), sort_relocs_(sort_relocs)
1317   { }
1318
1319   // Return the number of relative relocs in this section.
1320   size_t
1321   relative_reloc_count() const
1322   { return this->relative_reloc_count_; }
1323
1324   // Whether we should sort the relocs.
1325   bool
1326   sort_relocs() const
1327   { return this->sort_relocs_; }
1328
1329  protected:
1330   // Note that we've added another relative reloc.
1331   void
1332   bump_relative_reloc_count()
1333   { ++this->relative_reloc_count_; }
1334
1335  private:
1336   // The number of relative relocs added to this section.  This is to
1337   // support DT_RELCOUNT.
1338   size_t relative_reloc_count_;
1339   // Whether to sort the relocations when writing them out, to make
1340   // the dynamic linker more efficient.
1341   bool sort_relocs_;
1342 };
1343
1344 // Output_data_reloc is used to manage a section containing relocs.
1345 // SH_TYPE is either elfcpp::SHT_REL or elfcpp::SHT_RELA.  DYNAMIC
1346 // indicates whether this is a dynamic relocation or a normal
1347 // relocation.  Output_data_reloc_base is a base class.
1348 // Output_data_reloc is the real class, which we specialize based on
1349 // the reloc type.
1350
1351 template<int sh_type, bool dynamic, int size, bool big_endian>
1352 class Output_data_reloc_base : public Output_data_reloc_generic
1353 {
1354  public:
1355   typedef Output_reloc<sh_type, dynamic, size, big_endian> Output_reloc_type;
1356   typedef typename Output_reloc_type::Address Address;
1357   static const int reloc_size =
1358     Reloc_types<sh_type, size, big_endian>::reloc_size;
1359
1360   // Construct the section.
1361   Output_data_reloc_base(bool sort_relocs)
1362     : Output_data_reloc_generic(size, sort_relocs)
1363   { }
1364
1365  protected:
1366   // Write out the data.
1367   void
1368   do_write(Output_file*);
1369
1370   // Set the entry size and the link.
1371   void
1372   do_adjust_output_section(Output_section *os);
1373
1374   // Write to a map file.
1375   void
1376   do_print_to_mapfile(Mapfile* mapfile) const
1377   {
1378     mapfile->print_output_data(this,
1379                                (dynamic
1380                                 ? _("** dynamic relocs")
1381                                 : _("** relocs")));
1382   }
1383
1384   // Add a relocation entry.
1385   void
1386   add(Output_data *od, const Output_reloc_type& reloc)
1387   {
1388     this->relocs_.push_back(reloc);
1389     this->set_current_data_size(this->relocs_.size() * reloc_size);
1390     od->add_dynamic_reloc();
1391     if (reloc.is_relative())
1392       this->bump_relative_reloc_count();
1393   }
1394
1395  private:
1396   typedef std::vector<Output_reloc_type> Relocs;
1397
1398   // The class used to sort the relocations.
1399   struct Sort_relocs_comparison
1400   {
1401     bool
1402     operator()(const Output_reloc_type& r1, const Output_reloc_type& r2) const
1403     { return r1.sort_before(r2); }
1404   };
1405
1406   // The relocations in this section.
1407   Relocs relocs_;
1408 };
1409
1410 // The class which callers actually create.
1411
1412 template<int sh_type, bool dynamic, int size, bool big_endian>
1413 class Output_data_reloc;
1414
1415 // The SHT_REL version of Output_data_reloc.
1416
1417 template<bool dynamic, int size, bool big_endian>
1418 class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
1419   : public Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>
1420 {
1421  private:
1422   typedef Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size,
1423                                  big_endian> Base;
1424
1425  public:
1426   typedef typename Base::Output_reloc_type Output_reloc_type;
1427   typedef typename Output_reloc_type::Address Address;
1428
1429   Output_data_reloc(bool sr)
1430     : Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>(sr)
1431   { }
1432
1433   // Add a reloc against a global symbol.
1434
1435   void
1436   add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address)
1437   { this->add(od, Output_reloc_type(gsym, type, od, address, false, false)); }
1438
1439   void
1440   add_global(Symbol* gsym, unsigned int type, Output_data* od,
1441              Sized_relobj<size, big_endian>* relobj,
1442              unsigned int shndx, Address address)
1443   { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1444                                     false, false)); }
1445
1446   // These are to simplify the Copy_relocs class.
1447
1448   void
1449   add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address,
1450              Address addend)
1451   {
1452     gold_assert(addend == 0);
1453     this->add_global(gsym, type, od, address);
1454   }
1455
1456   void
1457   add_global(Symbol* gsym, unsigned int type, Output_data* od,
1458              Sized_relobj<size, big_endian>* relobj,
1459              unsigned int shndx, Address address, Address addend)
1460   {
1461     gold_assert(addend == 0);
1462     this->add_global(gsym, type, od, relobj, shndx, address);
1463   }
1464
1465   // Add a RELATIVE reloc against a global symbol.  The final relocation
1466   // will not reference the symbol.
1467
1468   void
1469   add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
1470                       Address address)
1471   { this->add(od, Output_reloc_type(gsym, type, od, address, true, true)); }
1472
1473   void
1474   add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
1475                       Sized_relobj<size, big_endian>* relobj,
1476                       unsigned int shndx, Address address)
1477   {
1478     this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1479                                     true, true));
1480   }
1481
1482   // Add a global relocation which does not use a symbol for the relocation,
1483   // but which gets its addend from a symbol.
1484
1485   void
1486   add_symbolless_global_addend(Symbol* gsym, unsigned int type,
1487                                Output_data* od, Address address)
1488   { this->add(od, Output_reloc_type(gsym, type, od, address, false, true)); }
1489
1490   void
1491   add_symbolless_global_addend(Symbol* gsym, unsigned int type,
1492                                Output_data* od,
1493                                Sized_relobj<size, big_endian>* relobj,
1494                                unsigned int shndx, Address address)
1495   {
1496     this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1497                                     false, true));
1498   }
1499
1500   // Add a reloc against a local symbol.
1501
1502   void
1503   add_local(Sized_relobj<size, big_endian>* relobj,
1504             unsigned int local_sym_index, unsigned int type,
1505             Output_data* od, Address address)
1506   {
1507     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
1508                                     address, false, false, false));
1509   }
1510
1511   void
1512   add_local(Sized_relobj<size, big_endian>* relobj,
1513             unsigned int local_sym_index, unsigned int type,
1514             Output_data* od, unsigned int shndx, Address address)
1515   {
1516     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1517                                     address, false, false, false));
1518   }
1519
1520   // Add a RELATIVE reloc against a local symbol.
1521
1522   void
1523   add_local_relative(Sized_relobj<size, big_endian>* relobj,
1524                      unsigned int local_sym_index, unsigned int type,
1525                      Output_data* od, Address address)
1526   {
1527     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
1528                                     address, true, true, false));
1529   }
1530
1531   void
1532   add_local_relative(Sized_relobj<size, big_endian>* relobj,
1533                      unsigned int local_sym_index, unsigned int type,
1534                      Output_data* od, unsigned int shndx, Address address)
1535   {
1536     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1537                                     address, true, true, false));
1538   }
1539
1540   // Add a local relocation which does not use a symbol for the relocation,
1541   // but which gets its addend from a symbol.
1542
1543   void
1544   add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj,
1545                               unsigned int local_sym_index, unsigned int type,
1546                               Output_data* od, Address address)
1547   {
1548     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
1549                                     address, false, true, false));
1550   }
1551
1552   void
1553   add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj,
1554                               unsigned int local_sym_index, unsigned int type,
1555                               Output_data* od, unsigned int shndx,
1556                               Address address)
1557   {
1558     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1559                                     address, false, true, false));
1560   }
1561
1562   // Add a reloc against a local section symbol.  This will be
1563   // converted into a reloc against the STT_SECTION symbol of the
1564   // output section.
1565
1566   void
1567   add_local_section(Sized_relobj<size, big_endian>* relobj,
1568                     unsigned int input_shndx, unsigned int type,
1569                     Output_data* od, Address address)
1570   {
1571     this->add(od, Output_reloc_type(relobj, input_shndx, type, od,
1572                                     address, false, false, true));
1573   }
1574
1575   void
1576   add_local_section(Sized_relobj<size, big_endian>* relobj,
1577                     unsigned int input_shndx, unsigned int type,
1578                     Output_data* od, unsigned int shndx, Address address)
1579   {
1580     this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
1581                                     address, false, false, true));
1582   }
1583
1584   // A reloc against the STT_SECTION symbol of an output section.
1585   // OS is the Output_section that the relocation refers to; OD is
1586   // the Output_data object being relocated.
1587
1588   void
1589   add_output_section(Output_section* os, unsigned int type,
1590                      Output_data* od, Address address)
1591   { this->add(od, Output_reloc_type(os, type, od, address)); }
1592
1593   void
1594   add_output_section(Output_section* os, unsigned int type, Output_data* od,
1595                      Sized_relobj<size, big_endian>* relobj,
1596                      unsigned int shndx, Address address)
1597   { this->add(od, Output_reloc_type(os, type, relobj, shndx, address)); }
1598
1599   // Add an absolute relocation.
1600
1601   void
1602   add_absolute(unsigned int type, Output_data* od, Address address)
1603   { this->add(od, Output_reloc_type(type, od, address)); }
1604
1605   void
1606   add_absolute(unsigned int type, Output_data* od,
1607                Sized_relobj<size, big_endian>* relobj,
1608                unsigned int shndx, Address address)
1609   { this->add(od, Output_reloc_type(type, relobj, shndx, address)); }
1610
1611   // Add a target specific relocation.  A target which calls this must
1612   // define the reloc_symbol_index and reloc_addend virtual functions.
1613
1614   void
1615   add_target_specific(unsigned int type, void* arg, Output_data* od,
1616                       Address address)
1617   { this->add(od, Output_reloc_type(type, arg, od, address)); }
1618
1619   void
1620   add_target_specific(unsigned int type, void* arg, Output_data* od,
1621                       Sized_relobj<size, big_endian>* relobj,
1622                       unsigned int shndx, Address address)
1623   { this->add(od, Output_reloc_type(type, arg, relobj, shndx, address)); }
1624 };
1625
1626 // The SHT_RELA version of Output_data_reloc.
1627
1628 template<bool dynamic, int size, bool big_endian>
1629 class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
1630   : public Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>
1631 {
1632  private:
1633   typedef Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size,
1634                                  big_endian> Base;
1635
1636  public:
1637   typedef typename Base::Output_reloc_type Output_reloc_type;
1638   typedef typename Output_reloc_type::Address Address;
1639   typedef typename Output_reloc_type::Addend Addend;
1640
1641   Output_data_reloc(bool sr)
1642     : Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>(sr)
1643   { }
1644
1645   // Add a reloc against a global symbol.
1646
1647   void
1648   add_global(Symbol* gsym, unsigned int type, Output_data* od,
1649              Address address, Addend addend)
1650   { this->add(od, Output_reloc_type(gsym, type, od, address, addend,
1651                                     false, false)); }
1652
1653   void
1654   add_global(Symbol* gsym, unsigned int type, Output_data* od,
1655              Sized_relobj<size, big_endian>* relobj,
1656              unsigned int shndx, Address address,
1657              Addend addend)
1658   { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1659                                     addend, false, false)); }
1660
1661   // Add a RELATIVE reloc against a global symbol.  The final output
1662   // relocation will not reference the symbol, but we must keep the symbol
1663   // information long enough to set the addend of the relocation correctly
1664   // when it is written.
1665
1666   void
1667   add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
1668                       Address address, Addend addend)
1669   { this->add(od, Output_reloc_type(gsym, type, od, address, addend, true,
1670                                     true)); }
1671
1672   void
1673   add_global_relative(Symbol* gsym, unsigned int type, Output_data* od,
1674                       Sized_relobj<size, big_endian>* relobj,
1675                       unsigned int shndx, Address address, Addend addend)
1676   { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1677                                     addend, true, true)); }
1678
1679   // Add a global relocation which does not use a symbol for the relocation,
1680   // but which gets its addend from a symbol.
1681
1682   void
1683   add_symbolless_global_addend(Symbol* gsym, unsigned int type, Output_data* od,
1684                                Address address, Addend addend)
1685   { this->add(od, Output_reloc_type(gsym, type, od, address, addend,
1686                                     false, true)); }
1687
1688   void
1689   add_symbolless_global_addend(Symbol* gsym, unsigned int type,
1690                                Output_data* od,
1691                                Sized_relobj<size, big_endian>* relobj,
1692                                unsigned int shndx, Address address, Addend addend)
1693   { this->add(od, Output_reloc_type(gsym, type, relobj, shndx, address,
1694                                     addend, false, true)); }
1695
1696   // Add a reloc against a local symbol.
1697
1698   void
1699   add_local(Sized_relobj<size, big_endian>* relobj,
1700             unsigned int local_sym_index, unsigned int type,
1701             Output_data* od, Address address, Addend addend)
1702   {
1703     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
1704                                     addend, false, false, false));
1705   }
1706
1707   void
1708   add_local(Sized_relobj<size, big_endian>* relobj,
1709             unsigned int local_sym_index, unsigned int type,
1710             Output_data* od, unsigned int shndx, Address address,
1711             Addend addend)
1712   {
1713     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1714                                     address, addend, false, false, false));
1715   }
1716
1717   // Add a RELATIVE reloc against a local symbol.
1718
1719   void
1720   add_local_relative(Sized_relobj<size, big_endian>* relobj,
1721                      unsigned int local_sym_index, unsigned int type,
1722                      Output_data* od, Address address, Addend addend)
1723   {
1724     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
1725                                     addend, true, true, false));
1726   }
1727
1728   void
1729   add_local_relative(Sized_relobj<size, big_endian>* relobj,
1730                      unsigned int local_sym_index, unsigned int type,
1731                      Output_data* od, unsigned int shndx, Address address,
1732                      Addend addend)
1733   {
1734     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1735                                     address, addend, true, true, false));
1736   }
1737
1738   // Add a local relocation which does not use a symbol for the relocation,
1739   // but which gets it's addend from a symbol.
1740
1741   void
1742   add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj,
1743                               unsigned int local_sym_index, unsigned int type,
1744                               Output_data* od, Address address, Addend addend)
1745   {
1746     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
1747                                     addend, false, true, false));
1748   }
1749
1750   void
1751   add_symbolless_local_addend(Sized_relobj<size, big_endian>* relobj,
1752                               unsigned int local_sym_index, unsigned int type,
1753                               Output_data* od, unsigned int shndx,
1754                               Address address, Addend addend)
1755   {
1756     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
1757                                     address, addend, false, true, false));
1758   }
1759
1760   // Add a reloc against a local section symbol.  This will be
1761   // converted into a reloc against the STT_SECTION symbol of the
1762   // output section.
1763
1764   void
1765   add_local_section(Sized_relobj<size, big_endian>* relobj,
1766                     unsigned int input_shndx, unsigned int type,
1767                     Output_data* od, Address address, Addend addend)
1768   {
1769     this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address,
1770                                     addend, false, false, true));
1771   }
1772
1773   void
1774   add_local_section(Sized_relobj<size, big_endian>* relobj,
1775                      unsigned int input_shndx, unsigned int type,
1776                      Output_data* od, unsigned int shndx, Address address,
1777                      Addend addend)
1778   {
1779     this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
1780                                     address, addend, false, false, true));
1781   }
1782
1783   // A reloc against the STT_SECTION symbol of an output section.
1784
1785   void
1786   add_output_section(Output_section* os, unsigned int type, Output_data* od,
1787                      Address address, Addend addend)
1788   { this->add(os, Output_reloc_type(os, type, od, address, addend)); }
1789
1790   void
1791   add_output_section(Output_section* os, unsigned int type,
1792                      Sized_relobj<size, big_endian>* relobj,
1793                      unsigned int shndx, Address address, Addend addend)
1794   { this->add(os, Output_reloc_type(os, type, relobj, shndx, address,
1795                                     addend)); }
1796
1797   // Add an absolute relocation.
1798
1799   void
1800   add_absolute(unsigned int type, Output_data* od, Address address,
1801                Addend addend)
1802   { this->add(od, Output_reloc_type(type, od, address, addend)); }
1803
1804   void
1805   add_absolute(unsigned int type, Output_data* od,
1806                Sized_relobj<size, big_endian>* relobj,
1807                unsigned int shndx, Address address, Addend addend)
1808   { this->add(od, Output_reloc_type(type, relobj, shndx, address, addend)); }
1809
1810   // Add a target specific relocation.  A target which calls this must
1811   // define the reloc_symbol_index and reloc_addend virtual functions.
1812
1813   void
1814   add_target_specific(unsigned int type, void* arg, Output_data* od,
1815                       Address address, Addend addend)
1816   { this->add(od, Output_reloc_type(type, arg, od, address, addend)); }
1817
1818   void
1819   add_target_specific(unsigned int type, void* arg, Output_data* od,
1820                       Sized_relobj<size, big_endian>* relobj,
1821                       unsigned int shndx, Address address, Addend addend)
1822   {
1823     this->add(od, Output_reloc_type(type, arg, relobj, shndx, address,
1824                                     addend));
1825   }
1826 };
1827
1828 // Output_relocatable_relocs represents a relocation section in a
1829 // relocatable link.  The actual data is written out in the target
1830 // hook relocate_for_relocatable.  This just saves space for it.
1831
1832 template<int sh_type, int size, bool big_endian>
1833 class Output_relocatable_relocs : public Output_section_data
1834 {
1835  public:
1836   Output_relocatable_relocs(Relocatable_relocs* rr)
1837     : Output_section_data(Output_data::default_alignment_for_size(size)),
1838       rr_(rr)
1839   { }
1840
1841   void
1842   set_final_data_size();
1843
1844   // Write out the data.  There is nothing to do here.
1845   void
1846   do_write(Output_file*)
1847   { }
1848
1849   // Write to a map file.
1850   void
1851   do_print_to_mapfile(Mapfile* mapfile) const
1852   { mapfile->print_output_data(this, _("** relocs")); }
1853
1854  private:
1855   // The relocs associated with this input section.
1856   Relocatable_relocs* rr_;
1857 };
1858
1859 // Handle a GROUP section.
1860
1861 template<int size, bool big_endian>
1862 class Output_data_group : public Output_section_data
1863 {
1864  public:
1865   // The constructor clears *INPUT_SHNDXES.
1866   Output_data_group(Sized_relobj<size, big_endian>* relobj,
1867                     section_size_type entry_count,
1868                     elfcpp::Elf_Word flags,
1869                     std::vector<unsigned int>* input_shndxes);
1870
1871   void
1872   do_write(Output_file*);
1873
1874   // Write to a map file.
1875   void
1876   do_print_to_mapfile(Mapfile* mapfile) const
1877   { mapfile->print_output_data(this, _("** group")); }
1878
1879   // Set final data size.
1880   void
1881   set_final_data_size()
1882   { this->set_data_size((this->input_shndxes_.size() + 1) * 4); }
1883
1884  private:
1885   // The input object.
1886   Sized_relobj<size, big_endian>* relobj_;
1887   // The group flag word.
1888   elfcpp::Elf_Word flags_;
1889   // The section indexes of the input sections in this group.
1890   std::vector<unsigned int> input_shndxes_;
1891 };
1892
1893 // Output_data_got is used to manage a GOT.  Each entry in the GOT is
1894 // for one symbol--either a global symbol or a local symbol in an
1895 // object.  The target specific code adds entries to the GOT as
1896 // needed.
1897
1898 template<int size, bool big_endian>
1899 class Output_data_got : public Output_section_data_build
1900 {
1901  public:
1902   typedef typename elfcpp::Elf_types<size>::Elf_Addr Valtype;
1903   typedef Output_data_reloc<elfcpp::SHT_REL, true, size, big_endian> Rel_dyn;
1904   typedef Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian> Rela_dyn;
1905
1906   Output_data_got()
1907     : Output_section_data_build(Output_data::default_alignment_for_size(size)),
1908       entries_()
1909   { }
1910
1911   // Add an entry for a global symbol to the GOT.  Return true if this
1912   // is a new GOT entry, false if the symbol was already in the GOT.
1913   bool
1914   add_global(Symbol* gsym, unsigned int got_type);
1915
1916   // Add an entry for a global symbol to the GOT, and add a dynamic
1917   // relocation of type R_TYPE for the GOT entry.
1918   void
1919   add_global_with_rel(Symbol* gsym, unsigned int got_type,
1920                       Rel_dyn* rel_dyn, unsigned int r_type);
1921
1922   void
1923   add_global_with_rela(Symbol* gsym, unsigned int got_type,
1924                        Rela_dyn* rela_dyn, unsigned int r_type);
1925
1926   // Add a pair of entries for a global symbol to the GOT, and add
1927   // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
1928   void
1929   add_global_pair_with_rel(Symbol* gsym, unsigned int got_type,
1930                            Rel_dyn* rel_dyn, unsigned int r_type_1,
1931                            unsigned int r_type_2);
1932
1933   void
1934   add_global_pair_with_rela(Symbol* gsym, unsigned int got_type,
1935                             Rela_dyn* rela_dyn, unsigned int r_type_1,
1936                             unsigned int r_type_2);
1937
1938   // Add an entry for a local symbol to the GOT.  This returns true if
1939   // this is a new GOT entry, false if the symbol already has a GOT
1940   // entry.
1941   bool
1942   add_local(Sized_relobj<size, big_endian>* object, unsigned int sym_index,
1943             unsigned int got_type);
1944
1945   // Add an entry for a local symbol to the GOT, and add a dynamic
1946   // relocation of type R_TYPE for the GOT entry.
1947   void
1948   add_local_with_rel(Sized_relobj<size, big_endian>* object,
1949                      unsigned int sym_index, unsigned int got_type,
1950                      Rel_dyn* rel_dyn, unsigned int r_type);
1951
1952   void
1953   add_local_with_rela(Sized_relobj<size, big_endian>* object,
1954                       unsigned int sym_index, unsigned int got_type,
1955                       Rela_dyn* rela_dyn, unsigned int r_type);
1956
1957   // Add a pair of entries for a local symbol to the GOT, and add
1958   // dynamic relocations of type R_TYPE_1 and R_TYPE_2, respectively.
1959   void
1960   add_local_pair_with_rel(Sized_relobj<size, big_endian>* object,
1961                           unsigned int sym_index, unsigned int shndx,
1962                           unsigned int got_type, Rel_dyn* rel_dyn,
1963                           unsigned int r_type_1, unsigned int r_type_2);
1964
1965   void
1966   add_local_pair_with_rela(Sized_relobj<size, big_endian>* object,
1967                           unsigned int sym_index, unsigned int shndx,
1968                           unsigned int got_type, Rela_dyn* rela_dyn,
1969                           unsigned int r_type_1, unsigned int r_type_2);
1970
1971   // Add a constant to the GOT.  This returns the offset of the new
1972   // entry from the start of the GOT.
1973   unsigned int
1974   add_constant(Valtype constant)
1975   {
1976     this->entries_.push_back(Got_entry(constant));
1977     this->set_got_size();
1978     return this->last_got_offset();
1979   }
1980
1981  protected:
1982   // Write out the GOT table.
1983   void
1984   do_write(Output_file*);
1985
1986   // Write to a map file.
1987   void
1988   do_print_to_mapfile(Mapfile* mapfile) const
1989   { mapfile->print_output_data(this, _("** GOT")); }
1990
1991  private:
1992   // This POD class holds a single GOT entry.
1993   class Got_entry
1994   {
1995    public:
1996     // Create a zero entry.
1997     Got_entry()
1998       : local_sym_index_(CONSTANT_CODE)
1999     { this->u_.constant = 0; }
2000
2001     // Create a global symbol entry.
2002     explicit Got_entry(Symbol* gsym)
2003       : local_sym_index_(GSYM_CODE)
2004     { this->u_.gsym = gsym; }
2005
2006     // Create a local symbol entry.
2007     Got_entry(Sized_relobj<size, big_endian>* object,
2008               unsigned int local_sym_index)
2009       : local_sym_index_(local_sym_index)
2010     {
2011       gold_assert(local_sym_index != GSYM_CODE
2012                   && local_sym_index != CONSTANT_CODE);
2013       this->u_.object = object;
2014     }
2015
2016     // Create a constant entry.  The constant is a host value--it will
2017     // be swapped, if necessary, when it is written out.
2018     explicit Got_entry(Valtype constant)
2019       : local_sym_index_(CONSTANT_CODE)
2020     { this->u_.constant = constant; }
2021
2022     // Write the GOT entry to an output view.
2023     void
2024     write(unsigned char* pov) const;
2025
2026    private:
2027     enum
2028     {
2029       GSYM_CODE = -1U,
2030       CONSTANT_CODE = -2U
2031     };
2032
2033     union
2034     {
2035       // For a local symbol, the object.
2036       Sized_relobj<size, big_endian>* object;
2037       // For a global symbol, the symbol.
2038       Symbol* gsym;
2039       // For a constant, the constant.
2040       Valtype constant;
2041     } u_;
2042     // For a local symbol, the local symbol index.  This is GSYM_CODE
2043     // for a global symbol, or CONSTANT_CODE for a constant.
2044     unsigned int local_sym_index_;
2045   };
2046
2047   typedef std::vector<Got_entry> Got_entries;
2048
2049   // Return the offset into the GOT of GOT entry I.
2050   unsigned int
2051   got_offset(unsigned int i) const
2052   { return i * (size / 8); }
2053
2054   // Return the offset into the GOT of the last entry added.
2055   unsigned int
2056   last_got_offset() const
2057   { return this->got_offset(this->entries_.size() - 1); }
2058
2059   // Set the size of the section.
2060   void
2061   set_got_size()
2062   { this->set_current_data_size(this->got_offset(this->entries_.size())); }
2063
2064   // The list of GOT entries.
2065   Got_entries entries_;
2066 };
2067
2068 // Output_data_dynamic is used to hold the data in SHT_DYNAMIC
2069 // section.
2070
2071 class Output_data_dynamic : public Output_section_data
2072 {
2073  public:
2074   Output_data_dynamic(Stringpool* pool)
2075     : Output_section_data(Output_data::default_alignment()),
2076       entries_(), pool_(pool)
2077   { }
2078
2079   // Add a new dynamic entry with a fixed numeric value.
2080   void
2081   add_constant(elfcpp::DT tag, unsigned int val)
2082   { this->add_entry(Dynamic_entry(tag, val)); }
2083
2084   // Add a new dynamic entry with the address of output data.
2085   void
2086   add_section_address(elfcpp::DT tag, const Output_data* od)
2087   { this->add_entry(Dynamic_entry(tag, od, false)); }
2088
2089   // Add a new dynamic entry with the address of output data
2090   // plus a constant offset.
2091   void
2092   add_section_plus_offset(elfcpp::DT tag, const Output_data* od,
2093                           unsigned int offset)
2094   { this->add_entry(Dynamic_entry(tag, od, offset)); }
2095
2096   // Add a new dynamic entry with the size of output data.
2097   void
2098   add_section_size(elfcpp::DT tag, const Output_data* od)
2099   { this->add_entry(Dynamic_entry(tag, od, true)); }
2100
2101   // Add a new dynamic entry with the total size of two output datas.
2102   void
2103   add_section_size(elfcpp::DT tag, const Output_data* od,
2104                    const Output_data* od2)
2105   { this->add_entry(Dynamic_entry(tag, od, od2)); }
2106
2107   // Add a new dynamic entry with the address of a symbol.
2108   void
2109   add_symbol(elfcpp::DT tag, const Symbol* sym)
2110   { this->add_entry(Dynamic_entry(tag, sym)); }
2111
2112   // Add a new dynamic entry with a string.
2113   void
2114   add_string(elfcpp::DT tag, const char* str)
2115   { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, true, NULL))); }
2116
2117   void
2118   add_string(elfcpp::DT tag, const std::string& str)
2119   { this->add_string(tag, str.c_str()); }
2120
2121  protected:
2122   // Adjust the output section to set the entry size.
2123   void
2124   do_adjust_output_section(Output_section*);
2125
2126   // Set the final data size.
2127   void
2128   set_final_data_size();
2129
2130   // Write out the dynamic entries.
2131   void
2132   do_write(Output_file*);
2133
2134   // Write to a map file.
2135   void
2136   do_print_to_mapfile(Mapfile* mapfile) const
2137   { mapfile->print_output_data(this, _("** dynamic")); }
2138
2139  private:
2140   // This POD class holds a single dynamic entry.
2141   class Dynamic_entry
2142   {
2143    public:
2144     // Create an entry with a fixed numeric value.
2145     Dynamic_entry(elfcpp::DT tag, unsigned int val)
2146       : tag_(tag), offset_(DYNAMIC_NUMBER)
2147     { this->u_.val = val; }
2148
2149     // Create an entry with the size or address of a section.
2150     Dynamic_entry(elfcpp::DT tag, const Output_data* od, bool section_size)
2151       : tag_(tag),
2152         offset_(section_size
2153                 ? DYNAMIC_SECTION_SIZE
2154                 : DYNAMIC_SECTION_ADDRESS)
2155     {
2156       this->u_.od = od;
2157       this->od2 = NULL;
2158     }
2159
2160     // Create an entry with the size of two sections.
2161     Dynamic_entry(elfcpp::DT tag, const Output_data* od, const Output_data* od2)
2162       : tag_(tag),
2163         offset_(DYNAMIC_SECTION_SIZE)
2164     {
2165       this->u_.od = od;
2166       this->od2 = od2;
2167     }
2168
2169     // Create an entry with the address of a section plus a constant offset.
2170     Dynamic_entry(elfcpp::DT tag, const Output_data* od, unsigned int offset)
2171       : tag_(tag),
2172         offset_(offset)
2173     { this->u_.od = od; }
2174
2175     // Create an entry with the address of a symbol.
2176     Dynamic_entry(elfcpp::DT tag, const Symbol* sym)
2177       : tag_(tag), offset_(DYNAMIC_SYMBOL)
2178     { this->u_.sym = sym; }
2179
2180     // Create an entry with a string.
2181     Dynamic_entry(elfcpp::DT tag, const char* str)
2182       : tag_(tag), offset_(DYNAMIC_STRING)
2183     { this->u_.str = str; }
2184
2185     // Return the tag of this entry.
2186     elfcpp::DT
2187     tag() const
2188     { return this->tag_; }
2189
2190     // Write the dynamic entry to an output view.
2191     template<int size, bool big_endian>
2192     void
2193     write(unsigned char* pov, const Stringpool*) const;
2194
2195    private:
2196     // Classification is encoded in the OFFSET field.
2197     enum Classification
2198     {
2199       // Section address.
2200       DYNAMIC_SECTION_ADDRESS = 0,
2201       // Number.
2202       DYNAMIC_NUMBER = -1U,
2203       // Section size.
2204       DYNAMIC_SECTION_SIZE = -2U,
2205       // Symbol adress.
2206       DYNAMIC_SYMBOL = -3U,
2207       // String.
2208       DYNAMIC_STRING = -4U
2209       // Any other value indicates a section address plus OFFSET.
2210     };
2211
2212     union
2213     {
2214       // For DYNAMIC_NUMBER.
2215       unsigned int val;
2216       // For DYNAMIC_SECTION_SIZE and section address plus OFFSET.
2217       const Output_data* od;
2218       // For DYNAMIC_SYMBOL.
2219       const Symbol* sym;
2220       // For DYNAMIC_STRING.
2221       const char* str;
2222     } u_;
2223     // For DYNAMIC_SYMBOL with two sections.
2224     const Output_data* od2;
2225     // The dynamic tag.
2226     elfcpp::DT tag_;
2227     // The type of entry (Classification) or offset within a section.
2228     unsigned int offset_;
2229   };
2230
2231   // Add an entry to the list.
2232   void
2233   add_entry(const Dynamic_entry& entry)
2234   { this->entries_.push_back(entry); }
2235
2236   // Sized version of write function.
2237   template<int size, bool big_endian>
2238   void
2239   sized_write(Output_file* of);
2240
2241   // The type of the list of entries.
2242   typedef std::vector<Dynamic_entry> Dynamic_entries;
2243
2244   // The entries.
2245   Dynamic_entries entries_;
2246   // The pool used for strings.
2247   Stringpool* pool_;
2248 };
2249
2250 // Output_symtab_xindex is used to handle SHT_SYMTAB_SHNDX sections,
2251 // which may be required if the object file has more than
2252 // SHN_LORESERVE sections.
2253
2254 class Output_symtab_xindex : public Output_section_data
2255 {
2256  public:
2257   Output_symtab_xindex(size_t symcount)
2258     : Output_section_data(symcount * 4, 4, true),
2259       entries_()
2260   { }
2261
2262   // Add an entry: symbol number SYMNDX has section SHNDX.
2263   void
2264   add(unsigned int symndx, unsigned int shndx)
2265   { this->entries_.push_back(std::make_pair(symndx, shndx)); }
2266
2267  protected:
2268   void
2269   do_write(Output_file*);
2270
2271   // Write to a map file.
2272   void
2273   do_print_to_mapfile(Mapfile* mapfile) const
2274   { mapfile->print_output_data(this, _("** symtab xindex")); }
2275
2276  private:
2277   template<bool big_endian>
2278   void
2279   endian_do_write(unsigned char*);
2280
2281   // It is likely that most symbols will not require entries.  Rather
2282   // than keep a vector for all symbols, we keep pairs of symbol index
2283   // and section index.
2284   typedef std::vector<std::pair<unsigned int, unsigned int> > Xindex_entries;
2285
2286   // The entries we need.
2287   Xindex_entries entries_;
2288 };
2289
2290 // A relaxed input section.
2291 class Output_relaxed_input_section : public Output_section_data_build
2292 {
2293  public:
2294   // We would like to call relobj->section_addralign(shndx) to get the
2295   // alignment but we do not want the constructor to fail.  So callers
2296   // are repsonsible for ensuring that.
2297   Output_relaxed_input_section(Relobj* relobj, unsigned int shndx,
2298                                uint64_t addralign)
2299     : Output_section_data_build(addralign), relobj_(relobj), shndx_(shndx)
2300   { }
2301  
2302   // Return the Relobj of this relaxed input section.
2303   Relobj*
2304   relobj() const
2305   { return this->relobj_; }
2306  
2307   // Return the section index of this relaxed input section.
2308   unsigned int
2309   shndx() const
2310   { return this->shndx_; }
2311
2312  private:
2313   Relobj* relobj_;
2314   unsigned int shndx_;
2315 };
2316
2317 // An output section.  We don't expect to have too many output
2318 // sections, so we don't bother to do a template on the size.
2319
2320 class Output_section : public Output_data
2321 {
2322  public:
2323   // Create an output section, giving the name, type, and flags.
2324   Output_section(const char* name, elfcpp::Elf_Word, elfcpp::Elf_Xword);
2325   virtual ~Output_section();
2326
2327   // Add a new input section SHNDX, named NAME, with header SHDR, from
2328   // object OBJECT.  RELOC_SHNDX is the index of a relocation section
2329   // which applies to this section, or 0 if none, or -1 if more than
2330   // one.  HAVE_SECTIONS_SCRIPT is true if we have a SECTIONS clause
2331   // in a linker script; in that case we need to keep track of input
2332   // sections associated with an output section.  Return the offset
2333   // within the output section.
2334   template<int size, bool big_endian>
2335   off_t
2336   add_input_section(Sized_relobj<size, big_endian>* object, unsigned int shndx,
2337                     const char *name,
2338                     const elfcpp::Shdr<size, big_endian>& shdr,
2339                     unsigned int reloc_shndx, bool have_sections_script);
2340
2341   // Add generated data POSD to this output section.
2342   void
2343   add_output_section_data(Output_section_data* posd);
2344
2345   // Add a relaxed input section PORIS to this output section.
2346   void
2347   add_relaxed_input_section(Output_relaxed_input_section* poris);
2348
2349   // Return the section name.
2350   const char*
2351   name() const
2352   { return this->name_; }
2353
2354   // Return the section type.
2355   elfcpp::Elf_Word
2356   type() const
2357   { return this->type_; }
2358
2359   // Return the section flags.
2360   elfcpp::Elf_Xword
2361   flags() const
2362   { return this->flags_; }
2363
2364   // Update the output section flags based on input section flags.
2365   void
2366   update_flags_for_input_section(elfcpp::Elf_Xword flags);
2367
2368   // Return the entsize field.
2369   uint64_t
2370   entsize() const
2371   { return this->entsize_; }
2372
2373   // Set the entsize field.
2374   void
2375   set_entsize(uint64_t v);
2376
2377   // Set the load address.
2378   void
2379   set_load_address(uint64_t load_address)
2380   {
2381     this->load_address_ = load_address;
2382     this->has_load_address_ = true;
2383   }
2384
2385   // Set the link field to the output section index of a section.
2386   void
2387   set_link_section(const Output_data* od)
2388   {
2389     gold_assert(this->link_ == 0
2390                 && !this->should_link_to_symtab_
2391                 && !this->should_link_to_dynsym_);
2392     this->link_section_ = od;
2393   }
2394
2395   // Set the link field to a constant.
2396   void
2397   set_link(unsigned int v)
2398   {
2399     gold_assert(this->link_section_ == NULL
2400                 && !this->should_link_to_symtab_
2401                 && !this->should_link_to_dynsym_);
2402     this->link_ = v;
2403   }
2404
2405   // Record that this section should link to the normal symbol table.
2406   void
2407   set_should_link_to_symtab()
2408   {
2409     gold_assert(this->link_section_ == NULL
2410                 && this->link_ == 0
2411                 && !this->should_link_to_dynsym_);
2412     this->should_link_to_symtab_ = true;
2413   }
2414
2415   // Record that this section should link to the dynamic symbol table.
2416   void
2417   set_should_link_to_dynsym()
2418   {
2419     gold_assert(this->link_section_ == NULL
2420                 && this->link_ == 0
2421                 && !this->should_link_to_symtab_);
2422     this->should_link_to_dynsym_ = true;
2423   }
2424
2425   // Return the info field.
2426   unsigned int
2427   info() const
2428   {
2429     gold_assert(this->info_section_ == NULL
2430                 && this->info_symndx_ == NULL);
2431     return this->info_;
2432   }
2433
2434   // Set the info field to the output section index of a section.
2435   void
2436   set_info_section(const Output_section* os)
2437   {
2438     gold_assert((this->info_section_ == NULL
2439                  || (this->info_section_ == os
2440                      && this->info_uses_section_index_))
2441                 && this->info_symndx_ == NULL
2442                 && this->info_ == 0);
2443     this->info_section_ = os;
2444     this->info_uses_section_index_= true;
2445   }
2446
2447   // Set the info field to the symbol table index of a symbol.
2448   void
2449   set_info_symndx(const Symbol* sym)
2450   {
2451     gold_assert(this->info_section_ == NULL
2452                 && (this->info_symndx_ == NULL
2453                     || this->info_symndx_ == sym)
2454                 && this->info_ == 0);
2455     this->info_symndx_ = sym;
2456   }
2457
2458   // Set the info field to the symbol table index of a section symbol.
2459   void
2460   set_info_section_symndx(const Output_section* os)
2461   {
2462     gold_assert((this->info_section_ == NULL
2463                  || (this->info_section_ == os
2464                      && !this->info_uses_section_index_))
2465                 && this->info_symndx_ == NULL
2466                 && this->info_ == 0);
2467     this->info_section_ = os;
2468     this->info_uses_section_index_ = false;
2469   }
2470
2471   // Set the info field to a constant.
2472   void
2473   set_info(unsigned int v)
2474   {
2475     gold_assert(this->info_section_ == NULL
2476                 && this->info_symndx_ == NULL
2477                 && (this->info_ == 0
2478                     || this->info_ == v));
2479     this->info_ = v;
2480   }
2481
2482   // Set the addralign field.
2483   void
2484   set_addralign(uint64_t v)
2485   { this->addralign_ = v; }
2486
2487   // Whether the output section index has been set.
2488   bool
2489   has_out_shndx() const
2490   { return this->out_shndx_ != -1U; }
2491
2492   // Indicate that we need a symtab index.
2493   void
2494   set_needs_symtab_index()
2495   { this->needs_symtab_index_ = true; }
2496
2497   // Return whether we need a symtab index.
2498   bool
2499   needs_symtab_index() const
2500   { return this->needs_symtab_index_; }
2501
2502   // Get the symtab index.
2503   unsigned int
2504   symtab_index() const
2505   {
2506     gold_assert(this->symtab_index_ != 0);
2507     return this->symtab_index_;
2508   }
2509
2510   // Set the symtab index.
2511   void
2512   set_symtab_index(unsigned int index)
2513   {
2514     gold_assert(index != 0);
2515     this->symtab_index_ = index;
2516   }
2517
2518   // Indicate that we need a dynsym index.
2519   void
2520   set_needs_dynsym_index()
2521   { this->needs_dynsym_index_ = true; }
2522
2523   // Return whether we need a dynsym index.
2524   bool
2525   needs_dynsym_index() const
2526   { return this->needs_dynsym_index_; }
2527
2528   // Get the dynsym index.
2529   unsigned int
2530   dynsym_index() const
2531   {
2532     gold_assert(this->dynsym_index_ != 0);
2533     return this->dynsym_index_;
2534   }
2535
2536   // Set the dynsym index.
2537   void
2538   set_dynsym_index(unsigned int index)
2539   {
2540     gold_assert(index != 0);
2541     this->dynsym_index_ = index;
2542   }
2543
2544   // Return whether the input sections sections attachd to this output
2545   // section may require sorting.  This is used to handle constructor
2546   // priorities compatibly with GNU ld.
2547   bool
2548   may_sort_attached_input_sections() const
2549   { return this->may_sort_attached_input_sections_; }
2550
2551   // Record that the input sections attached to this output section
2552   // may require sorting.
2553   void
2554   set_may_sort_attached_input_sections()
2555   { this->may_sort_attached_input_sections_ = true; }
2556
2557   // Return whether the input sections attached to this output section
2558   // require sorting.  This is used to handle constructor priorities
2559   // compatibly with GNU ld.
2560   bool
2561   must_sort_attached_input_sections() const
2562   { return this->must_sort_attached_input_sections_; }
2563
2564   // Record that the input sections attached to this output section
2565   // require sorting.
2566   void
2567   set_must_sort_attached_input_sections()
2568   { this->must_sort_attached_input_sections_ = true; }
2569
2570   // Return whether this section holds relro data--data which has
2571   // dynamic relocations but which may be marked read-only after the
2572   // dynamic relocations have been completed.
2573   bool
2574   is_relro() const
2575   { return this->is_relro_; }
2576
2577   // Record that this section holds relro data.
2578   void
2579   set_is_relro()
2580   { this->is_relro_ = true; }
2581
2582   // Record that this section does not hold relro data.
2583   void
2584   clear_is_relro()
2585   { this->is_relro_ = false; }
2586
2587   // True if this section holds relro local data--relro data for which
2588   // the dynamic relocations are all RELATIVE relocations.
2589   bool
2590   is_relro_local() const
2591   { return this->is_relro_local_; }
2592
2593   // Record that this section holds relro local data.
2594   void
2595   set_is_relro_local()
2596   { this->is_relro_local_ = true; }
2597
2598   // True if this must be the last relro section.
2599   bool
2600   is_last_relro() const
2601   { return this->is_last_relro_; }
2602
2603   // Record that this must be the last relro section.
2604   void
2605   set_is_last_relro()
2606   {
2607     gold_assert(this->is_relro_);
2608     this->is_last_relro_ = true;
2609   }
2610
2611   // True if this must be the first section following the relro sections.
2612   bool
2613   is_first_non_relro() const
2614   {
2615     gold_assert(!this->is_relro_);
2616     return this->is_first_non_relro_;
2617   }
2618
2619   // Record that this must be the first non-relro section.
2620   void
2621   set_is_first_non_relro()
2622   {
2623     gold_assert(!this->is_relro_);
2624     this->is_first_non_relro_ = true;
2625   }
2626
2627   // True if this is a small section: a section which holds small
2628   // variables.
2629   bool
2630   is_small_section() const
2631   { return this->is_small_section_; }
2632
2633   // Record that this is a small section.
2634   void
2635   set_is_small_section()
2636   { this->is_small_section_ = true; }
2637
2638   // True if this is a large section: a section which holds large
2639   // variables.
2640   bool
2641   is_large_section() const
2642   { return this->is_large_section_; }
2643
2644   // Record that this is a large section.
2645   void
2646   set_is_large_section()
2647   { this->is_large_section_ = true; }
2648
2649   // True if this is a large data (not BSS) section.
2650   bool
2651   is_large_data_section()
2652   { return this->is_large_section_ && this->type_ != elfcpp::SHT_NOBITS; }
2653
2654   // True if this is the .interp section which goes into the PT_INTERP
2655   // segment.
2656   bool
2657   is_interp() const
2658   { return this->is_interp_; }
2659
2660   // Record that this is the interp section.
2661   void
2662   set_is_interp()
2663   { this->is_interp_ = true; }
2664
2665   // True if this is a section used by the dynamic linker.
2666   bool
2667   is_dynamic_linker_section() const
2668   { return this->is_dynamic_linker_section_; }
2669
2670   // Record that this is a section used by the dynamic linker.
2671   void
2672   set_is_dynamic_linker_section()
2673   { this->is_dynamic_linker_section_ = true; }
2674
2675   // Return whether this section should be written after all the input
2676   // sections are complete.
2677   bool
2678   after_input_sections() const
2679   { return this->after_input_sections_; }
2680
2681   // Record that this section should be written after all the input
2682   // sections are complete.
2683   void
2684   set_after_input_sections()
2685   { this->after_input_sections_ = true; }
2686
2687   // Return whether this section requires postprocessing after all
2688   // relocations have been applied.
2689   bool
2690   requires_postprocessing() const
2691   { return this->requires_postprocessing_; }
2692
2693   // If a section requires postprocessing, return the buffer to use.
2694   unsigned char*
2695   postprocessing_buffer() const
2696   {
2697     gold_assert(this->postprocessing_buffer_ != NULL);
2698     return this->postprocessing_buffer_;
2699   }
2700
2701   // If a section requires postprocessing, create the buffer to use.
2702   void
2703   create_postprocessing_buffer();
2704
2705   // If a section requires postprocessing, this is the size of the
2706   // buffer to which relocations should be applied.
2707   off_t
2708   postprocessing_buffer_size() const
2709   { return this->current_data_size_for_child(); }
2710
2711   // Modify the section name.  This is only permitted for an
2712   // unallocated section, and only before the size has been finalized.
2713   // Otherwise the name will not get into Layout::namepool_.
2714   void
2715   set_name(const char* newname)
2716   {
2717     gold_assert((this->flags_ & elfcpp::SHF_ALLOC) == 0);
2718     gold_assert(!this->is_data_size_valid());
2719     this->name_ = newname;
2720   }
2721
2722   // Return whether the offset OFFSET in the input section SHNDX in
2723   // object OBJECT is being included in the link.
2724   bool
2725   is_input_address_mapped(const Relobj* object, unsigned int shndx,
2726                           off_t offset) const;
2727
2728   // Return the offset within the output section of OFFSET relative to
2729   // the start of input section SHNDX in object OBJECT.
2730   section_offset_type
2731   output_offset(const Relobj* object, unsigned int shndx,
2732                 section_offset_type offset) const;
2733
2734   // Return the output virtual address of OFFSET relative to the start
2735   // of input section SHNDX in object OBJECT.
2736   uint64_t
2737   output_address(const Relobj* object, unsigned int shndx,
2738                  off_t offset) const;
2739
2740   // Look for the merged section for input section SHNDX in object
2741   // OBJECT.  If found, return true, and set *ADDR to the address of
2742   // the start of the merged section.  This is not necessary the
2743   // output offset corresponding to input offset 0 in the section,
2744   // since the section may be mapped arbitrarily.
2745   bool
2746   find_starting_output_address(const Relobj* object, unsigned int shndx,
2747                                uint64_t* addr) const;
2748
2749   // Record that this output section was found in the SECTIONS clause
2750   // of a linker script.
2751   void
2752   set_found_in_sections_clause()
2753   { this->found_in_sections_clause_ = true; }
2754
2755   // Return whether this output section was found in the SECTIONS
2756   // clause of a linker script.
2757   bool
2758   found_in_sections_clause() const
2759   { return this->found_in_sections_clause_; }
2760
2761   // Write the section header into *OPHDR.
2762   template<int size, bool big_endian>
2763   void
2764   write_header(const Layout*, const Stringpool*,
2765                elfcpp::Shdr_write<size, big_endian>*) const;
2766
2767   // The next few calls are for linker script support.
2768
2769   // We need to export the input sections to linker scripts.  Previously
2770   // we export a pair of Relobj pointer and section index.  We now need to
2771   // handle relaxed input sections as well.  So we use this class.
2772   class Simple_input_section
2773   {
2774    private:
2775     static const unsigned int invalid_shndx = static_cast<unsigned int>(-1);
2776
2777    public:
2778     Simple_input_section(Relobj *relobj, unsigned int shndx)
2779       : shndx_(shndx)
2780     {
2781       gold_assert(shndx != invalid_shndx);
2782       this->u_.relobj = relobj;
2783     }
2784  
2785     Simple_input_section(Output_relaxed_input_section* section)
2786       : shndx_(invalid_shndx)
2787     { this->u_.relaxed_input_section = section; }
2788
2789     // Whether this is a relaxed section.
2790     bool
2791     is_relaxed_input_section() const
2792     { return this->shndx_ == invalid_shndx; }
2793
2794     // Return object of an input section.
2795     Relobj*
2796     relobj() const
2797     {
2798       return ((this->shndx_ != invalid_shndx)
2799               ? this->u_.relobj
2800               : this->u_.relaxed_input_section->relobj());
2801     }
2802
2803     // Return index of an input section.
2804     unsigned int
2805     shndx() const
2806     {
2807       return ((this->shndx_ != invalid_shndx)
2808               ? this->shndx_
2809               : this->u_.relaxed_input_section->shndx());
2810     }
2811
2812     // Return the Output_relaxed_input_section object of a relaxed section.
2813     Output_relaxed_input_section*
2814     relaxed_input_section() const
2815     {
2816       gold_assert(this->shndx_ == invalid_shndx);
2817       return this->u_.relaxed_input_section;
2818     }
2819
2820    private:
2821     // Pointer to either an Relobj or an Output_relaxed_input_section.
2822     union
2823     {
2824       Relobj* relobj;
2825       Output_relaxed_input_section* relaxed_input_section;
2826     } u_;
2827     // Section index for an non-relaxed section or invalid_shndx for
2828     // a relaxed section.
2829     unsigned int shndx_;
2830   };
2831  
2832   // Store the list of input sections for this Output_section into the
2833   // list passed in.  This removes the input sections, leaving only
2834   // any Output_section_data elements.  This returns the size of those
2835   // Output_section_data elements.  ADDRESS is the address of this
2836   // output section.  FILL is the fill value to use, in case there are
2837   // any spaces between the remaining Output_section_data elements.
2838   uint64_t
2839   get_input_sections(uint64_t address, const std::string& fill,
2840                      std::list<Simple_input_section>*);
2841
2842   // Add a simple input section.
2843   void
2844   add_simple_input_section(const Simple_input_section& input_section,
2845                            off_t data_size, uint64_t addralign);
2846
2847   // Set the current size of the output section.
2848   void
2849   set_current_data_size(off_t size)
2850   { this->set_current_data_size_for_child(size); }
2851
2852   // Get the current size of the output section.
2853   off_t
2854   current_data_size() const
2855   { return this->current_data_size_for_child(); }
2856
2857   // End of linker script support.
2858
2859   // Save states before doing section layout.
2860   // This is used for relaxation.
2861   void
2862   save_states();
2863
2864   // Restore states prior to section layout.
2865   void
2866   restore_states();
2867
2868   // Discard states.
2869   void
2870   discard_states();
2871
2872   // Convert existing input sections to relaxed input sections.
2873   void
2874   convert_input_sections_to_relaxed_sections(
2875       const std::vector<Output_relaxed_input_section*>& sections);
2876
2877   // Find a relaxed input section to an input section in OBJECT
2878   // with index SHNDX.  Return NULL if none is found.
2879   const Output_relaxed_input_section*
2880   find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
2881   
2882   // Whether section offsets need adjustment due to relaxation.
2883   bool
2884   section_offsets_need_adjustment() const
2885   { return this->section_offsets_need_adjustment_; }
2886
2887   // Set section_offsets_need_adjustment to be true.
2888   void
2889   set_section_offsets_need_adjustment()
2890   { this->section_offsets_need_adjustment_ = true; }
2891
2892   // Adjust section offsets of input sections in this.  This is
2893   // requires if relaxation caused some input sections to change sizes.
2894   void
2895   adjust_section_offsets();
2896
2897   // Whether this is a NOLOAD section.
2898   bool
2899   is_noload() const
2900   { return this->is_noload_; }
2901
2902   // Set NOLOAD flag.
2903   void
2904   set_is_noload()
2905   { this->is_noload_ = true; }
2906
2907   // Print merge statistics to stderr.
2908   void
2909   print_merge_stats();
2910
2911  protected:
2912   // Return the output section--i.e., the object itself.
2913   Output_section*
2914   do_output_section()
2915   { return this; }
2916
2917   const Output_section*
2918   do_output_section() const
2919   { return this; }
2920
2921   // Return the section index in the output file.
2922   unsigned int
2923   do_out_shndx() const
2924   {
2925     gold_assert(this->out_shndx_ != -1U);
2926     return this->out_shndx_;
2927   }
2928
2929   // Set the output section index.
2930   void
2931   do_set_out_shndx(unsigned int shndx)
2932   {
2933     gold_assert(this->out_shndx_ == -1U || this->out_shndx_ == shndx);
2934     this->out_shndx_ = shndx;
2935   }
2936
2937   // Set the final data size of the Output_section.  For a typical
2938   // Output_section, there is nothing to do, but if there are any
2939   // Output_section_data objects we need to set their final addresses
2940   // here.
2941   virtual void
2942   set_final_data_size();
2943
2944   // Reset the address and file offset.
2945   void
2946   do_reset_address_and_file_offset();
2947
2948   // Return true if address and file offset already have reset values. In
2949   // other words, calling reset_address_and_file_offset will not change them.
2950   bool
2951   do_address_and_file_offset_have_reset_values() const;
2952
2953   // Write the data to the file.  For a typical Output_section, this
2954   // does nothing: the data is written out by calling Object::Relocate
2955   // on each input object.  But if there are any Output_section_data
2956   // objects we do need to write them out here.
2957   virtual void
2958   do_write(Output_file*);
2959
2960   // Return the address alignment--function required by parent class.
2961   uint64_t
2962   do_addralign() const
2963   { return this->addralign_; }
2964
2965   // Return whether there is a load address.
2966   bool
2967   do_has_load_address() const
2968   { return this->has_load_address_; }
2969
2970   // Return the load address.
2971   uint64_t
2972   do_load_address() const
2973   {
2974     gold_assert(this->has_load_address_);
2975     return this->load_address_;
2976   }
2977
2978   // Return whether this is an Output_section.
2979   bool
2980   do_is_section() const
2981   { return true; }
2982
2983   // Return whether this is a section of the specified type.
2984   bool
2985   do_is_section_type(elfcpp::Elf_Word type) const
2986   { return this->type_ == type; }
2987
2988   // Return whether the specified section flag is set.
2989   bool
2990   do_is_section_flag_set(elfcpp::Elf_Xword flag) const
2991   { return (this->flags_ & flag) != 0; }
2992
2993   // Set the TLS offset.  Called only for SHT_TLS sections.
2994   void
2995   do_set_tls_offset(uint64_t tls_base);
2996
2997   // Return the TLS offset, relative to the base of the TLS segment.
2998   // Valid only for SHT_TLS sections.
2999   uint64_t
3000   do_tls_offset() const
3001   { return this->tls_offset_; }
3002
3003   // This may be implemented by a child class.
3004   virtual void
3005   do_finalize_name(Layout*)
3006   { }
3007
3008   // Print to the map file.
3009   virtual void
3010   do_print_to_mapfile(Mapfile*) const;
3011
3012   // Record that this section requires postprocessing after all
3013   // relocations have been applied.  This is called by a child class.
3014   void
3015   set_requires_postprocessing()
3016   {
3017     this->requires_postprocessing_ = true;
3018     this->after_input_sections_ = true;
3019   }
3020
3021   // Write all the data of an Output_section into the postprocessing
3022   // buffer.
3023   void
3024   write_to_postprocessing_buffer();
3025
3026   // In some cases we need to keep a list of the input sections
3027   // associated with this output section.  We only need the list if we
3028   // might have to change the offsets of the input section within the
3029   // output section after we add the input section.  The ordinary
3030   // input sections will be written out when we process the object
3031   // file, and as such we don't need to track them here.  We do need
3032   // to track Output_section_data objects here.  We store instances of
3033   // this structure in a std::vector, so it must be a POD.  There can
3034   // be many instances of this structure, so we use a union to save
3035   // some space.
3036   class Input_section
3037   {
3038    public:
3039     Input_section()
3040       : shndx_(0), p2align_(0)
3041     {
3042       this->u1_.data_size = 0;
3043       this->u2_.object = NULL;
3044     }
3045
3046     // For an ordinary input section.
3047     Input_section(Relobj* object, unsigned int shndx, off_t data_size,
3048                   uint64_t addralign)
3049       : shndx_(shndx),
3050         p2align_(ffsll(static_cast<long long>(addralign)))
3051     {
3052       gold_assert(shndx != OUTPUT_SECTION_CODE
3053                   && shndx != MERGE_DATA_SECTION_CODE
3054                   && shndx != MERGE_STRING_SECTION_CODE
3055                   && shndx != RELAXED_INPUT_SECTION_CODE);
3056       this->u1_.data_size = data_size;
3057       this->u2_.object = object;
3058     }
3059
3060     // For a non-merge output section.
3061     Input_section(Output_section_data* posd)
3062       : shndx_(OUTPUT_SECTION_CODE), p2align_(0)
3063     {
3064       this->u1_.data_size = 0;
3065       this->u2_.posd = posd;
3066     }
3067
3068     // For a merge section.
3069     Input_section(Output_section_data* posd, bool is_string, uint64_t entsize)
3070       : shndx_(is_string
3071                ? MERGE_STRING_SECTION_CODE
3072                : MERGE_DATA_SECTION_CODE),
3073         p2align_(0)
3074     {
3075       this->u1_.entsize = entsize;
3076       this->u2_.posd = posd;
3077     }
3078
3079     // For a relaxed input section.
3080     Input_section(Output_relaxed_input_section *psection)
3081       : shndx_(RELAXED_INPUT_SECTION_CODE), p2align_(0)
3082     {
3083       this->u1_.data_size = 0;
3084       this->u2_.poris = psection;
3085     }
3086
3087     // The required alignment.
3088     uint64_t
3089     addralign() const
3090     {
3091       if (!this->is_input_section())
3092         return this->u2_.posd->addralign();
3093       return (this->p2align_ == 0
3094               ? 0
3095               : static_cast<uint64_t>(1) << (this->p2align_ - 1));
3096     }
3097
3098     // Return the required size.
3099     off_t
3100     data_size() const;
3101
3102     // Whether this is an input section.
3103     bool
3104     is_input_section() const
3105     {
3106       return (this->shndx_ != OUTPUT_SECTION_CODE
3107               && this->shndx_ != MERGE_DATA_SECTION_CODE
3108               && this->shndx_ != MERGE_STRING_SECTION_CODE
3109               && this->shndx_ != RELAXED_INPUT_SECTION_CODE);
3110     }
3111
3112     // Return whether this is a merge section which matches the
3113     // parameters.
3114     bool
3115     is_merge_section(bool is_string, uint64_t entsize,
3116                      uint64_t addralign) const
3117     {
3118       return (this->shndx_ == (is_string
3119                                ? MERGE_STRING_SECTION_CODE
3120                                : MERGE_DATA_SECTION_CODE)
3121               && this->u1_.entsize == entsize
3122               && this->addralign() == addralign);
3123     }
3124
3125     // Return whether this is a relaxed input section.
3126     bool
3127     is_relaxed_input_section() const
3128     { return this->shndx_ == RELAXED_INPUT_SECTION_CODE; }
3129
3130     // Return whether this is a generic Output_section_data.
3131     bool
3132     is_output_section_data() const
3133     {
3134       return this->shndx_ == OUTPUT_SECTION_CODE;
3135     }
3136
3137     // Return the object for an input section.
3138     Relobj*
3139     relobj() const
3140     {
3141       if (this->is_input_section())
3142         return this->u2_.object;
3143       else if (this->is_relaxed_input_section())
3144         return this->u2_.poris->relobj();
3145       else
3146         gold_unreachable();
3147     }
3148
3149     // Return the input section index for an input section.
3150     unsigned int
3151     shndx() const
3152     {
3153       if (this->is_input_section())
3154         return this->shndx_;
3155       else if (this->is_relaxed_input_section())
3156         return this->u2_.poris->shndx();
3157       else
3158         gold_unreachable();
3159     }
3160
3161     // For non-input-sections, return the associated Output_section_data
3162     // object.
3163     Output_section_data*
3164     output_section_data() const
3165     {
3166       gold_assert(!this->is_input_section());
3167       return this->u2_.posd;
3168     }
3169  
3170     // Return the Output_relaxed_input_section object.
3171     Output_relaxed_input_section*
3172     relaxed_input_section() const
3173     {
3174       gold_assert(this->is_relaxed_input_section());
3175       return this->u2_.poris;
3176     }
3177
3178     // Set the output section.
3179     void
3180     set_output_section(Output_section* os)
3181     {
3182       gold_assert(!this->is_input_section());
3183       Output_section_data *posd = 
3184         this->is_relaxed_input_section() ? this->u2_.poris : this->u2_.posd;
3185       posd->set_output_section(os);
3186     }
3187
3188     // Set the address and file offset.  This is called during
3189     // Layout::finalize.  SECTION_FILE_OFFSET is the file offset of
3190     // the enclosing section.
3191     void
3192     set_address_and_file_offset(uint64_t address, off_t file_offset,
3193                                 off_t section_file_offset);
3194
3195     // Reset the address and file offset.
3196     void
3197     reset_address_and_file_offset();
3198
3199     // Finalize the data size.
3200     void
3201     finalize_data_size();
3202
3203     // Add an input section, for SHF_MERGE sections.
3204     bool
3205     add_input_section(Relobj* object, unsigned int shndx)
3206     {
3207       gold_assert(this->shndx_ == MERGE_DATA_SECTION_CODE
3208                   || this->shndx_ == MERGE_STRING_SECTION_CODE);
3209       return this->u2_.posd->add_input_section(object, shndx);
3210     }
3211
3212     // Given an input OBJECT, an input section index SHNDX within that
3213     // object, and an OFFSET relative to the start of that input
3214     // section, return whether or not the output offset is known.  If
3215     // this function returns true, it sets *POUTPUT to the offset in
3216     // the output section, relative to the start of the input section
3217     // in the output section.  *POUTPUT may be different from OFFSET
3218     // for a merged section.
3219     bool
3220     output_offset(const Relobj* object, unsigned int shndx,
3221                   section_offset_type offset,
3222                   section_offset_type *poutput) const;
3223
3224     // Return whether this is the merge section for the input section
3225     // SHNDX in OBJECT.
3226     bool
3227     is_merge_section_for(const Relobj* object, unsigned int shndx) const;
3228
3229     // Write out the data.  This does nothing for an input section.
3230     void
3231     write(Output_file*);
3232
3233     // Write the data to a buffer.  This does nothing for an input
3234     // section.
3235     void
3236     write_to_buffer(unsigned char*);
3237
3238     // Print to a map file.
3239     void
3240     print_to_mapfile(Mapfile*) const;
3241
3242     // Print statistics about merge sections to stderr.
3243     void
3244     print_merge_stats(const char* section_name)
3245     {
3246       if (this->shndx_ == MERGE_DATA_SECTION_CODE
3247           || this->shndx_ == MERGE_STRING_SECTION_CODE)
3248         this->u2_.posd->print_merge_stats(section_name);
3249     }
3250
3251    private:
3252     // Code values which appear in shndx_.  If the value is not one of
3253     // these codes, it is the input section index in the object file.
3254     enum
3255     {
3256       // An Output_section_data.
3257       OUTPUT_SECTION_CODE = -1U,
3258       // An Output_section_data for an SHF_MERGE section with
3259       // SHF_STRINGS not set.
3260       MERGE_DATA_SECTION_CODE = -2U,
3261       // An Output_section_data for an SHF_MERGE section with
3262       // SHF_STRINGS set.
3263       MERGE_STRING_SECTION_CODE = -3U,
3264       // An Output_section_data for a relaxed input section.
3265       RELAXED_INPUT_SECTION_CODE = -4U
3266     };
3267
3268     // For an ordinary input section, this is the section index in the
3269     // input file.  For an Output_section_data, this is
3270     // OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
3271     // MERGE_STRING_SECTION_CODE.
3272     unsigned int shndx_;
3273     // The required alignment, stored as a power of 2.
3274     unsigned int p2align_;
3275     union
3276     {
3277       // For an ordinary input section, the section size.
3278       off_t data_size;
3279       // For OUTPUT_SECTION_CODE or RELAXED_INPUT_SECTION_CODE, this is not
3280       // used.  For MERGE_DATA_SECTION_CODE or MERGE_STRING_SECTION_CODE, the
3281       // entity size.
3282       uint64_t entsize;
3283     } u1_;
3284     union
3285     {
3286       // For an ordinary input section, the object which holds the
3287       // input section.
3288       Relobj* object;
3289       // For OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
3290       // MERGE_STRING_SECTION_CODE, the data.
3291       Output_section_data* posd;
3292       // For RELAXED_INPUT_SECTION_CODE, the data.
3293       Output_relaxed_input_section* poris;
3294     } u2_;
3295   };
3296
3297   typedef std::vector<Input_section> Input_section_list;
3298
3299   // Allow a child class to access the input sections.
3300   const Input_section_list&
3301   input_sections() const
3302   { return this->input_sections_; }
3303
3304  private:
3305   // We only save enough information to undo the effects of section layout.
3306   class Checkpoint_output_section
3307   {
3308    public:
3309     Checkpoint_output_section(uint64_t addralign, elfcpp::Elf_Xword flags,
3310                               const Input_section_list& input_sections,
3311                               off_t first_input_offset,
3312                               bool attached_input_sections_are_sorted)
3313       : addralign_(addralign), flags_(flags),
3314         input_sections_(input_sections),
3315         input_sections_size_(input_sections_.size()),
3316         input_sections_copy_(), first_input_offset_(first_input_offset),
3317         attached_input_sections_are_sorted_(attached_input_sections_are_sorted)
3318     { }
3319
3320     virtual
3321     ~Checkpoint_output_section()
3322     { }
3323
3324     // Return the address alignment.
3325     uint64_t
3326     addralign() const
3327     { return this->addralign_; }
3328
3329     // Return the section flags.
3330     elfcpp::Elf_Xword
3331     flags() const
3332     { return this->flags_; }
3333
3334     // Return a reference to the input section list copy.
3335     Input_section_list*
3336     input_sections()
3337     { return &this->input_sections_copy_; }
3338
3339     // Return the size of input_sections at the time when checkpoint is
3340     // taken.
3341     size_t
3342     input_sections_size() const
3343     { return this->input_sections_size_; }
3344
3345     // Whether input sections are copied.
3346     bool
3347     input_sections_saved() const
3348     { return this->input_sections_copy_.size() == this->input_sections_size_; }
3349
3350     off_t
3351     first_input_offset() const
3352     { return this->first_input_offset_; }
3353
3354     bool
3355     attached_input_sections_are_sorted() const
3356     { return this->attached_input_sections_are_sorted_; }
3357
3358     // Save input sections.
3359     void
3360     save_input_sections()
3361     {
3362       this->input_sections_copy_.reserve(this->input_sections_size_);
3363       this->input_sections_copy_.clear();
3364       Input_section_list::const_iterator p = this->input_sections_.begin();
3365       gold_assert(this->input_sections_size_ >= this->input_sections_.size());
3366       for(size_t i = 0; i < this->input_sections_size_ ; i++, ++p)
3367         this->input_sections_copy_.push_back(*p);
3368     }
3369
3370    private:
3371     // The section alignment.
3372     uint64_t addralign_;
3373     // The section flags.
3374     elfcpp::Elf_Xword flags_;
3375     // Reference to the input sections to be checkpointed.
3376     const Input_section_list& input_sections_;
3377     // Size of the checkpointed portion of input_sections_;
3378     size_t input_sections_size_;
3379     // Copy of input sections.
3380     Input_section_list input_sections_copy_;
3381     // The offset of the first entry in input_sections_.
3382     off_t first_input_offset_;
3383     // True if the input sections attached to this output section have
3384     // already been sorted.
3385     bool attached_input_sections_are_sorted_;
3386   };
3387
3388   // This class is used to sort the input sections.
3389   class Input_section_sort_entry;
3390
3391   // This is the sort comparison function for ctors and dtors.
3392   struct Input_section_sort_compare
3393   {
3394     bool
3395     operator()(const Input_section_sort_entry&,
3396                const Input_section_sort_entry&) const;
3397   };
3398
3399   // This is the sort comparison function for .init_array and .fini_array.
3400   struct Input_section_sort_init_fini_compare
3401   {
3402     bool
3403     operator()(const Input_section_sort_entry&,
3404                const Input_section_sort_entry&) const;
3405   };
3406
3407   // Fill data.  This is used to fill in data between input sections.
3408   // It is also used for data statements (BYTE, WORD, etc.) in linker
3409   // scripts.  When we have to keep track of the input sections, we
3410   // can use an Output_data_const, but we don't want to have to keep
3411   // track of input sections just to implement fills.
3412   class Fill
3413   {
3414    public:
3415     Fill(off_t section_offset, off_t length)
3416       : section_offset_(section_offset),
3417         length_(convert_to_section_size_type(length))
3418     { }
3419
3420     // Return section offset.
3421     off_t
3422     section_offset() const
3423     { return this->section_offset_; }
3424
3425     // Return fill length.
3426     section_size_type
3427     length() const
3428     { return this->length_; }
3429
3430    private:
3431     // The offset within the output section.
3432     off_t section_offset_;
3433     // The length of the space to fill.
3434     section_size_type length_;
3435   };
3436
3437   typedef std::vector<Fill> Fill_list;
3438
3439   // This class describes properties of merge data sections.  It is used
3440   // as a key type for maps.
3441   class Merge_section_properties
3442   {
3443    public:
3444     Merge_section_properties(bool is_string, uint64_t entsize,
3445                              uint64_t addralign)
3446       : is_string_(is_string), entsize_(entsize), addralign_(addralign)
3447     { }
3448
3449     // Whether this equals to another Merge_section_properties MSP.
3450     bool
3451     eq(const Merge_section_properties& msp) const
3452     {
3453       return ((this->is_string_ == msp.is_string_)
3454               && (this->entsize_ == msp.entsize_)
3455               && (this->addralign_ == msp.addralign_));
3456     }
3457
3458     // Compute a hash value for this using 64-bit FNV-1a hash.
3459     size_t
3460     hash_value() const
3461     {
3462       uint64_t h = 14695981039346656037ULL;     // FNV offset basis.
3463       uint64_t prime = 1099511628211ULL;
3464       h = (h ^ static_cast<uint64_t>(this->is_string_)) * prime;
3465       h = (h ^ static_cast<uint64_t>(this->entsize_)) * prime;
3466       h = (h ^ static_cast<uint64_t>(this->addralign_)) * prime;
3467       return h;
3468     }
3469     
3470     // Functors for associative containers.
3471     struct equal_to
3472     {
3473       bool
3474       operator()(const Merge_section_properties& msp1,
3475                  const Merge_section_properties& msp2) const
3476       { return msp1.eq(msp2); }
3477     };
3478
3479     struct hash
3480     {
3481       size_t
3482       operator()(const Merge_section_properties& msp) const
3483       { return msp.hash_value(); }
3484     };
3485
3486    private:
3487     // Whether this merge data section is for strings.
3488     bool is_string_;
3489     // Entsize of this merge data section.
3490     uint64_t entsize_;
3491     // Address alignment.
3492     uint64_t addralign_;
3493   };
3494
3495   // Map that link Merge_section_properties to Output_merge_base.
3496   typedef Unordered_map<Merge_section_properties, Output_merge_base*,
3497                         Merge_section_properties::hash,
3498                         Merge_section_properties::equal_to>
3499     Merge_section_by_properties_map;
3500
3501   // Map that link Const_section_id to Output_section_data.
3502   typedef Unordered_map<Const_section_id, Output_section_data*,
3503                         Const_section_id_hash>
3504     Output_section_data_by_input_section_map;
3505
3506   // Map that link Const_section_id to Output_relaxed_input_section.
3507   typedef Unordered_map<Const_section_id, Output_relaxed_input_section*,
3508                         Const_section_id_hash>
3509     Output_relaxed_input_section_by_input_section_map;
3510
3511   // Map used during relaxation of existing sections.  This map
3512   // a section id an input section list index.  We assume that
3513   // Input_section_list is a vector.
3514   typedef Unordered_map<Section_id, size_t, Section_id_hash> Relaxation_map;
3515
3516   // Add a new output section by Input_section.
3517   void
3518   add_output_section_data(Input_section*);
3519
3520   // Add an SHF_MERGE input section.  Returns true if the section was
3521   // handled.
3522   bool
3523   add_merge_input_section(Relobj* object, unsigned int shndx, uint64_t flags,
3524                           uint64_t entsize, uint64_t addralign);
3525
3526   // Add an output SHF_MERGE section POSD to this output section.
3527   // IS_STRING indicates whether it is a SHF_STRINGS section, and
3528   // ENTSIZE is the entity size.  This returns the entry added to
3529   // input_sections_.
3530   void
3531   add_output_merge_section(Output_section_data* posd, bool is_string,
3532                            uint64_t entsize);
3533
3534   // Sort the attached input sections.
3535   void
3536   sort_attached_input_sections();
3537
3538   // Find the merge section into which an input section with index SHNDX in
3539   // OBJECT has been added.  Return NULL if none found.
3540   Output_section_data*
3541   find_merge_section(const Relobj* object, unsigned int shndx) const;
3542
3543   // Build a relaxation map.
3544   void
3545   build_relaxation_map(
3546       const Input_section_list& input_sections,
3547       size_t limit,
3548       Relaxation_map* map) const;
3549
3550   // Convert input sections in an input section list into relaxed sections.
3551   void
3552   convert_input_sections_in_list_to_relaxed_sections(
3553       const std::vector<Output_relaxed_input_section*>& relaxed_sections,
3554       const Relaxation_map& map,
3555       Input_section_list* input_sections);
3556
3557   // Most of these fields are only valid after layout.
3558
3559   // The name of the section.  This will point into a Stringpool.
3560   const char* name_;
3561   // The section address is in the parent class.
3562   // The section alignment.
3563   uint64_t addralign_;
3564   // The section entry size.
3565   uint64_t entsize_;
3566   // The load address.  This is only used when using a linker script
3567   // with a SECTIONS clause.  The has_load_address_ field indicates
3568   // whether this field is valid.
3569   uint64_t load_address_;
3570   // The file offset is in the parent class.
3571   // Set the section link field to the index of this section.
3572   const Output_data* link_section_;
3573   // If link_section_ is NULL, this is the link field.
3574   unsigned int link_;
3575   // Set the section info field to the index of this section.
3576   const Output_section* info_section_;
3577   // If info_section_ is NULL, set the info field to the symbol table
3578   // index of this symbol.
3579   const Symbol* info_symndx_;
3580   // If info_section_ and info_symndx_ are NULL, this is the section
3581   // info field.
3582   unsigned int info_;
3583   // The section type.
3584   const elfcpp::Elf_Word type_;
3585   // The section flags.
3586   elfcpp::Elf_Xword flags_;
3587   // The section index.
3588   unsigned int out_shndx_;
3589   // If there is a STT_SECTION for this output section in the normal
3590   // symbol table, this is the symbol index.  This starts out as zero.
3591   // It is initialized in Layout::finalize() to be the index, or -1U
3592   // if there isn't one.
3593   unsigned int symtab_index_;
3594   // If there is a STT_SECTION for this output section in the dynamic
3595   // symbol table, this is the symbol index.  This starts out as zero.
3596   // It is initialized in Layout::finalize() to be the index, or -1U
3597   // if there isn't one.
3598   unsigned int dynsym_index_;
3599   // The input sections.  This will be empty in cases where we don't
3600   // need to keep track of them.
3601   Input_section_list input_sections_;
3602   // The offset of the first entry in input_sections_.
3603   off_t first_input_offset_;
3604   // The fill data.  This is separate from input_sections_ because we
3605   // often will need fill sections without needing to keep track of
3606   // input sections.
3607   Fill_list fills_;
3608   // If the section requires postprocessing, this buffer holds the
3609   // section contents during relocation.
3610   unsigned char* postprocessing_buffer_;
3611   // Whether this output section needs a STT_SECTION symbol in the
3612   // normal symbol table.  This will be true if there is a relocation
3613   // which needs it.
3614   bool needs_symtab_index_ : 1;
3615   // Whether this output section needs a STT_SECTION symbol in the
3616   // dynamic symbol table.  This will be true if there is a dynamic
3617   // relocation which needs it.
3618   bool needs_dynsym_index_ : 1;
3619   // Whether the link field of this output section should point to the
3620   // normal symbol table.
3621   bool should_link_to_symtab_ : 1;
3622   // Whether the link field of this output section should point to the
3623   // dynamic symbol table.
3624   bool should_link_to_dynsym_ : 1;
3625   // Whether this section should be written after all the input
3626   // sections are complete.
3627   bool after_input_sections_ : 1;
3628   // Whether this section requires post processing after all
3629   // relocations have been applied.
3630   bool requires_postprocessing_ : 1;
3631   // Whether an input section was mapped to this output section
3632   // because of a SECTIONS clause in a linker script.
3633   bool found_in_sections_clause_ : 1;
3634   // Whether this section has an explicitly specified load address.
3635   bool has_load_address_ : 1;
3636   // True if the info_section_ field means the section index of the
3637   // section, false if it means the symbol index of the corresponding
3638   // section symbol.
3639   bool info_uses_section_index_ : 1;
3640   // True if the input sections attached to this output section may
3641   // need sorting.
3642   bool may_sort_attached_input_sections_ : 1;
3643   // True if the input sections attached to this output section must
3644   // be sorted.
3645   bool must_sort_attached_input_sections_ : 1;
3646   // True if the input sections attached to this output section have
3647   // already been sorted.
3648   bool attached_input_sections_are_sorted_ : 1;
3649   // True if this section holds relro data.
3650   bool is_relro_ : 1;
3651   // True if this section holds relro local data.
3652   bool is_relro_local_ : 1;
3653   // True if this must be the last relro section.
3654   bool is_last_relro_ : 1;
3655   // True if this must be the first section after the relro sections.
3656   bool is_first_non_relro_ : 1;
3657   // True if this is a small section.
3658   bool is_small_section_ : 1;
3659   // True if this is a large section.
3660   bool is_large_section_ : 1;
3661   // True if this is the .interp section going into the PT_INTERP
3662   // segment.
3663   bool is_interp_ : 1;
3664   // True if this is section is read by the dynamic linker.
3665   bool is_dynamic_linker_section_ : 1;
3666   // Whether code-fills are generated at write.
3667   bool generate_code_fills_at_write_ : 1;
3668   // Whether the entry size field should be zero.
3669   bool is_entsize_zero_ : 1;
3670   // Whether section offsets need adjustment due to relaxation.
3671   bool section_offsets_need_adjustment_ : 1;
3672   // Whether this is a NOLOAD section.
3673   bool is_noload_ : 1;
3674   // For SHT_TLS sections, the offset of this section relative to the base
3675   // of the TLS segment.
3676   uint64_t tls_offset_;
3677   // Saved checkpoint.
3678   Checkpoint_output_section* checkpoint_;
3679   // Map from input sections to merge sections.
3680   Output_section_data_by_input_section_map merge_section_map_;
3681   // Map from merge section properties to merge_sections;
3682   Merge_section_by_properties_map merge_section_by_properties_map_;
3683   // Map from input sections to relaxed input sections.  This is mutable
3684   // because it is updated lazily.  We may need to update it in a
3685   // const qualified method.
3686   mutable Output_relaxed_input_section_by_input_section_map
3687     relaxed_input_section_map_;
3688   // Whether relaxed_input_section_map_ is valid.
3689   mutable bool is_relaxed_input_section_map_valid_;
3690 };
3691
3692 // An output segment.  PT_LOAD segments are built from collections of
3693 // output sections.  Other segments typically point within PT_LOAD
3694 // segments, and are built directly as needed.
3695 //
3696 // NOTE: We want to use the copy constructor for this class.  During
3697 // relaxation, we may try built the segments multiple times.  We do
3698 // that by copying the original segment list before lay-out, doing
3699 // a trial lay-out and roll-back to the saved copied if we need to
3700 // to the lay-out again.
3701
3702 class Output_segment
3703 {
3704  public:
3705   // Create an output segment, specifying the type and flags.
3706   Output_segment(elfcpp::Elf_Word, elfcpp::Elf_Word);
3707
3708   // Return the virtual address.
3709   uint64_t
3710   vaddr() const
3711   { return this->vaddr_; }
3712
3713   // Return the physical address.
3714   uint64_t
3715   paddr() const
3716   { return this->paddr_; }
3717
3718   // Return the segment type.
3719   elfcpp::Elf_Word
3720   type() const
3721   { return this->type_; }
3722
3723   // Return the segment flags.
3724   elfcpp::Elf_Word
3725   flags() const
3726   { return this->flags_; }
3727
3728   // Return the memory size.
3729   uint64_t
3730   memsz() const
3731   { return this->memsz_; }
3732
3733   // Return the file size.
3734   off_t
3735   filesz() const
3736   { return this->filesz_; }
3737
3738   // Return the file offset.
3739   off_t
3740   offset() const
3741   { return this->offset_; }
3742
3743   // Whether this is a segment created to hold large data sections.
3744   bool
3745   is_large_data_segment() const
3746   { return this->is_large_data_segment_; }
3747
3748   // Record that this is a segment created to hold large data
3749   // sections.
3750   void
3751   set_is_large_data_segment()
3752   { this->is_large_data_segment_ = true; }
3753
3754   // Return the maximum alignment of the Output_data.
3755   uint64_t
3756   maximum_alignment();
3757
3758   // Add the Output_section OS to this segment.  SEG_FLAGS is the
3759   // segment flags to use.  DO_SORT is true if we should sort the
3760   // placement of the input section for more efficient generated code.
3761   void
3762   add_output_section(Output_section* os, elfcpp::Elf_Word seg_flags,
3763                      bool do_sort);
3764
3765   // Remove an Output_section from this segment.  It is an error if it
3766   // is not present.
3767   void
3768   remove_output_section(Output_section* os);
3769
3770   // Add an Output_data (which need not be an Output_section) to the
3771   // start of this segment.
3772   void
3773   add_initial_output_data(Output_data*);
3774
3775   // Return true if this segment has any sections which hold actual
3776   // data, rather than being a BSS section.
3777   bool
3778   has_any_data_sections() const
3779   { return !this->output_data_.empty(); }
3780
3781   // Return the number of dynamic relocations applied to this segment.
3782   unsigned int
3783   dynamic_reloc_count() const;
3784
3785   // Return the address of the first section.
3786   uint64_t
3787   first_section_load_address() const;
3788
3789   // Return whether the addresses have been set already.
3790   bool
3791   are_addresses_set() const
3792   { return this->are_addresses_set_; }
3793
3794   // Set the addresses.
3795   void
3796   set_addresses(uint64_t vaddr, uint64_t paddr)
3797   {
3798     this->vaddr_ = vaddr;
3799     this->paddr_ = paddr;
3800     this->are_addresses_set_ = true;
3801   }
3802
3803   // Update the flags for the flags of an output section added to this
3804   // segment.
3805   void
3806   update_flags_for_output_section(elfcpp::Elf_Xword flags)
3807   {
3808     // The ELF ABI specifies that a PT_TLS segment should always have
3809     // PF_R as the flags.
3810     if (this->type() != elfcpp::PT_TLS)
3811       this->flags_ |= flags;
3812   }
3813
3814   // Set the segment flags.  This is only used if we have a PHDRS
3815   // clause which explicitly specifies the flags.
3816   void
3817   set_flags(elfcpp::Elf_Word flags)
3818   { this->flags_ = flags; }
3819
3820   // Set the address of the segment to ADDR and the offset to *POFF
3821   // and set the addresses and offsets of all contained output
3822   // sections accordingly.  Set the section indexes of all contained
3823   // output sections starting with *PSHNDX.  If RESET is true, first
3824   // reset the addresses of the contained sections.  Return the
3825   // address of the immediately following segment.  Update *POFF and
3826   // *PSHNDX.  This should only be called for a PT_LOAD segment.
3827   uint64_t
3828   set_section_addresses(const Layout*, bool reset, uint64_t addr,
3829                         unsigned int increase_relro, off_t* poff,
3830                         unsigned int* pshndx);
3831
3832   // Set the minimum alignment of this segment.  This may be adjusted
3833   // upward based on the section alignments.
3834   void
3835   set_minimum_p_align(uint64_t align)
3836   { this->min_p_align_ = align; }
3837
3838   // Set the offset of this segment based on the section.  This should
3839   // only be called for a non-PT_LOAD segment.
3840   void
3841   set_offset(unsigned int increase);
3842
3843   // Set the TLS offsets of the sections contained in the PT_TLS segment.
3844   void
3845   set_tls_offsets();
3846
3847   // Return the number of output sections.
3848   unsigned int
3849   output_section_count() const;
3850
3851   // Return the section attached to the list segment with the lowest
3852   // load address.  This is used when handling a PHDRS clause in a
3853   // linker script.
3854   Output_section*
3855   section_with_lowest_load_address() const;
3856
3857   // Write the segment header into *OPHDR.
3858   template<int size, bool big_endian>
3859   void
3860   write_header(elfcpp::Phdr_write<size, big_endian>*);
3861
3862   // Write the section headers of associated sections into V.
3863   template<int size, bool big_endian>
3864   unsigned char*
3865   write_section_headers(const Layout*, const Stringpool*, unsigned char* v,
3866                         unsigned int* pshndx) const;
3867
3868   // Print the output sections in the map file.
3869   void
3870   print_sections_to_mapfile(Mapfile*) const;
3871
3872  private:
3873   typedef std::list<Output_data*> Output_data_list;
3874
3875   // Find the maximum alignment in an Output_data_list.
3876   static uint64_t
3877   maximum_alignment_list(const Output_data_list*);
3878
3879   // Return whether the first data section is a relro section.
3880   bool
3881   is_first_section_relro() const;
3882
3883   // Set the section addresses in an Output_data_list.
3884   uint64_t
3885   set_section_list_addresses(const Layout*, bool reset, Output_data_list*,
3886                              uint64_t addr, off_t* poff, unsigned int* pshndx,
3887                              bool* in_tls);
3888
3889   // Return the number of Output_sections in an Output_data_list.
3890   unsigned int
3891   output_section_count_list(const Output_data_list*) const;
3892
3893   // Return the number of dynamic relocs in an Output_data_list.
3894   unsigned int
3895   dynamic_reloc_count_list(const Output_data_list*) const;
3896
3897   // Find the section with the lowest load address in an
3898   // Output_data_list.
3899   void
3900   lowest_load_address_in_list(const Output_data_list* pdl,
3901                               Output_section** found,
3902                               uint64_t* found_lma) const;
3903
3904   // Write the section headers in the list into V.
3905   template<int size, bool big_endian>
3906   unsigned char*
3907   write_section_headers_list(const Layout*, const Stringpool*,
3908                              const Output_data_list*, unsigned char* v,
3909                              unsigned int* pshdx) const;
3910
3911   // Print a section list to the mapfile.
3912   void
3913   print_section_list_to_mapfile(Mapfile*, const Output_data_list*) const;
3914
3915   // NOTE: We want to use the copy constructor.  Currently, shallow copy
3916   // works for us so we do not need to write our own copy constructor.
3917   
3918   // The list of output data with contents attached to this segment.
3919   Output_data_list output_data_;
3920   // The list of output data without contents attached to this segment.
3921   Output_data_list output_bss_;
3922   // The segment virtual address.
3923   uint64_t vaddr_;
3924   // The segment physical address.
3925   uint64_t paddr_;
3926   // The size of the segment in memory.
3927   uint64_t memsz_;
3928   // The maximum section alignment.  The is_max_align_known_ field
3929   // indicates whether this has been finalized.
3930   uint64_t max_align_;
3931   // The required minimum value for the p_align field.  This is used
3932   // for PT_LOAD segments.  Note that this does not mean that
3933   // addresses should be aligned to this value; it means the p_paddr
3934   // and p_vaddr fields must be congruent modulo this value.  For
3935   // non-PT_LOAD segments, the dynamic linker works more efficiently
3936   // if the p_align field has the more conventional value, although it
3937   // can align as needed.
3938   uint64_t min_p_align_;
3939   // The offset of the segment data within the file.
3940   off_t offset_;
3941   // The size of the segment data in the file.
3942   off_t filesz_;
3943   // The segment type;
3944   elfcpp::Elf_Word type_;
3945   // The segment flags.
3946   elfcpp::Elf_Word flags_;
3947   // Whether we have finalized max_align_.
3948   bool is_max_align_known_ : 1;
3949   // Whether vaddr and paddr were set by a linker script.
3950   bool are_addresses_set_ : 1;
3951   // Whether this segment holds large data sections.
3952   bool is_large_data_segment_ : 1;
3953 };
3954
3955 // This class represents the output file.
3956
3957 class Output_file
3958 {
3959  public:
3960   Output_file(const char* name);
3961
3962   // Indicate that this is a temporary file which should not be
3963   // output.
3964   void
3965   set_is_temporary()
3966   { this->is_temporary_ = true; }
3967
3968   // Try to open an existing file. Returns false if the file doesn't
3969   // exist, has a size of 0 or can't be mmaped.  This method is
3970   // thread-unsafe.
3971   bool
3972   open_for_modification();
3973
3974   // Open the output file.  FILE_SIZE is the final size of the file.
3975   // If the file already exists, it is deleted/truncated.  This method
3976   // is thread-unsafe.
3977   void
3978   open(off_t file_size);
3979
3980   // Resize the output file.  This method is thread-unsafe.
3981   void
3982   resize(off_t file_size);
3983
3984   // Close the output file (flushing all buffered data) and make sure
3985   // there are no errors.  This method is thread-unsafe.
3986   void
3987   close();
3988
3989   // Return the size of this file.
3990   off_t
3991   filesize()
3992   { return this->file_size_; }
3993
3994   // Return the name of this file.
3995   const char*
3996   filename()
3997   { return this->name_; }
3998
3999   // We currently always use mmap which makes the view handling quite
4000   // simple.  In the future we may support other approaches.
4001
4002   // Write data to the output file.
4003   void
4004   write(off_t offset, const void* data, size_t len)
4005   { memcpy(this->base_ + offset, data, len); }
4006
4007   // Get a buffer to use to write to the file, given the offset into
4008   // the file and the size.
4009   unsigned char*
4010   get_output_view(off_t start, size_t size)
4011   {
4012     gold_assert(start >= 0
4013                 && start + static_cast<off_t>(size) <= this->file_size_);
4014     return this->base_ + start;
4015   }
4016
4017   // VIEW must have been returned by get_output_view.  Write the
4018   // buffer to the file, passing in the offset and the size.
4019   void
4020   write_output_view(off_t, size_t, unsigned char*)
4021   { }
4022
4023   // Get a read/write buffer.  This is used when we want to write part
4024   // of the file, read it in, and write it again.
4025   unsigned char*
4026   get_input_output_view(off_t start, size_t size)
4027   { return this->get_output_view(start, size); }
4028
4029   // Write a read/write buffer back to the file.
4030   void
4031   write_input_output_view(off_t, size_t, unsigned char*)
4032   { }
4033
4034   // Get a read buffer.  This is used when we just want to read part
4035   // of the file back it in.
4036   const unsigned char*
4037   get_input_view(off_t start, size_t size)
4038   { return this->get_output_view(start, size); }
4039
4040   // Release a read bfufer.
4041   void
4042   free_input_view(off_t, size_t, const unsigned char*)
4043   { }
4044
4045  private:
4046   // Map the file into memory or, if that fails, allocate anonymous
4047   // memory.
4048   void
4049   map();
4050
4051   // Allocate anonymous memory for the file.
4052   bool
4053   map_anonymous();
4054
4055   // Map the file into memory.
4056   bool
4057   map_no_anonymous();
4058
4059   // Unmap the file from memory (and flush to disk buffers).
4060   void
4061   unmap();
4062
4063   // File name.
4064   const char* name_;
4065   // File descriptor.
4066   int o_;
4067   // File size.
4068   off_t file_size_;
4069   // Base of file mapped into memory.
4070   unsigned char* base_;
4071   // True iff base_ points to a memory buffer rather than an output file.
4072   bool map_is_anonymous_;
4073   // True if this is a temporary file which should not be output.
4074   bool is_temporary_;
4075 };
4076
4077 } // End namespace gold.
4078
4079 #endif // !defined(GOLD_OUTPUT_H)