misc: Make the m5 utilities writefile command accept a host path.
authorGabe Black <gabeblack@google.com>
Sat, 16 Sep 2017 00:24:12 +0000 (17:24 -0700)
committerGabe Black <gabeblack@google.com>
Tue, 26 Sep 2017 21:20:02 +0000 (21:20 +0000)
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>

util/m5/m5.c

index 82ef73b0f0fff34eeb30be22683c04be3fd3c513..38da9dc3785d76e8585d82380f23e18f3a98a90a 100644 (file)
@@ -140,7 +140,7 @@ read_file(int dest_fid)
 }
 
 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 @@ write_file(const char *filename)
     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 @@ do_read_file(int argc, char *argv[])
 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 @@ struct MainFunc mainfuncs[] = {
     { "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>" },