X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fbase%2Floader%2Fobject_file.hh;h=37f2aa585612cd78a824c2b83c33656ad10a7c33;hb=81f3211149c051e4f70b0b12eb3709dfc6e0395c;hp=7f2bef0bf6851158e4638ce10f77caa02f820c3a;hpb=71835d42df8fb488380be8cc89be4298b268902a;p=gem5.git diff --git a/src/base/loader/object_file.hh b/src/base/loader/object_file.hh index 7f2bef0bf..37f2aa585 100644 --- a/src/base/loader/object_file.hh +++ b/src/base/loader/object_file.hh @@ -35,9 +35,9 @@ #include #include -#include "sim/host.hh" // for Addr +#include "base/types.hh" -class Port; +class PortProxy; class SymbolTable; class ObjectFile @@ -50,15 +50,21 @@ class ObjectFile SPARC64, SPARC32, Mips, - X86, - Arm + X86_64, + I386, + Arm64, + Arm, + Thumb, + Power }; enum OpSys { UnknownOpSys, Tru64, Linux, - Solaris + Solaris, + LinuxArmOABI, + FreeBSD }; protected: @@ -79,12 +85,16 @@ class ObjectFile void close(); - virtual bool loadSections(Port *memPort, Addr addrMask = - std::numeric_limits::max()); + virtual bool loadSections(PortProxy& memProxy, Addr addrMask = + std::numeric_limits::max(), + Addr offset = 0); virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr addrMask = std::numeric_limits::max()) = 0; virtual bool loadLocalSymbols(SymbolTable *symtab, Addr addrMask = std::numeric_limits::max()) = 0; + virtual bool loadWeakSymbols(SymbolTable *symtab, Addr addrMask = + std::numeric_limits::max()) + { return false; } virtual bool isDynamic() { return false; } virtual bool hasTLS() { return false; } @@ -107,7 +117,8 @@ class ObjectFile Section data; Section bss; - bool loadSection(Section *sec, Port *memPort, Addr addrMask); + bool loadSection(Section *sec, PortProxy& memProxy, Addr addrMask, + Addr offset = 0); void setGlobalPointer(Addr global_ptr) { globalPtr = global_ptr; } public: @@ -123,6 +134,11 @@ class ObjectFile size_t dataSize() const { return data.size; } size_t bssSize() const { return bss.size; } + /* This function allows you to override the base address where + * a binary is going to be loaded or set it if the binary is just a + * blob that doesn't include an object header. + * @param a address to load the binary/text section at + */ void setTextBase(Addr a) { text.baseAddr = a; } };