hex_file.hh revision 5222:bb733a878f85
111348Sandreas.sandberg@arm.com/*
211470Sandreas.sandberg@arm.com * Copyright (c) 2002-2004 The Regents of The University of Michigan
311348Sandreas.sandberg@arm.com * All rights reserved.
411348Sandreas.sandberg@arm.com *
511348Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
611348Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
711348Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
811348Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
911348Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
1011348Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
1111348Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
1211348Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
1311348Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
1411348Sandreas.sandberg@arm.com * this software without specific prior written permission.
1511348Sandreas.sandberg@arm.com *
1611348Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711348Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811348Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911348Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011348Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111348Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211348Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311348Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411348Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511348Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611348Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2711348Sandreas.sandberg@arm.com *
2811348Sandreas.sandberg@arm.com * Authors: Jaidev Patwardhan
2911348Sandreas.sandberg@arm.com */
3011348Sandreas.sandberg@arm.com
3111348Sandreas.sandberg@arm.com#ifndef __HEX_FILE_HH__
3211348Sandreas.sandberg@arm.com#define __HEX_FILE_HH__
3311348Sandreas.sandberg@arm.com
3411348Sandreas.sandberg@arm.com#include <limits>
3511348Sandreas.sandberg@arm.com#include <string>
3611348Sandreas.sandberg@arm.com
3711348Sandreas.sandberg@arm.com#include "sim/host.hh"	// for Addr
3811348Sandreas.sandberg@arm.com#include <fstream>
3911348Sandreas.sandberg@arm.com
4011348Sandreas.sandberg@arm.comclass Port;
4111348Sandreas.sandberg@arm.com
4211348Sandreas.sandberg@arm.comclass HexFile
4311348Sandreas.sandberg@arm.com{
4411348Sandreas.sandberg@arm.com  public:
4511348Sandreas.sandberg@arm.com
4611348Sandreas.sandberg@arm.com
4711348Sandreas.sandberg@arm.com  protected:
4811348Sandreas.sandberg@arm.com    const std::string filename;
4911348Sandreas.sandberg@arm.com    FILE *fp;
5011348Sandreas.sandberg@arm.com
5111348Sandreas.sandberg@arm.com  public:
5211348Sandreas.sandberg@arm.com    virtual ~HexFile();
5311348Sandreas.sandberg@arm.com    HexFile(const std::string _filename);
5411348Sandreas.sandberg@arm.com
5511348Sandreas.sandberg@arm.com    void close();
5611348Sandreas.sandberg@arm.com
5711348Sandreas.sandberg@arm.com    bool loadSections(Port *memPort, Addr addrMask =
5811348Sandreas.sandberg@arm.com            std::numeric_limits<Addr>::max());
5911348Sandreas.sandberg@arm.com
6011348Sandreas.sandberg@arm.com  protected:
6111348Sandreas.sandberg@arm.com
6211348Sandreas.sandberg@arm.com  typedef struct {
6311348Sandreas.sandberg@arm.com    Addr MemAddr;
6411348Sandreas.sandberg@arm.com    uint32_t Data;
6511348Sandreas.sandberg@arm.com  } HexLine;
6611348Sandreas.sandberg@arm.com
6711348Sandreas.sandberg@arm.com    Addr entry;
6811348Sandreas.sandberg@arm.com    Addr globalPtr;
6911348Sandreas.sandberg@arm.com
7011348Sandreas.sandberg@arm.com  public:
7111348Sandreas.sandberg@arm.com    void parseLine(char *,Addr *,uint32_t *);
7211348Sandreas.sandberg@arm.com    Addr entryPoint() const { return entry; }
7311348Sandreas.sandberg@arm.com    Addr globalPointer() const { return globalPtr; }
7411348Sandreas.sandberg@arm.com
7511348Sandreas.sandberg@arm.com};
7611348Sandreas.sandberg@arm.com
7711348Sandreas.sandberg@arm.com#endif // __HEX_FILE_HH__
7811348Sandreas.sandberg@arm.com