object_file.hh revision 2
1/*
2 * Copyright (c) 2003 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
29#ifndef __OBJECT_FILE_HH__
30#define __OBJECT_FILE_HH__
31
32#include "ecoff.hh"
33#include "isa_traits.hh"	// for Addr
34
35class SymbolTable;
36
37class ObjectFile
38{
39  protected:
40    std::string name;
41    int descriptor;
42    uint8_t *data;
43    size_t len;
44
45  public:
46    ObjectFile();
47    explicit ObjectFile(std::string file);
48    virtual ~ObjectFile();
49
50    bool open(std::string file);
51    void close();
52
53    virtual bool loadGlobals(SymbolTable *symtab) = 0;
54    virtual bool loadLocals(SymbolTable *symtab) = 0;
55    virtual void postOpen() = 0;
56
57  protected:
58    Addr text_off;
59    Addr data_off;
60    Addr bss_off;
61
62    size_t text_size;
63    size_t data_size;
64    size_t bss_size;
65
66  public:
67    Addr textOffset() const { return text_off; }
68    Addr dataOffset() const { return data_off; }
69    Addr bssOffset() const { return bss_off; }
70
71    size_t textSize() const { return text_size; }
72    size_t dataSize() const { return data_size; }
73    size_t bssSize() const { return bss_size; }
74};
75
76class EcoffObject : public ObjectFile
77{
78  protected:
79    EcoffFileHeader *exec;
80    EcoffAOutHeader *aout;
81
82  public:
83    EcoffObject() {}
84    explicit EcoffObject(std::string file) { open(file); }
85    virtual ~EcoffObject() {}
86
87    virtual bool loadGlobals(SymbolTable *symtab);
88    virtual bool loadLocals(SymbolTable *symtab);
89    virtual void postOpen();
90};
91
92#endif // __OBJECT_FILE_HH__
93