object_file.hh revision 1762
111986Sandreas.sandberg@arm.com/* 211986Sandreas.sandberg@arm.com * Copyright (c) 2002-2004 The Regents of The University of Michigan 311986Sandreas.sandberg@arm.com * All rights reserved. 411986Sandreas.sandberg@arm.com * 511986Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 611986Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 711986Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 811986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 911986Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1011986Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 1111986Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 1211986Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 1311986Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 1411986Sandreas.sandberg@arm.com * this software without specific prior written permission. 1511986Sandreas.sandberg@arm.com * 1611986Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711986Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811986Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911986Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011986Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111986Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212037Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312037Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412037Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512037Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612037Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712037Sandreas.sandberg@arm.com */ 2811986Sandreas.sandberg@arm.com 2911986Sandreas.sandberg@arm.com#ifndef __OBJECT_FILE_HH__ 3011986Sandreas.sandberg@arm.com#define __OBJECT_FILE_HH__ 3111986Sandreas.sandberg@arm.com 3211986Sandreas.sandberg@arm.com#include "targetarch/isa_traits.hh" // for Addr 3311986Sandreas.sandberg@arm.com 3411986Sandreas.sandberg@arm.comclass FunctionalMemory; 3511986Sandreas.sandberg@arm.comclass SymbolTable; 3611986Sandreas.sandberg@arm.com 3711986Sandreas.sandberg@arm.comclass ObjectFile 3811986Sandreas.sandberg@arm.com{ 3911986Sandreas.sandberg@arm.com public: 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.com enum Arch { 4211986Sandreas.sandberg@arm.com UnknownArch, 4311986Sandreas.sandberg@arm.com Alpha 4411986Sandreas.sandberg@arm.com }; 4511986Sandreas.sandberg@arm.com 4611986Sandreas.sandberg@arm.com enum OpSys { 4711986Sandreas.sandberg@arm.com UnknownOpSys, 4811986Sandreas.sandberg@arm.com Tru64, 4911986Sandreas.sandberg@arm.com Linux 5011986Sandreas.sandberg@arm.com }; 5111986Sandreas.sandberg@arm.com 5212037Sandreas.sandberg@arm.com protected: 5312037Sandreas.sandberg@arm.com const std::string filename; 5412037Sandreas.sandberg@arm.com int descriptor; 5511986Sandreas.sandberg@arm.com uint8_t *fileData; 5611986Sandreas.sandberg@arm.com size_t len; 5711986Sandreas.sandberg@arm.com 5811986Sandreas.sandberg@arm.com Arch arch; 5911986Sandreas.sandberg@arm.com OpSys opSys; 6011986Sandreas.sandberg@arm.com 6111986Sandreas.sandberg@arm.com ObjectFile(const std::string &_filename, int _fd, 6211986Sandreas.sandberg@arm.com size_t _len, uint8_t *_data, 6311986Sandreas.sandberg@arm.com Arch _arch, OpSys _opSys); 6411986Sandreas.sandberg@arm.com 6511986Sandreas.sandberg@arm.com public: 6611986Sandreas.sandberg@arm.com virtual ~ObjectFile(); 6711986Sandreas.sandberg@arm.com 6811986Sandreas.sandberg@arm.com void close(); 6911986Sandreas.sandberg@arm.com 7011986Sandreas.sandberg@arm.com virtual bool loadSections(FunctionalMemory *mem, 7111986Sandreas.sandberg@arm.com bool loadPhys = false) = 0; 7211986Sandreas.sandberg@arm.com virtual bool loadGlobalSymbols(SymbolTable *symtab) = 0; 7311986Sandreas.sandberg@arm.com virtual bool loadLocalSymbols(SymbolTable *symtab) = 0; 7411986Sandreas.sandberg@arm.com 7511986Sandreas.sandberg@arm.com Arch getArch() const { return arch; } 7611986Sandreas.sandberg@arm.com OpSys getOpSys() const { return opSys; } 7711986Sandreas.sandberg@arm.com 7811986Sandreas.sandberg@arm.com protected: 7914299Sbbruce@ucdavis.edu 8014299Sbbruce@ucdavis.edu struct Section { 8111986Sandreas.sandberg@arm.com Addr baseAddr; 8211986Sandreas.sandberg@arm.com size_t size; 8311986Sandreas.sandberg@arm.com }; 8411986Sandreas.sandberg@arm.com 8511986Sandreas.sandberg@arm.com Addr entry; 8611986Sandreas.sandberg@arm.com Addr globalPtr; 8711986Sandreas.sandberg@arm.com 8811986Sandreas.sandberg@arm.com Section text; 8911986Sandreas.sandberg@arm.com Section data; 9011986Sandreas.sandberg@arm.com Section bss; 9112037Sandreas.sandberg@arm.com 9211986Sandreas.sandberg@arm.com public: 9314299Sbbruce@ucdavis.edu Addr entryPoint() const { return entry; } 94 Addr globalPointer() const { return globalPtr; } 95 96 Addr textBase() const { return text.baseAddr; } 97 Addr dataBase() const { return data.baseAddr; } 98 Addr bssBase() const { return bss.baseAddr; } 99 100 size_t textSize() const { return text.size; } 101 size_t dataSize() const { return data.size; } 102 size_t bssSize() const { return bss.size; } 103}; 104 105ObjectFile *createObjectFile(const std::string &fname); 106 107 108#endif // __OBJECT_FILE_HH__ 109