Merge branch 'vendor/LIBARCHIVE'
[dragonfly.git] / contrib / binutils-2.21 / gold / object.h
1 // object.h -- support for an object file for linking in gold  -*- C++ -*-
2
3 // Copyright 2006, 2007, 2008, 2009, 2010, 2011 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_OBJECT_H
24 #define GOLD_OBJECT_H
25
26 #include <string>
27 #include <vector>
28
29 #include "elfcpp.h"
30 #include "elfcpp_file.h"
31 #include "fileread.h"
32 #include "target.h"
33 #include "archive.h"
34
35 namespace gold
36 {
37
38 class General_options;
39 class Task;
40 class Cref;
41 class Layout;
42 class Output_data;
43 class Output_section;
44 class Output_file;
45 class Output_symtab_xindex;
46 class Pluginobj;
47 class Dynobj;
48 class Object_merge_map;
49 class Relocatable_relocs;
50 class Symbols_data;
51
52 template<typename Stringpool_char>
53 class Stringpool_template;
54
55 // Data to pass from read_symbols() to add_symbols().
56
57 struct Read_symbols_data
58 {
59   Read_symbols_data()
60     : section_headers(NULL), section_names(NULL), symbols(NULL),
61       symbol_names(NULL), versym(NULL), verdef(NULL), verneed(NULL)
62   { }
63
64   ~Read_symbols_data();
65
66   // Section headers.
67   File_view* section_headers;
68   // Section names.
69   File_view* section_names;
70   // Size of section name data in bytes.
71   section_size_type section_names_size;
72   // Symbol data.
73   File_view* symbols;
74   // Size of symbol data in bytes.
75   section_size_type symbols_size;
76   // Offset of external symbols within symbol data.  This structure
77   // sometimes contains only external symbols, in which case this will
78   // be zero.  Sometimes it contains all symbols.
79   section_offset_type external_symbols_offset;
80   // Symbol names.
81   File_view* symbol_names;
82   // Size of symbol name data in bytes.
83   section_size_type symbol_names_size;
84
85   // Version information.  This is only used on dynamic objects.
86   // Version symbol data (from SHT_GNU_versym section).
87   File_view* versym;
88   section_size_type versym_size;
89   // Version definition data (from SHT_GNU_verdef section).
90   File_view* verdef;
91   section_size_type verdef_size;
92   unsigned int verdef_info;
93   // Needed version data  (from SHT_GNU_verneed section).
94   File_view* verneed;
95   section_size_type verneed_size;
96   unsigned int verneed_info;
97 };
98
99 // Information used to print error messages.
100
101 struct Symbol_location_info
102 {
103   std::string source_file;
104   std::string enclosing_symbol_name;
105   int line_number;
106 };
107
108 // Data about a single relocation section.  This is read in
109 // read_relocs and processed in scan_relocs.
110
111 struct Section_relocs
112 {
113   Section_relocs()
114     : contents(NULL)
115   { }
116
117   ~Section_relocs()
118   { delete this->contents; }
119
120   // Index of reloc section.
121   unsigned int reloc_shndx;
122   // Index of section that relocs apply to.
123   unsigned int data_shndx;
124   // Contents of reloc section.
125   File_view* contents;
126   // Reloc section type.
127   unsigned int sh_type;
128   // Number of reloc entries.
129   size_t reloc_count;
130   // Output section.
131   Output_section* output_section;
132   // Whether this section has special handling for offsets.
133   bool needs_special_offset_handling;
134   // Whether the data section is allocated (has the SHF_ALLOC flag set).
135   bool is_data_section_allocated;
136 };
137
138 // Relocations in an object file.  This is read in read_relocs and
139 // processed in scan_relocs.
140
141 struct Read_relocs_data
142 {
143   Read_relocs_data()
144     : local_symbols(NULL)
145   { }
146
147   ~Read_relocs_data()
148   { delete this->local_symbols; }
149
150   typedef std::vector<Section_relocs> Relocs_list;
151   // The relocations.
152   Relocs_list relocs;
153   // The local symbols.
154   File_view* local_symbols;
155 };
156
157 // The Xindex class manages section indexes for objects with more than
158 // 0xff00 sections.
159
160 class Xindex
161 {
162  public:
163   Xindex(int large_shndx_offset)
164     : large_shndx_offset_(large_shndx_offset), symtab_xindex_()
165   { }
166
167   // Initialize the symtab_xindex_ array, given the object and the
168   // section index of the symbol table to use.
169   template<int size, bool big_endian>
170   void
171   initialize_symtab_xindex(Object*, unsigned int symtab_shndx);
172
173   // Read in the symtab_xindex_ array, given its section index.
174   // PSHDRS may optionally point to the section headers.
175   template<int size, bool big_endian>
176   void
177   read_symtab_xindex(Object*, unsigned int xindex_shndx,
178                      const unsigned char* pshdrs);
179
180   // Symbol SYMNDX in OBJECT has a section of SHN_XINDEX; return the
181   // real section index.
182   unsigned int
183   sym_xindex_to_shndx(Object* object, unsigned int symndx);
184
185  private:
186   // The type of the array giving the real section index for symbols
187   // whose st_shndx field holds SHN_XINDEX.
188   typedef std::vector<unsigned int> Symtab_xindex;
189
190   // Adjust a section index if necessary.  This should only be called
191   // for ordinary section indexes.
192   unsigned int
193   adjust_shndx(unsigned int shndx)
194   {
195     if (shndx >= elfcpp::SHN_LORESERVE)
196       shndx += this->large_shndx_offset_;
197     return shndx;
198   }
199
200   // Adjust to apply to large section indexes.
201   int large_shndx_offset_;
202   // The data from the SHT_SYMTAB_SHNDX section.
203   Symtab_xindex symtab_xindex_;
204 };
205
206 // Object is an abstract base class which represents either a 32-bit
207 // or a 64-bit input object.  This can be a regular object file
208 // (ET_REL) or a shared object (ET_DYN).
209
210 class Object
211 {
212  public:
213   typedef std::vector<Symbol*> Symbols;
214
215   // NAME is the name of the object as we would report it to the user
216   // (e.g., libfoo.a(bar.o) if this is in an archive.  INPUT_FILE is
217   // used to read the file.  OFFSET is the offset within the input
218   // file--0 for a .o or .so file, something else for a .a file.
219   Object(const std::string& name, Input_file* input_file, bool is_dynamic,
220          off_t offset = 0)
221     : name_(name), input_file_(input_file), offset_(offset), shnum_(-1U),
222       is_dynamic_(is_dynamic), is_needed_(false), uses_split_stack_(false),
223       has_no_split_stack_(false), no_export_(false), xindex_(NULL)
224   { input_file->file().add_object(); }
225
226   virtual ~Object()
227   { this->input_file_->file().remove_object(); }
228
229   // Return the name of the object as we would report it to the tuser.
230   const std::string&
231   name() const
232   { return this->name_; }
233
234   // Get the offset into the file.
235   off_t
236   offset() const
237   { return this->offset_; }
238
239   // Return whether this is a dynamic object.
240   bool
241   is_dynamic() const
242   { return this->is_dynamic_; }
243
244   // Return whether this object is needed--true if it is a dynamic
245   // object which defines some symbol referenced by a regular object.
246   // We keep the flag here rather than in Dynobj for convenience when
247   // setting it.
248   bool
249   is_needed() const
250   { return this->is_needed_; }
251
252   // Record that this object is needed.
253   void
254   set_is_needed()
255   { this->is_needed_ = true; }
256
257   // Return whether this object was compiled with -fsplit-stack.
258   bool
259   uses_split_stack() const
260   { return this->uses_split_stack_; }
261
262   // Return whether this object contains any functions compiled with
263   // the no_split_stack attribute.
264   bool
265   has_no_split_stack() const
266   { return this->has_no_split_stack_; }
267
268   // Returns NULL for Objects that are not plugin objects.  This method
269   // is overridden in the Pluginobj class.
270   Pluginobj*
271   pluginobj()
272   { return this->do_pluginobj(); }
273
274   // Get the file.  We pass on const-ness.
275   Input_file*
276   input_file()
277   { return this->input_file_; }
278
279   const Input_file*
280   input_file() const
281   { return this->input_file_; }
282
283   // Lock the underlying file.
284   void
285   lock(const Task* t)
286   { this->input_file()->file().lock(t); }
287
288   // Unlock the underlying file.
289   void
290   unlock(const Task* t)
291   { this->input_file()->file().unlock(t); }
292
293   // Return whether the underlying file is locked.
294   bool
295   is_locked() const
296   { return this->input_file()->file().is_locked(); }
297
298   // Return the token, so that the task can be queued.
299   Task_token*
300   token()
301   { return this->input_file()->file().token(); }
302
303   // Release the underlying file.
304   void
305   release()
306   { this->input_file_->file().release(); }
307
308   // Return whether we should just read symbols from this file.
309   bool
310   just_symbols() const
311   { return this->input_file()->just_symbols(); }
312
313   // Get the number of sections.
314   unsigned int
315   shnum() const
316   { return this->shnum_; }
317
318   // Return a view of the contents of a section.  Set *PLEN to the
319   // size.  CACHE is a hint as in File_read::get_view.
320   const unsigned char*
321   section_contents(unsigned int shndx, section_size_type* plen, bool cache);
322
323   // Adjust a symbol's section index as needed.  SYMNDX is the index
324   // of the symbol and SHNDX is the symbol's section from
325   // get_st_shndx.  This returns the section index.  It sets
326   // *IS_ORDINARY to indicate whether this is a normal section index,
327   // rather than a special code between SHN_LORESERVE and
328   // SHN_HIRESERVE.
329   unsigned int
330   adjust_sym_shndx(unsigned int symndx, unsigned int shndx, bool* is_ordinary)
331   {
332     if (shndx < elfcpp::SHN_LORESERVE)
333       *is_ordinary = true;
334     else if (shndx == elfcpp::SHN_XINDEX)
335       {
336         if (this->xindex_ == NULL)
337           this->xindex_ = this->do_initialize_xindex();
338         shndx = this->xindex_->sym_xindex_to_shndx(this, symndx);
339         *is_ordinary = true;
340       }
341     else
342       *is_ordinary = false;
343     return shndx;
344   }
345
346   // Return the size of a section given a section index.
347   uint64_t
348   section_size(unsigned int shndx)
349   { return this->do_section_size(shndx); }
350
351   // Return the name of a section given a section index.
352   std::string
353   section_name(unsigned int shndx)
354   { return this->do_section_name(shndx); }
355
356   // Return the section flags given a section index.
357   uint64_t
358   section_flags(unsigned int shndx)
359   { return this->do_section_flags(shndx); }
360
361   // Return the section entsize given a section index.
362   uint64_t
363   section_entsize(unsigned int shndx)
364   { return this->do_section_entsize(shndx); }
365
366   // Return the section address given a section index.
367   uint64_t
368   section_address(unsigned int shndx)
369   { return this->do_section_address(shndx); }
370
371   // Return the section type given a section index.
372   unsigned int
373   section_type(unsigned int shndx)
374   { return this->do_section_type(shndx); }
375
376   // Return the section link field given a section index.
377   unsigned int
378   section_link(unsigned int shndx)
379   { return this->do_section_link(shndx); }
380
381   // Return the section info field given a section index.
382   unsigned int
383   section_info(unsigned int shndx)
384   { return this->do_section_info(shndx); }
385
386   // Return the required section alignment given a section index.
387   uint64_t
388   section_addralign(unsigned int shndx)
389   { return this->do_section_addralign(shndx); }
390
391   // Return the output section given a section index.
392   Output_section*
393   output_section(unsigned int shndx) const
394   { return this->do_output_section(shndx); }
395
396   // Given a section index, return the offset in the Output_section.
397   // The return value will be -1U if the section is specially mapped,
398   // such as a merge section.
399   uint64_t
400   output_section_offset(unsigned int shndx) const
401   { return this->do_output_section_offset(shndx); }
402
403   // Read the symbol information.
404   void
405   read_symbols(Read_symbols_data* sd)
406   { return this->do_read_symbols(sd); }
407
408   // Pass sections which should be included in the link to the Layout
409   // object, and record where the sections go in the output file.
410   void
411   layout(Symbol_table* symtab, Layout* layout, Read_symbols_data* sd)
412   { this->do_layout(symtab, layout, sd); }
413
414   // Add symbol information to the global symbol table.
415   void
416   add_symbols(Symbol_table* symtab, Read_symbols_data* sd, Layout *layout)
417   { this->do_add_symbols(symtab, sd, layout); }
418
419   // Add symbol information to the global symbol table.
420   Archive::Should_include
421   should_include_member(Symbol_table* symtab, Layout* layout,
422                         Read_symbols_data* sd, std::string* why)
423   { return this->do_should_include_member(symtab, layout, sd, why); }
424
425   // Functions and types for the elfcpp::Elf_file interface.  This
426   // permit us to use Object as the File template parameter for
427   // elfcpp::Elf_file.
428
429   // The View class is returned by view.  It must support a single
430   // method, data().  This is trivial, because get_view does what we
431   // need.
432   class View
433   {
434    public:
435     View(const unsigned char* p)
436       : p_(p)
437     { }
438
439     const unsigned char*
440     data() const
441     { return this->p_; }
442
443    private:
444     const unsigned char* p_;
445   };
446
447   // Return a View.
448   View
449   view(off_t file_offset, section_size_type data_size)
450   { return View(this->get_view(file_offset, data_size, true, true)); }
451
452   // Report an error.
453   void
454   error(const char* format, ...) const ATTRIBUTE_PRINTF_2;
455
456   // A location in the file.
457   struct Location
458   {
459     off_t file_offset;
460     off_t data_size;
461
462     Location(off_t fo, section_size_type ds)
463       : file_offset(fo), data_size(ds)
464     { }
465   };
466
467   // Get a View given a Location.
468   View view(Location loc)
469   { return View(this->get_view(loc.file_offset, loc.data_size, true, true)); }
470
471   // Get a view into the underlying file.
472   const unsigned char*
473   get_view(off_t start, section_size_type size, bool aligned, bool cache)
474   {
475     return this->input_file()->file().get_view(this->offset_, start, size,
476                                                aligned, cache);
477   }
478
479   // Get a lasting view into the underlying file.
480   File_view*
481   get_lasting_view(off_t start, section_size_type size, bool aligned,
482                    bool cache)
483   {
484     return this->input_file()->file().get_lasting_view(this->offset_, start,
485                                                        size, aligned, cache);
486   }
487
488   // Read data from the underlying file.
489   void
490   read(off_t start, section_size_type size, void* p)
491   { this->input_file()->file().read(start + this->offset_, size, p); }
492
493   // Read multiple data from the underlying file.
494   void
495   read_multiple(const File_read::Read_multiple& rm)
496   { this->input_file()->file().read_multiple(this->offset_, rm); }
497
498   // Stop caching views in the underlying file.
499   void
500   clear_view_cache_marks()
501   { this->input_file()->file().clear_view_cache_marks(); }
502
503   // Get the number of global symbols defined by this object, and the
504   // number of the symbols whose final definition came from this
505   // object.
506   void
507   get_global_symbol_counts(const Symbol_table* symtab, size_t* defined,
508                            size_t* used) const
509   { this->do_get_global_symbol_counts(symtab, defined, used); }
510
511   // Get the symbols defined in this object.
512   const Symbols*
513   get_global_symbols() const
514   { return this->do_get_global_symbols(); }
515
516   // Return whether this object was found in a system directory.
517   bool
518   is_in_system_directory() const
519   { return this->input_file()->is_in_system_directory(); }
520
521   // Return whether we found this object by searching a directory.
522   bool
523   searched_for() const
524   { return this->input_file()->will_search_for(); }
525
526   bool
527   no_export() const
528   { return this->no_export_; }
529
530   void
531   set_no_export(bool value)
532   { this->no_export_ = value; }
533
534   // Return TRUE if the section is a compressed debug section, and set
535   // *UNCOMPRESSED_SIZE to the size of the uncompressed data.
536   bool
537   section_is_compressed(unsigned int shndx,
538                         section_size_type* uncompressed_size) const
539   { return this->do_section_is_compressed(shndx, uncompressed_size); }
540
541   // Return the index of the first incremental relocation for symbol SYMNDX.
542   unsigned int
543   get_incremental_reloc_base(unsigned int symndx) const
544   { return this->do_get_incremental_reloc_base(symndx); }
545
546   // Return the number of incremental relocations for symbol SYMNDX.
547   unsigned int
548   get_incremental_reloc_count(unsigned int symndx) const
549   { return this->do_get_incremental_reloc_count(symndx); }
550
551  protected:
552   // Returns NULL for Objects that are not plugin objects.  This method
553   // is overridden in the Pluginobj class.
554   virtual Pluginobj*
555   do_pluginobj()
556   { return NULL; }
557
558   // Read the symbols--implemented by child class.
559   virtual void
560   do_read_symbols(Read_symbols_data*) = 0;
561
562   // Lay out sections--implemented by child class.
563   virtual void
564   do_layout(Symbol_table*, Layout*, Read_symbols_data*) = 0;
565
566   // Add symbol information to the global symbol table--implemented by
567   // child class.
568   virtual void
569   do_add_symbols(Symbol_table*, Read_symbols_data*, Layout*) = 0;
570
571   virtual Archive::Should_include
572   do_should_include_member(Symbol_table* symtab, Layout*, Read_symbols_data*,
573                            std::string* why) = 0;
574
575   // Return the location of the contents of a section.  Implemented by
576   // child class.
577   virtual Location
578   do_section_contents(unsigned int shndx) = 0;
579
580   // Get the size of a section--implemented by child class.
581   virtual uint64_t
582   do_section_size(unsigned int shndx) = 0;
583
584   // Get the name of a section--implemented by child class.
585   virtual std::string
586   do_section_name(unsigned int shndx) = 0;
587
588   // Get section flags--implemented by child class.
589   virtual uint64_t
590   do_section_flags(unsigned int shndx) = 0;
591
592   // Get section entsize--implemented by child class.
593   virtual uint64_t
594   do_section_entsize(unsigned int shndx) = 0;
595
596   // Get section address--implemented by child class.
597   virtual uint64_t
598   do_section_address(unsigned int shndx) = 0;
599
600   // Get section type--implemented by child class.
601   virtual unsigned int
602   do_section_type(unsigned int shndx) = 0;
603
604   // Get section link field--implemented by child class.
605   virtual unsigned int
606   do_section_link(unsigned int shndx) = 0;
607
608   // Get section info field--implemented by child class.
609   virtual unsigned int
610   do_section_info(unsigned int shndx) = 0;
611
612   // Get section alignment--implemented by child class.
613   virtual uint64_t
614   do_section_addralign(unsigned int shndx) = 0;
615
616   // Return the output section given a section index--implemented
617   // by child class.
618   virtual Output_section*
619   do_output_section(unsigned int) const
620   { gold_unreachable(); }
621
622   // Get the offset of a section--implemented by child class.
623   virtual uint64_t
624   do_output_section_offset(unsigned int) const
625   { gold_unreachable(); }
626
627   // Return the Xindex structure to use.
628   virtual Xindex*
629   do_initialize_xindex() = 0;
630
631   // Implement get_global_symbol_counts--implemented by child class.
632   virtual void
633   do_get_global_symbol_counts(const Symbol_table*, size_t*, size_t*) const = 0;
634
635   virtual const Symbols*
636   do_get_global_symbols() const = 0;
637
638   // Set the number of sections.
639   void
640   set_shnum(int shnum)
641   { this->shnum_ = shnum; }
642
643   // Functions used by both Sized_relobj and Sized_dynobj.
644
645   // Read the section data into a Read_symbols_data object.
646   template<int size, bool big_endian>
647   void
648   read_section_data(elfcpp::Elf_file<size, big_endian, Object>*,
649                     Read_symbols_data*);
650
651   // Let the child class initialize the xindex object directly.
652   void
653   set_xindex(Xindex* xindex)
654   {
655     gold_assert(this->xindex_ == NULL);
656     this->xindex_ = xindex;
657   }
658
659   // If NAME is the name of a special .gnu.warning section, arrange
660   // for the warning to be issued.  SHNDX is the section index.
661   // Return whether it is a warning section.
662   bool
663   handle_gnu_warning_section(const char* name, unsigned int shndx,
664                              Symbol_table*);
665
666   // If NAME is the name of the special section which indicates that
667   // this object was compiled with -fstack-split, mark it accordingly,
668   // and return true.  Otherwise return false.
669   bool
670   handle_split_stack_section(const char* name);
671
672   // Return TRUE if the section is a compressed debug section, and set
673   // *UNCOMPRESSED_SIZE to the size of the uncompressed data.
674   virtual bool
675   do_section_is_compressed(unsigned int, section_size_type*) const
676   { return false; }
677
678   // Return the index of the first incremental relocation for symbol SYMNDX--
679   // implemented by child class.
680   virtual unsigned int
681   do_get_incremental_reloc_base(unsigned int) const
682   { gold_unreachable(); }
683
684   // Return the number of incremental relocations for symbol SYMNDX--
685   // implemented by child class.
686   virtual unsigned int
687   do_get_incremental_reloc_count(unsigned int) const
688   { gold_unreachable(); }
689
690  private:
691   // This class may not be copied.
692   Object(const Object&);
693   Object& operator=(const Object&);
694
695   // Name of object as printed to user.
696   std::string name_;
697   // For reading the file.
698   Input_file* input_file_;
699   // Offset within the file--0 for an object file, non-0 for an
700   // archive.
701   off_t offset_;
702   // Number of input sections.
703   unsigned int shnum_;
704   // Whether this is a dynamic object.
705   bool is_dynamic_ : 1;
706   // Whether this object is needed.  This is only set for dynamic
707   // objects, and means that the object defined a symbol which was
708   // used by a reference from a regular object.
709   bool is_needed_ : 1;
710   // Whether this object was compiled with -fsplit-stack.
711   bool uses_split_stack_ : 1;
712   // Whether this object contains any functions compiled with the
713   // no_split_stack attribute.
714   bool has_no_split_stack_ : 1;
715   // True if exclude this object from automatic symbol export.
716   // This is used only for archive objects.
717   bool no_export_ : 1;
718   // Many sections for objects with more than SHN_LORESERVE sections.
719   Xindex* xindex_;
720 };
721
722 // A regular object (ET_REL).  This is an abstract base class itself.
723 // The implementation is the template class Sized_relobj.
724
725 class Relobj : public Object
726 {
727  public:
728   Relobj(const std::string& name, Input_file* input_file, off_t offset = 0)
729     : Object(name, input_file, false, offset),
730       output_sections_(),
731       map_to_relocatable_relocs_(NULL),
732       object_merge_map_(NULL),
733       relocs_must_follow_section_writes_(false),
734       sd_(NULL),
735       reloc_counts_(NULL),
736       reloc_bases_(NULL)
737   { }
738
739   // During garbage collection, the Read_symbols_data pass for 
740   // each object is stored as layout needs to be done after 
741   // reloc processing.
742   Symbols_data* 
743   get_symbols_data()
744   { return this->sd_; }
745
746   // Decides which section names have to be included in the worklist
747   // as roots.
748   bool
749   is_section_name_included(const char* name);
750  
751   void
752   copy_symbols_data(Symbols_data* gc_sd, Read_symbols_data* sd,
753                     unsigned int section_header_size);
754
755   void
756   set_symbols_data(Symbols_data* sd)
757   { this->sd_ = sd; }
758
759   // During garbage collection, the Read_relocs pass for all objects 
760   // is done before scanning the relocs.  In that case, this->rd_ is
761   // used to store the information from Read_relocs for each object.
762   // This data is also used to compute the list of relevant sections.
763   Read_relocs_data*
764   get_relocs_data()
765   { return this->rd_; }
766
767   void
768   set_relocs_data(Read_relocs_data* rd)
769   { this->rd_ = rd; }
770
771   virtual bool
772   is_output_section_offset_invalid(unsigned int shndx) const = 0;
773
774   // Read the relocs.
775   void
776   read_relocs(Read_relocs_data* rd)
777   { return this->do_read_relocs(rd); }
778
779   // Process the relocs, during garbage collection only.
780   void
781   gc_process_relocs(Symbol_table* symtab, Layout* layout, Read_relocs_data* rd)
782   { return this->do_gc_process_relocs(symtab, layout, rd); }
783
784   // Scan the relocs and adjust the symbol table.
785   void
786   scan_relocs(Symbol_table* symtab, Layout* layout, Read_relocs_data* rd)
787   { return this->do_scan_relocs(symtab, layout, rd); }
788
789   // The number of local symbols in the input symbol table.
790   virtual unsigned int
791   local_symbol_count() const
792   { return this->do_local_symbol_count(); }
793
794   // Initial local symbol processing: count the number of local symbols
795   // in the output symbol table and dynamic symbol table; add local symbol
796   // names to *POOL and *DYNPOOL.
797   void
798   count_local_symbols(Stringpool_template<char>* pool,
799                       Stringpool_template<char>* dynpool)
800   { return this->do_count_local_symbols(pool, dynpool); }
801
802   // Set the values of the local symbols, set the output symbol table
803   // indexes for the local variables, and set the offset where local
804   // symbol information will be stored. Returns the new local symbol index.
805   unsigned int
806   finalize_local_symbols(unsigned int index, off_t off, Symbol_table* symtab)
807   { return this->do_finalize_local_symbols(index, off, symtab); }
808
809   // Set the output dynamic symbol table indexes for the local variables.
810   unsigned int
811   set_local_dynsym_indexes(unsigned int index)
812   { return this->do_set_local_dynsym_indexes(index); }
813
814   // Set the offset where local dynamic symbol information will be stored.
815   unsigned int
816   set_local_dynsym_offset(off_t off)
817   { return this->do_set_local_dynsym_offset(off); }
818
819   // Relocate the input sections and write out the local symbols.
820   void
821   relocate(const Symbol_table* symtab, const Layout* layout, Output_file* of)
822   { return this->do_relocate(symtab, layout, of); }
823
824   // Return whether an input section is being included in the link.
825   bool
826   is_section_included(unsigned int shndx) const
827   {
828     gold_assert(shndx < this->output_sections_.size());
829     return this->output_sections_[shndx] != NULL;
830   }
831
832   // The the output section of the input section with index SHNDX.
833   // This is only used currently to remove a section from the link in
834   // relaxation.
835   void
836   set_output_section(unsigned int shndx, Output_section* os)
837   {
838     gold_assert(shndx < this->output_sections_.size());
839     this->output_sections_[shndx] = os;
840   }
841   
842   // Set the offset of an input section within its output section.
843   void
844   set_section_offset(unsigned int shndx, uint64_t off)
845   { this->do_set_section_offset(shndx, off); }
846
847   // Return true if we need to wait for output sections to be written
848   // before we can apply relocations.  This is true if the object has
849   // any relocations for sections which require special handling, such
850   // as the exception frame section.
851   bool
852   relocs_must_follow_section_writes() const
853   { return this->relocs_must_follow_section_writes_; }
854
855   // Return the object merge map.
856   Object_merge_map*
857   merge_map() const
858   { return this->object_merge_map_; }
859
860   // Set the object merge map.
861   void
862   set_merge_map(Object_merge_map* object_merge_map)
863   {
864     gold_assert(this->object_merge_map_ == NULL);
865     this->object_merge_map_ = object_merge_map;
866   }
867
868   // Record the relocatable reloc info for an input reloc section.
869   void
870   set_relocatable_relocs(unsigned int reloc_shndx, Relocatable_relocs* rr)
871   {
872     gold_assert(reloc_shndx < this->shnum());
873     (*this->map_to_relocatable_relocs_)[reloc_shndx] = rr;
874   }
875
876   // Get the relocatable reloc info for an input reloc section.
877   Relocatable_relocs*
878   relocatable_relocs(unsigned int reloc_shndx)
879   {
880     gold_assert(reloc_shndx < this->shnum());
881     return (*this->map_to_relocatable_relocs_)[reloc_shndx];
882   }
883
884   // Layout sections whose layout was deferred while waiting for
885   // input files from a plugin.
886   void
887   layout_deferred_sections(Layout* layout)
888   { this->do_layout_deferred_sections(layout); }
889
890   // Return the index of the first incremental relocation for symbol SYMNDX.
891   virtual unsigned int
892   do_get_incremental_reloc_base(unsigned int symndx) const
893   { return this->reloc_bases_[symndx]; }
894
895   // Return the number of incremental relocations for symbol SYMNDX.
896   virtual unsigned int
897   do_get_incremental_reloc_count(unsigned int symndx) const
898   { return this->reloc_counts_[symndx]; }
899
900  protected:
901   // The output section to be used for each input section, indexed by
902   // the input section number.  The output section is NULL if the
903   // input section is to be discarded.
904   typedef std::vector<Output_section*> Output_sections;
905
906   // Read the relocs--implemented by child class.
907   virtual void
908   do_read_relocs(Read_relocs_data*) = 0;
909
910   // Process the relocs--implemented by child class.
911   virtual void
912   do_gc_process_relocs(Symbol_table*, Layout*, Read_relocs_data*) = 0;
913
914   // Scan the relocs--implemented by child class.
915   virtual void
916   do_scan_relocs(Symbol_table*, Layout*, Read_relocs_data*) = 0;
917
918   // Return the number of local symbols--implemented by child class.
919   virtual unsigned int
920   do_local_symbol_count() const = 0;
921
922   // Count local symbols--implemented by child class.
923   virtual void
924   do_count_local_symbols(Stringpool_template<char>*,
925                          Stringpool_template<char>*) = 0;
926
927   // Finalize the local symbols.  Set the output symbol table indexes
928   // for the local variables, and set the offset where local symbol
929   // information will be stored.
930   virtual unsigned int
931   do_finalize_local_symbols(unsigned int, off_t, Symbol_table*) = 0;
932
933   // Set the output dynamic symbol table indexes for the local variables.
934   virtual unsigned int
935   do_set_local_dynsym_indexes(unsigned int) = 0;
936
937   // Set the offset where local dynamic symbol information will be stored.
938   virtual unsigned int
939   do_set_local_dynsym_offset(off_t) = 0;
940
941   // Relocate the input sections and write out the local
942   // symbols--implemented by child class.
943   virtual void
944   do_relocate(const Symbol_table* symtab, const Layout*, Output_file* of) = 0;
945
946   // Set the offset of a section--implemented by child class.
947   virtual void
948   do_set_section_offset(unsigned int shndx, uint64_t off) = 0;
949
950   // Layout sections whose layout was deferred while waiting for
951   // input files from a plugin--implemented by child class.
952   virtual void
953   do_layout_deferred_sections(Layout*) = 0;
954
955   // Given a section index, return the corresponding Output_section.
956   // The return value will be NULL if the section is not included in
957   // the link.
958   Output_section*
959   do_output_section(unsigned int shndx) const
960   {
961     gold_assert(shndx < this->output_sections_.size());
962     return this->output_sections_[shndx];
963   }
964
965   // Return the vector mapping input sections to output sections.
966   Output_sections&
967   output_sections()
968   { return this->output_sections_; }
969
970   const Output_sections&
971   output_sections() const
972   { return this->output_sections_; }
973
974   // Set the size of the relocatable relocs array.
975   void
976   size_relocatable_relocs()
977   {
978     this->map_to_relocatable_relocs_ =
979       new std::vector<Relocatable_relocs*>(this->shnum());
980   }
981
982   // Record that we must wait for the output sections to be written
983   // before applying relocations.
984   void
985   set_relocs_must_follow_section_writes()
986   { this->relocs_must_follow_section_writes_ = true; }
987
988   // Allocate the array for counting incremental relocations.
989   void
990   allocate_incremental_reloc_counts()
991   {
992     unsigned int nsyms = this->do_get_global_symbols()->size();
993     this->reloc_counts_ = new unsigned int[nsyms];
994     gold_assert(this->reloc_counts_ != NULL);
995     memset(this->reloc_counts_, 0, nsyms * sizeof(unsigned int));
996   }
997
998   // Record a relocation in this object referencing global symbol SYMNDX.
999   // Used for tracking incremental link information.
1000   void
1001   count_incremental_reloc(unsigned int symndx)
1002   {
1003     unsigned int nsyms = this->do_get_global_symbols()->size();
1004     gold_assert(symndx < nsyms);
1005     gold_assert(this->reloc_counts_ != NULL);
1006     ++this->reloc_counts_[symndx];
1007   }
1008
1009   // Finalize the incremental relocation information.
1010   void
1011   finalize_incremental_relocs(Layout* layout);
1012
1013   // Return the index of the next relocation to be written for global symbol
1014   // SYMNDX.  Only valid after finalize_incremental_relocs() has been called.
1015   unsigned int
1016   next_incremental_reloc_index(unsigned int symndx)
1017   {
1018     unsigned int nsyms = this->do_get_global_symbols()->size();
1019
1020     gold_assert(this->reloc_counts_ != NULL);
1021     gold_assert(this->reloc_bases_ != NULL);
1022     gold_assert(symndx < nsyms);
1023
1024     unsigned int counter = this->reloc_counts_[symndx]++;
1025     return this->reloc_bases_[symndx] + counter;
1026   }
1027
1028  private:
1029   // Mapping from input sections to output section.
1030   Output_sections output_sections_;
1031   // Mapping from input section index to the information recorded for
1032   // the relocations.  This is only used for a relocatable link.
1033   std::vector<Relocatable_relocs*>* map_to_relocatable_relocs_;
1034   // Mappings for merge sections.  This is managed by the code in the
1035   // Merge_map class.
1036   Object_merge_map* object_merge_map_;
1037   // Whether we need to wait for output sections to be written before
1038   // we can apply relocations.
1039   bool relocs_must_follow_section_writes_;
1040   // Used to store the relocs data computed by the Read_relocs pass. 
1041   // Used during garbage collection of unused sections.
1042   Read_relocs_data* rd_;
1043   // Used to store the symbols data computed by the Read_symbols pass.
1044   // Again used during garbage collection when laying out referenced
1045   // sections.
1046   gold::Symbols_data* sd_;
1047   // Per-symbol counts of relocations, for incremental links.
1048   unsigned int* reloc_counts_;
1049   // Per-symbol base indexes of relocations, for incremental links.
1050   unsigned int* reloc_bases_;
1051 };
1052
1053 // This class is used to handle relocations against a section symbol
1054 // in an SHF_MERGE section.  For such a symbol, we need to know the
1055 // addend of the relocation before we can determine the final value.
1056 // The addend gives us the location in the input section, and we can
1057 // determine how it is mapped to the output section.  For a
1058 // non-section symbol, we apply the addend to the final value of the
1059 // symbol; that is done in finalize_local_symbols, and does not use
1060 // this class.
1061
1062 template<int size>
1063 class Merged_symbol_value
1064 {
1065  public:
1066   typedef typename elfcpp::Elf_types<size>::Elf_Addr Value;
1067
1068   // We use a hash table to map offsets in the input section to output
1069   // addresses.
1070   typedef Unordered_map<section_offset_type, Value> Output_addresses;
1071
1072   Merged_symbol_value(Value input_value, Value output_start_address)
1073     : input_value_(input_value), output_start_address_(output_start_address),
1074       output_addresses_()
1075   { }
1076
1077   // Initialize the hash table.
1078   void
1079   initialize_input_to_output_map(const Relobj*, unsigned int input_shndx);
1080
1081   // Release the hash table to save space.
1082   void
1083   free_input_to_output_map()
1084   { this->output_addresses_.clear(); }
1085
1086   // Get the output value corresponding to an addend.  The object and
1087   // input section index are passed in because the caller will have
1088   // them; otherwise we could store them here.
1089   Value
1090   value(const Relobj* object, unsigned int input_shndx, Value addend) const
1091   {
1092     // This is a relocation against a section symbol.  ADDEND is the
1093     // offset in the section.  The result should be the start of some
1094     // merge area.  If the object file wants something else, it should
1095     // use a regular symbol rather than a section symbol.
1096     // Unfortunately, PR 6658 shows a case in which the object file
1097     // refers to the section symbol, but uses a negative ADDEND to
1098     // compensate for a PC relative reloc.  We can't handle the
1099     // general case.  However, we can handle the special case of a
1100     // negative addend, by assuming that it refers to the start of the
1101     // section.  Of course, that means that we have to guess when
1102     // ADDEND is negative.  It is normal to see a 32-bit value here
1103     // even when the template parameter size is 64, as 64-bit object
1104     // file formats have 32-bit relocations.  We know this is a merge
1105     // section, so we know it has to fit into memory.  So we assume
1106     // that we won't see a value larger than a large 32-bit unsigned
1107     // value.  This will break objects with very very large merge
1108     // sections; they probably break in other ways anyhow.
1109     Value input_offset = this->input_value_;
1110     if (addend < 0xffffff00)
1111       {
1112         input_offset += addend;
1113         addend = 0;
1114       }
1115     typename Output_addresses::const_iterator p =
1116       this->output_addresses_.find(input_offset);
1117     if (p != this->output_addresses_.end())
1118       return p->second + addend;
1119
1120     return (this->value_from_output_section(object, input_shndx, input_offset)
1121             + addend);
1122   }
1123
1124  private:
1125   // Get the output value for an input offset if we couldn't find it
1126   // in the hash table.
1127   Value
1128   value_from_output_section(const Relobj*, unsigned int input_shndx,
1129                             Value input_offset) const;
1130
1131   // The value of the section symbol in the input file.  This is
1132   // normally zero, but could in principle be something else.
1133   Value input_value_;
1134   // The start address of this merged section in the output file.
1135   Value output_start_address_;
1136   // A hash table which maps offsets in the input section to output
1137   // addresses.  This only maps specific offsets, not all offsets.
1138   Output_addresses output_addresses_;
1139 };
1140
1141 // This POD class is holds the value of a symbol.  This is used for
1142 // local symbols, and for all symbols during relocation processing.
1143 // For special sections, such as SHF_MERGE sections, this calls a
1144 // function to get the final symbol value.
1145
1146 template<int size>
1147 class Symbol_value
1148 {
1149  public:
1150   typedef typename elfcpp::Elf_types<size>::Elf_Addr Value;
1151
1152   Symbol_value()
1153     : output_symtab_index_(0), output_dynsym_index_(-1U), input_shndx_(0),
1154       is_ordinary_shndx_(false), is_section_symbol_(false),
1155       is_tls_symbol_(false), is_ifunc_symbol_(false), has_output_value_(true)
1156   { this->u_.value = 0; }
1157
1158   ~Symbol_value()
1159   {
1160     if (!this->has_output_value_)
1161       delete this->u_.merged_symbol_value;
1162   }
1163
1164   // Get the value of this symbol.  OBJECT is the object in which this
1165   // symbol is defined, and ADDEND is an addend to add to the value.
1166   template<bool big_endian>
1167   Value
1168   value(const Sized_relobj<size, big_endian>* object, Value addend) const
1169   {
1170     if (this->has_output_value_)
1171       return this->u_.value + addend;
1172     else
1173       {
1174         gold_assert(this->is_ordinary_shndx_);
1175         return this->u_.merged_symbol_value->value(object, this->input_shndx_,
1176                                                    addend);
1177       }
1178   }
1179
1180   // Set the value of this symbol in the output symbol table.
1181   void
1182   set_output_value(Value value)
1183   { this->u_.value = value; }
1184
1185   // For a section symbol in a merged section, we need more
1186   // information.
1187   void
1188   set_merged_symbol_value(Merged_symbol_value<size>* msv)
1189   {
1190     gold_assert(this->is_section_symbol_);
1191     this->has_output_value_ = false;
1192     this->u_.merged_symbol_value = msv;
1193   }
1194
1195   // Initialize the input to output map for a section symbol in a
1196   // merged section.  We also initialize the value of a non-section
1197   // symbol in a merged section.
1198   void
1199   initialize_input_to_output_map(const Relobj* object)
1200   {
1201     if (!this->has_output_value_)
1202       {
1203         gold_assert(this->is_section_symbol_ && this->is_ordinary_shndx_);
1204         Merged_symbol_value<size>* msv = this->u_.merged_symbol_value;
1205         msv->initialize_input_to_output_map(object, this->input_shndx_);
1206       }
1207   }
1208
1209   // Free the input to output map for a section symbol in a merged
1210   // section.
1211   void
1212   free_input_to_output_map()
1213   {
1214     if (!this->has_output_value_)
1215       this->u_.merged_symbol_value->free_input_to_output_map();
1216   }
1217
1218   // Set the value of the symbol from the input file.  This is only
1219   // called by count_local_symbols, to communicate the value to
1220   // finalize_local_symbols.
1221   void
1222   set_input_value(Value value)
1223   { this->u_.value = value; }
1224
1225   // Return the input value.  This is only called by
1226   // finalize_local_symbols and (in special cases) relocate_section.
1227   Value
1228   input_value() const
1229   { return this->u_.value; }
1230
1231   // Return whether we have set the index in the output symbol table
1232   // yet.
1233   bool
1234   is_output_symtab_index_set() const
1235   {
1236     return (this->output_symtab_index_ != 0
1237             && this->output_symtab_index_ != -2U);
1238   }
1239
1240   // Return whether this symbol may be discarded from the normal
1241   // symbol table.
1242   bool
1243   may_be_discarded_from_output_symtab() const
1244   {
1245     gold_assert(!this->is_output_symtab_index_set());
1246     return this->output_symtab_index_ != -2U;
1247   }
1248
1249   // Return whether this symbol has an entry in the output symbol
1250   // table.
1251   bool
1252   has_output_symtab_entry() const
1253   {
1254     gold_assert(this->is_output_symtab_index_set());
1255     return this->output_symtab_index_ != -1U;
1256   }
1257
1258   // Return the index in the output symbol table.
1259   unsigned int
1260   output_symtab_index() const
1261   {
1262     gold_assert(this->is_output_symtab_index_set()
1263                 && this->output_symtab_index_ != -1U);
1264     return this->output_symtab_index_;
1265   }
1266
1267   // Set the index in the output symbol table.
1268   void
1269   set_output_symtab_index(unsigned int i)
1270   {
1271     gold_assert(!this->is_output_symtab_index_set());
1272     gold_assert(i != 0 && i != -1U && i != -2U);
1273     this->output_symtab_index_ = i;
1274   }
1275
1276   // Record that this symbol should not go into the output symbol
1277   // table.
1278   void
1279   set_no_output_symtab_entry()
1280   {
1281     gold_assert(this->output_symtab_index_ == 0);
1282     this->output_symtab_index_ = -1U;
1283   }
1284
1285   // Record that this symbol must go into the output symbol table,
1286   // because it there is a relocation that uses it.
1287   void
1288   set_must_have_output_symtab_entry()
1289   {
1290     gold_assert(!this->is_output_symtab_index_set());
1291     this->output_symtab_index_ = -2U;
1292   }
1293
1294   // Set the index in the output dynamic symbol table.
1295   void
1296   set_needs_output_dynsym_entry()
1297   {
1298     gold_assert(!this->is_section_symbol());
1299     this->output_dynsym_index_ = 0;
1300   }
1301
1302   // Return whether this symbol should go into the dynamic symbol
1303   // table.
1304   bool
1305   needs_output_dynsym_entry() const
1306   {
1307     return this->output_dynsym_index_ != -1U;
1308   }
1309
1310   // Return whether this symbol has an entry in the dynamic symbol
1311   // table.
1312   bool
1313   has_output_dynsym_entry() const
1314   {
1315     gold_assert(this->output_dynsym_index_ != 0);
1316     return this->output_dynsym_index_ != -1U;
1317   }
1318
1319   // Record that this symbol should go into the dynamic symbol table.
1320   void
1321   set_output_dynsym_index(unsigned int i)
1322   {
1323     gold_assert(this->output_dynsym_index_ == 0);
1324     gold_assert(i != 0 && i != -1U);
1325     this->output_dynsym_index_ = i;
1326   }
1327
1328   // Return the index in the output dynamic symbol table.
1329   unsigned int
1330   output_dynsym_index() const
1331   {
1332     gold_assert(this->output_dynsym_index_ != 0
1333                 && this->output_dynsym_index_ != -1U);
1334     return this->output_dynsym_index_;
1335   }
1336
1337   // Set the index of the input section in the input file.
1338   void
1339   set_input_shndx(unsigned int i, bool is_ordinary)
1340   {
1341     this->input_shndx_ = i;
1342     // input_shndx_ field is a bitfield, so make sure that the value
1343     // fits.
1344     gold_assert(this->input_shndx_ == i);
1345     this->is_ordinary_shndx_ = is_ordinary;
1346   }
1347
1348   // Return the index of the input section in the input file.
1349   unsigned int
1350   input_shndx(bool* is_ordinary) const
1351   {
1352     *is_ordinary = this->is_ordinary_shndx_;
1353     return this->input_shndx_;
1354   }
1355
1356   // Whether this is a section symbol.
1357   bool
1358   is_section_symbol() const
1359   { return this->is_section_symbol_; }
1360
1361   // Record that this is a section symbol.
1362   void
1363   set_is_section_symbol()
1364   {
1365     gold_assert(!this->needs_output_dynsym_entry());
1366     this->is_section_symbol_ = true;
1367   }
1368
1369   // Record that this is a TLS symbol.
1370   void
1371   set_is_tls_symbol()
1372   { this->is_tls_symbol_ = true; }
1373
1374   // Return true if this is a TLS symbol.
1375   bool
1376   is_tls_symbol() const
1377   { return this->is_tls_symbol_; }
1378
1379   // Record that this is an IFUNC symbol.
1380   void
1381   set_is_ifunc_symbol()
1382   { this->is_ifunc_symbol_ = true; }
1383
1384   // Return true if this is an IFUNC symbol.
1385   bool
1386   is_ifunc_symbol() const
1387   { return this->is_ifunc_symbol_; }
1388
1389   // Return true if this has output value.
1390   bool
1391   has_output_value() const
1392   { return this->has_output_value_; }
1393
1394  private:
1395   // The index of this local symbol in the output symbol table.  This
1396   // will be 0 if no value has been assigned yet, and the symbol may
1397   // be omitted.  This will be -1U if the symbol should not go into
1398   // the symbol table.  This will be -2U if the symbol must go into
1399   // the symbol table, but no index has been assigned yet.
1400   unsigned int output_symtab_index_;
1401   // The index of this local symbol in the dynamic symbol table.  This
1402   // will be -1U if the symbol should not go into the symbol table.
1403   unsigned int output_dynsym_index_;
1404   // The section index in the input file in which this symbol is
1405   // defined.
1406   unsigned int input_shndx_ : 27;
1407   // Whether the section index is an ordinary index, not a special
1408   // value.
1409   bool is_ordinary_shndx_ : 1;
1410   // Whether this is a STT_SECTION symbol.
1411   bool is_section_symbol_ : 1;
1412   // Whether this is a STT_TLS symbol.
1413   bool is_tls_symbol_ : 1;
1414   // Whether this is a STT_GNU_IFUNC symbol.
1415   bool is_ifunc_symbol_ : 1;
1416   // Whether this symbol has a value for the output file.  This is
1417   // normally set to true during Layout::finalize, by
1418   // finalize_local_symbols.  It will be false for a section symbol in
1419   // a merge section, as for such symbols we can not determine the
1420   // value to use in a relocation until we see the addend.
1421   bool has_output_value_ : 1;
1422   union
1423   {
1424     // This is used if has_output_value_ is true.  Between
1425     // count_local_symbols and finalize_local_symbols, this is the
1426     // value in the input file.  After finalize_local_symbols, it is
1427     // the value in the output file.
1428     Value value;
1429     // This is used if has_output_value_ is false.  It points to the
1430     // information we need to get the value for a merge section.
1431     Merged_symbol_value<size>* merged_symbol_value;
1432   } u_;
1433 };
1434
1435 // A GOT offset list.  A symbol may have more than one GOT offset
1436 // (e.g., when mixing modules compiled with two different TLS models),
1437 // but will usually have at most one.  GOT_TYPE identifies the type of
1438 // GOT entry; its values are specific to each target.
1439
1440 class Got_offset_list
1441 {
1442  public:
1443   Got_offset_list()
1444     : got_type_(-1U), got_offset_(0), got_next_(NULL)
1445   { }
1446
1447   Got_offset_list(unsigned int got_type, unsigned int got_offset)
1448     : got_type_(got_type), got_offset_(got_offset), got_next_(NULL)
1449   { }
1450
1451   ~Got_offset_list()
1452   { 
1453     if (this->got_next_ != NULL)
1454       {
1455         delete this->got_next_;
1456         this->got_next_ = NULL;
1457       }
1458   }
1459
1460   // Initialize the fields to their default values.
1461   void
1462   init()
1463   {
1464     this->got_type_ = -1U;
1465     this->got_offset_ = 0;
1466     this->got_next_ = NULL;
1467   }
1468
1469   // Set the offset for the GOT entry of type GOT_TYPE.
1470   void
1471   set_offset(unsigned int got_type, unsigned int got_offset)
1472   {
1473     if (this->got_type_ == -1U)
1474       {
1475         this->got_type_ = got_type;
1476         this->got_offset_ = got_offset;
1477       }
1478     else
1479       {
1480         for (Got_offset_list* g = this; g != NULL; g = g->got_next_)
1481           {
1482             if (g->got_type_ == got_type)
1483               {
1484                 g->got_offset_ = got_offset;
1485                 return;
1486               }
1487           }
1488         Got_offset_list* g = new Got_offset_list(got_type, got_offset);
1489         g->got_next_ = this->got_next_;
1490         this->got_next_ = g;
1491       }
1492   }
1493
1494   // Return the offset for a GOT entry of type GOT_TYPE.
1495   unsigned int
1496   get_offset(unsigned int got_type) const
1497   {
1498     for (const Got_offset_list* g = this; g != NULL; g = g->got_next_)
1499       {
1500         if (g->got_type_ == got_type)
1501           return g->got_offset_;
1502       }
1503     return -1U;
1504   }
1505
1506   // Return a pointer to the list, or NULL if the list is empty.
1507   const Got_offset_list*
1508   get_list() const
1509   {
1510     if (this->got_type_ == -1U)
1511       return NULL;
1512     return this;
1513   }
1514
1515   // Loop over all GOT offset entries, applying the function F to each.
1516   template<typename F>
1517   void
1518   for_all_got_offsets(F f) const
1519   {
1520     if (this->got_type_ == -1U)
1521       return;
1522     for (const Got_offset_list* g = this; g != NULL; g = g->got_next_)
1523       f(g->got_type_, g->got_offset_);
1524   }
1525
1526  private:
1527   unsigned int got_type_;
1528   unsigned int got_offset_;
1529   Got_offset_list* got_next_;
1530 };
1531
1532 // This type is used to modify relocations for -fsplit-stack.  It is
1533 // indexed by relocation index, and means that the relocation at that
1534 // index should use the symbol from the vector, rather than the one
1535 // indicated by the relocation.
1536
1537 class Reloc_symbol_changes
1538 {
1539  public:
1540   Reloc_symbol_changes(size_t count)
1541     : vec_(count, NULL)
1542   { }
1543
1544   void
1545   set(size_t i, Symbol* sym)
1546   { this->vec_[i] = sym; }
1547
1548   const Symbol*
1549   operator[](size_t i) const
1550   { return this->vec_[i]; }
1551
1552  private:
1553   std::vector<Symbol*> vec_;
1554 };
1555
1556 // Type for mapping section index to uncompressed size.
1557
1558 typedef std::map<unsigned int, section_size_type> Compressed_section_map;
1559
1560 // A regular object file.  This is size and endian specific.
1561
1562 template<int size, bool big_endian>
1563 class Sized_relobj : public Relobj
1564 {
1565  public:
1566   typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
1567   typedef std::vector<Symbol*> Symbols;
1568   typedef std::vector<Symbol_value<size> > Local_values;
1569
1570   static const Address invalid_address = static_cast<Address>(0) - 1;
1571
1572   enum Compute_final_local_value_status
1573   {
1574     // No error.
1575     CFLV_OK,
1576     // An error occurred.
1577     CFLV_ERROR,
1578     // The local symbol has no output section.
1579     CFLV_DISCARDED
1580   };
1581
1582   Sized_relobj(const std::string& name, Input_file* input_file, off_t offset,
1583                const typename elfcpp::Ehdr<size, big_endian>&);
1584
1585   ~Sized_relobj();
1586
1587   // Checks if the offset of input section SHNDX within its output
1588   // section is invalid. 
1589   bool
1590   is_output_section_offset_invalid(unsigned int shndx) const
1591   { return this->get_output_section_offset(shndx) == invalid_address; }
1592
1593   // Set up the object file based on TARGET.
1594   void
1595   setup()
1596   { this->do_setup(); }
1597
1598   // Return the number of symbols.  This is only valid after
1599   // Object::add_symbols has been called.
1600   unsigned int
1601   symbol_count() const
1602   { return this->local_symbol_count_ + this->symbols_.size(); }
1603
1604   // If SYM is the index of a global symbol in the object file's
1605   // symbol table, return the Symbol object.  Otherwise, return NULL.
1606   Symbol*
1607   global_symbol(unsigned int sym) const
1608   {
1609     if (sym >= this->local_symbol_count_)
1610       {
1611         gold_assert(sym - this->local_symbol_count_ < this->symbols_.size());
1612         return this->symbols_[sym - this->local_symbol_count_];
1613       }
1614     return NULL;
1615   }
1616
1617   // Return the section index of symbol SYM.  Set *VALUE to its value
1618   // in the object file.  Set *IS_ORDINARY if this is an ordinary
1619   // section index, not a special code between SHN_LORESERVE and
1620   // SHN_HIRESERVE.  Note that for a symbol which is not defined in
1621   // this object file, this will set *VALUE to 0 and return SHN_UNDEF;
1622   // it will not return the final value of the symbol in the link.
1623   unsigned int
1624   symbol_section_and_value(unsigned int sym, Address* value, bool* is_ordinary);
1625
1626   // Return a pointer to the Symbol_value structure which holds the
1627   // value of a local symbol.
1628   const Symbol_value<size>*
1629   local_symbol(unsigned int sym) const
1630   {
1631     gold_assert(sym < this->local_values_.size());
1632     return &this->local_values_[sym];
1633   }
1634
1635   // Return the index of local symbol SYM in the ordinary symbol
1636   // table.  A value of -1U means that the symbol is not being output.
1637   unsigned int
1638   symtab_index(unsigned int sym) const
1639   {
1640     gold_assert(sym < this->local_values_.size());
1641     return this->local_values_[sym].output_symtab_index();
1642   }
1643
1644   // Return the index of local symbol SYM in the dynamic symbol
1645   // table.  A value of -1U means that the symbol is not being output.
1646   unsigned int
1647   dynsym_index(unsigned int sym) const
1648   {
1649     gold_assert(sym < this->local_values_.size());
1650     return this->local_values_[sym].output_dynsym_index();
1651   }
1652
1653   // Return the input section index of local symbol SYM.
1654   unsigned int
1655   local_symbol_input_shndx(unsigned int sym, bool* is_ordinary) const
1656   {
1657     gold_assert(sym < this->local_values_.size());
1658     return this->local_values_[sym].input_shndx(is_ordinary);
1659   }
1660
1661   // Record that local symbol SYM must be in the output symbol table.
1662   void
1663   set_must_have_output_symtab_entry(unsigned int sym)
1664   {
1665     gold_assert(sym < this->local_values_.size());
1666     this->local_values_[sym].set_must_have_output_symtab_entry();
1667   }
1668
1669   // Record that local symbol SYM needs a dynamic symbol entry.
1670   void
1671   set_needs_output_dynsym_entry(unsigned int sym)
1672   {
1673     gold_assert(sym < this->local_values_.size());
1674     this->local_values_[sym].set_needs_output_dynsym_entry();
1675   }
1676
1677   // Return whether the local symbol SYMNDX has a GOT offset.
1678   // For TLS symbols, the GOT entry will hold its tp-relative offset.
1679   bool
1680   local_has_got_offset(unsigned int symndx, unsigned int got_type) const
1681   {
1682     Local_got_offsets::const_iterator p =
1683         this->local_got_offsets_.find(symndx);
1684     return (p != this->local_got_offsets_.end()
1685             && p->second->get_offset(got_type) != -1U);
1686   }
1687
1688   // Return the GOT offset of the local symbol SYMNDX.
1689   unsigned int
1690   local_got_offset(unsigned int symndx, unsigned int got_type) const
1691   {
1692     Local_got_offsets::const_iterator p =
1693         this->local_got_offsets_.find(symndx);
1694     gold_assert(p != this->local_got_offsets_.end());
1695     unsigned int off = p->second->get_offset(got_type);
1696     gold_assert(off != -1U);
1697     return off;
1698   }
1699
1700   // Set the GOT offset of the local symbol SYMNDX to GOT_OFFSET.
1701   void
1702   set_local_got_offset(unsigned int symndx, unsigned int got_type,
1703                        unsigned int got_offset)
1704   {
1705     Local_got_offsets::const_iterator p =
1706         this->local_got_offsets_.find(symndx);
1707     if (p != this->local_got_offsets_.end())
1708       p->second->set_offset(got_type, got_offset);
1709     else
1710       {
1711         Got_offset_list* g = new Got_offset_list(got_type, got_offset);
1712         std::pair<Local_got_offsets::iterator, bool> ins =
1713             this->local_got_offsets_.insert(std::make_pair(symndx, g));
1714         gold_assert(ins.second);
1715       }
1716   }
1717
1718   // Return the GOT offset list for the local symbol SYMNDX.
1719   const Got_offset_list*
1720   local_got_offset_list(unsigned int symndx) const
1721   {
1722     Local_got_offsets::const_iterator p =
1723         this->local_got_offsets_.find(symndx);
1724     if (p == this->local_got_offsets_.end())
1725       return NULL;
1726     return p->second;
1727   }
1728
1729   // Return whether the local symbol SYMNDX has a PLT offset.
1730   bool
1731   local_has_plt_offset(unsigned int symndx) const;
1732
1733   // Return the PLT offset for a local symbol.  It is an error to call
1734   // this if it doesn't have one.
1735   unsigned int
1736   local_plt_offset(unsigned int symndx) const;
1737
1738   // Set the PLT offset of the local symbol SYMNDX.
1739   void
1740   set_local_plt_offset(unsigned int symndx, unsigned int plt_offset);
1741
1742   // Get the offset of input section SHNDX within its output section.
1743   // This is -1 if the input section requires a special mapping, such
1744   // as a merge section.  The output section can be found in the
1745   // output_sections_ field of the parent class Relobj.
1746   Address
1747   get_output_section_offset(unsigned int shndx) const
1748   {
1749     gold_assert(shndx < this->section_offsets_.size());
1750     return this->section_offsets_[shndx];
1751   }
1752
1753   // Return the name of the symbol that spans the given offset in the
1754   // specified section in this object.  This is used only for error
1755   // messages and is not particularly efficient.
1756   bool
1757   get_symbol_location_info(unsigned int shndx, off_t offset,
1758                            Symbol_location_info* info);
1759
1760   // Look for a kept section corresponding to the given discarded section,
1761   // and return its output address.  This is used only for relocations in
1762   // debugging sections.
1763   Address
1764   map_to_kept_section(unsigned int shndx, bool* found) const;
1765
1766   // Compute final local symbol value.  R_SYM is the local symbol index.
1767   // LV_IN points to a local symbol value containing the input value.
1768   // LV_OUT points to a local symbol value storing the final output value,
1769   // which must not be a merged symbol value since before calling this
1770   // method to avoid memory leak.  SYMTAB points to a symbol table.
1771   //
1772   // The method returns a status code at return.  If the return status is
1773   // CFLV_OK, *LV_OUT contains the final value.  If the return status is
1774   // CFLV_ERROR, *LV_OUT is 0.  If the return status is CFLV_DISCARDED,
1775   // *LV_OUT is not modified.
1776   Compute_final_local_value_status
1777   compute_final_local_value(unsigned int r_sym,
1778                             const Symbol_value<size>* lv_in,
1779                             Symbol_value<size>* lv_out,
1780                             const Symbol_table* symtab);
1781
1782  protected:
1783   // Set up.
1784   virtual void
1785   do_setup();
1786
1787   // Read the symbols.
1788   void
1789   do_read_symbols(Read_symbols_data*);
1790
1791   // Return the number of local symbols.
1792   unsigned int
1793   do_local_symbol_count() const
1794   { return this->local_symbol_count_; }
1795
1796   // Lay out the input sections.
1797   void
1798   do_layout(Symbol_table*, Layout*, Read_symbols_data*);
1799
1800   // Layout sections whose layout was deferred while waiting for
1801   // input files from a plugin.
1802   void
1803   do_layout_deferred_sections(Layout*);
1804
1805   // Add the symbols to the symbol table.
1806   void
1807   do_add_symbols(Symbol_table*, Read_symbols_data*, Layout*);
1808
1809   Archive::Should_include
1810   do_should_include_member(Symbol_table* symtab, Layout*, Read_symbols_data*,
1811                            std::string* why);
1812
1813   // Read the relocs.
1814   void
1815   do_read_relocs(Read_relocs_data*);
1816
1817   // Process the relocs to find list of referenced sections. Used only
1818   // during garbage collection.
1819   void
1820   do_gc_process_relocs(Symbol_table*, Layout*, Read_relocs_data*);
1821
1822   // Scan the relocs and adjust the symbol table.
1823   void
1824   do_scan_relocs(Symbol_table*, Layout*, Read_relocs_data*);
1825
1826   // Count the local symbols.
1827   void
1828   do_count_local_symbols(Stringpool_template<char>*,
1829                             Stringpool_template<char>*);
1830
1831   // Finalize the local symbols.
1832   unsigned int
1833   do_finalize_local_symbols(unsigned int, off_t, Symbol_table*);
1834
1835   // Set the offset where local dynamic symbol information will be stored.
1836   unsigned int
1837   do_set_local_dynsym_indexes(unsigned int);
1838
1839   // Set the offset where local dynamic symbol information will be stored.
1840   unsigned int
1841   do_set_local_dynsym_offset(off_t);
1842
1843   // Relocate the input sections and write out the local symbols.
1844   void
1845   do_relocate(const Symbol_table* symtab, const Layout*, Output_file* of);
1846
1847   // Get the size of a section.
1848   uint64_t
1849   do_section_size(unsigned int shndx)
1850   { return this->elf_file_.section_size(shndx); }
1851
1852   // Get the name of a section.
1853   std::string
1854   do_section_name(unsigned int shndx)
1855   { return this->elf_file_.section_name(shndx); }
1856
1857   // Return the location of the contents of a section.
1858   Object::Location
1859   do_section_contents(unsigned int shndx)
1860   { return this->elf_file_.section_contents(shndx); }
1861
1862   // Return section flags.
1863   uint64_t
1864   do_section_flags(unsigned int shndx);
1865
1866   // Return section entsize.
1867   uint64_t
1868   do_section_entsize(unsigned int shndx);
1869
1870   // Return section address.
1871   uint64_t
1872   do_section_address(unsigned int shndx)
1873   { return this->elf_file_.section_addr(shndx); }
1874
1875   // Return section type.
1876   unsigned int
1877   do_section_type(unsigned int shndx)
1878   { return this->elf_file_.section_type(shndx); }
1879
1880   // Return the section link field.
1881   unsigned int
1882   do_section_link(unsigned int shndx)
1883   { return this->elf_file_.section_link(shndx); }
1884
1885   // Return the section info field.
1886   unsigned int
1887   do_section_info(unsigned int shndx)
1888   { return this->elf_file_.section_info(shndx); }
1889
1890   // Return the section alignment.
1891   uint64_t
1892   do_section_addralign(unsigned int shndx)
1893   { return this->elf_file_.section_addralign(shndx); }
1894
1895   // Return the Xindex structure to use.
1896   Xindex*
1897   do_initialize_xindex();
1898
1899   // Get symbol counts.
1900   void
1901   do_get_global_symbol_counts(const Symbol_table*, size_t*, size_t*) const;
1902
1903   // Get the global symbols.
1904   const Symbols*
1905   do_get_global_symbols() const
1906   { return &this->symbols_; }
1907
1908   // Get the offset of a section.
1909   uint64_t
1910   do_output_section_offset(unsigned int shndx) const
1911   {
1912     Address off = this->get_output_section_offset(shndx);
1913     if (off == invalid_address)
1914       return -1ULL;
1915     return off;
1916   }
1917
1918   // Set the offset of a section.
1919   void
1920   do_set_section_offset(unsigned int shndx, uint64_t off)
1921   {
1922     gold_assert(shndx < this->section_offsets_.size());
1923     this->section_offsets_[shndx] =
1924       (off == static_cast<uint64_t>(-1)
1925        ? invalid_address
1926        : convert_types<Address, uint64_t>(off));
1927   }
1928
1929   // Adjust a section index if necessary.
1930   unsigned int
1931   adjust_shndx(unsigned int shndx)
1932   {
1933     if (shndx >= elfcpp::SHN_LORESERVE)
1934       shndx += this->elf_file_.large_shndx_offset();
1935     return shndx;
1936   }
1937
1938   // Initialize input to output maps for section symbols in merged
1939   // sections.
1940   void
1941   initialize_input_to_output_maps();
1942
1943   // Free the input to output maps for section symbols in merged
1944   // sections.
1945   void
1946   free_input_to_output_maps();
1947
1948   // Return symbol table section index.
1949   unsigned int
1950   symtab_shndx() const
1951   { return this->symtab_shndx_; }
1952
1953   // Allow a child class to access the ELF file.
1954   elfcpp::Elf_file<size, big_endian, Object>*
1955   elf_file()
1956   { return &this->elf_file_; }
1957   
1958   // Allow a child class to access the local values.
1959   Local_values*
1960   local_values()
1961   { return &this->local_values_; }
1962
1963   // Views and sizes when relocating.
1964   struct View_size
1965   {
1966     unsigned char* view;
1967     typename elfcpp::Elf_types<size>::Elf_Addr address;
1968     off_t offset;
1969     section_size_type view_size;
1970     bool is_input_output_view;
1971     bool is_postprocessing_view;
1972   };
1973
1974   typedef std::vector<View_size> Views;
1975
1976   // This may be overriden by a child class.
1977   virtual void
1978   do_relocate_sections(const Symbol_table* symtab, const Layout* layout,
1979                        const unsigned char* pshdrs, Output_file* of,
1980                        Views* pviews);
1981
1982   // Allow a child to set output local symbol count.
1983   void
1984   set_output_local_symbol_count(unsigned int value)
1985   { this->output_local_symbol_count_ = value; }
1986
1987   // Return TRUE if the section is a compressed debug section, and set
1988   // *UNCOMPRESSED_SIZE to the size of the uncompressed data.
1989   bool
1990   do_section_is_compressed(unsigned int shndx,
1991                            section_size_type* uncompressed_size) const
1992   {
1993     if (this->compressed_sections_ == NULL)
1994       return false;
1995     Compressed_section_map::const_iterator p =
1996         this->compressed_sections_->find(shndx);
1997     if (p != this->compressed_sections_->end())
1998       {
1999         if (uncompressed_size != NULL)
2000           *uncompressed_size = p->second;
2001         return true;
2002       }
2003     return false;
2004   }
2005
2006  private:
2007   // For convenience.
2008   typedef Sized_relobj<size, big_endian> This;
2009   static const int ehdr_size = elfcpp::Elf_sizes<size>::ehdr_size;
2010   static const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
2011   static const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
2012   typedef elfcpp::Shdr<size, big_endian> Shdr;
2013
2014   // To keep track of discarded comdat sections, we need to map a member
2015   // section index to the object and section index of the corresponding
2016   // kept section.
2017   struct Kept_comdat_section
2018   {
2019     Kept_comdat_section(Relobj* a_object, unsigned int a_shndx)
2020       : object(a_object), shndx(a_shndx)
2021     { }
2022     Relobj* object;
2023     unsigned int shndx;
2024   };
2025   typedef std::map<unsigned int, Kept_comdat_section>
2026       Kept_comdat_section_table;
2027
2028   // Find the SHT_SYMTAB section, given the section headers.
2029   void
2030   find_symtab(const unsigned char* pshdrs);
2031
2032   // Return whether SHDR has the right flags for a GNU style exception
2033   // frame section.
2034   bool
2035   check_eh_frame_flags(const elfcpp::Shdr<size, big_endian>* shdr) const;
2036
2037   // Return whether there is a section named .eh_frame which might be
2038   // a GNU style exception frame section.
2039   bool
2040   find_eh_frame(const unsigned char* pshdrs, const char* names,
2041                 section_size_type names_size) const;
2042
2043   // Whether to include a section group in the link.
2044   bool
2045   include_section_group(Symbol_table*, Layout*, unsigned int, const char*,
2046                         const unsigned char*, const char*, section_size_type,
2047                         std::vector<bool>*);
2048
2049   // Whether to include a linkonce section in the link.
2050   bool
2051   include_linkonce_section(Layout*, unsigned int, const char*,
2052                            const elfcpp::Shdr<size, big_endian>&);
2053
2054   // Layout an input section.
2055   void
2056   layout_section(Layout* layout, unsigned int shndx, const char* name,
2057                  typename This::Shdr& shdr, unsigned int reloc_shndx,
2058                  unsigned int reloc_type);
2059
2060   // Write section data to the output file.  Record the views and
2061   // sizes in VIEWS for use when relocating.
2062   void
2063   write_sections(const unsigned char* pshdrs, Output_file*, Views*);
2064
2065   // Relocate the sections in the output file.
2066   void
2067   relocate_sections(const Symbol_table* symtab, const Layout* layout,
2068                     const unsigned char* pshdrs, Output_file* of,
2069                     Views* pviews)
2070   { this->do_relocate_sections(symtab, layout, pshdrs, of, pviews); }
2071
2072   // Scan the input relocations for --emit-relocs.
2073   void
2074   emit_relocs_scan(Symbol_table*, Layout*, const unsigned char* plocal_syms,
2075                    const Read_relocs_data::Relocs_list::iterator&);
2076
2077   // Scan the input relocations for --emit-relocs, templatized on the
2078   // type of the relocation section.
2079   template<int sh_type>
2080   void
2081   emit_relocs_scan_reltype(Symbol_table*, Layout*,
2082                            const unsigned char* plocal_syms,
2083                            const Read_relocs_data::Relocs_list::iterator&,
2084                            Relocatable_relocs*);
2085
2086   // Emit the relocs for --emit-relocs.
2087   void
2088   emit_relocs(const Relocate_info<size, big_endian>*, unsigned int,
2089               unsigned int sh_type, const unsigned char* prelocs,
2090               size_t reloc_count, Output_section*, Address output_offset,
2091               unsigned char* view, Address address,
2092               section_size_type view_size,
2093               unsigned char* reloc_view, section_size_type reloc_view_size);
2094
2095   // Emit the relocs for --emit-relocs, templatized on the type of the
2096   // relocation section.
2097   template<int sh_type>
2098   void
2099   emit_relocs_reltype(const Relocate_info<size, big_endian>*, unsigned int,
2100                       const unsigned char* prelocs, size_t reloc_count,
2101                       Output_section*, Address output_offset,
2102                       unsigned char* view, Address address,
2103                       section_size_type view_size,
2104                       unsigned char* reloc_view,
2105                       section_size_type reloc_view_size);
2106
2107   // Scan the input relocations for --incremental.
2108   void
2109   incremental_relocs_scan(const Read_relocs_data::Relocs_list::iterator&);
2110
2111   // Scan the input relocations for --incremental, templatized on the
2112   // type of the relocation section.
2113   template<int sh_type>
2114   void
2115   incremental_relocs_scan_reltype(
2116       const Read_relocs_data::Relocs_list::iterator&);
2117
2118   void
2119   incremental_relocs_write(const Relocate_info<size, big_endian>*,
2120                            unsigned int sh_type,
2121                            const unsigned char* prelocs,
2122                            size_t reloc_count,
2123                            Output_section*,
2124                            Address output_offset,
2125                            Output_file*);
2126
2127   template<int sh_type>
2128   void
2129   incremental_relocs_write_reltype(const Relocate_info<size, big_endian>*,
2130                                    const unsigned char* prelocs,
2131                                    size_t reloc_count,
2132                                    Output_section*,
2133                                    Address output_offset,
2134                                    Output_file*);
2135
2136   // A type shared by split_stack_adjust_reltype and find_functions.
2137   typedef std::map<section_offset_type, section_size_type> Function_offsets;
2138
2139   // Check for -fsplit-stack routines calling non-split-stack routines.
2140   void
2141   split_stack_adjust(const Symbol_table*, const unsigned char* pshdrs,
2142                      unsigned int sh_type, unsigned int shndx,
2143                      const unsigned char* prelocs, size_t reloc_count,
2144                      unsigned char* view, section_size_type view_size,
2145                      Reloc_symbol_changes** reloc_map);
2146
2147   template<int sh_type>
2148   void
2149   split_stack_adjust_reltype(const Symbol_table*, const unsigned char* pshdrs,
2150                              unsigned int shndx, const unsigned char* prelocs,
2151                              size_t reloc_count, unsigned char* view,
2152                              section_size_type view_size,
2153                              Reloc_symbol_changes** reloc_map);
2154
2155   // Find all functions in a section.
2156   void
2157   find_functions(const unsigned char* pshdrs, unsigned int shndx,
2158                  Function_offsets*);
2159
2160   // Write out the local symbols.
2161   void
2162   write_local_symbols(Output_file*,
2163                       const Stringpool_template<char>*,
2164                       const Stringpool_template<char>*,
2165                       Output_symtab_xindex*,
2166                       Output_symtab_xindex*);
2167
2168   // Record a mapping from discarded section SHNDX to the corresponding
2169   // kept section.
2170   void
2171   set_kept_comdat_section(unsigned int shndx, Relobj* kept_object,
2172                           unsigned int kept_shndx)
2173   {
2174     Kept_comdat_section kept(kept_object, kept_shndx);
2175     this->kept_comdat_sections_.insert(std::make_pair(shndx, kept));
2176   }
2177
2178   // Find the kept section corresponding to the discarded section
2179   // SHNDX.  Return true if found.
2180   bool
2181   get_kept_comdat_section(unsigned int shndx, Relobj** kept_object,
2182                           unsigned int* kept_shndx) const
2183   {
2184     typename Kept_comdat_section_table::const_iterator p =
2185       this->kept_comdat_sections_.find(shndx);
2186     if (p == this->kept_comdat_sections_.end())
2187       return false;
2188     *kept_object = p->second.object;
2189     *kept_shndx = p->second.shndx;
2190     return true;
2191   }
2192
2193   // Compute final local symbol value.  R_SYM is the local symbol index.
2194   // LV_IN points to a local symbol value containing the input value.
2195   // LV_OUT points to a local symbol value storing the final output value,
2196   // which must not be a merged symbol value since before calling this
2197   // method to avoid memory leak.  RELOCATABLE indicates whether we are
2198   // linking a relocatable output.  OUT_SECTIONS is an array of output
2199   // sections.  OUT_OFFSETS is an array of offsets of the sections.  SYMTAB
2200   // points to a symbol table.
2201   //
2202   // The method returns a status code at return.  If the return status is
2203   // CFLV_OK, *LV_OUT contains the final value.  If the return status is
2204   // CFLV_ERROR, *LV_OUT is 0.  If the return status is CFLV_DISCARDED,
2205   // *LV_OUT is not modified.
2206   inline Compute_final_local_value_status
2207   compute_final_local_value_internal(unsigned int r_sym,
2208                                      const Symbol_value<size>* lv_in,
2209                                      Symbol_value<size>* lv_out,
2210                                      bool relocatable,
2211                                      const Output_sections& out_sections,
2212                                      const std::vector<Address>& out_offsets,
2213                                      const Symbol_table* symtab);
2214
2215   // The GOT offsets of local symbols. This map also stores GOT offsets
2216   // for tp-relative offsets for TLS symbols.
2217   typedef Unordered_map<unsigned int, Got_offset_list*> Local_got_offsets;
2218
2219   // The PLT offsets of local symbols.
2220   typedef Unordered_map<unsigned int, unsigned int> Local_plt_offsets;
2221
2222   // Saved information for sections whose layout was deferred.
2223   struct Deferred_layout
2224   {
2225     static const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
2226     Deferred_layout(unsigned int shndx, const char* name,
2227                     const unsigned char* pshdr,
2228                     unsigned int reloc_shndx, unsigned int reloc_type)
2229       : shndx_(shndx), name_(name), reloc_shndx_(reloc_shndx),
2230         reloc_type_(reloc_type)
2231     {
2232       memcpy(this->shdr_data_, pshdr, shdr_size);
2233     }
2234     unsigned int shndx_;
2235     std::string name_;
2236     unsigned int reloc_shndx_;
2237     unsigned int reloc_type_;
2238     unsigned char shdr_data_[shdr_size];
2239   };
2240
2241   // General access to the ELF file.
2242   elfcpp::Elf_file<size, big_endian, Object> elf_file_;
2243   // Index of SHT_SYMTAB section.
2244   unsigned int symtab_shndx_;
2245   // The number of local symbols.
2246   unsigned int local_symbol_count_;
2247   // The number of local symbols which go into the output file.
2248   unsigned int output_local_symbol_count_;
2249   // The number of local symbols which go into the output file's dynamic
2250   // symbol table.
2251   unsigned int output_local_dynsym_count_;
2252   // The entries in the symbol table for the external symbols.
2253   Symbols symbols_;
2254   // Number of symbols defined in object file itself.
2255   size_t defined_count_;
2256   // File offset for local symbols.
2257   off_t local_symbol_offset_;
2258   // File offset for local dynamic symbols.
2259   off_t local_dynsym_offset_;
2260   // Values of local symbols.
2261   Local_values local_values_;
2262   // GOT offsets for local non-TLS symbols, and tp-relative offsets
2263   // for TLS symbols, indexed by symbol number.
2264   Local_got_offsets local_got_offsets_;
2265   // PLT offsets for local symbols.
2266   Local_plt_offsets local_plt_offsets_;
2267   // For each input section, the offset of the input section in its
2268   // output section.  This is INVALID_ADDRESS if the input section requires a
2269   // special mapping.
2270   std::vector<Address> section_offsets_;
2271   // Table mapping discarded comdat sections to corresponding kept sections.
2272   Kept_comdat_section_table kept_comdat_sections_;
2273   // Whether this object has a GNU style .eh_frame section.
2274   bool has_eh_frame_;
2275   // If this object has a GNU style .eh_frame section that is discarded in
2276   // output, record the index here.  Otherwise it is -1U.
2277   unsigned int discarded_eh_frame_shndx_;
2278   // The list of sections whose layout was deferred.
2279   std::vector<Deferred_layout> deferred_layout_;
2280   // The list of relocation sections whose layout was deferred.
2281   std::vector<Deferred_layout> deferred_layout_relocs_;
2282   // For compressed debug sections, map section index to uncompressed size.
2283   Compressed_section_map* compressed_sections_;
2284 };
2285
2286 // A class to manage the list of all objects.
2287
2288 class Input_objects
2289 {
2290  public:
2291   Input_objects()
2292     : relobj_list_(), dynobj_list_(), sonames_(), cref_(NULL)
2293   { }
2294
2295   // The type of the list of input relocateable objects.
2296   typedef std::vector<Relobj*> Relobj_list;
2297   typedef Relobj_list::const_iterator Relobj_iterator;
2298
2299   // The type of the list of input dynamic objects.
2300   typedef std::vector<Dynobj*> Dynobj_list;
2301   typedef Dynobj_list::const_iterator Dynobj_iterator;
2302
2303   // Add an object to the list.  Return true if all is well, or false
2304   // if this object should be ignored.
2305   bool
2306   add_object(Object*);
2307
2308   // Start processing an archive.
2309   void
2310   archive_start(Archive*);
2311
2312   // Stop processing an archive.
2313   void
2314   archive_stop(Archive*);
2315
2316   // For each dynamic object, check whether we've seen all of its
2317   // explicit dependencies.
2318   void
2319   check_dynamic_dependencies() const;
2320
2321   // Return whether an object was found in the system library
2322   // directory.
2323   bool
2324   found_in_system_library_directory(const Object*) const;
2325
2326   // Print symbol counts.
2327   void
2328   print_symbol_counts(const Symbol_table*) const;
2329
2330   // Print a cross reference table.
2331   void
2332   print_cref(const Symbol_table*, FILE*) const;
2333
2334   // Iterate over all regular objects.
2335
2336   Relobj_iterator
2337   relobj_begin() const
2338   { return this->relobj_list_.begin(); }
2339
2340   Relobj_iterator
2341   relobj_end() const
2342   { return this->relobj_list_.end(); }
2343
2344   // Iterate over all dynamic objects.
2345
2346   Dynobj_iterator
2347   dynobj_begin() const
2348   { return this->dynobj_list_.begin(); }
2349
2350   Dynobj_iterator
2351   dynobj_end() const
2352   { return this->dynobj_list_.end(); }
2353
2354   // Return whether we have seen any dynamic objects.
2355   bool
2356   any_dynamic() const
2357   { return !this->dynobj_list_.empty(); }
2358
2359   // Return the number of non dynamic objects.
2360   int
2361   number_of_relobjs() const
2362   { return this->relobj_list_.size(); }
2363
2364   // Return the number of input objects.
2365   int
2366   number_of_input_objects() const
2367   { return this->relobj_list_.size() + this->dynobj_list_.size(); }
2368
2369  private:
2370   Input_objects(const Input_objects&);
2371   Input_objects& operator=(const Input_objects&);
2372
2373   // The list of ordinary objects included in the link.
2374   Relobj_list relobj_list_;
2375   // The list of dynamic objects included in the link.
2376   Dynobj_list dynobj_list_;
2377   // SONAMEs that we have seen.
2378   Unordered_set<std::string> sonames_;
2379   // Manage cross-references if requested.
2380   Cref* cref_;
2381 };
2382
2383 // Some of the information we pass to the relocation routines.  We
2384 // group this together to avoid passing a dozen different arguments.
2385
2386 template<int size, bool big_endian>
2387 struct Relocate_info
2388 {
2389   // Symbol table.
2390   const Symbol_table* symtab;
2391   // Layout.
2392   const Layout* layout;
2393   // Object being relocated.
2394   Sized_relobj<size, big_endian>* object;
2395   // Section index of relocation section.
2396   unsigned int reloc_shndx;
2397   // Section header of relocation section.
2398   const unsigned char* reloc_shdr;
2399   // Section index of section being relocated.
2400   unsigned int data_shndx;
2401   // Section header of data section.
2402   const unsigned char* data_shdr;
2403
2404   // Return a string showing the location of a relocation.  This is
2405   // only used for error messages.
2406   std::string
2407   location(size_t relnum, off_t reloffset) const;
2408 };
2409
2410 // This is used to represent a section in an object and is used as the
2411 // key type for various section maps.
2412 typedef std::pair<Object*, unsigned int> Section_id;
2413
2414 // This is similar to Section_id but is used when the section
2415 // pointers are const.
2416 typedef std::pair<const Object*, unsigned int> Const_section_id;
2417
2418 // The hash value is based on the address of an object in memory during
2419 // linking.  It is okay to use this for looking up sections but never use
2420 // this in an unordered container that we want to traverse in a repeatable
2421 // manner.
2422
2423 struct Section_id_hash
2424 {
2425   size_t operator()(const Section_id& loc) const
2426   { return reinterpret_cast<uintptr_t>(loc.first) ^ loc.second; }
2427 };
2428
2429 struct Const_section_id_hash
2430 {
2431   size_t operator()(const Const_section_id& loc) const
2432   { return reinterpret_cast<uintptr_t>(loc.first) ^ loc.second; }
2433 };
2434
2435 // Return whether INPUT_FILE contains an ELF object start at file
2436 // offset OFFSET.  This sets *START to point to a view of the start of
2437 // the file.  It sets *READ_SIZE to the number of bytes in the view.
2438
2439 extern bool
2440 is_elf_object(Input_file* input_file, off_t offset,
2441               const unsigned char** start, int* read_size);
2442
2443 // Return an Object appropriate for the input file.  P is BYTES long,
2444 // and holds the ELF header.  If PUNCONFIGURED is not NULL, then if
2445 // this sees an object the linker is not configured to support, it
2446 // sets *PUNCONFIGURED to true and returns NULL without giving an
2447 // error message.
2448
2449 extern Object*
2450 make_elf_object(const std::string& name, Input_file*,
2451                 off_t offset, const unsigned char* p,
2452                 section_offset_type bytes, bool* punconfigured);
2453
2454 } // end namespace gold
2455
2456 #endif // !defined(GOLD_OBJECT_H)