style: This file hugely violated the M5 style.

Remove a bunch of unused cruft from the interface while we're at it
This commit is contained in:
Nathan Binkert 2008-09-08 18:03:52 -07:00
parent 30bc897613
commit 496d3f2789
2 changed files with 75 additions and 119 deletions

View file

@ -28,134 +28,109 @@
* Authors: Jaidev Patwardhan
*/
#include <cctype>
#include <cstdio>
#include <list>
#include <string>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include "base/cprintf.hh"
#include "base/loader/hex_file.hh"
#include "base/loader/symtab.hh"
#include "mem/translating_port.hh"
using namespace std;
/* Load a Hex File into memory.
Currently only used with MIPS BARE_IRON mode.
A hex file consists of [Address Data] tuples that get directly loaded into
physical memory. The address specified is a word address (i.e., to get the byte address, shift left by 2)
The data is a full 32-bit hex value.
/*
* Load a Hex File into memory. Currently only used with MIPS
* BARE_IRON mode. A hex file consists of [Address Data] tuples that
* get directly loaded into physical memory. The address specified is
* a word address (i.e., to get the byte address, shift left by 2) The
* data is a full 32-bit hex value.
*/
HexFile::HexFile(const string _filename)
: filename(_filename)
{
fp = fopen(filename.c_str(),"r");
if(fp == NULL)
{
panic("Unable to open %s\n",filename.c_str());
}
fp = fopen(filename.c_str(), "r");
if (fp == NULL)
panic("Unable to open %s\n", filename.c_str());
}
HexFile::~HexFile()
{
}
bool
HexFile::loadSections(Port *memPort, Addr addrMask)
HexFile::loadSections(Port *memPort)
{
char Line[64];
Addr MemAddr;
uint32_t Data;
while(!feof(fp))
{
fgets(Line,64,fp);
parseLine(Line,&MemAddr,&Data);
// printf("Hex:%u\n",Data);
if(MemAddr != 0)
{
// Now, write to memory
memPort->writeBlob(MemAddr<<2,(uint8_t *)&Data,sizeof(Data));
char Line[64];
Addr MemAddr;
uint32_t Data;
while (!feof(fp)) {
fgets(Line, 64, fp);
parseLine(Line, &MemAddr, &Data);
if (MemAddr != 0) {
// Now, write to memory
memPort->writeBlob(MemAddr << 2, (uint8_t *)&Data, sizeof(Data));
}
}
return true;
}
void HexFile::parseLine(char *Str,Addr *A, uint32_t *D)
void
HexFile::parseLine(char *Str, Addr *A, uint32_t *D)
{
int i=0;
bool Flag = false;
*A = 0;
*D = 0;
int Digit = 0;
unsigned Number = 0;
/* Skip white spaces */
while(Str[i] != '\0' && Str[i]==' ')
i++;
int i = 0;
bool Flag = false;
*A = 0;
*D = 0;
int Digit = 0;
unsigned Number = 0;
/* Ok, we're at some character...process things */
while(Str[i] != '\0')
{
if(Str[i]>='0' && Str[i]<='9')
{
Digit=Str[i]-'0';
}
else if(Str[i]>='a' && Str[i]<='f')
{
Digit=Str[i]-'a'+10;
}
else if(Str[i]>='A' && Str[i]<='F')
{
/* Skip white spaces */
while (Str[i] != '\0' && Str[i]==' ')
i++;
/* Ok, we're at some character...process things */
while (Str[i] != '\0') {
if (Str[i] >= '0' && Str[i] <= '9') {
Digit = Str[i] - '0';
} else if (Str[i] >= 'a' && Str[i] <= 'f') {
Digit = Str[i] - 'a' + 10;
} else if (Str[i] >= 'A' && Str[i] <= 'F') {
Digit=Str[i]-'A'+10;
}
else if(Str[i] == ' ' || Str[i]=='\n')
{
if(Number == 0)
} else if (Str[i] == ' ' || Str[i] == '\n') {
if (Number == 0)
return;
if (Flag == false) {
*A = Number;
Number = 0;
Flag = true;
} else {
*D = Number;
return;
}
} else {
// Ok, we've encountered a non-hex character, cannot be a
// valid line, skip and return 0's
*A = 0;
*D = 0;
return;
if(Flag == false)
{
*A = Number;
Number = 0;
Flag = true;
}
else
{
*D = Number;
return;
}
}
else
{
// Ok, we've encountered a non-hex character, cannot be a valid line, skip and return 0's
*A = 0;
*D = 0;
return;
}
Number<<=4;
Number+=Digit;
i++;
Number <<= 4;
Number += Digit;
i++;
}
if(Flag != true)
{
*A = 0;
*D = 0;
}
else
*D = Number;
if (Flag != true) {
*A = 0;
*D = 0;
} else {
*D = Number;
}
}
void
HexFile::close()
{
fclose(fp);
fclose(fp);
}

View file

@ -28,50 +28,31 @@
* Authors: Jaidev Patwardhan
*/
#ifndef __HEX_FILE_HH__
#define __HEX_FILE_HH__
#ifndef __BASE_LOADER_HEX_FILE_HH__
#define __BASE_LOADER_HEX_FILE_HH__
#include <cstdio>
#include <limits>
#include <string>
#include "sim/host.hh" // for Addr
#include <fstream>
class Port;
class HexFile
{
public:
protected:
const std::string filename;
FILE *fp;
void parseLine(char *, Addr *, uint32_t *);
public:
virtual ~HexFile();
HexFile(const std::string _filename);
virtual ~HexFile();
void close();
bool loadSections(Port *memPort, Addr addrMask =
std::numeric_limits<Addr>::max());
protected:
typedef struct {
Addr MemAddr;
uint32_t Data;
} HexLine;
Addr entry;
Addr globalPtr;
public:
void parseLine(char *,Addr *,uint32_t *);
Addr entryPoint() const { return entry; }
Addr globalPointer() const { return globalPtr; }
bool loadSections(Port *memPort);
};
#endif // __HEX_FILE_HH__
#endif // __BASE_LOADER_HEX_FILE_HH__