summaryrefslogtreecommitdiff
path: root/src/base/loader/elf_object.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-09-13 16:36:25 -0700
committerGabe Black <gblack@eecs.umich.edu>2007-09-13 16:36:25 -0700
commit4a4aa59632c918ad9e2941fb79fa05540d2b52af (patch)
treed3e5c80c0c73ad158183ea607010809f8e2b709e /src/base/loader/elf_object.cc
parentbbc8a40857d47348753c59b91a93dd312fa1b809 (diff)
parente282d9601cb515f59eeb1701ec990f0985001ba9 (diff)
downloadgem5-4a4aa59632c918ad9e2941fb79fa05540d2b52af.tar.xz
Merge with head.
--HG-- extra : convert_revision : 22aafb1cead3f584e64c188dc8eb45e271f4e7e9
Diffstat (limited to 'src/base/loader/elf_object.cc')
-rw-r--r--src/base/loader/elf_object.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/base/loader/elf_object.cc b/src/base/loader/elf_object.cc
index f76ea593b..ecce175b2 100644
--- a/src/base/loader/elf_object.cc
+++ b/src/base/loader/elf_object.cc
@@ -343,8 +343,8 @@ ElfObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask)
return loadSomeSymbols(symtab, STB_LOCAL);
}
-bool
-ElfObject::isDynamic()
+void
+ElfObject::getSections()
{
Elf *elf;
int sec_idx = 1; // there is a 0 but it is nothing, go figure
@@ -353,6 +353,8 @@ ElfObject::isDynamic()
GElf_Ehdr ehdr;
+ assert(!sectionNames.size());
+
// check that header matches library version
if (elf_version(EV_CURRENT) == EV_NONE)
panic("wrong elf version number!");
@@ -372,11 +374,17 @@ ElfObject::isDynamic()
// While there are no more sections
while (section != NULL) {
gelf_getshdr(section, &shdr);
- if (!strcmp(".interp", elf_strptr(elf, ehdr.e_shstrndx, shdr.sh_name)))
- return true;
+ sectionNames.insert(elf_strptr(elf, ehdr.e_shstrndx, shdr.sh_name));
section = elf_getscn(elf, ++sec_idx);
} // while sections
- return false;
+}
+
+bool
+ElfObject::sectionExists(string sec)
+{
+ if (!sectionNames.size())
+ getSections();
+ return sectionNames.find(sec) != sectionNames.end();
}