diff --git a/tools/import-trace/Importer.cc b/tools/import-trace/Importer.cc index 1a46bf1c..305e43fa 100644 --- a/tools/import-trace/Importer.cc +++ b/tools/import-trace/Importer.cc @@ -146,10 +146,11 @@ bool Importer::copy_to_database(fail::ProtoIStream &ps) { LOG << "trace duration: " << std::dec << (curtime - m_time_trace_start) << " ticks" << std::endl; LOG << "Inserted " << m_row_count << " real trace events into the database" << std::endl; - - /* All addresses that were specified in the memory map get an open - EC */ - open_unused_ec_intervals(); + if (m_cover_memorymap) { + /* All addresses that were specified in the memory map get an open + EC */ + open_unused_ec_intervals(); + } /* Close all open EC intervals */ if (!close_ec_intervals()) { diff --git a/tools/import-trace/Importer.hpp b/tools/import-trace/Importer.hpp index 570ed2de..cb3ad49c 100644 --- a/tools/import-trace/Importer.hpp +++ b/tools/import-trace/Importer.hpp @@ -27,6 +27,7 @@ protected: bool m_sanitychecks; bool m_import_write_ecs; bool m_extended_trace; + bool m_cover_memorymap; fail::Database *db; fail::Architecture m_arch; fail::UniformRegisterSet *m_extended_trace_regs; @@ -120,7 +121,8 @@ protected: bool sanitycheck(std::string check_name, std::string fail_msg, std::string sql); public: Importer() : m_variant_id(0), m_elf(NULL), m_mm(NULL), m_faultspace_rightmargin('W'), - m_sanitychecks(false), m_import_write_ecs(true), m_extended_trace(false), db(NULL), + m_sanitychecks(false), m_import_write_ecs(true), m_extended_trace(false), + m_cover_memorymap(false), db(NULL), m_extended_trace_regs(NULL), m_row_count(0), m_time_trace_start(0), m_last_ip(0), m_last_instr(0), m_last_time(0) {} bool init(const std::string &variant, const std::string &benchmark, fail::Database *db); @@ -142,6 +144,7 @@ public: void set_sanitychecks(bool enabled) { m_sanitychecks = enabled; } void set_import_write_ecs(bool enabled) { m_import_write_ecs = enabled; } void set_extended_trace(bool enabled) { m_extended_trace = enabled; } + void set_cover_memorymap(bool enabled) { m_cover_memorymap = enabled; } }; #endif diff --git a/tools/import-trace/main.cc b/tools/import-trace/main.cc index 064eb4ad..61ec9a2d 100644 --- a/tools/import-trace/main.cc +++ b/tools/import-trace/main.cc @@ -118,6 +118,9 @@ int main(int argc, char *argv[]) { CommandLine::option_handle MEMORYMAP = cmd.addOption("m", "memorymap", Arg::Required, "-m/--memorymap \tMemory map to intersect with trace (if used more than once, the union of all maps will be used; default: UNSET)"); + CommandLine::option_handle COVER_MEMORYMAP = + cmd.addOption("", "cover-memorymap", Arg::None, + "--cover-memorymap \tEnforces DB entries for addresses covered by the --memorymap that don't occur in the trace"); CommandLine::option_handle NO_DELETE = cmd.addOption("", "no-delete", Arg::None, "--no-delete \tAssume there are no DB entries for this variant/benchmark, don't issue a DELETE"); @@ -252,6 +255,7 @@ int main(int argc, char *argv[]) { importer->set_sanitychecks(cmd[ENABLE_SANITYCHECKS]); importer->set_extended_trace(cmd[EXTENDED_TRACE]); importer->set_import_write_ecs(!cmd[NO_WRITE_ECS]); + importer->set_cover_memorymap(cmd[COVER_MEMORYMAP]); if (!importer->init(variant, benchmark, db)) { LOG << "importer->init() failed" << endl;