summaryrefslogtreecommitdiff
path: root/src/base/loader/elf_object.hh
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.hh
parentbbc8a40857d47348753c59b91a93dd312fa1b809 (diff)
parente282d9601cb515f59eeb1701ec990f0985001ba9 (diff)
downloadgem5-4a4aa59632c918ad9e2941fb79fa05540d2b52af.tar.xz
Merge with head.
--HG-- extra : convert_revision : 22aafb1cead3f584e64c188dc8eb45e271f4e7e9
Diffstat (limited to 'src/base/loader/elf_object.hh')
-rw-r--r--src/base/loader/elf_object.hh8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/base/loader/elf_object.hh b/src/base/loader/elf_object.hh
index d909140f3..3e7c85874 100644
--- a/src/base/loader/elf_object.hh
+++ b/src/base/loader/elf_object.hh
@@ -32,6 +32,7 @@
#define __ELF_OBJECT_HH__
#include "base/loader/object_file.hh"
+#include <set>
class ElfObject : public ObjectFile
{
@@ -42,6 +43,7 @@ class ElfObject : public ObjectFile
Addr _programHeaderTable;
uint16_t _programHeaderSize;
uint16_t _programHeaderCount;
+ std::set<std::string> sectionNames;
/// Helper functions for loadGlobalSymbols() and loadLocalSymbols().
bool loadSomeSymbols(SymbolTable *symtab, int binding);
@@ -50,6 +52,9 @@ class ElfObject : public ObjectFile
size_t _len, uint8_t *_data,
Arch _arch, OpSys _opSys);
+ void getSections();
+ bool sectionExists(std::string sec);
+
public:
virtual ~ElfObject() {}
@@ -58,7 +63,8 @@ class ElfObject : public ObjectFile
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask =
std::numeric_limits<Addr>::max());
- virtual bool isDynamic();
+ virtual bool isDynamic() { return sectionExists(".interp"); }
+ virtual bool hasTLS() { return sectionExists(".tbss"); }
static ObjectFile *tryFile(const std::string &fname, int fd,
size_t len, uint8_t *data);