Make Elf_file::section_name() a const function, so that it can be used in
authorCary Coutant <ccoutant@google.com>
Wed, 2 Jul 2014 23:12:51 +0000 (16:12 -0700)
committerCary Coutant <ccoutant@google.com>
Tue, 2 Sep 2014 22:44:58 +0000 (15:44 -0700)
places where we have only a const Elf_file*.

elfcpp/
* elfcpp_file.h (Elf_file::shnum): New const function.
(Elf_file::shstrndx): New const function.
(Elf_file::large_shndx_offset): New const function.
(Elf_file::section_name): Add const attribute.
(Elf_file::section_header_offset): Likewise.

gold/
* dwp.cc (Sized_relobj_dwo::do_section_name): Add const attribute.
* dynobj.h (Sized_dynobj::do_section_name): Likewise.
* incremental.cc (Sized_relobj_incr::do_section_name): Likewise.
(Sized_incr_dynobj::do_section_name): Likewise.
* incremental.h (Sized_relobj_incr::do_section_name): Likewise.
(Sized_incr_dynobj::do_section_name): Likewise.
* object.h (Object::section_name): Likewise.
(Object::do_section_name): Likewise.
(Sized_relobj_file::do_section_name): Likewise.
* plugin.cc (Sized_pluginobj::do_section_name): Likewise.
* plugin.h (Sized_pluginobj::do_section_name): Likewise.

elfcpp/ChangeLog
elfcpp/elfcpp_file.h
gold/ChangeLog
gold/dwp.cc
gold/dynobj.h
gold/incremental.cc
gold/incremental.h
gold/object.h
gold/plugin.cc
gold/plugin.h

index eafa252..b554287 100644 (file)
@@ -1,3 +1,11 @@
+2014-09-02  Cary Coutant  <ccoutant@google.com>
+
+       * elfcpp_file.h (Elf_file::shnum): New const function.
+       (Elf_file::shstrndx): New const function.
+       (Elf_file::large_shndx_offset): New const function.
+       (Elf_file::section_name): Add const attribute.
+       (Elf_file::section_header_offset): Likewise.
+
 2014-08-08  Han Shen  <shenhan@google.com>
 
        * aarch64.h (withdrawn): Replaced with R_AARCH64_withdrawn.
index bcb0275..a8daf91 100644 (file)
@@ -144,6 +144,15 @@ class Elf_file
     return this->shnum_;
   }
 
+  unsigned int
+  shnum() const
+  {
+    if (this->shnum_ == 0 && this->shoff_ != 0)
+      this->file_->error(_("ELF file has not been initialized yet"
+                          " (internal error)"));
+    return this->shnum_;
+  }
+
   // Return the section index of the section name string table.
   unsigned int
   shstrndx()
@@ -152,6 +161,18 @@ class Elf_file
     return this->shstrndx_;
   }
 
+  unsigned int
+  shstrndx() const
+  {
+    if (this->shstrndx_ == SHN_XINDEX && this->shoff_ != 0)
+      {
+       this->file_->error(_("ELF file has not been initialized yet"
+                            " (internal error)"));
+       return 0;
+      }
+    return this->shstrndx_;
+  }
+
   // Return the value to subtract from section indexes >=
   // SHN_LORESERVE.  See the comment in initialize_shnum.
   int
@@ -161,6 +182,15 @@ class Elf_file
     return this->large_shndx_offset_;
   }
 
+  int
+  large_shndx_offset() const
+  {
+    if (this->shstrndx_ == SHN_XINDEX && this->shoff_ != 0)
+      this->file_->error(_("ELF file has not been initialized yet"
+                          " (internal error)"));
+    return this->large_shndx_offset_;
+  }
+
   // Return the location of the header of section SHNDX.
   typename File::Location
   section_header(unsigned int shndx)
@@ -171,7 +201,7 @@ class Elf_file
 
   // Return the name of section SHNDX.
   std::string
-  section_name(unsigned int shndx);
+  section_name(unsigned int shndx) const;
 
   // Return the location of the contents of section SHNDX.
   typename File::Location
@@ -216,7 +246,7 @@ class Elf_file
 
   // Return the file offset of the header of section SHNDX.
   off_t
-  section_header_offset(unsigned int shndx);
+  section_header_offset(unsigned int shndx) const;
 
   // The file we are reading.
   File* file_;
@@ -465,7 +495,7 @@ Elf_file<size, big_endian, File>::find_section_by_type(unsigned int type)
 
 template<int size, bool big_endian, typename File>
 off_t
