Add global parameters.
[external/binutils.git] / gold / output.h
1 // output.h -- manage the output file for gold   -*- C++ -*-
2
3 #ifndef GOLD_OUTPUT_H
4 #define GOLD_OUTPUT_H
5
6 #include <list>
7 #include <vector>
8
9 #include "elfcpp.h"
10 #include "layout.h"
11 #include "reloc-types.h"
12
13 namespace gold
14 {
15
16 class General_options;
17 class Object;
18 class Symbol;
19 class Output_file;
20 class Output_section;
21 class Target;
22 template<int size, bool big_endian>
23 class Sized_target;
24 template<int size, bool big_endian>
25 class Sized_relobj;
26
27 // An abtract class for data which has to go into the output file.
28
29 class Output_data
30 {
31  public:
32   explicit Output_data(off_t data_size = 0)
33     : address_(0), data_size_(data_size), offset_(-1)
34   { }
35
36   virtual
37   ~Output_data();
38
39   // Return the address.  This is only valid after Layout::finalize is
40   // finished.
41   uint64_t
42   address() const
43   { return this->address_; }
44
45   // Return the size of the data.  This must be valid after
46   // Layout::finalize calls set_address, but need not be valid before
47   // then.
48   off_t
49   data_size() const
50   { return this->data_size_; }
51
52   // Return the file offset.  This is only valid after
53   // Layout::finalize is finished.
54   off_t
55   offset() const
56   { return this->offset_; }
57
58   // Return the required alignment.
59   uint64_t
60   addralign() const
61   { return this->do_addralign(); }
62
63   // Return whether this is an Output_section.
64   bool
65   is_section() const
66   { return this->do_is_section(); }
67
68   // Return whether this is an Output_section of the specified type.
69   bool
70   is_section_type(elfcpp::Elf_Word stt) const
71   { return this->do_is_section_type(stt); }
72
73   // Return whether this is an Output_section with the specified flag
74   // set.
75   bool
76   is_section_flag_set(elfcpp::Elf_Xword shf) const
77   { return this->do_is_section_flag_set(shf); }
78
79   // Return the output section index, if there is an output section.
80   unsigned int
81   out_shndx() const
82   { return this->do_out_shndx(); }
83
84   // Set the output section index, if this is an output section.
85   void
86   set_out_shndx(unsigned int shndx)
87   { this->do_set_out_shndx(shndx); }
88
89   // Set the address and file offset of this data.  This is called
90   // during Layout::finalize.
91   void
92   set_address(uint64_t addr, off_t off);
93
94   // Write the data to the output file.  This is called after
95   // Layout::finalize is complete.
96   void
97   write(Output_file* file)
98   { this->do_write(file); }
99
100   // This is called by Layout::finalize to note that all sizes must
101   // now be fixed.
102   static void
103   layout_complete()
104   { Output_data::sizes_are_fixed = true; }
105
106  protected:
107   // Functions that child classes may or in some cases must implement.
108
109   // Write the data to the output file.
110   virtual void
111   do_write(Output_file*) = 0;
112
113   // Return the required alignment.
114   virtual uint64_t
115   do_addralign() const = 0;
116
117   // Return whether this is an Output_section.
118   virtual bool
119   do_is_section() const
120   { return false; }
121
122   // Return whether this is an Output_section of the specified type.
123   // This only needs to be implement by Output_section.
124   virtual bool
125   do_is_section_type(elfcpp::Elf_Word) const
126   { return false; }
127
128   // Return whether this is an Output_section with the specific flag
129   // set.  This only needs to be implemented by Output_section.
130   virtual bool
131   do_is_section_flag_set(elfcpp::Elf_Xword) const
132   { return false; }
133
134   // Return the output section index, if there is an output section.
135   virtual unsigned int
136   do_out_shndx() const
137   { gold_unreachable(); }
138
139   // Set the output section index, if this is an output section.
140   virtual void
141   do_set_out_shndx(unsigned int)
142   { gold_unreachable(); }
143
144   // Set the address and file offset of the data.  This only needs to
145   // be implemented if the child needs to know.  The child class can
146   // set its size in this call.
147   virtual void
148   do_set_address(uint64_t, off_t)
149   { }
150
151   // Functions that child classes may call.
152
153   // Set the size of the data.
154   void
155   set_data_size(off_t data_size)
156   {
157     gold_assert(!Output_data::sizes_are_fixed);
158     this->data_size_ = data_size;
159   }
160
161   // Return default alignment for a size--32 or 64.
162   static uint64_t
163   default_alignment(int size);
164
165  private:
166   Output_data(const Output_data&);
167   Output_data& operator=(const Output_data&);
168
169   // This is used for verification, to make sure that we don't try to
170   // change any sizes after we set the section addresses.
171   static bool sizes_are_fixed;
172
173   // Memory address in file (not always meaningful).
174   uint64_t address_;
175   // Size of data in file.
176   off_t data_size_;
177   // Offset within file.
178   off_t offset_;
179 };
180
181 // Output the section headers.
182
183 class Output_section_headers : public Output_data
184 {
185  public:
186   Output_section_headers(int size,
187                          bool big_endian,
188                          const Layout*,
189                          const Layout::Segment_list*,
190                          const Layout::Section_list*,
191                          const Stringpool*);
192
193   // Write the data to the file.
194   void
195   do_write(Output_file*);
196
197   // Return the required alignment.
198   uint64_t
199   do_addralign() const
200   { return Output_data::default_alignment(this->size_); }
201
202  private:
203   // Write the data to the file with the right size and endianness.
204   template<int size, bool big_endian>
205   void
206   do_sized_write(Output_file*);
207
208   int size_;
209   bool big_endian_;
210   const Layout* layout_;
211   const Layout::Segment_list* segment_list_;
212   const Layout::Section_list* unattached_section_list_;
213   const Stringpool* secnamepool_;
214 };
215
216 // Output the segment headers.
217
218 class Output_segment_headers : public Output_data
219 {
220  public:
221   Output_segment_headers(int size, bool big_endian,
222                          const Layout::Segment_list& segment_list);
223
224   // Write the data to the file.
225   void
226   do_write(Output_file*);
227
228   // Return the required alignment.
229   uint64_t
230   do_addralign() const
231   { return Output_data::default_alignment(this->size_); }
232
233  private:
234   // Write the data to the file with the right size and endianness.
235   template<int size, bool big_endian>
236   void
237   do_sized_write(Output_file*);
238
239   int size_;
240   bool big_endian_;
241   const Layout::Segment_list& segment_list_;
242 };
243
244 // Output the ELF file header.
245
246 class Output_file_header : public Output_data
247 {
248  public:
249   Output_file_header(int size,
250                      bool big_endian,
251                      const Target*,
252                      const Symbol_table*,
253                      const Output_segment_headers*);
254
255   // Add information about the section headers.  We lay out the ELF
256   // file header before we create the section headers.
257   void set_section_info(const Output_section_headers*,
258                         const Output_section* shstrtab);
259
260   // Write the data to the file.
261   void
262   do_write(Output_file*);
263
264   // Return the required alignment.
265   uint64_t
266   do_addralign() const
267   { return Output_data::default_alignment(this->size_); }
268
269   // Set the address and offset--we only implement this for error
270   // checking.
271   void
272   do_set_address(uint64_t, off_t off) const
273   { gold_assert(off == 0); }
274
275  private:
276   // Write the data to the file with the right size and endianness.
277   template<int size, bool big_endian>
278   void
279   do_sized_write(Output_file*);
280
281   int size_;
282   bool big_endian_;
283   const Target* target_;
284   const Symbol_table* symtab_;
285   const Output_segment_headers* segment_header_;
286   const Output_section_headers* section_header_;
287   const Output_section* shstrtab_;
288 };
289
290 // Output sections are mainly comprised of input sections.  However,
291 // there are cases where we have data to write out which is not in an
292 // input section.  Output_section_data is used in such cases.  This is
293 // an abstract base class.
294
295 class Output_section_data : public Output_data
296 {
297  public:
298   Output_section_data(off_t data_size, uint64_t addralign)
299     : Output_data(data_size), output_section_(NULL), addralign_(addralign)
300   { }
301
302   Output_section_data(uint64_t addralign)
303     : Output_data(0), output_section_(NULL), addralign_(addralign)
304   { }
305
306   // Return the output section.
307   const Output_section*
308   output_section() const
309   { return this->output_section_; }
310
311   // Record the output section.
312   void
313   set_output_section(Output_section* os);
314
315   // Add an input section, for SHF_MERGE sections.  This returns true
316   // if the section was handled.
317   bool
318   add_input_section(Relobj* object, unsigned int shndx)
319   { return this->do_add_input_section(object, shndx); }
320
321   // Given an input OBJECT, an input section index SHNDX within that
322   // object, and an OFFSET relative to the start of that input
323   // section, return whether or not the output address is known.
324   // OUTPUT_SECTION_ADDRESS is the address of the output section which
325   // this is a part of.  If this function returns true, it sets
326   // *POUTPUT to the output address.
327   virtual bool
328   output_address(const Relobj* object, unsigned int shndx, off_t offset,
329                  uint64_t output_section_address, uint64_t *poutput) const
330   {
331     return this->do_output_address(object, shndx, offset,
332                                    output_section_address, poutput);
333   }
334
335  protected:
336   // The child class must implement do_write.
337
338   // The child class may implement specific adjustments to the output
339   // section.
340   virtual void
341   do_adjust_output_section(Output_section*)
342   { }
343
344   // May be implemented by child class.  Return true if the section
345   // was handled.
346   virtual bool
347   do_add_input_section(Relobj*, unsigned int)
348   { gold_unreachable(); }
349
350   // The child class may implement output_address.
351   virtual bool
352   do_output_address(const Relobj*, unsigned int, off_t, uint64_t,
353                     uint64_t*) const
354   { return false; }
355
356   // Return the required alignment.
357   uint64_t
358   do_addralign() const
359   { return this->addralign_; }
360
361   // Return the section index of the output section.
362   unsigned int
363   do_out_shndx() const;
364
365   // Set the alignment.
366   void
367   set_addralign(uint64_t addralign)
368   { this->addralign_ = addralign; }
369
370  private:
371   // The output section for this section.
372   const Output_section* output_section_;
373   // The required alignment.
374   uint64_t addralign_;
375 };
376
377 // A simple case of Output_data in which we have constant data to
378 // output.
379
380 class Output_data_const : public Output_section_data
381 {
382  public:
383   Output_data_const(const std::string& data, uint64_t addralign)
384     : Output_section_data(data.size(), addralign), data_(data)
385   { }
386
387   Output_data_const(const char* p, off_t len, uint64_t addralign)
388     : Output_section_data(len, addralign), data_(p, len)
389   { }
390
391   Output_data_const(const unsigned char* p, off_t len, uint64_t addralign)
392     : Output_section_data(len, addralign),
393       data_(reinterpret_cast<const char*>(p), len)
394   { }
395
396   // Add more data.
397   void
398   add_data(const std::string& add)
399   {
400     this->data_.append(add);
401     this->set_data_size(this->data_.size());
402   }
403
404   // Write the data to the output file.
405   void
406   do_write(Output_file*);
407
408  private:
409   std::string data_;
410 };
411
412 // Another version of Output_data with constant data, in which the
413 // buffer is allocated by the caller.
414
415 class Output_data_const_buffer : public Output_section_data
416 {
417  public:
418   Output_data_const_buffer(const unsigned char* p, off_t len,
419                            uint64_t addralign)
420     : Output_section_data(len, addralign), p_(p)
421   { }
422
423   // Write the data the output file.
424   void
425   do_write(Output_file*);
426
427  private:
428   const unsigned char* p_;
429 };
430
431 // A place holder for data written out via some other mechanism.
432
433 class Output_data_space : public Output_section_data
434 {
435  public:
436   Output_data_space(off_t data_size, uint64_t addralign)
437     : Output_section_data(data_size, addralign)
438   { }
439
440   explicit Output_data_space(uint64_t addralign)
441     : Output_section_data(addralign)
442   { }
443
444   // Set the size.
445   void
446   set_space_size(off_t space_size)
447   { this->set_data_size(space_size); }
448
449   // Set the alignment.
450   void
451   set_space_alignment(uint64_t align)
452   { this->set_addralign(align); }
453
454   // Write out the data--this must be handled elsewhere.
455   void
456   do_write(Output_file*)
457   { }
458 };
459
460 // A string table which goes into an output section.
461
462 class Output_data_strtab : public Output_section_data
463 {
464  public:
465   Output_data_strtab(Stringpool* strtab)
466     : Output_section_data(1), strtab_(strtab)
467   { }
468
469   // This is called to set the address and file offset.  Here we make
470   // sure that the Stringpool is finalized.
471   void
472   do_set_address(uint64_t, off_t);
473
474   // Write out the data.
475   void
476   do_write(Output_file*);
477
478  private:
479   Stringpool* strtab_;
480 };
481
482 // This POD class is used to represent a single reloc in the output
483 // file.  This could be a private class within Output_data_reloc, but
484 // the templatization is complex enough that I broke it out into a
485 // separate class.  The class is templatized on either elfcpp::SHT_REL
486 // or elfcpp::SHT_RELA, and also on whether this is a dynamic
487 // relocation or an ordinary relocation.
488
489 // A relocation can be against a global symbol, a local symbol, an
490 // output section, or the undefined symbol at index 0.  We represent
491 // the latter by using a NULL global symbol.
492
493 template<int sh_type, bool dynamic, int size, bool big_endian>
494 class Output_reloc;
495
496 template<bool dynamic, int size, bool big_endian>
497 class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
498 {
499  public:
500   typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
501
502   // An uninitialized entry.  We need this because we want to put
503   // instances of this class into an STL container.
504   Output_reloc()
505     : local_sym_index_(INVALID_CODE)
506   { }
507
508   // A reloc against a global symbol.
509
510   Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
511                Address address)
512     : address_(address), local_sym_index_(GSYM_CODE), type_(type),
513       shndx_(INVALID_CODE)
514   {
515     this->u1_.gsym = gsym;
516     this->u2_.od = od;
517   }
518
519   Output_reloc(Symbol* gsym, unsigned int type, Relobj* relobj,
520                unsigned int shndx, Address address)
521     : address_(address), local_sym_index_(GSYM_CODE), type_(type),
522       shndx_(shndx)
523   {
524     gold_assert(shndx != INVALID_CODE);
525     this->u1_.gsym = gsym;
526     this->u2_.relobj = relobj;
527   }
528
529   // A reloc against a local symbol.
530
531   Output_reloc(Sized_relobj<size, big_endian>* relobj,
532                unsigned int local_sym_index,
533                unsigned int type,
534                Output_data* od,
535                Address address)
536     : address_(address), local_sym_index_(local_sym_index), type_(type),
537       shndx_(INVALID_CODE)
538   {
539     gold_assert(local_sym_index != GSYM_CODE
540                 && local_sym_index != INVALID_CODE);
541     this->u1_.relobj = relobj;
542     this->u2_.od = od;
543   }
544
545   Output_reloc(Sized_relobj<size, big_endian>* relobj,
546                unsigned int local_sym_index,
547                unsigned int type,
548                unsigned int shndx,
549                Address address)
550     : address_(address), local_sym_index_(local_sym_index), type_(type),
551       shndx_(shndx)
552   {
553     gold_assert(local_sym_index != GSYM_CODE
554                 && local_sym_index != INVALID_CODE);
555     gold_assert(shndx != INVALID_CODE);
556     this->u1_.relobj = relobj;
557     this->u2_.relobj = relobj;
558   }
559
560   // A reloc against the STT_SECTION symbol of an output section.
561
562   Output_reloc(Output_section* os, unsigned int type, Output_data* od,
563                Address address)
564     : address_(address), local_sym_index_(SECTION_CODE), type_(type),
565       shndx_(INVALID_CODE)
566   {
567     this->u1_.os = os;
568     this->u2_.od = od;
569   }
570
571   Output_reloc(Output_section* os, unsigned int type, Relobj* relobj,
572                unsigned int shndx, Address address)
573     : address_(address), local_sym_index_(SECTION_CODE), type_(type),
574       shndx_(shndx)
575   {
576     gold_assert(shndx != INVALID_CODE);
577     this->u1_.os = os;
578     this->u2_.relobj = relobj;
579   }
580
581   // Write the reloc entry to an output view.
582   void
583   write(unsigned char* pov) const;
584
585   // Write the offset and info fields to Write_rel.
586   template<typename Write_rel>
587   void write_rel(Write_rel*) const;
588
589  private:
590   // Return the symbol index.  We can't do a double template
591   // specialization, so we do a secondary template here.
592   unsigned int
593   get_symbol_index() const;
594
595   // Codes for local_sym_index_.
596   enum
597   {
598     // Global symbol.
599     GSYM_CODE = -1U,
600     // Output section.
601     SECTION_CODE = -2U,
602     // Invalid uninitialized entry.
603     INVALID_CODE = -3U
604   };
605
606   union
607   {
608     // For a local symbol, the object.  We will never generate a
609     // relocation against a local symbol in a dynamic object; that
610     // doesn't make sense.  And our callers will always be
611     // templatized, so we use Sized_relobj here.
612     Sized_relobj<size, big_endian>* relobj;
613     // For a global symbol, the symbol.  If this is NULL, it indicates
614     // a relocation against the undefined 0 symbol.
615     Symbol* gsym;
616     // For a relocation against an output section, the output section.
617     Output_section* os;
618   } u1_;
619   union
620   {
621     // If shndx_ is not INVALID CODE, the object which holds the input
622     // section being used to specify the reloc address.
623     Relobj* relobj;
624     // If shndx_ is INVALID_CODE, the output data being used to
625     // specify the reloc address.  This may be NULL if the reloc
626     // address is absolute.
627     Output_data* od;
628   } u2_;
629   // The address offset within the input section or the Output_data.
630   Address address_;
631   // For a local symbol, the local symbol index.  This is GSYM_CODE
632   // for a global symbol, or INVALID_CODE for an uninitialized value.
633   unsigned int local_sym_index_;
634   // The reloc type--a processor specific code.
635   unsigned int type_;
636   // If the reloc address is an input section in an object, the
637   // section index.  This is INVALID_CODE if the reloc address is
638   // specified in some other way.
639   unsigned int shndx_;
640 };
641
642 // The SHT_RELA version of Output_reloc<>.  This is just derived from
643 // the SHT_REL version of Output_reloc, but it adds an addend.
644
645 template<bool dynamic, int size, bool big_endian>
646 class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
647 {
648  public:
649   typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
650   typedef typename elfcpp::Elf_types<size>::Elf_Addr Addend;
651
652   // An uninitialized entry.
653   Output_reloc()
654     : rel_()
655   { }
656
657   // A reloc against a global symbol.
658
659   Output_reloc(Symbol* gsym, unsigned int type, Output_data* od,
660                Address address, Addend addend)
661     : rel_(gsym, type, od, address), addend_(addend)
662   { }
663
664   Output_reloc(Symbol* gsym, unsigned int type, Relobj* relobj,
665                unsigned int shndx, Address address, Addend addend)
666     : rel_(gsym, type, relobj, shndx, address), addend_(addend)
667   { }
668
669   // A reloc against a local symbol.
670
671   Output_reloc(Sized_relobj<size, big_endian>* relobj,
672                unsigned int local_sym_index,
673                unsigned int type, Output_data* od, Address address,
674                Addend addend)
675     : rel_(relobj, local_sym_index, type, od, address), addend_(addend)
676   { }
677
678   Output_reloc(Sized_relobj<size, big_endian>* relobj,
679                unsigned int local_sym_index,
680                unsigned int type,
681                unsigned int shndx,
682                Address address,
683                Addend addend)
684     : rel_(relobj, local_sym_index, type, shndx, address),
685       addend_(addend)
686   { }
687
688   // A reloc against the STT_SECTION symbol of an output section.
689
690   Output_reloc(Output_section* os, unsigned int type, Output_data* od,
691                Address address, Addend addend)
692     : rel_(os, type, od, address), addend_(addend)
693   { }
694
695   Output_reloc(Output_section* os, unsigned int type, Relobj* relobj,
696                unsigned int shndx, Address address, Addend addend)
697     : rel_(os, type, relobj, shndx, address), addend_(addend)
698   { }
699
700   // Write the reloc entry to an output view.
701   void
702   write(unsigned char* pov) const;
703
704  private:
705   // The basic reloc.
706   Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian> rel_;
707   // The addend.
708   Addend addend_;
709 };
710
711 // Output_data_reloc is used to manage a section containing relocs.
712 // SH_TYPE is either elfcpp::SHT_REL or elfcpp::SHT_RELA.  DYNAMIC
713 // indicates whether this is a dynamic relocation or a normal
714 // relocation.  Output_data_reloc_base is a base class.
715 // Output_data_reloc is the real class, which we specialize based on
716 // the reloc type.
717
718 template<int sh_type, bool dynamic, int size, bool big_endian>
719 class Output_data_reloc_base : public Output_section_data
720 {
721  public:
722   typedef Output_reloc<sh_type, dynamic, size, big_endian> Output_reloc_type;
723   typedef typename Output_reloc_type::Address Address;
724   static const int reloc_size =
725     Reloc_types<sh_type, size, big_endian>::reloc_size;
726
727   // Construct the section.
728   Output_data_reloc_base()
729     : Output_section_data(Output_data::default_alignment(size))
730   { }
731
732   // Write out the data.
733   void
734   do_write(Output_file*);
735
736  protected:
737   // Set the entry size and the link.
738   void
739   do_adjust_output_section(Output_section *os);
740
741   // Add a relocation entry.
742   void
743   add(const Output_reloc_type& reloc)
744   {
745     this->relocs_.push_back(reloc);
746     this->set_data_size(this->relocs_.size() * reloc_size);
747   }
748
749  private:
750   typedef std::vector<Output_reloc_type> Relocs;
751
752   Relocs relocs_;
753 };
754
755 // The class which callers actually create.
756
757 template<int sh_type, bool dynamic, int size, bool big_endian>
758 class Output_data_reloc;
759
760 // The SHT_REL version of Output_data_reloc.
761
762 template<bool dynamic, int size, bool big_endian>
763 class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
764   : public Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>
765 {
766  private: 
767   typedef Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size,
768                                  big_endian> Base;
769
770  public:
771   typedef typename Base::Output_reloc_type Output_reloc_type;
772   typedef typename Output_reloc_type::Address Address;
773
774   Output_data_reloc()
775     : Output_data_reloc_base<elfcpp::SHT_REL, dynamic, size, big_endian>()
776   { }
777
778   // Add a reloc against a global symbol.
779
780   void
781   add_global(Symbol* gsym, unsigned int type, Output_data* od, Address address)
782   { this->add(Output_reloc_type(gsym, type, od, address)); }
783
784   void
785   add_global(Symbol* gsym, unsigned int type, Relobj* relobj,
786              unsigned int shndx, Address address)
787   { this->add(Output_reloc_type(gsym, type, relobj, shndx, address)); }
788
789   // Add a reloc against a local symbol.
790
791   void
792   add_local(Sized_relobj<size, big_endian>* relobj,
793             unsigned int local_sym_index, unsigned int type,
794             Output_data* od, Address address)
795   { this->add(Output_reloc_type(relobj, local_sym_index, type, od, address)); }
796
797   void
798   add_local(Sized_relobj<size, big_endian>* relobj,
799             unsigned int local_sym_index, unsigned int type,
800             unsigned int shndx, Address address)
801   { this->add(Output_reloc_type(relobj, local_sym_index, type, shndx,
802                                 address)); }
803
804
805   // A reloc against the STT_SECTION symbol of an output section.
806
807   void
808   add_output_section(Output_section* os, unsigned int type,
809                      Output_data* od, Address address)
810   { this->add(Output_reloc_type(os, type, od, address)); }
811
812   void
813   add_output_section(Output_section* os, unsigned int type,
814                      Relobj* relobj, unsigned int shndx, Address address)
815   { this->add(Output_reloc_type(os, type, relobj, shndx, address)); }
816 };
817
818 // The SHT_RELA version of Output_data_reloc.
819
820 template<bool dynamic, int size, bool big_endian>
821 class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
822   : public Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>
823 {
824  private: 
825   typedef Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size,
826                                  big_endian> Base;
827
828  public:
829   typedef typename Base::Output_reloc_type Output_reloc_type;
830   typedef typename Output_reloc_type::Address Address;
831   typedef typename Output_reloc_type::Addend Addend;
832
833   Output_data_reloc()
834     : Output_data_reloc_base<elfcpp::SHT_RELA, dynamic, size, big_endian>()
835   { }
836
837   // Add a reloc against a global symbol.
838
839   void
840   add_global(Symbol* gsym, unsigned int type, Output_data* od,
841              Address address, Addend addend)
842   { this->add(Output_reloc_type(gsym, type, od, address, addend)); }
843
844   void
845   add_global(Symbol* gsym, unsigned int type, Relobj* relobj,
846              unsigned int shndx, Address address, Addend addend)
847   { this->add(Output_reloc_type(gsym, type, relobj, shndx, address, addend)); }
848
849   // Add a reloc against a local symbol.
850
851   void
852   add_local(Sized_relobj<size, big_endian>* relobj,
853             unsigned int local_sym_index, unsigned int type,
854             Output_data* od, Address address, Addend addend)
855   {
856     this->add(Output_reloc_type(relobj, local_sym_index, type, od, address,
857                                 addend));
858   }
859
860   void
861   add_local(Sized_relobj<size, big_endian>* relobj,
862             unsigned int local_sym_index, unsigned int type,
863             unsigned int shndx, Address address, Addend addend)
864   {
865     this->add(Output_reloc_type(relobj, local_sym_index, type, shndx, address,
866                                 addend));
867   }
868
869   // A reloc against the STT_SECTION symbol of an output section.
870
871   void
872   add_output_section(Output_section* os, unsigned int type, Output_data* od,
873                      Address address, Addend addend)
874   { this->add(Output_reloc_type(os, type, od, address, addend)); }
875
876   void
877   add_output_section(Output_section* os, unsigned int type, Relobj* relobj,
878                      unsigned int shndx, Address address, Addend addend)
879   { this->add(Output_reloc_type(os, type, relobj, shndx, address, addend)); }
880 };
881
882 // Output_data_got is used to manage a GOT.  Each entry in the GOT is
883 // for one symbol--either a global symbol or a local symbol in an
884 // object.  The target specific code adds entries to the GOT as
885 // needed.
886
887 template<int size, bool big_endian>
888 class Output_data_got : public Output_section_data
889 {
890  public:
891   typedef typename elfcpp::Elf_types<size>::Elf_Addr Valtype;
892
893   Output_data_got()
894     : Output_section_data(Output_data::default_alignment(size)), entries_()
895   { }
896
897   // Add an entry for a global symbol to the GOT.  Return true if this
898   // is a new GOT entry, false if the symbol was already in the GOT.
899   bool
900   add_global(Symbol* gsym);
901
902   // Add an entry for a local symbol to the GOT.  This returns the
903   // offset of the new entry from the start of the GOT.
904   unsigned int
905   add_local(Object* object, unsigned int sym_index)
906   {
907     this->entries_.push_back(Got_entry(object, sym_index));
908     this->set_got_size();
909     return this->last_got_offset();
910   }
911
912   // Add a constant to the GOT.  This returns the offset of the new
913   // entry from the start of the GOT.
914   unsigned int
915   add_constant(Valtype constant)
916   {
917     this->entries_.push_back(Got_entry(constant));
918     this->set_got_size();
919     return this->last_got_offset();
920   }
921
922   // Write out the GOT table.
923   void
924   do_write(Output_file*);
925
926  private:
927   // This POD class holds a single GOT entry.
928   class Got_entry
929   {
930    public:
931     // Create a zero entry.
932     Got_entry()
933       : local_sym_index_(CONSTANT_CODE)
934     { this->u_.constant = 0; }
935
936     // Create a global symbol entry.
937     explicit Got_entry(Symbol* gsym)
938       : local_sym_index_(GSYM_CODE)
939     { this->u_.gsym = gsym; }
940
941     // Create a local symbol entry.
942     Got_entry(Object* object, unsigned int local_sym_index)
943       : local_sym_index_(local_sym_index)
944     {
945       gold_assert(local_sym_index != GSYM_CODE
946                   && local_sym_index != CONSTANT_CODE);
947       this->u_.object = object;
948     }
949
950     // Create a constant entry.  The constant is a host value--it will
951     // be swapped, if necessary, when it is written out.
952     explicit Got_entry(Valtype constant)
953       : local_sym_index_(CONSTANT_CODE)
954     { this->u_.constant = constant; }
955
956     // Write the GOT entry to an output view.
957     void
958     write(unsigned char* pov) const;
959
960    private:
961     enum
962     {
963       GSYM_CODE = -1U,
964       CONSTANT_CODE = -2U
965     };
966
967     union
968     {
969       // For a local symbol, the object.
970       Object* object;
971       // For a global symbol, the symbol.
972       Symbol* gsym;
973       // For a constant, the constant.
974       Valtype constant;
975     } u_;
976     // For a local symbol, the local symbol index.  This is GSYM_CODE
977     // for a global symbol, or CONSTANT_CODE for a constant.
978     unsigned int local_sym_index_;
979   };
980
981   typedef std::vector<Got_entry> Got_entries;
982
983   // Return the offset into the GOT of GOT entry I.
984   unsigned int
985   got_offset(unsigned int i) const
986   { return i * (size / 8); }
987
988   // Return the offset into the GOT of the last entry added.
989   unsigned int
990   last_got_offset() const
991   { return this->got_offset(this->entries_.size() - 1); }
992
993   // Set the size of the section.
994   void
995   set_got_size()
996   { this->set_data_size(this->got_offset(this->entries_.size())); }
997
998   // The list of GOT entries.
999   Got_entries entries_;
1000 };
1001
1002 // Output_data_dynamic is used to hold the data in SHT_DYNAMIC
1003 // section.
1004
1005 class Output_data_dynamic : public Output_section_data
1006 {
1007  public:
1008   Output_data_dynamic(const Target* target, Stringpool* pool)
1009     : Output_section_data(Output_data::default_alignment(target->get_size())),
1010       target_(target), entries_(), pool_(pool)
1011   { }
1012
1013   // Add a new dynamic entry with a fixed numeric value.
1014   void
1015   add_constant(elfcpp::DT tag, unsigned int val)
1016   { this->add_entry(Dynamic_entry(tag, val)); }
1017
1018   // Add a new dynamic entry with the address of output data.
1019   void
1020   add_section_address(elfcpp::DT tag, const Output_data* od)
1021   { this->add_entry(Dynamic_entry(tag, od, false)); }
1022
1023   // Add a new dynamic entry with the size of output data.
1024   void
1025   add_section_size(elfcpp::DT tag, const Output_data* od)
1026   { this->add_entry(Dynamic_entry(tag, od, true)); }
1027
1028   // Add a new dynamic entry with the address of a symbol.
1029   void
1030   add_symbol(elfcpp::DT tag, const Symbol* sym)
1031   { this->add_entry(Dynamic_entry(tag, sym)); }
1032
1033   // Add a new dynamic entry with a string.
1034   void
1035   add_string(elfcpp::DT tag, const char* str)
1036   { this->add_entry(Dynamic_entry(tag, this->pool_->add(str, NULL))); }
1037
1038   void
1039   add_string(elfcpp::DT tag, const std::string& str)
1040   { this->add_string(tag, str.c_str()); }
1041
1042   // Set the final data size.
1043   void
1044   do_set_address(uint64_t, off_t);
1045
1046   // Write out the dynamic entries.
1047   void
1048   do_write(Output_file*);
1049
1050  protected:
1051   // Adjust the output section to set the entry size.
1052   void
1053   do_adjust_output_section(Output_section*);
1054
1055  private:
1056   // This POD class holds a single dynamic entry.
1057   class Dynamic_entry
1058   {
1059    public:
1060     // Create an entry with a fixed numeric value.
1061     Dynamic_entry(elfcpp::DT tag, unsigned int val)
1062       : tag_(tag), classification_(DYNAMIC_NUMBER)
1063     { this->u_.val = val; }
1064
1065     // Create an entry with the size or address of a section.
1066     Dynamic_entry(elfcpp::DT tag, const Output_data* od, bool section_size)
1067       : tag_(tag),
1068         classification_(section_size
1069                         ? DYNAMIC_SECTION_SIZE
1070                         : DYNAMIC_SECTION_ADDRESS)
1071     { this->u_.od = od; }
1072
1073     // Create an entry with the address of a symbol.
1074     Dynamic_entry(elfcpp::DT tag, const Symbol* sym)
1075       : tag_(tag), classification_(DYNAMIC_SYMBOL)
1076     { this->u_.sym = sym; }
1077
1078     // Create an entry with a string.
1079     Dynamic_entry(elfcpp::DT tag, const char* str)
1080       : tag_(tag), classification_(DYNAMIC_STRING)
1081     { this->u_.str = str; }
1082
1083     // Write the dynamic entry to an output view.
1084     template<int size, bool big_endian>
1085     void
1086     write(unsigned char* pov, const Stringpool* ACCEPT_SIZE_ENDIAN) const;
1087
1088    private:
1089     enum Classification
1090     {
1091       // Number.
1092       DYNAMIC_NUMBER,
1093       // Section address.
1094       DYNAMIC_SECTION_ADDRESS,
1095       // Section size.
1096       DYNAMIC_SECTION_SIZE,
1097       // Symbol adress.
1098       DYNAMIC_SYMBOL,
1099       // String.
1100       DYNAMIC_STRING
1101     };
1102
1103     union
1104     {
1105       // For DYNAMIC_NUMBER.
1106       unsigned int val;
1107       // For DYNAMIC_SECTION_ADDRESS and DYNAMIC_SECTION_SIZE.
1108       const Output_data* od;
1109       // For DYNAMIC_SYMBOL.
1110       const Symbol* sym;
1111       // For DYNAMIC_STRING.
1112       const char* str;
1113     } u_;
1114     // The dynamic tag.
1115     elfcpp::DT tag_;
1116     // The type of entry.
1117     Classification classification_;
1118   };
1119
1120   // Add an entry to the list.
1121   void
1122   add_entry(const Dynamic_entry& entry)
1123   { this->entries_.push_back(entry); }
1124
1125   // Sized version of write function.
1126   template<int size, bool big_endian>
1127   void
1128   sized_write(Output_file* of);
1129
1130   // The type of the list of entries.
1131   typedef std::vector<Dynamic_entry> Dynamic_entries;
1132
1133   // The target.
1134   const Target* target_;
1135   // The entries.
1136   Dynamic_entries entries_;
1137   // The pool used for strings.
1138   Stringpool* pool_;
1139 };
1140
1141 // An output section.  We don't expect to have too many output
1142 // sections, so we don't bother to do a template on the size.
1143
1144 class Output_section : public Output_data
1145 {
1146  public:
1147   // Create an output section, giving the name, type, and flags.
1148   Output_section(const char* name, elfcpp::Elf_Word, elfcpp::Elf_Xword);
1149   virtual ~Output_section();
1150
1151   // Add a new input section SHNDX, named NAME, with header SHDR, from
1152   // object OBJECT.  Return the offset within the output section.
1153   template<int size, bool big_endian>
1154   off_t
1155   add_input_section(Relobj* object, unsigned int shndx, const char *name,
1156                     const elfcpp::Shdr<size, big_endian>& shdr);
1157
1158   // Add generated data POSD to this output section.
1159   void
1160   add_output_section_data(Output_section_data* posd);
1161
1162   // Return the section name.
1163   const char*
1164   name() const
1165   { return this->name_; }
1166
1167   // Return the section type.
1168   elfcpp::Elf_Word
1169   type() const
1170   { return this->type_; }
1171
1172   // Return the section flags.
1173   elfcpp::Elf_Xword
1174   flags() const
1175   { return this->flags_; }
1176
1177   // Return the section index in the output file.
1178   unsigned int
1179   do_out_shndx() const
1180   { return this->out_shndx_; }
1181
1182   // Set the output section index.
1183   void
1184   do_set_out_shndx(unsigned int shndx)
1185   { this->out_shndx_ = shndx; }
1186
1187   // Return the entsize field.
1188   uint64_t
1189   entsize() const
1190   { return this->entsize_; }
1191
1192   // Set the entsize field.
1193   void
1194   set_entsize(uint64_t v);
1195
1196   // Set the link field to the output section index of a section.
1197   void
1198   set_link_section(const Output_data* od)
1199   {
1200     gold_assert(this->link_ == 0
1201                 && !this->should_link_to_symtab_
1202                 && !this->should_link_to_dynsym_);
1203     this->link_section_ = od;
1204   }
1205
1206   // Set the link field to a constant.
1207   void
1208   set_link(unsigned int v)
1209   {
1210     gold_assert(this->link_section_ == NULL
1211                 && !this->should_link_to_symtab_
1212                 && !this->should_link_to_dynsym_);
1213     this->link_ = v;
1214   }
1215
1216   // Record that this section should link to the normal symbol table.
1217   void
1218   set_should_link_to_symtab()
1219   {
1220     gold_assert(this->link_section_ == NULL
1221                 && this->link_ == 0
1222                 && !this->should_link_to_dynsym_);
1223     this->should_link_to_symtab_ = true;
1224   }
1225
1226   // Record that this section should link to the dynamic symbol table.
1227   void
1228   set_should_link_to_dynsym()
1229   {
1230     gold_assert(this->link_section_ == NULL
1231                 && this->link_ == 0
1232                 && !this->should_link_to_symtab_);
1233     this->should_link_to_dynsym_ = true;
1234   }
1235
1236   // Return the info field.
1237   unsigned int
1238   info() const
1239   {
1240     gold_assert(this->info_section_ == NULL);
1241     return this->info_;
1242   }
1243
1244   // Set the info field to the output section index of a section.
1245   void
1246   set_info_section(const Output_data* od)
1247   {
1248     gold_assert(this->info_ == 0);
1249     this->info_section_ = od;
1250   }
1251
1252   // Set the info field to a constant.
1253   void
1254   set_info(unsigned int v)
1255   {
1256     gold_assert(this->info_section_ == NULL);
1257     this->info_ = v;
1258   }
1259
1260   // Set the addralign field.
1261   void
1262   set_addralign(uint64_t v)
1263   { this->addralign_ = v; }
1264
1265   // Indicate that we need a symtab index.
1266   void
1267   set_needs_symtab_index()
1268   { this->needs_symtab_index_ = true; }
1269
1270   // Return whether we need a symtab index.
1271   bool
1272   needs_symtab_index() const
1273   { return this->needs_symtab_index_; }
1274
1275   // Get the symtab index.
1276   unsigned int
1277   symtab_index() const
1278   {
1279     gold_assert(this->symtab_index_ != 0);
1280     return this->symtab_index_;
1281   }
1282
1283   // Set the symtab index.
1284   void
1285   set_symtab_index(unsigned int index)
1286   {
1287     gold_assert(index != 0);
1288     this->symtab_index_ = index;
1289   }
1290
1291   // Indicate that we need a dynsym index.
1292   void
1293   set_needs_dynsym_index()
1294   { this->needs_dynsym_index_ = true; }
1295
1296   // Return whether we need a dynsym index.
1297   bool
1298   needs_dynsym_index() const
1299   { return this->needs_dynsym_index_; }
1300
1301   // Get the dynsym index.
1302   unsigned int
1303   dynsym_index() const
1304   {
1305     gold_assert(this->dynsym_index_ != 0);
1306     return this->dynsym_index_;
1307   }
1308
1309   // Set the dynsym index.
1310   void
1311   set_dynsym_index(unsigned int index)
1312   {
1313     gold_assert(index != 0);
1314     this->dynsym_index_ = index;
1315   }
1316
1317   // Return the output virtual address of OFFSET relative to the start
1318   // of input section SHNDX in object OBJECT.
1319   uint64_t
1320   output_address(const Relobj* object, unsigned int shndx,
1321                  off_t offset) const;
1322
1323   // Set the address of the Output_section.  For a typical
1324   // Output_section, there is nothing to do, but if there are any
1325   // Output_section_data objects we need to set the final addresses
1326   // here.
1327   void
1328   do_set_address(uint64_t, off_t);
1329
1330   // Write the data to the file.  For a typical Output_section, this
1331   // does nothing: the data is written out by calling Object::Relocate
1332   // on each input object.  But if there are any Output_section_data
1333   // objects we do need to write them out here.
1334   void
1335   do_write(Output_file*);
1336
1337   // Return the address alignment--function required by parent class.
1338   uint64_t
1339   do_addralign() const
1340   { return this->addralign_; }
1341
1342   // Return whether this is an Output_section.
1343   bool
1344   do_is_section() const
1345   { return true; }
1346
1347   // Return whether this is a section of the specified type.
1348   bool
1349   do_is_section_type(elfcpp::Elf_Word type) const
1350   { return this->type_ == type; }
1351
1352   // Return whether the specified section flag is set.
1353   bool
1354   do_is_section_flag_set(elfcpp::Elf_Xword flag) const
1355   { return (this->flags_ & flag) != 0; }
1356
1357   // Write the section header into *OPHDR.
1358   template<int size, bool big_endian>
1359   void
1360   write_header(const Layout*, const Stringpool*,
1361                elfcpp::Shdr_write<size, big_endian>*) const;
1362
1363  private:
1364   // In some cases we need to keep a list of the input sections
1365   // associated with this output section.  We only need the list if we
1366   // might have to change the offsets of the input section within the
1367   // output section after we add the input section.  The ordinary
1368   // input sections will be written out when we process the object
1369   // file, and as such we don't need to track them here.  We do need
1370   // to track Output_section_data objects here.  We store instances of
1371   // this structure in a std::vector, so it must be a POD.  There can
1372   // be many instances of this structure, so we use a union to save
1373   // some space.
1374   class Input_section
1375   {
1376    public:
1377     Input_section()
1378       : shndx_(0), p2align_(0)
1379     {
1380       this->u1_.data_size = 0;
1381       this->u2_.object = NULL;
1382     }
1383
1384     // For an ordinary input section.
1385     Input_section(Relobj* object, unsigned int shndx, off_t data_size,
1386                   uint64_t addralign)
1387       : shndx_(shndx),
1388         p2align_(ffsll(static_cast<long long>(addralign)))
1389     {
1390       gold_assert(shndx != OUTPUT_SECTION_CODE
1391                   && shndx != MERGE_DATA_SECTION_CODE
1392                   && shndx != MERGE_STRING_SECTION_CODE);
1393       this->u1_.data_size = data_size;
1394       this->u2_.object = object;
1395     }
1396
1397     // For a non-merge output section.
1398     Input_section(Output_section_data* posd)
1399       : shndx_(OUTPUT_SECTION_CODE),
1400         p2align_(ffsll(static_cast<long long>(posd->addralign())))
1401     {
1402       this->u1_.data_size = 0;
1403       this->u2_.posd = posd;
1404     }
1405
1406     // For a merge section.
1407     Input_section(Output_section_data* posd, bool is_string, uint64_t entsize)
1408       : shndx_(is_string
1409                ? MERGE_STRING_SECTION_CODE
1410                : MERGE_DATA_SECTION_CODE),
1411         p2align_(ffsll(static_cast<long long>(posd->addralign())))
1412     {
1413       this->u1_.entsize = entsize;
1414       this->u2_.posd = posd;
1415     }
1416
1417     // The required alignment.
1418     uint64_t
1419     addralign() const
1420     {
1421       return (this->p2align_ == 0
1422               ? 0
1423               : static_cast<uint64_t>(1) << (this->p2align_ - 1));
1424     }
1425
1426     // Return the required size.
1427     off_t
1428     data_size() const;
1429
1430     // Return whether this is a merge section which matches the
1431     // parameters.
1432     bool
1433     is_merge_section(bool is_string, uint64_t entsize) const
1434     {
1435       return (this->shndx_ == (is_string
1436                                ? MERGE_STRING_SECTION_CODE
1437                                : MERGE_DATA_SECTION_CODE)
1438               && this->u1_.entsize == entsize);
1439     }
1440
1441     // Set the output section.
1442     void
1443     set_output_section(Output_section* os)
1444     {
1445       gold_assert(!this->is_input_section());
1446       this->u2_.posd->set_output_section(os);
1447     }
1448
1449     // Set the address and file offset.  This is called during
1450     // Layout::finalize.  SECOFF is the file offset of the enclosing
1451     // section.
1452     void
1453     set_address(uint64_t addr, off_t off, off_t secoff);
1454
1455     // Add an input section, for SHF_MERGE sections.
1456     bool
1457     add_input_section(Relobj* object, unsigned int shndx)
1458     {
1459       gold_assert(this->shndx_ == MERGE_DATA_SECTION_CODE
1460                   || this->shndx_ == MERGE_STRING_SECTION_CODE);
1461       return this->u2_.posd->add_input_section(object, shndx);
1462     }
1463
1464     // Given an input OBJECT, an input section index SHNDX within that
1465     // object, and an OFFSET relative to the start of that input
1466     // section, return whether or not the output address is known.
1467     // OUTPUT_SECTION_ADDRESS is the address of the output section
1468     // which this is a part of.  If this function returns true, it
1469     // sets *POUTPUT to the output address.
1470     bool
1471     output_address(const Relobj* object, unsigned int shndx, off_t offset,
1472                    uint64_t output_section_address, uint64_t *poutput) const;
1473
1474     // Write out the data.  This does nothing for an input section.
1475     void
1476     write(Output_file*);
1477
1478    private:
1479     // Code values which appear in shndx_.  If the value is not one of
1480     // these codes, it is the input section index in the object file.
1481     enum
1482     {
1483       // An Output_section_data.
1484       OUTPUT_SECTION_CODE = -1U,
1485       // An Output_section_data for an SHF_MERGE section with
1486       // SHF_STRINGS not set.
1487       MERGE_DATA_SECTION_CODE = -2U,
1488       // An Output_section_data for an SHF_MERGE section with
1489       // SHF_STRINGS set.
1490       MERGE_STRING_SECTION_CODE = -3U
1491     };
1492
1493     // Whether this is an input section.
1494     bool
1495     is_input_section() const
1496     {
1497       return (this->shndx_ != OUTPUT_SECTION_CODE
1498               && this->shndx_ != MERGE_DATA_SECTION_CODE
1499               && this->shndx_ != MERGE_STRING_SECTION_CODE);
1500     }
1501
1502     // For an ordinary input section, this is the section index in the
1503     // input file.  For an Output_section_data, this is
1504     // OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
1505     // MERGE_STRING_SECTION_CODE.
1506     unsigned int shndx_;
1507     // The required alignment, stored as a power of 2.
1508     unsigned int p2align_;
1509     union
1510     {
1511       // For an ordinary input section, the section size.
1512       off_t data_size;
1513       // For OUTPUT_SECTION_CODE, this is not used.  For
1514       // MERGE_DATA_SECTION_CODE or MERGE_STRING_SECTION_CODE, the
1515       // entity size.
1516       uint64_t entsize;
1517     } u1_;
1518     union
1519     {
1520       // For an ordinary input section, the object which holds the
1521       // input section.
1522       Relobj* object;
1523       // For OUTPUT_SECTION_CODE or MERGE_DATA_SECTION_CODE or
1524       // MERGE_STRING_SECTION_CODE, the data.
1525       Output_section_data* posd;
1526     } u2_;
1527   };
1528
1529   typedef std::vector<Input_section> Input_section_list;
1530
1531   // Fill data.  This is used to fill in data between input sections.
1532   // When we have to keep track of the input sections, we can use an
1533   // Output_data_const, but we don't want to have to keep track of
1534   // input sections just to implement fills.  For a fill we record the
1535   // offset, and the actual data to be written out.
1536   class Fill
1537   {
1538    public:
1539     Fill(off_t section_offset, off_t length)
1540       : section_offset_(section_offset), length_(length)
1541     { }
1542
1543     // Return section offset.
1544     off_t
1545     section_offset() const
1546     { return this->section_offset_; }
1547
1548     // Return fill length.
1549     off_t
1550     length() const
1551     { return this->length_; }
1552
1553    private:
1554     // The offset within the output section.
1555     off_t section_offset_;
1556     // The length of the space to fill.
1557     off_t length_;
1558   };
1559
1560   typedef std::vector<Fill> Fill_list;
1561
1562   // Add a new output section by Input_section.
1563   void
1564   add_output_section_data(Input_section*);
1565
1566   // Add an SHF_MERGE input section.  Returns true if the section was
1567   // handled.
1568   bool
1569   add_merge_input_section(Relobj* object, unsigned int shndx, uint64_t flags,
1570                           uint64_t entsize, uint64_t addralign);
1571
1572   // Add an output SHF_MERGE section POSD to this output section.
1573   // IS_STRING indicates whether it is a SHF_STRINGS section, and
1574   // ENTSIZE is the entity size.  This returns the entry added to
1575   // input_sections_.
1576   void
1577   add_output_merge_section(Output_section_data* posd, bool is_string,
1578                            uint64_t entsize);
1579
1580   // Most of these fields are only valid after layout.
1581
1582   // The name of the section.  This will point into a Stringpool.
1583   const char* name_;
1584   // The section address is in the parent class.
1585   // The section alignment.
1586   uint64_t addralign_;
1587   // The section entry size.
1588   uint64_t entsize_;
1589   // The file offset is in the parent class.
1590   // Set the section link field to the index of this section.
1591   const Output_data* link_section_;
1592   // If link_section_ is NULL, this is the link field.
1593   unsigned int link_;
1594   // Set the section info field to the index of this section.
1595   const Output_data* info_section_;
1596   // If info_section_ is NULL, this is the section info field.
1597   unsigned int info_;
1598   // The section type.
1599   elfcpp::Elf_Word type_;
1600   // The section flags.
1601   elfcpp::Elf_Xword flags_;
1602   // The section index.
1603   unsigned int out_shndx_;
1604   // If there is a STT_SECTION for this output section in the normal
1605   // symbol table, this is the symbol index.  This starts out as zero.
1606   // It is initialized in Layout::finalize() to be the index, or -1U
1607   // if there isn't one.
1608   unsigned int symtab_index_;
1609   // If there is a STT_SECTION for this output section in the dynamic
1610   // symbol table, this is the symbol index.  This starts out as zero.
1611   // It is initialized in Layout::finalize() to be the index, or -1U
1612   // if there isn't one.
1613   unsigned int dynsym_index_;
1614   // The input sections.  This will be empty in cases where we don't
1615   // need to keep track of them.
1616   Input_section_list input_sections_;
1617   // The offset of the first entry in input_sections_.
1618   off_t first_input_offset_;
1619   // The fill data.  This is separate from input_sections_ because we
1620   // often will need fill sections without needing to keep track of
1621   // input sections.
1622   Fill_list fills_;
1623   // Whether this output section needs a STT_SECTION symbol in the
1624   // normal symbol table.  This will be true if there is a relocation
1625   // which needs it.
1626   bool needs_symtab_index_ : 1;
1627   // Whether this output section needs a STT_SECTION symbol in the
1628   // dynamic symbol table.  This will be true if there is a dynamic
1629   // relocation which needs it.
1630   bool needs_dynsym_index_ : 1;
1631   // Whether the link field of this output section should point to the
1632   // normal symbol table.
1633   bool should_link_to_symtab_ : 1;
1634   // Whether the link field of this output section should point to the
1635   // dynamic symbol table.
1636   bool should_link_to_dynsym_ : 1;
1637 };
1638
1639 // An output segment.  PT_LOAD segments are built from collections of
1640 // output sections.  Other segments typically point within PT_LOAD
1641 // segments, and are built directly as needed.
1642
1643 class Output_segment
1644 {
1645  public:
1646   // Create an output segment, specifying the type and flags.
1647   Output_segment(elfcpp::Elf_Word, elfcpp::Elf_Word);
1648
1649   // Return the virtual address.
1650   uint64_t
1651   vaddr() const
1652   { return this->vaddr_; }
1653
1654   // Return the physical address.
1655   uint64_t
1656   paddr() const
1657   { return this->paddr_; }
1658
1659   // Return the segment type.
1660   elfcpp::Elf_Word
1661   type() const
1662   { return this->type_; }
1663
1664   // Return the segment flags.
1665   elfcpp::Elf_Word
1666   flags() const
1667   { return this->flags_; }
1668
1669   // Return the memory size.
1670   uint64_t
1671   memsz() const
1672   { return this->memsz_; }
1673
1674   // Return the file size.
1675   off_t
1676   filesz() const
1677   { return this->filesz_; }
1678
1679   // Return the maximum alignment of the Output_data.
1680   uint64_t
1681   addralign();
1682
1683   // Add an Output_section to this segment.
1684   void
1685   add_output_section(Output_section* os, elfcpp::Elf_Word seg_flags)
1686   { this->add_output_section(os, seg_flags, false); }
1687
1688   // Add an Output_section to the start of this segment.
1689   void
1690   add_initial_output_section(Output_section* os, elfcpp::Elf_Word seg_flags)
1691   { this->add_output_section(os, seg_flags, true); }
1692
1693   // Add an Output_data (which is not an Output_section) to the start
1694   // of this segment.
1695   void
1696   add_initial_output_data(Output_data*);
1697
1698   // Set the address of the segment to ADDR and the offset to *POFF
1699   // (aligned if necessary), and set the addresses and offsets of all
1700   // contained output sections accordingly.  Set the section indexes
1701   // of all contained output sections starting with *PSHNDX.  Return
1702   // the address of the immediately following segment.  Update *POFF
1703   // and *PSHNDX.  This should only be called for a PT_LOAD segment.
1704   uint64_t
1705   set_section_addresses(uint64_t addr, off_t* poff, unsigned int* pshndx);
1706
1707   // Set the minimum alignment of this segment.  This may be adjusted
1708   // upward based on the section alignments.
1709   void
1710   set_minimum_addralign(uint64_t align)
1711   {
1712     gold_assert(!this->is_align_known_);
1713     this->align_ = align;
1714   }
1715
1716   // Set the offset of this segment based on the section.  This should
1717   // only be called for a non-PT_LOAD segment.
1718   void
1719   set_offset();
1720
1721   // Return the number of output sections.
1722   unsigned int
1723   output_section_count() const;
1724
1725   // Write the segment header into *OPHDR.
1726   template<int size, bool big_endian>
1727   void
1728   write_header(elfcpp::Phdr_write<size, big_endian>*);
1729
1730   // Write the section headers of associated sections into V.
1731   template<int size, bool big_endian>
1732   unsigned char*
1733   write_section_headers(const Layout*, const Stringpool*, unsigned char* v,
1734                         unsigned int* pshndx ACCEPT_SIZE_ENDIAN) const;
1735
1736  private:
1737   Output_segment(const Output_segment&);
1738   Output_segment& operator=(const Output_segment&);
1739
1740   typedef std::list<Output_data*> Output_data_list;
1741
1742   // Add an Output_section to this segment, specifying front or back.
1743   void
1744   add_output_section(Output_section*, elfcpp::Elf_Word seg_flags,
1745                      bool front);
1746
1747   // Find the maximum alignment in an Output_data_list.
1748   static uint64_t
1749   maximum_alignment(const Output_data_list*);
1750
1751   // Set the section addresses in an Output_data_list.
1752   uint64_t
1753   set_section_list_addresses(Output_data_list*, uint64_t addr, off_t* poff,
1754                              unsigned int* pshndx);
1755
1756   // Return the number of Output_sections in an Output_data_list.
1757   unsigned int
1758   output_section_count_list(const Output_data_list*) const;
1759
1760   // Write the section headers in the list into V.
1761   template<int size, bool big_endian>
1762   unsigned char*
1763   write_section_headers_list(const Layout*, const Stringpool*,
1764                              const Output_data_list*, unsigned char* v,
1765                              unsigned int* pshdx ACCEPT_SIZE_ENDIAN) const;
1766
1767   // The list of output data with contents attached to this segment.
1768   Output_data_list output_data_;
1769   // The list of output data without contents attached to this segment.
1770   Output_data_list output_bss_;
1771   // The segment virtual address.
1772   uint64_t vaddr_;
1773   // The segment physical address.
1774   uint64_t paddr_;
1775   // The size of the segment in memory.
1776   uint64_t memsz_;
1777   // The segment alignment.  The is_align_known_ field indicates
1778   // whether this has been finalized.  It can be set to a minimum
1779   // value before it is finalized.
1780   uint64_t align_;
1781   // The offset of the segment data within the file.
1782   off_t offset_;
1783   // The size of the segment data in the file.
1784   off_t filesz_;
1785   // The segment type;
1786   elfcpp::Elf_Word type_;
1787   // The segment flags.
1788   elfcpp::Elf_Word flags_;
1789   // Whether we have finalized align_.
1790   bool is_align_known_;
1791 };
1792
1793 // This class represents the output file.
1794
1795 class Output_file
1796 {
1797  public:
1798   Output_file(const General_options& options, Target*);
1799
1800   // Get a pointer to the target.
1801   Target*
1802   target() const
1803   { return this->target_; }
1804
1805   // Open the output file.  FILE_SIZE is the final size of the file.
1806   void
1807   open(off_t file_size);
1808
1809   // Close the output file and make sure there are no error.
1810   void
1811   close();
1812
1813   // We currently always use mmap which makes the view handling quite
1814   // simple.  In the future we may support other approaches.
1815
1816   // Write data to the output file.
1817   void
1818   write(off_t offset, const void* data, off_t len)
1819   { memcpy(this->base_ + offset, data, len); }
1820
1821   // Get a buffer to use to write to the file, given the offset into
1822   // the file and the size.
1823   unsigned char*
1824   get_output_view(off_t start, off_t size)
1825   {
1826     gold_assert(start >= 0 && size >= 0 && start + size <= this->file_size_);
1827     return this->base_ + start;
1828   }
1829
1830   // VIEW must have been returned by get_output_view.  Write the
1831   // buffer to the file, passing in the offset and the size.
1832   void
1833   write_output_view(off_t, off_t, unsigned char*)
1834   { }
1835
1836  private:
1837   // General options.
1838   const General_options& options_;
1839   // Target.
1840   Target* target_;
1841   // File name.
1842   const char* name_;
1843   // File descriptor.
1844   int o_;
1845   // File size.
1846   off_t file_size_;
1847   // Base of file mapped into memory.
1848   unsigned char* base_;
1849 };
1850
1851 } // End namespace gold.
1852
1853 #endif // !defined(GOLD_OUTPUT_H)