2009-06-05 Doug Kwan <dougkwan@google.com>
[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     has_eh_frame_(false),
331     discarded_eh_frame_shndx_(-1U)
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;
678   Sized_relobj<size, big_endian>* kept_object = NULL;
679   Kept_section::Comdat_group* kept_group = NULL;
680
681   if ((flags & elfcpp::GRP_COMDAT) == 0)
682     include_group = true;
683   else
684     {
685       Kept_section this_group(this, index, true);
686       Kept_section *kept_section_group;
687       include_group = layout->find_or_add_kept_section(signature,
688                                                        &this_group,
689                                                        &kept_section_group);
690       if (include_group)
691         kept_section_group->group_sections = new Kept_section::Comdat_group;
692
693       kept_group = kept_section_group->group_sections;
694       kept_object = (static_cast<Sized_relobj<size, big_endian>*>
695                      (kept_section_group->object));
696     }
697
698   size_t count = shdr.get_sh_size() / sizeof(elfcpp::Elf_Word);
699
700   std::vector<unsigned int> shndxes;
701   bool relocate_group = include_group && parameters->options().relocatable();
702   if (relocate_group)
703     shndxes.reserve(count - 1);
704
705   for (size_t i = 1; i < count; ++i)
706     {
707       elfcpp::Elf_Word secnum =
708         this->adjust_shndx(elfcpp::Swap<32, big_endian>::readval(pword + i));
709
710       if (relocate_group)
711         shndxes.push_back(secnum);
712
713       if (secnum >= this->shnum())
714         {
715           this->error(_("section %u in section group %u out of range"),
716                       secnum, index);
717           continue;
718         }
719
720       // Check for an earlier section number, since we're going to get
721       // it wrong--we may have already decided to include the section.
722       if (secnum < index)
723         this->error(_("invalid section group %u refers to earlier section %u"),
724                     index, secnum);
725
726       // Get the name of the member section.
727       typename This::Shdr member_shdr(shdrs + secnum * This::shdr_size);
728       if (member_shdr.get_sh_name() >= section_names_size)
729         {
730           // This is an error, but it will be diagnosed eventually
731           // in do_layout, so we don't need to do anything here but
732           // ignore it.
733           continue;
734         }
735       std::string mname(section_names + member_shdr.get_sh_name());
736
737       if (!include_group)
738         {
739           (*omit)[secnum] = true;
740           if (kept_group != NULL)
741             {
742               // Find the corresponding kept section, and store that info
743               // in the discarded section table.
744               Kept_section::Comdat_group::const_iterator p =
745                 kept_group->find(mname);
746               if (p != kept_group->end())
747                 {
748                   Kept_comdat_section* kept =
749                     new Kept_comdat_section(kept_object, p->second);
750                   this->set_kept_comdat_section(secnum, kept);
751                 }
752             }
753         }
754       else if (flags & elfcpp::GRP_COMDAT)
755         {
756           // Add the section to the kept group table.
757           gold_assert(kept_group != NULL);
758           kept_group->insert(std::make_pair(mname, secnum));
759         }
760     }
761
762   if (relocate_group)
763     layout->layout_group(symtab, this, index, name, signature.c_str(),
764                          shdr, flags, &shndxes);
765
766   return include_group;
767 }
768
769 // Whether to include a linkonce section in the link.  NAME is the
770 // name of the section and SHDR is the section header.
771
772 // Linkonce sections are a GNU extension implemented in the original
773 // GNU linker before section groups were defined.  The semantics are
774 // that we only include one linkonce section with a given name.  The
775 // name of a linkonce section is normally .gnu.linkonce.T.SYMNAME,
776 // where T is the type of section and SYMNAME is the name of a symbol.
777 // In an attempt to make linkonce sections interact well with section
778 // groups, we try to identify SYMNAME and use it like a section group
779 // signature.  We want to block section groups with that signature,
780 // but not other linkonce sections with that signature.  We also use
781 // the full name of the linkonce section as a normal section group
782 // signature.
783
784 template<int size, bool big_endian>
785 bool
786 Sized_relobj<size, big_endian>::include_linkonce_section(
787     Layout* layout,
788     unsigned int index,
789     const char* name,
790     const elfcpp::Shdr<size, big_endian>&)
791 {
792   // In general the symbol name we want will be the string following
793   // the last '.'.  However, we have to handle the case of
794   // .gnu.linkonce.t.__i686.get_pc_thunk.bx, which was generated by
795   // some versions of gcc.  So we use a heuristic: if the name starts
796   // with ".gnu.linkonce.t.", we use everything after that.  Otherwise
797   // we look for the last '.'.  We can't always simply skip
798   // ".gnu.linkonce.X", because we have to deal with cases like
799   // ".gnu.linkonce.d.rel.ro.local".
800   const char* const linkonce_t = ".gnu.linkonce.t.";
801   const char* symname;
802   if (strncmp(name, linkonce_t, strlen(linkonce_t)) == 0)
803     symname = name + strlen(linkonce_t);
804   else
805     symname = strrchr(name, '.') + 1;
806   std::string sig1(symname);
807   std::string sig2(name);
808   Kept_section candidate1(this, index, false);
809   Kept_section candidate2(this, index, true);
810   Kept_section* kept1;
811   Kept_section* kept2;
812   bool include1 = layout->find_or_add_kept_section(sig1, &candidate1, &kept1);
813   bool include2 = layout->find_or_add_kept_section(sig2, &candidate2, &kept2);
814
815   if (!include2)
816     {
817       // The section is being discarded on the basis of its section
818       // name (i.e., the kept section was also a linkonce section).
819       // In this case, the section index stored with the layout object
820       // is the linkonce section that was kept.
821       unsigned int kept_group_index = kept2->shndx;
822       Relobj* kept_relobj = kept2->object;
823       if (kept_relobj != NULL)
824         {
825           Sized_relobj<size, big_endian>* kept_object =
826             static_cast<Sized_relobj<size, big_endian>*>(kept_relobj);
827           Kept_comdat_section* kept =
828             new Kept_comdat_section(kept_object, kept_group_index);
829           this->set_kept_comdat_section(index, kept);
830         }
831     }
832   else if (!include1)
833     {
834       // The section is being discarded on the basis of its symbol
835       // name.  This means that the corresponding kept section was
836       // part of a comdat group, and it will be difficult to identify
837       // the specific section within that group that corresponds to
838       // this linkonce section.  We'll handle the simple case where
839       // the group has only one member section.  Otherwise, it's not
840       // worth the effort.
841       Relobj* kept_relobj = kept1->object;
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           Kept_section::Comdat_group* kept_group = kept1->group_sections;
847           if (kept_group != NULL && kept_group->size() == 1)
848             {
849               Kept_section::Comdat_group::const_iterator p =
850                 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         {
1300           // An object can contain at most one section holding exception
1301           // frame information.
1302           gold_assert(this->discarded_eh_frame_shndx_ == -1U);
1303           this->discarded_eh_frame_shndx_ = i;
1304           out_section_offsets[i] = invalid_address;
1305         }
1306       else
1307         out_section_offsets[i] = convert_types<Address, off_t>(offset);
1308
1309       // If this section requires special handling, and if there are
1310       // relocs that apply to it, then we must do the special handling
1311       // before we apply the relocs.
1312       if (offset == -1 && reloc_shndx[i] != 0)
1313         this->set_relocs_must_follow_section_writes();
1314     }
1315
1316   if (is_gc_pass_two)
1317     {
1318       delete[] gc_sd->section_headers_data;
1319       delete[] gc_sd->section_names_data;
1320       delete[] gc_sd->symbols_data;
1321       delete[] gc_sd->symbol_names_data;
1322     }
1323   else
1324     {
1325       delete sd->section_headers;
1326       sd->section_headers = NULL;
1327       delete sd->section_names;
1328       sd->section_names = NULL;
1329     }
1330 }
1331
1332 // Layout sections whose layout was deferred while waiting for
1333 // input files from a plugin.
1334
1335 template<int size, bool big_endian>
1336 void
1337 Sized_relobj<size, big_endian>::do_layout_deferred_sections(Layout* layout)
1338 {
1339   typename std::vector<Deferred_layout>::iterator deferred;
1340
1341   for (deferred = this->deferred_layout_.begin();
1342        deferred != this->deferred_layout_.end();
1343        ++deferred)
1344     {
1345       typename This::Shdr shdr(deferred->shdr_data_);
1346       this->layout_section(layout, deferred->shndx_, deferred->name_.c_str(),
1347                            shdr, deferred->reloc_shndx_, deferred->reloc_type_);
1348     }
1349
1350   this->deferred_layout_.clear();
1351 }
1352
1353 // Add the symbols to the symbol table.
1354
1355 template<int size, bool big_endian>
1356 void
1357 Sized_relobj<size, big_endian>::do_add_symbols(Symbol_table* symtab,
1358                                                Read_symbols_data* sd,
1359                                                Layout*)
1360 {
1361   if (sd->symbols == NULL)
1362     {
1363       gold_assert(sd->symbol_names == NULL);
1364       return;
1365     }
1366
1367   const int sym_size = This::sym_size;
1368   size_t symcount = ((sd->symbols_size - sd->external_symbols_offset)
1369                      / sym_size);
1370   if (symcount * sym_size != sd->symbols_size - sd->external_symbols_offset)
1371     {
1372       this->error(_("size of symbols is not multiple of symbol size"));
1373       return;
1374     }
1375
1376   this->symbols_.resize(symcount);
1377
1378   const char* sym_names =
1379     reinterpret_cast<const char*>(sd->symbol_names->data());
1380   symtab->add_from_relobj(this,
1381                           sd->symbols->data() + sd->external_symbols_offset,
1382                           symcount, this->local_symbol_count_,
1383                           sym_names, sd->symbol_names_size,
1384                           &this->symbols_,
1385                           &this->defined_count_);
1386
1387   delete sd->symbols;
1388   sd->symbols = NULL;
1389   delete sd->symbol_names;
1390   sd->symbol_names = NULL;
1391 }
1392
1393 // First pass over the local symbols.  Here we add their names to
1394 // *POOL and *DYNPOOL, and we store the symbol value in
1395 // THIS->LOCAL_VALUES_.  This function is always called from a
1396 // singleton thread.  This is followed by a call to
1397 // finalize_local_symbols.
1398
1399 template<int size, bool big_endian>
1400 void
1401 Sized_relobj<size, big_endian>::do_count_local_symbols(Stringpool* pool,
1402                                                        Stringpool* dynpool)
1403 {
1404   gold_assert(this->symtab_shndx_ != -1U);
1405   if (this->symtab_shndx_ == 0)
1406     {
1407       // This object has no symbols.  Weird but legal.
1408       return;
1409     }
1410
1411   // Read the symbol table section header.
1412   const unsigned int symtab_shndx = this->symtab_shndx_;
1413   typename This::Shdr symtabshdr(this,
1414                                  this->elf_file_.section_header(symtab_shndx));
1415   gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
1416
1417   // Read the local symbols.
1418   const int sym_size = This::sym_size;
1419   const unsigned int loccount = this->local_symbol_count_;
1420   gold_assert(loccount == symtabshdr.get_sh_info());
1421   off_t locsize = loccount * sym_size;
1422   const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
1423                                               locsize, true, true);
1424
1425   // Read the symbol names.
1426   const unsigned int strtab_shndx =
1427     this->adjust_shndx(symtabshdr.get_sh_link());
1428   section_size_type strtab_size;
1429   const unsigned char* pnamesu = this->section_contents(strtab_shndx,
1430                                                         &strtab_size,
1431                                                         true);
1432   const char* pnames = reinterpret_cast<const char*>(pnamesu);
1433
1434   // Loop over the local symbols.
1435
1436   const Output_sections& out_sections(this->output_sections());
1437   unsigned int shnum = this->shnum();
1438   unsigned int count = 0;
1439   unsigned int dyncount = 0;
1440   // Skip the first, dummy, symbol.
1441   psyms += sym_size;
1442   for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
1443     {
1444       elfcpp::Sym<size, big_endian> sym(psyms);
1445
1446       Symbol_value<size>& lv(this->local_values_[i]);
1447
1448       bool is_ordinary;
1449       unsigned int shndx = this->adjust_sym_shndx(i, sym.get_st_shndx(),
1450                                                   &is_ordinary);
1451       lv.set_input_shndx(shndx, is_ordinary);
1452
1453       if (sym.get_st_type() == elfcpp::STT_SECTION)
1454         lv.set_is_section_symbol();
1455       else if (sym.get_st_type() == elfcpp::STT_TLS)
1456         lv.set_is_tls_symbol();
1457
1458       // Save the input symbol value for use in do_finalize_local_symbols().
1459       lv.set_input_value(sym.get_st_value());
1460
1461       // Decide whether this symbol should go into the output file.
1462
1463       if ((shndx < shnum && out_sections[shndx] == NULL)
1464           || (shndx == this->discarded_eh_frame_shndx_))
1465         {
1466           lv.set_no_output_symtab_entry();
1467           gold_assert(!lv.needs_output_dynsym_entry());
1468           continue;
1469         }
1470
1471       if (sym.get_st_type() == elfcpp::STT_SECTION)
1472         {
1473           lv.set_no_output_symtab_entry();
1474           gold_assert(!lv.needs_output_dynsym_entry());
1475           continue;
1476         }
1477
1478       if (sym.get_st_name() >= strtab_size)
1479         {
1480           this->error(_("local symbol %u section name out of range: %u >= %u"),
1481                       i, sym.get_st_name(),
1482                       static_cast<unsigned int>(strtab_size));
1483           lv.set_no_output_symtab_entry();
1484           continue;
1485         }
1486
1487       // Add the symbol to the symbol table string pool.
1488       const char* name = pnames + sym.get_st_name();
1489       pool->add(name, true, NULL);
1490       ++count;
1491
1492       // If needed, add the symbol to the dynamic symbol table string pool.
1493       if (lv.needs_output_dynsym_entry())
1494         {
1495           dynpool->add(name, true, NULL);
1496           ++dyncount;
1497         }
1498     }
1499
1500   this->output_local_symbol_count_ = count;
1501   this->output_local_dynsym_count_ = dyncount;
1502 }
1503
1504 // Finalize the local symbols.  Here we set the final value in
1505 // THIS->LOCAL_VALUES_ and set their output symbol table indexes.
1506 // This function is always called from a singleton thread.  The actual
1507 // output of the local symbols will occur in a separate task.
1508
1509 template<int size, bool big_endian>
1510 unsigned int
1511 Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
1512                                                           off_t off)
1513 {
1514   gold_assert(off == static_cast<off_t>(align_address(off, size >> 3)));
1515
1516   const unsigned int loccount = this->local_symbol_count_;
1517   this->local_symbol_offset_ = off;
1518
1519   const bool relocatable = parameters->options().relocatable();
1520   const Output_sections& out_sections(this->output_sections());
1521   const std::vector<Address>& out_offsets(this->section_offsets_);
1522   unsigned int shnum = this->shnum();
1523
1524   for (unsigned int i = 1; i < loccount; ++i)
1525     {
1526       Symbol_value<size>& lv(this->local_values_[i]);
1527
1528       bool is_ordinary;
1529       unsigned int shndx = lv.input_shndx(&is_ordinary);
1530
1531       // Set the output symbol value.
1532
1533       if (!is_ordinary)
1534         {
1535           if (shndx == elfcpp::SHN_ABS || shndx == elfcpp::SHN_COMMON)
1536             lv.set_output_value(lv.input_value());
1537           else
1538             {
1539               this->error(_("unknown section index %u for local symbol %u"),
1540                           shndx, i);
1541               lv.set_output_value(0);
1542             }
1543         }
1544       else
1545         {
1546           if (shndx >= shnum)
1547             {
1548               this->error(_("local symbol %u section index %u out of range"),
1549                           i, shndx);
1550               shndx = 0;
1551             }
1552
1553           Output_section* os = out_sections[shndx];
1554
1555           if (os == NULL)
1556             {
1557               // This local symbol belongs to a section we are discarding.
1558               // In some cases when applying relocations later, we will
1559               // attempt to match it to the corresponding kept section,
1560               // so we leave the input value unchanged here.
1561               continue;
1562             }
1563           else if (out_offsets[shndx] == invalid_address)
1564             {
1565               uint64_t start;
1566
1567               // This is a SHF_MERGE section or one which otherwise
1568               // requires special handling.
1569               if (shndx == this->discarded_eh_frame_shndx_)
1570                 {
1571                   // This local symbol belongs to a discarded .eh_frame
1572                   // section.  Just treat it like the case in which
1573                   // os == NULL above.
1574                   gold_assert(this->has_eh_frame_);
1575                   continue;
1576                 }
1577               else if (!lv.is_section_symbol())
1578                 {
1579                   // This is not a section symbol.  We can determine
1580                   // the final value now.
1581                   lv.set_output_value(os->output_address(this, shndx,
1582                                                          lv.input_value()));
1583                 }
1584               else if (!os->find_starting_output_address(this, shndx, &start))
1585                 {
1586                   // This is a section symbol, but apparently not one
1587                   // in a merged section.  Just use the start of the
1588                   // output section.  This happens with relocatable
1589                   // links when the input object has section symbols
1590                   // for arbitrary non-merge sections.
1591                   lv.set_output_value(os->address());
1592                 }
1593               else
1594                 {
1595                   // We have to consider the addend to determine the
1596                   // value to use in a relocation.  START is the start
1597                   // of this input section.
1598                   Merged_symbol_value<size>* msv =
1599                     new Merged_symbol_value<size>(lv.input_value(), start);
1600                   lv.set_merged_symbol_value(msv);
1601                 }
1602             }
1603           else if (lv.is_tls_symbol())
1604             lv.set_output_value(os->tls_offset()
1605                                 + out_offsets[shndx]
1606                                 + lv.input_value());
1607           else
1608             lv.set_output_value((relocatable ? 0 : os->address())
1609                                 + out_offsets[shndx]
1610                                 + lv.input_value());
1611         }
1612
1613       if (lv.needs_output_symtab_entry())
1614         {
1615           lv.set_output_symtab_index(index);
1616           ++index;
1617         }
1618     }
1619   return index;
1620 }
1621
1622 // Set the output dynamic symbol table indexes for the local variables.
1623
1624 template<int size, bool big_endian>
1625 unsigned int
1626 Sized_relobj<size, big_endian>::do_set_local_dynsym_indexes(unsigned int index)
1627 {
1628   const unsigned int loccount = this->local_symbol_count_;
1629   for (unsigned int i = 1; i < loccount; ++i)
1630     {
1631       Symbol_value<size>& lv(this->local_values_[i]);
1632       if (lv.needs_output_dynsym_entry())
1633         {
1634           lv.set_output_dynsym_index(index);
1635           ++index;
1636         }
1637     }
1638   return index;
1639 }
1640
1641 // Set the offset where local dynamic symbol information will be stored.
1642 // Returns the count of local symbols contributed to the symbol table by
1643 // this object.
1644
1645 template<int size, bool big_endian>
1646 unsigned int
1647 Sized_relobj<size, big_endian>::do_set_local_dynsym_offset(off_t off)
1648 {
1649   gold_assert(off == static_cast<off_t>(align_address(off, size >> 3)));
1650   this->local_dynsym_offset_ = off;
1651   return this->output_local_dynsym_count_;
1652 }
1653
1654 // Write out the local symbols.
1655
1656 template<int size, bool big_endian>
1657 void
1658 Sized_relobj<size, big_endian>::write_local_symbols(
1659     Output_file* of,
1660     const Stringpool* sympool,
1661     const Stringpool* dynpool,
1662     Output_symtab_xindex* symtab_xindex,
1663     Output_symtab_xindex* dynsym_xindex)
1664 {
1665   const bool strip_all = parameters->options().strip_all();
1666   if (strip_all)
1667     {
1668       if (this->output_local_dynsym_count_ == 0)
1669         return;
1670       this->output_local_symbol_count_ = 0;
1671     }
1672
1673   gold_assert(this->symtab_shndx_ != -1U);
1674   if (this->symtab_shndx_ == 0)
1675     {
1676       // This object has no symbols.  Weird but legal.
1677       return;
1678     }
1679
1680   // Read the symbol table section header.
1681   const unsigned int symtab_shndx = this->symtab_shndx_;
1682   typename This::Shdr symtabshdr(this,
1683                                  this->elf_file_.section_header(symtab_shndx));
1684   gold_assert(symtabshdr.get_sh_type() == elfcpp::SHT_SYMTAB);
1685   const unsigned int loccount = this->local_symbol_count_;
1686   gold_assert(loccount == symtabshdr.get_sh_info());
1687
1688   // Read the local symbols.
1689   const int sym_size = This::sym_size;
1690   off_t locsize = loccount * sym_size;
1691   const unsigned char* psyms = this->get_view(symtabshdr.get_sh_offset(),
1692                                               locsize, true, false);
1693
1694   // Read the symbol names.
1695   const unsigned int strtab_shndx =
1696     this->adjust_shndx(symtabshdr.get_sh_link());
1697   section_size_type strtab_size;
1698   const unsigned char* pnamesu = this->section_contents(strtab_shndx,
1699                                                         &strtab_size,
1700                                                         false);
1701   const char* pnames = reinterpret_cast<const char*>(pnamesu);
1702
1703   // Get views into the output file for the portions of the symbol table
1704   // and the dynamic symbol table that we will be writing.
1705   off_t output_size = this->output_local_symbol_count_ * sym_size;
1706   unsigned char* oview = NULL;
1707   if (output_size > 0)
1708     oview = of->get_output_view(this->local_symbol_offset_, output_size);
1709
1710   off_t dyn_output_size = this->output_local_dynsym_count_ * sym_size;
1711   unsigned char* dyn_oview = NULL;
1712   if (dyn_output_size > 0)
1713     dyn_oview = of->get_output_view(this->local_dynsym_offset_,
1714                                     dyn_output_size);
1715
1716   const Output_sections out_sections(this->output_sections());
1717
1718   gold_assert(this->local_values_.size() == loccount);
1719
1720   unsigned char* ov = oview;
1721   unsigned char* dyn_ov = dyn_oview;
1722   psyms += sym_size;
1723   for (unsigned int i = 1; i < loccount; ++i, psyms += sym_size)
1724     {
1725       elfcpp::Sym<size, big_endian> isym(psyms);
1726
1727       Symbol_value<size>& lv(this->local_values_[i]);
1728
1729       bool is_ordinary;
1730       unsigned int st_shndx = this->adjust_sym_shndx(i, isym.get_st_shndx(),
1731                                                      &is_ordinary);
1732       if (is_ordinary)
1733         {
1734           gold_assert(st_shndx < out_sections.size());
1735           if (out_sections[st_shndx] == NULL)
1736             continue;
1737           st_shndx = out_sections[st_shndx]->out_shndx();
1738           if (st_shndx >= elfcpp::SHN_LORESERVE)
1739             {
1740               if (lv.needs_output_symtab_entry() && !strip_all)
1741                 symtab_xindex->add(lv.output_symtab_index(), st_shndx);
1742               if (lv.needs_output_dynsym_entry())
1743                 dynsym_xindex->add(lv.output_dynsym_index(), st_shndx);
1744               st_shndx = elfcpp::SHN_XINDEX;
1745             }
1746         }
1747
1748       // Write the symbol to the output symbol table.
1749       if (!strip_all && lv.needs_output_symtab_entry())
1750         {
1751           elfcpp::Sym_write<size, big_endian> osym(ov);
1752
1753           gold_assert(isym.get_st_name() < strtab_size);
1754           const char* name = pnames + isym.get_st_name();
1755           osym.put_st_name(sympool->get_offset(name));
1756           osym.put_st_value(this->local_values_[i].value(this, 0));
1757           osym.put_st_size(isym.get_st_size());
1758           osym.put_st_info(isym.get_st_info());
1759           osym.put_st_other(isym.get_st_other());
1760           osym.put_st_shndx(st_shndx);
1761
1762           ov += sym_size;
1763         }
1764
1765       // Write the symbol to the output dynamic symbol table.
1766       if (lv.needs_output_dynsym_entry())
1767         {
1768           gold_assert(dyn_ov < dyn_oview + dyn_output_size);
1769           elfcpp::Sym_write<size, big_endian> osym(dyn_ov);
1770
1771           gold_assert(isym.get_st_name() < strtab_size);
1772           const char* name = pnames + isym.get_st_name();
1773           osym.put_st_name(dynpool->get_offset(name));
1774           osym.put_st_value(this->local_values_[i].value(this, 0));
1775           osym.put_st_size(isym.get_st_size());
1776           osym.put_st_info(isym.get_st_info());
1777           osym.put_st_other(isym.get_st_other());
1778           osym.put_st_shndx(st_shndx);
1779
1780           dyn_ov += sym_size;
1781         }
1782     }
1783
1784
1785   if (output_size > 0)
1786     {
1787       gold_assert(ov - oview == output_size);
1788       of->write_output_view(this->local_symbol_offset_, output_size, oview);
1789     }
1790
1791   if (dyn_output_size > 0)
1792     {
1793       gold_assert(dyn_ov - dyn_oview == dyn_output_size);
1794       of->write_output_view(this->local_dynsym_offset_, dyn_output_size,
1795                             dyn_oview);
1796     }
1797 }
1798
1799 // Set *INFO to symbolic information about the offset OFFSET in the
1800 // section SHNDX.  Return true if we found something, false if we
1801 // found nothing.
1802
1803 template<int size, bool big_endian>
1804 bool
1805 Sized_relobj<size, big_endian>::get_symbol_location_info(
1806     unsigned int shndx,
1807     off_t offset,
1808     Symbol_location_info* info)
1809 {
1810   if (this->symtab_shndx_ == 0)
1811     return false;
1812
1813   section_size_type symbols_size;
1814   const unsigned char* symbols = this->section_contents(this->symtab_shndx_,
1815                                                         &symbols_size,
1816                                                         false);
1817
1818   unsigned int symbol_names_shndx =
1819     this->adjust_shndx(this->section_link(this->symtab_shndx_));
1820   section_size_type names_size;
1821   const unsigned char* symbol_names_u =
1822     this->section_contents(symbol_names_shndx, &names_size, false);
1823   const char* symbol_names = reinterpret_cast<const char*>(symbol_names_u);
1824
1825   const int sym_size = This::sym_size;
1826   const size_t count = symbols_size / sym_size;
1827
1828   const unsigned char* p = symbols;
1829   for (size_t i = 0; i < count; ++i, p += sym_size)
1830     {
1831       elfcpp::Sym<size, big_endian> sym(p);
1832
1833       if (sym.get_st_type() == elfcpp::STT_FILE)
1834         {
1835           if (sym.get_st_name() >= names_size)
1836             info->source_file = "(invalid)";
1837           else
1838             info->source_file = symbol_names + sym.get_st_name();
1839           continue;
1840         }
1841
1842       bool is_ordinary;
1843       unsigned int st_shndx = this->adjust_sym_shndx(i, sym.get_st_shndx(),
1844                                                      &is_ordinary);
1845       if (is_ordinary
1846           && st_shndx == shndx
1847           && static_cast<off_t>(sym.get_st_value()) <= offset
1848           && (static_cast<off_t>(sym.get_st_value() + sym.get_st_size())
1849               > offset))
1850         {
1851           if (sym.get_st_name() > names_size)
1852             info->enclosing_symbol_name = "(invalid)";
1853           else
1854             {
1855               info->enclosing_symbol_name = symbol_names + sym.get_st_name();
1856               if (parameters->options().do_demangle())
1857                 {
1858                   char* demangled_name = cplus_demangle(
1859                       info->enclosing_symbol_name.c_str(),
1860                       DMGL_ANSI | DMGL_PARAMS);
1861                   if (demangled_name != NULL)
1862                     {
1863                       info->enclosing_symbol_name.assign(demangled_name);
1864                       free(demangled_name);
1865                     }
1866                 }
1867             }
1868           return true;
1869         }
1870     }
1871
1872   return false;
1873 }
1874
1875 // Look for a kept section corresponding to the given discarded section,
1876 // and return its output address.  This is used only for relocations in
1877 // debugging sections.  If we can't find the kept section, return 0.
1878
1879 template<int size, bool big_endian>
1880 typename Sized_relobj<size, big_endian>::Address
1881 Sized_relobj<size, big_endian>::map_to_kept_section(
1882     unsigned int shndx,
1883     bool* found) const
1884 {
1885   Kept_comdat_section *kept = this->get_kept_comdat_section(shndx);
1886   if (kept != NULL)
1887     {
1888       gold_assert(kept->object_ != NULL);
1889       *found = true;
1890       Output_section* os = kept->object_->output_section(kept->shndx_);
1891       Address offset = kept->object_->get_output_section_offset(kept->shndx_);
1892       if (os != NULL && offset != invalid_address)
1893         return os->address() + offset;
1894     }
1895   *found = false;
1896   return 0;
1897 }
1898
1899 // Get symbol counts.
1900
1901 template<int size, bool big_endian>
1902 void
1903 Sized_relobj<size, big_endian>::do_get_global_symbol_counts(
1904     const Symbol_table*,
1905     size_t* defined,
1906     size_t* used) const
1907 {
1908   *defined = this->defined_count_;
1909   size_t count = 0;
1910   for (Symbols::const_iterator p = this->symbols_.begin();
1911        p != this->symbols_.end();
1912        ++p)
1913     if (*p != NULL
1914         && (*p)->source() == Symbol::FROM_OBJECT
1915         && (*p)->object() == this
1916         && (*p)->is_defined())
1917       ++count;
1918   *used = count;
1919 }
1920
1921 // Input_objects methods.
1922
1923 // Add a regular relocatable object to the list.  Return false if this
1924 // object should be ignored.
1925
1926 bool
1927 Input_objects::add_object(Object* obj)
1928 {
1929   // Set the global target from the first object file we recognize.
1930   Target* target = obj->target();
1931   if (!parameters->target_valid())
1932     set_parameters_target(target);
1933   else if (target != &parameters->target())
1934     {
1935       obj->error(_("incompatible target"));
1936       return false;
1937     }
1938
1939   // Print the filename if the -t/--trace option is selected.
1940   if (parameters->options().trace())
1941     gold_info("%s", obj->name().c_str());
1942
1943   if (!obj->is_dynamic())
1944     this->relobj_list_.push_back(static_cast<Relobj*>(obj));
1945   else
1946     {
1947       // See if this is a duplicate SONAME.
1948       Dynobj* dynobj = static_cast<Dynobj*>(obj);
1949       const char* soname = dynobj->soname();
1950
1951       std::pair<Unordered_set<std::string>::iterator, bool> ins =
1952         this->sonames_.insert(soname);
1953       if (!ins.second)
1954         {
1955           // We have already seen a dynamic object with this soname.
1956           return false;
1957         }
1958
1959       this->dynobj_list_.push_back(dynobj);
1960     }
1961
1962   // Add this object to the cross-referencer if requested.
1963   if (parameters->options().user_set_print_symbol_counts())
1964     {
1965       if (this->cref_ == NULL)
1966         this->cref_ = new Cref();
1967       this->cref_->add_object(obj);
1968     }
1969
1970   return true;
1971 }
1972
1973 // For each dynamic object, record whether we've seen all of its
1974 // explicit dependencies.
1975
1976 void
1977 Input_objects::check_dynamic_dependencies() const
1978 {
1979   for (Dynobj_list::const_iterator p = this->dynobj_list_.begin();
1980        p != this->dynobj_list_.end();
1981        ++p)
1982     {
1983       const Dynobj::Needed& needed((*p)->needed());
1984       bool found_all = true;
1985       for (Dynobj::Needed::const_iterator pneeded = needed.begin();
1986            pneeded != needed.end();
1987            ++pneeded)
1988         {
1989           if (this->sonames_.find(*pneeded) == this->sonames_.end())
1990             {
1991               found_all = false;
1992               break;
1993             }
1994         }
1995       (*p)->set_has_unknown_needed_entries(!found_all);
1996     }
1997 }
1998
1999 // Start processing an archive.
2000
2001 void
2002 Input_objects::archive_start(Archive* archive)
2003 {
2004   if (parameters->options().user_set_print_symbol_counts())
2005     {
2006       if (this->cref_ == NULL)
2007         this->cref_ = new Cref();
2008       this->cref_->add_archive_start(archive);
2009     }
2010 }
2011
2012 // Stop processing an archive.
2013
2014 void
2015 Input_objects::archive_stop(Archive* archive)
2016 {
2017   if (parameters->options().user_set_print_symbol_counts())
2018     this->cref_->add_archive_stop(archive);
2019 }
2020
2021 // Print symbol counts
2022
2023 void
2024 Input_objects::print_symbol_counts(const Symbol_table* symtab) const
2025 {
2026   if (parameters->options().user_set_print_symbol_counts()
2027       && this->cref_ != NULL)
2028     this->cref_->print_symbol_counts(symtab);
2029 }
2030
2031 // Relocate_info methods.
2032
2033 // Return a string describing the location of a relocation.  This is
2034 // only used in error messages.
2035
2036 template<int size, bool big_endian>
2037 std::string
2038 Relocate_info<size, big_endian>::location(size_t, off_t offset) const
2039 {
2040   // See if we can get line-number information from debugging sections.
2041   std::string filename;
2042   std::string file_and_lineno;   // Better than filename-only, if available.
2043
2044   Sized_dwarf_line_info<size, big_endian> line_info(this->object);
2045   // This will be "" if we failed to parse the debug info for any reason.
2046   file_and_lineno = line_info.addr2line(this->data_shndx, offset);
2047
2048   std::string ret(this->object->name());
2049   ret += ':';
2050   Symbol_location_info info;
2051   if (this->object->get_symbol_location_info(this->data_shndx, offset, &info))
2052     {
2053       ret += " in function ";
2054       ret += info.enclosing_symbol_name;
2055       ret += ":";
2056       filename = info.source_file;
2057     }
2058
2059   if (!file_and_lineno.empty())
2060     ret += file_and_lineno;
2061   else
2062     {
2063       if (!filename.empty())
2064         ret += filename;
2065       ret += "(";
2066       ret += this->object->section_name(this->data_shndx);
2067       char buf[100];
2068       // Offsets into sections have to be positive.
2069       snprintf(buf, sizeof(buf), "+0x%lx", static_cast<long>(offset));
2070       ret += buf;
2071       ret += ")";
2072     }
2073   return ret;
2074 }
2075
2076 } // End namespace gold.
2077
2078 namespace
2079 {
2080
2081 using namespace gold;
2082
2083 // Read an ELF file with the header and return the appropriate
2084 // instance of Object.
2085
2086 template<int size, bool big_endian>
2087 Object*
2088 make_elf_sized_object(const std::string& name, Input_file* input_file,
2089                       off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr)
2090 {
2091   int et = ehdr.get_e_type();
2092   if (et == elfcpp::ET_REL)
2093     {
2094       Sized_relobj<size, big_endian>* obj =
2095         new Sized_relobj<size, big_endian>(name, input_file, offset, ehdr);
2096       obj->setup(ehdr);
2097       return obj;
2098     }
2099   else if (et == elfcpp::ET_DYN)
2100     {
2101       Sized_dynobj<size, big_endian>* obj =
2102         new Sized_dynobj<size, big_endian>(name, input_file, offset, ehdr);
2103       obj->setup(ehdr);
2104       return obj;
2105     }
2106   else
2107     {
2108       gold_error(_("%s: unsupported ELF file type %d"),
2109                  name.c_str(), et);
2110       return NULL;
2111     }
2112 }
2113
2114 } // End anonymous namespace.
2115
2116 namespace gold
2117 {
2118
2119 // Return whether INPUT_FILE is an ELF object.
2120
2121 bool
2122 is_elf_object(Input_file* input_file, off_t offset,
2123               const unsigned char** start, int *read_size)
2124 {
2125   off_t filesize = input_file->file().filesize();
2126   int want = elfcpp::Elf_sizes<64>::ehdr_size;
2127   if (filesize - offset < want)
2128     want = filesize - offset;
2129
2130   const unsigned char* p = input_file->file().get_view(offset, 0, want,
2131                                                        true, false);
2132   *start = p;
2133   *read_size = want;
2134
2135   if (want < 4)
2136     return false;
2137
2138   static unsigned char elfmagic[4] =
2139     {
2140       elfcpp::ELFMAG0, elfcpp::ELFMAG1,
2141       elfcpp::ELFMAG2, elfcpp::ELFMAG3
2142     };
2143   return memcmp(p, elfmagic, 4) == 0;
2144 }
2145
2146 // Read an ELF file and return the appropriate instance of Object.
2147
2148 Object*
2149 make_elf_object(const std::string& name, Input_file* input_file, off_t offset,
2150                 const unsigned char* p, section_offset_type bytes,
2151                 bool* punconfigured)
2152 {
2153   if (punconfigured != NULL)
2154     *punconfigured = false;
2155
2156   if (bytes < elfcpp::EI_NIDENT)
2157     {
2158       gold_error(_("%s: ELF file too short"), name.c_str());
2159       return NULL;
2160     }
2161
2162   int v = p[elfcpp::EI_VERSION];
2163   if (v != elfcpp::EV_CURRENT)
2164     {
2165       if (v == elfcpp::EV_NONE)
2166         gold_error(_("%s: invalid ELF version 0"), name.c_str());
2167       else
2168         gold_error(_("%s: unsupported ELF version %d"), name.c_str(), v);
2169       return NULL;
2170     }
2171
2172   int c = p[elfcpp::EI_CLASS];
2173   if (c == elfcpp::ELFCLASSNONE)
2174     {
2175       gold_error(_("%s: invalid ELF class 0"), name.c_str());
2176       return NULL;
2177     }
2178   else if (c != elfcpp::ELFCLASS32
2179            && c != elfcpp::ELFCLASS64)
2180     {
2181       gold_error(_("%s: unsupported ELF class %d"), name.c_str(), c);
2182       return NULL;
2183     }
2184
2185   int d = p[elfcpp::EI_DATA];
2186   if (d == elfcpp::ELFDATANONE)
2187     {
2188       gold_error(_("%s: invalid ELF data encoding"), name.c_str());
2189       return NULL;
2190     }
2191   else if (d != elfcpp::ELFDATA2LSB
2192            && d != elfcpp::ELFDATA2MSB)
2193     {
2194       gold_error(_("%s: unsupported ELF data encoding %d"), name.c_str(), d);
2195       return NULL;
2196     }
2197
2198   bool big_endian = d == elfcpp::ELFDATA2MSB;
2199
2200   if (c == elfcpp::ELFCLASS32)
2201     {
2202       if (bytes < elfcpp::Elf_sizes<32>::ehdr_size)
2203         {
2204           gold_error(_("%s: ELF file too short"), name.c_str());
2205           return NULL;
2206         }
2207       if (big_endian)
2208         {
2209 #ifdef HAVE_TARGET_32_BIG
2210           elfcpp::Ehdr<32, true> ehdr(p);
2211           return make_elf_sized_object<32, true>(name, input_file,
2212                                                  offset, ehdr);
2213 #else
2214           if (punconfigured != NULL)
2215             *punconfigured = true;
2216           else
2217             gold_error(_("%s: not configured to support "
2218                          "32-bit big-endian object"),
2219                        name.c_str());
2220           return NULL;
2221 #endif
2222         }
2223       else
2224         {
2225 #ifdef HAVE_TARGET_32_LITTLE
2226           elfcpp::Ehdr<32, false> ehdr(p);
2227           return make_elf_sized_object<32, false>(name, input_file,
2228                                                   offset, ehdr);
2229 #else
2230           if (punconfigured != NULL)
2231             *punconfigured = true;
2232           else
2233             gold_error(_("%s: not configured to support "
2234                          "32-bit little-endian object"),
2235                        name.c_str());
2236           return NULL;
2237 #endif
2238         }
2239     }
2240   else
2241     {
2242       if (bytes < elfcpp::Elf_sizes<64>::ehdr_size)
2243         {
2244           gold_error(_("%s: ELF file too short"), name.c_str());
2245           return NULL;
2246         }
2247       if (big_endian)
2248         {
2249 #ifdef HAVE_TARGET_64_BIG
2250           elfcpp::Ehdr<64, true> ehdr(p);
2251           return make_elf_sized_object<64, true>(name, input_file,
2252                                                  offset, ehdr);
2253 #else
2254           if (punconfigured != NULL)
2255             *punconfigured = true;
2256           else
2257             gold_error(_("%s: not configured to support "
2258                          "64-bit big-endian object"),
2259                        name.c_str());
2260           return NULL;
2261 #endif
2262         }
2263       else
2264         {
2265 #ifdef HAVE_TARGET_64_LITTLE
2266           elfcpp::Ehdr<64, false> ehdr(p);
2267           return make_elf_sized_object<64, false>(name, input_file,
2268                                                   offset, ehdr);
2269 #else
2270           if (punconfigured != NULL)
2271             *punconfigured = true;
2272           else
2273             gold_error(_("%s: not configured to support "
2274                          "64-bit little-endian object"),
2275                        name.c_str());
2276           return NULL;
2277 #endif
2278         }
2279     }
2280 }
2281
2282 // Instantiate the templates we need.
2283
2284 #ifdef HAVE_TARGET_32_LITTLE
2285 template
2286 void
2287 Object::read_section_data<32, false>(elfcpp::Elf_file<32, false, Object>*,
2288                                      Read_symbols_data*);
2289 #endif
2290
2291 #ifdef HAVE_TARGET_32_BIG
2292 template
2293 void
2294 Object::read_section_data<32, true>(elfcpp::Elf_file<32, true, Object>*,
2295                                     Read_symbols_data*);
2296 #endif
2297
2298 #ifdef HAVE_TARGET_64_LITTLE
2299 template
2300 void
2301 Object::read_section_data<64, false>(elfcpp::Elf_file<64, false, Object>*,
2302                                      Read_symbols_data*);
2303 #endif
2304
2305 #ifdef HAVE_TARGET_64_BIG
2306 template
2307 void
2308 Object::read_section_data<64, true>(elfcpp::Elf_file<64, true, Object>*,
2309                                     Read_symbols_data*);
2310 #endif
2311
2312 #ifdef HAVE_TARGET_32_LITTLE
2313 template
2314 class Sized_relobj<32, false>;
2315 #endif
2316
2317 #ifdef HAVE_TARGET_32_BIG
2318 template
2319 class Sized_relobj<32, true>;
2320 #endif
2321
2322 #ifdef HAVE_TARGET_64_LITTLE
2323 template
2324 class Sized_relobj<64, false>;
2325 #endif
2326
2327 #ifdef HAVE_TARGET_64_BIG
2328 template
2329 class Sized_relobj<64, true>;
2330 #endif
2331
2332 #ifdef HAVE_TARGET_32_LITTLE
2333 template
2334 struct Relocate_info<32, false>;
2335 #endif
2336
2337 #ifdef HAVE_TARGET_32_BIG
2338 template
2339 struct Relocate_info<32, true>;
2340 #endif
2341
2342 #ifdef HAVE_TARGET_64_LITTLE
2343 template
2344 struct Relocate_info<64, false>;
2345 #endif
2346
2347 #ifdef HAVE_TARGET_64_BIG
2348 template
2349 struct Relocate_info<64, true>;
2350 #endif
2351
2352 } // End namespace gold.