aboutsummaryrefslogtreecommitdiff
path: root/elfcpp/elfcpp_file.h
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2014-07-02 16:12:51 -0700
committerCary Coutant <ccoutant@google.com>2014-09-02 15:44:58 -0700
commit54674d38930c7da1af518510fede6f700f5ca596 (patch)
treeaef7ff0038d0040cafb00667066b48bc874b17bb /elfcpp/elfcpp_file.h
parent9860cbcfb60bdae2f9800e6a6ea5f21ef1507d08 (diff)
downloadgdb-54674d38930c7da1af518510fede6f700f5ca596.zip
gdb-54674d38930c7da1af518510fede6f700f5ca596.tar.gz
gdb-54674d38930c7da1af518510fede6f700f5ca596.tar.bz2
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.
Diffstat (limited to 'elfcpp/elfcpp_file.h')
-rw-r--r--elfcpp/elfcpp_file.h38
1 files changed, 34 insertions, 4 deletions
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<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_;