summaryrefslogtreecommitdiff
path: root/src/base/loader/elf_object.hh
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2007-09-11 00:01:24 -0400
committerAli Saidi <saidi@eecs.umich.edu>2007-09-11 00:01:24 -0400
commit19fbdcd30bfcbfe11b2a1a315039f0e3b68025a1 (patch)
tree851314640efc3d6864bcd5d9ad40c1d270a3514d /src/base/loader/elf_object.hh
parent0f57b407a3df68f93e73e0635569d7bf5dd151b0 (diff)
downloadgem5-19fbdcd30bfcbfe11b2a1a315039f0e3b68025a1.tar.xz
Loader: Error if a TLS section is found in the binary.
--HG-- extra : convert_revision : d763c0382f3cbcc9786510f5a8e521ec9d55eff1
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);