diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2012-01-31 22:40:08 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2012-01-31 22:40:08 -0800 |
commit | ea8b347dc5d375572d8d19770024ec8be5fd5017 (patch) | |
tree | 56bb75b1f071a749b7e90218d0d6b0e9265657bb /util/m5 | |
parent | e88165a431a90cf7e33e205794caed898ca6fcb1 (diff) | |
parent | 7d4f18770073d968c70cd3ffcdd117f50a6056a2 (diff) | |
download | gem5-ea8b347dc5d375572d8d19770024ec8be5fd5017.tar.xz |
Merge with head, hopefully the last time for this batch.
Diffstat (limited to 'util/m5')
-rw-r--r-- | util/m5/m5.c | 43 | ||||
-rw-r--r-- | util/m5/m5op.h | 1 | ||||
-rw-r--r-- | util/m5/m5op_arm.S | 2 | ||||
-rw-r--r-- | util/m5/m5ops.h | 1 |
4 files changed, 45 insertions, 2 deletions
diff --git a/util/m5/m5.c b/util/m5/m5.c index 40328bc38..a0ce9b3ec 100644 --- a/util/m5/m5.c +++ b/util/m5/m5.c @@ -88,6 +88,33 @@ read_file(int dest_fid) } } +int +write_file(const char *filename) +{ + fprintf(stderr, "opening %s\n", filename); + int src_fid = open(filename, O_RDONLY); + + if (src_fid < 0) { + fprintf(stderr, "error opening %s\n", filename); + return; + } + + char buf[256*1024]; + int offset = 0; + int len; + int bytes = 0; + + memset(buf, 0, sizeof(buf)); + + while ((len = read(src_fid, buf, sizeof(buf))) > 0) { + bytes += m5_writefile(buf, len, offset, filename); + offset += len; + } + fprintf(stderr, "written %d bytes\n", bytes); + + close(src_fid); +} + void do_exit(int argc, char *argv[]) { @@ -131,6 +158,17 @@ do_read_file(int argc, char *argv[]) } void +do_write_file(int argc, char *argv[]) +{ + if (argc != 1) + usage(); + + const char *filename = argv[0]; + + write_file(filename); +} + +void do_exec_file(int argc, char *argv[]) { if (argc > 0) @@ -227,8 +265,9 @@ struct MainFunc mainfuncs[] = { { "resetstats", do_reset_stats, "[delay [period]]" }, { "dumpstats", do_dump_stats, "[delay [period]]" }, { "dumpresetstats", do_dump_reset_stats, "[delay [period]]" }, - { "readfile", do_read_file, "[filename]" }, - { "execfile", do_exec_file, "<filename>" }, + { "readfile", do_read_file, "" }, + { "writefile", do_write_file, "<filename>" }, + { "execfile", do_exec_file, "" }, { "checkpoint", do_checkpoint, "[delay [period]]" }, { "loadsymbol", do_load_symbol, "<address> <symbol>" }, { "initparam", do_initparam, "" }, diff --git a/util/m5/m5op.h b/util/m5/m5op.h index 38815e3c3..4e1d0b638 100644 --- a/util/m5/m5op.h +++ b/util/m5/m5op.h @@ -49,6 +49,7 @@ void m5_reset_stats(uint64_t ns_delay, uint64_t ns_period); void m5_dump_stats(uint64_t ns_delay, uint64_t ns_period); void m5_dumpreset_stats(uint64_t ns_delay, uint64_t ns_period); uint64_t m5_readfile(void *buffer, uint64_t len, uint64_t offset); +uint64_t m5_writefile(void *buffer, uint64_t len, uint64_t offset, const char *filename); void m5_debugbreak(void); void m5_switchcpu(void); void m5_addsymbol(uint64_t addr, char *symbol); diff --git a/util/m5/m5op_arm.S b/util/m5/m5op_arm.S index b9557ee9d..8cdf5c62d 100644 --- a/util/m5/m5op_arm.S +++ b/util/m5/m5op_arm.S @@ -80,6 +80,7 @@ func: #define DUMPRST_STATS INST(m5_op, 0, 0, dumprststats_func) #define CHECKPOINT INST(m5_op, 0, 0, ckpt_func) #define READFILE INST(m5_op, 0, 0, readfile_func) +#define WRITEFILE INST(m5_op, 0, 0, writefile_func) #define DEBUGBREAK INST(m5_op, 0, 0, debugbreak_func) #define SWITCHCPU INST(m5_op, 0, 0, switchcpu_func) #define ADDSYMBOL INST(m5_op, 0, 0, addsymbol_func) @@ -121,6 +122,7 @@ SIMPLE_OP(m5_dump_stats, DUMP_STATS) SIMPLE_OP(m5_dumpreset_stats, DUMPRST_STATS) SIMPLE_OP(m5_checkpoint, CHECKPOINT) SIMPLE_OP(m5_readfile, READFILE) +SIMPLE_OP(m5_writefile, WRITEFILE) SIMPLE_OP(m5_debugbreak, DEBUGBREAK) SIMPLE_OP(m5_switchcpu, SWITCHCPU) SIMPLE_OP(m5_addsymbol, ADDSYMBOL) diff --git a/util/m5/m5ops.h b/util/m5/m5ops.h index bc2ae06be..f08524014 100644 --- a/util/m5/m5ops.h +++ b/util/m5/m5ops.h @@ -46,6 +46,7 @@ #define dumpstats_func 0x41 #define dumprststats_func 0x42 #define ckpt_func 0x43 +#define writefile_func 0x4F #define readfile_func 0x50 #define debugbreak_func 0x51 #define switchcpu_func 0x52 |