gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
object_file.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2004 The Regents of The University of Michigan
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Nathan Binkert
29  * Steve Reinhardt
30  */
31 
32 #ifndef __OBJECT_FILE_HH__
33 #define __OBJECT_FILE_HH__
34 
35 #include <limits>
36 #include <string>
37 
38 #include "base/misc.hh"
39 #include "base/types.hh"
40 
41 class PortProxy;
42 class SymbolTable;
43 
45 {
46  public:
47 
48  enum Arch {
57  Arm,
61  };
62 
63  enum OpSys {
70  };
71 
72  protected:
73  const std::string filename;
74  uint8_t *fileData;
75  size_t len;
76 
79 
80  ObjectFile(const std::string &_filename, size_t _len, uint8_t *_data,
81  Arch _arch, OpSys _opSys);
82 
83  public:
84  virtual ~ObjectFile();
85 
86  static const Addr maxAddr = std::numeric_limits<Addr>::max();
87 
88  virtual bool loadSections(PortProxy& mem_proxy,
89  Addr mask = maxAddr, Addr offset = 0);
90 
91  virtual bool loadAllSymbols(SymbolTable *symtab, Addr base = 0,
92  Addr offset = 0, Addr mask = maxAddr) = 0;
93  virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr base = 0,
94  Addr offset = 0, Addr mask = maxAddr) = 0;
95  virtual bool loadLocalSymbols(SymbolTable *symtab, Addr base = 0,
96  Addr offset = 0, Addr mask = maxAddr) = 0;
97  virtual bool loadWeakSymbols(SymbolTable *symtab, Addr base = 0,
98  Addr offset = 0, Addr mask = maxAddr)
99  { return false; }
100 
101  virtual ObjectFile *getInterpreter() const { return nullptr; }
102  virtual bool relocatable() const { return false; }
103  virtual Addr mapSize() const
104  { panic("mapSize() should only be called on relocatable objects\n"); }
105  virtual void updateBias(Addr bias_addr)
106  { panic("updateBias() should only be called on relocatable objects\n"); }
107  virtual Addr bias() const { return 0; }
108 
109  virtual bool hasTLS() { return false; }
110 
111  Arch getArch() const { return arch; }
112  OpSys getOpSys() const { return opSys; }
113 
114  protected:
115 
116  struct Section {
118  uint8_t *fileImage;
119  size_t size;
120  };
121 
124 
128 
129  bool loadSection(Section *sec, PortProxy& mem_proxy, Addr mask,
130  Addr offset = 0);
131  void setGlobalPointer(Addr global_ptr) { globalPtr = global_ptr; }
132 
133  public:
134  Addr entryPoint() const { return entry; }
135 
136  Addr globalPointer() const { return globalPtr; }
137 
138  Addr textBase() const { return text.baseAddr; }
139  Addr dataBase() const { return data.baseAddr; }
140  Addr bssBase() const { return bss.baseAddr; }
141 
142  size_t textSize() const { return text.size; }
143  size_t dataSize() const { return data.size; }
144  size_t bssSize() const { return bss.size; }
145 
146  /* This function allows you to override the base address where
147  * a binary is going to be loaded or set it if the binary is just a
148  * blob that doesn't include an object header.
149  * @param a address to load the binary/text section at
150  */
152 };
153 
154 ObjectFile *createObjectFile(const std::string &fname, bool raw = false);
155 
156 
157 #endif // __OBJECT_FILE_HH__
Addr dataBase() const
Definition: object_file.hh:139
size_t textSize() const
Definition: object_file.hh:142
#define panic(...)
Definition: misc.hh:153
Arch getArch() const
Definition: object_file.hh:111
virtual bool loadGlobalSymbols(SymbolTable *symtab, Addr base=0, Addr offset=0, Addr mask=maxAddr)=0
Bitfield< 8 > a
Definition: miscregs.hh:1377
Addr globalPtr
Definition: object_file.hh:123
size_t len
Definition: object_file.hh:75
Bitfield< 23, 0 > offset
Definition: types.hh:149
Addr globalPointer() const
Definition: object_file.hh:136
virtual bool loadLocalSymbols(SymbolTable *symtab, Addr base=0, Addr offset=0, Addr mask=maxAddr)=0
virtual ObjectFile * getInterpreter() const
Definition: object_file.hh:101
ObjectFile * createObjectFile(const std::string &fname, bool raw=false)
virtual bool loadWeakSymbols(SymbolTable *symtab, Addr base=0, Addr offset=0, Addr mask=maxAddr)
Definition: object_file.hh:97
virtual void updateBias(Addr bias_addr)
Definition: object_file.hh:105
Addr textBase() const
Definition: object_file.hh:138
ObjectFile(const std::string &_filename, size_t _len, uint8_t *_data, Arch _arch, OpSys _opSys)
Definition: object_file.cc:55
OpSys opSys
Definition: object_file.hh:78
Bitfield< 51, 12 > base
Definition: pagetable.hh:85
virtual bool hasTLS()
Definition: object_file.hh:109
void setGlobalPointer(Addr global_ptr)
Definition: object_file.hh:131
const std::string filename
Definition: object_file.hh:73
Addr entryPoint() const
Definition: object_file.hh:134
Addr bssBase() const
Definition: object_file.hh:140
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
virtual bool loadSections(PortProxy &mem_proxy, Addr mask=maxAddr, Addr offset=0)
Definition: object_file.cc:93
size_t dataSize() const
Definition: object_file.hh:143
This object is a proxy for a structural port, to be used for debug accesses.
Definition: port_proxy.hh:84
virtual Addr bias() const
Definition: object_file.hh:107
uint8_t * fileData
Definition: object_file.hh:74
virtual bool loadAllSymbols(SymbolTable *symtab, Addr base=0, Addr offset=0, Addr mask=maxAddr)=0
size_t bssSize() const
Definition: object_file.hh:144
static const Addr maxAddr
Definition: object_file.hh:86
bool loadSection(Section *sec, PortProxy &mem_proxy, Addr mask, Addr offset=0)
Definition: object_file.cc:75
Bitfield< 3, 0 > mask
Definition: types.hh:64
void setTextBase(Addr a)
Definition: object_file.hh:151
Section data
Definition: object_file.hh:126
Section bss
Definition: object_file.hh:127
virtual Addr mapSize() const
Definition: object_file.hh:103
Section text
Definition: object_file.hh:125
virtual bool relocatable() const
Definition: object_file.hh:102
This class encapsulates the types, structures, constants, functions, and syscall-number mappings spec...
Definition: freebsd.hh:49
virtual ~ObjectFile()
Definition: object_file.cc:65
OpSys getOpSys() const
Definition: object_file.hh:112

Generated on Fri Jun 9 2017 13:03:41 for gem5 by doxygen 1.8.6