Skip to content

Commit c7e4c74

Browse files
committed
import-trace: --memory-type filter to focus on a specific memory type
1 parent 0f1508e commit c7e4c74

3 files changed

Lines changed: 33 additions & 2 deletions

File tree

tools/import-trace/Importer.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class Importer : public fail::AliasedRegisterable {
3030
fail::Database *db;
3131
fail::Architecture m_arch;
3232
fail::UniformRegisterSet *m_extended_trace_regs;
33+
fail::memory_type_t m_memtype;
3334

3435
/* How many rows were inserted into the database */
3536
unsigned m_row_count;
@@ -121,8 +122,8 @@ class Importer : public fail::AliasedRegisterable {
121122
public:
122123
Importer() : m_variant_id(0), m_elf(NULL), m_mm(NULL), m_faultspace_rightmargin('W'),
123124
m_sanitychecks(false), m_import_write_ecs(true), m_extended_trace(false), db(NULL),
124-
m_extended_trace_regs(NULL), m_row_count(0), m_time_trace_start(0),
125-
m_last_ip(0), m_last_instr(0), m_last_time(0) {}
125+
m_extended_trace_regs(NULL), m_memtype(fail::ANY_MEMORY), m_row_count(0),
126+
m_time_trace_start(0), m_last_ip(0), m_last_instr(0), m_last_time(0) {}
126127
bool init(const std::string &variant, const std::string &benchmark, fail::Database *db);
127128

128129
/**
@@ -142,6 +143,7 @@ class Importer : public fail::AliasedRegisterable {
142143
void set_sanitychecks(bool enabled) { m_sanitychecks = enabled; }
143144
void set_import_write_ecs(bool enabled) { m_import_write_ecs = enabled; }
144145
void set_extended_trace(bool enabled) { m_extended_trace = enabled; }
146+
void set_memory_type(fail::memory_type_t type) { m_memtype = type; }
145147
};
146148

147149
#endif

tools/import-trace/MemoryImporter.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ bool MemoryImporter::handle_ip_event(simtime_t curtime, instruction_count_t inst
1111

1212
bool MemoryImporter::handle_mem_event(simtime_t curtime, instruction_count_t instr,
1313
Trace_Event &ev) {
14+
// Filter out memory events of wrong memory type
15+
memory_type_t mtype = static_cast<memory_type_t>(ev.memtype());
16+
if(mtype != m_memtype && m_memtype != ANY_MEMORY)
17+
return true;
18+
1419
address_t from = ev.memaddr(), to = ev.memaddr() + ev.width();
1520
// Iterate over all accessed bytes
1621
// FIXME Keep complete trace information (access width)?

tools/import-trace/main.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ int main(int argc, char *argv[]) {
129129
cmd.addOption("", "extended-trace", Arg::None,
130130
"--extended-trace \tImport extended trace information if available");
131131

132+
CommandLine::option_handle MEMORY_TYPE =
133+
cmd.addOption("", "memory-type", Arg::Required,
134+
"--memory-type\t Only import memory access trace events with the specified type. (default: any)");
135+
132136
// variant 1: care (synthetic Rs)
133137
// variant 2: don't care (synthetic Ws)
134138
CommandLine::option_handle FAULTSPACE_RIGHTMARGIN =
@@ -235,6 +239,26 @@ int main(int argc, char *argv[]) {
235239
}
236240
importer->set_memorymap(memorymap);
237241

242+
if (cmd[MEMORY_TYPE]) {
243+
std::string arg(cmd[MEMORY_TYPE].first()->arg);
244+
memory_type_t type;
245+
if (arg == "ram")
246+
type = MEMTYPE_RAM;
247+
else if (arg == "flash")
248+
type = MEMTYPE_FLASH;
249+
else if (arg == "tags")
250+
type = MEMTYPE_TAGS;
251+
else if (arg == "eeprom")
252+
type = MEMTYPE_EEPROM;
253+
else if (arg == "any")
254+
type = ANY_MEMORY;
255+
else {
256+
LOG << "ERROR: unknown memory type: " << arg << std::endl;
257+
exit(-1);
258+
}
259+
importer->set_memory_type(type);
260+
}
261+
238262
if (cmd[FAULTSPACE_RIGHTMARGIN]) {
239263
std::string rightmargin(cmd[FAULTSPACE_RIGHTMARGIN].first()->arg);
240264
if (rightmargin == "W") {

0 commit comments

Comments
 (0)