misc: Make the m5 utilities writefile command accept a host path.

When the writefile command is given one command line argument, it's treated
as the name of the file in the simulation and on the host. When there are two
arguments, the first is the filename in the simulation, and the second is the
name on the host.

Change-Id: I402925a9ff89665bee9910fb18b7f8b06b8f7d35
Reviewed-on: https://gem5-review.googlesource.com/4850
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Gabe Black <gabeblack@google.com>
diff --git a/util/m5/m5.c b/util/m5/m5.c
index 82ef73b..38da9dc 100644
--- a/util/m5/m5.c
+++ b/util/m5/m5.c
@@ -140,7 +140,7 @@
 }
 
 void
-write_file(const char *filename)
+write_file(const char *filename, const char *host_filename)
 {
     fprintf(stderr, "opening %s\n", filename);
     int src_fid = open(filename, O_RDONLY);
@@ -158,7 +158,7 @@
     memset(buf, 0, sizeof(buf));
 
     while ((len = read(src_fid, buf, sizeof(buf))) > 0) {
-        bytes += m5_write_file(buf, len, offset, filename);
+        bytes += m5_write_file(buf, len, offset, host_filename);
         offset += len;
     }
     fprintf(stderr, "written %d bytes\n", bytes);
@@ -224,12 +224,13 @@
 void
 do_write_file(int argc, char *argv[])
 {
-    if (argc != 1)
+    if (argc != 1 && argc != 2)
         usage();
 
     const char *filename = argv[0];
+    const char *host_filename = (argc == 2) ? argv[1] : argv[0];
 
-    write_file(filename);
+    write_file(filename, host_filename);
 }
 
 void
@@ -344,7 +345,7 @@
     { "dumpstats",      do_dump_stats,       "[delay [period]]" },
     { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" },
     { "readfile",       do_read_file,        "" },
-    { "writefile",      do_write_file,       "<filename>" },
+    { "writefile",      do_write_file,       "<filename> [host filename]" },
     { "execfile",       do_exec_file,        "" },
     { "checkpoint",     do_checkpoint,       "[delay [period]]" },
     { "addsymbol",      do_addsymbol,        "<address> <symbol>" },