sim: Disable gzip compression for writefile pseudo instruction
The writefile pseudo instruction uses OutputDirectory::create and OutputDirectory::openFile to create the output files. However, by default these will check the file extention for .gz, and create a gzip compressed stream if the file ending matches. When writing out files, we want to write them out exactly as they are in the guest simulation, and never want to compress them with gzio. Additionally, this causes m5 writefile to fail when checking the error flags for the output steam. With this patch we add an additional no_gz argument to OutputDirectory::create and OutputDirectory::openFile which allows us to override the gzip compression. Therefore, for m5 writefile we disable the filename check, and always create a standard ostream.
This commit is contained in:
@@ -77,9 +77,11 @@ OutputDirectory::checkForStdio(const string &name) const
|
||||
|
||||
ostream *
|
||||
OutputDirectory::openFile(const string &filename,
|
||||
ios_base::openmode mode)
|
||||
ios_base::openmode mode, bool no_gz)
|
||||
{
|
||||
if (filename.find(".gz", filename.length()-3) < filename.length()) {
|
||||
bool gz = !no_gz;
|
||||
gz = gz && filename.find(".gz", filename.length()-3) < filename.length();
|
||||
if (gz) {
|
||||
ogzstream *file = new ogzstream(filename.c_str(), mode);
|
||||
if (!file->is_open())
|
||||
fatal("Cannot open file %s", filename);
|
||||
@@ -153,7 +155,7 @@ OutputDirectory::resolve(const string &name) const
|
||||
}
|
||||
|
||||
ostream *
|
||||
OutputDirectory::create(const string &name, bool binary)
|
||||
OutputDirectory::create(const string &name, bool binary, bool no_gz)
|
||||
{
|
||||
ostream *file = checkForStdio(name);
|
||||
if (file)
|
||||
@@ -162,7 +164,7 @@ OutputDirectory::create(const string &name, bool binary)
|
||||
string filename = resolve(name);
|
||||
ios_base::openmode mode =
|
||||
ios::trunc | (binary ? ios::binary : (ios::openmode)0);
|
||||
file = openFile(filename, mode);
|
||||
file = openFile(filename, mode, no_gz);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user