object_file.hh revision 2207
112855Sgabeblack@google.com/*
212855Sgabeblack@google.com * Copyright (c) 2002-2004 The Regents of The University of Michigan
312855Sgabeblack@google.com * All rights reserved.
412855Sgabeblack@google.com *
512855Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without
612855Sgabeblack@google.com * modification, are permitted provided that the following conditions are
712855Sgabeblack@google.com * met: redistributions of source code must retain the above copyright
812855Sgabeblack@google.com * notice, this list of conditions and the following disclaimer;
912855Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright
1012855Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the
1112855Sgabeblack@google.com * documentation and/or other materials provided with the distribution;
1212855Sgabeblack@google.com * neither the name of the copyright holders nor the names of its
1312855Sgabeblack@google.com * contributors may be used to endorse or promote products derived from
1412855Sgabeblack@google.com * this software without specific prior written permission.
1512855Sgabeblack@google.com *
1612855Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1712855Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1812855Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1912855Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2012855Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2112855Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2212855Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2312855Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2412855Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2512855Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2612855Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2712855Sgabeblack@google.com */
2812855Sgabeblack@google.com
2912855Sgabeblack@google.com#ifndef __OBJECT_FILE_HH__
3012855Sgabeblack@google.com#define __OBJECT_FILE_HH__
3112855Sgabeblack@google.com
3212855Sgabeblack@google.com#include <string>
3312855Sgabeblack@google.com
3412855Sgabeblack@google.com#include "sim/host.hh"	// for Addr
3512855Sgabeblack@google.com
3612855Sgabeblack@google.comclass FunctionalMemory;
3712855Sgabeblack@google.comclass SymbolTable;
3812855Sgabeblack@google.com
3912855Sgabeblack@google.comclass ObjectFile
4012855Sgabeblack@google.com{
4112855Sgabeblack@google.com  public:
4212855Sgabeblack@google.com
4312855Sgabeblack@google.com    enum Arch {
4412855Sgabeblack@google.com        UnknownArch,
4512855Sgabeblack@google.com        Alpha,
4612855Sgabeblack@google.com        SPARC,
4712855Sgabeblack@google.com        MIPS
4812855Sgabeblack@google.com    };
4912855Sgabeblack@google.com
5012855Sgabeblack@google.com    enum OpSys {
5112855Sgabeblack@google.com        UnknownOpSys,
5212855Sgabeblack@google.com        Tru64,
5312855Sgabeblack@google.com        Linux,
5412855Sgabeblack@google.com        Solaris
5512855Sgabeblack@google.com    };
5612855Sgabeblack@google.com
5712855Sgabeblack@google.com  protected:
5812855Sgabeblack@google.com    const std::string filename;
5912855Sgabeblack@google.com    int descriptor;
6012855Sgabeblack@google.com    uint8_t *fileData;
6112855Sgabeblack@google.com    size_t len;
6212855Sgabeblack@google.com
6312855Sgabeblack@google.com    Arch  arch;
6412855Sgabeblack@google.com    OpSys opSys;
6512855Sgabeblack@google.com
6612855Sgabeblack@google.com    ObjectFile(const std::string &_filename, int _fd,
6712855Sgabeblack@google.com               size_t _len, uint8_t *_data,
6812855Sgabeblack@google.com               Arch _arch, OpSys _opSys);
6912855Sgabeblack@google.com
7012855Sgabeblack@google.com  public:
7112855Sgabeblack@google.com    virtual ~ObjectFile();
7212855Sgabeblack@google.com
7312855Sgabeblack@google.com    void close();
7412855Sgabeblack@google.com
7512855Sgabeblack@google.com    virtual bool loadSections(FunctionalMemory *mem,
7612855Sgabeblack@google.com                              bool loadPhys = false) = 0;
77    virtual bool loadGlobalSymbols(SymbolTable *symtab) = 0;
78    virtual bool loadLocalSymbols(SymbolTable *symtab) = 0;
79
80    Arch  getArch()  const { return arch; }
81    OpSys getOpSys() const { return opSys; }
82
83  protected:
84
85    struct Section {
86        Addr baseAddr;
87        size_t size;
88    };
89
90    Addr entry;
91    Addr globalPtr;
92
93    Section text;
94    Section data;
95    Section bss;
96
97  public:
98    Addr entryPoint() const { return entry; }
99    Addr globalPointer() const { return globalPtr; }
100
101    Addr textBase() const { return text.baseAddr; }
102    Addr dataBase() const { return data.baseAddr; }
103    Addr bssBase() const { return bss.baseAddr; }
104
105    size_t textSize() const { return text.size; }
106    size_t dataSize() const { return data.size; }
107    size_t bssSize() const { return bss.size; }
108};
109
110ObjectFile *createObjectFile(const std::string &fname);
111
112
113#endif // __OBJECT_FILE_HH__
114