-Elf_file<size, big_endian, File>::section_header_offset(unsigned int shndx)
+Elf_file<size, big_endian, File>::section_header_offset(unsigned int shndx) const
 {
   if (shndx >= this->shnum())
     this->file_->error(_("section_header_offset: bad shndx %u >= %u"),
@@ -477,7 +507,7 @@ Elf_file<size, big_endian, File>::section_header_offset(unsigned int shndx)
 
 template<int size, bool big_endian, typename File>
 std::string
-Elf_file<size, big_endian, File>::section_name(unsigned int shndx)
+Elf_file<size, big_endian, File>::section_name(unsigned int shndx) const
 {
   File* const file = this->file_;
 
index 0fa1561..2c09a05 100644 (file)
@@ -1,5 +1,19 @@
 2014-09-02  Cary Coutant  <ccoutant@google.com>
 
+       * dwp.cc (Sized_relobj_dwo::do_section_name): Add const attribute.
+       * dynobj.h (Sized_dynobj::do_section_name): Likewise.
+       * incremental.cc (Sized_relobj_incr::do_section_name): Likewise.
+       (Sized_incr_dynobj::do_section_name): Likewise.
+       * incremental.h (Sized_relobj_incr::do_section_name): Likewise.
+       (Sized_incr_dynobj::do_section_name): Likewise.
+       * object.h (Object::section_name): Likewise.
+       (Object::do_section_name): Likewise.
+       (Sized_relobj_file::do_section_name): Likewise.
+       * plugin.cc (Sized_pluginobj::do_section_name): Likewise.
+       * plugin.h (Sized_pluginobj::do_section_name): Likewise.
+
+2014-09-02  Cary Coutant  <ccoutant@google.com>
+
        PR gold/17005
        * ehframe.cc (Fde::write): Add output_offset parameter.
        (Cie::write): Likewise.
index 359d4b7..5401e0c 100644 (file)
@@ -272,7 +272,7 @@ class Sized_relobj_dwo : public Sized_relobj<size, big_endian>
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx)
+  do_section_name(unsigned int shndx) const
   { return this->elf_file_.section_name(shndx); }
 
   // Get the size of a section.
index 03b8053..c20ed20 100644 (file)
@@ -203,7 +203,7 @@ class Sized_dynobj : public Dynobj
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx)
+  do_section_name(unsigned int shndx) const
   { return this->elf_file_.section_name(shndx); }
 
   // Return a view of the contents of a section.  Set *PLEN to the
index 2345cf8..bbc055c 100644 (file)
@@ -2270,10 +2270,10 @@ Sized_relobj_incr<size, big_endian>::do_section_size(unsigned int)
 
 template<int size, bool big_endian>
 std::string
-Sized_relobj_incr<size, big_endian>::do_section_name(unsigned int shndx)
+Sized_relobj_incr<size, big_endian>::do_section_name(unsigned int shndx) const
 {
-  Output_sections& out_sections(this->output_sections());
-  Output_section* os = out_sections[shndx];
+  const Output_sections& out_sections(this->output_sections());
+  const Output_section* os = out_sections[shndx];
   if (os == NULL)
     return NULL;
   return os->name();
@@ -2858,7 +2858,7 @@ Sized_incr_dynobj<size, big_endian>::do_section_size(unsigned int)
 
 template<int size, bool big_endian>
 std::string
-Sized_incr_dynobj<size, big_endian>::do_section_name(unsigned int)
+Sized_incr_dynobj<size, big_endian>::do_section_name(unsigned int) const
 {
   gold_unreachable();
 }
index f84511d..5440c86 100644 (file)
@@ -1901,7 +1901,7 @@ class Sized_relobj_incr : public Sized_relobj<size, big_endian>
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx);
+  do_section_name(unsigned int shndx) const;
 
   // Return a view of the contents of a section.
   const unsigned char*
@@ -2112,7 +2112,7 @@ class Sized_incr_dynobj : public Dynobj
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx);
+  do_section_name(unsigned int shndx) const;
 
   // Return a view of the contents of a section.
   const unsigned char*
index 92cdbdd..754b1d2 100644 (file)
@@ -507,7 +507,7 @@ class Object
 
   // Return the name of a section given a section index.
   std::string
-  section_name(unsigned int shndx)
+  section_name(unsigned int shndx) const
   { return this->do_section_name(shndx); }
 
   // Return the section flags given a section index.
@@ -822,7 +822,7 @@ class Object
 
   // Get the name of a section--implemented by child class.
   virtual std::string
-  do_section_name(unsigned int shndx) = 0;
+  do_section_name(unsigned int shndx) const = 0;
 
   // Get section flags--implemented by child class.
   virtual uint64_t
@@ -2315,7 +2315,7 @@ class Sized_relobj_file : public Sized_relobj<size, big_endian>
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx)
+  do_section_name(unsigned int shndx) const
   { return this->elf_file_.section_name(shndx); }
 
   // Return the location of the contents of a section.
index 62807b8..6519732 100644 (file)
@@ -1209,7 +1209,7 @@ Sized_pluginobj<size, big_endian>::do_section_size(unsigned int)
 
 template<int size, bool big_endian>
 std::string
-Sized_pluginobj<size, big_endian>::do_section_name(unsigned int)
+Sized_pluginobj<size, big_endian>::do_section_name(unsigned int) const
 {
   gold_unreachable();
   return std::string();
index 320b02d..9ef2812 100644 (file)
@@ -490,7 +490,7 @@ class Sized_pluginobj : public Pluginobj
 
   // Get the name of a section.
   std::string
-  do_section_name(unsigned int shndx);
+  do_section_name(unsigned int shndx) const;
 
   // Return a view of the contents of a section.
   const unsigned char*