* gold.h: Include <cstring> and <stdint.h>.
[external/binutils.git] / gold / object.cc
1 // object.cc -- support for an object file for linking in gold
2
3 // Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4 // Written by Ian Lance Taylor <iant@google.com>.
5
6 // This file is part of gold.
7
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 3 of the License, or
11 // (at your option) any later version.
12
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 // GNU General Public License for more details.
17
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 // MA 02110-1301, USA.
22
23 #include "gold.h"
24
25 #include <cerrno>
26 #include <cstring>
27 #include <cstdarg>
28 #include "demangle.h"
29 #include "libiberty.h"
30
31 #include "gc.h"
32 #include "target-select.h"
33 #include "dwarf_reader.h"
34 #include "layout.h"
35 #include "output.h"
36 #include "symtab.h"
37 #include "cref.h"
38 #include "reloc.h"
39 #include "object.h"
40 #include "dynobj.h"
41 #include "plugin.h"
42
43 namespace gold
44 {
45
46 // Class Xindex.
47
48 // Initialize the symtab_xindex_ array.  Find the SHT_SYMTAB_SHNDX
49 // section and read it in.  SYMTAB_SHNDX is the index of the symbol
50 // table we care about.
51
52 template<int size, bool big_endian>
53 void
54 Xindex::initialize_symtab_xindex(Object* object, unsigned int symtab_shndx)
55 {
56   if (!this->symtab_xindex_.empty())
57     return;
58
59   gold_assert(symtab_shndx != 0);
60
61   // Look through the sections in reverse order, on the theory that it
62   // is more likely to be near the end than the beginning.
63   unsigned int i = object->shnum();
64   while (i > 0)
65     {
66       --i;
67       if (object->section_type(i) == elfcpp::SHT_SYMTAB_SHNDX
68           && this->adjust_shndx(object->section_link(i)) == symtab_shndx)
69         {
70           this->read_symtab_xindex<size, big_endian>(object, i, NULL);
71           return;
72         }
73     }
74
75   object->error(_("missing SHT_SYMTAB_SHNDX section"));
76 }
77
78 // Read in the symtab_xindex_ array, given the section index of the
79 // SHT_SYMTAB_SHNDX section.  If PSHDRS is not NULL, it points at the
80 // section headers.
81
82 template<int size, bool big_endian>
83 void
84 Xindex::read_symtab_xindex(Object* object, unsigned int xindex_shndx,
85                            const unsigned char* pshdrs)
86 {
87   section_size_type bytecount;
88   const unsigned char* contents;
89   if (pshdrs == NULL)
90     contents = object->section_contents(xindex_shndx, &bytecount, false);
91   else
92     {
93       const unsigned char* p = (pshdrs
94                                 + (xindex_shndx
95                                    * elfcpp::Elf_sizes<size>::shdr_size));
96       typename elfcpp::Shdr<size, big_endian> shdr(p);
97       bytecount = convert_to_section_size_type(shdr.get_sh_size());
98       contents = object->get_view(shdr.get_sh_offset(), bytecount, true, false);
99     }
100
101   gold_assert(this->symtab_xindex_.empty());
102   this->symtab_xindex_.reserve(bytecount / 4);
103   for (section_size_type i = 0; i < bytecount; i += 4)
104     {
105       unsigned int shndx = elfcpp::Swap<32, big_endian>::readval(contents + i);
106       // We preadjust the section indexes we save.
107       this->symtab_xindex_.push_back(this->adjust_shndx(shndx));
108     }
109 }
110
111 // Symbol symndx has a section of SHN_XINDEX; return the real section
112 // index.
113
114 unsigned int
115 Xindex::sym_xindex_to_shndx(Object* object, unsigned int symndx)
116 {
117   if (symndx >= this->symtab_xindex_.size())
118     {
119       object->error(_("symbol %u out of range for SHT_SYMTAB_SHNDX section"),
120                     symndx);
121       return elfcpp::SHN_UNDEF;
122     }
123   unsigned int shndx = this->symtab_xindex_[symndx];
124   if (shndx < elfcpp::SHN_LORESERVE || shndx >= object->shnum())
125     {
126       object->error(_("extended index for symbol %u out of range: %u"),
127                     symndx, shndx);
128       return elfcpp::SHN_UNDEF;
129     }
130   return shndx;
131 }
132
133 // Class Object.
134
135 // Set the target based on fields in the ELF file header.
136
137 void
138 Object::set_target(int machine, int size, bool big_endian, int osabi,
139                    int abiversion)
140 {
141   Target* target = select_target(machine, size, big_endian, osabi, abiversion);
142   if (target == NULL)
143     gold_fatal(_("%s: unsupported ELF machine number %d"),
144                this->name().c_str(), machine);
145   this->target_ = target;
146 }
147
148 // Report an error for this object file.  This is used by the
149 // elfcpp::Elf_file interface, and also called by the Object code
150 // itself.
151
152 void
153 Object::error(const char* format, ...) const
154 {
155   va_list args;
156   va_start(args, format);
157   char* buf = NULL;
158   if (vasprintf(&buf, format, args) < 0)
159     gold_nomem();
160   va_end(args);
161   gold_error(_("%s: %s"), this->name().c_str(), buf);
162   free(buf);
163 }
164
165 // Return a view of the contents of a section.
166
167 const unsigned char*
168 Object::section_contents(unsigned int shndx, section_size_type* plen,
169                          bool cache)
170 {
171   Location loc(this->do_section_contents(shndx));
172   *plen = convert_to_section_size_type(loc.data_size);
173   return this->get_view(loc.file_offset, *plen, true, cache);
174 }
175
176 // Read the section data into SD.  This is code common to Sized_relobj
177 // and Sized_dynobj, so we put it into Object.
178
179 template<int size, bool big_endian>
180 void
181 Object::read_section_data(elfcpp::Elf_file<size, big_endian, Object>* elf_file,
182                           Read_symbols_data* sd)
183 {
184   const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
185
186   // Read the section headers.
187   const off_t shoff = elf_file->shoff();
188   const unsigned int shnum = this->shnum();
189   sd->section_headers = this->get_lasting_view(shoff, shnum * shdr_size,
190                                                true, true);
191
192   // Read the section names.
193   const unsigned char* pshdrs = sd->section_headers->data();
194   const unsigned char* pshdrnames = pshdrs + elf_file->shstrndx() * shdr_size;
195   typename elfcpp::Shdr<size, big_endian> shdrnames(pshdrnames);
196
197   if (shdrnames.get_sh_type() != elfcpp::SHT_STRTAB)
198     this->error(_("section name section has wrong type: %u"),
199                 static_cast<unsigned int>(shdrnames.get_sh_type()));
200
201   sd->section_names_size =
202     convert_to_section_size_type(shdrnames.get_sh_size());
203   sd->section_names = this->get_lasting_view(shdrnames.get_sh_offset(),
204                                              sd->section_names_size, false,
205                                              false);
206 }
207
208 // If NAME is the name of a special .gnu.warning section, arrange for
209 // the warning to be issued.  SHNDX is the section index.  Return
210 // whether it is a warning section.
211
212 bool
213 Object::handle_gnu_warning_section(const char* name, unsigned int shndx,
214                                    Symbol_table* symtab)
215 {
216   const char warn_prefix[] = ".gnu.warning.";
217   const int warn_prefix_len = sizeof warn_prefix - 1;
218   if (strncmp(name, warn_prefix, warn_prefix_len) == 0)
219     {
220       // Read the section contents to get the warning text.  It would
221       // be nicer if we only did this if we have to actually issue a
222       // warning.  Unfortunately, warnings are issued as we relocate
223       // sections.  That means that we can not lock the object then,
224       // as we might try to issue the same warning multiple times
225       // simultaneously.
226       section_size_type len;
227       const unsigned char* contents = this->section_contents(shndx, &len,
228                                                              false);
229       std::string warning(reinterpret_cast<const char*>(contents), len);
230       symtab->add_warning(name + warn_prefix_len, this, warning);
231       return true;
232     }
233   return false;
234 }
235
236 // Class Relobj
237
238 // To copy the symbols data read from the file to a local data structure.
239 // This function is called from do_layout only while doing garbage 
240 // collection.
241
242 void
243 Relobj::copy_symbols_data(Symbols_data* gc_sd, Read_symbols_data* sd, 
244                           unsigned int section_header_size)
245 {
246   gc_sd->section_headers_data = 
247          new unsigned char[(section_header_size)];
248   memcpy(gc_sd->section_headers_data, sd->section_headers->data(),
249          section_header_size);
250   gc_sd->section_names_data = 
251          new unsigned char[sd->section_names_size];
252   memcpy(gc_sd->section_names_data, sd->section_names->data(),
253          sd->section_names_size);
254   gc_sd->section_names_size = sd->section_names_size;
255   if (sd->symbols != NULL)
256     {
257       gc_sd->symbols_data = 
258              new unsigned char[sd->symbols_size];
259       memcpy(gc_sd->symbols_data, sd->symbols->data(),
260             sd->symbols_size);
261     }
262   else
263     {
264       gc_sd->symbols_data = NULL;
265     }
266   gc_sd->symbols_size = sd->symbols_size;
267   gc_sd->external_symbols_offset = sd->external_symbols_offset;
268   if (sd->symbol_names != NULL)
269     {
270       gc_sd->symbol_names_data =
271              new unsigned char[sd->symbol_names_size];
272       memcpy(gc_sd->symbol_names_data, sd->symbol_names->data(),
273             sd->symbol_names_size);
274     }
275   else
276     {
277       gc_sd->symbol_names_data = NULL;
278     }
279   gc_sd->symbol_names_size = sd->symbol_names_size;
280 }
281
282 // This function determines if a particular section name must be included
283 // in the link.  This is used during garbage collection to determine the
284 // roots of the worklist.
285
286 bool
287 Relobj::is_section_name_included(const char* name)
288 {
289   if (is_prefix_of(".ctors", name) 
290       || is_prefix_of(".dtors", name) 
291       || is_prefix_of(".note", name) 
292       || is_prefix_of(".init", name) 
293       || is_prefix_of(".fini", name) 
294       || is_prefix_of(".gcc_except_table", name) 
295       || is_prefix_of(".jcr", name) 
296       || is_prefix_of(".preinit_array", name) 
297       || (is_prefix_of(".text", name) 
298           && strstr(name, "personality")) 
299       || (is_prefix_of(".data", name) 
300           &&  strstr(name, "personality")) 
301       || (is_prefix_of(".gnu.linkonce.d", name) && 
302             strstr(name, "personality")))
303     {
304       return true; 
305     }
306   return false;
307 }
308
309 // Class Sized_relobj.
310
311 template<int size, bool big_endian>
312 Sized_relobj<size, big_endian>::Sized_relobj(
313     const std::string& name,
314     Input_file* input_file,
315     off_t offset,
316     const elfcpp::Ehdr<size, big_endian>& ehdr)
317   : Relobj(name, input_file, offset),
318     elf_file_(this, ehdr),
319     symtab_shndx_(-1U),
320     local_symbol_count_(0),
321     output_local_symbol_count_(0),
322     output_local_dynsym_count_(0),
323     symbols_(),
324     defined_count_(0),
325     local_symbol_offset_(0),
326     local_dynsym_offset_(0),
327     local_values_(),
328     local_got_offsets_(),
329     kept_comdat_sections_(),
330     comdat_groups_(),
331     has_eh_frame_(false)
332 {
333 }
334
335 template<int size, bool big_endian>
336 Sized_relobj<size, big_endian>::~Sized_relobj()
337 {
338 }
339
340 // Set up an object file based on the file header.  This sets up the
341 // target and reads the section information.
342
343 template<int size, bool big_endian>
344 void
345 Sized_relobj<size, big_endian>::setup(
346     const elfcpp::Ehdr<size, big_endian>& ehdr)
347 {
348   this->set_target(ehdr.get_e_machine(), size, big_endian,
349                    ehdr.get_e_ident()[elfcpp::EI_OSABI],
350                    ehdr.get_e_ident()[elfcpp::EI_ABIVERSION]);
351
352   const unsigned int shnum = this->elf_file_.shnum();
353   this->set_shnum(shnum);
354 }
355
356 // Find the SHT_SYMTAB section, given the section headers.  The ELF
357 // standard says that maybe in the future there can be more than one
358 // SHT_SYMTAB section.  Until somebody figures out how that could
359 // work, we assume there is only one.
360
361 template<int size, bool big_endian>
362 void
363 Sized_relobj<size, big_endian>::find_symtab(const unsigned char* pshdrs)
364 {
365   const unsigned int shnum = this->shnum();
366   this->symtab_shndx_ = 0;
367   if (shnum > 0)
368     {
369       // Look through the sections in reverse order, since gas tends
370       // to put the symbol table at the end.
371       const unsigned char* p = pshdrs + shnum * This::shdr_size;
372       unsigned int i = shnum;
373       unsigned int xindex_shndx = 0;
374       unsigned int xindex_link = 0;
375       while (i > 0)
376         {
377           --i;
378           p -= This::shdr_size;
379           typename This::Shdr shdr(p);
380           if (shdr.get_sh_type() == elfcpp::SHT_SYMTAB)
381             {
382               this->symtab_shndx_ = i;
383               if (xindex_shndx > 0 && xindex_link == i)
384                 {
385                   Xindex* xindex =
386                     new Xindex(this->elf_file_.large_shndx_offset());
387                   xindex->read_symtab_xindex<size, big_endian>(this,
388                                                                xindex_shndx,
389                                                                pshdrs);
390                   this->set_xindex(xindex);
391                 }
392               break;
393             }
394
395           // Try to pick up the SHT_SYMTAB_SHNDX section, if there is
396           // one.  This will work if it follows the SHT_SYMTAB
397           // section.
398           if (shdr.get_sh_type() == elfcpp::SHT_SYMTAB_SHNDX)
399             {
400               xindex_shndx = i;
401               xindex_link = this->adjust_shndx(shdr.get_sh_link());
402             }
403         }
404     }
405 }
406
407 // Return the Xindex structure to use for object with lots of
408 // sections.
409
410 template<int size, bool big_endian>
411 Xindex*
412 Sized_relobj<size, big_endian>::do_initialize_xindex()
413 {
414   gold_assert(this->symtab_shndx_ != -1U);
415   Xindex* xindex = new Xindex(this->elf_file_.large_shndx_offset());
416   xindex->initialize_symtab_xindex<size, big_endian>(this, this->symtab_shndx_);
417   return xindex;
418 }
419
420 // Return whether SHDR has the right type and flags to be a GNU
421 // .eh_frame section.
422
423 template<int size, bool big_endian>
424 bool
425 Sized_relobj<size, big_endian>::check_eh_frame_flags(
426     const elfcpp::Shdr<size, big_endian>* shdr) const
427 {
428   return (shdr->get_sh_type() == elfcpp::SHT_PROGBITS
429           && (shdr->get_sh_flags() & elfcpp::SHF_ALLOC) != 0);
430 }
431
432 // Return whether there is a GNU .eh_frame section, given the section
433 // headers and the section names.
434
435 template<int size, bool big_endian>
436 bool
437 Sized_relobj<size, big_endian>::find_eh_frame(
438     const unsigned char* pshdrs,
439     const char* names,
440     section_size_type names_size) const
441 {
442   const unsigned int shnum = this->shnum();
443   const unsigned char* p = pshdrs + This::shdr_size;
444   for (unsigned int i = 1; i < shnum; ++i, p += This::shdr_size)
445     {
446       typename This::Shdr shdr(p);
447       if (this->check_eh_frame_flags(&shdr))
448         {
449           if (shdr.get_sh_name() >= names_size)
450             {
451               this->error(_("bad section name offset for section %u: %lu"),
452                           i, static_cast<unsigned long>(shdr.get_sh_name()));
453               continue;
454             }
455
456           const char* name = names + shdr.get_sh_name();
457           if (strcmp(name, ".eh_frame") == 0)
458             return true;
459         }
460     }
461   return false;
462 }
463
464 // Read the sections and symbols from an object file.
465
466 template<int size, bool big_endian>
467 void
468 Sized_relobj<size, big_endian>::do_read_symbols(Read_symbols_data* sd)
469 {
470   this->read_section_data(&this->elf_file_, sd);
471
472   const unsigned char* const pshdrs = sd->section_headers->data();
473
474   this->find_symtab(pshdrs);
475
476   const unsigned char* namesu = sd->section_names->data();
477   const char* names = reinterpret_cast<const char*>(namesu);
478   if (memmem(names, sd->section_names_size, ".eh_frame", 10) != NULL)
479     {
480       if (this->find_eh_frame(pshdrs, names, sd->section_names_size))
481         this->has_eh_frame_ = true;
482     }
483
484   sd->symbols = NULL;
485   sd->symbols_size = 0;
486   sd->external_symbols_offset = 0;
487   sd->symbol_names = NULL;
488   sd->symbol_names_size = 0;
489
490   if (this->symtab_shndx_ == 0)
491     {
492       // No symbol table.  Weird but legal.
493       return;
494     }
495
496   // Get the symbol table section header.
497   typename This::Shdr symtabshdr(pshdrs
498                                  + this->symtab_shndx_ * This::shdr_size);
499   gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
500
501   // If this object has a .eh_frame section, we need all the symbols.
502   // Otherwise we only need the external symbols.  While it would be
503   // simpler to just always read all the symbols, I've seen object
504   // files with well over 2000 local symbols, which for a 64-bit
505   // object file format is over 5 pages that we don't need to read
506   // now.
507
508   const int sym_size = This::sym_size;
509   const unsigned int loccount = symtabshdr.get_sh_info();
510   this->local_symbol_count_ = loccount;
511   this->local_values_.resize(loccount);
512   section_offset_type locsize = loccount * sym_size;
513   off_t dataoff = symtabshdr.get_sh_offset();
514   section_size_type datasize =
515     convert_to_section_size_type(symtabshdr.get_sh_size());
516   off_t extoff = dataoff + locsize;
517   section_size_type extsize = datasize - locsize;
518
519   off_t readoff = this->has_eh_frame_ ? dataoff : extoff;
520   section_size_type readsize = this->has_eh_frame_ ? datasize : extsize;
521
522   if (readsize == 0)
523     {
524       // No external symbols.  Also weird but also legal.
525       return;
526     }
527
528   File_view* fvsymtab = this->get_lasting_view(readoff, readsize, true, false);
529
530   // Read the section header for the symbol names.
531   unsigned int strtab_shndx = this->adjust_shndx(symtabshdr.get_sh_link());
532   if (strtab_shndx >= this->shnum())
533     {
534       this->error(_("invalid symbol table name index: %u"), strtab_shndx);
535       return;
536     }
537   typename This::Shdr strtabshdr(pshdrs + strtab_shndx * This::shdr_size);
538   if (strtabshdr.get_sh_type() != elfcpp::SHT_STRTAB)
539     {
540       this->error(_("symbol table name section has wrong type: %u"),
541                   static_cast<unsigned int>(strtabshdr.get_sh_type()));
542       return;
543     }
544
545   // Read the symbol names.
546   File_view* fvstrtab = this->get_lasting_view(strtabshdr.get_sh_offset(),
547                                                strtabshdr.get_sh_size(),
548                                                false, true);
549
550   sd->symbols = fvsymtab;
551   sd->symbols_size = readsize;
552   sd->external_symbols_offset = this->has_eh_frame_ ? locsize : 0;
553   sd->symbol_names = fvstrtab;
554   sd->symbol_names_size =
555     convert_to_section_size_type(strtabshdr.get_sh_size());
556 }
557
558 // Return the section index of symbol SYM.  Set *VALUE to its value in
559 // the object file.  Set *IS_ORDINARY if this is an ordinary section
560 // index.  not a special cod between SHN_LORESERVE and SHN_HIRESERVE.
561 // Note that for a symbol which is not defined in this object file,
562 // this will set *VALUE to 0 and return SHN_UNDEF; it will not return
563 // the final value of the symbol in the link.
564
565 template<int size, bool big_endian>
566 unsigned int
567 Sized_relobj<size, big_endian>::symbol_section_and_value(unsigned int sym,
568                                                          Address* value,
569                                                          bool* is_ordinary)
570 {
571   section_size_type symbols_size;
572   const unsigned char* symbols = this->section_contents(this->symtab_shndx_,
573                                                         &symbols_size,
574                                                         false);
575
576   const size_t count = symbols_size / This::sym_size;
577   gold_assert(sym < count);
578
579   elfcpp::Sym<size, big_endian> elfsym(symbols + sym * This::sym_size);
580   *value = elfsym.get_st_value();
581
582   return this->adjust_sym_shndx(sym, elfsym.get_st_shndx(), is_ordinary);
583 }
584
585 // Return whether to include a section group in the link.  LAYOUT is
586 // used to keep track of which section groups we have already seen.
587 // INDEX is the index of the section group and SHDR is the section
588 // header.  If we do not want to include this group, we set bits in
589 // OMIT for each section which should be discarded.
590
591 template<int size, bool big_endian>
592 bool
593 Sized_relobj<size, big_endian>::include_section_group(
594     Symbol_table* symtab,
595     Layout* layout,
596     unsigned int index,
597     const char* name,
598     const unsigned char* shdrs,
599     const char* section_names,
600     section_size_type section_names_size,
601     std::vector<bool>* omit)
602 {
603   // Read the section contents.
604   typename This::Shdr shdr(shdrs + index * This::shdr_size);
605   const unsigned char* pcon = this->get_view(shdr.get_sh_offset(),
606                                              shdr.get_sh_size(), true, false);
607   const elfcpp::Elf_Word* pword =
608     reinterpret_cast<const elfcpp::Elf_Word*>(pcon);
609
610   // The first word contains flags.  We only care about COMDAT section
611   // groups.  Other section groups are always included in the link
612   // just like ordinary sections.
613   elfcpp::Elf_Word flags = elfcpp::Swap<32, big_endian>::readval(pword);
614
615   // Look up the group signature, which is the name of a symbol.  This
616   // is a lot of effort to go to to read a string.  Why didn't they
617   // just have the group signature point into the string table, rather
618   // than indirect through a symbol?
619
620   // Get the appropriate symbol table header (this will normally be
621   // the single SHT_SYMTAB section, but in principle it need not be).
622   const unsigned int link = this->adjust_shndx(shdr.get_sh_link());
623   typename This::Shdr symshdr(this, this->elf_file_.section_header(link));
624
625   // Read the symbol table entry.
626   unsigned int symndx = shdr.get_sh_info();
627   if (symndx >= symshdr.get_sh_size() / This::sym_size)
628     {
629       this->error(_("section group %u info %u out of range"),
630                   index, symndx);
631       return false;
632     }
633   off_t symoff = symshdr.get_sh_offset() + symndx * This::sym_size;
634   const unsigned char* psym = this->get_view(symoff, This::sym_size, true,
635                                              false);
636   elfcpp::Sym<size, big_endian> sym(psym);
637
638   // Read the symbol table names.
639   section_size_type symnamelen;
640   const unsigned char* psymnamesu;
641   psymnamesu = this->section_contents(this->adjust_shndx(symshdr.get_sh_link()),
642                                       &symnamelen, true);
643   const char* psymnames = reinterpret_cast<const char*>(psymnamesu);
644
645   // Get the section group signature.
646   if (sym.get_st_name() >= symnamelen)
647     {
648       this->error(_("symbol %u name offset %u out of range"),
649                   symndx, sym.get_st_name());
650       return false;
651     }
652
653   std::string signature(psymnames + sym.get_st_name());
654
655   // It seems that some versions of gas will create a section group
656   // associated with a section symbol, and then fail to give a name to
657   // the section symbol.  In such a case, use the name of the section.
658   if (signature[0] == '\0' && sym.get_st_type() == elfcpp::STT_SECTION)
659     {
660       bool is_ordinary;
661       unsigned int sym_shndx = this->adjust_sym_shndx(symndx,
662                                                       sym.get_st_shndx(),
663                                                       &is_ordinary);
664       if (!is_ordinary || sym_shndx >= this->shnum())
665         {
666           this->error(_("symbol %u invalid section index %u"),
667                       symndx, sym_shndx);
668           return false;
669         }
670       typename This::Shdr member_shdr(shdrs + sym_shndx * This::shdr_size);
671       if (member_shdr.get_sh_name() < section_names_size)
672         signature = section_names + member_shdr.get_sh_name();
673     }
674
675   // Record this section group in the layout, and see whether we've already
676   // seen one with the same signature.
677   bool include_group = ((flags & elfcpp::GRP_COMDAT) == 0
678                         || layout->add_comdat(this, index, signature, true));
679
680   Sized_relobj<size, big_endian>* kept_object = NULL;
681   Comdat_group* kept_group = NULL;
682
683   if (!include_group)
684     {
685       // This group is being discarded.  Find the object and group
686       // that was kept in its place.
687       unsigned int kept_group_index = 0;
688       Relobj* kept_relobj = layout->find_kept_object(signature,
689                                                      &kept_group_index);
690       kept_object = static_cast<Sized_relobj<size, big_endian>*>(kept_relobj);
691       if (kept_object != NULL)
692         kept_group = kept_object->find_comdat_group(kept_group_index);
693     }
694   else if (flags & elfcpp::GRP_COMDAT)
695     {
696       // This group is being kept.  Create the table to map section names
697       // to section indexes and add it to the table of groups.
698       kept_group = new Comdat_group();
699       this->add_comdat_group(index, kept_group);
700     }
701
702   size_t count = shdr.get_sh_size() / sizeof(elfcpp::Elf_Word);
703
704   std::vector<unsigned int> shndxes;
705   bool relocate_group = include_group && parameters->options().relocatable();
706   if (relocate_group)
707     shndxes.reserve(count - 1);
708
709   for (size_t i = 1; i < count; ++i)
710     {
711       elfcpp::Elf_Word secnum =
712         this->adjust_shndx(elfcpp::Swap<32, big_endian>::readval(pword + i));
713
714       if (relocate_group)
715         shndxes.push_back(secnum);
716
717       if (secnum >= this->shnum())
718         {
719           this->error(_("section %u in section group %u out of range"),
720                       secnum, index);
721           continue;
722         }
723
724       // Check for an earlier section number, since we're going to get
725       // it wrong--we may have already decided to include the section.
726       if (secnum < index)
727         this->error(_("invalid section group %u refers to earlier section %u"),
728                     index, secnum);
729
730       // Get the name of the member section.
731       typename This::Shdr member_shdr(shdrs + secnum * This::shdr_size);
732       if (member_shdr.get_sh_name() >= section_names_size)
733         {
734           // This is an error, but it will be diagnosed eventually
735           // in do_layout, so we don't need to do anything here but
736           // ignore it.
737           continue;
738         }
739       std::string mname(section_names + member_shdr.get_sh_name());
740
741       if (!include_group)
742         {
743           (*omit)[secnum] = true;
744           if (kept_group != NULL)
745             {
746               // Find the corresponding kept section, and store that info
747               // in the discarded section table.
748               Comdat_group::const_iterator p = kept_group->find(mname);
749               if (p != kept_group->end())
750                 {
751                   Kept_comdat_section* kept =
752                     new Kept_comdat_section(kept_object, p->second);
753                   this->set_kept_comdat_section(secnum, kept);
754                 }
755             }
756         }
757       else if (flags & elfcpp::GRP_COMDAT)
758         {
759           // Add the section to the kept group table.
760           gold_assert(kept_group != NULL);
761           kept_group->insert(std::make_pair(mname, secnum));
762         }
763     }
764
765   if (relocate_group)
766     layout->layout_group(symtab, this, index, name, signature.c_str(),
767                          shdr, flags, &shndxes);
768
769   return include_group;
770 }
771
772 // Whether to include a linkonce section in the link.  NAME is the
773 // name of the section and SHDR is the section header.
774
775 // Linkonce sections are a GNU extension implemented in the original
776 // GNU linker before section groups were defined.  The semantics are
777 // that we only include one linkonce section with a given name.  The
778 // name of a linkonce section is normally .gnu.linkonce.T.SYMNAME,
779 // where T is the type of section and SYMNAME is the name of a symbol.
780 // In an attempt to make linkonce sections interact well with section
781 // groups, we try to identify SYMNAME and use it like a section group
782 // signature.  We want to block section groups with that signature,
783 // but not other linkonce sections with that signature.  We also use
784 // the full name of the linkonce section as a normal section group
785 // signature.
786
787 template<int size, bool big_endian>
788 bool
789 Sized_relobj<size, big_endian>::include_linkonce_section(
790     Layout* layout,
791     unsigned int index,
792     const char* name,
793     const elfcpp::Shdr<size, big_endian>&)
794 {
795   // In general the symbol name we want will be the string following
796   // the last '.'.  However, we have to handle the case of
797   // .gnu.linkonce.t.__i686.get_pc_thunk.bx, which was generated by
798   // some versions of gcc.  So we use a heuristic: if the name starts
799   // with ".gnu.linkonce.t.", we use everything after that.  Otherwise
800   // we look for the last '.'.  We can't always simply skip
801   // ".gnu.linkonce.X", because we have to deal with cases like
802   // ".gnu.linkonce.d.rel.ro.local".
803   const char* const linkonce_t = ".gnu.linkonce.t.";
804   const char* symname;
805   if (strncmp(name, linkonce_t, strlen(linkonce_t)) == 0)
806     symname = name + strlen(linkonce_t);
807   else
808     symname = strrchr(name, '.') + 1;
809   std::string sig1(symname);
810   std::string sig2(name);
811   bool include1 = layout->add_comdat(this, index, sig1, false);
812   bool include2 = layout->add_comdat(this, index, sig2, true);
813
814   if (!include2)
815     {
816       // The section is being discarded on the basis of its section
817       // name (i.e., the kept section was also a linkonce section).
818       // In this case, the section index stored with the layout object
819       // is the linkonce section that was kept.
820       unsigned int kept_group_index = 0;
821       Relobj* kept_relobj = layout->find_kept_object(sig2, &kept_group_index);
822       if (kept_relobj != NULL)
823         {
824           Sized_relobj<size, big_endian>* kept_object
825               = static_cast<Sized_relobj<size, big_endian>*>(kept_relobj);
826           Kept_comdat_section* kept =
827             new Kept_comdat_section(kept_object, kept_group_index);
828           this->set_kept_comdat_section(index, kept);
829         }
830     }
831   else if (!include1)
832     {
833       // The section is being discarded on the basis of its symbol
834       // name.  This means that the corresponding kept section was
835       // part of a comdat group, and it will be difficult to identify
836       // the specific section within that group that corresponds to
837       // this linkonce section.  We'll handle the simple case where
838       // the group has only one member section.  Otherwise, it's not
839       // worth the effort.
840       unsigned int kept_group_index = 0;
841       Relobj* kept_relobj = layout->find_kept_object(sig1, &kept_group_index);
842       if (kept_relobj != NULL)
843         {
844           Sized_relobj<size, big_endian>* kept_object =
845               static_cast<Sized_relobj<size, big_endian>*>(kept_relobj);
846           Comdat_group* kept_group =
847             kept_object->find_comdat_group(kept_group_index);
848           if (kept_group != NULL && kept_group->size() == 1)
849             {
850               Comdat_group::const_iterator p = kept_group->begin();
851               gold_assert(p != kept_group->end());
852               Kept_comdat_section* kept =
853                 new Kept_comdat_section(kept_object, p->second);
854               this->set_kept_comdat_section(index, kept);
855             }
856         }
857     }
858
859   return include1 && include2;
860 }
861
862 // Layout an input section.
863
864 template<int size, bool big_endian>
865 inline void
866 Sized_relobj<size, big_endian>::layout_section(Layout* layout,
867                                                unsigned int shndx,
868                                                const char* name,
869                                                typename This::Shdr& shdr,
870                                                unsigned int reloc_shndx,
871                                                unsigned int reloc_type)
872 {
873   off_t offset;
874   Output_section* os = layout->layout(this, shndx, name, shdr,
875                                           reloc_shndx, reloc_type, &offset);
876
877   this->output_sections()[shndx] = os;
878   if (offset == -1)
879     this->section_offsets_[shndx] = invalid_address;
880   else
881     this->section_offsets_[shndx] = convert_types<Address, off_t>(offset);
882
883   // If this section requires special handling, and if there are
884   // relocs that apply to it, then we must do the special handling
885   // before we apply the relocs.
886   if (offset == -1 && reloc_shndx != 0)
887     this->set_relocs_must_follow_section_writes();
888 }
889
890 // Lay out the input sections.  We walk through the sections and check
891 // whether they should be included in the link.  If they should, we
892 // pass them to the Layout object, which will return an output section
893 // and an offset.  
894 // During garbage collection (gc-sections), this function is called
895 // twice.  When it is called the first time, it is for setting up some
896 // sections as roots to a work-list and to do comdat processing.  Actual
897 // layout happens the second time around after all the relevant sections
898 // have been determined.  The first time, is_worklist_ready is false.  
899 // It is then set to true after the worklist is processed and the relevant 
900 // sections are determined.  Then, this function is called again to 
901 // layout the sections.
902
903 template<int size, bool big_endian>
904 void
905 Sized_relobj<size, big_endian>::do_layout(Symbol_table* symtab,
906                                           Layout* layout,
907                                           Read_symbols_data* sd)
908 {
909   const unsigned int shnum = this->shnum();
910   bool is_gc_pass_one = (parameters->options().gc_sections() 
911                          && !symtab->gc()->is_worklist_ready());
912   bool is_gc_pass_two = (parameters->options().gc_sections() 
913                          && symtab->gc()->is_worklist_ready());
914   if (shnum == 0)
915     return;
916   Symbols_data* gc_sd = NULL;
917   if (is_gc_pass_one)
918     {
919       // During garbage collection save the symbols data to use it when 
920       // re-entering this function.   
921       gc_sd = new Symbols_data;
922       this->copy_symbols_data(gc_sd, sd, This::shdr_size * shnum);
923       this->set_symbols_data(gc_sd);
924     }
925   else if (is_gc_pass_two)
926     {
927       gc_sd = this->get_symbols_data();
928     }
929
930   const unsigned char* section_headers_data = NULL;
931   section_size_type section_names_size;
932   const unsigned char* symbols_data = NULL;
933   section_size_type symbols_size;
934   section_offset_type external_symbols_offset;
935   const unsigned char* symbol_names_data = NULL;
936   section_size_type symbol_names_size;
937  
938   if (parameters->options().gc_sections())
939     {
940       section_headers_data = gc_sd->section_headers_data;
941       section_names_size = gc_sd->section_names_size;
942       symbols_data = gc_sd->symbols_data;
943       symbols_size = gc_sd->symbols_size;
944       external_symbols_offset = gc_sd->external_symbols_offset;
945       symbol_names_data = gc_sd->symbol_names_data;
946       symbol_names_size = gc_sd->symbol_names_size;
947     }
948   else
949     {
950       section_headers_data = sd->section_headers->data();
951       section_names_size = sd->section_names_size;
952       if (sd->symbols != NULL)
953         symbols_data = sd->symbols->data();
954       symbols_size = sd->symbols_size;
955       external_symbols_offset = sd->external_symbols_offset;
956       if (sd->symbol_names != NULL)
957         symbol_names_data = sd->symbol_names->data();
958       symbol_names_size = sd->symbol_names_size;
959     }
960
961   // Get the section headers.
962   const unsigned char* shdrs = section_headers_data;
963   const unsigned char* pshdrs;
964
965   // Get the section names.
966   const unsigned char* pnamesu = parameters->options().gc_sections() ?
967                                  gc_sd->section_names_data :
968                                  sd->section_names->data();
969   const char* pnames = reinterpret_cast<const char*>(pnamesu);
970
971   // If any input files have been claimed by plugins, we need to defer
972   // actual layout until the replacement files have arrived.
973   const bool should_defer_layout =
974       (parameters->options().has_plugins()
975        && parameters->options().plugins()->should_defer_layout());
976   unsigned int num_sections_to_defer = 0;
977
978   // For each section, record the index of the reloc section if any.
979   // Use 0 to mean that there is no reloc section, -1U to mean that
980   // there is more than one.
981   std::vector<unsigned int> reloc_shndx(shnum, 0);
982   std::vector<unsigned int> reloc_type(shnum, elfcpp::SHT_NULL);
983   // Skip the first, dummy, section.
984   pshdrs = shdrs + This::shdr_size;
985   for (unsigned int i = 1; i < shnum; ++i, pshdrs += This::shdr_size)
986     {
987       typename This::Shdr shdr(pshdrs);
988
989       // Count the number of sections whose layout will be deferred.
990       if (should_defer_layout && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC))
991         ++num_sections_to_defer;
992
993       unsigned int sh_type = shdr.get_sh_type();
994       if (sh_type == elfcpp::SHT_REL || sh_type == elfcpp::SHT_RELA)
995         {
996           unsigned int target_shndx = this->adjust_shndx(shdr.get_sh_info());
997           if (target_shndx == 0 || target_shndx >= shnum)
998             {
999               this->error(_("relocation section %u has bad info %u"),
1000                           i, target_shndx);
1001               continue;
1002             }
1003
1004           if (reloc_shndx[target_shndx] != 0)
1005             reloc_shndx[target_shndx] = -1U;
1006           else
1007             {
1008               reloc_shndx[target_shndx] = i;
1009               reloc_type[target_shndx] = sh_type;
1010             }
1011         }
1012     }
1013
1014   Output_sections& out_sections(this->output_sections());
1015   std::vector<Address>& out_section_offsets(this->section_offsets_);
1016
1017   if (!is_gc_pass_two)
1018     {
1019       out_sections.resize(shnum);
1020       out_section_offsets.resize(shnum);
1021     }
1022
1023   // If we are only linking for symbols, then there is nothing else to
1024   // do here.
1025   if (this->input_file()->just_symbols())
1026     {
1027       if (!is_gc_pass_two)
1028         {
1029           delete sd->section_headers;
1030           sd->section_headers = NULL;
1031           delete sd->section_names;
1032           sd->section_names = NULL;
1033         }
1034       return;
1035     }
1036
1037   if (num_sections_to_defer > 0)
1038     {
1039       parameters->options().plugins()->add_deferred_layout_object(this);
1040       this->deferred_layout_.reserve(num_sections_to_defer);
1041     }
1042
1043   // Whether we've seen a .note.GNU-stack section.
1044   bool seen_gnu_stack = false;
1045   // The flags of a .note.GNU-stack section.
1046   uint64_t gnu_stack_flags = 0;
1047
1048   // Keep track of which sections to omit.
1049   std::vector<bool> omit(shnum, false);
1050
1051   // Keep track of reloc sections when emitting relocations.
1052   const bool relocatable = parameters->options().relocatable();
1053   const bool emit_relocs = (relocatable
1054                             || parameters->options().emit_relocs());
1055   std::vector<unsigned int> reloc_sections;
1056
1057   // Keep track of .eh_frame sections.
1058   std::vector<unsigned int> eh_frame_sections;
1059
1060   // Skip the first, dummy, section.
1061   pshdrs = shdrs + This::shdr_size;
1062   for (unsigned int i = 1; i < shnum; ++i, pshdrs += This::shdr_size)
1063     {
1064       typename This::Shdr shdr(pshdrs);
1065
1066       if (shdr.get_sh_name() >= section_names_size)
1067         {
1068           this->error(_("bad section name offset for section %u: %lu"),
1069                       i, static_cast<unsigned long>(shdr.get_sh_name()));
1070           return;
1071         }
1072
1073       const char* name = pnames + shdr.get_sh_name();
1074
1075       if (!is_gc_pass_two)
1076         { 
1077           if (this->handle_gnu_warning_section(name, i, symtab))
1078             { 
1079               if (!relocatable)
1080                 omit[i] = true;
1081             }
1082
1083           // The .note.GNU-stack section is special.  It gives the
1084           // protection flags that this object file requires for the stack
1085           // in memory.
1086           if (strcmp(name, ".note.GNU-stack") == 0)
1087             {
1088               seen_gnu_stack = true;
1089               gnu_stack_flags |= shdr.get_sh_flags();
1090               omit[i] = true;
1091             }
1092
1093           bool discard = omit[i];
1094           if (!discard)
1095             {
1096               if (shdr.get_sh_type() == elfcpp::SHT_GROUP)
1097                 {
1098                   if (!this->include_section_group(symtab, layout, i, name, 
1099                                                    shdrs, pnames, 
1100                                                    section_names_size,
1101                                                    &omit))
1102                     discard = true;
1103                 }
1104               else if ((shdr.get_sh_flags() & elfcpp::SHF_GROUP) == 0
1105                        && Layout::is_linkonce(name))
1106                 {
1107                   if (!this->include_linkonce_section(layout, i, name, shdr))
1108                     discard = true;
1109                 }
1110             }
1111
1112           if (discard)
1113             {
1114               // Do not include this section in the link.
1115               out_sections[i] = NULL;
1116               out_section_offsets[i] = invalid_address;
1117               continue;
1118             }
1119         }
1120  
1121       if (is_gc_pass_one)
1122         {
1123           if (is_section_name_included(name)
1124               || shdr.get_sh_type() == elfcpp::SHT_INIT_ARRAY 
1125               || shdr.get_sh_type() == elfcpp::SHT_FINI_ARRAY)
1126             {
1127               symtab->gc()->worklist().push(Section_id(this, i)); 
1128             }
1129         }
1130
1131       // When doing a relocatable link we are going to copy input
1132       // reloc sections into the output.  We only want to copy the
1133       // ones associated with sections which are not being discarded.
1134       // However, we don't know that yet for all sections.  So save
1135       // reloc sections and process them later. Garbage collection is
1136       // not triggered when relocatable code is desired.
1137       if (emit_relocs
1138           && (shdr.get_sh_type() == elfcpp::SHT_REL
1139               || shdr.get_sh_type() == elfcpp::SHT_RELA))
1140         {
1141           reloc_sections.push_back(i);
1142           continue;
1143         }
1144
1145       if (relocatable && shdr.get_sh_type() == elfcpp::SHT_GROUP)
1146         continue;
1147
1148       // The .eh_frame section is special.  It holds exception frame
1149       // information that we need to read in order to generate the
1150       // exception frame header.  We process these after all the other
1151       // sections so that the exception frame reader can reliably
1152       // determine which sections are being discarded, and discard the
1153       // corresponding information.
1154       if (!relocatable
1155           && strcmp(name, ".eh_frame") == 0
1156           && this->check_eh_frame_flags(&shdr))
1157         {
1158           if (is_gc_pass_one)
1159             {
1160               out_sections[i] = reinterpret_cast<Output_section*>(1);
1161               out_section_offsets[i] = invalid_address;
1162             }
1163           else
1164             eh_frame_sections.push_back(i);
1165           continue;
1166         }
1167
1168       if (is_gc_pass_two)
1169         {
1170           // This is executed during the second pass of garbage 
1171           // collection. do_layout has been called before and some 
1172           // sections have been already discarded. Simply ignore 
1173           // such sections this time around.
1174           if (out_sections[i] == NULL)
1175             {
1176               gold_assert(out_section_offsets[i] == invalid_address);
1177               continue; 
1178             }
1179           if ((shdr.get_sh_flags() & elfcpp::SHF_ALLOC) != 0)
1180             if (symtab->gc()->referenced_list().find(Section_id(this,i)) 
1181                 == symtab->gc()->referenced_list().end())
1182               {
1183                 if (parameters->options().print_gc_sections())
1184                   gold_info(_("%s: Removing unused section from '%s'" 
1185                               " in file '%s"),
1186                             program_name, this->section_name(i).c_str(), 
1187                             this->name().c_str());
1188                 out_sections[i] = NULL;
1189                 out_section_offsets[i] = invalid_address;
1190                 continue;
1191               }
1192         }
1193       // Defer layout here if input files are claimed by plugins.  When gc
1194       // is turned on this function is called twice.  For the second call
1195       // should_defer_layout should be false.
1196       if (should_defer_layout && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC))
1197         {
1198           gold_assert(!is_gc_pass_two);
1199           this->deferred_layout_.push_back(Deferred_layout(i, name, 
1200                                                            pshdrs,
1201                                                            reloc_shndx[i],
1202                                                            reloc_type[i]));
1203           // Put dummy values here; real values will be supplied by
1204           // do_layout_deferred_sections.
1205           out_sections[i] = reinterpret_cast<Output_section*>(2);
1206           out_section_offsets[i] = invalid_address;
1207           continue;
1208               }
1209       // During gc_pass_two if a section that was previously deferred is
1210       // found, do not layout the section as layout_deferred_sections will
1211       // do it later from gold.cc.
1212       if (is_gc_pass_two 
1213           && (out_sections[i] == reinterpret_cast<Output_section*>(2)))
1214         continue;
1215
1216       if (is_gc_pass_one)
1217         {
1218           // This is during garbage collection. The out_sections are 
1219           // assigned in the second call to this function. 
1220           out_sections[i] = reinterpret_cast<Output_section*>(1);
1221           out_section_offsets[i] = invalid_address;
1222         }
1223       else
1224         {
1225           // When garbage collection is switched on the actual layout
1226           // only happens in the second call.
1227           this->layout_section(layout, i, name, shdr, reloc_shndx[i],
1228                                reloc_type[i]);
1229         }
1230     }
1231
1232   if (!is_gc_pass_one)
1233     layout->layout_gnu_stack(seen_gnu_stack, gnu_stack_flags);
1234
1235   // When doing a relocatable link handle the reloc sections at the
1236   // end.  Garbage collection is not turned on for relocatable code. 
1237   if (emit_relocs)
1238     this->size_relocatable_relocs();
1239   gold_assert(!parameters->options().gc_sections() || reloc_sections.empty());
1240   for (std::vector<unsigned int>::const_iterator p = reloc_sections.begin();
1241        p != reloc_sections.end();
1242        ++p)
1243     {
1244       unsigned int i = *p;
1245       const unsigned char* pshdr;
1246       pshdr = section_headers_data + i * This::shdr_size;
1247       typename This::Shdr shdr(pshdr);
1248
1249       unsigned int data_shndx = this->adjust_shndx(shdr.get_sh_info());
1250       if (data_shndx >= shnum)
1251         {
1252           // We already warned about this above.
1253           continue;
1254         }
1255
1256       Output_section* data_section = out_sections[data_shndx];
1257       if (data_section == NULL)
1258         {
1259           out_sections[i] = NULL;
1260           out_section_offsets[i] = invalid_address;
1261           continue;
1262         }
1263
1264       Relocatable_relocs* rr = new Relocatable_relocs();
1265       this->set_relocatable_relocs(i, rr);
1266
1267       Output_section* os = layout->layout_reloc(this, i, shdr, data_section,
1268                                                 rr);
1269       out_sections[i] = os;
1270       out_section_offsets[i] = invalid_address;
1271     }
1272
1273   // Handle the .eh_frame sections at the end.
1274   gold_assert(!is_gc_pass_one || eh_frame_sections.empty());
1275   for (std::vector<unsigned int>::const_iterator p = eh_frame_sections.begin();
1276        p != eh_frame_sections.end();
1277        ++p)
1278     {
1279       gold_assert(this->has_eh_frame_);
1280       gold_assert(external_symbols_offset != 0);
1281
1282       unsigned int i = *p;
1283       const unsigned char *pshdr;
1284       pshdr = section_headers_data + i * This::shdr_size;
1285       typename This::Shdr shdr(pshdr);
1286
1287       off_t offset;
1288       Output_section* os = layout->layout_eh_frame(this,
1289                                                    symbols_data,
1290                                                    symbols_size,
1291                                                    symbol_names_data,
1292                                                    symbol_names_size,
1293                                                    i, shdr,
1294                                                    reloc_shndx[i],
1295                                                    reloc_type[i],
1296                                                    &offset);
1297       out_sections[i] = os;
1298       if (offset == -1)
1299         out_section_offsets[i] = invalid_address;
1300       else
1301         out_section_offsets[i] = convert_types<Address, off_t>(offset);
1302
1303       // If this section requires special handling, and if there are
1304       // relocs that apply to it, then we must do the special handling
1305       // before we apply the relocs.
1306       if (offset == -1 && reloc_shndx[i] != 0)
1307         this->set_relocs_must_follow_section_writes();
1308     }
1309
1310   if (is_gc_pass_two)
1311     {
1312       delete[] gc_sd->section_headers_data;
1313       delete[] gc_sd->section_names_data;
1314       delete[] gc_sd->symbols_data;
1315       delete[] gc_sd->symbol_names_data;
1316     }
1317   else
1318     {
1319       delete sd->section_headers;
1320       sd->section_headers = NULL;
1321       delete sd->section_names;
1322       sd->section_names = NULL;
1323     }
1324 }
1325
1326 // Layout sections whose layout was deferred while waiting for
1327 // input files from a plugin.
1328
1329 template<int size, bool big_endian>
1330 void
1331 Sized_relobj<size, big_endian>::do_layout_deferred_sections(Layout* layout)
1332 {
1333   typename std::vector<Deferred_layout>::iterator deferred;
1334
1335   for (deferred = this->deferred_layout_.begin();
1336        deferred != this->deferred_layout_.end();
1337        ++deferred)
1338     {
1339       typename This::Shdr shdr(deferred->shdr_data_);
1340       this->layout_section(layout, deferred->shndx_, deferred->name_.c_str(),
1341                            shdr, deferred->reloc_shndx_, deferred->reloc_type_);
1342     }
1343
1344   this->deferred_layout_.clear();
1345 }
1346
1347 // Add the symbols to the symbol table.
1348
1349 template<int size, bool big_endian>
1350 void
1351 Sized_relobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
1352                                                Read_symbols_data* sd)
1353 {
1354   if (sd->symbols == NULL)
1355     {
1356       gold_assert(sd->symbol_names == NULL);
1357       return;
1358     }
1359
1360   const int sym_size = This::sym_size;
1361   size_t symcount = ((sd->symbols_size - sd->external_symbols_offset)
1362                      / sym_size);
1363   if (symcount * sym_size != sd->symbols_size - sd->external_symbols_offset)
1364     {
1365       this->error(_("size of symbols is not multiple of symbol size"));
1366       return;
1367     }
1368
1369   this->symbols_.resize(symcount);
1370
1371   const char* sym_names =
1372     reinterpret_cast<const char*>(sd->symbol_names->data());
1373   symtab->add_from_relobj(this,
1374                           sd->symbols->data() + sd->external_symbols_offset,
1375                           symcount, this->local_symbol_count_,
1376                           sym_names, sd->symbol_names_size,
1377                           &this->symbols_,
1378                           &this->defined_count_);
1379
1380   delete sd->symbols;
1381   sd->symbols = NULL;
1382   delete sd->symbol_names;
1383   sd->symbol_names = NULL;
1384 }
1385
1386 // First pass over the local symbols.  Here we add their names to
1387 // *POOL and *DYNPOOL, and we store the symbol value in
1388 // THIS->LOCAL_VALUES_.  This function is always called from a
1389 // singleton thread.  This is followed by a call to
1390 // finalize_local_symbols.
1391
1392 template<int size, bool big_endian>
1393 void
1394 Sized_relobj<size, big_endian>::do_count_local_symbols(Stringpool* pool,
1395                                                        Stringpool* dynpool)
1396 {
1397   gold_assert(this->symtab_shndx_ != -1U);
1398   if (this->symtab_shndx_ == 0)
1399     {
1400       // This object has no symbols.  Weird but legal.
1401       return;
1402     }
1403
1404   // Read the symbol table section header.
1405   const unsigned int symtab_shndx = this->symtab_shndx_;
1406   typename This::Shdr symtabshdr(this,
1407                                  this->elf_file_.section_header(symtab_shndx));
1408   gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
1409
1410   // Read the local symbols.
1411   const int sym_size = This::sym_size;
1412   const unsigned int loccount = this->local_symbol_count_;
1413   gold_assert(loccount == symtabshdr.get_sh_info());
1414   off_t locsize = loccount * sym_size;
1415   const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
1416                                               locsize, true, true);
1417
1418   // Read the symbol names.
1419   const unsigned int strtab_shndx =
1420     this->adjust_shndx(symtabshdr.get_sh_link());
1421   section_size_type strtab_size;
1422   const unsigned char* pnamesu = this->section_contents(strtab_shndx,
1423                                                         &strtab_size,
1424                                                         true);
1425   const char* pnames = reinterpret_cast<const char*>(pnamesu);
1426
1427   // Loop over the local symbols.
1428
1429   const Output_sections& out_sections(this->output_sections());
1430   unsigned int shnum = this->shnum();
1431   unsigned int count = 0;
1432   unsigned int dyncount = 0;
1433   // Skip the first, dummy, symbol.
1434   psyms += sym_size;
1435   for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
1436     {
1437       elfcpp::Sym<size, big_endian> sym(psyms);
1438
1439       Symbol_value<size>& lv(this->local_values_[i]);
1440
1441       bool is_ordinary;
1442       unsigned int shndx = this->adjust_sym_shndx(i, sym.get_st_shndx(),
1443                                                   &is_ordinary);
1444       lv.set_input_shndx(shndx, is_ordinary);
1445
1446       if (sym.get_st_type() == elfcpp::STT_SECTION)
1447         lv.set_is_section_symbol();
1448       else if (sym.get_st_type() == elfcpp::STT_TLS)
1449         lv.set_is_tls_symbol();
1450
1451       // Save the input symbol value for use in do_finalize_local_symbols().
1452       lv.set_input_value(sym.get_st_value());
1453
1454       // Decide whether this symbol should go into the output file.
1455
1456       if (shndx < shnum && out_sections[shndx] == NULL)
1457         {
1458           lv.set_no_output_symtab_entry();
1459           gold_assert(!lv.needs_output_dynsym_entry());
1460           continue;
1461         }
1462
1463       if (sym.get_st_type() == elfcpp::STT_SECTION)
1464         {
1465           lv.set_no_output_symtab_entry();
1466           gold_assert(!lv.needs_output_dynsym_entry());
1467           continue;
1468         }
1469
1470       if (sym.get_st_name() >= strtab_size)
1471         {
1472           this->error(_("local symbol %u section name out of range: %u >= %u"),
1473                       i, sym.get_st_name(),
1474                       static_cast<unsigned int>(strtab_size));
1475           lv.set_no_output_symtab_entry();
1476           continue;
1477         }
1478
1479       // Add the symbol to the symbol table string pool.
1480       const char* name = pnames + sym.get_st_name();
1481       pool->add(name, true, NULL);
1482       ++count;
1483
1484       // If needed, add the symbol to the dynamic symbol table string pool.
1485       if (lv.needs_output_dynsym_entry())
1486         {
1487           dynpool->add(name, true, NULL);
1488           ++dyncount;
1489         }
1490     }
1491
1492   this->output_local_symbol_count_ = count;
1493   this->output_local_dynsym_count_ = dyncount;
1494 }
1495
1496 // Finalize the local symbols.  Here we set the final value in
1497 // THIS->LOCAL_VALUES_ and set their output symbol table indexes.
1498 // This function is always called from a singleton thread.  The actual
1499 // output of the local symbols will occur in a separate task.
1500
1501 template<int size, bool big_endian>
1502 unsigned int
1503 Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
1504                                                           off_t off)
1505 {
1506   gold_assert(off == static_cast<off_t>(align_address(off, size >> 3)));
1507
1508   const unsigned int loccount = this->local_symbol_count_;
1509   this->local_symbol_offset_ = off;
1510
1511   const Output_sections& out_sections(this->output_sections());
1512   const std::vector<Address>& out_offsets(this->section_offsets_);
1513   unsigned int shnum = this->shnum();
1514
1515   for (unsigned int i = 1; i < loccount; ++i)
1516     {
1517       Symbol_value<size>& lv(this->local_values_[i]);
1518
1519       bool is_ordinary;
1520       unsigned int shndx = lv.input_shndx(&is_ordinary);
1521
1522       // Set the output symbol value.
1523
1524       if (!is_ordinary)
1525         {
1526           if (shndx == elfcpp::SHN_ABS || shndx == elfcpp::SHN_COMMON)
1527             lv.set_output_value(lv.input_value());
1528           else
1529             {
1530               this->error(_("unknown section index %u for local symbol %u"),
1531                           shndx, i);
1532               lv.set_output_value(0);
1533             }
1534         }
1535       else
1536         {
1537           if (shndx >= shnum)
1538             {
1539               this->error(_("local symbol %u section index %u out of range"),
1540                           i, shndx);
1541               shndx = 0;
1542             }
1543
1544           Output_section* os = out_sections[shndx];
1545
1546           if (os == NULL)
1547             {
1548               // This local symbol belongs to a section we are discarding.
1549               // In some cases when applying relocations later, we will
1550               // attempt to match it to the corresponding kept section,
1551               // so we leave the input value unchanged here.
1552               continue;
1553             }
1554           else if (out_offsets[shndx] == invalid_address)
1555             {
1556               // This is a SHF_MERGE section or one which otherwise
1557               // requires special handling.  We get the output address
1558               // of the start of the merged section.  If this is not a
1559               // section symbol, we can then determine the final
1560               // value.  If it is a section symbol, we can not, as in
1561               // that case we have to consider the addend to determine
1562               // the value to use in a relocation.
1563               if (!lv.is_section_symbol())
1564                 lv.set_output_value(os->output_address(this, shndx,
1565                                                        lv.input_value()));
1566               else
1567                 {
1568                   section_offset_type start =
1569                     os->starting_output_address(this, shndx);
1570                   Merged_symbol_value<size>* msv =
1571                     new Merged_symbol_value<size>(lv.input_value(), start);
1572                   lv.set_merged_symbol_value(msv);
1573                 }
1574             }
1575           else if (lv.is_tls_symbol())
1576             lv.set_output_value(os->tls_offset()
1577                                 + out_offsets[shndx]
1578                                 + lv.input_value());
1579           else
1580             lv.set_output_value(os->address()
1581                                 + out_offsets[shndx]
1582                                 + lv.input_value());
1583         }
1584
1585       if (lv.needs_output_symtab_entry())
1586         {
1587           lv.set_output_symtab_index(index);
1588           ++index;
1589         }
1590     }
1591   return index;
1592 }
1593
1594 // Set the output dynamic symbol table indexes for the local variables.
1595
1596 template<int size, bool big_endian>
1597 unsigned int
1598 Sized_relobj<size, big_endian>::do_set_local_dynsym_indexes(unsigned int index)
1599 {
1600   const unsigned int loccount = this->local_symbol_count_;
1601   for (unsigned int i = 1; i < loccount; ++i)
1602     {
1603       Symbol_value<size>& lv(this->local_values_[i]);
1604       if (lv.needs_output_dynsym_entry())
1605         {
1606           lv.set_output_dynsym_index(index);
1607           ++index;
1608         }
1609     }
1610   return index;
1611 }
1612
1613 // Set the offset where local dynamic symbol information will be stored.
1614 // Returns the count of local symbols contributed to the symbol table by
1615 // this object.
1616
1617 template<int size, bool big_endian>
1618 unsigned int
1619 Sized_relobj<size, big_endian>::do_set_local_dynsym_offset(off_t off)
1620 {
1621   gold_assert(off == static_cast<off_t>(align_address(off, size >> 3)));
1622   this->local_dynsym_offset_ = off;
1623   return this->output_local_dynsym_count_;
1624 }
1625
1626 // Write out the local symbols.
1627
1628 template<int size, bool big_endian>
1629 void
1630 Sized_relobj<size, big_endian>::write_local_symbols(
1631     Output_file* of,
1632     const Stringpool* sympool,
1633     const Stringpool* dynpool,
1634     Output_symtab_xindex* symtab_xindex,
1635     Output_symtab_xindex* dynsym_xindex)
1636 {
1637   const bool strip_all = parameters->options().strip_all();
1638   if (strip_all)
1639     {
1640       if (this->output_local_dynsym_count_ == 0)
1641         return;
1642       this->output_local_symbol_count_ = 0;
1643     }
1644
1645   gold_assert(this->symtab_shndx_ != -1U);
1646   if (this->symtab_shndx_ == 0)
1647     {
1648       // This object has no symbols.  Weird but legal.
1649       return;
1650     }
1651
1652   // Read the symbol table section header.
1653   const unsigned int symtab_shndx = this->symtab_shndx_;
1654   typename This::Shdr symtabshdr(this,
1655                                  this->elf_file_.section_header(symtab_shndx));
1656   gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
1657   const unsigned int loccount = this->local_symbol_count_;
1658   gold_assert(loccount == symtabshdr.get_sh_info());
1659
1660   // Read the local symbols.
1661   const int sym_size = This::sym_size;
1662   off_t locsize = loccount * sym_size;
1663   const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
1664                                               locsize, true, false);
1665
1666   // Read the symbol names.
1667   const unsigned int strtab_shndx =
1668     this->adjust_shndx(symtabshdr.get_sh_link());
1669   section_size_type strtab_size;
1670   const unsigned char* pnamesu = this->section_contents(strtab_shndx,
1671                                                         &strtab_size,
1672                                                         false);
1673   const char* pnames = reinterpret_cast<const char*>(pnamesu);
1674
1675   // Get views into the output file for the portions of the symbol table
1676   // and the dynamic symbol table that we will be writing.
1677   off_t output_size = this->output_local_symbol_count_ * sym_size;
1678   unsigned char* oview = NULL;
1679   if (output_size > 0)
1680     oview = of->get_output_view(this->local_symbol_offset_, output_size);
1681
1682   off_t dyn_output_size = this->output_local_dynsym_count_ * sym_size;
1683   unsigned char* dyn_oview = NULL;
1684   if (dyn_output_size > 0)
1685     dyn_oview = of->get_output_view(this->local_dynsym_offset_,
1686                                     dyn_output_size);
1687
1688   const Output_sections out_sections(this->output_sections());
1689
1690   gold_assert(this->local_values_.size() == loccount);
1691
1692   unsigned char* ov = oview;
1693   unsigned char* dyn_ov = dyn_oview;
1694   psyms += sym_size;
1695   for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
1696     {
1697       elfcpp::Sym<size, big_endian> isym(psyms);
1698
1699       Symbol_value<size>& lv(this->local_values_[i]);
1700
1701       bool is_ordinary;
1702       unsigned int st_shndx = this->adjust_sym_shndx(i, isym.get_st_shndx(),
1703                                                      &is_ordinary);
1704       if (is_ordinary)
1705         {
1706           gold_assert(st_shndx < out_sections.size());
1707           if (out_sections[st_shndx] == NULL)
1708             continue;
1709           st_shndx = out_sections[st_shndx]->out_shndx();
1710           if (st_shndx >= elfcpp::SHN_LORESERVE)
1711             {
1712               if (lv.needs_output_symtab_entry() && !strip_all)
1713                 symtab_xindex->add(lv.output_symtab_index(), st_shndx);
1714               if (lv.needs_output_dynsym_entry())
1715                 dynsym_xindex->add(lv.output_dynsym_index(), st_shndx);
1716               st_shndx = elfcpp::SHN_XINDEX;
1717             }
1718         }
1719
1720       // Write the symbol to the output symbol table.
1721       if (!strip_all && lv.needs_output_symtab_entry())
1722         {
1723           elfcpp::Sym_write<size, big_endian> osym(ov);
1724
1725           gold_assert(isym.get_st_name() < strtab_size);
1726           const char* name = pnames + isym.get_st_name();
1727           osym.put_st_name(sympool->get_offset(name));
1728           osym.put_st_value(this->local_values_[i].value(this, 0));
1729           osym.put_st_size(isym.get_st_size());
1730           osym.put_st_info(isym.get_st_info());
1731           osym.put_st_other(isym.get_st_other());
1732           osym.put_st_shndx(st_shndx);
1733
1734           ov += sym_size;
1735         }
1736
1737       // Write the symbol to the output dynamic symbol table.
1738       if (lv.needs_output_dynsym_entry())
1739         {
1740           gold_assert(dyn_ov < dyn_oview + dyn_output_size);
1741           elfcpp::Sym_write<size, big_endian> osym(dyn_ov);
1742
1743           gold_assert(isym.get_st_name() < strtab_size);
1744           const char* name = pnames + isym.get_st_name();
1745           osym.put_st_name(dynpool->get_offset(name));
1746           osym.put_st_value(this->local_values_[i].value(this, 0));
1747           osym.put_st_size(isym.get_st_size());
1748           osym.put_st_info(isym.get_st_info());
1749           osym.put_st_other(isym.get_st_other());
1750           osym.put_st_shndx(st_shndx);
1751
1752           dyn_ov += sym_size;
1753         }
1754     }
1755
1756
1757   if (output_size > 0)
1758     {
1759       gold_assert(ov - oview == output_size);
1760       of->write_output_view(this->local_symbol_offset_, output_size, oview);
1761     }
1762
1763   if (dyn_output_size > 0)
1764     {
1765       gold_assert(dyn_ov - dyn_oview == dyn_output_size);
1766       of->write_output_view(this->local_dynsym_offset_, dyn_output_size,
1767                             dyn_oview);
1768     }
1769 }
1770
1771 // Set *INFO to symbolic information about the offset OFFSET in the
1772 // section SHNDX.  Return true if we found something, false if we
1773 // found nothing.
1774
1775 template<int size, bool big_endian>
1776 bool
1777 Sized_relobj<size, big_endian>::get_symbol_location_info(
1778     unsigned int shndx,
1779     off_t offset,
1780     Symbol_location_info* info)
1781 {
1782   if (this->symtab_shndx_ == 0)
1783     return false;
1784
1785   section_size_type symbols_size;
1786   const unsigned char* symbols = this->section_contents(this->symtab_shndx_,
1787                                                         &symbols_size,
1788                                                         false);
1789
1790   unsigned int symbol_names_shndx =
1791     this->adjust_shndx(this->section_link(this->symtab_shndx_));
1792   section_size_type names_size;
1793   const unsigned char* symbol_names_u =
1794     this->section_contents(symbol_names_shndx, &names_size, false);
1795   const char* symbol_names = reinterpret_cast<const char*>(symbol_names_u);
1796
1797   const int sym_size = This::sym_size;
1798   const size_t count = symbols_size / sym_size;
1799
1800   const unsigned char* p = symbols;
1801   for (size_t i = 0; i < count; ++i, p += sym_size)
1802     {
1803       elfcpp::Sym<size, big_endian> sym(p);
1804
1805       if (sym.get_st_type() == elfcpp::STT_FILE)
1806         {
1807           if (sym.get_st_name() >= names_size)
1808             info->source_file = "(invalid)";
1809           else
1810             info->source_file = symbol_names + sym.get_st_name();
1811           continue;
1812         }
1813
1814       bool is_ordinary;
1815       unsigned int st_shndx = this->adjust_sym_shndx(i, sym.get_st_shndx(),
1816                                                      &is_ordinary);
1817       if (is_ordinary
1818           && st_shndx == shndx
1819           && static_cast<off_t>(sym.get_st_value()) <= offset
1820           && (static_cast<off_t>(sym.get_st_value() + sym.get_st_size())
1821               > offset))
1822         {
1823           if (sym.get_st_name() > names_size)
1824             info->enclosing_symbol_name = "(invalid)";
1825           else
1826             {
1827               info->enclosing_symbol_name = symbol_names + sym.get_st_name();
1828               if (parameters->options().do_demangle())
1829                 {
1830                   char* demangled_name = cplus_demangle(
1831                       info->enclosing_symbol_name.c_str(),
1832                       DMGL_ANSI | DMGL_PARAMS);
1833                   if (demangled_name != NULL)
1834                     {
1835                       info->enclosing_symbol_name.assign(demangled_name);
1836                       free(demangled_name);
1837                     }
1838                 }
1839             }
1840           return true;
1841         }
1842     }
1843
1844   return false;
1845 }
1846
1847 // Look for a kept section corresponding to the given discarded section,
1848 // and return its output address.  This is used only for relocations in
1849 // debugging sections.  If we can't find the kept section, return 0.
1850
1851 template<int size, bool big_endian>
1852 typename Sized_relobj<size, big_endian>::Address
1853 Sized_relobj<size, big_endian>::map_to_kept_section(
1854     unsigned int shndx,
1855     bool* found) const
1856 {
1857   Kept_comdat_section *kept = this->get_kept_comdat_section(shndx);
1858   if (kept != NULL)
1859     {
1860       gold_assert(kept->object_ != NULL);
1861       *found = true;
1862       Output_section* os = kept->object_->output_section(kept->shndx_);
1863       Address offset = kept->object_->get_output_section_offset(kept->shndx_);
1864       gold_assert(os != NULL && offset != invalid_address);
1865       return os->address() + offset;
1866     }
1867   *found = false;
1868   return 0;
1869 }
1870
1871 // Get symbol counts.
1872
1873 template<int size, bool big_endian>
1874 void
1875 Sized_relobj<size, big_endian>::do_get_global_symbol_counts(
1876     const Symbol_table*,
1877     size_t* defined,
1878     size_t* used) const
1879 {
1880   *defined = this->defined_count_;
1881   size_t count = 0;
1882   for (Symbols::const_iterator p = this->symbols_.begin();
1883        p != this->symbols_.end();
1884        ++p)
1885     if (*p != NULL
1886         && (*p)->source() == Symbol::FROM_OBJECT
1887         && (*p)->object() == this
1888         && (*p)->is_defined())
1889       ++count;
1890   *used = count;
1891 }
1892
1893 // Input_objects methods.
1894
1895 // Add a regular relocatable object to the list.  Return false if this
1896 // object should be ignored.
1897
1898 bool
1899 Input_objects::add_object(Object* obj)
1900 {
1901   // Set the global target from the first object file we recognize.
1902   Target* target = obj->target();
1903   if (!parameters->target_valid())
1904     set_parameters_target(target);
1905   else if (target != &parameters->target())
1906     {
1907       obj->error(_("incompatible target"));
1908       return false;
1909     }
1910
1911   // Print the filename if the -t/--trace option is selected.
1912   if (parameters->options().trace())
1913     gold_info("%s", obj->name().c_str());
1914
1915   if (!obj->is_dynamic())
1916     this->relobj_list_.push_back(static_cast<Relobj*>(obj));
1917   else
1918     {
1919       // See if this is a duplicate SONAME.
1920       Dynobj* dynobj = static_cast<Dynobj*>(obj);
1921       const char* soname = dynobj->soname();
1922
1923       std::pair<Unordered_set<std::string>::iterator, bool> ins =
1924         this->sonames_.insert(soname);
1925       if (!ins.second)
1926         {
1927           // We have already seen a dynamic object with this soname.
1928           return false;
1929         }
1930
1931       this->dynobj_list_.push_back(dynobj);
1932
1933       // If this is -lc, remember the directory in which we found it.
1934       // We use this when issuing warnings about undefined symbols: as
1935       // a heuristic, we don't warn about system libraries found in
1936       // the same directory as -lc.
1937       if (strncmp(soname, "libc.so", 7) == 0)
1938         {
1939           const char* object_name = dynobj->name().c_str();
1940           const char* base = lbasename(object_name);
1941           if (base != object_name)
1942             this->system_library_directory_.assign(object_name,
1943                                                    base - 1 - object_name);
1944         }
1945     }
1946
1947   // Add this object to the cross-referencer if requested.
1948   if (parameters->options().user_set_print_symbol_counts())
1949     {
1950       if (this->cref_ == NULL)
1951         this->cref_ = new Cref();
1952       this->cref_->add_object(obj);
1953     }
1954
1955   return true;
1956 }
1957
1958 // Return whether an object was found in the system library directory.
1959
1960 bool
1961 Input_objects::found_in_system_library_directory(const Object* object) const
1962 {
1963   return (!this->system_library_directory_.empty()
1964           && object->name().compare(0,
1965                                     this->system_library_directory_.size(),
1966                                     this->system_library_directory_) == 0);
1967 }
1968
1969 // For each dynamic object, record whether we've seen all of its
1970 // explicit dependencies.
1971
1972 void
1973 Input_objects::check_dynamic_dependencies() const
1974 {
1975   for (Dynobj_list::const_iterator p = this->dynobj_list_.begin();
1976        p != this->dynobj_list_.end();
1977        ++p)
1978     {
1979       const Dynobj::Needed& needed((*p)->needed());
1980       bool found_all = true;
1981       for (Dynobj::Needed::const_iterator pneeded = needed.begin();
1982            pneeded != needed.end();
1983            ++pneeded)
1984         {
1985           if (this->sonames_.find(*pneeded) == this->sonames_.end())
1986             {
1987               found_all = false;
1988               break;
1989             }
1990         }
1991       (*p)->set_has_unknown_needed_entries(!found_all);
1992     }
1993 }
1994
1995 // Start processing an archive.
1996
1997 void
1998 Input_objects::archive_start(Archive* archive)
1999 {
2000   if (parameters->options().user_set_print_symbol_counts())
2001     {
2002       if (this->cref_ == NULL)
2003         this->cref_ = new Cref();
2004       this->cref_->add_archive_start(archive);
2005     }
2006 }
2007
2008 // Stop processing an archive.
2009
2010 void
2011 Input_objects::archive_stop(Archive* archive)
2012 {
2013   if (parameters->options().user_set_print_symbol_counts())
2014     this->cref_->add_archive_stop(archive);
2015 }
2016
2017 // Print symbol counts
2018
2019 void
2020 Input_objects::print_symbol_counts(const Symbol_table* symtab) const
2021 {
2022   if (parameters->options().user_set_print_symbol_counts()
2023       && this->cref_ != NULL)
2024     this->cref_->print_symbol_counts(symtab);
2025 }
2026
2027 // Relocate_info methods.
2028
2029 // Return a string describing the location of a relocation.  This is
2030 // only used in error messages.
2031
2032 template<int size, bool big_endian>
2033 std::string
2034 Relocate_info<size, big_endian>::location(size_t, off_t offset) const
2035 {
2036   // See if we can get line-number information from debugging sections.
2037   std::string filename;
2038   std::string file_and_lineno;   // Better than filename-only, if available.
2039
2040   Sized_dwarf_line_info<size, big_endian> line_info(this->object);
2041   // This will be "" if we failed to parse the debug info for any reason.
2042   file_and_lineno = line_info.addr2line(this->data_shndx, offset);
2043
2044   std::string ret(this->object->name());
2045   ret += ':';
2046   Symbol_location_info info;
2047   if (this->object->get_symbol_location_info(this->data_shndx, offset, &info))
2048     {
2049       ret += " in function ";
2050       ret += info.enclosing_symbol_name;
2051       ret += ":";
2052       filename = info.source_file;
2053     }
2054
2055   if (!file_and_lineno.empty())
2056     ret += file_and_lineno;
2057   else
2058     {
2059       if (!filename.empty())
2060         ret += filename;
2061       ret += "(";
2062       ret += this->object->section_name(this->data_shndx);
2063       char buf[100];
2064       // Offsets into sections have to be positive.
2065       snprintf(buf, sizeof(buf), "+0x%lx", static_cast<long>(offset));
2066       ret += buf;
2067       ret += ")";
2068     }
2069   return ret;
2070 }
2071
2072 } // End namespace gold.
2073
2074 namespace
2075 {
2076
2077 using namespace gold;
2078
2079 // Read an ELF file with the header and return the appropriate
2080 // instance of Object.
2081
2082 template<int size, bool big_endian>
2083 Object*
2084 make_elf_sized_object(const std::string& name, Input_file* input_file,
2085                       off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr)
2086 {
2087   int et = ehdr.get_e_type();
2088   if (et == elfcpp::ET_REL)
2089     {
2090       Sized_relobj<size, big_endian>* obj =
2091         new Sized_relobj<size, big_endian>(name, input_file, offset, ehdr);
2092       obj->setup(ehdr);
2093       return obj;
2094     }
2095   else if (et == elfcpp::ET_DYN)
2096     {
2097       Sized_dynobj<size, big_endian>* obj =
2098         new Sized_dynobj<size, big_endian>(name, input_file, offset, ehdr);
2099       obj->setup(ehdr);
2100       return obj;
2101     }
2102   else
2103     {
2104       gold_error(_("%s: unsupported ELF file type %d"),
2105                  name.c_str(), et);
2106       return NULL;
2107     }
2108 }
2109
2110 } // End anonymous namespace.
2111
2112 namespace gold
2113 {
2114
2115 // Read an ELF file and return the appropriate instance of Object.
2116
2117 Object*
2118 make_elf_object(const std::string& name, Input_file* input_file, off_t offset,
2119                 const unsigned char* p, section_offset_type bytes)
2120 {
2121   if (bytes < elfcpp::EI_NIDENT)
2122     {
2123       gold_error(_("%s: ELF file too short"), name.c_str());
2124       return NULL;
2125     }
2126
2127   int v = p[elfcpp::EI_VERSION];
2128   if (v != elfcpp::EV_CURRENT)
2129     {
2130       if (v == elfcpp::EV_NONE)
2131         gold_error(_("%s: invalid ELF version 0"), name.c_str());
2132       else
2133         gold_error(_("%s: unsupported ELF version %d"), name.c_str(), v);
2134       return NULL;
2135     }
2136
2137   int c = p[elfcpp::EI_CLASS];
2138   if (c == elfcpp::ELFCLASSNONE)
2139     {
2140       gold_error(_("%s: invalid ELF class 0"), name.c_str());
2141       return NULL;
2142     }
2143   else if (c != elfcpp::ELFCLASS32
2144            && c != elfcpp::ELFCLASS64)
2145     {
2146       gold_error(_("%s: unsupported ELF class %d"), name.c_str(), c);
2147       return NULL;
2148     }
2149
2150   int d = p[elfcpp::EI_DATA];
2151   if (d == elfcpp::ELFDATANONE)
2152     {
2153       gold_error(_("%s: invalid ELF data encoding"), name.c_str());
2154       return NULL;
2155     }
2156   else if (d != elfcpp::ELFDATA2LSB
2157            && d != elfcpp::ELFDATA2MSB)
2158     {
2159       gold_error(_("%s: unsupported ELF data encoding %d"), name.c_str(), d);
2160       return NULL;
2161     }
2162
2163   bool big_endian = d == elfcpp::ELFDATA2MSB;
2164
2165   if (c == elfcpp::ELFCLASS32)
2166     {
2167       if (bytes < elfcpp::Elf_sizes<32>::ehdr_size)
2168         {
2169           gold_error(_("%s: ELF file too short"), name.c_str());
2170           return NULL;
2171         }
2172       if (big_endian)
2173         {
2174 #ifdef HAVE_TARGET_32_BIG
2175           elfcpp::Ehdr<32, true> ehdr(p);
2176           return make_elf_sized_object<32, true>(name, input_file,
2177                                                  offset, ehdr);
2178 #else
2179           gold_error(_("%s: not configured to support "
2180                        "32-bit big-endian object"),
2181                      name.c_str());
2182           return NULL;
2183 #endif
2184         }
2185       else
2186         {
2187 #ifdef HAVE_TARGET_32_LITTLE
2188           elfcpp::Ehdr<32, false> ehdr(p);
2189           return make_elf_sized_object<32, false>(name, input_file,
2190                                                   offset, ehdr);
2191 #else
2192           gold_error(_("%s: not configured to support "
2193                        "32-bit little-endian object"),
2194                      name.c_str());
2195           return NULL;
2196 #endif
2197         }
2198     }
2199   else
2200     {
2201       if (bytes < elfcpp::Elf_sizes<64>::ehdr_size)
2202         {
2203           gold_error(_("%s: ELF file too short"), name.c_str());
2204           return NULL;
2205         }
2206       if (big_endian)
2207         {
2208 #ifdef HAVE_TARGET_64_BIG
2209           elfcpp::Ehdr<64, true> ehdr(p);
2210           return make_elf_sized_object<64, true>(name, input_file,
2211                                                  offset, ehdr);
2212 #else
2213           gold_error(_("%s: not configured to support "
2214                        "64-bit big-endian object"),
2215                      name.c_str());
2216           return NULL;
2217 #endif
2218         }
2219       else
2220         {
2221 #ifdef HAVE_TARGET_64_LITTLE
2222           elfcpp::Ehdr<64, false> ehdr(p);
2223           return make_elf_sized_object<64, false>(name, input_file,
2224                                                   offset, ehdr);
2225 #else
2226           gold_error(_("%s: not configured to support "
2227                        "64-bit little-endian object"),
2228                      name.c_str());
2229           return NULL;
2230 #endif
2231         }
2232     }
2233 }
2234
2235 // Instantiate the templates we need.
2236
2237 #ifdef HAVE_TARGET_32_LITTLE
2238 template
2239 void
2240 Object::read_section_data<32, false>(elfcpp::Elf_file<32, false, Object>*,
2241                                      Read_symbols_data*);
2242 #endif
2243
2244 #ifdef HAVE_TARGET_32_BIG
2245 template
2246 void
2247 Object::read_section_data<32, true>(elfcpp::Elf_file<32, true, Object>*,
2248                                     Read_symbols_data*);
2249 #endif
2250
2251 #ifdef HAVE_TARGET_64_LITTLE
2252 template
2253 void
2254 Object::read_section_data<64, false>(elfcpp::Elf_file<64, false, Object>*,
2255                                      Read_symbols_data*);
2256 #endif
2257
2258 #ifdef HAVE_TARGET_64_BIG
2259 template
2260 void
2261 Object::read_section_data<64, true>(elfcpp::Elf_file<64, true, Object>*,
2262                                     Read_symbols_data*);
2263 #endif
2264
2265 #ifdef HAVE_TARGET_32_LITTLE
2266 template
2267 class Sized_relobj<32, false>;
2268 #endif
2269
2270 #ifdef HAVE_TARGET_32_BIG
2271 template
2272 class Sized_relobj<32, true>;
2273 #endif
2274
2275 #ifdef HAVE_TARGET_64_LITTLE
2276 template
2277 class Sized_relobj<64, false>;
2278 #endif
2279
2280 #ifdef HAVE_TARGET_64_BIG
2281 template
2282 class Sized_relobj<64, true>;
2283 #endif
2284
2285 #ifdef HAVE_TARGET_32_LITTLE
2286 template
2287 struct Relocate_info<32, false>;
2288 #endif
2289
2290 #ifdef HAVE_TARGET_32_BIG
2291 template
2292 struct Relocate_info<32, true>;
2293 #endif
2294
2295 #ifdef HAVE_TARGET_64_LITTLE
2296 template
2297 struct Relocate_info<64, false>;
2298 #endif
2299
2300 #ifdef HAVE_TARGET_64_BIG
2301 template
2302 struct Relocate_info<64, true>;
2303 #endif
2304
2305 } // End namespace gold.