base,sim: allow m5writeFile with stdout/stderr.
If m5writeFile opens stdout/stderr, no file is registered in OutputDirectory and thus we don't want to search for it on close. In order to write multiple times to stdout/stderr in a reasonable way, we also want to prevent seeking. Thus, don't seek if the offset is 0, in which case this would be a noop anyway (we just opened the file without append). Finally, it is helpful for debugging if the stream is flushed on every write. Change-Id: I102f82dcd2c63420b6f3fe55d67f03c62349e69d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28727 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2015 ARM Limited
|
||||
* Copyright (c) 2020 Barkhausen Institut
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
@@ -142,6 +143,11 @@ OutputDirectory::checkForStdio(const string &name)
|
||||
void
|
||||
OutputDirectory::close(OutputStream *file)
|
||||
{
|
||||
if (file == &stdout || file == &stderr) {
|
||||
file->stream()->flush();
|
||||
return;
|
||||
}
|
||||
|
||||
auto i = files.find(file->name());
|
||||
if (i == files.end())
|
||||
fatal("Attempted to close an unregistred file stream");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2010-2012, 2015, 2017 ARM Limited
|
||||
* Copyright (c) 2020 Barkhausen Institut
|
||||
* All rights reserved
|
||||
*
|
||||
* The license below extends only to copyright in the software and shall
|
||||
@@ -425,8 +426,10 @@ writefile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset,
|
||||
if (!os)
|
||||
panic("could not open file %s\n", filename);
|
||||
|
||||
// seek to offset
|
||||
os->seekp(offset);
|
||||
if (offset != 0) {
|
||||
// seek to offset
|
||||
os->seekp(offset);
|
||||
}
|
||||
|
||||
// copy out data and write to file
|
||||
char *buf = new char[len];
|
||||
|
||||
Reference in New Issue
Block a user