* gold.h (is_wildcard_string): New function.
[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 // This class describes properties of merge data sections.  It is used
2318 // as a key type for maps.
2319 class Merge_section_properties
2320 {
2321  public:
2322   Merge_section_properties(bool is_string, uint64_t entsize,
2323                              uint64_t addralign)
2324     : is_string_(is_string), entsize_(entsize), addralign_(addralign)
2325   { }
2326
2327   // Whether this equals to another Merge_section_properties MSP.
2328   bool
2329   eq(const Merge_section_properties& msp) const
2330   {
2331     return ((this->is_string_ == msp.is_string_)
2332             && (this->entsize_ == msp.entsize_)
2333             && (this->addralign_ == msp.addralign_));
2334   }
2335
2336   // Compute a hash value for this using 64-bit FNV-1a hash.
2337   size_t
2338   hash_value() const
2339   {
2340     uint64_t h = 14695981039346656037ULL;       // FNV offset basis.
2341     uint64_t prime = 1099511628211ULL;
2342     h = (h ^ static_cast<uint64_t>(this->is_string_)) * prime;
2343     h = (h ^ static_cast<uint64_t>(this->entsize_)) * prime;
2344     h = (h ^ static_cast<uint64_t>(this->addralign_)) * prime;
2345     return h;
2346   }
2347     
2348   // Functors for associative containers.
2349   struct equal_to
2350   {
2351     bool
2352     operator()(const Merge_section_properties& msp1,
2353                const Merge_section_properties& msp2) const
2354     { return msp1.eq(msp2); }
2355   };
2356
2357   struct hash
2358   {
2359     size_t
2360     operator()(const Merge_section_properties& msp) const
2361     { return msp.hash_value(); }
2362   };
2363
2364  private:
2365   // Whether this merge data section is for strings.
2366   bool is_string_;
2367   // Entsize of this merge data section.
2368   uint64_t entsize_;
2369   // Address alignment.
2370   uint64_t addralign_;
2371 };
2372
2373 // This class is used to speed up look up of special input sections in an
2374 // Output_section.
2375
2376 class Output_section_lookup_maps
2377 {
2378  public:
2379   Output_section_lookup_maps()
2380     : is_valid_(true), merge_sections_by_properties_(),
2381       merge_sections_by_id_(), relaxed_input_sections_by_id_()
2382   { }
2383
2384   // Whether the maps are valid.
2385   bool
2386   is_valid() const
2387   { return this->is_valid_; }
2388
2389   // Invalidate the maps.
2390   void
2391   invalidate()
2392   { this->is_valid_ = false; }
2393
2394   // Clear the maps.
2395   void
2396   clear()
2397   {
2398     this->merge_sections_by_properties_.clear();
2399     this->merge_sections_by_id_.clear();
2400     this->relaxed_input_sections_by_id_.clear();
2401     // A cleared map is valid.
2402     this->is_valid_ = true;
2403   }
2404   
2405   // Find a merge section by merge section properties.  Return NULL if none
2406   // is found.
2407   Output_merge_base*
2408   find_merge_section(const Merge_section_properties& msp) const
2409   {
2410     gold_assert(this->is_valid_);
2411     Merge_sections_by_properties::const_iterator p =
2412       this->merge_sections_by_properties_.find(msp);
2413     return p != this->merge_sections_by_properties_.end() ? p->second : NULL;
2414   }
2415
2416   // Find a merge section by section ID of a merge input section.  Return NULL
2417   // if none is found.
2418   Output_merge_base*
2419   find_merge_section(const Object* object, unsigned int shndx) const
2420   {
2421     gold_assert(this->is_valid_);
2422     Merge_sections_by_id::const_iterator p =
2423       this->merge_sections_by_id_.find(Const_section_id(object, shndx));
2424     return p != this->merge_sections_by_id_.end() ? p->second : NULL;
2425   }
2426
2427   // Add a merge section pointed by POMB with properties MSP.
2428   void
2429   add_merge_section(const Merge_section_properties& msp,
2430                     Output_merge_base* pomb)
2431   {
2432     std::pair<Merge_section_properties, Output_merge_base*> value(msp, pomb);
2433     std::pair<Merge_sections_by_properties::iterator, bool> result =
2434       this->merge_sections_by_properties_.insert(value);
2435     gold_assert(value.second);
2436   }
2437   
2438   // Add a mapping from a merged input section in OBJECT with index SHNDX
2439   // to a merge output section pointed by POMB.
2440   void
2441   add_merge_input_section(const Object* object, unsigned int shndx,
2442                           Output_merge_base* pomb)
2443   {
2444     Const_section_id csid(object, shndx);
2445     std::pair<Const_section_id, Output_merge_base*> value(csid, pomb);
2446     std::pair<Merge_sections_by_id::iterator, bool> result =
2447       this->merge_sections_by_id_.insert(value);
2448     gold_assert(value.second);
2449   }
2450
2451   // Find a relaxed input section of OBJECT with index SHNDX.
2452   Output_relaxed_input_section*
2453   find_relaxed_input_section(const Object* object, unsigned int shndx) const
2454   {
2455     gold_assert(this->is_valid_);
2456     Relaxed_input_sections_by_id::const_iterator p =
2457       this->relaxed_input_sections_by_id_.find(Const_section_id(object, shndx));
2458     return p != this->relaxed_input_sections_by_id_.end() ? p->second : NULL;
2459   }
2460
2461   // Add a relaxed input section pointed by POMB and whose original input
2462   // section is in OBJECT with index SHNDX.
2463   void
2464   add_relaxed_input_section(const Relobj* relobj, unsigned int shndx,
2465                             Output_relaxed_input_section* poris)
2466   {
2467     Const_section_id csid(relobj, shndx);
2468     std::pair<Const_section_id, Output_relaxed_input_section*>
2469       value(csid, poris);
2470     std::pair<Relaxed_input_sections_by_id::iterator, bool> result =
2471       this->relaxed_input_sections_by_id_.insert(value);
2472     gold_assert(value.second);
2473   }
2474
2475  private:
2476   typedef Unordered_map<Const_section_id, Output_merge_base*,
2477                         Const_section_id_hash>
2478     Merge_sections_by_id;
2479
2480   typedef Unordered_map<Merge_section_properties, Output_merge_base*,
2481                         Merge_section_properties::hash,
2482                         Merge_section_properties::equal_to>
2483     Merge_sections_by_properties;
2484
2485   typedef Unordered_map<Const_section_id, Output_relaxed_input_section*,
2486                         Const_section_id_hash>
2487     Relaxed_input_sections_by_id;
2488
2489   // Whether this is valid
2490   bool is_valid_;
2491   // Merge sections by merge section properties.
2492   Merge_sections_by_properties merge_sections_by_properties_;
2493   // Merge sections by section IDs.
2494   Merge_sections_by_id merge_sections_by_id_;
2495   // Relaxed sections by section IDs.
2496   Relaxed_input_sections_by_id relaxed_input_sections_by_id_;
2497 };
2498
2499 // An output section.  We don't expect to have too many output
2500 // sections, so we don't bother to do a template on the size.
2501
2502 class Output_section : public Output_data
2503 {
2504  public:
2505   // Create an output section, giving the name, type, and flags.
2506   Output_section(const char* name, elfcpp::Elf_Word, elfcpp::Elf_Xword);
2507   virtual ~Output_section();
2508
2509   // Add a new input section SHNDX, named NAME, with header SHDR, from
2510   // object OBJECT.  RELOC_SHNDX is the index of a relocation section
2511   // which applies to this section, or 0 if none, or -1 if more than
2512   // one.  HAVE_SECTIONS_SCRIPT is true if we have a SECTIONS clause
2513   // in a linker script; in that case we need to keep track of input
2514   // sections associated with an output section.  Return the offset
2515   // within the output section.
2516   template<int size, bool big_endian>
2517   off_t
2518   add_input_section(Layout* layout, Sized_relobj<size, big_endian>* object,
2519                     unsigned int shndx, const char *name,
2520                     const elfcpp::Shdr<size, big_endian>& shdr,
2521                     unsigned int reloc_shndx, bool have_sections_script);
2522
2523   // Add generated data POSD to this output section.
2524   void
2525   add_output_section_data(Output_section_data* posd);
2526
2527   // Add a relaxed input section PORIS to this output section.
2528   void
2529   add_relaxed_input_section(Output_relaxed_input_section* poris);
2530
2531   // Return the section name.
2532   const char*
2533   name() const
2534   { return this->name_; }
2535
2536   // Return the section type.
2537   elfcpp::Elf_Word
2538   type() const
2539   { return this->type_; }
2540
2541   // Return the section flags.
2542   elfcpp::Elf_Xword
2543   flags() const
2544   { return this->flags_; }
2545
2546   // Update the output section flags based on input section flags.
2547   void
2548   update_flags_for_input_section(elfcpp::Elf_Xword flags);
2549
2550   // Return the entsize field.
2551   uint64_t
2552   entsize() const
2553   { return this->entsize_; }
2554
2555   // Set the entsize field.
2556   void
2557   set_entsize(uint64_t v);
2558
2559   // Set the load address.
2560   void
2561   set_load_address(uint64_t load_address)
2562   {
2563     this->load_address_ = load_address;
2564     this->has_load_address_ = true;
2565   }
2566
2567   // Set the link field to the output section index of a section.
2568   void
2569   set_link_section(const Output_data* od)
2570   {
2571     gold_assert(this->link_ == 0
2572                 && !this->should_link_to_symtab_
2573                 && !this->should_link_to_dynsym_);
2574     this->link_section_ = od;
2575   }
2576
2577   // Set the link field to a constant.
2578   void
2579   set_link(unsigned int v)
2580   {
2581     gold_assert(this->link_section_ == NULL
2582                 && !this->should_link_to_symtab_
2583                 && !this->should_link_to_dynsym_);
2584     this->link_ = v;
2585   }
2586
2587   // Record that this section should link to the normal symbol table.
2588   void
2589   set_should_link_to_symtab()
2590   {
2591     gold_assert(this->link_section_ == NULL
2592                 && this->link_ == 0
2593                 && !this->should_link_to_dynsym_);
2594     this->should_link_to_symtab_ = true;
2595   }
2596
2597   // Record that this section should link to the dynamic symbol table.
2598   void
2599   set_should_link_to_dynsym()
2600   {
2601     gold_assert(this->link_section_ == NULL
2602                 && this->link_ == 0
2603                 && !this->should_link_to_symtab_);
2604     this->should_link_to_dynsym_ = true;
2605   }
2606
2607   // Return the info field.
2608   unsigned int
2609   info() const
2610   {
2611     gold_assert(this->info_section_ == NULL
2612                 && this->info_symndx_ == NULL);
2613     return this->info_;
2614   }
2615
2616   // Set the info field to the output section index of a section.
2617   void
2618   set_info_section(const Output_section* os)
2619   {
2620     gold_assert((this->info_section_ == NULL
2621                  || (this->info_section_ == os
2622                      && this->info_uses_section_index_))
2623                 && this->info_symndx_ == NULL
2624                 && this->info_ == 0);
2625     this->info_section_ = os;
2626     this->info_uses_section_index_= true;
2627   }
2628
2629   // Set the info field to the symbol table index of a symbol.
2630   void
2631   set_info_symndx(const Symbol* sym)
2632   {
2633     gold_assert(this->info_section_ == NULL
2634                 && (this->info_symndx_ == NULL
2635                     || this->info_symndx_ == sym)
2636                 && this->info_ == 0);
2637     this->info_symndx_ = sym;
2638   }
2639
2640   // Set the info field to the symbol table index of a section symbol.
2641   void
2642   set_info_section_symndx(const Output_section* os)
2643   {
2644     gold_assert((this->info_section_ == NULL
2645                  || (this->info_section_ == os
2646                      && !this->info_uses_section_index_))
2647                 && this->info_symndx_ == NULL
2648                 && this->info_ == 0);
2649     this->info_section_ = os;
2650     this->info_uses_section_index_ = false;
2651   }
2652
2653   // Set the info field to a constant.
2654   void
2655   set_info(unsigned int v)
2656   {
2657     gold_assert(this->info_section_ == NULL
2658                 && this->info_symndx_ == NULL
2659                 && (this->info_ == 0
2660                     || this->info_ == v));
2661     this->info_ = v;
2662   }
2663
2664   // Set the addralign field.
2665   void
2666   set_addralign(uint64_t v)
2667   { this->addralign_ = v; }
2668
2669   // Whether the output section index has been set.
2670   bool
2671   has_out_shndx() const
2672   { return this->out_shndx_ != -1U; }
2673
2674   // Indicate that we need a symtab index.
2675   void
2676   set_needs_symtab_index()
2677   { this->needs_symtab_index_ = true; }
2678
2679   // Return whether we need a symtab index.
2680   bool
2681   needs_symtab_index() const
2682   { return this->needs_symtab_index_; }
2683
2684   // Get the symtab index.
2685   unsigned int
2686   symtab_index() const
2687   {
2688     gold_assert(this->symtab_index_ != 0);
2689     return this->symtab_index_;
2690   }
2691
2692   // Set the symtab index.
2693   void
2694   set_symtab_index(unsigned int index)
2695   {
2696     gold_assert(index != 0);
2697     this->symtab_index_ = index;
2698   }
2699
2700   // Indicate that we need a dynsym index.
2701   void
2702   set_needs_dynsym_index()
2703   { this->needs_dynsym_index_ = true; }
2704
2705   // Return whether we need a dynsym index.
2706   bool
2707   needs_dynsym_index() const
2708   { return this->needs_dynsym_index_; }
2709
2710   // Get the dynsym index.
2711   unsigned int
2712   dynsym_index() const
2713   {
2714     gold_assert(this->dynsym_index_ != 0);
2715     return this->dynsym_index_;
2716   }
2717
2718   // Set the dynsym index.
2719   void
2720   set_dynsym_index(unsigned int index)
2721   {
2722     gold_assert(index != 0);
2723     this->dynsym_index_ = index;
2724   }
2725
2726   // Return whether the input sections sections attachd to this output
2727   // section may require sorting.  This is used to handle constructor
2728   // priorities compatibly with GNU ld.
2729   bool
2730   may_sort_attached_input_sections() const
2731   { return this->may_sort_attached_input_sections_; }
2732
2733   // Record that the input sections attached to this output section
2734   // may require sorting.
2735   void
2736   set_may_sort_attached_input_sections()
2737   { this->may_sort_attached_input_sections_ = true; }
2738
2739    // Returns true if input sections must be sorted according to the
2740   // order in which their name appear in the --section-ordering-file.
2741   bool
2742   input_section_order_specified()
2743   { return this->input_section_order_specified_; }
2744
2745   // Record that input sections must be sorted as some of their names
2746   // match the patterns specified through --section-ordering-file.
2747   void
2748   set_input_section_order_specified()
2749   { this->input_section_order_specified_ = true; }
2750
2751   // Return whether the input sections attached to this output section
2752   // require sorting.  This is used to handle constructor priorities
2753   // compatibly with GNU ld.
2754   bool
2755   must_sort_attached_input_sections() const
2756   { return this->must_sort_attached_input_sections_; }
2757
2758   // Record that the input sections attached to this output section
2759   // require sorting.
2760   void
2761   set_must_sort_attached_input_sections()
2762   { this->must_sort_attached_input_sections_ = true; }
2763
2764   // Return whether this section holds relro data--data which has
2765   // dynamic relocations but which may be marked read-only after the
2766   // dynamic relocations have been completed.
2767   bool
2768   is_relro() const
2769   { return this->is_relro_; }
2770
2771   // Record that this section holds relro data.
2772   void
2773   set_is_relro()
2774   { this->is_relro_ = true; }
2775
2776   // Record that this section does not hold relro data.
2777   void
2778   clear_is_relro()
2779   { this->is_relro_ = false; }
2780
2781   // True if this section holds relro local data--relro data for which
2782   // the dynamic relocations are all RELATIVE relocations.
2783   bool
2784   is_relro_local() const
2785   { return this->is_relro_local_; }
2786
2787   // Record that this section holds relro local data.
2788   void
2789   set_is_relro_local()
2790   { this->is_relro_local_ = true; }
2791
2792   // True if this must be the last relro section.
2793   bool
2794   is_last_relro() const
2795   { return this->is_last_relro_; }
2796
2797   // Record that this must be the last relro section.
2798   void
2799   set_is_last_relro()
2800   {
2801     gold_assert(this->is_relro_);
2802     this->is_last_relro_ = true;
2803   }
2804
2805   // True if this must be the first section following the relro sections.
2806   bool
2807   is_first_non_relro() const
2808   {
2809     gold_assert(!this->is_relro_);
2810     return this->is_first_non_relro_;
2811   }
2812
2813   // Record that this must be the first non-relro section.
2814   void
2815   set_is_first_non_relro()
2816   {
2817     gold_assert(!this->is_relro_);
2818     this->is_first_non_relro_ = true;
2819   }
2820
2821   // True if this is a small section: a section which holds small
2822   // variables.
2823   bool
2824   is_small_section() const
2825   { return this->is_small_section_; }
2826
2827   // Record that this is a small section.
2828   void
2829   set_is_small_section()
2830   { this->is_small_section_ = true; }
2831
2832   // True if this is a large section: a section which holds large
2833   // variables.
2834   bool
2835   is_large_section() const
2836   { return this->is_large_section_; }
2837
2838   // Record that this is a large section.
2839   void
2840   set_is_large_section()
2841   { this->is_large_section_ = true; }
2842
2843   // True if this is a large data (not BSS) section.
2844   bool
2845   is_large_data_section()
2846   { return this->is_large_section_ && this->type_ != elfcpp::SHT_NOBITS; }
2847
2848   // True if this is the .interp section which goes into the PT_INTERP
2849   // segment.
2850   bool
2851   is_interp() const
2852   { return this->is_interp_; }
2853
2854   // Record that this is the interp section.
2855   void
2856   set_is_interp()
2857   { this->is_interp_ = true; }
2858
2859   // True if this is a section used by the dynamic linker.
2860   bool
2861   is_dynamic_linker_section() const
2862   { return this->is_dynamic_linker_section_; }
2863
2864   // Record that this is a section used by the dynamic linker.
2865   void
2866   set_is_dynamic_linker_section()
2867   { this->is_dynamic_linker_section_ = true; }
2868
2869   // Return whether this section should be written after all the input
2870   // sections are complete.
2871   bool
2872   after_input_sections() const
2873   { return this->after_input_sections_; }
2874
2875   // Record that this section should be written after all the input
2876   // sections are complete.
2877   void
2878   set_after_input_sections()
2879   { this->after_input_sections_ = true; }
2880
2881   // Return whether this section requires postprocessing after all
2882   // relocations have been applied.
2883   bool
2884   requires_postprocessing() const
2885   { return this->requires_postprocessing_; }
2886
2887   // If a section requires postprocessing, return the buffer to use.
2888   unsigned char*
2889   postprocessing_buffer() const
2890   {
2891     gold_assert(this->postprocessing_buffer_ != NULL);
2892     return this->postprocessing_buffer_;
2893   }
2894
2895   // If a section requires postprocessing, create the buffer to use.
2896   void
2897   create_postprocessing_buffer();
2898
2899   // If a section requires postprocessing, this is the size of the
2900   // buffer to which relocations should be applied.
2901   off_t
2902   postprocessing_buffer_size() const
2903   { return this->current_data_size_for_child(); }
2904
2905   // Modify the section name.  This is only permitted for an
2906   // unallocated section, and only before the size has been finalized.
2907   // Otherwise the name will not get into Layout::namepool_.
2908   void
2909   set_name(const char* newname)
2910   {
2911     gold_assert((this->flags_ & elfcpp::SHF_ALLOC) == 0);
2912     gold_assert(!this->is_data_size_valid());
2913     this->name_ = newname;
2914   }
2915
2916   // Return whether the offset OFFSET in the input section SHNDX in
2917   // object OBJECT is being included in the link.
2918   bool
2919   is_input_address_mapped(const Relobj* object, unsigned int shndx,
2920                           off_t offset) const;
2921
2922   // Return the offset within the output section of OFFSET relative to
2923   // the start of input section SHNDX in object OBJECT.
2924   section_offset_type
2925   output_offset(const Relobj* object, unsigned int shndx,
2926                 section_offset_type offset) const;
2927
2928   // Return the output virtual address of OFFSET relative to the start
2929   // of input section SHNDX in object OBJECT.
2930   uint64_t
2931   output_address(const Relobj* object, unsigned int shndx,
2932                  off_t offset) const;
2933
2934   // Look for the merged section for input section SHNDX in object
2935   // OBJECT.  If found, return true, and set *ADDR to the address of
2936   // the start of the merged section.  This is not necessary the
2937   // output offset corresponding to input offset 0 in the section,
2938   // since the section may be mapped arbitrarily.
2939   bool
2940   find_starting_output_address(const Relobj* object, unsigned int shndx,
2941                                uint64_t* addr) const;
2942
2943   // Record that this output section was found in the SECTIONS clause
2944   // of a linker script.
2945   void
2946   set_found_in_sections_clause()
2947   { this->found_in_sections_clause_ = true; }
2948
2949   // Return whether this output section was found in the SECTIONS
2950   // clause of a linker script.
2951   bool
2952   found_in_sections_clause() const
2953   { return this->found_in_sections_clause_; }
2954
2955   // Write the section header into *OPHDR.
2956   template<int size, bool big_endian>
2957   void
2958   write_header(const Layout*, const Stringpool*,
2959                elfcpp::Shdr_write<size, big_endian>*) const;
2960
2961   // The next few calls are for linker script support.
2962
2963   // In some cases we need to keep a list of the input sections
2964   // associated with this output section.  We only need the list if we
2965   // might have to change the offsets of the input section within the
2966   // output section after we add the input section.  The ordinary
2967   // input sections will be written out when we process the object
2968   // file, and as such we don't need to track them here.  We do need
2969   // to track Output_section_data objects here.  We store instances of
2970   // this structure in a std::vector, so it must be a POD.  There can
2971   // be many instances of this structure, so we use a union to save
2972   // some space.
2973   class Input_section
2974   {
2975    public:
2976     Input_section()
2977       : shndx_(0), p2align_(0)
2978     {
2979       this->u1_.data_size = 0;
2980       this->u2_.object = NULL;
2981     }
2982
2983     // For an ordinary input section.
2984     Input_section(Relobj* object, unsigned int shndx, off_t data_size,
2985                   uint64_t addralign)
2986       : shndx_(shndx),
2987         p2align_(ffsll(static_cast<long long>(addralign))),
2988         section_order_index_(0)
2989     {
2990       gold_assert(shndx != OUTPUT_SECTION_CODE
2991                   && shndx != MERGE_DATA_SECTION_CODE
2992                   && shndx != MERGE_STRING_SECTION_CODE
2993                   && shndx != RELAXED_INPUT_SECTION_CODE);
2994       this->u1_.data_size = data_size;
2995       this->u2_.object = object;
2996     }
2997
2998     // For a non-merge output section.
2999     Input_section(Output_section_data* posd)
3000       : shndx_(OUTPUT_SECTION_CODE), p2align_(0),
3001         section_order_index_(0)
3002     {
3003       this->u1_.data_size = 0;
3004       this->u2_.posd = posd;
3005     }
3006
3007     // For a merge section.
3008     Input_section(Output_section_data* posd, bool is_string, uint64_t entsize)
3009       : shndx_(is_string
3010                ? MERGE_STRING_SECTION_CODE
3011                : MERGE_DATA_SECTION_CODE),
3012         p2align_(0),
3013         section_order_index_(0)
3014     {
3015       this->u1_.entsize = entsize;
3016       this->u2_.posd = posd;
3017     }
3018
3019     // For a relaxed input section.
3020     Input_section(Output_relaxed_input_section *psection)
3021       : shndx_(RELAXED_INPUT_SECTION_CODE), p2align_(0),
3022         section_order_index_(0)
3023     {
3024       this->u1_.data_size = 0;
3025       this->u2_.poris = psection;
3026     }
3027
3028     unsigned int
3029     section_order_index() const
3030     {
3031       return this->section_order_index_;
3032     }
3033
3034     void
3035     set_section_order_index(unsigned int number)
3036     {
3037       this->section_order_index_ = number;
3038     }
3039
3040     // The required alignment.
3041     uint64_t
3042     addralign() const
3043     {
3044       if (this->p2align_ != 0)
3045         return static_cast<uint64_t>(1) << (this->p2align_ - 1);
3046       else if (!this->is_input_section())
3047         return this->u2_.posd->addralign();
3048       else
3049         return 0;
3050     }
3051
3052     // Set the required alignment, which must be either 0 or a power of 2.
3053     // For input sections that are sub-classes of Output_section_data, a
3054     // alignment of zero means asking the underlying object for alignment.
3055     void
3056     set_addralign(uint64_t addralign)
3057     {
3058       if (addralign == 0)
3059         this->p2align_ = 0;
3060       else
3061         {
3062           gold_assert((addralign & (addralign - 1)) == 0);
3063           this->p2align_ = ffsll(static_cast<long long>(addralign));
3064         }
3065     }
3066  
3067     // Return the required size.
3068     off_t
3069     data_size() const;
3070
3071     // Whether this is an input section.
3072     bool
3073     is_input_section() const
3074     {
3075       return (this->shndx_ != OUTPUT_SECTION_CODE
3076               && this->shndx_ != MERGE_DATA_SECTION_CODE
3077               && this->shndx_ != MERGE_STRING_SECTION_CODE
3078               && this->shndx_ != RELAXED_INPUT_SECTION_CODE);
3079     }
3080
3081     // Return whether this is a merge section which matches the
3082     // parameters.
3083     bool
3084     is_merge_section(bool is_string, uint64_t entsize,
3085                      uint64_t addralign) const
3086     {
3087       return (this->shndx_ == (is_string
3088                                ? MERGE_STRING_SECTION_CODE
3089                                : MERGE_DATA_SECTION_CODE)
3090               && this->u1_.entsize == entsize
3091               && this->addralign() == addralign);
3092     }
3093
3094     // Return whether this is a merge section for some input section.
3095     bool
3096     is_merge_section() const
3097     {
3098       return (this->shndx_ == MERGE_DATA_SECTION_CODE
3099               || this->shndx_ == MERGE_STRING_SECTION_CODE);
3100     }
3101
3102     // Return whether this is a relaxed input section.
3103     bool
3104     is_relaxed_input_section() const
3105     { return this->shndx_ == RELAXED_INPUT_SECTION_CODE; }
3106
3107     // Return whether this is a generic Output_section_data.
3108     bool
3109     is_output_section_data() const
3110     {
3111       return this->shndx_ == OUTPUT_SECTION_CODE;
3112     }
3113
3114     // Return the object for an input section.
3115     Relobj*
3116     relobj() const;
3117
3118     // Return the input section index for an input section.
3119     unsigned int
3120     shndx() const;
3121
3122     // For non-input-sections, return the associated Output_section_data
3123     // object.
3124     Output_section_data*
3125     output_section_data() const
3126     {
3127       gold_assert(!this->is_input_section());
3128       return this->u2_.posd;
3129     }
3130  
3131     // For a merge section, return the Output_merge_base pointer.
3132     Output_merge_base*
3133     output_merge_base() const
3134     {
3135       gold_assert(this->is_merge_section());
3136       return this->u2_.pomb;
3137     }
3138
3139     // Return the Output_relaxed_input_section object.
3140     Output_relaxed_input_section*
3141     relaxed_input_section() const
3142     {
3143       gold_assert(this->is_relaxed_input_section());
3144       return this->u2_.poris;
3145     }
3146
3147     // Set the output section.
3148     void
3149     set_output_section(Output_section* os)
3150     {
3151       gold_assert(!this->is_input_section());
3152       Output_section_data *posd = 
3153         this->is_relaxed_input_section() ? this->u2_.poris : this->u2_.posd;
3154       posd->set_output_section(os);
3155     }
3156
3157     // Set the address and file offset.  This is called during
3158     // Layout::finalize.  SECTION_FILE_OFFSET is the file offset of
3159     // the enclosing section.
3160     void
3161     set_address_and_file_offset(uint64_t address, off_t file_offset,
3162                                 off_t section_file_offset);
3163
3164     // Reset the address and file offset.
3165     void
3166     reset_address_and_file_offset();
3167
3168     // Finalize the data size.
3169     void
3170     finalize_data_size();
3171
3172     // Add an input section, for SHF_MERGE sections.
3173     bool
3174     add_input_section(Relobj* object, unsigned int shndx)
3175     {
3176       gold_assert(this->shndx_ == MERGE_DATA_SECTION_CODE
3177                   || this->shndx_ == MERGE_STRING_SECTION_CODE);
3178       return this->u2_.posd->add_input_section(object, shndx);
3179     }
3180
3181     // Given an input OBJECT, an input section index SHNDX within that
3182     // object, and an OFFSET relative to the start of that input
3183     // section, return whether or not the output offset is known.  If
3184     // this function returns true, it sets *POUTPUT to the offset in
3185     // the output section, relative to the start of the input section
3186     // in the output section.  *POUTPUT may be different from OFFSET
3187     // for a merged section.
3188     bool
3189     output_offset(const Relobj* object, unsigned int shndx,
3190                   section_offset_type offset,
3191                   section_offset_type *poutput) const;
3192
3193     // Return whether this is the merge section for the input section
3194     // SHNDX in OBJECT.
3195     bool
3196     is_merge_section_for(const Relobj* object, unsigned int shndx) const;
3197
3198     // Write out the data.  This does nothing for an input section.
3199     void
3200     write(Output_file*);
3201
3202     // Write the data to a buffer.  This does nothing for an input
3203     // section.
3204     void
3205     write_to_buffer(unsigned char*);
3206
3207     // Print to a map file.
3208     void
3209     print_to_mapfile(Mapfile*) const;
3210
3211     // Print statistics about merge sections to stderr.
3212     void
3213     print_merge_stats(const char* section_name)
3214     {
3215       if (this->shndx_ == MERGE_DATA_SECTION_CODE
3216           || this->shndx_ == MERGE_STRING_SECTION_CODE)
3217         this->u2_.posd->print_merge_stats(section_name);
3218     }
3219
3220    private:
3221     // Code values which appear in shndx_.  If the value is not one of
3222     // these codes, it is the input section index in the object file.
3223     enum
3224     {
3225       // An Output_section_data.
3226       OUTPUT_SECTION_CODE = -1U,
3227       // An Output_section_data for an SHF_MERGE section with
3228       // SHF_STRINGS not set.
3229       MERGE_DATA_SECTION_CODE = -2U,
3230       // An Output_section_data for an SHF_MERGE section with
3231       // SHF_STRINGS set.
3232       MERGE_STRING_SECTION_CODE = -3U,
3233       // An Output_section_data for a relaxed input section.
3234       RELAXED_INPUT_SECTION_CODE = -4U
3235     };
3236
3237     // For an ordinary input section, this is the section index in the
3238     // input file.  For an Output_section_data, this is
3239     // OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
3240     // MERGE_STRING_SECTION_CODE.
3241     unsigned int shndx_;
3242     // The required alignment, stored as a power of 2.
3243     unsigned int p2align_;
3244     union
3245     {
3246       // For an ordinary input section, the section size.
3247       off_t data_size;
3248       // For OUTPUT_SECTION_CODE or RELAXED_INPUT_SECTION_CODE, this is not
3249       // used.  For MERGE_DATA_SECTION_CODE or MERGE_STRING_SECTION_CODE, the
3250       // entity size.
3251       uint64_t entsize;
3252     } u1_;
3253     union
3254     {
3255       // For an ordinary input section, the object which holds the
3256       // input section.
3257       Relobj* object;
3258       // For OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
3259       // MERGE_STRING_SECTION_CODE, the data.
3260       Output_section_data* posd;
3261       Output_merge_base* pomb;
3262       // For RELAXED_INPUT_SECTION_CODE, the data.
3263       Output_relaxed_input_section* poris;
3264     } u2_;
3265     // The line number of the pattern it matches in the --section-ordering-file
3266     // file.  It is 0 if does not match any pattern.
3267     unsigned int section_order_index_;
3268   };
3269
3270   // Store the list of input sections for this Output_section into the
3271   // list passed in.  This removes the input sections, leaving only
3272   // any Output_section_data elements.  This returns the size of those
3273   // Output_section_data elements.  ADDRESS is the address of this
3274   // output section.  FILL is the fill value to use, in case there are
3275   // any spaces between the remaining Output_section_data elements.
3276   uint64_t
3277   get_input_sections(uint64_t address, const std::string& fill,
3278                      std::list<Input_section>*);
3279
3280   // Add a script input section.  A script input section can either be
3281   // a plain input section or a sub-class of Output_section_data.
3282   void
3283   add_script_input_section(const Input_section& input_section);
3284
3285   // Set the current size of the output section.
3286   void
3287   set_current_data_size(off_t size)
3288   { this->set_current_data_size_for_child(size); }
3289
3290   // Get the current size of the output section.
3291   off_t
3292   current_data_size() const
3293   { return this->current_data_size_for_child(); }
3294
3295   // End of linker script support.
3296
3297   // Save states before doing section layout.
3298   // This is used for relaxation.
3299   void
3300   save_states();
3301
3302   // Restore states prior to section layout.
3303   void
3304   restore_states();
3305
3306   // Discard states.
3307   void
3308   discard_states();
3309
3310   // Convert existing input sections to relaxed input sections.
3311   void
3312   convert_input_sections_to_relaxed_sections(
3313       const std::vector<Output_relaxed_input_section*>& sections);
3314
3315   // Find a relaxed input section to an input section in OBJECT
3316   // with index SHNDX.  Return NULL if none is found.
3317   const Output_relaxed_input_section*
3318   find_relaxed_input_section(const Relobj* object, unsigned int shndx) const;
3319   
3320   // Whether section offsets need adjustment due to relaxation.
3321   bool
3322   section_offsets_need_adjustment() const
3323   { return this->section_offsets_need_adjustment_; }
3324
3325   // Set section_offsets_need_adjustment to be true.
3326   void
3327   set_section_offsets_need_adjustment()
3328   { this->section_offsets_need_adjustment_ = true; }
3329
3330   // Adjust section offsets of input sections in this.  This is
3331   // requires if relaxation caused some input sections to change sizes.
3332   void
3333   adjust_section_offsets();
3334
3335   // Whether this is a NOLOAD section.
3336   bool
3337   is_noload() const
3338   { return this->is_noload_; }
3339
3340   // Set NOLOAD flag.
3341   void
3342   set_is_noload()
3343   { this->is_noload_ = true; }
3344
3345   // Print merge statistics to stderr.
3346   void
3347   print_merge_stats();
3348
3349  protected:
3350   // Return the output section--i.e., the object itself.
3351   Output_section*
3352   do_output_section()
3353   { return this; }
3354
3355   const Output_section*
3356   do_output_section() const
3357   { return this; }
3358
3359   // Return the section index in the output file.
3360   unsigned int
3361   do_out_shndx() const
3362   {
3363     gold_assert(this->out_shndx_ != -1U);
3364     return this->out_shndx_;
3365   }
3366
3367   // Set the output section index.
3368   void
3369   do_set_out_shndx(unsigned int shndx)
3370   {
3371     gold_assert(this->out_shndx_ == -1U || this->out_shndx_ == shndx);
3372     this->out_shndx_ = shndx;
3373   }
3374
3375   // Set the final data size of the Output_section.  For a typical
3376   // Output_section, there is nothing to do, but if there are any
3377   // Output_section_data objects we need to set their final addresses
3378   // here.
3379   virtual void
3380   set_final_data_size();
3381
3382   // Reset the address and file offset.
3383   void
3384   do_reset_address_and_file_offset();
3385
3386   // Return true if address and file offset already have reset values. In
3387   // other words, calling reset_address_and_file_offset will not change them.
3388   bool
3389   do_address_and_file_offset_have_reset_values() const;
3390
3391   // Write the data to the file.  For a typical Output_section, this
3392   // does nothing: the data is written out by calling Object::Relocate
3393   // on each input object.  But if there are any Output_section_data
3394   // objects we do need to write them out here.
3395   virtual void
3396   do_write(Output_file*);
3397
3398   // Return the address alignment--function required by parent class.
3399   uint64_t
3400   do_addralign() const
3401   { return this->addralign_; }
3402
3403   // Return whether there is a load address.
3404   bool
3405   do_has_load_address() const
3406   { return this->has_load_address_; }
3407
3408   // Return the load address.
3409   uint64_t
3410   do_load_address() const
3411   {
3412     gold_assert(this->has_load_address_);
3413     return this->load_address_;
3414   }
3415
3416   // Return whether this is an Output_section.
3417   bool
3418   do_is_section() const
3419   { return true; }
3420
3421   // Return whether this is a section of the specified type.
3422   bool
3423   do_is_section_type(elfcpp::Elf_Word type) const
3424   { return this->type_ == type; }
3425
3426   // Return whether the specified section flag is set.
3427   bool
3428   do_is_section_flag_set(elfcpp::Elf_Xword flag) const
3429   { return (this->flags_ & flag) != 0; }
3430
3431   // Set the TLS offset.  Called only for SHT_TLS sections.
3432   void
3433   do_set_tls_offset(uint64_t tls_base);
3434
3435   // Return the TLS offset, relative to the base of the TLS segment.
3436   // Valid only for SHT_TLS sections.
3437   uint64_t
3438   do_tls_offset() const
3439   { return this->tls_offset_; }
3440
3441   // This may be implemented by a child class.
3442   virtual void
3443   do_finalize_name(Layout*)
3444   { }
3445
3446   // Print to the map file.
3447   virtual void
3448   do_print_to_mapfile(Mapfile*) const;
3449
3450   // Record that this section requires postprocessing after all
3451   // relocations have been applied.  This is called by a child class.
3452   void
3453   set_requires_postprocessing()
3454   {
3455     this->requires_postprocessing_ = true;
3456     this->after_input_sections_ = true;
3457   }
3458
3459   // Write all the data of an Output_section into the postprocessing
3460   // buffer.
3461   void
3462   write_to_postprocessing_buffer();
3463
3464   typedef std::vector<Input_section> Input_section_list;
3465
3466   // Allow a child class to access the input sections.
3467   const Input_section_list&
3468   input_sections() const
3469   { return this->input_sections_; }
3470
3471  private:
3472   // We only save enough information to undo the effects of section layout.
3473   class Checkpoint_output_section
3474   {
3475    public:
3476     Checkpoint_output_section(uint64_t addralign, elfcpp::Elf_Xword flags,
3477                               const Input_section_list& input_sections,
3478                               off_t first_input_offset,
3479                               bool attached_input_sections_are_sorted)
3480       : addralign_(addralign), flags_(flags),
3481         input_sections_(input_sections),
3482         input_sections_size_(input_sections_.size()),
3483         input_sections_copy_(), first_input_offset_(first_input_offset),
3484         attached_input_sections_are_sorted_(attached_input_sections_are_sorted)
3485     { }
3486
3487     virtual
3488     ~Checkpoint_output_section()
3489     { }
3490
3491     // Return the address alignment.
3492     uint64_t
3493     addralign() const
3494     { return this->addralign_; }
3495
3496     // Return the section flags.
3497     elfcpp::Elf_Xword
3498     flags() const
3499     { return this->flags_; }
3500
3501     // Return a reference to the input section list copy.
3502     Input_section_list*
3503     input_sections()
3504     { return &this->input_sections_copy_; }
3505
3506     // Return the size of input_sections at the time when checkpoint is
3507     // taken.
3508     size_t
3509     input_sections_size() const
3510     { return this->input_sections_size_; }
3511
3512     // Whether input sections are copied.
3513     bool
3514     input_sections_saved() const
3515     { return this->input_sections_copy_.size() == this->input_sections_size_; }
3516
3517     off_t
3518     first_input_offset() const
3519     { return this->first_input_offset_; }
3520
3521     bool
3522     attached_input_sections_are_sorted() const
3523     { return this->attached_input_sections_are_sorted_; }
3524
3525     // Save input sections.
3526     void
3527     save_input_sections()
3528     {
3529       this->input_sections_copy_.reserve(this->input_sections_size_);
3530       this->input_sections_copy_.clear();
3531       Input_section_list::const_iterator p = this->input_sections_.begin();
3532       gold_assert(this->input_sections_size_ >= this->input_sections_.size());
3533       for(size_t i = 0; i < this->input_sections_size_ ; i++, ++p)
3534         this->input_sections_copy_.push_back(*p);
3535     }
3536
3537    private:
3538     // The section alignment.
3539     uint64_t addralign_;
3540     // The section flags.
3541     elfcpp::Elf_Xword flags_;
3542     // Reference to the input sections to be checkpointed.
3543     const Input_section_list& input_sections_;
3544     // Size of the checkpointed portion of input_sections_;
3545     size_t input_sections_size_;
3546     // Copy of input sections.
3547     Input_section_list input_sections_copy_;
3548     // The offset of the first entry in input_sections_.
3549     off_t first_input_offset_;
3550     // True if the input sections attached to this output section have
3551     // already been sorted.
3552     bool attached_input_sections_are_sorted_;
3553   };
3554
3555   // This class is used to sort the input sections.
3556   class Input_section_sort_entry;
3557
3558   // This is the sort comparison function for ctors and dtors.
3559   struct Input_section_sort_compare
3560   {
3561     bool
3562     operator()(const Input_section_sort_entry&,
3563                const Input_section_sort_entry&) const;
3564   };
3565
3566   // This is the sort comparison function for .init_array and .fini_array.
3567   struct Input_section_sort_init_fini_compare
3568   {
3569     bool
3570     operator()(const Input_section_sort_entry&,
3571                const Input_section_sort_entry&) const;
3572   };
3573
3574   // This is the sort comparison function when a section order is specified
3575   // from an input file.
3576   struct Input_section_sort_section_order_index_compare
3577   {
3578     bool
3579     operator()(const Input_section_sort_entry&,
3580                const Input_section_sort_entry&) const;
3581   };
3582
3583   // Fill data.  This is used to fill in data between input sections.
3584   // It is also used for data statements (BYTE, WORD, etc.) in linker
3585   // scripts.  When we have to keep track of the input sections, we
3586   // can use an Output_data_const, but we don't want to have to keep
3587   // track of input sections just to implement fills.
3588   class Fill
3589   {
3590    public:
3591     Fill(off_t section_offset, off_t length)
3592       : section_offset_(section_offset),
3593         length_(convert_to_section_size_type(length))
3594     { }
3595
3596     // Return section offset.
3597     off_t
3598     section_offset() const
3599     { return this->section_offset_; }
3600
3601     // Return fill length.
3602     section_size_type
3603     length() const
3604     { return this->length_; }
3605
3606    private:
3607     // The offset within the output section.
3608     off_t section_offset_;
3609     // The length of the space to fill.
3610     section_size_type length_;
3611   };
3612
3613   typedef std::vector<Fill> Fill_list;
3614
3615   // Map used during relaxation of existing sections.  This map
3616   // a section id an input section list index.  We assume that
3617   // Input_section_list is a vector.
3618   typedef Unordered_map<Section_id, size_t, Section_id_hash> Relaxation_map;
3619
3620   // Add a new output section by Input_section.
3621   void
3622   add_output_section_data(Input_section*);
3623
3624   // Add an SHF_MERGE input section.  Returns true if the section was
3625   // handled.  If KEEPS_INPUT_SECTIONS is true, the output merge section
3626   // stores information about the merged input sections.
3627   bool
3628   add_merge_input_section(Relobj* object, unsigned int shndx, uint64_t flags,
3629                           uint64_t entsize, uint64_t addralign,
3630                           bool keeps_input_sections);
3631
3632   // Add an output SHF_MERGE section POSD to this output section.
3633   // IS_STRING indicates whether it is a SHF_STRINGS section, and
3634   // ENTSIZE is the entity size.  This returns the entry added to
3635   // input_sections_.
3636   void
3637   add_output_merge_section(Output_section_data* posd, bool is_string,
3638                            uint64_t entsize);
3639
3640   // Sort the attached input sections.
3641   void
3642   sort_attached_input_sections();
3643
3644   // Find the merge section into which an input section with index SHNDX in
3645   // OBJECT has been added.  Return NULL if none found.
3646   Output_section_data*
3647   find_merge_section(const Relobj* object, unsigned int shndx) const;
3648
3649   // Build a relaxation map.
3650   void
3651   build_relaxation_map(
3652       const Input_section_list& input_sections,
3653       size_t limit,
3654       Relaxation_map* map) const;
3655
3656   // Convert input sections in an input section list into relaxed sections.
3657   void
3658   convert_input_sections_in_list_to_relaxed_sections(
3659       const std::vector<Output_relaxed_input_section*>& relaxed_sections,
3660       const Relaxation_map& map,
3661       Input_section_list* input_sections);
3662
3663   // Build the lookup maps for merge and relaxed input sections.
3664   void
3665   build_lookup_maps() const;
3666
3667   // Most of these fields are only valid after layout.
3668
3669   // The name of the section.  This will point into a Stringpool.
3670   const char* name_;
3671   // The section address is in the parent class.
3672   // The section alignment.
3673   uint64_t addralign_;
3674   // The section entry size.
3675   uint64_t entsize_;
3676   // The load address.  This is only used when using a linker script
3677   // with a SECTIONS clause.  The has_load_address_ field indicates
3678   // whether this field is valid.
3679   uint64_t load_address_;
3680   // The file offset is in the parent class.
3681   // Set the section link field to the index of this section.
3682   const Output_data* link_section_;
3683   // If link_section_ is NULL, this is the link field.
3684   unsigned int link_;
3685   // Set the section info field to the index of this section.
3686   const Output_section* info_section_;
3687   // If info_section_ is NULL, set the info field to the symbol table
3688   // index of this symbol.
3689   const Symbol* info_symndx_;
3690   // If info_section_ and info_symndx_ are NULL, this is the section
3691   // info field.
3692   unsigned int info_;
3693   // The section type.
3694   const elfcpp::Elf_Word type_;
3695   // The section flags.
3696   elfcpp::Elf_Xword flags_;
3697   // The section index.
3698   unsigned int out_shndx_;
3699   // If there is a STT_SECTION for this output section in the normal
3700   // symbol table, this is the symbol index.  This starts out as zero.
3701   // It is initialized in Layout::finalize() to be the index, or -1U
3702   // if there isn't one.
3703   unsigned int symtab_index_;
3704   // If there is a STT_SECTION for this output section in the dynamic
3705   // symbol table, this is the symbol index.  This starts out as zero.
3706   // It is initialized in Layout::finalize() to be the index, or -1U
3707   // if there isn't one.
3708   unsigned int dynsym_index_;
3709   // The input sections.  This will be empty in cases where we don't
3710   // need to keep track of them.
3711   Input_section_list input_sections_;
3712   // The offset of the first entry in input_sections_.
3713   off_t first_input_offset_;
3714   // The fill data.  This is separate from input_sections_ because we
3715   // often will need fill sections without needing to keep track of
3716   // input sections.
3717   Fill_list fills_;
3718   // If the section requires postprocessing, this buffer holds the
3719   // section contents during relocation.
3720   unsigned char* postprocessing_buffer_;
3721   // Whether this output section needs a STT_SECTION symbol in the
3722   // normal symbol table.  This will be true if there is a relocation
3723   // which needs it.
3724   bool needs_symtab_index_ : 1;
3725   // Whether this output section needs a STT_SECTION symbol in the
3726   // dynamic symbol table.  This will be true if there is a dynamic
3727   // relocation which needs it.
3728   bool needs_dynsym_index_ : 1;
3729   // Whether the link field of this output section should point to the
3730   // normal symbol table.
3731   bool should_link_to_symtab_ : 1;
3732   // Whether the link field of this output section should point to the
3733   // dynamic symbol table.
3734   bool should_link_to_dynsym_ : 1;
3735   // Whether this section should be written after all the input
3736   // sections are complete.
3737   bool after_input_sections_ : 1;
3738   // Whether this section requires post processing after all
3739   // relocations have been applied.
3740   bool requires_postprocessing_ : 1;
3741   // Whether an input section was mapped to this output section
3742   // because of a SECTIONS clause in a linker script.
3743   bool found_in_sections_clause_ : 1;
3744   // Whether this section has an explicitly specified load address.
3745   bool has_load_address_ : 1;
3746   // True if the info_section_ field means the section index of the
3747   // section, false if it means the symbol index of the corresponding
3748   // section symbol.
3749   bool info_uses_section_index_ : 1;
3750   // True if input sections attached to this output section have to be
3751   // sorted according to a specified order.
3752   bool input_section_order_specified_ : 1;
3753   // True if the input sections attached to this output section may
3754   // need sorting.
3755   bool may_sort_attached_input_sections_ : 1;
3756   // True if the input sections attached to this output section must
3757   // be sorted.
3758   bool must_sort_attached_input_sections_ : 1;
3759   // True if the input sections attached to this output section have
3760   // already been sorted.
3761   bool attached_input_sections_are_sorted_ : 1;
3762   // True if this section holds relro data.
3763   bool is_relro_ : 1;
3764   // True if this section holds relro local data.
3765   bool is_relro_local_ : 1;
3766   // True if this must be the last relro section.
3767   bool is_last_relro_ : 1;
3768   // True if this must be the first section after the relro sections.
3769   bool is_first_non_relro_ : 1;
3770   // True if this is a small section.
3771   bool is_small_section_ : 1;
3772   // True if this is a large section.
3773   bool is_large_section_ : 1;
3774   // True if this is the .interp section going into the PT_INTERP
3775   // segment.
3776   bool is_interp_ : 1;
3777   // True if this is section is read by the dynamic linker.
3778   bool is_dynamic_linker_section_ : 1;
3779   // Whether code-fills are generated at write.
3780   bool generate_code_fills_at_write_ : 1;
3781   // Whether the entry size field should be zero.
3782   bool is_entsize_zero_ : 1;
3783   // Whether section offsets need adjustment due to relaxation.
3784   bool section_offsets_need_adjustment_ : 1;
3785   // Whether this is a NOLOAD section.
3786   bool is_noload_ : 1;
3787   // For SHT_TLS sections, the offset of this section relative to the base
3788   // of the TLS segment.
3789   uint64_t tls_offset_;
3790   // Saved checkpoint.
3791   Checkpoint_output_section* checkpoint_;
3792   // Fast lookup maps for merged and relaxed input sections.
3793   Output_section_lookup_maps* lookup_maps_;
3794 };
3795
3796 // An output segment.  PT_LOAD segments are built from collections of
3797 // output sections.  Other segments typically point within PT_LOAD
3798 // segments, and are built directly as needed.
3799 //
3800 // NOTE: We want to use the copy constructor for this class.  During
3801 // relaxation, we may try built the segments multiple times.  We do
3802 // that by copying the original segment list before lay-out, doing
3803 // a trial lay-out and roll-back to the saved copied if we need to
3804 // to the lay-out again.
3805
3806 class Output_segment
3807 {
3808  public:
3809   // Create an output segment, specifying the type and flags.
3810   Output_segment(elfcpp::Elf_Word, elfcpp::Elf_Word);
3811
3812   // Return the virtual address.
3813   uint64_t
3814   vaddr() const
3815   { return this->vaddr_; }
3816
3817   // Return the physical address.
3818   uint64_t
3819   paddr() const
3820   { return this->paddr_; }
3821
3822   // Return the segment type.
3823   elfcpp::Elf_Word
3824   type() const
3825   { return this->type_; }
3826
3827   // Return the segment flags.
3828   elfcpp::Elf_Word
3829   flags() const
3830   { return this->flags_; }
3831
3832   // Return the memory size.
3833   uint64_t
3834   memsz() const
3835   { return this->memsz_; }
3836
3837   // Return the file size.
3838   off_t
3839   filesz() const
3840   { return this->filesz_; }
3841
3842   // Return the file offset.
3843   off_t
3844   offset() const
3845   { return this->offset_; }
3846
3847   // Whether this is a segment created to hold large data sections.
3848   bool
3849   is_large_data_segment() const
3850   { return this->is_large_data_segment_; }
3851
3852   // Record that this is a segment created to hold large data
3853   // sections.
3854   void
3855   set_is_large_data_segment()
3856   { this->is_large_data_segment_ = true; }
3857
3858   // Return the maximum alignment of the Output_data.
3859   uint64_t
3860   maximum_alignment();
3861
3862   // Add the Output_section OS to this segment.  SEG_FLAGS is the
3863   // segment flags to use.  DO_SORT is true if we should sort the
3864   // placement of the input section for more efficient generated code.
3865   void
3866   add_output_section(Output_section* os, elfcpp::Elf_Word seg_flags,
3867                      bool do_sort);
3868
3869   // Remove an Output_section from this segment.  It is an error if it
3870   // is not present.
3871   void
3872   remove_output_section(Output_section* os);
3873
3874   // Add an Output_data (which need not be an Output_section) to the
3875   // start of this segment.
3876   void
3877   add_initial_output_data(Output_data*);
3878
3879   // Return true if this segment has any sections which hold actual
3880   // data, rather than being a BSS section.
3881   bool
3882   has_any_data_sections() const
3883   { return !this->output_data_.empty(); }
3884
3885   // Return the number of dynamic relocations applied to this segment.
3886   unsigned int
3887   dynamic_reloc_count() const;
3888
3889   // Return the address of the first section.
3890   uint64_t
3891   first_section_load_address() const;
3892
3893   // Return whether the addresses have been set already.
3894   bool
3895   are_addresses_set() const
3896   { return this->are_addresses_set_; }
3897
3898   // Set the addresses.
3899   void
3900   set_addresses(uint64_t vaddr, uint64_t paddr)
3901   {
3902     this->vaddr_ = vaddr;
3903     this->paddr_ = paddr;
3904     this->are_addresses_set_ = true;
3905   }
3906
3907   // Update the flags for the flags of an output section added to this
3908   // segment.
3909   void
3910   update_flags_for_output_section(elfcpp::Elf_Xword flags)
3911   {
3912     // The ELF ABI specifies that a PT_TLS segment should always have
3913     // PF_R as the flags.
3914     if (this->type() != elfcpp::PT_TLS)
3915       this->flags_ |= flags;
3916   }
3917
3918   // Set the segment flags.  This is only used if we have a PHDRS
3919   // clause which explicitly specifies the flags.
3920   void
3921   set_flags(elfcpp::Elf_Word flags)
3922   { this->flags_ = flags; }
3923
3924   // Set the address of the segment to ADDR and the offset to *POFF
3925   // and set the addresses and offsets of all contained output
3926   // sections accordingly.  Set the section indexes of all contained
3927   // output sections starting with *PSHNDX.  If RESET is true, first
3928   // reset the addresses of the contained sections.  Return the
3929   // address of the immediately following segment.  Update *POFF and
3930   // *PSHNDX.  This should only be called for a PT_LOAD segment.
3931   uint64_t
3932   set_section_addresses(const Layout*, bool reset, uint64_t addr,
3933                         unsigned int increase_relro, off_t* poff,
3934                         unsigned int* pshndx);
3935
3936   // Set the minimum alignment of this segment.  This may be adjusted
3937   // upward based on the section alignments.
3938   void
3939   set_minimum_p_align(uint64_t align)
3940   {
3941     if (align > this->min_p_align_)
3942       this->min_p_align_ = align;
3943   }
3944
3945   // Set the offset of this segment based on the section.  This should
3946   // only be called for a non-PT_LOAD segment.
3947   void
3948   set_offset(unsigned int increase);
3949
3950   // Set the TLS offsets of the sections contained in the PT_TLS segment.
3951   void
3952   set_tls_offsets();
3953
3954   // Return the number of output sections.
3955   unsigned int
3956   output_section_count() const;
3957
3958   // Return the section attached to the list segment with the lowest
3959   // load address.  This is used when handling a PHDRS clause in a
3960   // linker script.
3961   Output_section*
3962   section_with_lowest_load_address() const;
3963
3964   // Write the segment header into *OPHDR.
3965   template<int size, bool big_endian>
3966   void
3967   write_header(elfcpp::Phdr_write<size, big_endian>*);
3968
3969   // Write the section headers of associated sections into V.
3970   template<int size, bool big_endian>
3971   unsigned char*
3972   write_section_headers(const Layout*, const Stringpool*, unsigned char* v,
3973                         unsigned int* pshndx) const;
3974
3975   // Print the output sections in the map file.
3976   void
3977   print_sections_to_mapfile(Mapfile*) const;
3978
3979  private:
3980   typedef std::list<Output_data*> Output_data_list;
3981
3982   // Find the maximum alignment in an Output_data_list.
3983   static uint64_t
3984   maximum_alignment_list(const Output_data_list*);
3985
3986   // Return whether the first data section is a relro section.
3987   bool
3988   is_first_section_relro() const;
3989
3990   // Set the section addresses in an Output_data_list.
3991   uint64_t
3992   set_section_list_addresses(const Layout*, bool reset, Output_data_list*,
3993                              uint64_t addr, off_t* poff, unsigned int* pshndx,
3994                              bool* in_tls);
3995
3996   // Return the number of Output_sections in an Output_data_list.
3997   unsigned int
3998   output_section_count_list(const Output_data_list*) const;
3999
4000   // Return the number of dynamic relocs in an Output_data_list.
4001   unsigned int
4002   dynamic_reloc_count_list(const Output_data_list*) const;
4003
4004   // Find the section with the lowest load address in an
4005   // Output_data_list.
4006   void
4007   lowest_load_address_in_list(const Output_data_list* pdl,
4008                               Output_section** found,
4009                               uint64_t* found_lma) const;
4010
4011   // Write the section headers in the list into V.
4012   template<int size, bool big_endian>
4013   unsigned char*
4014   write_section_headers_list(const Layout*, const Stringpool*,
4015                              const Output_data_list*, unsigned char* v,
4016                              unsigned int* pshdx) const;
4017
4018   // Print a section list to the mapfile.
4019   void
4020   print_section_list_to_mapfile(Mapfile*, const Output_data_list*) const;
4021
4022   // NOTE: We want to use the copy constructor.  Currently, shallow copy
4023   // works for us so we do not need to write our own copy constructor.
4024   
4025   // The list of output data with contents attached to this segment.
4026   Output_data_list output_data_;
4027   // The list of output data without contents attached to this segment.
4028   Output_data_list output_bss_;
4029   // The segment virtual address.
4030   uint64_t vaddr_;
4031   // The segment physical address.
4032   uint64_t paddr_;
4033   // The size of the segment in memory.
4034   uint64_t memsz_;
4035   // The maximum section alignment.  The is_max_align_known_ field
4036   // indicates whether this has been finalized.
4037   uint64_t max_align_;
4038   // The required minimum value for the p_align field.  This is used
4039   // for PT_LOAD segments.  Note that this does not mean that
4040   // addresses should be aligned to this value; it means the p_paddr
4041   // and p_vaddr fields must be congruent modulo this value.  For
4042   // non-PT_LOAD segments, the dynamic linker works more efficiently
4043   // if the p_align field has the more conventional value, although it
4044   // can align as needed.
4045   uint64_t min_p_align_;
4046   // The offset of the segment data within the file.
4047   off_t offset_;
4048   // The size of the segment data in the file.
4049   off_t filesz_;
4050   // The segment type;
4051   elfcpp::Elf_Word type_;
4052   // The segment flags.
4053   elfcpp::Elf_Word flags_;
4054   // Whether we have finalized max_align_.
4055   bool is_max_align_known_ : 1;
4056   // Whether vaddr and paddr were set by a linker script.
4057   bool are_addresses_set_ : 1;
4058   // Whether this segment holds large data sections.
4059   bool is_large_data_segment_ : 1;
4060 };
4061
4062 // This class represents the output file.
4063
4064 class Output_file
4065 {
4066  public:
4067   Output_file(const char* name);
4068
4069   // Indicate that this is a temporary file which should not be
4070   // output.
4071   void
4072   set_is_temporary()
4073   { this->is_temporary_ = true; }
4074
4075   // Try to open an existing file. Returns false if the file doesn't
4076   // exist, has a size of 0 or can't be mmaped.  This method is
4077   // thread-unsafe.
4078   bool
4079   open_for_modification();
4080
4081   // Open the output file.  FILE_SIZE is the final size of the file.
4082   // If the file already exists, it is deleted/truncated.  This method
4083   // is thread-unsafe.
4084   void
4085   open(off_t file_size);
4086
4087   // Resize the output file.  This method is thread-unsafe.
4088   void
4089   resize(off_t file_size);
4090
4091   // Close the output file (flushing all buffered data) and make sure
4092   // there are no errors.  This method is thread-unsafe.
4093   void
4094   close();
4095
4096   // Return the size of this file.
4097   off_t
4098   filesize()
4099   { return this->file_size_; }
4100
4101   // Return the name of this file.
4102   const char*
4103   filename()
4104   { return this->name_; }
4105
4106   // We currently always use mmap which makes the view handling quite
4107   // simple.  In the future we may support other approaches.
4108
4109   // Write data to the output file.
4110   void
4111   write(off_t offset, const void* data, size_t len)
4112   { memcpy(this->base_ + offset, data, len); }
4113
4114   // Get a buffer to use to write to the file, given the offset into
4115   // the file and the size.
4116   unsigned char*
4117   get_output_view(off_t start, size_t size)
4118   {
4119     gold_assert(start >= 0
4120                 && start + static_cast<off_t>(size) <= this->file_size_);
4121     return this->base_ + start;
4122   }
4123
4124   // VIEW must have been returned by get_output_view.  Write the
4125   // buffer to the file, passing in the offset and the size.
4126   void
4127   write_output_view(off_t, size_t, unsigned char*)
4128   { }
4129
4130   // Get a read/write buffer.  This is used when we want to write part
4131   // of the file, read it in, and write it again.
4132   unsigned char*
4133   get_input_output_view(off_t start, size_t size)
4134   { return this->get_output_view(start, size); }
4135
4136   // Write a read/write buffer back to the file.
4137   void
4138   write_input_output_view(off_t, size_t, unsigned char*)
4139   { }
4140
4141   // Get a read buffer.  This is used when we just want to read part
4142   // of the file back it in.
4143   const unsigned char*
4144   get_input_view(off_t start, size_t size)
4145   { return this->get_output_view(start, size); }
4146
4147   // Release a read bfufer.
4148   void
4149   free_input_view(off_t, size_t, const unsigned char*)
4150   { }
4151
4152  private:
4153   // Map the file into memory or, if that fails, allocate anonymous
4154   // memory.
4155   void
4156   map();
4157
4158   // Allocate anonymous memory for the file.
4159   bool
4160   map_anonymous();
4161
4162   // Map the file into memory.
4163   bool
4164   map_no_anonymous();
4165
4166   // Unmap the file from memory (and flush to disk buffers).
4167   void
4168   unmap();
4169
4170   // File name.
4171   const char* name_;
4172   // File descriptor.
4173   int o_;
4174   // File size.
4175   off_t file_size_;
4176   // Base of file mapped into memory.
4177   unsigned char* base_;
4178   // True iff base_ points to a memory buffer rather than an output file.
4179   bool map_is_anonymous_;
4180   // True if this is a temporary file which should not be output.
4181   bool is_temporary_;
4182 };
4183
4184 } // End namespace gold.
4185
4186 #endif // !defined(GOLD_OUTPUT_H)