Commit 7b01cadc authored by Hejing Li's avatar Hejing Li
Browse files

Merge branch 'master' of github.com:simbricks/simbricks

parents 9ca4cd28 8bd1069a
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -26,9 +26,12 @@ ...@@ -26,9 +26,12 @@
#include <string> #include <string>
class log_parser;
class event { class event {
public: public:
uint64_t ts; uint64_t ts;
log_parser *source;
explicit event(uint64_t ts_) : ts(ts_) { explicit event(uint64_t ts_) : ts(ts_) {
} }
...@@ -39,6 +42,40 @@ class event { ...@@ -39,6 +42,40 @@ class event {
virtual void dump(std::ostream &out) = 0; virtual void dump(std::ostream &out) = 0;
}; };
class EHostInstr : public event {
public:
uint64_t pc;
bool fMemR;
bool fMemW;
EHostInstr(uint64_t ts_, uint64_t pc_) : event(ts_), pc(pc_), fMemR(false),
fMemW(false) {
}
virtual ~EHostInstr() {
}
virtual void dump(std::ostream &out) {
out << ts << ": H.INSTR pc=" << std::hex << pc << std::dec << std::endl;
}
};
class EHostHalt : public event {
public:
uint64_t pc;
EHostHalt(uint64_t ts_, uint64_t pc_) : event(ts_), pc(pc_) {
}
virtual ~EHostHalt() {
}
virtual void dump(std::ostream &out) {
out << ts << ": H.HALT pc=" << std::hex << pc << std::dec << std::endl;
}
};
class EHostCall : public event { class EHostCall : public event {
public: public:
const std::string &fun; const std::string &fun;
......
...@@ -49,11 +49,34 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name, ...@@ -49,11 +49,34 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name,
return; return;
uint64_t addr; uint64_t addr;
if (!p.consume_hex(addr) || p.consume_char('.')) if (!p.consume_hex(addr))
return; return;
if (!p.consume_char('.')) {
// instructions don't have a .X
/*if (prevInstr)
yield(prevInstr)*/
yield(std::make_shared<EHostInstr>(ts, addr));
if (const std::string *s = syms.lookup(addr)) { if (const std::string *s = syms.lookup(addr)) {
cur_event = new EHostCall(ts, *s); yield(std::make_shared<EHostCall>(ts, *s));
}
} else {
// micro-op
if (!p.skip_until_after(" : ") || !p.skip_until_after(" : "))
return;
if (p.consume_str("halt")) {
yield(std::make_shared<EHostHalt>(ts, addr));
}
/*if (p.consume_str("MemRead")) {
if (prevInstr)
prevInstr->fMemR = true;
} else if (p.consume_str("MemWrite")) {
if (prevInstr)
prevInstr->fMemW = true;
}*/
} }
} else if (comp_name_len == 18 && } else if (comp_name_len == 18 &&
!memcmp(comp_name, "system.pc.ethernet", 18)) { !memcmp(comp_name, "system.pc.ethernet", 18)) {
...@@ -70,40 +93,40 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name, ...@@ -70,40 +93,40 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name,
uint64_t size = 0; uint64_t size = 0;
if (p.consume_str("received ")) { if (p.consume_str("received ")) {
if (p.consume_str("MSI-X intr vec ") && p.consume_dec(id)) { if (p.consume_str("MSI-X intr vec ") && p.consume_dec(id)) {
cur_event = new EHostMsiX(ts, id); yield(std::make_shared<EHostMsiX>(ts, id));
} else if (p.consume_str("DMA read id ") && p.consume_dec(id) && } else if (p.consume_str("DMA read id ") && p.consume_dec(id) &&
p.consume_str(" addr ") && p.consume_hex(addr) && p.consume_str(" addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size)) { p.consume_str(" size ") && p.consume_dec(size)) {
// cosim: received DMA read id 94113551511792 addr 23697ad60 // cosim: received DMA read id 94113551511792 addr 23697ad60
// size 20 // size 20
cur_event = new EHostDmaR(ts, id, addr, size); yield(std::make_shared<EHostDmaR>(ts, id, addr, size));
} else if (p.consume_str("DMA write id ") && p.consume_dec(id) && } else if (p.consume_str("DMA write id ") && p.consume_dec(id) &&
p.consume_str(" addr ") && p.consume_hex(addr) && p.consume_str(" addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size)) { p.consume_str(" size ") && p.consume_dec(size)) {
// cosim: received DMA write id 94113551528032 addr 236972000 // cosim: received DMA write id 94113551528032 addr 236972000
// size 4 // size 4
cur_event = new EHostDmaW(ts, id, addr, size); yield(std::make_shared<EHostDmaW>(ts, id, addr, size));
} else if (p.consume_str("read completion id ") && p.consume_dec(id)) { } else if (p.consume_str("read completion id ") && p.consume_dec(id)) {
// cosim: received read completion id 94583743418112 // cosim: received read completion id 94583743418112
cur_event = new EHostMmioC(ts, id); yield(std::make_shared<EHostMmioC>(ts, id));
} else if (p.consume_str("write completion id ") && p.consume_dec(id)) { } else if (p.consume_str("write completion id ") && p.consume_dec(id)) {
// cosim: received write completion id 94583743418736 // cosim: received write completion id 94583743418736
cur_event = new EHostMmioC(ts, id); yield(std::make_shared<EHostMmioC>(ts, id));
} }
} else if (p.consume_str("sending ")) { } else if (p.consume_str("sending ")) {
if (p.consume_str("read addr ") && p.consume_hex(addr) && if (p.consume_str("read addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size) && p.consume_str(" size ") && p.consume_dec(size) &&
p.consume_str(" id ") && p.consume_dec(id)) { p.consume_str(" id ") && p.consume_dec(id)) {
// cosim: sending read addr c012a500 size 4 id 94583743418112 // cosim: sending read addr c012a500 size 4 id 94583743418112
cur_event = new EHostMmioR(ts, id, addr, size); yield(std::make_shared<EHostMmioR>(ts, id, addr, size));
} else if (p.consume_str("write addr ") && p.consume_hex(addr) && } else if (p.consume_str("write addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size) && p.consume_str(" size ") && p.consume_dec(size) &&
p.consume_str(" id ") && p.consume_dec(id)) { p.consume_str(" id ") && p.consume_dec(id)) {
// cosim: sending write addr c0108000 size 4 id 94584005188256 // cosim: sending write addr c0108000 size 4 id 94584005188256
cur_event = new EHostMmioW(ts, id, addr, size); yield(std::make_shared<EHostMmioW>(ts, id, addr, size));
} }
} else if (p.consume_str("completed DMA id ") && p.consume_dec(id)) { } else if (p.consume_str("completed DMA id ") && p.consume_dec(id)) {
cur_event = new EHostDmaC(ts, id); yield(std::make_shared<EHostDmaC>(ts, id));
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment