diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-09-13 16:36:25 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-09-13 16:36:25 -0700 |
commit | 4a4aa59632c918ad9e2941fb79fa05540d2b52af (patch) | |
tree | d3e5c80c0c73ad158183ea607010809f8e2b709e /src/base/loader/elf_object.cc | |
parent | bbc8a40857d47348753c59b91a93dd312fa1b809 (diff) | |
parent | e282d9601cb515f59eeb1701ec990f0985001ba9 (diff) | |
download | gem5-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.cc | 18 |
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(); } |