diff --git a/nemu/Kconfig b/nemu/Kconfig index 20f7705..e4916c1 100644 --- a/nemu/Kconfig +++ b/nemu/Kconfig @@ -156,6 +156,11 @@ config ITRACE_BUFFER int "Buffer size for intruction trace (unit: number of instructions)" default 10 +config MTRACE + depends on TRACE && TARGET_NATIVE_ELF && ENGINE_INTERPRETER + bool "Enable memory tracer" + default n + config DIFFTEST depends on TARGET_NATIVE_ELF bool "Enable differential testing" diff --git a/nemu/src/memory/paddr.c b/nemu/src/memory/paddr.c index ee30e70..1434f82 100644 --- a/nemu/src/memory/paddr.c +++ b/nemu/src/memory/paddr.c @@ -53,6 +53,7 @@ void init_mem() { word_t paddr_read(paddr_t addr, int len) { if (likely(in_pmem(addr))) return pmem_read(addr, len); IFDEF(CONFIG_DEVICE, return mmio_read(addr, len)); + IFDEF(CONFIG_MTRACE, printf("R " FMT_WORD "%d\n", addr, len)); out_of_bound(addr); return 0; } @@ -60,5 +61,6 @@ word_t paddr_read(paddr_t addr, int len) { void paddr_write(paddr_t addr, int len, word_t data) { if (likely(in_pmem(addr))) { pmem_write(addr, len, data); return; } IFDEF(CONFIG_DEVICE, mmio_write(addr, len, data); return); + IFDEF(CONFIG_MTRACE, printf("W " FMT_WORD "%d D" FMT_WORD "\n", addr, len, data)); out_of_bound(addr); }