object_file.hh revision 1762
17732SAli.Saidi@ARM.com/* 210037SARM gem5 Developers * Copyright (c) 2002-2004 The Regents of The University of Michigan 37732SAli.Saidi@ARM.com * All rights reserved. 47732SAli.Saidi@ARM.com * 57732SAli.Saidi@ARM.com * Redistribution and use in source and binary forms, with or without 67732SAli.Saidi@ARM.com * modification, are permitted provided that the following conditions are 77732SAli.Saidi@ARM.com * met: redistributions of source code must retain the above copyright 87732SAli.Saidi@ARM.com * notice, this list of conditions and the following disclaimer; 97732SAli.Saidi@ARM.com * redistributions in binary form must reproduce the above copyright 107732SAli.Saidi@ARM.com * notice, this list of conditions and the following disclaimer in the 117732SAli.Saidi@ARM.com * documentation and/or other materials provided with the distribution; 127732SAli.Saidi@ARM.com * neither the name of the copyright holders nor the names of its 137732SAli.Saidi@ARM.com * contributors may be used to endorse or promote products derived from 147732SAli.Saidi@ARM.com * this software without specific prior written permission. 157732SAli.Saidi@ARM.com * 167732SAli.Saidi@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177732SAli.Saidi@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187732SAli.Saidi@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197732SAli.Saidi@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207732SAli.Saidi@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217732SAli.Saidi@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227732SAli.Saidi@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237732SAli.Saidi@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247732SAli.Saidi@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257732SAli.Saidi@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267732SAli.Saidi@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277732SAli.Saidi@ARM.com */ 287732SAli.Saidi@ARM.com 297732SAli.Saidi@ARM.com#ifndef __OBJECT_FILE_HH__ 307732SAli.Saidi@ARM.com#define __OBJECT_FILE_HH__ 317732SAli.Saidi@ARM.com 327732SAli.Saidi@ARM.com#include "targetarch/isa_traits.hh" // for Addr 337732SAli.Saidi@ARM.com 347732SAli.Saidi@ARM.comclass FunctionalMemory; 357732SAli.Saidi@ARM.comclass SymbolTable; 367732SAli.Saidi@ARM.com 377732SAli.Saidi@ARM.comclass ObjectFile 387732SAli.Saidi@ARM.com{ 397732SAli.Saidi@ARM.com public: 407732SAli.Saidi@ARM.com 419554Sandreas.hansson@arm.com enum Arch { 429554Sandreas.hansson@arm.com UnknownArch, 439554Sandreas.hansson@arm.com Alpha 448204SAli.Saidi@ARM.com }; 458204SAli.Saidi@ARM.com 468204SAli.Saidi@ARM.com enum OpSys { 478204SAli.Saidi@ARM.com UnknownOpSys, 488204SAli.Saidi@ARM.com Tru64, 498204SAli.Saidi@ARM.com Linux 508204SAli.Saidi@ARM.com }; 518204SAli.Saidi@ARM.com 528204SAli.Saidi@ARM.com protected: 538204SAli.Saidi@ARM.com const std::string filename; 548204SAli.Saidi@ARM.com int descriptor; 558204SAli.Saidi@ARM.com uint8_t *fileData; 568204SAli.Saidi@ARM.com size_t len; 577732SAli.Saidi@ARM.com 587732SAli.Saidi@ARM.com Arch arch; 597732SAli.Saidi@ARM.com OpSys opSys; 607732SAli.Saidi@ARM.com 6110037SARM gem5 Developers ObjectFile(const std::string &_filename, int _fd, 627732SAli.Saidi@ARM.com size_t _len, uint8_t *_data, 637732SAli.Saidi@ARM.com Arch _arch, OpSys _opSys); 647732SAli.Saidi@ARM.com 657732SAli.Saidi@ARM.com public: 667732SAli.Saidi@ARM.com virtual ~ObjectFile(); 677732SAli.Saidi@ARM.com 687732SAli.Saidi@ARM.com void close(); 697732SAli.Saidi@ARM.com 707732SAli.Saidi@ARM.com virtual bool loadSections(FunctionalMemory *mem, 718204SAli.Saidi@ARM.com bool loadPhys = false) = 0; 727732SAli.Saidi@ARM.com virtual bool loadGlobalSymbols(SymbolTable *symtab) = 0; 7310037SARM gem5 Developers virtual bool loadLocalSymbols(SymbolTable *symtab) = 0; 747732SAli.Saidi@ARM.com 757732SAli.Saidi@ARM.com Arch getArch() const { return arch; } 767732SAli.Saidi@ARM.com OpSys getOpSys() const { return opSys; } 777732SAli.Saidi@ARM.com 787732SAli.Saidi@ARM.com protected: 797732SAli.Saidi@ARM.com 808142SAli.Saidi@ARM.com struct Section { 817732SAli.Saidi@ARM.com Addr baseAddr; 827732SAli.Saidi@ARM.com size_t size; 838204SAli.Saidi@ARM.com }; 847732SAli.Saidi@ARM.com 857732SAli.Saidi@ARM.com Addr entry; 8610037SARM gem5 Developers Addr globalPtr; 8710037SARM gem5 Developers 8810037SARM gem5 Developers Section text; 8910037SARM gem5 Developers Section data; 907732SAli.Saidi@ARM.com Section bss; 917732SAli.Saidi@ARM.com 927732SAli.Saidi@ARM.com public: 937732SAli.Saidi@ARM.com Addr entryPoint() const { return entry; } 947732SAli.Saidi@ARM.com Addr globalPointer() const { return globalPtr; } 957732SAli.Saidi@ARM.com 968142SAli.Saidi@ARM.com Addr textBase() const { return text.baseAddr; } 977732SAli.Saidi@ARM.com Addr dataBase() const { return data.baseAddr; } 9810037SARM gem5 Developers Addr bssBase() const { return bss.baseAddr; } 9910037SARM gem5 Developers 10010037SARM gem5 Developers size_t textSize() const { return text.size; } 10110037SARM gem5 Developers size_t dataSize() const { return data.size; } 10210037SARM gem5 Developers size_t bssSize() const { return bss.size; } 10310037SARM gem5 Developers}; 10410037SARM gem5 Developers 10510037SARM gem5 DevelopersObjectFile *createObjectFile(const std::string &fname); 1067732SAli.Saidi@ARM.com 1078204SAli.Saidi@ARM.com 1087732SAli.Saidi@ARM.com#endif // __OBJECT_FILE_HH__ 1097732SAli.Saidi@ARM.com