From 54674d38930c7da1af518510fede6f700f5ca596 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Wed, 2 Jul 2014 16:12:51 -0700 Subject: [PATCH] Make Elf_file::section_name() a const function, so that it can be used in 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 | 8 ++++++++ elfcpp/elfcpp_file.h | 38 ++++++++++++++++++++++++++++++++++---- gold/ChangeLog | 14 ++++++++++++++ gold/dwp.cc | 2 +- gold/dynobj.h | 2 +- gold/incremental.cc | 8 ++++---- gold/incremental.h | 4 ++-- gold/object.h | 6 +++--- gold/plugin.cc | 2 +- gold/plugin.h | 2 +- 10 files changed, 69 insertions(+), 17 deletions(-) diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog index eafa252..b554287 100644 --- a/elfcpp/ChangeLog +++ b/elfcpp/ChangeLog @@ -1,3 +1,11 @@ +2014-09-02 Cary Coutant + + * 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 * aarch64.h (withdrawn): Replaced with R_AARCH64_withdrawn. diff --git a/elfcpp/elfcpp_file.h b/elfcpp/elfcpp_file.h index bcb0275..a8daf91 100644 --- a/elfcpp/elfcpp_file.h +++ b/elfcpp/elfcpp_file.h @@ -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::find_section_by_type(unsigned int type) template off_t -Elf_file::section_header_offset(unsigned int shndx) +Elf_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::section_header_offset(unsigned int shndx) template std::string -Elf_file::section_name(unsigned int shndx) +Elf_file::section_name(unsigned int shndx) const { File* const file = this->file_; diff --git a/gold/ChangeLog b/gold/ChangeLog index 0fa1561..2c09a05 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,19 @@ 2014-09-02 Cary Coutant + * 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 + PR gold/17005 * ehframe.cc (Fde::write): Add output_offset parameter. (Cie::write): Likewise. diff --git a/gold/dwp.cc b/gold/dwp.cc index 359d4b7..5401e0c 100644 --- a/gold/dwp.cc +++ b/gold/dwp.cc @@ -272,7 +272,7 @@ class Sized_relobj_dwo : public Sized_relobj // 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. diff --git a/gold/dynobj.h b/gold/dynobj.h index 03b8053..c20ed20 100644 --- a/gold/dynobj.h +++ b/gold/dynobj.h @@ -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 diff --git a/gold/incremental.cc b/gold/incremental.cc index 2345cf8..bbc055c 100644 --- a/gold/incremental.cc +++ b/gold/incremental.cc @@ -2270,10 +2270,10 @@ Sized_relobj_incr::do_section_size(unsigned int) template std::string -Sized_relobj_incr::do_section_name(unsigned int shndx) +Sized_relobj_incr::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::do_section_size(unsigned int) template std::string -Sized_incr_dynobj::do_section_name(unsigned int) +Sized_incr_dynobj::do_section_name(unsigned int) const { gold_unreachable(); } diff --git a/gold/incremental.h b/gold/incremental.h index f84511d..5440c86 100644 --- a/gold/incremental.h +++ b/gold/incremental.h @@ -1901,7 +1901,7 @@ class Sized_relobj_incr : public Sized_relobj // 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* diff --git a/gold/object.h b/gold/object.h index 92cdbdd..754b1d2 100644 --- a/gold/object.h +++ b/gold/object.h @@ -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 // 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. diff --git a/gold/plugin.cc b/gold/plugin.cc index 62807b8..6519732 100644 --- a/gold/plugin.cc +++ b/gold/plugin.cc @@ -1209,7 +1209,7 @@ Sized_pluginobj::do_section_size(unsigned int) template std::string -Sized_pluginobj::do_section_name(unsigned int) +Sized_pluginobj::do_section_name(unsigned int) const { gold_unreachable(); return std::string(); diff --git a/gold/plugin.h b/gold/plugin.h index 320b02d..9ef2812 100644 --- a/gold/plugin.h +++ b/gold/plugin.h @@ -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* -- 2.7.4