64 if (parts[0] !=
"raw")
76 messages <<
"Target is not an AddressDataBus.\n";
86 if (parts.size() < 3 || parts.size() > 5) {
87 messages <<
"Syntax is raw:vaddr:[skiplen:[initialpc:]]filename.\n";
91 string strvaddr = parts[1];
92 string strskiplen = (parts.size() >= 4)? parts[2] :
"";
93 string strinitialpc = (parts.size() >= 5)? parts[3] :
"";
94 string fname = parts[parts.size() - 1];
99 messages <<
"could not parse vaddr.\n";
103 uint64_t skiplen = 0;
104 if (strskiplen !=
"") {
107 messages <<
"could not parse skiplen\n";
112 uint64_t initialpc = vaddr;
113 if (strinitialpc !=
"") {
116 messages <<
"could not parse initialpc\n";
121 ifstream file(fname.c_str());
122 if (!file.is_open()) {
123 messages <<
"Unable to read file.\n";
127 file.seekg(0, std::ios_base::end);
128 off_t totalSize = file.tellg();
129 file.seekg(skiplen, std::ios_base::beg);
130 totalSize -= skiplen;
134 data.resize(totalSize);
135 file.read(&
data[0], totalSize);
136 if (file.gcount() != totalSize) {
137 messages <<
"failed to read the whole file\n";
141 messages.flags(std::ios::hex);
142 messages <<
"Raw file: entry point 0x" << initialpc <<
"\n";
143 messages <<
"loadable chunk";
145 messages.flags(std::ios::dec);
146 messages <<
" at offset " << skiplen;
149 messages.flags(std::ios::hex);
150 messages <<
": vaddr 0x" << vaddr;
152 messages.flags(std::ios::dec);
153 messages <<
", " << totalSize <<
" bytes\n";
156 for (
size_t k=0; k<(size_t)totalSize; ++k) {
159 messages.flags(std::ios::hex);
160 messages <<
"Failed to write data to "
161 "virtual address 0x" << vaddr <<
"\n";
184 static void Test_FileLoader_raw_Constructor()
192 UNITTEST(Test_FileLoader_raw_Constructor);