Home | History | Annotate | Download | only in gold
      1 // script-sections.cc -- linker script SECTIONS for gold
      2 
      3 // Copyright (C) 2008-2014 Free Software Foundation, Inc.
      4 // Written by Ian Lance Taylor <iant (at) 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 <cstring>
     26 #include <algorithm>
     27 #include <list>
     28 #include <map>
     29 #include <string>
     30 #include <vector>
     31 #include <fnmatch.h>
     32 
     33 #include "parameters.h"
     34 #include "object.h"
     35 #include "layout.h"
     36 #include "output.h"
     37 #include "script-c.h"
     38 #include "script.h"
     39 #include "script-sections.h"
     40 
     41 // Support for the SECTIONS clause in linker scripts.
     42 
     43 namespace gold
     44 {
     45 
     46 // A region of memory.
     47 class Memory_region
     48 {
     49  public:
     50   Memory_region(const char* name, size_t namelen, unsigned int attributes,
     51 		Expression* start, Expression* length)
     52     : name_(name, namelen),
     53       attributes_(attributes),
     54       start_(start),
     55       length_(length),
     56       current_offset_(0),
     57       vma_sections_(),
     58       lma_sections_(),
     59       last_section_(NULL)
     60   { }
     61 
     62   // Return the name of this region.
     63   const std::string&
     64   name() const
     65   { return this->name_; }
     66 
     67   // Return the start address of this region.
     68   Expression*
     69   start_address() const
     70   { return this->start_; }
     71 
     72   // Return the length of this region.
     73   Expression*
     74   length() const
     75   { return this->length_; }
     76 
     77   // Print the region (when debugging).
     78   void
     79   print(FILE*) const;
     80 
     81   // Return true if <name,namelen> matches this region.
     82   bool
     83   name_match(const char* name, size_t namelen)
     84   {
     85     return (this->name_.length() == namelen
     86 	    && strncmp(this->name_.c_str(), name, namelen) == 0);
     87   }
     88 
     89   Expression*
     90   get_current_address() const
     91   {
     92     return
     93       script_exp_binary_add(this->start_,
     94 			    script_exp_integer(this->current_offset_));
     95   }
     96 
     97   void
     98   increment_offset(std::string section_name, uint64_t amount,
     99 		   const Symbol_table* symtab, const Layout* layout)
    100   {
    101     this->current_offset_ += amount;
    102 
    103     if (this->current_offset_
    104 	> this->length_->eval(symtab, layout, false))
    105       gold_error(_("section %s overflows end of region %s"),
    106 		 section_name.c_str(), this->name_.c_str());
    107   }
    108 
    109   // Returns true iff there is room left in this region
    110   // for AMOUNT more bytes of data.
    111   bool
    112   has_room_for(const Symbol_table* symtab, const Layout* layout,
    113 	       uint64_t amount) const
    114   {
    115     return (this->current_offset_ + amount
    116 	    < this->length_->eval(symtab, layout, false));
    117   }
    118 
    119   // Return true if the provided section flags
    120   // are compatible with this region's attributes.
    121   bool
    122   attributes_compatible(elfcpp::Elf_Xword flags, elfcpp::Elf_Xword type) const;
    123 
    124   void
    125   add_section(Output_section_definition* sec, bool vma)
    126   {
    127     if (vma)
    128       this->vma_sections_.push_back(sec);
    129     else
    130       this->lma_sections_.push_back(sec);
    131   }
    132 
    133   typedef std::vector<Output_section_definition*> Section_list;
    134 
    135   // Return the start of the list of sections
    136   // whose VMAs are taken from this region.
    137   Section_list::const_iterator
    138   get_vma_section_list_start() const
    139   { return this->vma_sections_.begin(); }
    140 
    141   // Return the start of the list of sections
    142   // whose LMAs are taken from this region.
    143   Section_list::const_iterator
    144   get_lma_section_list_start() const
    145   { return this->lma_sections_.begin(); }
    146 
    147   // Return the end of the list of sections
    148   // whose VMAs are taken from this region.
    149   Section_list::const_iterator
    150   get_vma_section_list_end() const
    151   { return this->vma_sections_.end(); }
    152 
    153   // Return the end of the list of sections
    154   // whose LMAs are taken from this region.
    155   Section_list::const_iterator
    156   get_lma_section_list_end() const
    157   { return this->lma_sections_.end(); }
    158 
    159   Output_section_definition*
    160   get_last_section() const
    161   { return this->last_section_; }
    162 
    163   void
    164   set_last_section(Output_section_definition* sec)
    165   { this->last_section_ = sec; }
    166 
    167  private:
    168 
    169   std::string name_;
    170   unsigned int attributes_;
    171   Expression* start_;
    172   Expression* length_;
    173   // The offset to the next free byte in the region.
    174   // Note - for compatibility with GNU LD we only maintain one offset
    175   // regardless of whether the region is being used for VMA values,
    176   // LMA values, or both.
    177   uint64_t current_offset_;
    178   // A list of sections whose VMAs are set inside this region.
    179   Section_list vma_sections_;
    180   // A list of sections whose LMAs are set inside this region.
    181   Section_list lma_sections_;
    182   // The latest section to make use of this region.
    183   Output_section_definition* last_section_;
    184 };
    185 
    186 // Return true if the provided section flags
    187 // are compatible with this region's attributes.
    188 
    189 bool
    190 Memory_region::attributes_compatible(elfcpp::Elf_Xword flags,
    191 				     elfcpp::Elf_Xword type) const
    192 {
    193   unsigned int attrs = this->attributes_;
    194 
    195   // No attributes means that this region is not compatible with anything.
    196   if (attrs == 0)
    197     return false;
    198 
    199   bool match = true;
    200   do
    201     {
    202       switch (attrs & - attrs)
    203 	{
    204 	case MEM_EXECUTABLE:
    205 	  if ((flags & elfcpp::SHF_EXECINSTR) == 0)
    206 	    match = false;
    207 	  break;
    208 
    209 	case MEM_WRITEABLE:
    210 	  if ((flags & elfcpp::SHF_WRITE) == 0)
    211 	    match = false;
    212 	  break;
    213 
    214 	case MEM_READABLE:
    215 	  // All sections are presumed readable.
    216 	  break;
    217 
    218 	case MEM_ALLOCATABLE:
    219 	  if ((flags & elfcpp::SHF_ALLOC) == 0)
    220 	    match = false;
    221 	  break;
    222 
    223 	case MEM_INITIALIZED:
    224 	  if ((type & elfcpp::SHT_NOBITS) != 0)
    225 	    match = false;
    226 	  break;
    227 	}
    228       attrs &= ~ (attrs & - attrs);
    229     }
    230   while (attrs != 0);
    231 
    232   return match;
    233 }
    234 
    235 // Print a memory region.
    236 
    237 void
    238 Memory_region::print(FILE* f) const
    239 {
    240   fprintf(f, "  %s", this->name_.c_str());
    241 
    242   unsigned int attrs = this->attributes_;
    243   if (attrs != 0)
    244     {
    245       fprintf(f, " (");
    246       do
    247 	{
    248 	  switch (attrs & - attrs)
    249 	    {
    250 	    case MEM_EXECUTABLE:  fputc('x', f); break;
    251 	    case MEM_WRITEABLE:   fputc('w', f); break;
    252 	    case MEM_READABLE:    fputc('r', f); break;
    253 	    case MEM_ALLOCATABLE: fputc('a', f); break;
    254 	    case MEM_INITIALIZED: fputc('i', f); break;
    255 	    default:
    256 	      gold_unreachable();
    257 	    }
    258 	  attrs &= ~ (attrs & - attrs);
    259 	}
    260       while (attrs != 0);
    261       fputc(')', f);
    262     }
    263 
    264   fprintf(f, " : origin = ");
    265   this->start_->print(f);
    266   fprintf(f, ", length = ");
    267   this->length_->print(f);
    268   fprintf(f, "\n");
    269 }
    270 
    271 // Manage orphan sections.  This is intended to be largely compatible
    272 // with the GNU linker.  The Linux kernel implicitly relies on
    273 // something similar to the GNU linker's orphan placement.  We
    274 // originally used a simpler scheme here, but it caused the kernel
    275 // build to fail, and was also rather inefficient.
    276 
    277 class Orphan_section_placement
    278 {
    279  private:
    280   typedef Script_sections::Elements_iterator Elements_iterator;
    281 
    282  public:
    283   Orphan_section_placement();
    284 
    285   // Handle an output section during initialization of this mapping.
    286   void
    287   output_section_init(const std::string& name, Output_section*,
    288 		      Elements_iterator location);
    289 
    290   // Initialize the last location.
    291   void
    292   last_init(Elements_iterator location);
    293 
    294   // Set *PWHERE to the address of an iterator pointing to the
    295   // location to use for an orphan section.  Return true if the
    296   // iterator has a value, false otherwise.
    297   bool
    298   find_place(Output_section*, Elements_iterator** pwhere);
    299 
    300   // Return the iterator being used for sections at the very end of
    301   // the linker script.
    302   Elements_iterator
    303   last_place() const;
    304 
    305  private:
    306   // The places that we specifically recognize.  This list is copied
    307   // from the GNU linker.
    308   enum Place_index
    309   {
    310     PLACE_TEXT,
    311     PLACE_RODATA,
    312     PLACE_DATA,
    313     PLACE_TLS,
    314     PLACE_TLS_BSS,
    315     PLACE_BSS,
    316     PLACE_REL,
    317     PLACE_INTERP,
    318     PLACE_NONALLOC,
    319     PLACE_LAST,
    320     PLACE_MAX
    321   };
    322 
    323   // The information we keep for a specific place.
    324   struct Place
    325   {
    326     // The name of sections for this place.
    327     const char* name;
    328     // Whether we have a location for this place.
    329     bool have_location;
    330     // The iterator for this place.
    331     Elements_iterator location;
    332   };
    333 
    334   // Initialize one place element.
    335   void
    336   initialize_place(Place_index, const char*);
    337 
    338   // The places.
    339   Place places_[PLACE_MAX];
    340   // True if this is the first call to output_section_init.
    341   bool first_init_;
    342 };
    343 
    344 // Initialize Orphan_section_placement.
    345 
    346 Orphan_section_placement::Orphan_section_placement()
    347   : first_init_(true)
    348 {
    349   this->initialize_place(PLACE_TEXT, ".text");
    350   this->initialize_place(PLACE_RODATA, ".rodata");
    351   this->initialize_place(PLACE_DATA, ".data");
    352   this->initialize_place(PLACE_TLS, NULL);
    353   this->initialize_place(PLACE_TLS_BSS, NULL);
    354   this->initialize_place(PLACE_BSS, ".bss");
    355   this->initialize_place(PLACE_REL, NULL);
    356   this->initialize_place(PLACE_INTERP, ".interp");
    357   this->initialize_place(PLACE_NONALLOC, NULL);
    358   this->initialize_place(PLACE_LAST, NULL);
    359 }
    360 
    361 // Initialize one place element.
    362 
    363 void
    364 Orphan_section_placement::initialize_place(Place_index index, const char* name)
    365 {
    366   this->places_[index].name = name;
    367   this->places_[index].have_location = false;
    368 }
    369 
    370 // While initializing the Orphan_section_placement information, this
    371 // is called once for each output section named in the linker script.
    372 // If we found an output section during the link, it will be passed in
    373 // OS.
    374 
    375 void
    376 Orphan_section_placement::output_section_init(const std::string& name,
    377 					      Output_section* os,
    378 					      Elements_iterator location)
    379 {
    380   bool first_init = this->first_init_;
    381   this->first_init_ = false;
    382 
    383   for (int i = 0; i < PLACE_MAX; ++i)
    384     {
    385       if (this->places_[i].name != NULL && this->places_[i].name == name)
    386 	{
    387 	  if (this->places_[i].have_location)
    388 	    {
    389 	      // We have already seen a section with this name.
    390 	      return;
    391 	    }
    392 
    393 	  this->places_[i].location = location;
    394 	  this->places_[i].have_location = true;
    395 
    396 	  // If we just found the .bss section, restart the search for
    397 	  // an unallocated section.  This follows the GNU linker's
    398 	  // behaviour.
    399 	  if (i == PLACE_BSS)
    400 	    this->places_[PLACE_NONALLOC].have_location = false;
    401 
    402 	  return;
    403 	}
    404     }
    405 
    406   // Relocation sections.
    407   if (!this->places_[PLACE_REL].have_location
    408       && os != NULL
    409       && (os->type() == elfcpp::SHT_REL || os->type() == elfcpp::SHT_RELA)
    410       && (os->flags() & elfcpp::SHF_ALLOC) != 0)
    411     {
    412       this->places_[PLACE_REL].location = location;
    413       this->places_[PLACE_REL].have_location = true;
    414     }
    415 
    416   // We find the location for unallocated sections by finding the
    417   // first debugging or comment section after the BSS section (if
    418   // there is one).
    419   if (!this->places_[PLACE_NONALLOC].have_location
    420       && (name == ".comment" || Layout::is_debug_info_section(name.c_str())))
    421     {
    422       // We add orphan sections after the location in PLACES_.  We
    423       // want to store unallocated sections before LOCATION.  If this
    424       // is the very first section, we can't use it.
    425       if (!first_init)
    426 	{
    427 	  --location;
    428 	  this->places_[PLACE_NONALLOC].location = location;
    429 	  this->places_[PLACE_NONALLOC].have_location = true;
    430 	}
    431     }
    432 }
    433 
    434 // Initialize the last location.
    435 
    436 void
    437 Orphan_section_placement::last_init(Elements_iterator location)
    438 {
    439   this->places_[PLACE_LAST].location = location;
    440   this->places_[PLACE_LAST].have_location = true;
    441 }
    442 
    443 // Set *PWHERE to the address of an iterator pointing to the location
    444 // to use for an orphan section.  Return true if the iterator has a
    445 // value, false otherwise.
    446 
    447 bool
    448 Orphan_section_placement::find_place(Output_section* os,
    449 				     Elements_iterator** pwhere)
    450 {
    451   // Figure out where OS should go.  This is based on the GNU linker
    452   // code.  FIXME: The GNU linker handles small data sections
    453   // specially, but we don't.
    454   elfcpp::Elf_Word type = os->type();
    455   elfcpp::Elf_Xword flags = os->flags();
    456   Place_index index;
    457   if ((flags & elfcpp::SHF_ALLOC) == 0
    458       && !Layout::is_debug_info_section(os->name()))
    459     index = PLACE_NONALLOC;
    460   else if ((flags & elfcpp::SHF_ALLOC) == 0)
    461     index = PLACE_LAST;
    462   else if (type == elfcpp::SHT_NOTE)
    463     index = PLACE_INTERP;
    464   else if ((flags & elfcpp::SHF_TLS) != 0)
    465     {
    466       if (type == elfcpp::SHT_NOBITS)
    467 	index = PLACE_TLS_BSS;
    468       else
    469 	index = PLACE_TLS;
    470     }
    471   else if (type == elfcpp::SHT_NOBITS)
    472     index = PLACE_BSS;
    473   else if ((flags & elfcpp::SHF_WRITE) != 0)
    474     index = PLACE_DATA;
    475   else if (type == elfcpp::SHT_REL || type == elfcpp::SHT_RELA)
    476     index = PLACE_REL;
    477   else if ((flags & elfcpp::SHF_EXECINSTR) == 0)
    478     index = PLACE_RODATA;
    479   else
    480     index = PLACE_TEXT;
    481 
    482   // If we don't have a location yet, try to find one based on a
    483   // plausible ordering of sections.
    484   if (!this->places_[index].have_location)
    485     {
    486       Place_index follow;
    487       switch (index)
    488 	{
    489 	default:
    490 	  follow = PLACE_MAX;
    491 	  break;
    492 	case PLACE_RODATA:
    493 	  follow = PLACE_TEXT;
    494 	  break;
    495 	case PLACE_BSS:
    496 	  follow = PLACE_DATA;
    497 	  break;
    498 	case PLACE_REL:
    499 	  follow = PLACE_TEXT;
    500 	  break;
    501 	case PLACE_INTERP:
    502 	  follow = PLACE_TEXT;
    503 	  break;
    504 	case PLACE_TLS:
    505 	  follow = PLACE_DATA;
    506 	  break;
    507 	case PLACE_TLS_BSS:
    508 	  follow = PLACE_TLS;
    509 	  if (!this->places_[PLACE_TLS].have_location)
    510 	    follow = PLACE_DATA;
    511 	  break;
    512 	}
    513       if (follow != PLACE_MAX && this->places_[follow].have_location)
    514 	{
    515 	  // Set the location of INDEX to the location of FOLLOW.  The
    516 	  // location of INDEX will then be incremented by the caller,
    517 	  // so anything in INDEX will continue to be after anything
    518 	  // in FOLLOW.
    519 	  this->places_[index].location = this->places_[follow].location;
    520 	  this->places_[index].have_location = true;
    521 	}
    522     }
    523 
    524   *pwhere = &this->places_[index].location;
    525   bool ret = this->places_[index].have_location;
    526 
    527   // The caller will set the location.
    528   this->places_[index].have_location = true;
    529 
    530   return ret;
    531 }
    532 
    533 // Return the iterator being used for sections at the very end of the
    534 // linker script.
    535 
    536 Orphan_section_placement::Elements_iterator
    537 Orphan_section_placement::last_place() const
    538 {
    539   gold_assert(this->places_[PLACE_LAST].have_location);
    540   return this->places_[PLACE_LAST].location;
    541 }
    542 
    543 // An element in a SECTIONS clause.
    544 
    545 class Sections_element
    546 {
    547  public:
    548   Sections_element()
    549   { }
    550 
    551   virtual ~Sections_element()
    552   { }
    553 
    554   // Return whether an output section is relro.
    555   virtual bool
    556   is_relro() const
    557   { return false; }
    558 
    559   // Record that an output section is relro.
    560   virtual void
    561   set_is_relro()
    562   { }
    563 
    564   // Create any required output sections.  The only real
    565   // implementation is in Output_section_definition.
    566   virtual void
    567   create_sections(Layout*)
    568   { }
    569 
    570   // Add any symbol being defined to the symbol table.
    571   virtual void
    572   add_symbols_to_table(Symbol_table*)
    573   { }
    574 
    575   // Finalize symbols and check assertions.
    576   virtual void
    577   finalize_symbols(Symbol_table*, const Layout*, uint64_t*)
    578   { }
    579 
    580   // Return the output section name to use for an input file name and
    581   // section name.  This only real implementation is in
    582   // Output_section_definition.
    583   virtual const char*
    584   output_section_name(const char*, const char*, Output_section***,
    585 		      Script_sections::Section_type*, bool*)
    586   { return NULL; }
    587 
    588   // Initialize OSP with an output section.
    589   virtual void
    590   orphan_section_init(Orphan_section_placement*,
    591 		      Script_sections::Elements_iterator)
    592   { }
    593 
    594   // Set section addresses.  This includes applying assignments if the
    595   // expression is an absolute value.
    596   virtual void
    597   set_section_addresses(Symbol_table*, Layout*, uint64_t*, uint64_t*,
    598 			uint64_t*)
    599   { }
    600 
    601   // Check a constraint (ONLY_IF_RO, etc.) on an output section.  If
    602   // this section is constrained, and the input sections do not match,
    603   // return the constraint, and set *POSD.
    604   virtual Section_constraint
    605   check_constraint(Output_section_definition**)
    606   { return CONSTRAINT_NONE; }
    607 
    608   // See if this is the alternate output section for a constrained
    609   // output section.  If it is, transfer the Output_section and return
    610   // true.  Otherwise return false.
    611   virtual bool
    612   alternate_constraint(Output_section_definition*, Section_constraint)
    613   { return false; }
    614 
    615   // Get the list of segments to use for an allocated section when
    616   // using a PHDRS clause.  If this is an allocated section, return
    617   // the Output_section, and set *PHDRS_LIST (the first parameter) to
    618   // the list of PHDRS to which it should be attached.  If the PHDRS
    619   // were not specified, don't change *PHDRS_LIST.  When not returning
    620   // NULL, set *ORPHAN (the second parameter) according to whether
    621   // this is an orphan section--one that is not mentioned in the
    622   // linker script.
    623   virtual Output_section*
    624   allocate_to_segment(String_list**, bool*)
    625   { return NULL; }
    626 
    627   // Look for an output section by name and return the address, the
    628   // load address, the alignment, and the size.  This is used when an
    629   // expression refers to an output section which was not actually
    630   // created.  This returns true if the section was found, false
    631   // otherwise.  The only real definition is for
    632   // Output_section_definition.
    633   virtual bool
    634   get_output_section_info(const char*, uint64_t*, uint64_t*, uint64_t*,
    635                           uint64_t*) const
    636   { return false; }
    637 
    638   // Return the associated Output_section if there is one.
    639   virtual Output_section*
    640   get_output_section() const
    641   { return NULL; }
    642 
    643   // Set the section's memory regions.
    644   virtual void
    645   set_memory_region(Memory_region*, bool)
    646   { gold_error(_("Attempt to set a memory region for a non-output section")); }
    647 
    648   // Print the element for debugging purposes.
    649   virtual void
    650   print(FILE* f) const = 0;
    651 };
    652 
    653 // An assignment in a SECTIONS clause outside of an output section.
    654 
    655 class Sections_element_assignment : public Sections_element
    656 {
    657  public:
    658   Sections_element_assignment(const char* name, size_t namelen,
    659 			      Expression* val, bool provide, bool hidden)
    660     : assignment_(name, namelen, false, val, provide, hidden)
    661   { }
    662 
    663   // Add the symbol to the symbol table.
    664   void
    665   add_symbols_to_table(Symbol_table* symtab)
    666   { this->assignment_.add_to_table(symtab); }
    667 
    668   // Finalize the symbol.
    669   void
    670   finalize_symbols(Symbol_table* symtab, const Layout* layout,
    671 		   uint64_t* dot_value)
    672   {
    673     this->assignment_.finalize_with_dot(symtab, layout, *dot_value, NULL);
    674   }
    675 
    676   // Set the section address.  There is no section here, but if the
    677   // value is absolute, we set the symbol.  This permits us to use
    678   // absolute symbols when setting dot.
    679   void
    680   set_section_addresses(Symbol_table* symtab, Layout* layout,
    681 			uint64_t* dot_value, uint64_t*, uint64_t*)
    682   {
    683     this->assignment_.set_if_absolute(symtab, layout, true, *dot_value, NULL);
    684   }
    685 
    686   // Print for debugging.
    687   void
    688   print(FILE* f) const
    689   {
    690     fprintf(f, "  ");
    691     this->assignment_.print(f);
    692   }
    693 
    694  private:
    695   Symbol_assignment assignment_;
    696 };
    697 
    698 // An assignment to the dot symbol in a SECTIONS clause outside of an
    699 // output section.
    700 
    701 class Sections_element_dot_assignment : public Sections_element
    702 {
    703  public:
    704   Sections_element_dot_assignment(Expression* val)
    705     : val_(val)
    706   { }
    707 
    708   // Finalize the symbol.
    709   void
    710   finalize_symbols(Symbol_table* symtab, const Layout* layout,
    711 		   uint64_t* dot_value)
    712   {
    713     // We ignore the section of the result because outside of an
    714     // output section definition the dot symbol is always considered
    715     // to be absolute.
    716     *dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
    717 					   NULL, NULL, NULL, false);
    718   }
    719 
    720   // Update the dot symbol while setting section addresses.
    721   void
    722   set_section_addresses(Symbol_table* symtab, Layout* layout,
    723 			uint64_t* dot_value, uint64_t* dot_alignment,
    724 			uint64_t* load_address)
    725   {
    726     *dot_value = this->val_->eval_with_dot(symtab, layout, false, *dot_value,
    727 					   NULL, NULL, dot_alignment, false);
    728     *load_address = *dot_value;
    729   }
    730 
    731   // Print for debugging.
    732   void
    733   print(FILE* f) const
    734   {
    735     fprintf(f, "  . = ");
    736     this->val_->print(f);
    737     fprintf(f, "\n");
    738   }
    739 
    740  private:
    741   Expression* val_;
    742 };
    743 
    744 // An assertion in a SECTIONS clause outside of an output section.
    745 
    746 class Sections_element_assertion : public Sections_element
    747 {
    748  public:
    749   Sections_element_assertion(Expression* check, const char* message,
    750 			     size_t messagelen)
    751     : assertion_(check, message, messagelen)
    752   { }
    753 
    754   // Check the assertion.
    755   void
    756   finalize_symbols(Symbol_table* symtab, const Layout* layout, uint64_t*)
    757   { this->assertion_.check(symtab, layout); }
    758 
    759   // Print for debugging.
    760   void
    761   print(FILE* f) const
    762   {
    763     fprintf(f, "  ");
    764     this->assertion_.print(f);
    765   }
    766 
    767  private:
    768   Script_assertion assertion_;
    769 };
    770 
    771 // An element in an output section in a SECTIONS clause.
    772 
    773 class Output_section_element
    774 {
    775  public:
    776   // A list of input sections.
    777   typedef std::list<Output_section::Input_section> Input_section_list;
    778 
    779   Output_section_element()
    780   { }
    781 
    782   virtual ~Output_section_element()
    783   { }
    784 
    785   // Return whether this element requires an output section to exist.
    786   virtual bool
    787   needs_output_section() const
    788   { return false; }
    789 
    790   // Add any symbol being defined to the symbol table.
    791   virtual void
    792   add_symbols_to_table(Symbol_table*)
    793   { }
    794 
    795   // Finalize symbols and check assertions.
    796   virtual void
    797   finalize_symbols(Symbol_table*, const Layout*, uint64_t*, Output_section**)
    798   { }
    799 
    800   // Return whether this element matches FILE_NAME and SECTION_NAME.
    801   // The only real implementation is in Output_section_element_input.
    802   virtual bool
    803   match_name(const char*, const char*, bool *) const
    804   { return false; }
    805 
    806   // Set section addresses.  This includes applying assignments if the
    807   // expression is an absolute value.
    808   virtual void
    809   set_section_addresses(Symbol_table*, Layout*, Output_section*, uint64_t,
    810 			uint64_t*, uint64_t*, Output_section**, std::string*,
    811 			Input_section_list*)
    812   { }
    813 
    814   // Print the element for debugging purposes.
    815   virtual void
    816   print(FILE* f) const = 0;
    817 
    818  protected:
    819   // Return a fill string that is LENGTH bytes long, filling it with
    820   // FILL.
    821   std::string
    822   get_fill_string(const std::string* fill, section_size_type length) const;
    823 };
    824 
    825 std::string
    826 Output_section_element::get_fill_string(const std::string* fill,
    827 					section_size_type length) const
    828 {
    829   std::string this_fill;
    830   this_fill.reserve(length);
    831   while (this_fill.length() + fill->length() <= length)
    832     this_fill += *fill;
    833   if (this_fill.length() < length)
    834     this_fill.append(*fill, 0, length - this_fill.length());
    835   return this_fill;
    836 }
    837 
    838 // A symbol assignment in an output section.
    839 
    840 class Output_section_element_assignment : public Output_section_element
    841 {
    842  public:
    843   Output_section_element_assignment(const char* name, size_t namelen,
    844 				    Expression* val, bool provide,
    845 				    bool hidden)
    846     : assignment_(name, namelen, false, val, provide, hidden)
    847   { }
    848 
    849   // Add the symbol to the symbol table.
    850   void
    851   add_symbols_to_table(Symbol_table* symtab)
    852   { this->assignment_.add_to_table(symtab); }
    853 
    854   // Finalize the symbol.
    855   void
    856   finalize_symbols(Symbol_table* symtab, const Layout* layout,
    857 		   uint64_t* dot_value, Output_section** dot_section)
    858   {
    859     this->assignment_.finalize_with_dot(symtab, layout, *dot_value,
    860 					*dot_section);
    861   }
    862 
    863   // Set the section address.  There is no section here, but if the
    864   // value is absolute, we set the symbol.  This permits us to use
    865   // absolute symbols when setting dot.
    866   void
    867   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
    868 			uint64_t, uint64_t* dot_value, uint64_t*,
    869 			Output_section** dot_section, std::string*,
    870 			Input_section_list*)
    871   {
    872     this->assignment_.set_if_absolute(symtab, layout, true, *dot_value,
    873 				      *dot_section);
    874   }
    875 
    876   // Print for debugging.
    877   void
    878   print(FILE* f) const
    879   {
    880     fprintf(f, "    ");
    881     this->assignment_.print(f);
    882   }
    883 
    884  private:
    885   Symbol_assignment assignment_;
    886 };
    887 
    888 // An assignment to the dot symbol in an output section.
    889 
    890 class Output_section_element_dot_assignment : public Output_section_element
    891 {
    892  public:
    893   Output_section_element_dot_assignment(Expression* val)
    894     : val_(val)
    895   { }
    896 
    897   // An assignment to dot within an output section is enough to force
    898   // the output section to exist.
    899   bool
    900   needs_output_section() const
    901   { return true; }
    902 
    903   // Finalize the symbol.
    904   void
    905   finalize_symbols(Symbol_table* symtab, const Layout* layout,
    906 		   uint64_t* dot_value, Output_section** dot_section)
    907   {
    908     *dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
    909 					   *dot_section, dot_section, NULL,
    910 					   true);
    911   }
    912 
    913   // Update the dot symbol while setting section addresses.
    914   void
    915   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
    916 			uint64_t, uint64_t* dot_value, uint64_t*,
    917 			Output_section** dot_section, std::string*,
    918 			Input_section_list*);
    919 
    920   // Print for debugging.
    921   void
    922   print(FILE* f) const
    923   {
    924     fprintf(f, "    . = ");
    925     this->val_->print(f);
    926     fprintf(f, "\n");
    927   }
    928 
    929  private:
    930   Expression* val_;
    931 };
    932 
    933 // Update the dot symbol while setting section addresses.
    934 
    935 void
    936 Output_section_element_dot_assignment::set_section_addresses(
    937     Symbol_table* symtab,
    938     Layout* layout,
    939     Output_section* output_section,
    940     uint64_t,
    941     uint64_t* dot_value,
    942     uint64_t* dot_alignment,
    943     Output_section** dot_section,
    944     std::string* fill,
    945     Input_section_list*)
    946 {
    947   uint64_t next_dot = this->val_->eval_with_dot(symtab, layout, false,
    948 						*dot_value, *dot_section,
    949 						dot_section, dot_alignment,
    950 						true);
    951   if (next_dot < *dot_value)
    952     gold_error(_("dot may not move backward"));
    953   if (next_dot > *dot_value && output_section != NULL)
    954     {
    955       section_size_type length = convert_to_section_size_type(next_dot
    956 							      - *dot_value);
    957       Output_section_data* posd;
    958       if (fill->empty())
    959 	posd = new Output_data_zero_fill(length, 0);
    960       else
    961 	{
    962 	  std::string this_fill = this->get_fill_string(fill, length);
    963 	  posd = new Output_data_const(this_fill, 0);
    964 	}
    965       output_section->add_output_section_data(posd);
    966       layout->new_output_section_data_from_script(posd);
    967     }
    968   *dot_value = next_dot;
    969 }
    970 
    971 // An assertion in an output section.
    972 
    973 class Output_section_element_assertion : public Output_section_element
    974 {
    975  public:
    976   Output_section_element_assertion(Expression* check, const char* message,
    977 				   size_t messagelen)
    978     : assertion_(check, message, messagelen)
    979   { }
    980 
    981   void
    982   print(FILE* f) const
    983   {
    984     fprintf(f, "    ");
    985     this->assertion_.print(f);
    986   }
    987 
    988  private:
    989   Script_assertion assertion_;
    990 };
    991 
    992 // We use a special instance of Output_section_data to handle BYTE,
    993 // SHORT, etc.  This permits forward references to symbols in the
    994 // expressions.
    995 
    996 class Output_data_expression : public Output_section_data
    997 {
    998  public:
    999   Output_data_expression(int size, bool is_signed, Expression* val,
   1000 			 const Symbol_table* symtab, const Layout* layout,
   1001 			 uint64_t dot_value, Output_section* dot_section)
   1002     : Output_section_data(size, 0, true),
   1003       is_signed_(is_signed), val_(val), symtab_(symtab),
   1004       layout_(layout), dot_value_(dot_value), dot_section_(dot_section)
   1005   { }
   1006 
   1007  protected:
   1008   // Write the data to the output file.
   1009   void
   1010   do_write(Output_file*);
   1011 
   1012   // Write the data to a buffer.
   1013   void
   1014   do_write_to_buffer(unsigned char*);
   1015 
   1016   // Write to a map file.
   1017   void
   1018   do_print_to_mapfile(Mapfile* mapfile) const
   1019   { mapfile->print_output_data(this, _("** expression")); }
   1020 
   1021  private:
   1022   template<bool big_endian>
   1023   void
   1024   endian_write_to_buffer(uint64_t, unsigned char*);
   1025 
   1026   bool is_signed_;
   1027   Expression* val_;
   1028   const Symbol_table* symtab_;
   1029   const Layout* layout_;
   1030   uint64_t dot_value_;
   1031   Output_section* dot_section_;
   1032 };
   1033 
   1034 // Write the data element to the output file.
   1035 
   1036 void
   1037 Output_data_expression::do_write(Output_file* of)
   1038 {
   1039   unsigned char* view = of->get_output_view(this->offset(), this->data_size());
   1040   this->write_to_buffer(view);
   1041   of->write_output_view(this->offset(), this->data_size(), view);
   1042 }
   1043 
   1044 // Write the data element to a buffer.
   1045 
   1046 void
   1047 Output_data_expression::do_write_to_buffer(unsigned char* buf)
   1048 {
   1049   uint64_t val = this->val_->eval_with_dot(this->symtab_, this->layout_,
   1050 					   true, this->dot_value_,
   1051 					   this->dot_section_, NULL, NULL,
   1052 					   false);
   1053 
   1054   if (parameters->target().is_big_endian())
   1055     this->endian_write_to_buffer<true>(val, buf);
   1056   else
   1057     this->endian_write_to_buffer<false>(val, buf);
   1058 }
   1059 
   1060 template<bool big_endian>
   1061 void
   1062 Output_data_expression::endian_write_to_buffer(uint64_t val,
   1063 					       unsigned char* buf)
   1064 {
   1065   switch (this->data_size())
   1066     {
   1067     case 1:
   1068       elfcpp::Swap_unaligned<8, big_endian>::writeval(buf, val);
   1069       break;
   1070     case 2:
   1071       elfcpp::Swap_unaligned<16, big_endian>::writeval(buf, val);
   1072       break;
   1073     case 4:
   1074       elfcpp::Swap_unaligned<32, big_endian>::writeval(buf, val);
   1075       break;
   1076     case 8:
   1077       if (parameters->target().get_size() == 32)
   1078 	{
   1079 	  val &= 0xffffffff;
   1080 	  if (this->is_signed_ && (val & 0x80000000) != 0)
   1081 	    val |= 0xffffffff00000000LL;
   1082 	}
   1083       elfcpp::Swap_unaligned<64, big_endian>::writeval(buf, val);
   1084       break;
   1085     default:
   1086       gold_unreachable();
   1087     }
   1088 }
   1089 
   1090 // A data item in an output section.
   1091 
   1092 class Output_section_element_data : public Output_section_element
   1093 {
   1094  public:
   1095   Output_section_element_data(int size, bool is_signed, Expression* val)
   1096     : size_(size), is_signed_(is_signed), val_(val)
   1097   { }
   1098 
   1099   // If there is a data item, then we must create an output section.
   1100   bool
   1101   needs_output_section() const
   1102   { return true; }
   1103 
   1104   // Finalize symbols--we just need to update dot.
   1105   void
   1106   finalize_symbols(Symbol_table*, const Layout*, uint64_t* dot_value,
   1107 		   Output_section**)
   1108   { *dot_value += this->size_; }
   1109 
   1110   // Store the value in the section.
   1111   void
   1112   set_section_addresses(Symbol_table*, Layout*, Output_section*, uint64_t,
   1113 			uint64_t* dot_value, uint64_t*, Output_section**,
   1114 			std::string*, Input_section_list*);
   1115 
   1116   // Print for debugging.
   1117   void
   1118   print(FILE*) const;
   1119 
   1120  private:
   1121   // The size in bytes.
   1122   int size_;
   1123   // Whether the value is signed.
   1124   bool is_signed_;
   1125   // The value.
   1126   Expression* val_;
   1127 };
   1128 
   1129 // Store the value in the section.
   1130 
   1131 void
   1132 Output_section_element_data::set_section_addresses(
   1133     Symbol_table* symtab,
   1134     Layout* layout,
   1135     Output_section* os,
   1136     uint64_t,
   1137     uint64_t* dot_value,
   1138     uint64_t*,
   1139     Output_section** dot_section,
   1140     std::string*,
   1141     Input_section_list*)
   1142 {
   1143   gold_assert(os != NULL);
   1144   Output_data_expression* expression =
   1145     new Output_data_expression(this->size_, this->is_signed_, this->val_,
   1146 			       symtab, layout, *dot_value, *dot_section);
   1147   os->add_output_section_data(expression);
   1148   layout->new_output_section_data_from_script(expression);
   1149   *dot_value += this->size_;
   1150 }
   1151 
   1152 // Print for debugging.
   1153 
   1154 void
   1155 Output_section_element_data::print(FILE* f) const
   1156 {
   1157   const char* s;
   1158   switch (this->size_)
   1159     {
   1160     case 1:
   1161       s = "BYTE";
   1162       break;
   1163     case 2:
   1164       s = "SHORT";
   1165       break;
   1166     case 4:
   1167       s = "LONG";
   1168       break;
   1169     case 8:
   1170       if (this->is_signed_)
   1171 	s = "SQUAD";
   1172       else
   1173 	s = "QUAD";
   1174       break;
   1175     default:
   1176       gold_unreachable();
   1177     }
   1178   fprintf(f, "    %s(", s);
   1179   this->val_->print(f);
   1180   fprintf(f, ")\n");
   1181 }
   1182 
   1183 // A fill value setting in an output section.
   1184 
   1185 class Output_section_element_fill : public Output_section_element
   1186 {
   1187  public:
   1188   Output_section_element_fill(Expression* val)
   1189     : val_(val)
   1190   { }
   1191 
   1192   // Update the fill value while setting section addresses.
   1193   void
   1194   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
   1195 			uint64_t, uint64_t* dot_value, uint64_t*,
   1196 			Output_section** dot_section,
   1197 			std::string* fill, Input_section_list*)
   1198   {
   1199     Output_section* fill_section;
   1200     uint64_t fill_val = this->val_->eval_with_dot(symtab, layout, false,
   1201 						  *dot_value, *dot_section,
   1202 						  &fill_section, NULL, false);
   1203     if (fill_section != NULL)
   1204       gold_warning(_("fill value is not absolute"));
   1205     // FIXME: The GNU linker supports fill values of arbitrary length.
   1206     unsigned char fill_buff[4];
   1207     elfcpp::Swap_unaligned<32, true>::writeval(fill_buff, fill_val);
   1208     fill->assign(reinterpret_cast<char*>(fill_buff), 4);
   1209   }
   1210 
   1211   // Print for debugging.
   1212   void
   1213   print(FILE* f) const
   1214   {
   1215     fprintf(f, "    FILL(");
   1216     this->val_->print(f);
   1217     fprintf(f, ")\n");
   1218   }
   1219 
   1220  private:
   1221   // The new fill value.
   1222   Expression* val_;
   1223 };
   1224 
   1225 // An input section specification in an output section
   1226 
   1227 class Output_section_element_input : public Output_section_element
   1228 {
   1229  public:
   1230   Output_section_element_input(const Input_section_spec* spec, bool keep);
   1231 
   1232   // Finalize symbols--just update the value of the dot symbol.
   1233   void
   1234   finalize_symbols(Symbol_table*, const Layout*, uint64_t* dot_value,
   1235 		   Output_section** dot_section)
   1236   {
   1237     *dot_value = this->final_dot_value_;
   1238     *dot_section = this->final_dot_section_;
   1239   }
   1240 
   1241   // See whether we match FILE_NAME and SECTION_NAME as an input section.
   1242   // If we do then also indicate whether the section should be KEPT.
   1243   bool
   1244   match_name(const char* file_name, const char* section_name, bool* keep) const;
   1245 
   1246   // Set the section address.
   1247   void
   1248   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
   1249 			uint64_t subalign, uint64_t* dot_value, uint64_t*,
   1250 			Output_section**, std::string* fill,
   1251 			Input_section_list*);
   1252 
   1253   // Print for debugging.
   1254   void
   1255   print(FILE* f) const;
   1256 
   1257  private:
   1258   // An input section pattern.
   1259   struct Input_section_pattern
   1260   {
   1261     std::string pattern;
   1262     bool pattern_is_wildcard;
   1263     Sort_wildcard sort;
   1264 
   1265     Input_section_pattern(const char* patterna, size_t patternlena,
   1266 			  Sort_wildcard sorta)
   1267       : pattern(patterna, patternlena),
   1268 	pattern_is_wildcard(is_wildcard_string(this->pattern.c_str())),
   1269 	sort(sorta)
   1270     { }
   1271   };
   1272 
   1273   typedef std::vector<Input_section_pattern> Input_section_patterns;
   1274 
   1275   // Filename_exclusions is a pair of filename pattern and a bool
   1276   // indicating whether the filename is a wildcard.
   1277   typedef std::vector<std::pair<std::string, bool> > Filename_exclusions;
   1278 
   1279   // Return whether STRING matches PATTERN, where IS_WILDCARD_PATTERN
   1280   // indicates whether this is a wildcard pattern.
   1281   static inline bool
   1282   match(const char* string, const char* pattern, bool is_wildcard_pattern)
   1283   {
   1284     return (is_wildcard_pattern
   1285 	    ? fnmatch(pattern, string, 0) == 0
   1286 	    : strcmp(string, pattern) == 0);
   1287   }
   1288 
   1289   // See if we match a file name.
   1290   bool
   1291   match_file_name(const char* file_name) const;
   1292 
   1293   // The file name pattern.  If this is the empty string, we match all
   1294   // files.
   1295   std::string filename_pattern_;
   1296   // Whether the file name pattern is a wildcard.
   1297   bool filename_is_wildcard_;
   1298   // How the file names should be sorted.  This may only be
   1299   // SORT_WILDCARD_NONE or SORT_WILDCARD_BY_NAME.
   1300   Sort_wildcard filename_sort_;
   1301   // The list of file names to exclude.
   1302   Filename_exclusions filename_exclusions_;
   1303   // The list of input section patterns.
   1304   Input_section_patterns input_section_patterns_;
   1305   // Whether to keep this section when garbage collecting.
   1306   bool keep_;
   1307   // The value of dot after including all matching sections.
   1308   uint64_t final_dot_value_;
   1309   // The section where dot is defined after including all matching
   1310   // sections.
   1311   Output_section* final_dot_section_;
   1312 };
   1313 
   1314 // Construct Output_section_element_input.  The parser records strings
   1315 // as pointers into a copy of the script file, which will go away when
   1316 // parsing is complete.  We make sure they are in std::string objects.
   1317 
   1318 Output_section_element_input::Output_section_element_input(
   1319     const Input_section_spec* spec,
   1320     bool keep)
   1321   : filename_pattern_(),
   1322     filename_is_wildcard_(false),
   1323     filename_sort_(spec->file.sort),
   1324     filename_exclusions_(),
   1325     input_section_patterns_(),
   1326     keep_(keep),
   1327     final_dot_value_(0),
   1328     final_dot_section_(NULL)
   1329 {
   1330   // The filename pattern "*" is common, and matches all files.  Turn
   1331   // it into the empty string.
   1332   if (spec->file.name.length != 1 || spec->file.name.value[0] != '*')
   1333     this->filename_pattern_.assign(spec->file.name.value,
   1334 				   spec->file.name.length);
   1335   this->filename_is_wildcard_ = is_wildcard_string(this->filename_pattern_.c_str());
   1336 
   1337   if (spec->input_sections.exclude != NULL)
   1338     {
   1339       for (String_list::const_iterator p =
   1340 	     spec->input_sections.exclude->begin();
   1341 	   p != spec->input_sections.exclude->end();
   1342 	   ++p)
   1343 	{
   1344 	  bool is_wildcard = is_wildcard_string((*p).c_str());
   1345 	  this->filename_exclusions_.push_back(std::make_pair(*p,
   1346 							      is_wildcard));
   1347 	}
   1348     }
   1349 
   1350   if (spec->input_sections.sections != NULL)
   1351     {
   1352       Input_section_patterns& isp(this->input_section_patterns_);
   1353       for (String_sort_list::const_iterator p =
   1354 	     spec->input_sections.sections->begin();
   1355 	   p != spec->input_sections.sections->end();
   1356 	   ++p)
   1357 	isp.push_back(Input_section_pattern(p->name.value, p->name.length,
   1358 					    p->sort));
   1359     }
   1360 }
   1361 
   1362 // See whether we match FILE_NAME.
   1363 
   1364 bool
   1365 Output_section_element_input::match_file_name(const char* file_name) const
   1366 {
   1367   if (!this->filename_pattern_.empty())
   1368     {
   1369       // If we were called with no filename, we refuse to match a
   1370       // pattern which requires a file name.
   1371       if (file_name == NULL)
   1372 	return false;
   1373 
   1374       if (!match(file_name, this->filename_pattern_.c_str(),
   1375 		 this->filename_is_wildcard_))
   1376 	return false;
   1377     }
   1378 
   1379   if (file_name != NULL)
   1380     {
   1381       // Now we have to see whether FILE_NAME matches one of the
   1382       // exclusion patterns, if any.
   1383       for (Filename_exclusions::const_iterator p =
   1384 	     this->filename_exclusions_.begin();
   1385 	   p != this->filename_exclusions_.end();
   1386 	   ++p)
   1387 	{
   1388 	  if (match(file_name, p->first.c_str(), p->second))
   1389 	    return false;
   1390 	}
   1391     }
   1392 
   1393   return true;
   1394 }
   1395 
   1396 // See whether we match FILE_NAME and SECTION_NAME.  If we do then
   1397 // KEEP indicates whether the section should survive garbage collection.
   1398 
   1399 bool
   1400 Output_section_element_input::match_name(const char* file_name,
   1401 					 const char* section_name,
   1402 					 bool *keep) const
   1403 {
   1404   if (!this->match_file_name(file_name))
   1405     return false;
   1406 
   1407   *keep = this->keep_;
   1408 
   1409   // If there are no section name patterns, then we match.
   1410   if (this->input_section_patterns_.empty())
   1411     return true;
   1412 
   1413   // See whether we match the section name patterns.
   1414   for (Input_section_patterns::const_iterator p =
   1415 	 this->input_section_patterns_.begin();
   1416        p != this->input_section_patterns_.end();
   1417        ++p)
   1418     {
   1419       if (match(section_name, p->pattern.c_str(), p->pattern_is_wildcard))
   1420 	return true;
   1421     }
   1422 
   1423   // We didn't match any section names, so we didn't match.
   1424   return false;
   1425 }
   1426 
   1427 // Information we use to sort the input sections.
   1428 
   1429 class Input_section_info
   1430 {
   1431  public:
   1432   Input_section_info(const Output_section::Input_section& input_section)
   1433     : input_section_(input_section), section_name_(),
   1434       size_(0), addralign_(1)
   1435   { }
   1436 
   1437   // Return the simple input section.
   1438   const Output_section::Input_section&
   1439   input_section() const
   1440   { return this->input_section_; }
   1441 
   1442   // Return the object.
   1443   Relobj*
   1444   relobj() const
   1445   { return this->input_section_.relobj(); }
   1446 
   1447   // Return the section index.
   1448   unsigned int
   1449   shndx()
   1450   { return this->input_section_.shndx(); }
   1451 
   1452   // Return the section name.
   1453   const std::string&
   1454   section_name() const
   1455   { return this->section_name_; }
   1456 
   1457   // Set the section name.
   1458   void
   1459   set_section_name(const std::string name)
   1460   { this->section_name_ = name; }
   1461 
   1462   // Return the section size.
   1463   uint64_t
   1464   size() const
   1465   { return this->size_; }
   1466 
   1467   // Set the section size.
   1468   void
   1469   set_size(uint64_t size)
   1470   { this->size_ = size; }
   1471 
   1472   // Return the address alignment.
   1473   uint64_t
   1474   addralign() const
   1475   { return this->addralign_; }
   1476 
   1477   // Set the address alignment.
   1478   void
   1479   set_addralign(uint64_t addralign)
   1480   { this->addralign_ = addralign; }
   1481 
   1482  private:
   1483   // Input section, can be a relaxed section.
   1484   Output_section::Input_section input_section_;
   1485   // Name of the section.
   1486   std::string section_name_;
   1487   // Section size.
   1488   uint64_t size_;
   1489   // Address alignment.
   1490   uint64_t addralign_;
   1491 };
   1492 
   1493 // A class to sort the input sections.
   1494 
   1495 class Input_section_sorter
   1496 {
   1497  public:
   1498   Input_section_sorter(Sort_wildcard filename_sort, Sort_wildcard section_sort)
   1499     : filename_sort_(filename_sort), section_sort_(section_sort)
   1500   { }
   1501 
   1502   bool
   1503   operator()(const Input_section_info&, const Input_section_info&) const;
   1504 
   1505  private:
   1506   Sort_wildcard filename_sort_;
   1507   Sort_wildcard section_sort_;
   1508 };
   1509 
   1510 bool
   1511 Input_section_sorter::operator()(const Input_section_info& isi1,
   1512 				 const Input_section_info& isi2) const
   1513 {
   1514   if (this->section_sort_ == SORT_WILDCARD_BY_NAME
   1515       || this->section_sort_ == SORT_WILDCARD_BY_NAME_BY_ALIGNMENT
   1516       || (this->section_sort_ == SORT_WILDCARD_BY_ALIGNMENT_BY_NAME
   1517 	  && isi1.addralign() == isi2.addralign()))
   1518     {
   1519       if (isi1.section_name() != isi2.section_name())
   1520 	return isi1.section_name() < isi2.section_name();
   1521     }
   1522   if (this->section_sort_ == SORT_WILDCARD_BY_ALIGNMENT
   1523       || this->section_sort_ == SORT_WILDCARD_BY_NAME_BY_ALIGNMENT
   1524       || this->section_sort_ == SORT_WILDCARD_BY_ALIGNMENT_BY_NAME)
   1525     {
   1526       if (isi1.addralign() != isi2.addralign())
   1527 	return isi1.addralign() < isi2.addralign();
   1528     }
   1529   if (this->filename_sort_ == SORT_WILDCARD_BY_NAME)
   1530     {
   1531       if (isi1.relobj()->name() != isi2.relobj()->name())
   1532 	return (isi1.relobj()->name() < isi2.relobj()->name());
   1533     }
   1534 
   1535   // Otherwise we leave them in the same order.
   1536   return false;
   1537 }
   1538 
   1539 // Set the section address.  Look in INPUT_SECTIONS for sections which
   1540 // match this spec, sort them as specified, and add them to the output
   1541 // section.
   1542 
   1543 void
   1544 Output_section_element_input::set_section_addresses(
   1545     Symbol_table*,
   1546     Layout* layout,
   1547     Output_section* output_section,
   1548     uint64_t subalign,
   1549     uint64_t* dot_value,
   1550     uint64_t*,
   1551     Output_section** dot_section,
   1552     std::string* fill,
   1553     Input_section_list* input_sections)
   1554 {
   1555   // We build a list of sections which match each
   1556   // Input_section_pattern.
   1557 
   1558   typedef std::vector<std::vector<Input_section_info> > Matching_sections;
   1559   size_t input_pattern_count = this->input_section_patterns_.size();
   1560   if (input_pattern_count == 0)
   1561     input_pattern_count = 1;
   1562   Matching_sections matching_sections(input_pattern_count);
   1563 
   1564   // Look through the list of sections for this output section.  Add
   1565   // each one which matches to one of the elements of
   1566   // MATCHING_SECTIONS.
   1567 
   1568   Input_section_list::iterator p = input_sections->begin();
   1569   while (p != input_sections->end())
   1570     {
   1571       Relobj* relobj = p->relobj();
   1572       unsigned int shndx = p->shndx();
   1573       Input_section_info isi(*p);
   1574 
   1575       // Calling section_name and section_addralign is not very
   1576       // efficient.
   1577 
   1578       // Lock the object so that we can get information about the
   1579       // section.  This is OK since we know we are single-threaded
   1580       // here.
   1581       {
   1582 	const Task* task = reinterpret_cast<const Task*>(-1);
   1583 	Task_lock_obj<Object> tl(task, relobj);
   1584 
   1585 	isi.set_section_name(relobj->section_name(shndx));
   1586 	if (p->is_relaxed_input_section())
   1587 	  {
   1588 	    // We use current data size because relaxed section sizes may not
   1589 	    // have finalized yet.
   1590 	    isi.set_size(p->relaxed_input_section()->current_data_size());
   1591 	    isi.set_addralign(p->relaxed_input_section()->addralign());
   1592 	  }
   1593 	else
   1594 	  {
   1595 	    isi.set_size(relobj->section_size(shndx));
   1596 	    isi.set_addralign(relobj->section_addralign(shndx));
   1597 	  }
   1598       }
   1599 
   1600       if (!this->match_file_name(relobj->name().c_str()))
   1601 	++p;
   1602       else if (this->input_section_patterns_.empty())
   1603 	{
   1604 	  matching_sections[0].push_back(isi);
   1605 	  p = input_sections->erase(p);
   1606 	}
   1607       else
   1608 	{
   1609 	  size_t i;
   1610 	  for (i = 0; i < input_pattern_count; ++i)
   1611 	    {
   1612 	      const Input_section_pattern&
   1613 		isp(this->input_section_patterns_[i]);
   1614 	      if (match(isi.section_name().c_str(), isp.pattern.c_str(),
   1615 			isp.pattern_is_wildcard))
   1616 		break;
   1617 	    }
   1618 
   1619 	  if (i >= this->input_section_patterns_.size())
   1620 	    ++p;
   1621 	  else
   1622 	    {
   1623 	      matching_sections[i].push_back(isi);
   1624 	      p = input_sections->erase(p);
   1625 	    }
   1626 	}
   1627     }
   1628 
   1629   // Look through MATCHING_SECTIONS.  Sort each one as specified,
   1630   // using a stable sort so that we get the default order when
   1631   // sections are otherwise equal.  Add each input section to the
   1632   // output section.
   1633 
   1634   uint64_t dot = *dot_value;
   1635   for (size_t i = 0; i < input_pattern_count; ++i)
   1636     {
   1637       if (matching_sections[i].empty())
   1638 	continue;
   1639 
   1640       gold_assert(output_section != NULL);
   1641 
   1642       const Input_section_pattern& isp(this->input_section_patterns_[i]);
   1643       if (isp.sort != SORT_WILDCARD_NONE
   1644 	  || this->filename_sort_ != SORT_WILDCARD_NONE)
   1645 	std::stable_sort(matching_sections[i].begin(),
   1646 			 matching_sections[i].end(),
   1647 			 Input_section_sorter(this->filename_sort_,
   1648 					      isp.sort));
   1649 
   1650       for (std::vector<Input_section_info>::const_iterator p =
   1651 	     matching_sections[i].begin();
   1652 	   p != matching_sections[i].end();
   1653 	   ++p)
   1654 	{
   1655 	  // Override the original address alignment if SUBALIGN is specified
   1656 	  // and is greater than the original alignment.  We need to make a
   1657 	  // copy of the input section to modify the alignment.
   1658 	  Output_section::Input_section sis(p->input_section());
   1659 
   1660 	  uint64_t this_subalign = sis.addralign();
   1661 	  if (!sis.is_input_section())
   1662 	    sis.output_section_data()->finalize_data_size();
   1663 	  uint64_t data_size = sis.data_size();
   1664 	  if (this_subalign < subalign)
   1665 	    {
   1666 	      this_subalign = subalign;
   1667 	      sis.set_addralign(subalign);
   1668 	    }
   1669 
   1670 	  uint64_t address = align_address(dot, this_subalign);
   1671 
   1672 	  if (address > dot && !fill->empty())
   1673 	    {
   1674 	      section_size_type length =
   1675 		convert_to_section_size_type(address - dot);
   1676 	      std::string this_fill = this->get_fill_string(fill, length);
   1677 	      Output_section_data* posd = new Output_data_const(this_fill, 0);
   1678 	      output_section->add_output_section_data(posd);
   1679 	      layout->new_output_section_data_from_script(posd);
   1680 	    }
   1681 
   1682 	  output_section->add_script_input_section(sis);
   1683 	  dot = address + data_size;
   1684 	}
   1685     }
   1686 
   1687   // An SHF_TLS/SHT_NOBITS section does not take up any
   1688   // address space.
   1689   if (output_section == NULL
   1690       || (output_section->flags() & elfcpp::SHF_TLS) == 0
   1691       || output_section->type() != elfcpp::SHT_NOBITS)
   1692     *dot_value = dot;
   1693 
   1694   this->final_dot_value_ = *dot_value;
   1695   this->final_dot_section_ = *dot_section;
   1696 }
   1697 
   1698 // Print for debugging.
   1699 
   1700 void
   1701 Output_section_element_input::print(FILE* f) const
   1702 {
   1703   fprintf(f, "    ");
   1704 
   1705   if (this->keep_)
   1706     fprintf(f, "KEEP(");
   1707 
   1708   if (!this->filename_pattern_.empty())
   1709     {
   1710       bool need_close_paren = false;
   1711       switch (this->filename_sort_)
   1712 	{
   1713 	case SORT_WILDCARD_NONE:
   1714 	  break;
   1715 	case SORT_WILDCARD_BY_NAME:
   1716 	  fprintf(f, "SORT_BY_NAME(");
   1717 	  need_close_paren = true;
   1718 	  break;
   1719 	default:
   1720 	  gold_unreachable();
   1721 	}
   1722 
   1723       fprintf(f, "%s", this->filename_pattern_.c_str());
   1724 
   1725       if (need_close_paren)
   1726 	fprintf(f, ")");
   1727     }
   1728 
   1729   if (!this->input_section_patterns_.empty()
   1730       || !this->filename_exclusions_.empty())
   1731     {
   1732       fprintf(f, "(");
   1733 
   1734       bool need_space = false;
   1735       if (!this->filename_exclusions_.empty())
   1736 	{
   1737 	  fprintf(f, "EXCLUDE_FILE(");
   1738 	  bool need_comma = false;
   1739 	  for (Filename_exclusions::const_iterator p =
   1740 		 this->filename_exclusions_.begin();
   1741 	       p != this->filename_exclusions_.end();
   1742 	       ++p)
   1743 	    {
   1744 	      if (need_comma)
   1745 		fprintf(f, ", ");
   1746 	      fprintf(f, "%s", p->first.c_str());
   1747 	      need_comma = true;
   1748 	    }
   1749 	  fprintf(f, ")");
   1750 	  need_space = true;
   1751 	}
   1752 
   1753       for (Input_section_patterns::const_iterator p =
   1754 	     this->input_section_patterns_.begin();
   1755 	   p != this->input_section_patterns_.end();
   1756 	   ++p)
   1757 	{
   1758 	  if (need_space)
   1759 	    fprintf(f, " ");
   1760 
   1761 	  int close_parens = 0;
   1762 	  switch (p->sort)
   1763 	    {
   1764 	    case SORT_WILDCARD_NONE:
   1765 	      break;
   1766 	    case SORT_WILDCARD_BY_NAME:
   1767 	      fprintf(f, "SORT_BY_NAME(");
   1768 	      close_parens = 1;
   1769 	      break;
   1770 	    case SORT_WILDCARD_BY_ALIGNMENT:
   1771 	      fprintf(f, "SORT_BY_ALIGNMENT(");
   1772 	      close_parens = 1;
   1773 	      break;
   1774 	    case SORT_WILDCARD_BY_NAME_BY_ALIGNMENT:
   1775 	      fprintf(f, "SORT_BY_NAME(SORT_BY_ALIGNMENT(");
   1776 	      close_parens = 2;
   1777 	      break;
   1778 	    case SORT_WILDCARD_BY_ALIGNMENT_BY_NAME:
   1779 	      fprintf(f, "SORT_BY_ALIGNMENT(SORT_BY_NAME(");
   1780 	      close_parens = 2;
   1781 	      break;
   1782 	    default:
   1783 	      gold_unreachable();
   1784 	    }
   1785 
   1786 	  fprintf(f, "%s", p->pattern.c_str());
   1787 
   1788 	  for (int i = 0; i < close_parens; ++i)
   1789 	    fprintf(f, ")");
   1790 
   1791 	  need_space = true;
   1792 	}
   1793 
   1794       fprintf(f, ")");
   1795     }
   1796 
   1797   if (this->keep_)
   1798     fprintf(f, ")");
   1799 
   1800   fprintf(f, "\n");
   1801 }
   1802 
   1803 // An output section.
   1804 
   1805 class Output_section_definition : public Sections_element
   1806 {
   1807  public:
   1808   typedef Output_section_element::Input_section_list Input_section_list;
   1809 
   1810   Output_section_definition(const char* name, size_t namelen,
   1811 			    const Parser_output_section_header* header);
   1812 
   1813   // Finish the output section with the information in the trailer.
   1814   void
   1815   finish(const Parser_output_section_trailer* trailer);
   1816 
   1817   // Add a symbol to be defined.
   1818   void
   1819   add_symbol_assignment(const char* name, size_t length, Expression* value,
   1820 			bool provide, bool hidden);
   1821 
   1822   // Add an assignment to the special dot symbol.
   1823   void
   1824   add_dot_assignment(Expression* value);
   1825 
   1826   // Add an assertion.
   1827   void
   1828   add_assertion(Expression* check, const char* message, size_t messagelen);
   1829 
   1830   // Add a data item to the current output section.
   1831   void
   1832   add_data(int size, bool is_signed, Expression* val);
   1833 
   1834   // Add a setting for the fill value.
   1835   void
   1836   add_fill(Expression* val);
   1837 
   1838   // Add an input section specification.
   1839   void
   1840   add_input_section(const Input_section_spec* spec, bool keep);
   1841 
   1842   // Return whether the output section is relro.
   1843   bool
   1844   is_relro() const
   1845   { return this->is_relro_; }
   1846 
   1847   // Record that the output section is relro.
   1848   void
   1849   set_is_relro()
   1850   { this->is_relro_ = true; }
   1851 
   1852   // Create any required output sections.
   1853   void
   1854   create_sections(Layout*);
   1855 
   1856   // Add any symbols being defined to the symbol table.
   1857   void
   1858   add_symbols_to_table(Symbol_table* symtab);
   1859 
   1860   // Finalize symbols and check assertions.
   1861   void
   1862   finalize_symbols(Symbol_table*, const Layout*, uint64_t*);
   1863 
   1864   // Return the output section name to use for an input file name and
   1865   // section name.
   1866   const char*
   1867   output_section_name(const char* file_name, const char* section_name,
   1868 		      Output_section***, Script_sections::Section_type*,
   1869 		      bool*);
   1870 
   1871   // Initialize OSP with an output section.
   1872   void
   1873   orphan_section_init(Orphan_section_placement* osp,
   1874 		      Script_sections::Elements_iterator p)
   1875   { osp->output_section_init(this->name_, this->output_section_, p); }
   1876 
   1877   // Set the section address.
   1878   void
   1879   set_section_addresses(Symbol_table* symtab, Layout* layout,
   1880 			uint64_t* dot_value, uint64_t*,
   1881 			uint64_t* load_address);
   1882 
   1883   // Check a constraint (ONLY_IF_RO, etc.) on an output section.  If
   1884   // this section is constrained, and the input sections do not match,
   1885   // return the constraint, and set *POSD.
   1886   Section_constraint
   1887   check_constraint(Output_section_definition** posd);
   1888 
   1889   // See if this is the alternate output section for a constrained
   1890   // output section.  If it is, transfer the Output_section and return
   1891   // true.  Otherwise return false.
   1892   bool
   1893   alternate_constraint(Output_section_definition*, Section_constraint);
   1894 
   1895   // Get the list of segments to use for an allocated section when
   1896   // using a PHDRS clause.
   1897   Output_section*
   1898   allocate_to_segment(String_list** phdrs_list, bool* orphan);
   1899 
   1900   // Look for an output section by name and return the address, the
   1901   // load address, the alignment, and the size.  This is used when an
   1902   // expression refers to an output section which was not actually
   1903   // created.  This returns true if the section was found, false
   1904   // otherwise.
   1905   bool
   1906   get_output_section_info(const char*, uint64_t*, uint64_t*, uint64_t*,
   1907                           uint64_t*) const;
   1908 
   1909   // Return the associated Output_section if there is one.
   1910   Output_section*
   1911   get_output_section() const
   1912   { return this->output_section_; }
   1913 
   1914   // Print the contents to the FILE.  This is for debugging.
   1915   void
   1916   print(FILE*) const;
   1917 
   1918   // Return the output section type if specified or Script_sections::ST_NONE.
   1919   Script_sections::Section_type
   1920   section_type() const;
   1921 
   1922   // Store the memory region to use.
   1923   void
   1924   set_memory_region(Memory_region*, bool set_vma);
   1925 
   1926   void
   1927   set_section_vma(Expression* address)
   1928   { this->address_ = address; }
   1929 
   1930   void
   1931   set_section_lma(Expression* address)
   1932   { this->load_address_ = address; }
   1933 
   1934   const std::string&
   1935   get_section_name() const
   1936   { return this->name_; }
   1937 
   1938  private:
   1939   static const char*
   1940   script_section_type_name(Script_section_type);
   1941 
   1942   typedef std::vector<Output_section_element*> Output_section_elements;
   1943 
   1944   // The output section name.
   1945   std::string name_;
   1946   // The address.  This may be NULL.
   1947   Expression* address_;
   1948   // The load address.  This may be NULL.
   1949   Expression* load_address_;
   1950   // The alignment.  This may be NULL.
   1951   Expression* align_;
   1952   // The input section alignment.  This may be NULL.
   1953   Expression* subalign_;
   1954   // The constraint, if any.
   1955   Section_constraint constraint_;
   1956   // The fill value.  This may be NULL.
   1957   Expression* fill_;
   1958   // The list of segments this section should go into.  This may be
   1959   // NULL.
   1960   String_list* phdrs_;
   1961   // The list of elements defining the section.
   1962   Output_section_elements elements_;
   1963   // The Output_section created for this definition.  This will be
   1964   // NULL if none was created.
   1965   Output_section* output_section_;
   1966   // The address after it has been evaluated.
   1967   uint64_t evaluated_address_;
   1968   // The load address after it has been evaluated.
   1969   uint64_t evaluated_load_address_;
   1970   // The alignment after it has been evaluated.
   1971   uint64_t evaluated_addralign_;
   1972   // The output section is relro.
   1973   bool is_relro_;
   1974   // The output section type if specified.
   1975   enum Script_section_type script_section_type_;
   1976 };
   1977 
   1978 // Constructor.
   1979 
   1980 Output_section_definition::Output_section_definition(
   1981     const char* name,
   1982     size_t namelen,
   1983     const Parser_output_section_header* header)
   1984   : name_(name, namelen),
   1985     address_(header->address),
   1986     load_address_(header->load_address),
   1987     align_(header->align),
   1988     subalign_(header->subalign),
   1989     constraint_(header->constraint),
   1990     fill_(NULL),
   1991     phdrs_(NULL),
   1992     elements_(),
   1993     output_section_(NULL),
   1994     evaluated_address_(0),
   1995     evaluated_load_address_(0),
   1996     evaluated_addralign_(0),
   1997     is_relro_(false),
   1998     script_section_type_(header->section_type)
   1999 {
   2000 }
   2001 
   2002 // Finish an output section.
   2003 
   2004 void
   2005 Output_section_definition::finish(const Parser_output_section_trailer* trailer)
   2006 {
   2007   this->fill_ = trailer->fill;
   2008   this->phdrs_ = trailer->phdrs;
   2009 }
   2010 
   2011 // Add a symbol to be defined.
   2012 
   2013 void
   2014 Output_section_definition::add_symbol_assignment(const char* name,
   2015 						 size_t length,
   2016 						 Expression* value,
   2017 						 bool provide,
   2018 						 bool hidden)
   2019 {
   2020   Output_section_element* p = new Output_section_element_assignment(name,
   2021 								    length,
   2022 								    value,
   2023 								    provide,
   2024 								    hidden);
   2025   this->elements_.push_back(p);
   2026 }
   2027 
   2028 // Add an assignment to the special dot symbol.
   2029 
   2030 void
   2031 Output_section_definition::add_dot_assignment(Expression* value)
   2032 {
   2033   Output_section_element* p = new Output_section_element_dot_assignment(value);
   2034   this->elements_.push_back(p);
   2035 }
   2036 
   2037 // Add an assertion.
   2038 
   2039 void
   2040 Output_section_definition::add_assertion(Expression* check,
   2041 					 const char* message,
   2042 					 size_t messagelen)
   2043 {
   2044   Output_section_element* p = new Output_section_element_assertion(check,
   2045 								   message,
   2046 								   messagelen);
   2047   this->elements_.push_back(p);
   2048 }
   2049 
   2050 // Add a data item to the current output section.
   2051 
   2052 void
   2053 Output_section_definition::add_data(int size, bool is_signed, Expression* val)
   2054 {
   2055   Output_section_element* p = new Output_section_element_data(size, is_signed,
   2056 							      val);
   2057   this->elements_.push_back(p);
   2058 }
   2059 
   2060 // Add a setting for the fill value.
   2061 
   2062 void
   2063 Output_section_definition::add_fill(Expression* val)
   2064 {
   2065   Output_section_element* p = new Output_section_element_fill(val);
   2066   this->elements_.push_back(p);
   2067 }
   2068 
   2069 // Add an input section specification.
   2070 
   2071 void
   2072 Output_section_definition::add_input_section(const Input_section_spec* spec,
   2073 					     bool keep)
   2074 {
   2075   Output_section_element* p = new Output_section_element_input(spec, keep);
   2076   this->elements_.push_back(p);
   2077 }
   2078 
   2079 // Create any required output sections.  We need an output section if
   2080 // there is a data statement here.
   2081 
   2082 void
   2083 Output_section_definition::create_sections(Layout* layout)
   2084 {
   2085   if (this->output_section_ != NULL)
   2086     return;
   2087   for (Output_section_elements::const_iterator p = this->elements_.begin();
   2088        p != this->elements_.end();
   2089        ++p)
   2090     {
   2091       if ((*p)->needs_output_section())
   2092 	{
   2093 	  const char* name = this->name_.c_str();
   2094 	  this->output_section_ =
   2095 	    layout->make_output_section_for_script(name, this->section_type());
   2096 	  return;
   2097 	}
   2098     }
   2099 }
   2100 
   2101 // Add any symbols being defined to the symbol table.
   2102 
   2103 void
   2104 Output_section_definition::add_symbols_to_table(Symbol_table* symtab)
   2105 {
   2106   for (Output_section_elements::iterator p = this->elements_.begin();
   2107        p != this->elements_.end();
   2108        ++p)
   2109     (*p)->add_symbols_to_table(symtab);
   2110 }
   2111 
   2112 // Finalize symbols and check assertions.
   2113 
   2114 void
   2115 Output_section_definition::finalize_symbols(Symbol_table* symtab,
   2116 					    const Layout* layout,
   2117 					    uint64_t* dot_value)
   2118 {
   2119   if (this->output_section_ != NULL)
   2120     *dot_value = this->output_section_->address();
   2121   else
   2122     {
   2123       uint64_t address = *dot_value;
   2124       if (this->address_ != NULL)
   2125 	{
   2126 	  address = this->address_->eval_with_dot(symtab, layout, true,
   2127 						  *dot_value, NULL,
   2128 						  NULL, NULL, false);
   2129 	}
   2130       if (this->align_ != NULL)
   2131 	{
   2132 	  uint64_t align = this->align_->eval_with_dot(symtab, layout, true,
   2133 						       *dot_value, NULL,
   2134 						       NULL, NULL, false);
   2135 	  address = align_address(address, align);
   2136 	}
   2137       *dot_value = address;
   2138     }
   2139 
   2140   Output_section* dot_section = this->output_section_;
   2141   for (Output_section_elements::iterator p = this->elements_.begin();
   2142        p != this->elements_.end();
   2143        ++p)
   2144     (*p)->finalize_symbols(symtab, layout, dot_value, &dot_section);
   2145 }
   2146 
   2147 // Return the output section name to use for an input section name.
   2148 
   2149 const char*
   2150 Output_section_definition::output_section_name(
   2151     const char* file_name,
   2152     const char* section_name,
   2153     Output_section*** slot,
   2154     Script_sections::Section_type* psection_type,
   2155     bool* keep)
   2156 {
   2157   // Ask each element whether it matches NAME.
   2158   for (Output_section_elements::const_iterator p = this->elements_.begin();
   2159        p != this->elements_.end();
   2160        ++p)
   2161     {
   2162       if ((*p)->match_name(file_name, section_name, keep))
   2163 	{
   2164 	  // We found a match for NAME, which means that it should go
   2165 	  // into this output section.
   2166 	  *slot = &this->output_section_;
   2167 	  *psection_type = this->section_type();
   2168 	  return this->name_.c_str();
   2169 	}
   2170     }
   2171 
   2172   // We don't know about this section name.
   2173   return NULL;
   2174 }
   2175 
   2176 // Return true if memory from START to START + LENGTH is contained
   2177 // within a memory region.
   2178 
   2179 bool
   2180 Script_sections::block_in_region(Symbol_table* symtab, Layout* layout,
   2181 				 uint64_t start, uint64_t length) const
   2182 {
   2183   if (this->memory_regions_ == NULL)
   2184     return false;
   2185 
   2186   for (Memory_regions::const_iterator mr = this->memory_regions_->begin();
   2187        mr != this->memory_regions_->end();
   2188        ++mr)
   2189     {
   2190       uint64_t s = (*mr)->start_address()->eval(symtab, layout, false);
   2191       uint64_t l = (*mr)->length()->eval(symtab, layout, false);
   2192 
   2193       if (s <= start
   2194 	  && (s + l) >= (start + length))
   2195 	return true;
   2196     }
   2197 
   2198   return false;
   2199 }
   2200 
   2201 // Find a memory region that should be used by a given output SECTION.
   2202 // If provided set PREVIOUS_SECTION_RETURN to point to the last section
   2203 // that used the return memory region.
   2204 
   2205 Memory_region*
   2206 Script_sections::find_memory_region(
   2207     Output_section_definition* section,
   2208     bool find_vma_region,
   2209     Output_section_definition** previous_section_return)
   2210 {
   2211   if (previous_section_return != NULL)
   2212     * previous_section_return = NULL;
   2213 
   2214   // Walk the memory regions specified in this script, if any.
   2215   if (this->memory_regions_ == NULL)
   2216     return NULL;
   2217 
   2218   // The /DISCARD/ section never gets assigned to any region.
   2219   if (section->get_section_name() == "/DISCARD/")
   2220     return NULL;
   2221 
   2222   Memory_region* first_match = NULL;
   2223 
   2224   // First check to see if a region has been assigned to this section.
   2225   for (Memory_regions::const_iterator mr = this->memory_regions_->begin();
   2226        mr != this->memory_regions_->end();
   2227        ++mr)
   2228     {
   2229       if (find_vma_region)
   2230 	{
   2231 	  for (Memory_region::Section_list::const_iterator s =
   2232 		 (*mr)->get_vma_section_list_start();
   2233 	       s != (*mr)->get_vma_section_list_end();
   2234 	       ++s)
   2235 	    if ((*s) == section)
   2236 	      {
   2237 		(*mr)->set_last_section(section);
   2238 		return *mr;
   2239 	      }
   2240 	}
   2241       else
   2242 	{
   2243 	  for (Memory_region::Section_list::const_iterator s =
   2244 		 (*mr)->get_lma_section_list_start();
   2245 	       s != (*mr)->get_lma_section_list_end();
   2246 	       ++s)
   2247 	    if ((*s) == section)
   2248 	      {
   2249 		(*mr)->set_last_section(section);
   2250 		return *mr;
   2251 	      }
   2252 	}
   2253 
   2254       // Make a note of the first memory region whose attributes
   2255       // are compatible with the section.  If we do not find an
   2256       // explicit region assignment, then we will return this region.
   2257       Output_section* out_sec = section->get_output_section();
   2258       if (first_match == NULL
   2259 	  && out_sec != NULL
   2260 	  && (*mr)->attributes_compatible(out_sec->flags(),
   2261 					  out_sec->type()))
   2262 	first_match = *mr;
   2263     }
   2264 
   2265   // With LMA computations, if an explicit region has not been specified then
   2266   // we will want to set the difference between the VMA and the LMA of the
   2267   // section were searching for to be the same as the difference between the
   2268   // VMA and LMA of the last section to be added to first matched region.
   2269   // Hence, if it was asked for, we return a pointer to the last section
   2270   // known to be used by the first matched region.
   2271   if (first_match != NULL
   2272       && previous_section_return != NULL)
   2273     *previous_section_return = first_match->get_last_section();
   2274 
   2275   return first_match;
   2276 }
   2277 
   2278 // Set the section address.  Note that the OUTPUT_SECTION_ field will
   2279 // be NULL if no input sections were mapped to this output section.
   2280 // We still have to adjust dot and process symbol assignments.
   2281 
   2282 void
   2283 Output_section_definition::set_section_addresses(Symbol_table* symtab,
   2284 						 Layout* layout,
   2285 						 uint64_t* dot_value,
   2286 						 uint64_t* dot_alignment,
   2287                                                  uint64_t* load_address)
   2288 {
   2289   Memory_region* vma_region = NULL;
   2290   Memory_region* lma_region = NULL;
   2291   Script_sections* script_sections =
   2292     layout->script_options()->script_sections();
   2293   uint64_t address;
   2294   uint64_t old_dot_value = *dot_value;
   2295   uint64_t old_load_address = *load_address;
   2296 
   2297   // If input section sorting is requested via --section-ordering-file or
   2298   // linker plugins, then do it here.  This is important because we want
   2299   // any sorting specified in the linker scripts, which will be done after
   2300   // this, to take precedence.  The final order of input sections is then
   2301   // guaranteed to be according to the linker script specification.
   2302   if (this->output_section_ != NULL
   2303       && this->output_section_->input_section_order_specified())
   2304     this->output_section_->sort_attached_input_sections();
   2305 
   2306   // Decide the start address for the section.  The algorithm is:
   2307   // 1) If an address has been specified in a linker script, use that.
   2308   // 2) Otherwise if a memory region has been specified for the section,
   2309   //    use the next free address in the region.
   2310   // 3) Otherwise if memory regions have been specified find the first
   2311   //    region whose attributes are compatible with this section and
   2312   //    install it into that region.
   2313   // 4) Otherwise use the current location counter.
   2314 
   2315   if (this->output_section_ != NULL
   2316       // Check for --section-start.
   2317       && parameters->options().section_start(this->output_section_->name(),
   2318 					     &address))
   2319     ;
   2320   else if (this->address_ == NULL)
   2321     {
   2322       vma_region = script_sections->find_memory_region(this, true, NULL);
   2323 
   2324       if (vma_region != NULL)
   2325 	address = vma_region->get_current_address()->eval(symtab, layout,
   2326 							  false);
   2327       else
   2328 	address = *dot_value;
   2329     }
   2330   else
   2331     address = this->address_->eval_with_dot(symtab, layout, true,
   2332 					    *dot_value, NULL, NULL,
   2333 					    dot_alignment, false);
   2334   uint64_t align;
   2335   if (this->align_ == NULL)
   2336     {
   2337       if (this->output_section_ == NULL)
   2338 	align = 0;
   2339       else
   2340 	align = this->output_section_->addralign();
   2341     }
   2342   else
   2343     {
   2344       Output_section* align_section;
   2345       align = this->align_->eval_with_dot(symtab, layout, true, *dot_value,
   2346 					  NULL, &align_section, NULL, false);
   2347       if (align_section != NULL)
   2348 	gold_warning(_("alignment of section %s is not absolute"),
   2349 		     this->name_.c_str());
   2350       if (this->output_section_ != NULL)
   2351 	this->output_section_->set_addralign(align);
   2352     }
   2353 
   2354   address = align_address(address, align);
   2355 
   2356   uint64_t start_address = address;
   2357 
   2358   *dot_value = address;
   2359 
   2360   // Except for NOLOAD sections, the address of non-SHF_ALLOC sections is
   2361   // forced to zero, regardless of what the linker script wants.
   2362   if (this->output_section_ != NULL
   2363       && ((this->output_section_->flags() & elfcpp::SHF_ALLOC) != 0
   2364 	  || this->output_section_->is_noload()))
   2365     this->output_section_->set_address(address);
   2366 
   2367   this->evaluated_address_ = address;
   2368   this->evaluated_addralign_ = align;
   2369 
   2370   uint64_t laddr;
   2371 
   2372   if (this->load_address_ == NULL)
   2373     {
   2374       Output_section_definition* previous_section;
   2375 
   2376       // Determine if an LMA region has been set for this section.
   2377       lma_region = script_sections->find_memory_region(this, false,
   2378 						       &previous_section);
   2379 
   2380       if (lma_region != NULL)
   2381 	{
   2382 	  if (previous_section == NULL)
   2383 	    // The LMA address was explicitly set to the given region.
   2384 	    laddr = lma_region->get_current_address()->eval(symtab, layout,
   2385 							    false);
   2386 	  else
   2387 	    {
   2388 	      // We are not going to use the discovered lma_region, so
   2389 	      // make sure that we do not update it in the code below.
   2390 	      lma_region = NULL;
   2391 
   2392 	      if (this->address_ != NULL || previous_section == this)
   2393 		{
   2394 		  // Either an explicit VMA address has been set, or an
   2395 		  // explicit VMA region has been set, so set the LMA equal to
   2396 		  // the VMA.
   2397 		  laddr = address;
   2398 		}
   2399 	      else
   2400 		{
   2401 		  // The LMA address was not explicitly or implicitly set.
   2402 		  //
   2403 		  // We have been given the first memory region that is
   2404 		  // compatible with the current section and a pointer to the
   2405 		  // last section to use this region.  Set the LMA of this
   2406 		  // section so that the difference between its' VMA and LMA
   2407 		  // is the same as the difference between the VMA and LMA of
   2408 		  // the last section in the given region.
   2409 		  laddr = address + (previous_section->evaluated_load_address_
   2410 				     - previous_section->evaluated_address_);
   2411 		}
   2412 	    }
   2413 
   2414 	  if (this->output_section_ != NULL)
   2415 	    this->output_section_->set_load_address(laddr);
   2416 	}
   2417       else
   2418 	{
   2419 	  // Do not set the load address of the output section, if one exists.
   2420 	  // This allows future sections to determine what the load address
   2421 	  // should be.  If none is ever set, it will default to being the
   2422 	  // same as the vma address.
   2423 	  laddr = address;
   2424 	}
   2425     }
   2426   else
   2427     {
   2428       laddr = this->load_address_->eval_with_dot(symtab, layout, true,
   2429 						 *dot_value,
   2430 						 this->output_section_,
   2431 						 NULL, NULL, false);
   2432       if (this->output_section_ != NULL)
   2433         this->output_section_->set_load_address(laddr);
   2434     }
   2435 
   2436   this->evaluated_load_address_ = laddr;
   2437 
   2438   uint64_t subalign;
   2439   if (this->subalign_ == NULL)
   2440     subalign = 0;
   2441   else
   2442     {
   2443       Output_section* subalign_section;
   2444       subalign = this->subalign_->eval_with_dot(symtab, layout, true,
   2445 						*dot_value, NULL,
   2446 						&subalign_section, NULL,
   2447 						false);
   2448       if (subalign_section != NULL)
   2449 	gold_warning(_("subalign of section %s is not absolute"),
   2450 		     this->name_.c_str());
   2451     }
   2452 
   2453   std::string fill;
   2454   if (this->fill_ != NULL)
   2455     {
   2456       // FIXME: The GNU linker supports fill values of arbitrary
   2457       // length.
   2458       Output_section* fill_section;
   2459       uint64_t fill_val = this->fill_->eval_with_dot(symtab, layout, true,
   2460 						     *dot_value,
   2461 						     NULL, &fill_section,
   2462 						     NULL, false);
   2463       if (fill_section != NULL)
   2464 	gold_warning(_("fill of section %s is not absolute"),
   2465 		     this->name_.c_str());
   2466       unsigned char fill_buff[4];
   2467       elfcpp::Swap_unaligned<32, true>::writeval(fill_buff, fill_val);
   2468       fill.assign(reinterpret_cast<char*>(fill_buff), 4);
   2469     }
   2470 
   2471   Input_section_list input_sections;
   2472   if (this->output_section_ != NULL)
   2473     {
   2474       // Get the list of input sections attached to this output
   2475       // section.  This will leave the output section with only
   2476       // Output_section_data entries.
   2477       address += this->output_section_->get_input_sections(address,
   2478 							   fill,
   2479 							   &input_sections);
   2480       *dot_value = address;
   2481     }
   2482 
   2483   Output_section* dot_section = this->output_section_;
   2484   for (Output_section_elements::iterator p = this->elements_.begin();
   2485        p != this->elements_.end();
   2486        ++p)
   2487     (*p)->set_section_addresses(symtab, layout, this->output_section_,
   2488 				subalign, dot_value, dot_alignment,
   2489 				&dot_section, &fill, &input_sections);
   2490 
   2491   gold_assert(input_sections.empty());
   2492 
   2493   if (vma_region != NULL)
   2494     {
   2495       // Update the VMA region being used by the section now that we know how
   2496       // big it is.  Use the current address in the region, rather than
   2497       // start_address because that might have been aligned upwards and we
   2498       // need to allow for the padding.
   2499       Expression* addr = vma_region->get_current_address();
   2500       uint64_t size = *dot_value - addr->eval(symtab, layout, false);
   2501 
   2502       vma_region->increment_offset(this->get_section_name(), size,
   2503 				   symtab, layout);
   2504     }
   2505 
   2506   // If the LMA region is different from the VMA region, then increment the
   2507   // offset there as well.  Note that we use the same "dot_value -
   2508   // start_address" formula that is used in the load_address assignment below.
   2509   if (lma_region != NULL && lma_region != vma_region)
   2510     lma_region->increment_offset(this->get_section_name(),
   2511 				 *dot_value - start_address,
   2512 				 symtab, layout);
   2513 
   2514   // Compute the load address for the following section.
   2515   if (this->output_section_ == NULL)
   2516     *load_address = *dot_value;
   2517   else if (this->load_address_ == NULL)
   2518     {
   2519       if (lma_region == NULL)
   2520 	*load_address = *dot_value;
   2521       else
   2522 	*load_address =
   2523 	  lma_region->get_current_address()->eval(symtab, layout, false);
   2524     }
   2525   else
   2526     *load_address = (this->output_section_->load_address()
   2527                      + (*dot_value - start_address));
   2528 
   2529   if (this->output_section_ != NULL)
   2530     {
   2531       if (this->is_relro_)
   2532 	this->output_section_->set_is_relro();
   2533       else
   2534 	this->output_section_->clear_is_relro();
   2535 
   2536       // If this is a NOLOAD section, keep dot and load address unchanged.
   2537       if (this->output_section_->is_noload())
   2538 	{
   2539 	  *dot_value = old_dot_value;
   2540 	  *load_address = old_load_address;
   2541 	}
   2542     }
   2543 }
   2544 
   2545 // Check a constraint (ONLY_IF_RO, etc.) on an output section.  If
   2546 // this section is constrained, and the input sections do not match,
   2547 // return the constraint, and set *POSD.
   2548 
   2549 Section_constraint
   2550 Output_section_definition::check_constraint(Output_section_definition** posd)
   2551 {
   2552   switch (this->constraint_)
   2553     {
   2554     case CONSTRAINT_NONE:
   2555       return CONSTRAINT_NONE;
   2556 
   2557     case CONSTRAINT_ONLY_IF_RO:
   2558       if (this->output_section_ != NULL
   2559 	  && (this->output_section_->flags() & elfcpp::SHF_WRITE) != 0)
   2560 	{
   2561 	  *posd = this;
   2562 	  return CONSTRAINT_ONLY_IF_RO;
   2563 	}
   2564       return CONSTRAINT_NONE;
   2565 
   2566     case CONSTRAINT_ONLY_IF_RW:
   2567       if (this->output_section_ != NULL
   2568 	  && (this->output_section_->flags() & elfcpp::SHF_WRITE) == 0)
   2569 	{
   2570 	  *posd = this;
   2571 	  return CONSTRAINT_ONLY_IF_RW;
   2572 	}
   2573       return CONSTRAINT_NONE;
   2574 
   2575     case CONSTRAINT_SPECIAL:
   2576       if (this->output_section_ != NULL)
   2577 	gold_error(_("SPECIAL constraints are not implemented"));
   2578       return CONSTRAINT_NONE;
   2579 
   2580     default:
   2581       gold_unreachable();
   2582     }
   2583 }
   2584 
   2585 // See if this is the alternate output section for a constrained
   2586 // output section.  If it is, transfer the Output_section and return
   2587 // true.  Otherwise return false.
   2588 
   2589 bool
   2590 Output_section_definition::alternate_constraint(
   2591     Output_section_definition* posd,
   2592     Section_constraint constraint)
   2593 {
   2594   if (this->name_ != posd->name_)
   2595     return false;
   2596 
   2597   switch (constraint)
   2598     {
   2599     case CONSTRAINT_ONLY_IF_RO:
   2600       if (this->constraint_ != CONSTRAINT_ONLY_IF_RW)
   2601 	return false;
   2602       break;
   2603 
   2604     case CONSTRAINT_ONLY_IF_RW:
   2605       if (this->constraint_ != CONSTRAINT_ONLY_IF_RO)
   2606 	return false;
   2607       break;
   2608 
   2609     default:
   2610       gold_unreachable();
   2611     }
   2612 
   2613   // We have found the alternate constraint.  We just need to move
   2614   // over the Output_section.  When constraints are used properly,
   2615   // THIS should not have an output_section pointer, as all the input
   2616   // sections should have matched the other definition.
   2617 
   2618   if (this->output_section_ != NULL)
   2619     gold_error(_("mismatched definition for constrained sections"));
   2620 
   2621   this->output_section_ = posd->output_section_;
   2622   posd->output_section_ = NULL;
   2623 
   2624   if (this->is_relro_)
   2625     this->output_section_->set_is_relro();
   2626   else
   2627     this->output_section_->clear_is_relro();
   2628 
   2629   return true;
   2630 }
   2631 
   2632 // Get the list of segments to use for an allocated section when using
   2633 // a PHDRS clause.
   2634 
   2635 Output_section*
   2636 Output_section_definition::allocate_to_segment(String_list** phdrs_list,
   2637 					       bool* orphan)
   2638 {
   2639   // Update phdrs_list even if we don't have an output section. It
   2640   // might be used by the following sections.
   2641   if (this->phdrs_ != NULL)
   2642     *phdrs_list = this->phdrs_;
   2643 
   2644   if (this->output_section_ == NULL)
   2645     return NULL;
   2646   if ((this->output_section_->flags() & elfcpp::SHF_ALLOC) == 0)
   2647     return NULL;
   2648   *orphan = false;
   2649   return this->output_section_;
   2650 }
   2651 
   2652 // Look for an output section by name and return the address, the load
   2653 // address, the alignment, and the size.  This is used when an
   2654 // expression refers to an output section which was not actually
   2655 // created.  This returns true if the section was found, false
   2656 // otherwise.
   2657 
   2658 bool
   2659 Output_section_definition::get_output_section_info(const char* name,
   2660                                                    uint64_t* address,
   2661                                                    uint64_t* load_address,
   2662                                                    uint64_t* addralign,
   2663                                                    uint64_t* size) const
   2664 {
   2665   if (this->name_ != name)
   2666     return false;
   2667 
   2668   if (this->output_section_ != NULL)
   2669     {
   2670       *address = this->output_section_->address();
   2671       if (this->output_section_->has_load_address())
   2672         *load_address = this->output_section_->load_address();
   2673       else
   2674         *load_address = *address;
   2675       *addralign = this->output_section_->addralign();
   2676       *size = this->output_section_->current_data_size();
   2677     }
   2678   else
   2679     {
   2680       *address = this->evaluated_address_;
   2681       *load_address = this->evaluated_load_address_;
   2682       *addralign = this->evaluated_addralign_;
   2683       *size = 0;
   2684     }
   2685 
   2686   return true;
   2687 }
   2688 
   2689 // Print for debugging.
   2690 
   2691 void
   2692 Output_section_definition::print(FILE* f) const
   2693 {
   2694   fprintf(f, "  %s ", this->name_.c_str());
   2695 
   2696   if (this->address_ != NULL)
   2697     {
   2698       this->address_->print(f);
   2699       fprintf(f, " ");
   2700     }
   2701 
   2702   if (this->script_section_type_ != SCRIPT_SECTION_TYPE_NONE)
   2703       fprintf(f, "(%s) ",
   2704 	      this->script_section_type_name(this->script_section_type_));
   2705 
   2706   fprintf(f, ": ");
   2707 
   2708   if (this->load_address_ != NULL)
   2709     {
   2710       fprintf(f, "AT(");
   2711       this->load_address_->print(f);
   2712       fprintf(f, ") ");
   2713     }
   2714 
   2715   if (this->align_ != NULL)
   2716     {
   2717       fprintf(f, "ALIGN(");
   2718       this->align_->print(f);
   2719       fprintf(f, ") ");
   2720     }
   2721 
   2722   if (this->subalign_ != NULL)
   2723     {
   2724       fprintf(f, "SUBALIGN(");
   2725       this->subalign_->print(f);
   2726       fprintf(f, ") ");
   2727     }
   2728 
   2729   fprintf(f, "{\n");
   2730 
   2731   for (Output_section_elements::const_iterator p = this->elements_.begin();
   2732        p != this->elements_.end();
   2733        ++p)
   2734     (*p)->print(f);
   2735 
   2736   fprintf(f, "  }");
   2737 
   2738   if (this->fill_ != NULL)
   2739     {
   2740       fprintf(f, " = ");
   2741       this->fill_->print(f);
   2742     }
   2743 
   2744   if (this->phdrs_ != NULL)
   2745     {
   2746       for (String_list::const_iterator p = this->phdrs_->begin();
   2747 	   p != this->phdrs_->end();
   2748 	   ++p)
   2749 	fprintf(f, " :%s", p->c_str());
   2750     }
   2751 
   2752   fprintf(f, "\n");
   2753 }
   2754 
   2755 Script_sections::Section_type
   2756 Output_section_definition::section_type() const
   2757 {
   2758   switch (this->script_section_type_)
   2759     {
   2760     case SCRIPT_SECTION_TYPE_NONE:
   2761       return Script_sections::ST_NONE;
   2762     case SCRIPT_SECTION_TYPE_NOLOAD:
   2763       return Script_sections::ST_NOLOAD;
   2764     case SCRIPT_SECTION_TYPE_COPY:
   2765     case SCRIPT_SECTION_TYPE_DSECT:
   2766     case SCRIPT_SECTION_TYPE_INFO:
   2767     case SCRIPT_SECTION_TYPE_OVERLAY:
   2768       // There are not really support so we treat them as ST_NONE.  The
   2769       // parse should have issued errors for them already.
   2770       return Script_sections::ST_NONE;
   2771     default:
   2772       gold_unreachable();
   2773     }
   2774 }
   2775 
   2776 // Return the name of a script section type.
   2777 
   2778 const char*
   2779 Output_section_definition::script_section_type_name(
   2780     Script_section_type script_section_type)
   2781 {
   2782   switch (script_section_type)
   2783     {
   2784     case SCRIPT_SECTION_TYPE_NONE:
   2785       return "NONE";
   2786     case SCRIPT_SECTION_TYPE_NOLOAD:
   2787       return "NOLOAD";
   2788     case SCRIPT_SECTION_TYPE_DSECT:
   2789       return "DSECT";
   2790     case SCRIPT_SECTION_TYPE_COPY:
   2791       return "COPY";
   2792     case SCRIPT_SECTION_TYPE_INFO:
   2793       return "INFO";
   2794     case SCRIPT_SECTION_TYPE_OVERLAY:
   2795       return "OVERLAY";
   2796     default:
   2797       gold_unreachable();
   2798     }
   2799 }
   2800 
   2801 void
   2802 Output_section_definition::set_memory_region(Memory_region* mr, bool set_vma)
   2803 {
   2804   gold_assert(mr != NULL);
   2805   // Add the current section to the specified region's list.
   2806   mr->add_section(this, set_vma);
   2807 }
   2808 
   2809 // An output section created to hold orphaned input sections.  These
   2810 // do not actually appear in linker scripts.  However, for convenience
   2811 // when setting the output section addresses, we put a marker to these
   2812 // sections in the appropriate place in the list of SECTIONS elements.
   2813 
   2814 class Orphan_output_section : public Sections_element
   2815 {
   2816  public:
   2817   Orphan_output_section(Output_section* os)
   2818     : os_(os)
   2819   { }
   2820 
   2821   // Return whether the orphan output section is relro.  We can just
   2822   // check the output section because we always set the flag, if
   2823   // needed, just after we create the Orphan_output_section.
   2824   bool
   2825   is_relro() const
   2826   { return this->os_->is_relro(); }
   2827 
   2828   // Initialize OSP with an output section.  This should have been
   2829   // done already.
   2830   void
   2831   orphan_section_init(Orphan_section_placement*,
   2832 		      Script_sections::Elements_iterator)
   2833   { gold_unreachable(); }
   2834 
   2835   // Set section addresses.
   2836   void
   2837   set_section_addresses(Symbol_table*, Layout*, uint64_t*, uint64_t*,
   2838 			uint64_t*);
   2839 
   2840   // Get the list of segments to use for an allocated section when
   2841   // using a PHDRS clause.
   2842   Output_section*
   2843   allocate_to_segment(String_list**, bool*);
   2844 
   2845   // Return the associated Output_section.
   2846   Output_section*
   2847   get_output_section() const
   2848   { return this->os_; }
   2849 
   2850   // Print for debugging.
   2851   void
   2852   print(FILE* f) const
   2853   {
   2854     fprintf(f, "  marker for orphaned output section %s\n",
   2855 	    this->os_->name());
   2856   }
   2857 
   2858  private:
   2859   Output_section* os_;
   2860 };
   2861 
   2862 // Set section addresses.
   2863 
   2864 void
   2865 Orphan_output_section::set_section_addresses(Symbol_table*, Layout*,
   2866 					     uint64_t* dot_value,
   2867 					     uint64_t*,
   2868                                              uint64_t* load_address)
   2869 {
   2870   typedef std::list<Output_section::Input_section> Input_section_list;
   2871 
   2872   bool have_load_address = *load_address != *dot_value;
   2873 
   2874   uint64_t address = *dot_value;
   2875   address = align_address(address, this->os_->addralign());
   2876 
   2877   // If input section sorting is requested via --section-ordering-file or
   2878   // linker plugins, then do it here.  This is important because we want
   2879   // any sorting specified in the linker scripts, which will be done after
   2880   // this, to take precedence.  The final order of input sections is then
   2881   // guaranteed to be according to the linker script specification.
   2882   if (this->os_ != NULL
   2883       && this->os_->input_section_order_specified())
   2884     this->os_->sort_attached_input_sections();
   2885 
   2886   // For a relocatable link, all orphan sections are put at
   2887   // address 0.  In general we expect all sections to be at
   2888   // address 0 for a relocatable link, but we permit the linker
   2889   // script to override that for specific output sections.
   2890   if (parameters->options().relocatable())
   2891     {
   2892       address = 0;
   2893       *load_address = 0;
   2894       have_load_address = false;
   2895     }
   2896 
   2897   if ((this->os_->flags() & elfcpp::SHF_ALLOC) != 0)
   2898     {
   2899       this->os_->set_address(address);
   2900       if (have_load_address)
   2901         this->os_->set_load_address(align_address(*load_address,
   2902                                                   this->os_->addralign()));
   2903     }
   2904 
   2905   Input_section_list input_sections;
   2906   address += this->os_->get_input_sections(address, "", &input_sections);
   2907 
   2908   for (Input_section_list::iterator p = input_sections.begin();
   2909        p != input_sections.end();
   2910        ++p)
   2911     {
   2912       uint64_t addralign = p->addralign();
   2913       if (!p->is_input_section())
   2914 	p->output_section_data()->finalize_data_size();
   2915       uint64_t size = p->data_size();
   2916       address = align_address(address, addralign);
   2917       this->os_->add_script_input_section(*p);
   2918       address += size;
   2919     }
   2920 
   2921   if (parameters->options().relocatable())
   2922     {
   2923       // For a relocatable link, reset DOT_VALUE to 0.
   2924       *dot_value = 0;
   2925       *load_address = 0;
   2926     }
   2927   else if (this->os_ == NULL
   2928 	   || (this->os_->flags() & elfcpp::SHF_TLS) == 0
   2929 	   || this->os_->type() != elfcpp::SHT_NOBITS)
   2930     {
   2931       // An SHF_TLS/SHT_NOBITS section does not take up any address space.
   2932       if (!have_load_address)
   2933 	*load_address = address;
   2934       else
   2935 	*load_address += address - *dot_value;
   2936 
   2937       *dot_value = address;
   2938     }
   2939 }
   2940 
   2941 // Get the list of segments to use for an allocated section when using
   2942 // a PHDRS clause.  If this is an allocated section, return the
   2943 // Output_section.  We don't change the list of segments.
   2944 
   2945 Output_section*
   2946 Orphan_output_section::allocate_to_segment(String_list**, bool* orphan)
   2947 {
   2948   if ((this->os_->flags() & elfcpp::SHF_ALLOC) == 0)
   2949     return NULL;
   2950   *orphan = true;
   2951   return this->os_;
   2952 }
   2953 
   2954 // Class Phdrs_element.  A program header from a PHDRS clause.
   2955 
   2956 class Phdrs_element
   2957 {
   2958  public:
   2959   Phdrs_element(const char* name, size_t namelen, unsigned int type,
   2960 		bool includes_filehdr, bool includes_phdrs,
   2961 		bool is_flags_valid, unsigned int flags,
   2962 		Expression* load_address)
   2963     : name_(name, namelen), type_(type), includes_filehdr_(includes_filehdr),
   2964       includes_phdrs_(includes_phdrs), is_flags_valid_(is_flags_valid),
   2965       flags_(flags), load_address_(load_address), load_address_value_(0),
   2966       segment_(NULL)
   2967   { }
   2968 
   2969   // Return the name of this segment.
   2970   const std::string&
   2971   name() const
   2972   { return this->name_; }
   2973 
   2974   // Return the type of the segment.
   2975   unsigned int
   2976   type() const
   2977   { return this->type_; }
   2978 
   2979   // Whether to include the file header.
   2980   bool
   2981   includes_filehdr() const
   2982   { return this->includes_filehdr_; }
   2983 
   2984   // Whether to include the program headers.
   2985   bool
   2986   includes_phdrs() const
   2987   { return this->includes_phdrs_; }
   2988 
   2989   // Return whether there is a load address.
   2990   bool
   2991   has_load_address() const
   2992   { return this->load_address_ != NULL; }
   2993 
   2994   // Evaluate the load address expression if there is one.
   2995   void
   2996   eval_load_address(Symbol_table* symtab, Layout* layout)
   2997   {
   2998     if (this->load_address_ != NULL)
   2999       this->load_address_value_ = this->load_address_->eval(symtab, layout,
   3000 							    true);
   3001   }
   3002 
   3003   // Return the load address.
   3004   uint64_t
   3005   load_address() const
   3006   {
   3007     gold_assert(this->load_address_ != NULL);
   3008     return this->load_address_value_;
   3009   }
   3010 
   3011   // Create the segment.
   3012   Output_segment*
   3013   create_segment(Layout* layout)
   3014   {
   3015     this->segment_ = layout->make_output_segment(this->type_, this->flags_);
   3016     return this->segment_;
   3017   }
   3018 
   3019   // Return the segment.
   3020   Output_segment*
   3021   segment()
   3022   { return this->segment_; }
   3023 
   3024   // Release the segment.
   3025   void
   3026   release_segment()
   3027   { this->segment_ = NULL; }
   3028 
   3029   // Set the segment flags if appropriate.
   3030   void
   3031   set_flags_if_valid()
   3032   {
   3033     if (this->is_flags_valid_)
   3034       this->segment_->set_flags(this->flags_);
   3035   }
   3036 
   3037   // Print for debugging.
   3038   void
   3039   print(FILE*) const;
   3040 
   3041  private:
   3042   // The name used in the script.
   3043   std::string name_;
   3044   // The type of the segment (PT_LOAD, etc.).
   3045   unsigned int type_;
   3046   // Whether this segment includes the file header.
   3047   bool includes_filehdr_;
   3048   // Whether this segment includes the section headers.
   3049   bool includes_phdrs_;
   3050   // Whether the flags were explicitly specified.
   3051   bool is_flags_valid_;
   3052   // The flags for this segment (PF_R, etc.) if specified.
   3053   unsigned int flags_;
   3054   // The expression for the load address for this segment.  This may
   3055   // be NULL.
   3056   Expression* load_address_;
   3057   // The actual load address from evaluating the expression.
   3058   uint64_t load_address_value_;
   3059   // The segment itself.
   3060   Output_segment* segment_;
   3061 };
   3062 
   3063 // Print for debugging.
   3064 
   3065 void
   3066 Phdrs_element::print(FILE* f) const
   3067 {
   3068   fprintf(f, "  %s 0x%x", this->name_.c_str(), this->type_);
   3069   if (this->includes_filehdr_)
   3070     fprintf(f, " FILEHDR");
   3071   if (this->includes_phdrs_)
   3072     fprintf(f, " PHDRS");
   3073   if (this->is_flags_valid_)
   3074     fprintf(f, " FLAGS(%u)", this->flags_);
   3075   if (this->load_address_ != NULL)
   3076     {
   3077       fprintf(f, " AT(");
   3078       this->load_address_->print(f);
   3079       fprintf(f, ")");
   3080     }
   3081   fprintf(f, ";\n");
   3082 }
   3083 
   3084 // Add a memory region.
   3085 
   3086 void
   3087 Script_sections::add_memory_region(const char* name, size_t namelen,
   3088 				   unsigned int attributes,
   3089 				   Expression* start, Expression* length)
   3090 {
   3091   if (this->memory_regions_ == NULL)
   3092     this->memory_regions_ = new Memory_regions();
   3093   else if (this->find_memory_region(name, namelen))
   3094     {
   3095       gold_error(_("region '%.*s' already defined"), static_cast<int>(namelen),
   3096                   name);
   3097       // FIXME: Add a GOLD extension to allow multiple regions with the same
   3098       // name.  This would amount to a single region covering disjoint blocks
   3099       // of memory, which is useful for embedded devices.
   3100     }
   3101 
   3102   // FIXME: Check the length and start values.  Currently we allow
   3103   // non-constant expressions for these values, whereas LD does not.
   3104 
   3105   // FIXME: Add a GOLD extension to allow NEGATIVE LENGTHS.  This would
   3106   // describe a region that packs from the end address going down, rather
   3107   // than the start address going up.  This would be useful for embedded
   3108   // devices.
   3109 
   3110   this->memory_regions_->push_back(new Memory_region(name, namelen, attributes,
   3111 						     start, length));
   3112 }
   3113 
   3114 // Find a memory region.
   3115 
   3116 Memory_region*
   3117 Script_sections::find_memory_region(const char* name, size_t namelen)
   3118 {
   3119   if (this->memory_regions_ == NULL)
   3120     return NULL;
   3121 
   3122   for (Memory_regions::const_iterator m = this->memory_regions_->begin();
   3123        m != this->memory_regions_->end();
   3124        ++m)
   3125     if ((*m)->name_match(name, namelen))
   3126       return *m;
   3127 
   3128   return NULL;
   3129 }
   3130 
   3131 // Find a memory region's origin.
   3132 
   3133 Expression*
   3134 Script_sections::find_memory_region_origin(const char* name, size_t namelen)
   3135 {
   3136   Memory_region* mr = find_memory_region(name, namelen);
   3137   if (mr == NULL)
   3138     return NULL;
   3139 
   3140   return mr->start_address();
   3141 }
   3142 
   3143 // Find a memory region's length.
   3144 
   3145 Expression*
   3146 Script_sections::find_memory_region_length(const char* name, size_t namelen)
   3147 {
   3148   Memory_region* mr = find_memory_region(name, namelen);
   3149   if (mr == NULL)
   3150     return NULL;
   3151 
   3152   return mr->length();
   3153 }
   3154 
   3155 // Set the memory region to use for the current section.
   3156 
   3157 void
   3158 Script_sections::set_memory_region(Memory_region* mr, bool set_vma)
   3159 {
   3160   gold_assert(!this->sections_elements_->empty());
   3161   this->sections_elements_->back()->set_memory_region(mr, set_vma);
   3162 }
   3163 
   3164 // Class Script_sections.
   3165 
   3166 Script_sections::Script_sections()
   3167   : saw_sections_clause_(false),
   3168     in_sections_clause_(false),
   3169     sections_elements_(NULL),
   3170     output_section_(NULL),
   3171     memory_regions_(NULL),
   3172     phdrs_elements_(NULL),
   3173     orphan_section_placement_(NULL),
   3174     data_segment_align_start_(),
   3175     saw_data_segment_align_(false),
   3176     saw_relro_end_(false),
   3177     saw_segment_start_expression_(false)
   3178 {
   3179 }
   3180 
   3181 // Start a SECTIONS clause.
   3182 
   3183 void
   3184 Script_sections::start_sections()
   3185 {
   3186   gold_assert(!this->in_sections_clause_ && this->output_section_ == NULL);
   3187   this->saw_sections_clause_ = true;
   3188   this->in_sections_clause_ = true;
   3189   if (this->sections_elements_ == NULL)
   3190     this->sections_elements_ = new Sections_elements;
   3191 }
   3192 
   3193 // Finish a SECTIONS clause.
   3194 
   3195 void
   3196 Script_sections::finish_sections()
   3197 {
   3198   gold_assert(this->in_sections_clause_ && this->output_section_ == NULL);
   3199   this->in_sections_clause_ = false;
   3200 }
   3201 
   3202 // Add a symbol to be defined.
   3203 
   3204 void
   3205 Script_sections::add_symbol_assignment(const char* name, size_t length,
   3206 				       Expression* val, bool provide,
   3207 				       bool hidden)
   3208 {
   3209   if (this->output_section_ != NULL)
   3210     this->output_section_->add_symbol_assignment(name, length, val,
   3211 						 provide, hidden);
   3212   else
   3213     {
   3214       Sections_element* p = new Sections_element_assignment(name, length,
   3215 							    val, provide,
   3216 							    hidden);
   3217       this->sections_elements_->push_back(p);
   3218     }
   3219 }
   3220 
   3221 // Add an assignment to the special dot symbol.
   3222 
   3223 void
   3224 Script_sections::add_dot_assignment(Expression* val)
   3225 {
   3226   if (this->output_section_ != NULL)
   3227     this->output_section_->add_dot_assignment(val);
   3228   else
   3229     {
   3230       // The GNU linker permits assignments to . to appears outside of
   3231       // a SECTIONS clause, and treats it as appearing inside, so
   3232       // sections_elements_ may be NULL here.
   3233       if (this->sections_elements_ == NULL)
   3234 	{
   3235 	  this->sections_elements_ = new Sections_elements;
   3236 	  this->saw_sections_clause_ = true;
   3237 	}
   3238 
   3239       Sections_element* p = new Sections_element_dot_assignment(val);
   3240       this->sections_elements_->push_back(p);
   3241     }
   3242 }
   3243 
   3244 // Add an assertion.
   3245 
   3246 void
   3247 Script_sections::add_assertion(Expression* check, const char* message,
   3248 			       size_t messagelen)
   3249 {
   3250   if (this->output_section_ != NULL)
   3251     this->output_section_->add_assertion(check, message, messagelen);
   3252   else
   3253     {
   3254       Sections_element* p = new Sections_element_assertion(check, message,
   3255 							   messagelen);
   3256       this->sections_elements_->push_back(p);
   3257     }
   3258 }
   3259 
   3260 // Start processing entries for an output section.
   3261 
   3262 void
   3263 Script_sections::start_output_section(
   3264     const char* name,
   3265     size_t namelen,
   3266     const Parser_output_section_header* header)
   3267 {
   3268   Output_section_definition* posd = new Output_section_definition(name,
   3269 								  namelen,
   3270 								  header);
   3271   this->sections_elements_->push_back(posd);
   3272   gold_assert(this->output_section_ == NULL);
   3273   this->output_section_ = posd;
   3274 }
   3275 
   3276 // Stop processing entries for an output section.
   3277 
   3278 void
   3279 Script_sections::finish_output_section(
   3280     const Parser_output_section_trailer* trailer)
   3281 {
   3282   gold_assert(this->output_section_ != NULL);
   3283   this->output_section_->finish(trailer);
   3284   this->output_section_ = NULL;
   3285 }
   3286 
   3287 // Add a data item to the current output section.
   3288 
   3289 void
   3290 Script_sections::add_data(int size, bool is_signed, Expression* val)
   3291 {
   3292   gold_assert(this->output_section_ != NULL);
   3293   this->output_section_->add_data(size, is_signed, val);
   3294 }
   3295 
   3296 // Add a fill value setting to the current output section.
   3297 
   3298 void
   3299 Script_sections::add_fill(Expression* val)
   3300 {
   3301   gold_assert(this->output_section_ != NULL);
   3302   this->output_section_->add_fill(val);
   3303 }
   3304 
   3305 // Add an input section specification to the current output section.
   3306 
   3307 void
   3308 Script_sections::add_input_section(const Input_section_spec* spec, bool keep)
   3309 {
   3310   gold_assert(this->output_section_ != NULL);
   3311   this->output_section_->add_input_section(spec, keep);
   3312 }
   3313 
   3314 // This is called when we see DATA_SEGMENT_ALIGN.  It means that any
   3315 // subsequent output sections may be relro.
   3316 
   3317 void
   3318 Script_sections::data_segment_align()
   3319 {
   3320   if (this->saw_data_segment_align_)
   3321     gold_error(_("DATA_SEGMENT_ALIGN may only appear once in a linker script"));
   3322   gold_assert(!this->sections_elements_->empty());
   3323   Sections_elements::iterator p = this->sections_elements_->end();
   3324   --p;
   3325   this->data_segment_align_start_ = p;
   3326   this->saw_data_segment_align_ = true;
   3327 }
   3328 
   3329 // This is called when we see DATA_SEGMENT_RELRO_END.  It means that
   3330 // any output sections seen since DATA_SEGMENT_ALIGN are relro.
   3331 
   3332 void
   3333 Script_sections::data_segment_relro_end()
   3334 {
   3335   if (this->saw_relro_end_)
   3336     gold_error(_("DATA_SEGMENT_RELRO_END may only appear once "
   3337 		 "in a linker script"));
   3338   this->saw_relro_end_ = true;
   3339 
   3340   if (!this->saw_data_segment_align_)
   3341     gold_error(_("DATA_SEGMENT_RELRO_END must follow DATA_SEGMENT_ALIGN"));
   3342   else
   3343     {
   3344       Sections_elements::iterator p = this->data_segment_align_start_;
   3345       for (++p; p != this->sections_elements_->end(); ++p)
   3346 	(*p)->set_is_relro();
   3347     }
   3348 }
   3349 
   3350 // Create any required sections.
   3351 
   3352 void
   3353 Script_sections::create_sections(Layout* layout)
   3354 {
   3355   if (!this->saw_sections_clause_)
   3356     return;
   3357   for (Sections_elements::iterator p = this->sections_elements_->begin();
   3358        p != this->sections_elements_->end();
   3359        ++p)
   3360     (*p)->create_sections(layout);
   3361 }
   3362 
   3363 // Add any symbols we are defining to the symbol table.
   3364 
   3365 void
   3366 Script_sections::add_symbols_to_table(Symbol_table* symtab)
   3367 {
   3368   if (!this->saw_sections_clause_)
   3369     return;
   3370   for (Sections_elements::iterator p = this->sections_elements_->begin();
   3371        p != this->sections_elements_->end();
   3372        ++p)
   3373     (*p)->add_symbols_to_table(symtab);
   3374 }
   3375 
   3376 // Finalize symbols and check assertions.
   3377 
   3378 void
   3379 Script_sections::finalize_symbols(Symbol_table* symtab, const Layout* layout)
   3380 {
   3381   if (!this->saw_sections_clause_)
   3382     return;
   3383   uint64_t dot_value = 0;
   3384   for (Sections_elements::iterator p = this->sections_elements_->begin();
   3385        p != this->sections_elements_->end();
   3386        ++p)
   3387     (*p)->finalize_symbols(symtab, layout, &dot_value);
   3388 }
   3389 
   3390 // Return the name of the output section to use for an input file name
   3391 // and section name.
   3392 
   3393 const char*
   3394 Script_sections::output_section_name(
   3395     const char* file_name,
   3396     const char* section_name,
   3397     Output_section*** output_section_slot,
   3398     Script_sections::Section_type* psection_type,
   3399     bool* keep)
   3400 {
   3401   for (Sections_elements::const_iterator p = this->sections_elements_->begin();
   3402        p != this->sections_elements_->end();
   3403        ++p)
   3404     {
   3405       const char* ret = (*p)->output_section_name(file_name, section_name,
   3406 						  output_section_slot,
   3407 						  psection_type, keep);
   3408 
   3409       if (ret != NULL)
   3410 	{
   3411 	  // The special name /DISCARD/ means that the input section
   3412 	  // should be discarded.
   3413 	  if (strcmp(ret, "/DISCARD/") == 0)
   3414 	    {
   3415 	      *output_section_slot = NULL;
   3416 	      *psection_type = Script_sections::ST_NONE;
   3417 	      return NULL;
   3418 	    }
   3419 	  return ret;
   3420 	}
   3421     }
   3422 
   3423   // If we couldn't find a mapping for the name, the output section
   3424   // gets the name of the input section.
   3425 
   3426   *output_section_slot = NULL;
   3427   *psection_type = Script_sections::ST_NONE;
   3428 
   3429   return section_name;
   3430 }
   3431 
   3432 // Place a marker for an orphan output section into the SECTIONS
   3433 // clause.
   3434 
   3435 void
   3436 Script_sections::place_orphan(Output_section* os)
   3437 {
   3438   Orphan_section_placement* osp = this->orphan_section_placement_;
   3439   if (osp == NULL)
   3440     {
   3441       // Initialize the Orphan_section_placement structure.
   3442       osp = new Orphan_section_placement();
   3443       for (Sections_elements::iterator p = this->sections_elements_->begin();
   3444 	   p != this->sections_elements_->end();
   3445 	   ++p)
   3446 	(*p)->orphan_section_init(osp, p);
   3447       gold_assert(!this->sections_elements_->empty());
   3448       Sections_elements::iterator last = this->sections_elements_->end();
   3449       --last;
   3450       osp->last_init(last);
   3451       this->orphan_section_placement_ = osp;
   3452     }
   3453 
   3454   Orphan_output_section* orphan = new Orphan_output_section(os);
   3455 
   3456   // Look for where to put ORPHAN.
   3457   Sections_elements::iterator* where;
   3458   if (osp->find_place(os, &where))
   3459     {
   3460       if ((**where)->is_relro())
   3461 	os->set_is_relro();
   3462       else
   3463 	os->clear_is_relro();
   3464 
   3465       // We want to insert ORPHAN after *WHERE, and then update *WHERE
   3466       // so that the next one goes after this one.
   3467       Sections_elements::iterator p = *where;
   3468       gold_assert(p != this->sections_elements_->end());
   3469       ++p;
   3470       *where = this->sections_elements_->insert(p, orphan);
   3471     }
   3472   else
   3473     {
   3474       os->clear_is_relro();
   3475       // We don't have a place to put this orphan section.  Put it,
   3476       // and all other sections like it, at the end, but before the
   3477       // sections which always come at the end.
   3478       Sections_elements::iterator last = osp->last_place();
   3479       *where = this->sections_elements_->insert(last, orphan);
   3480     }
   3481 }
   3482 
   3483 // Set the addresses of all the output sections.  Walk through all the
   3484 // elements, tracking the dot symbol.  Apply assignments which set
   3485 // absolute symbol values, in case they are used when setting dot.
   3486 // Fill in data statement values.  As we find output sections, set the
   3487 // address, set the address of all associated input sections, and
   3488 // update dot.  Return the segment which should hold the file header
   3489 // and segment headers, if any.
   3490 
   3491 Output_segment*
   3492 Script_sections::set_section_addresses(Symbol_table* symtab, Layout* layout)
   3493 {
   3494   gold_assert(this->saw_sections_clause_);
   3495 
   3496   // Implement ONLY_IF_RO/ONLY_IF_RW constraints.  These are a pain
   3497   // for our representation.
   3498   for (Sections_elements::iterator p = this->sections_elements_->begin();
   3499        p != this->sections_elements_->end();
   3500        ++p)
   3501     {
   3502       Output_section_definition* posd;
   3503       Section_constraint failed_constraint = (*p)->check_constraint(&posd);
   3504       if (failed_constraint != CONSTRAINT_NONE)
   3505 	{
   3506 	  Sections_elements::iterator q;
   3507 	  for (q = this->sections_elements_->begin();
   3508 	       q != this->sections_elements_->end();
   3509 	       ++q)
   3510 	    {
   3511 	      if (q != p)
   3512 		{
   3513 		  if ((*q)->alternate_constraint(posd, failed_constraint))
   3514 		    break;
   3515 		}
   3516 	    }
   3517 
   3518 	  if (q == this->sections_elements_->end())
   3519 	    gold_error(_("no matching section constraint"));
   3520 	}
   3521     }
   3522 
   3523   // Force the alignment of the first TLS section to be the maximum
   3524   // alignment of all TLS sections.
   3525   Output_section* first_tls = NULL;
   3526   uint64_t tls_align = 0;
   3527   for (Sections_elements::const_iterator p = this->sections_elements_->begin();
   3528        p != this->sections_elements_->end();
   3529        ++p)
   3530     {
   3531       Output_section* os = (*p)->get_output_section();
   3532       if (os != NULL && (os->flags() & elfcpp::SHF_TLS) != 0)
   3533 	{
   3534 	  if (first_tls == NULL)
   3535 	    first_tls = os;
   3536 	  if (os->addralign() > tls_align)
   3537 	    tls_align = os->addralign();
   3538 	}
   3539     }
   3540   if (first_tls != NULL)
   3541     first_tls->set_addralign(tls_align);
   3542 
   3543   // For a relocatable link, we implicitly set dot to zero.
   3544   uint64_t dot_value = 0;
   3545   uint64_t dot_alignment = 0;
   3546   uint64_t load_address = 0;
   3547 
   3548   // Check to see if we want to use any of -Ttext, -Tdata and -Tbss options
   3549   // to set section addresses.  If the script has any SEGMENT_START
   3550   // expression, we do not set the section addresses.
   3551   bool use_tsection_options =
   3552     (!this->saw_segment_start_expression_
   3553      && (parameters->options().user_set_Ttext()
   3554 	 || parameters->options().user_set_Tdata()
   3555 	 || parameters->options().user_set_Tbss()));
   3556 
   3557   for (Sections_elements::iterator p = this->sections_elements_->begin();
   3558        p != this->sections_elements_->end();
   3559        ++p)
   3560     {
   3561       Output_section* os = (*p)->get_output_section();
   3562 
   3563       // Handle -Ttext, -Tdata and -Tbss options.  We do this by looking for
   3564       // the special sections by names and doing dot assignments.
   3565       if (use_tsection_options
   3566 	  && os != NULL
   3567 	  && (os->flags() & elfcpp::SHF_ALLOC) != 0)
   3568 	{
   3569 	  uint64_t new_dot_value = dot_value;
   3570 
   3571 	  if (parameters->options().user_set_Ttext()
   3572 	      && strcmp(os->name(), ".text") == 0)
   3573 	    new_dot_value = parameters->options().Ttext();
   3574 	  else if (parameters->options().user_set_Tdata()
   3575 	      && strcmp(os->name(), ".data") == 0)
   3576 	    new_dot_value = parameters->options().Tdata();
   3577 	  else if (parameters->options().user_set_Tbss()
   3578 	      && strcmp(os->name(), ".bss") == 0)
   3579 	    new_dot_value = parameters->options().Tbss();
   3580 
   3581 	  // Update dot and load address if necessary.
   3582 	  if (new_dot_value < dot_value)
   3583 	    gold_error(_("dot may not move backward"));
   3584 	  else if (new_dot_value != dot_value)
   3585 	    {
   3586 	      dot_value = new_dot_value;
   3587 	      load_address = new_dot_value;
   3588 	    }
   3589 	}
   3590 
   3591       (*p)->set_section_addresses(symtab, layout, &dot_value, &dot_alignment,
   3592 				  &load_address);
   3593     }
   3594 
   3595   if (this->phdrs_elements_ != NULL)
   3596     {
   3597       for (Phdrs_elements::iterator p = this->phdrs_elements_->begin();
   3598 	   p != this->phdrs_elements_->end();
   3599 	   ++p)
   3600 	(*p)->eval_load_address(symtab, layout);
   3601     }
   3602 
   3603   return this->create_segments(layout, dot_alignment);
   3604 }
   3605 
   3606 // Sort the sections in order to put them into segments.
   3607 
   3608 class Sort_output_sections
   3609 {
   3610  public:
   3611   Sort_output_sections(const Script_sections::Sections_elements* elements)
   3612    : elements_(elements)
   3613   { }
   3614 
   3615   bool
   3616   operator()(const Output_section* os1, const Output_section* os2) const;
   3617 
   3618  private:
   3619   int
   3620   script_compare(const Output_section* os1, const Output_section* os2) const;
   3621 
   3622  private:
   3623   const Script_sections::Sections_elements* elements_;
   3624 };
   3625 
   3626 bool
   3627 Sort_output_sections::operator()(const Output_section* os1,
   3628 				 const Output_section* os2) const
   3629 {
   3630   // Sort first by the load address.
   3631   uint64_t lma1 = (os1->has_load_address()
   3632 		   ? os1->load_address()
   3633 		   : os1->address());
   3634   uint64_t lma2 = (os2->has_load_address()
   3635 		   ? os2->load_address()
   3636 		   : os2->address());
   3637   if (lma1 != lma2)
   3638     return lma1 < lma2;
   3639 
   3640   // Then sort by the virtual address.
   3641   if (os1->address() != os2->address())
   3642     return os1->address() < os2->address();
   3643 
   3644   // If the linker script says which of these sections is first, go
   3645   // with what it says.
   3646   int i = this->script_compare(os1, os2);
   3647   if (i != 0)
   3648     return i < 0;
   3649 
   3650   // Sort PROGBITS before NOBITS.
   3651   bool nobits1 = os1->type() == elfcpp::SHT_NOBITS;
   3652   bool nobits2 = os2->type() == elfcpp::SHT_NOBITS;
   3653   if (nobits1 != nobits2)
   3654     return nobits2;
   3655 
   3656   // Sort PROGBITS TLS sections to the end, NOBITS TLS sections to the
   3657   // beginning.
   3658   bool tls1 = (os1->flags() & elfcpp::SHF_TLS) != 0;
   3659   bool tls2 = (os2->flags() & elfcpp::SHF_TLS) != 0;
   3660   if (tls1 != tls2)
   3661     return nobits1 ? tls1 : tls2;
   3662 
   3663   // Sort non-NOLOAD before NOLOAD.
   3664   if (os1->is_noload() && !os2->is_noload())
   3665     return true;
   3666   if (!os1->is_noload() && os2->is_noload())
   3667     return true;
   3668 
   3669   // The sections seem practically identical.  Sort by name to get a
   3670   // stable sort.
   3671   return os1->name() < os2->name();
   3672 }
   3673 
   3674 // Return -1 if OS1 comes before OS2 in ELEMENTS_, 1 if comes after, 0
   3675 // if either OS1 or OS2 is not mentioned.  This ensures that we keep
   3676 // empty sections in the order in which they appear in a linker
   3677 // script.
   3678 
   3679 int
   3680 Sort_output_sections::script_compare(const Output_section* os1,
   3681 				     const Output_section* os2) const
   3682 {
   3683   if (this->elements_ == NULL)
   3684     return 0;
   3685 
   3686   bool found_os1 = false;
   3687   bool found_os2 = false;
   3688   for (Script_sections::Sections_elements::const_iterator
   3689 	 p = this->elements_->begin();
   3690        p != this->elements_->end();
   3691        ++p)
   3692     {
   3693       if (os2 == (*p)->get_output_section())
   3694 	{
   3695 	  if (found_os1)
   3696 	    return -1;
   3697 	  found_os2 = true;
   3698 	}
   3699       else if (os1 == (*p)->get_output_section())
   3700 	{
   3701 	  if (found_os2)
   3702 	    return 1;
   3703 	  found_os1 = true;
   3704 	}
   3705     }
   3706 
   3707   return 0;
   3708 }
   3709 
   3710 // Return whether OS is a BSS section.  This is a SHT_NOBITS section.
   3711 // We treat a section with the SHF_TLS flag set as taking up space
   3712 // even if it is SHT_NOBITS (this is true of .tbss), as we allocate
   3713 // space for them in the file.
   3714 
   3715 bool
   3716 Script_sections::is_bss_section(const Output_section* os)
   3717 {
   3718   return (os->type() == elfcpp::SHT_NOBITS
   3719 	  && (os->flags() & elfcpp::SHF_TLS) == 0);
   3720 }
   3721 
   3722 // Return the size taken by the file header and the program headers.
   3723 
   3724 size_t
   3725 Script_sections::total_header_size(Layout* layout) const
   3726 {
   3727   size_t segment_count = layout->segment_count();
   3728   size_t file_header_size;
   3729   size_t segment_headers_size;
   3730   if (parameters->target().get_size() == 32)
   3731     {
   3732       file_header_size = elfcpp::Elf_sizes<32>::ehdr_size;
   3733       segment_headers_size = segment_count * elfcpp::Elf_sizes<32>::phdr_size;
   3734     }
   3735   else if (parameters->target().get_size() == 64)
   3736     {
   3737       file_header_size = elfcpp::Elf_sizes<64>::ehdr_size;
   3738       segment_headers_size = segment_count * elfcpp::Elf_sizes<64>::phdr_size;
   3739     }
   3740   else
   3741     gold_unreachable();
   3742 
   3743   return file_header_size + segment_headers_size;
   3744 }
   3745 
   3746 // Return the amount we have to subtract from the LMA to accommodate
   3747 // headers of the given size.  The complication is that the file
   3748 // header have to be at the start of a page, as otherwise it will not
   3749 // be at the start of the file.
   3750 
   3751 uint64_t
   3752 Script_sections::header_size_adjustment(uint64_t lma,
   3753 					size_t sizeof_headers) const
   3754 {
   3755   const uint64_t abi_pagesize = parameters->target().abi_pagesize();
   3756   uint64_t hdr_lma = lma - sizeof_headers;
   3757   hdr_lma &= ~(abi_pagesize - 1);
   3758   return lma - hdr_lma;
   3759 }
   3760 
   3761 // Create the PT_LOAD segments when using a SECTIONS clause.  Returns
   3762 // the segment which should hold the file header and segment headers,
   3763 // if any.
   3764 
   3765 Output_segment*
   3766 Script_sections::create_segments(Layout* layout, uint64_t dot_alignment)
   3767 {
   3768   gold_assert(this->saw_sections_clause_);
   3769 
   3770   if (parameters->options().relocatable())
   3771     return NULL;
   3772 
   3773   if (this->saw_phdrs_clause())
   3774     return create_segments_from_phdrs_clause(layout, dot_alignment);
   3775 
   3776   Layout::Section_list sections;
   3777   layout->get_allocated_sections(&sections);
   3778 
   3779   // Sort the sections by address.
   3780   std::stable_sort(sections.begin(), sections.end(),
   3781 		   Sort_output_sections(this->sections_elements_));
   3782 
   3783   this->create_note_and_tls_segments(layout, &sections);
   3784 
   3785   // Walk through the sections adding them to PT_LOAD segments.
   3786   const uint64_t abi_pagesize = parameters->target().abi_pagesize();
   3787   Output_segment* first_seg = NULL;
   3788   Output_segment* current_seg = NULL;
   3789   bool is_current_seg_readonly = true;
   3790   Layout::Section_list::iterator plast = sections.end();
   3791   uint64_t last_vma = 0;
   3792   uint64_t last_lma = 0;
   3793   uint64_t last_size = 0;
   3794   for (Layout::Section_list::iterator p = sections.begin();
   3795        p != sections.end();
   3796        ++p)
   3797     {
   3798       const uint64_t vma = (*p)->address();
   3799       const uint64_t lma = ((*p)->has_load_address()
   3800 			    ? (*p)->load_address()
   3801 			    : vma);
   3802       const uint64_t size = (*p)->current_data_size();
   3803 
   3804       bool need_new_segment;
   3805       if (current_seg == NULL)
   3806 	need_new_segment = true;
   3807       else if (lma - vma != last_lma - last_vma)
   3808 	{
   3809 	  // This section has a different LMA relationship than the
   3810 	  // last one; we need a new segment.
   3811 	  need_new_segment = true;
   3812 	}
   3813       else if (align_address(last_lma + last_size, abi_pagesize)
   3814 	       < align_address(lma, abi_pagesize))
   3815 	{
   3816 	  // Putting this section in the segment would require
   3817 	  // skipping a page.
   3818 	  need_new_segment = true;
   3819 	}
   3820       else if (is_bss_section(*plast) && !is_bss_section(*p))
   3821 	{
   3822 	  // A non-BSS section can not follow a BSS section in the
   3823 	  // same segment.
   3824 	  need_new_segment = true;
   3825 	}
   3826       else if (is_current_seg_readonly
   3827 	       && ((*p)->flags() & elfcpp::SHF_WRITE) != 0
   3828 	       && !parameters->options().omagic())
   3829 	{
   3830 	  // Don't put a writable section in the same segment as a
   3831 	  // non-writable section.
   3832 	  need_new_segment = true;
   3833 	}
   3834       else
   3835 	{
   3836 	  // Otherwise, reuse the existing segment.
   3837 	  need_new_segment = false;
   3838 	}
   3839 
   3840       elfcpp::Elf_Word seg_flags =
   3841 	Layout::section_flags_to_segment((*p)->flags());
   3842 
   3843       if (need_new_segment)
   3844 	{
   3845 	  current_seg = layout->make_output_segment(elfcpp::PT_LOAD,
   3846 						    seg_flags);
   3847 	  current_seg->set_addresses(vma, lma);
   3848 	  current_seg->set_minimum_p_align(dot_alignment);
   3849 	  if (first_seg == NULL)
   3850 	    first_seg = current_seg;
   3851 	  is_current_seg_readonly = true;
   3852 	}
   3853 
   3854       current_seg->add_output_section_to_load(layout, *p, seg_flags);
   3855 
   3856       if (((*p)->flags() & elfcpp::SHF_WRITE) != 0)
   3857 	is_current_seg_readonly = false;
   3858 
   3859       plast = p;
   3860       last_vma = vma;
   3861       last_lma = lma;
   3862       last_size = size;
   3863     }
   3864 
   3865   // An ELF program should work even if the program headers are not in
   3866   // a PT_LOAD segment.  However, it appears that the Linux kernel
   3867   // does not set the AT_PHDR auxiliary entry in that case.  It sets
   3868   // the load address to p_vaddr - p_offset of the first PT_LOAD
   3869   // segment.  It then sets AT_PHDR to the load address plus the
   3870   // offset to the program headers, e_phoff in the file header.  This
   3871   // fails when the program headers appear in the file before the
   3872   // first PT_LOAD segment.  Therefore, we always create a PT_LOAD
   3873   // segment to hold the file header and the program headers.  This is
   3874   // effectively what the GNU linker does, and it is slightly more
   3875   // efficient in any case.  We try to use the first PT_LOAD segment
   3876   // if we can, otherwise we make a new one.
   3877 
   3878   if (first_seg == NULL)
   3879     return NULL;
   3880 
   3881   // -n or -N mean that the program is not demand paged and there is
   3882   // no need to put the program headers in a PT_LOAD segment.
   3883   if (parameters->options().nmagic() || parameters->options().omagic())
   3884     return NULL;
   3885 
   3886   size_t sizeof_headers = this->total_header_size(layout);
   3887 
   3888   uint64_t vma = first_seg->vaddr();
   3889   uint64_t lma = first_seg->paddr();
   3890 
   3891   uint64_t subtract = this->header_size_adjustment(lma, sizeof_headers);
   3892 
   3893   if ((lma & (abi_pagesize - 1)) >= sizeof_headers)
   3894     {
   3895       first_seg->set_addresses(vma - subtract, lma - subtract);
   3896       return first_seg;
   3897     }
   3898 
   3899   // If there is no room to squeeze in the headers, then punt.  The
   3900   // resulting executable probably won't run on GNU/Linux, but we
   3901   // trust that the user knows what they are doing.
   3902   if (lma < subtract || vma < subtract)
   3903     return NULL;
   3904 
   3905   // If memory regions have been specified and the address range
   3906   // we are about to use is not contained within any region then
   3907   // issue a warning message about the segment we are going to
   3908   // create.  It will be outside of any region and so possibly
   3909   // using non-existent or protected memory.  We test LMA rather
   3910   // than VMA since we assume that the headers will never be
   3911   // relocated.
   3912   if (this->memory_regions_ != NULL
   3913       && !this->block_in_region (NULL, layout, lma - subtract, subtract))
   3914     gold_warning(_("creating a segment to contain the file and program"
   3915 		   " headers outside of any MEMORY region"));
   3916 
   3917   Output_segment* load_seg = layout->make_output_segment(elfcpp::PT_LOAD,
   3918 							 elfcpp::PF_R);
   3919   load_seg->set_addresses(vma - subtract, lma - subtract);
   3920 
   3921   return load_seg;
   3922 }
   3923 
   3924 // Create a PT_NOTE segment for each SHT_NOTE section and a PT_TLS
   3925 // segment if there are any SHT_TLS sections.
   3926 
   3927 void
   3928 Script_sections::create_note_and_tls_segments(
   3929     Layout* layout,
   3930     const Layout::Section_list* sections)
   3931 {
   3932   gold_assert(!this->saw_phdrs_clause());
   3933 
   3934   bool saw_tls = false;
   3935   for (Layout::Section_list::const_iterator p = sections->begin();
   3936        p != sections->end();
   3937        ++p)
   3938     {
   3939       if ((*p)->type() == elfcpp::SHT_NOTE)
   3940 	{
   3941 	  elfcpp::Elf_Word seg_flags =
   3942 	    Layout::section_flags_to_segment((*p)->flags());
   3943 	  Output_segment* oseg = layout->make_output_segment(elfcpp::PT_NOTE,
   3944 							     seg_flags);
   3945 	  oseg->add_output_section_to_nonload(*p, seg_flags);
   3946 
   3947 	  // Incorporate any subsequent SHT_NOTE sections, in the
   3948 	  // hopes that the script is sensible.
   3949 	  Layout::Section_list::const_iterator pnext = p + 1;
   3950 	  while (pnext != sections->end()
   3951 		 && (*pnext)->type() == elfcpp::SHT_NOTE)
   3952 	    {
   3953 	      seg_flags = Layout::section_flags_to_segment((*pnext)->flags());
   3954 	      oseg->add_output_section_to_nonload(*pnext, seg_flags);
   3955 	      p = pnext;
   3956 	      ++pnext;
   3957 	    }
   3958 	}
   3959 
   3960       if (((*p)->flags() & elfcpp::SHF_TLS) != 0)
   3961 	{
   3962 	  if (saw_tls)
   3963 	    gold_error(_("TLS sections are not adjacent"));
   3964 
   3965 	  elfcpp::Elf_Word seg_flags =
   3966 	    Layout::section_flags_to_segment((*p)->flags());
   3967 	  Output_segment* oseg = layout->make_output_segment(elfcpp::PT_TLS,
   3968 							     seg_flags);
   3969 	  oseg->add_output_section_to_nonload(*p, seg_flags);
   3970 
   3971 	  Layout::Section_list::const_iterator pnext = p + 1;
   3972 	  while (pnext != sections->end()
   3973 		 && ((*pnext)->flags() & elfcpp::SHF_TLS) != 0)
   3974 	    {
   3975 	      seg_flags = Layout::section_flags_to_segment((*pnext)->flags());
   3976 	      oseg->add_output_section_to_nonload(*pnext, seg_flags);
   3977 	      p = pnext;
   3978 	      ++pnext;
   3979 	    }
   3980 
   3981 	  saw_tls = true;
   3982 	}
   3983 
   3984       // If we are making a shared library, and we see a section named
   3985       // .interp then put the .interp section in a PT_INTERP segment.
   3986       // This is for GNU ld compatibility.
   3987       if (strcmp((*p)->name(), ".interp") == 0)
   3988 	{
   3989 	  elfcpp::Elf_Word seg_flags =
   3990 	    Layout::section_flags_to_segment((*p)->flags());
   3991 	  Output_segment* oseg = layout->make_output_segment(elfcpp::PT_INTERP,
   3992 							     seg_flags);
   3993 	  oseg->add_output_section_to_nonload(*p, seg_flags);
   3994 	}
   3995     }
   3996 }
   3997 
   3998 // Add a program header.  The PHDRS clause is syntactically distinct
   3999 // from the SECTIONS clause, but we implement it with the SECTIONS
   4000 // support because PHDRS is useless if there is no SECTIONS clause.
   4001 
   4002 void
   4003 Script_sections::add_phdr(const char* name, size_t namelen, unsigned int type,
   4004 			  bool includes_filehdr, bool includes_phdrs,
   4005 			  bool is_flags_valid, unsigned int flags,
   4006 			  Expression* load_address)
   4007 {
   4008   if (this->phdrs_elements_ == NULL)
   4009     this->phdrs_elements_ = new Phdrs_elements();
   4010   this->phdrs_elements_->push_back(new Phdrs_element(name, namelen, type,
   4011 						     includes_filehdr,
   4012 						     includes_phdrs,
   4013 						     is_flags_valid, flags,
   4014 						     load_address));
   4015 }
   4016 
   4017 // Return the number of segments we expect to create based on the
   4018 // SECTIONS clause.  This is used to implement SIZEOF_HEADERS.
   4019 
   4020 size_t
   4021 Script_sections::expected_segment_count(const Layout* layout) const
   4022 {
   4023   if (this->saw_phdrs_clause())
   4024     return this->phdrs_elements_->size();
   4025 
   4026   Layout::Section_list sections;
   4027   layout->get_allocated_sections(&sections);
   4028 
   4029   // We assume that we will need two PT_LOAD segments.
   4030   size_t ret = 2;
   4031 
   4032   bool saw_note = false;
   4033   bool saw_tls = false;
   4034   for (Layout::Section_list::const_iterator p = sections.begin();
   4035        p != sections.end();
   4036        ++p)
   4037     {
   4038       if ((*p)->type() == elfcpp::SHT_NOTE)
   4039 	{
   4040 	  // Assume that all note sections will fit into a single
   4041 	  // PT_NOTE segment.
   4042 	  if (!saw_note)
   4043 	    {
   4044 	      ++ret;
   4045 	      saw_note = true;
   4046 	    }
   4047 	}
   4048       else if (((*p)->flags() & elfcpp::SHF_TLS) != 0)
   4049 	{
   4050 	  // There can only be one PT_TLS segment.
   4051 	  if (!saw_tls)
   4052 	    {
   4053 	      ++ret;
   4054 	      saw_tls = true;
   4055 	    }
   4056 	}
   4057     }
   4058 
   4059   return ret;
   4060 }
   4061 
   4062 // Create the segments from a PHDRS clause.  Return the segment which
   4063 // should hold the file header and program headers, if any.
   4064 
   4065 Output_segment*
   4066 Script_sections::create_segments_from_phdrs_clause(Layout* layout,
   4067 						   uint64_t dot_alignment)
   4068 {
   4069   this->attach_sections_using_phdrs_clause(layout);
   4070   return this->set_phdrs_clause_addresses(layout, dot_alignment);
   4071 }
   4072 
   4073 // Create the segments from the PHDRS clause, and put the output
   4074 // sections in them.
   4075 
   4076 void
   4077 Script_sections::attach_sections_using_phdrs_clause(Layout* layout)
   4078 {
   4079   typedef std::map<std::string, Output_segment*> Name_to_segment;
   4080   Name_to_segment name_to_segment;
   4081   for (Phdrs_elements::const_iterator p = this->phdrs_elements_->begin();
   4082        p != this->phdrs_elements_->end();
   4083        ++p)
   4084     name_to_segment[(*p)->name()] = (*p)->create_segment(layout);
   4085 
   4086   // Walk through the output sections and attach them to segments.
   4087   // Output sections in the script which do not list segments are
   4088   // attached to the same set of segments as the immediately preceding
   4089   // output section.
   4090 
   4091   String_list* phdr_names = NULL;
   4092   bool load_segments_only = false;
   4093   for (Sections_elements::const_iterator p = this->sections_elements_->begin();
   4094        p != this->sections_elements_->end();
   4095        ++p)
   4096     {
   4097       bool is_orphan;
   4098       String_list* old_phdr_names = phdr_names;
   4099       Output_section* os = (*p)->allocate_to_segment(&phdr_names, &is_orphan);
   4100       if (os == NULL)
   4101 	continue;
   4102 
   4103       elfcpp::Elf_Word seg_flags =
   4104 	Layout::section_flags_to_segment(os->flags());
   4105 
   4106       if (phdr_names == NULL)
   4107 	{
   4108 	  // Don't worry about empty orphan sections.
   4109 	  if (is_orphan && os->current_data_size() > 0)
   4110 	    gold_error(_("allocated section %s not in any segment"),
   4111 		       os->name());
   4112 
   4113 	  // To avoid later crashes drop this section into the first
   4114 	  // PT_LOAD segment.
   4115 	  for (Phdrs_elements::const_iterator ppe =
   4116 		 this->phdrs_elements_->begin();
   4117 	       ppe != this->phdrs_elements_->end();
   4118 	       ++ppe)
   4119 	    {
   4120 	      Output_segment* oseg = (*ppe)->segment();
   4121 	      if (oseg->type() == elfcpp::PT_LOAD)
   4122 		{
   4123 		  oseg->add_output_section_to_load(layout, os, seg_flags);
   4124 		  break;
   4125 		}
   4126 	    }
   4127 
   4128 	  continue;
   4129 	}
   4130 
   4131       // We see a list of segments names.  Disable PT_LOAD segment only
   4132       // filtering.
   4133       if (old_phdr_names != phdr_names)
   4134 	load_segments_only = false;
   4135 
   4136       // If this is an orphan section--one that was not explicitly
   4137       // mentioned in the linker script--then it should not inherit
   4138       // any segment type other than PT_LOAD.  Otherwise, e.g., the
   4139       // PT_INTERP segment will pick up following orphan sections,
   4140       // which does not make sense.  If this is not an orphan section,
   4141       // we trust the linker script.
   4142       if (is_orphan)
   4143 	{
   4144 	  // Enable PT_LOAD segments only filtering until we see another
   4145 	  // list of segment names.
   4146 	  load_segments_only = true;
   4147 	}
   4148 
   4149       bool in_load_segment = false;
   4150       for (String_list::const_iterator q = phdr_names->begin();
   4151 	   q != phdr_names->end();
   4152 	   ++q)
   4153 	{
   4154 	  Name_to_segment::const_iterator r = name_to_segment.find(*q);
   4155 	  if (r == name_to_segment.end())
   4156 	    gold_error(_("no segment %s"), q->c_str());
   4157 	  else
   4158 	    {
   4159 	      if (load_segments_only
   4160 		  && r->second->type() != elfcpp::PT_LOAD)
   4161 		continue;
   4162 
   4163 	      if (r->second->type() != elfcpp::PT_LOAD)
   4164 		r->second->add_output_section_to_nonload(os, seg_flags);
   4165 	      else
   4166 		{
   4167 		  r->second->add_output_section_to_load(layout, os, seg_flags);
   4168 		  if (in_load_segment)
   4169 		    gold_error(_("section in two PT_LOAD segments"));
   4170 		  in_load_segment = true;
   4171 		}
   4172 	    }
   4173 	}
   4174 
   4175       if (!in_load_segment)
   4176 	gold_error(_("allocated section not in any PT_LOAD segment"));
   4177     }
   4178 }
   4179 
   4180 // Set the addresses for segments created from a PHDRS clause.  Return
   4181 // the segment which should hold the file header and program headers,
   4182 // if any.
   4183 
   4184 Output_segment*
   4185 Script_sections::set_phdrs_clause_addresses(Layout* layout,
   4186 					    uint64_t dot_alignment)
   4187 {
   4188   Output_segment* load_seg = NULL;
   4189   for (Phdrs_elements::const_iterator p = this->phdrs_elements_->begin();
   4190        p != this->phdrs_elements_->end();
   4191        ++p)
   4192     {
   4193       // Note that we have to set the flags after adding the output
   4194       // sections to the segment, as adding an output segment can
   4195       // change the flags.
   4196       (*p)->set_flags_if_valid();
   4197 
   4198       Output_segment* oseg = (*p)->segment();
   4199 
   4200       if (oseg->type() != elfcpp::PT_LOAD)
   4201 	{
   4202 	  // The addresses of non-PT_LOAD segments are set from the
   4203 	  // PT_LOAD segments.
   4204 	  if ((*p)->has_load_address())
   4205 	    gold_error(_("may only specify load address for PT_LOAD segment"));
   4206 	  continue;
   4207 	}
   4208 
   4209       oseg->set_minimum_p_align(dot_alignment);
   4210 
   4211       // The output sections should have addresses from the SECTIONS
   4212       // clause.  The addresses don't have to be in order, so find the
   4213       // one with the lowest load address.  Use that to set the
   4214       // address of the segment.
   4215 
   4216       Output_section* osec = oseg->section_with_lowest_load_address();
   4217       if (osec == NULL)
   4218 	{
   4219 	  oseg->set_addresses(0, 0);
   4220 	  continue;
   4221 	}
   4222 
   4223       uint64_t vma = osec->address();
   4224       uint64_t lma = osec->has_load_address() ? osec->load_address() : vma;
   4225 
   4226       // Override the load address of the section with the load
   4227       // address specified for the segment.
   4228       if ((*p)->has_load_address())
   4229 	{
   4230 	  if (osec->has_load_address())
   4231 	    gold_warning(_("PHDRS load address overrides "
   4232 			   "section %s load address"),
   4233 			 osec->name());
   4234 
   4235 	  lma = (*p)->load_address();
   4236 	}
   4237 
   4238       bool headers = (*p)->includes_filehdr() && (*p)->includes_phdrs();
   4239       if (!headers && ((*p)->includes_filehdr() || (*p)->includes_phdrs()))
   4240 	{
   4241 	  // We could support this if we wanted to.
   4242 	  gold_error(_("using only one of FILEHDR and PHDRS is "
   4243 		       "not currently supported"));
   4244 	}
   4245       if (headers)
   4246 	{
   4247 	  size_t sizeof_headers = this->total_header_size(layout);
   4248 	  uint64_t subtract = this->header_size_adjustment(lma,
   4249 							   sizeof_headers);
   4250 	  if (lma >= subtract && vma >= subtract)
   4251 	    {
   4252 	      lma -= subtract;
   4253 	      vma -= subtract;
   4254 	    }
   4255 	  else
   4256 	    {
   4257 	      gold_error(_("sections loaded on first page without room "
   4258 			   "for file and program headers "
   4259 			   "are not supported"));
   4260 	    }
   4261 
   4262 	  if (load_seg != NULL)
   4263 	    gold_error(_("using FILEHDR and PHDRS on more than one "
   4264 			 "PT_LOAD segment is not currently supported"));
   4265 	  load_seg = oseg;
   4266 	}
   4267 
   4268       oseg->set_addresses(vma, lma);
   4269     }
   4270 
   4271   return load_seg;
   4272 }
   4273 
   4274 // Add the file header and segment headers to non-load segments
   4275 // specified in the PHDRS clause.
   4276 
   4277 void
   4278 Script_sections::put_headers_in_phdrs(Output_data* file_header,
   4279 				      Output_data* segment_headers)
   4280 {
   4281   gold_assert(this->saw_phdrs_clause());
   4282   for (Phdrs_elements::iterator p = this->phdrs_elements_->begin();
   4283        p != this->phdrs_elements_->end();
   4284        ++p)
   4285     {
   4286       if ((*p)->type() != elfcpp::PT_LOAD)
   4287 	{
   4288 	  if ((*p)->includes_phdrs())
   4289 	    (*p)->segment()->add_initial_output_data(segment_headers);
   4290 	  if ((*p)->includes_filehdr())
   4291 	    (*p)->segment()->add_initial_output_data(file_header);
   4292 	}
   4293     }
   4294 }
   4295 
   4296 // Look for an output section by name and return the address, the load
   4297 // address, the alignment, and the size.  This is used when an
   4298 // expression refers to an output section which was not actually
   4299 // created.  This returns true if the section was found, false
   4300 // otherwise.
   4301 
   4302 bool
   4303 Script_sections::get_output_section_info(const char* name, uint64_t* address,
   4304                                          uint64_t* load_address,
   4305                                          uint64_t* addralign,
   4306                                          uint64_t* size) const
   4307 {
   4308   if (!this->saw_sections_clause_)
   4309     return false;
   4310   for (Sections_elements::const_iterator p = this->sections_elements_->begin();
   4311        p != this->sections_elements_->end();
   4312        ++p)
   4313     if ((*p)->get_output_section_info(name, address, load_address, addralign,
   4314                                       size))
   4315       return true;
   4316   return false;
   4317 }
   4318 
   4319 // Release all Output_segments.  This remove all pointers to all
   4320 // Output_segments.
   4321 
   4322 void
   4323 Script_sections::release_segments()
   4324 {
   4325   if (this->saw_phdrs_clause())
   4326     {
   4327       for (Phdrs_elements::const_iterator p = this->phdrs_elements_->begin();
   4328 	   p != this->phdrs_elements_->end();
   4329 	   ++p)
   4330 	(*p)->release_segment();
   4331     }
   4332 }
   4333 
   4334 // Print the SECTIONS clause to F for debugging.
   4335 
   4336 void
   4337 Script_sections::print(FILE* f) const
   4338 {
   4339   if (this->phdrs_elements_ != NULL)
   4340     {
   4341       fprintf(f, "PHDRS {\n");
   4342       for (Phdrs_elements::const_iterator p = this->phdrs_elements_->begin();
   4343 	   p != this->phdrs_elements_->end();
   4344 	   ++p)
   4345 	(*p)->print(f);
   4346       fprintf(f, "}\n");
   4347     }
   4348 
   4349   if (this->memory_regions_ != NULL)
   4350     {
   4351       fprintf(f, "MEMORY {\n");
   4352       for (Memory_regions::const_iterator m = this->memory_regions_->begin();
   4353 	   m != this->memory_regions_->end();
   4354 	   ++m)
   4355 	(*m)->print(f);
   4356       fprintf(f, "}\n");
   4357     }
   4358 
   4359   if (!this->saw_sections_clause_)
   4360     return;
   4361 
   4362   fprintf(f, "SECTIONS {\n");
   4363 
   4364   for (Sections_elements::const_iterator p = this->sections_elements_->begin();
   4365        p != this->sections_elements_->end();
   4366        ++p)
   4367     (*p)->print(f);
   4368 
   4369   fprintf(f, "}\n");
   4370 }
   4371 
   4372 } // End namespace gold.
   4373